@planara/core 1.4.9 → 1.6.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 (65) hide show
  1. package/dist/core/editor-renderer.d.ts +28 -12
  2. package/dist/core/editor-renderer.d.ts.map +1 -1
  3. package/dist/core/preview-renderer.d.ts +2 -1
  4. package/dist/core/preview-renderer.d.ts.map +1 -1
  5. package/dist/core/renderer.d.ts +40 -3
  6. package/dist/core/renderer.d.ts.map +1 -1
  7. package/dist/events/editor-events.d.ts +18 -0
  8. package/dist/events/editor-events.d.ts.map +1 -0
  9. package/dist/events/event-bus.d.ts +17 -0
  10. package/dist/events/event-bus.d.ts.map +1 -0
  11. package/dist/events/event-topics.d.ts +12 -0
  12. package/dist/events/event-topics.d.ts.map +1 -0
  13. package/dist/extensions/mesh-extension.d.ts +12 -0
  14. package/dist/extensions/mesh-extension.d.ts.map +1 -0
  15. package/dist/extensions/orbit-extension.d.ts +5 -2
  16. package/dist/extensions/orbit-extension.d.ts.map +1 -1
  17. package/dist/handlers/display/wireframe-handler.d.ts +37 -0
  18. package/dist/handlers/display/wireframe-handler.d.ts.map +1 -0
  19. package/dist/handlers/select/mesh-select-handler.d.ts +25 -0
  20. package/dist/handlers/select/mesh-select-handler.d.ts.map +1 -0
  21. package/dist/hub/app-hub.d.ts +7 -0
  22. package/dist/hub/app-hub.d.ts.map +1 -0
  23. package/dist/hub/editor-hub.d.ts +21 -0
  24. package/dist/hub/editor-hub.d.ts.map +1 -0
  25. package/dist/index.cjs.js +52 -7
  26. package/dist/index.d.ts +10 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.es.js +2065 -113
  29. package/dist/index.full.d.ts +315 -0
  30. package/dist/index.public.d.ts +260 -0
  31. package/dist/index.umd.js +52 -7
  32. package/dist/interfaces/api/mesh-api.d.ts +39 -0
  33. package/dist/interfaces/api/mesh-api.d.ts.map +1 -0
  34. package/dist/interfaces/api/renderer-api.d.ts +27 -0
  35. package/dist/interfaces/api/renderer-api.d.ts.map +1 -0
  36. package/dist/interfaces/handler/display-handler.d.ts +13 -0
  37. package/dist/interfaces/handler/display-handler.d.ts.map +1 -0
  38. package/dist/interfaces/handler/handler.d.ts +23 -0
  39. package/dist/interfaces/handler/handler.d.ts.map +1 -0
  40. package/dist/interfaces/handler/select-handler.d.ts +13 -0
  41. package/dist/interfaces/handler/select-handler.d.ts.map +1 -0
  42. package/dist/interfaces/manager/display-manager.d.ts +8 -0
  43. package/dist/interfaces/manager/display-manager.d.ts.map +1 -0
  44. package/dist/interfaces/manager/manager.d.ts +16 -0
  45. package/dist/interfaces/manager/manager.d.ts.map +1 -0
  46. package/dist/interfaces/manager/select-manager.d.ts +8 -0
  47. package/dist/interfaces/manager/select-manager.d.ts.map +1 -0
  48. package/dist/ioc/container.d.ts +5 -0
  49. package/dist/ioc/container.d.ts.map +1 -0
  50. package/dist/loaders/obj-loader.d.ts +8 -7
  51. package/dist/loaders/obj-loader.d.ts.map +1 -1
  52. package/dist/managers/display/display-manager.d.ts +19 -0
  53. package/dist/managers/display/display-manager.d.ts.map +1 -0
  54. package/dist/managers/select/select-manager.d.ts +19 -0
  55. package/dist/managers/select/select-manager.d.ts.map +1 -0
  56. package/dist/tsdoc-metadata.json +11 -0
  57. package/dist/types/camera/camera-position.d.ts +10 -0
  58. package/dist/types/camera/camera-position.d.ts.map +1 -0
  59. package/dist/types/event/select-event-type.d.ts +6 -0
  60. package/dist/types/event/select-event-type.d.ts.map +1 -0
  61. package/dist/utils/program-settings.d.ts +4 -3
  62. package/dist/utils/program-settings.d.ts.map +1 -1
  63. package/dist/utils/renderer-api.d.ts +21 -0
  64. package/dist/utils/renderer-api.d.ts.map +1 -0
  65. package/package.json +17 -4
@@ -1,26 +1,30 @@
1
1
  import { Renderer } from './renderer';
2
- import { Mesh } from 'ogl';
2
+ import { MeshRenderCallback, Mesh } from 'ogl';
3
3
  import { Figure } from '@planara/types';
4
+ import { EditorMesh } from '../extensions/mesh-extension';
5
+ import { EventBus } from '../events/event-bus';
4
6
  /**
5
7
  * Рендерер для редактора.
6
8
  * Добавляет сетку, оси координат и поддержку Orbit для управления камерой.
7
9
  * Наследуется от базового Renderer.
10
+ * @public
8
11
  */
9
12
  export declare class EditorRenderer extends Renderer {
13
+ private _canvas;
14
+ private _bus;
10
15
  /** Orbit-контроллер для управления камерой */
11
- private orbit;
16
+ private _orbit;
12
17
  /** Raycast для подсветки моделей при наведении */
13
- private raycast;
18
+ private _raycast;
14
19
  /** Курсор мыши для остлеживания наведения на 3D-модель */
15
- private mouse;
20
+ private _mouse;
16
21
  /** Были ли зарегистрированы обработчики событий для мыши */
17
- private isEventListenersAdded;
22
+ private _isEventListenersAdded;
18
23
  /**
19
24
  * Инициализация сцены редактора.
20
25
  * Создает сетку, оси координат и orbit-контроллер.
21
- * @param canvas - HTMLCanvasElement для рендеринга
22
26
  */
23
- constructor(canvas: HTMLCanvasElement);
27
+ constructor(_canvas: HTMLCanvasElement, _bus: EventBus);
24
28
  /**
25
29
  * Обновление состояния рендерера.
26
30
  */
@@ -28,13 +32,17 @@ export declare class EditorRenderer extends Renderer {
28
32
  /**
29
33
  * Метод для добавления фигуры.
30
34
  * Настройка raycast.
31
- * @param figure Данные фигуры: position, normal, uv
35
+ * @param figure - Данные фигуры: position, normal, uv
32
36
  */
33
- addFigure(figure: Figure): Mesh<import('ogl').Geometry, import('ogl').Program>;
37
+ addFigure(figure: Figure): EditorMesh;
34
38
  /**
35
- * Обновление uniform uHit для конкретной 3D-модели
39
+ * Устанавливает callback, который будет вызываться перед рендером конкретного меша.
40
+ *
41
+ * @param mesh - Меш, для которого нужно задать callback.
42
+ * @param f - Функция обратного вызова, выполняемая перед рендером меша.
43
+ * @internal
36
44
  */
37
- protected updateHitUniform(mesh: Mesh): void;
45
+ setMeshBeforeRender(mesh: Mesh, f: MeshRenderCallback): void;
38
46
  /**
39
47
  * Инициализация обработчиков мыши для raycast
40
48
  */
@@ -42,7 +50,15 @@ export declare class EditorRenderer extends Renderer {
42
50
  /**
43
51
  * Обработчик движения мыши
44
52
  */
45
- private handleMouseMove;
53
+ private _handleMouseMove;
54
+ /**
55
+ * Обработчик клика мыши
56
+ */
57
+ private _handleMouseClick;
58
+ /**
59
+ * Универсальная логика raycast-события
60
+ */
61
+ private _processRaycastEvent;
46
62
  /** Деструктор */
47
63
  destroy(): void;
48
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"editor-renderer.d.ts","sourceRoot":"","sources":["../../src/core/editor-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAgC,KAAK,IAAI,EAAW,MAAM,KAAK,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,8CAA8C;IAC9C,OAAO,CAAC,KAAK,CAAkB;IAE/B,kDAAkD;IAClD,OAAO,CAAC,OAAO,CAAW;IAE1B,0DAA0D;IAC1D,OAAO,CAAC,KAAK,CAAQ;IAErB,4DAA4D;IAC5D,OAAO,CAAC,qBAAqB,CAAW;IAExC;;;;OAIG;gBACgB,MAAM,EAAE,iBAAiB;IAyB5C;;OAEG;IACH,SAAS,CAAC,MAAM;IAKhB;;;;OAIG;IACa,SAAS,CAAC,MAAM,EAAE,MAAM;IA2BxC;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAIrC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,eAAe,CAkBrB;IAEF,iBAAiB;IACV,OAAO;CAaf"}
1
+ {"version":3,"file":"editor-renderer.d.ts","sourceRoot":"","sources":["../../src/core/editor-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAyC,KAAK,kBAAkB,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI/D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C;;;;;GAKG;AACH,qBACa,cAAe,SAAQ,QAAQ;IAkBtB,OAAO,CAAC,OAAO;IACb,OAAO,CAAC,IAAI;IAlBlC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAkB;IAEhC,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAW;IAE3B,0DAA0D;IAC1D,OAAO,CAAC,MAAM,CAAQ;IAEtB,4DAA4D;IAC5D,OAAO,CAAC,sBAAsB,CAAW;IAEzC;;;OAGG;gBAEyB,OAAO,EAAE,iBAAiB,EACxB,IAAI,EAAE,QAAQ;IA0B5C;;OAEG;IACH,SAAS,CAAC,MAAM;IAKhB;;;;OAIG;IACa,SAAS,CAAC,MAAM,EAAE,MAAM;IAmBxC;;;;;;OAMG;IACI,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,kBAAkB;IAI5D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAEtB;IAEF;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAEvB;IAEF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B,iBAAiB;IACV,OAAO;CAef"}
@@ -3,10 +3,11 @@ import { Renderer } from './renderer';
3
3
  * Рендерер для предпросмотра 3D-модели.
4
4
  * Настраивает сцену, камеру и орбитальную навигацию (по горизонтали).
5
5
  * Наследуется от базового Renderer.
6
+ * @alpha
6
7
  */
7
8
  export declare class PreviewRenderer extends Renderer {
8
9
  /** Orbit-контроллер для управления камерой */
9
- private orbit;
10
+ private _orbit;
10
11
  /**
11
12
  * Инициализация сцены предпросмотра.
12
13
  * @param canvas - HTMLCanvasElement для рендеринга
@@ -1 +1 @@
1
- {"version":3,"file":"preview-renderer.d.ts","sourceRoot":"","sources":["../../src/core/preview-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,8CAA8C;IAC9C,OAAO,CAAC,KAAK,CAAS;IAEtB;;;OAGG;gBACS,MAAM,EAAE,iBAAiB;IAerC;;OAEG;IACH,SAAS,CAAC,MAAM;CAIjB"}
1
+ {"version":3,"file":"preview-renderer.d.ts","sourceRoot":"","sources":["../../src/core/preview-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;gBACS,MAAM,EAAE,iBAAiB;IAerC;;OAEG;IACH,SAAS,CAAC,MAAM;CAIjB"}
@@ -1,8 +1,10 @@
1
- import { Renderer as OGLRenderer, Camera, Transform, Mesh, Geometry, Program } from 'ogl';
1
+ import { Renderer as OGLRenderer, Camera, Transform, Program, OGLRenderingContext, Mesh } from 'ogl';
2
2
  import { Figure } from '@planara/types';
3
+ import { EditorMesh } from '../extensions/mesh-extension';
3
4
  /**
4
5
  * Абстрактный базовый класс рендерера для работы с WebGL через OGL.
5
6
  * Отвечает за инициализацию сцены, камеры и цикла рендеринга.
7
+ * @public
6
8
  */
7
9
  export declare abstract class Renderer {
8
10
  /** Экземпляр рендерера OGL */
@@ -40,9 +42,44 @@ export declare abstract class Renderer {
40
42
  loop(): void;
41
43
  /**
42
44
  * Публичный метод для добавления фигуры.
43
- * @param figure Данные фигуры: position, normal, uv
45
+ * @param figure - Данные фигуры: position, normal, uv
44
46
  */
45
- addFigure(figure: Figure): Mesh<Geometry, Program>;
47
+ addFigure(figure: Figure): EditorMesh;
48
+ /**
49
+ * Добавляет фигуру в сцену и сохраняет его во внутреннем массиве.
50
+ *
51
+ * @param mesh - Фигура для добавления в сцену.
52
+ * @internal
53
+ */
54
+ addMesh(mesh: Mesh): void;
55
+ /**
56
+ * Возвращает WebGL контекст рендерера.
57
+ *
58
+ * @returns Контекст WebGL (OGLRenderingContext) текущей сцены.
59
+ * @internal
60
+ */
61
+ getContext(): OGLRenderingContext;
62
+ /**
63
+ * Убирает фигуру со сцены
64
+ *
65
+ * @param mesh - Фигура для удаления со сцены.
66
+ * @internal
67
+ */
68
+ removeMesh(mesh: Mesh): void;
69
+ /**
70
+ * Возвращает список всех фигур, находящихся в сцене.
71
+ *
72
+ * @returns Массив текущих фигур.
73
+ * @internal
74
+ */
75
+ getMeshes(): Mesh[];
76
+ /**
77
+ * Возвращает настройку для рендеринга.
78
+ *
79
+ * @returns Program для настройки рендеринга моделей.
80
+ * @internal
81
+ */
82
+ getProgram(): Program;
46
83
  /** Деструктор */
47
84
  destroy(): void;
48
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAE/F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;GAGG;AACH,8BAAsB,QAAQ;IAC5B,8BAA8B;IAC9B,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC;IAE1B,4BAA4B;IAC5B,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAE3B,uBAAuB;IACvB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAEzB,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEpC,+CAA+C;IAC/C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAE3B,8BAA8B;IAC9B,SAAS,CAAC,MAAM,EAAG,IAAI,EAAE,CAAC;IAE1B;;;OAGG;IACH,SAAS,aAAa,MAAM,EAAE,iBAAiB;IA4B/C;;OAEG;IACI,MAAM;IAMb;;OAEG;IACH,SAAS,CAAC,MAAM;IAIhB;;OAEG;IACH,SAAS,CAAC,MAAM,IAAI,IAAI;IAExB;;OAEG;IACI,IAAI;IAMX;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM;IAsB/B,iBAAiB;IACV,OAAO;CAef"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,IAAI,WAAW,EACvB,MAAM,EACN,SAAS,EAET,KAAK,OAAO,EACZ,KAAK,mBAAmB,EACxB,KAAK,IAAI,EACV,MAAM,KAAK,CAAC;AAIb,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D;;;;GAIG;AACH,8BAAsB,QAAQ;IAC5B,8BAA8B;IAC9B,SAAS,CAAC,EAAE,EAAG,WAAW,CAAC;IAE3B,4BAA4B;IAC5B,SAAS,CAAC,KAAK,EAAG,SAAS,CAAC;IAE5B,uBAAuB;IACvB,SAAS,CAAC,MAAM,EAAG,MAAM,CAAC;IAE1B,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAG,iBAAiB,CAAC;IAErC,+CAA+C;IAC/C,SAAS,CAAC,OAAO,EAAG,OAAO,CAAC;IAE5B,8BAA8B;IAC9B,SAAS,CAAC,MAAM,EAAG,IAAI,EAAE,CAAC;IAE1B;;;OAGG;IACH,SAAS,aAAa,MAAM,EAAE,iBAAiB;IA4B/C;;OAEG;IACI,MAAM;IAMb;;OAEG;IACH,SAAS,CAAC,MAAM;IAIhB;;OAEG;IACH,SAAS,CAAC,MAAM,IAAI,IAAI;IAExB;;OAEG;IACI,IAAI;IAMX;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM;IAsB/B;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIhC;;;;;OAKG;IACI,UAAU,IAAI,mBAAmB;IAIxC;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAInC;;;;;OAKG;IACI,SAAS,IAAI,IAAI,EAAE;IAI1B;;;;;OAKG;IACI,UAAU,IAAI,OAAO;IAI5B,iBAAiB;IACV,OAAO;CAef"}
@@ -0,0 +1,18 @@
1
+ import { Mesh } from 'ogl';
2
+ import { EventTopics } from './event-topics';
3
+ /**
4
+ * Типы событий редактора.
5
+ * Используются в EventEmitter для типизированной публикации и подписки на события.
6
+ * @public
7
+ */
8
+ export type EditorEvents = {
9
+ /** Событие наведения на объект (hover). Payload: объект с mesh или null */
10
+ [EventTopics.SelectHover]: {
11
+ mesh: Mesh;
12
+ } | null;
13
+ /** Событие клика по объекту. Payload: объект с mesh или null */
14
+ [EventTopics.SelectClick]: {
15
+ mesh: Mesh;
16
+ } | null;
17
+ };
18
+ //# sourceMappingURL=editor-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-events.d.ts","sourceRoot":"","sources":["../../src/events/editor-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,2EAA2E;IAC3E,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAEjD,gEAAgE;IAChE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAClD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { EditorEvents } from './editor-events';
2
+ /**
3
+ * Событийная шина редактора с топиками.
4
+ * Используется для publish/subscribe без прямых зависимостей.
5
+ * @public
6
+ */
7
+ export declare class EventBus {
8
+ private _emitter;
9
+ constructor();
10
+ /** Публикация события */
11
+ emit<K extends keyof EditorEvents>(event: K, payload: EditorEvents[K]): void;
12
+ /** Подписка на событие */
13
+ on<K extends keyof EditorEvents>(event: K, listener: (payload: EditorEvents[K]) => void): void;
14
+ /** Отписка от события */
15
+ off<K extends keyof EditorEvents>(event: K, listener: (payload: EditorEvents[K]) => void): void;
16
+ }
17
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;GAIG;AACH,qBACa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAgB;;IAMhC,yBAAyB;IACzB,IAAI,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAI5E,0BAA0B;IAC1B,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI9F,yBAAyB;IACzB,GAAG,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;CAGhG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Топики событий редактора.
3
+ * Используются для подписки/публикации через EventEmitter.
4
+ * @public
5
+ */
6
+ export declare enum EventTopics {
7
+ /** Событие наведения на объект (hover). Payload: mesh: Mesh | null */
8
+ SelectHover = "select.hover",
9
+ /** Событие клика по объекту. Payload: mesh: Mesh | null */
10
+ SelectClick = "select.click"
11
+ }
12
+ //# sourceMappingURL=event-topics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-topics.d.ts","sourceRoot":"","sources":["../../src/events/event-topics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,WAAW;IACrB,sEAAsE;IACtE,WAAW,iBAAiB;IAE5B,2DAA2D;IAC3D,WAAW,iBAAiB;CAC7B"}
@@ -0,0 +1,12 @@
1
+ import { Mesh } from 'ogl';
2
+ import { OGLRenderingContext } from 'ogl/types/core/Renderer';
3
+ import { MeshOptions } from 'ogl/types/core/Mesh';
4
+ /**
5
+ * Расширение для Mesh с добавлением поля isHit, необходимого для raycast
6
+ * @public
7
+ */
8
+ export declare class EditorMesh extends Mesh {
9
+ isHit: boolean;
10
+ constructor(gl: OGLRenderingContext, options?: Partial<MeshOptions>);
11
+ }
12
+ //# sourceMappingURL=mesh-extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-extension.d.ts","sourceRoot":"","sources":["../../src/extensions/mesh-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,qBAAa,UAAW,SAAQ,IAAI;IAC3B,KAAK,EAAG,OAAO,CAAC;gBAEX,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;CAKpE"}
@@ -1,9 +1,12 @@
1
1
  import { Orbit } from 'ogl';
2
- /** Расширение для Orbit с отслеживанием управления камерой*/
2
+ /**
3
+ * Расширение для Orbit с отслеживанием управления камерой
4
+ * @internal
5
+ */
3
6
  export declare class OrbitWithState extends Orbit {
4
7
  /** Используется ли Orbit-controls */
5
8
  isInteracting: boolean;
6
- private readonly element;
9
+ private readonly _element;
7
10
  constructor(object: any, options?: any);
8
11
  /** Очистка новых обработчиков событий */
9
12
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"orbit-extension.d.ts","sourceRoot":"","sources":["../../src/extensions/orbit-extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAE5B,6DAA6D;AAC7D,qBAAa,cAAe,SAAQ,KAAK;IACvC,qCAAqC;IAC9B,aAAa,EAAE,OAAO,CAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAEb,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ;IAY1C,yCAAyC;IAClC,OAAO;CAMf"}
1
+ {"version":3,"file":"orbit-extension.d.ts","sourceRoot":"","sources":["../../src/extensions/orbit-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAE5B;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,qCAAqC;IAC9B,aAAa,EAAE,OAAO,CAAS;IAEtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAEd,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ;IAY1C,yCAAyC;IAClC,OAAO;CAMf"}
@@ -0,0 +1,37 @@
1
+ import { IDisplayHandler } from '../../interfaces/handler/display-handler';
2
+ import { RendererApi } from '../../utils/renderer-api';
3
+ import { DisplayMode } from '@planara/types';
4
+ /**
5
+ * Хендлер для включения wireframe-режима.
6
+ * Управляет сценой через RendererApi.
7
+ * @internal
8
+ */
9
+ export declare class WireframeHandler implements IDisplayHandler {
10
+ private _api;
11
+ /** Режим отображения */
12
+ readonly mode: DisplayMode;
13
+ /** Wireframe-модели для добавленных на сцену объектов */
14
+ private _wireMeshes;
15
+ /** Настройки рендеринга для режима wireframe */
16
+ private readonly _wireMeshProgram;
17
+ /** WebGl контекст */
18
+ private readonly _context;
19
+ constructor(_api: RendererApi);
20
+ /**
21
+ * Применяет wireframe-режим к сцене.
22
+ */
23
+ handle(): void;
24
+ /**
25
+ * Отменяет wireframe-режим у сцены.
26
+ */
27
+ rollback(): void;
28
+ /**
29
+ * Освобождает ресурсы хендлера, удаляет wireframe-модели со сцены.
30
+ */
31
+ destroy(): void;
32
+ /**
33
+ * Создание wireframe-моделей для фигур на сцене.
34
+ */
35
+ private createWireMeshes;
36
+ }
37
+ //# sourceMappingURL=wireframe-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireframe-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/display/wireframe-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;GAIG;AACH,qBACa,gBAAiB,YAAW,eAAe;IAanB,OAAO,CAAC,IAAI;IAZ/C,wBAAwB;IACxB,SAAgB,IAAI,EAAE,WAAW,CAAyB;IAE1D,yDAAyD;IACzD,OAAO,CAAC,WAAW,CAAc;IAEjC,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAElD,qBAAqB;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEL,IAAI,EAAE,WAAW;IAW5D;;OAEG;IACI,MAAM;IAab;;OAEG;IACH,QAAQ,IAAI,IAAI;IAUhB;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAWzB"}
@@ -0,0 +1,25 @@
1
+ import { ISelectHandler } from '../../interfaces/handler/select-handler';
2
+ import { SelectMode } from '@planara/types';
3
+ import { RendererApi } from '../../utils/renderer-api';
4
+ import { EditorEvents } from '../../events/editor-events';
5
+ import { EventTopics } from '../../events/event-topics';
6
+ import { SelectEventType } from '../../types/event/select-event-type';
7
+ export declare class MeshSelectHandler implements ISelectHandler {
8
+ private _api;
9
+ /** Режим выборки */
10
+ readonly mode: SelectMode;
11
+ /** Текущая программа для рендеринга фигуры*/
12
+ private readonly _program;
13
+ /** Выбранная фигура */
14
+ private _selectedMesh;
15
+ constructor(_api: RendererApi);
16
+ handle(payload: EditorEvents[EventTopics.SelectHover] | EditorEvents[EventTopics.SelectClick], type: SelectEventType): void;
17
+ /** Обработчик события при наведении курсора мыши на модель */
18
+ private _onHover;
19
+ /** Обработчик события при клике на модель */
20
+ private _onClick;
21
+ /** Выключение подсветки у моделей */
22
+ rollback(): void;
23
+ destroy(): void;
24
+ }
25
+ //# sourceMappingURL=mesh-select-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-select-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/select/mesh-select-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,qBACa,iBAAkB,YAAW,cAAc;IAUnB,OAAO,CAAC,IAAI;IAT/C,oBAAoB;IACpB,SAAgB,IAAI,EAAE,UAAU,CAAmB;IAEnD,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAEnC,uBAAuB;IACvB,OAAO,CAAC,aAAa,CAAoB;gBAEE,IAAI,EAAE,WAAW;IAQ5D,MAAM,CACJ,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,EACtF,IAAI,EAAE,eAAe,GACpB,IAAI;IAcP,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAEd;IAEF,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAad;IAEF,qCAAqC;IACrC,QAAQ,IAAI,IAAI;IAIhB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,7 @@
1
+ import { EditorHub } from './editor-hub';
2
+ /**
3
+ * Создаёт или возвращает готовый экземпляр хаба.
4
+ * @public
5
+ */
6
+ export declare function createAppHub(canvas: HTMLCanvasElement): EditorHub;
7
+ //# sourceMappingURL=app-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-hub.d.ts","sourceRoot":"","sources":["../../src/hub/app-hub.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAGjE"}
@@ -0,0 +1,21 @@
1
+ import { DisplayMode, Figure, SelectMode } from '@planara/types';
2
+ import { IDisplayManager } from '../interfaces/manager/display-manager';
3
+ import { ISelectManager } from '../interfaces/manager/select-manager';
4
+ import { EditorRenderer } from '../core/editor-renderer';
5
+ /**
6
+ * Хаб для управления редактированием
7
+ * @public
8
+ */
9
+ export declare class EditorHub {
10
+ private _displayManager;
11
+ private _selectManager;
12
+ private _renderer;
13
+ constructor(_displayManager: IDisplayManager, _selectManager: ISelectManager, _renderer: EditorRenderer);
14
+ setDisplayMode(mode: DisplayMode): void;
15
+ setSelectMode(mode: SelectMode): void;
16
+ resizeRenderer(): void;
17
+ updateRenderer(): void;
18
+ addFigure(figure: Figure): void;
19
+ destroy(): void;
20
+ }
21
+ //# sourceMappingURL=editor-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-hub.d.ts","sourceRoot":"","sources":["../../src/hub/editor-hub.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;GAGG;AACH,qBACa,SAAS;IAES,OAAO,CAAC,eAAe;IACxB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;gBAFR,eAAe,EAAE,eAAe,EACjC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,cAAc;IAK7D,cAAc,CAAC,IAAI,EAAE,WAAW;IAIhC,aAAa,CAAC,IAAI,EAAE,UAAU;IAI9B,cAAc;IAId,cAAc;IAId,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,OAAO;CAKR"}
package/dist/index.cjs.js CHANGED
@@ -1,4 +1,17 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("ogl");function d(s){const e=`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("ogl");var Je=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Ye={};/*! *****************************************************************************
2
+ Copyright (C) Microsoft. All rights reserved.
3
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
+ this file except in compliance with the License. You may obtain a copy of the
5
+ License at http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
9
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
10
+ MERCHANTABLITY OR NON-INFRINGEMENT.
11
+
12
+ See the Apache Version 2.0 License for specific language governing permissions
13
+ and limitations under the License.
14
+ ***************************************************************************** */var Qe;function Et(){if(Qe)return Ye;Qe=1;var t;return(function(e){(function(r){var i=typeof globalThis=="object"?globalThis:typeof Je=="object"?Je:typeof self=="object"?self:typeof this=="object"?this:E(),o=n(e);typeof i.Reflect<"u"&&(o=n(i.Reflect,o)),r(o,i),typeof i.Reflect>"u"&&(i.Reflect=e);function n(_,S){return function(j,G){Object.defineProperty(_,j,{configurable:!0,writable:!0,value:G}),S&&S(j,G)}}function l(){try{return Function("return this;")()}catch{}}function w(){try{return(0,eval)("(function() { return this; })()")}catch{}}function E(){return l()||w()}})(function(r,i){var o=Object.prototype.hasOwnProperty,n=typeof Symbol=="function",l=n&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",w=n&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",E=typeof Object.create=="function",_={__proto__:[]}instanceof Array,S=!E&&!_,j={create:E?function(){return me(Object.create(null))}:_?function(){return me({__proto__:null})}:function(){return me({})},has:S?function(s,a){return o.call(s,a)}:function(s,a){return a in s},get:S?function(s,a){return o.call(s,a)?s[a]:void 0}:function(s,a){return s[a]}},G=Object.getPrototypeOf(Function),V=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:mt(),Y=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:wt(),ee=typeof WeakMap=="function"?WeakMap:Mt(),z=n?Symbol.for("@reflect-metadata:registry"):void 0,Q=yt(),ne=_t(Q);function ie(s,a,u,h){if(b(u)){if(!$e(s))throw new TypeError;if(!We(a))throw new TypeError;return se(s,a)}else{if(!$e(s))throw new TypeError;if(!A(a))throw new TypeError;if(!A(h)&&!b(h)&&!X(h))throw new TypeError;return X(h)&&(h=void 0),u=$(u),pe(s,a,u,h)}}r("decorate",ie);function c(s,a){function u(h,M){if(!A(h))throw new TypeError;if(!b(M)&&!vt(M))throw new TypeError;De(s,a,h,M)}return u}r("metadata",c);function f(s,a,u,h){if(!A(u))throw new TypeError;return b(h)||(h=$(h)),De(s,a,u,h)}r("defineMetadata",f);function d(s,a,u){if(!A(a))throw new TypeError;return b(u)||(u=$(u)),Ae(s,a,u)}r("hasMetadata",d);function m(s,a,u){if(!A(a))throw new TypeError;return b(u)||(u=$(u)),ye(s,a,u)}r("hasOwnMetadata",m);function O(s,a,u){if(!A(a))throw new TypeError;return b(u)||(u=$(u)),ke(s,a,u)}r("getMetadata",O);function x(s,a,u){if(!A(a))throw new TypeError;return b(u)||(u=$(u)),je(s,a,u)}r("getOwnMetadata",x);function R(s,a){if(!A(s))throw new TypeError;return b(a)||(a=$(a)),He(s,a)}r("getMetadataKeys",R);function N(s,a){if(!A(s))throw new TypeError;return b(a)||(a=$(a)),Ne(s,a)}r("getOwnMetadataKeys",N);function q(s,a,u){if(!A(a))throw new TypeError;if(b(u)||(u=$(u)),!A(a))throw new TypeError;b(u)||(u=$(u));var h=te(a,u,!1);return b(h)?!1:h.OrdinaryDeleteMetadata(s,a,u)}r("deleteMetadata",q);function se(s,a){for(var u=s.length-1;u>=0;--u){var h=s[u],M=h(a);if(!b(M)&&!X(M)){if(!We(M))throw new TypeError;a=M}}return a}function pe(s,a,u,h){for(var M=s.length-1;M>=0;--M){var L=s[M],k=L(a,u,h);if(!b(k)&&!X(k)){if(!A(k))throw new TypeError;h=k}}return h}function Ae(s,a,u){var h=ye(s,a,u);if(h)return!0;var M=ge(a);return X(M)?!1:Ae(s,M,u)}function ye(s,a,u){var h=te(a,u,!1);return b(h)?!1:Be(h.OrdinaryHasOwnMetadata(s,a,u))}function ke(s,a,u){var h=ye(s,a,u);if(h)return je(s,a,u);var M=ge(a);if(!X(M))return ke(s,M,u)}function je(s,a,u){var h=te(a,u,!1);if(!b(h))return h.OrdinaryGetOwnMetadata(s,a,u)}function De(s,a,u,h){var M=te(u,h,!0);M.OrdinaryDefineOwnMetadata(s,a,u,h)}function He(s,a){var u=Ne(s,a),h=ge(s);if(h===null)return u;var M=He(h,a);if(M.length<=0)return u;if(u.length<=0)return M;for(var L=new Y,k=[],P=0,v=u;P<v.length;P++){var p=v[P],y=L.has(p);y||(L.add(p),k.push(p))}for(var g=0,C=M;g<C.length;g++){var p=C[g],y=L.has(p);y||(L.add(p),k.push(p))}return k}function Ne(s,a){var u=te(s,a,!1);return u?u.OrdinaryOwnMetadataKeys(s,a):[]}function Fe(s){if(s===null)return 1;switch(typeof s){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return s===null?1:6;default:return 6}}function b(s){return s===void 0}function X(s){return s===null}function ft(s){return typeof s=="symbol"}function A(s){return typeof s=="object"?s!==null:typeof s=="function"}function ct(s,a){switch(Fe(s)){case 0:return s;case 1:return s;case 2:return s;case 3:return s;case 4:return s;case 5:return s}var u="string",h=Ge(s,l);if(h!==void 0){var M=h.call(s,u);if(A(M))throw new TypeError;return M}return ht(s)}function ht(s,a){var u,h,M;{var L=s.toString;if(oe(L)){var h=L.call(s);if(!A(h))return h}var u=s.valueOf;if(oe(u)){var h=u.call(s);if(!A(h))return h}}throw new TypeError}function Be(s){return!!s}function dt(s){return""+s}function $(s){var a=ct(s);return ft(a)?a:dt(a)}function $e(s){return Array.isArray?Array.isArray(s):s instanceof Object?s instanceof Array:Object.prototype.toString.call(s)==="[object Array]"}function oe(s){return typeof s=="function"}function We(s){return typeof s=="function"}function vt(s){switch(Fe(s)){case 3:return!0;case 4:return!0;default:return!1}}function _e(s,a){return s===a||s!==s&&a!==a}function Ge(s,a){var u=s[a];if(u!=null){if(!oe(u))throw new TypeError;return u}}function Ve(s){var a=Ge(s,w);if(!oe(a))throw new TypeError;var u=a.call(s);if(!A(u))throw new TypeError;return u}function ze(s){return s.value}function Ue(s){var a=s.next();return a.done?!1:a}function qe(s){var a=s.return;a&&a.call(s)}function ge(s){var a=Object.getPrototypeOf(s);if(typeof s!="function"||s===G||a!==G)return a;var u=s.prototype,h=u&&Object.getPrototypeOf(u);if(h==null||h===Object.prototype)return a;var M=h.constructor;return typeof M!="function"||M===s?a:M}function pt(){var s;!b(z)&&typeof i.Reflect<"u"&&!(z in i.Reflect)&&typeof i.Reflect.defineMetadata=="function"&&(s=gt(i.Reflect));var a,u,h,M=new ee,L={registerProvider:k,getProvider:v,setProvider:y};return L;function k(g){if(!Object.isExtensible(L))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case s===g:break;case b(a):a=g;break;case a===g:break;case b(u):u=g;break;case u===g:break;default:h===void 0&&(h=new Y),h.add(g);break}}function P(g,C){if(!b(a)){if(a.isProviderFor(g,C))return a;if(!b(u)){if(u.isProviderFor(g,C))return a;if(!b(h))for(var I=Ve(h);;){var T=Ue(I);if(!T)return;var F=ze(T);if(F.isProviderFor(g,C))return qe(I),F}}}if(!b(s)&&s.isProviderFor(g,C))return s}function v(g,C){var I=M.get(g),T;return b(I)||(T=I.get(C)),b(T)&&(T=P(g,C),b(T)||(b(I)&&(I=new V,M.set(g,I)),I.set(C,T))),T}function p(g){if(b(g))throw new TypeError;return a===g||u===g||!b(h)&&h.has(g)}function y(g,C,I){if(!p(I))throw new Error("Metadata provider not registered.");var T=v(g,C);if(T!==I){if(!b(T))return!1;var F=M.get(g);b(F)&&(F=new V,M.set(g,F)),F.set(C,I)}return!0}}function yt(){var s;return!b(z)&&A(i.Reflect)&&Object.isExtensible(i.Reflect)&&(s=i.Reflect[z]),b(s)&&(s=pt()),!b(z)&&A(i.Reflect)&&Object.isExtensible(i.Reflect)&&Object.defineProperty(i.Reflect,z,{enumerable:!1,configurable:!1,writable:!1,value:s}),s}function _t(s){var a=new ee,u={isProviderFor:function(p,y){var g=a.get(p);return b(g)?!1:g.has(y)},OrdinaryDefineOwnMetadata:k,OrdinaryHasOwnMetadata:M,OrdinaryGetOwnMetadata:L,OrdinaryOwnMetadataKeys:P,OrdinaryDeleteMetadata:v};return Q.registerProvider(u),u;function h(p,y,g){var C=a.get(p),I=!1;if(b(C)){if(!g)return;C=new V,a.set(p,C),I=!0}var T=C.get(y);if(b(T)){if(!g)return;if(T=new V,C.set(y,T),!s.setProvider(p,y,u))throw C.delete(y),I&&a.delete(p),new Error("Wrong provider for target.")}return T}function M(p,y,g){var C=h(y,g,!1);return b(C)?!1:Be(C.has(p))}function L(p,y,g){var C=h(y,g,!1);if(!b(C))return C.get(p)}function k(p,y,g,C){var I=h(g,C,!0);I.set(p,y)}function P(p,y){var g=[],C=h(p,y,!1);if(b(C))return g;for(var I=C.keys(),T=Ve(I),F=0;;){var Ze=Ue(T);if(!Ze)return g.length=F,g;var bt=ze(Ze);try{g[F]=bt}catch(Ot){try{qe(T)}finally{throw Ot}}F++}}function v(p,y,g){var C=h(y,g,!1);if(b(C)||!C.delete(p))return!1;if(C.size===0){var I=a.get(y);b(I)||(I.delete(g),I.size===0&&a.delete(I))}return!0}}function gt(s){var a=s.defineMetadata,u=s.hasOwnMetadata,h=s.getOwnMetadata,M=s.getOwnMetadataKeys,L=s.deleteMetadata,k=new ee,P={isProviderFor:function(v,p){var y=k.get(v);return!b(y)&&y.has(p)?!0:M(v,p).length?(b(y)&&(y=new Y,k.set(v,y)),y.add(p),!0):!1},OrdinaryDefineOwnMetadata:a,OrdinaryHasOwnMetadata:u,OrdinaryGetOwnMetadata:h,OrdinaryOwnMetadataKeys:M,OrdinaryDeleteMetadata:L};return P}function te(s,a,u){var h=Q.getProvider(s,a);if(!b(h))return h;if(u){if(Q.setProvider(s,a,ne))return ne;throw new Error("Illegal state.")}}function mt(){var s={},a=[],u=(function(){function P(v,p,y){this._index=0,this._keys=v,this._values=p,this._selector=y}return P.prototype["@@iterator"]=function(){return this},P.prototype[w]=function(){return this},P.prototype.next=function(){var v=this._index;if(v>=0&&v<this._keys.length){var p=this._selector(this._keys[v],this._values[v]);return v+1>=this._keys.length?(this._index=-1,this._keys=a,this._values=a):this._index++,{value:p,done:!1}}return{value:void 0,done:!0}},P.prototype.throw=function(v){throw this._index>=0&&(this._index=-1,this._keys=a,this._values=a),v},P.prototype.return=function(v){return this._index>=0&&(this._index=-1,this._keys=a,this._values=a),{value:v,done:!0}},P})(),h=(function(){function P(){this._keys=[],this._values=[],this._cacheKey=s,this._cacheIndex=-2}return Object.defineProperty(P.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),P.prototype.has=function(v){return this._find(v,!1)>=0},P.prototype.get=function(v){var p=this._find(v,!1);return p>=0?this._values[p]:void 0},P.prototype.set=function(v,p){var y=this._find(v,!0);return this._values[y]=p,this},P.prototype.delete=function(v){var p=this._find(v,!1);if(p>=0){for(var y=this._keys.length,g=p+1;g<y;g++)this._keys[g-1]=this._keys[g],this._values[g-1]=this._values[g];return this._keys.length--,this._values.length--,_e(v,this._cacheKey)&&(this._cacheKey=s,this._cacheIndex=-2),!0}return!1},P.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=s,this._cacheIndex=-2},P.prototype.keys=function(){return new u(this._keys,this._values,M)},P.prototype.values=function(){return new u(this._keys,this._values,L)},P.prototype.entries=function(){return new u(this._keys,this._values,k)},P.prototype["@@iterator"]=function(){return this.entries()},P.prototype[w]=function(){return this.entries()},P.prototype._find=function(v,p){if(!_e(this._cacheKey,v)){this._cacheIndex=-1;for(var y=0;y<this._keys.length;y++)if(_e(this._keys[y],v)){this._cacheIndex=y;break}}return this._cacheIndex<0&&p&&(this._cacheIndex=this._keys.length,this._keys.push(v),this._values.push(void 0)),this._cacheIndex},P})();return h;function M(P,v){return P}function L(P,v){return v}function k(P,v){return[P,v]}}function wt(){var s=(function(){function a(){this._map=new V}return Object.defineProperty(a.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),a.prototype.has=function(u){return this._map.has(u)},a.prototype.add=function(u){return this._map.set(u,u),this},a.prototype.delete=function(u){return this._map.delete(u)},a.prototype.clear=function(){this._map.clear()},a.prototype.keys=function(){return this._map.keys()},a.prototype.values=function(){return this._map.keys()},a.prototype.entries=function(){return this._map.entries()},a.prototype["@@iterator"]=function(){return this.keys()},a.prototype[w]=function(){return this.keys()},a})();return s}function Mt(){var s=16,a=j.create(),u=h();return(function(){function v(){this._key=h()}return v.prototype.has=function(p){var y=M(p,!1);return y!==void 0?j.has(y,this._key):!1},v.prototype.get=function(p){var y=M(p,!1);return y!==void 0?j.get(y,this._key):void 0},v.prototype.set=function(p,y){var g=M(p,!0);return g[this._key]=y,this},v.prototype.delete=function(p){var y=M(p,!1);return y!==void 0?delete y[this._key]:!1},v.prototype.clear=function(){this._key=h()},v})();function h(){var v;do v="@@WeakMap@@"+P();while(j.has(a,v));return a[v]=!0,v}function M(v,p){if(!o.call(v,u)){if(!p)return;Object.defineProperty(v,u,{value:j.create()})}return v[u]}function L(v,p){for(var y=0;y<p;++y)v[y]=Math.random()*255|0;return v}function k(v){if(typeof Uint8Array=="function"){var p=new Uint8Array(v);return typeof crypto<"u"?crypto.getRandomValues(p):typeof msCrypto<"u"?msCrypto.getRandomValues(p):L(p,v),p}return L(new Array(v),v)}function P(){var v=k(s);v[6]=v[6]&79|64,v[8]=v[8]&191|128;for(var p="",y=0;y<s;++y){var g=v[y];(y===4||y===6||y===8)&&(p+="-"),g<16&&(p+="0"),p+=g.toString(16).toLowerCase()}return p}}function me(s){return s.__=void 0,delete s.__,s}})})(t||(t={})),Ye}Et();function Rt(t){const e=`
2
15
  attribute vec3 position;
3
16
  attribute vec3 normal;
4
17
 
@@ -12,19 +25,51 @@
12
25
  vNormal = normalize(normalMatrix * normal);
13
26
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
14
27
  }
15
- `,t=`
28
+ `,r=`
16
29
  precision highp float;
17
30
 
18
31
  uniform float uHit;
32
+ uniform float uSelected;
19
33
 
20
34
  varying vec3 vNormal;
21
35
 
22
36
  void main() {
23
37
  vec3 normal = normalize(vNormal);
24
38
  float lighting = dot(normal, normalize(vec3(-0.3, 0.8, 0.6)));
25
- vec3 color = mix(vec3(0.2, 0.8, 1.0), vec3(1.0, 0.2, 0.8), uHit);
26
- gl_FragColor.rgb = color + lighting * 0.1;
27
- gl_FragColor.a = 1.0;
39
+
40
+ // Базовый цвет меша
41
+ vec3 baseColor = vec3(0.2, 0.8, 1.0);
42
+
43
+ // Цвет при наведении (hover)
44
+ vec3 hoverColor = vec3(1.0, 1.0, 0.1);
45
+
46
+ // Цвет при клике (selected)
47
+ vec3 selectedColor = vec3(1.0, 0.3, 0.3);
48
+
49
+ // Применяем логику подсветки:
50
+ // приоритет: выделение > hover > обычный цвет
51
+ vec3 color = mix(baseColor, hoverColor, uHit);
52
+ color = mix(color, selectedColor, uSelected);
53
+
54
+ // Немного света для объема
55
+ color += lighting * 0.1;
56
+
57
+ gl_FragColor = vec4(color, 1.0);
28
58
  }
29
- `;return new r.Program(s,{vertex:e,fragment:t,cullFace:!1,uniforms:{uHit:{value:0}}})}class h{gl;scene;camera;canvas;program;meshes;constructor(e){this.canvas=e,this.gl=new r.Renderer({canvas:e,dpr:2}),this.gl.setSize(e.clientWidth,e.clientHeight),this.gl.gl.clearColor(.1,.1,.1,1),this.scene=new r.Transform,this.camera=new r.Camera(this.gl.gl,{fov:45}),this.camera.position.set(1,1,7),this.camera.lookAt([0,0,0]),this.program=d(this.gl.gl),this.meshes=[]}resize(){this.gl.setSize(this.canvas.width,this.canvas.height),this.camera.perspective({aspect:this.canvas.width/this.canvas.height})}render(){this.gl.render({scene:this.scene,camera:this.camera})}update(){}loop(){this.update(),this.render(),requestAnimationFrame(this.loop.bind(this))}addFigure(e){const t=new r.Geometry(this.gl.gl,{position:{size:3,data:new Float32Array(e.position)},normal:{size:3,data:new Float32Array(e.normal??[])},uv:{size:2,data:new Float32Array(e.uv??[])}}),i=new r.Mesh(this.gl.gl,{geometry:t,program:this.program});return i.setParent(this.scene),this.meshes.push(i),i}destroy(){this.meshes&&(this.meshes.length=0,this.meshes=[]),this.scene=null,this.camera=null,this.program=null,this.gl=null,this.canvas=null}}class p extends r.Orbit{isInteracting=!1;element;constructor(e,t={}){super(e,t),this.element=t.element||document,this.element.addEventListener("mousedown",()=>this.isInteracting=!0),this.element.addEventListener("mouseup",()=>this.isInteracting=!1),this.element.addEventListener("touchstart",()=>this.isInteracting=!0),this.element.addEventListener("touchend",()=>this.isInteracting=!1)}destroy(){this.element.removeEventListener("mousedown",()=>this.isInteracting=!0),this.element.removeEventListener("mouseup",()=>this.isInteracting=!1),this.element.removeEventListener("touchstart",()=>this.isInteracting=!0),this.element.removeEventListener("touchend",()=>this.isInteracting=!1)}}class g extends h{orbit;raycast;mouse;isEventListenersAdded;constructor(e){super(e);const t=new r.GridHelper(this.gl.gl,{size:10,divisions:10});t.position.y=-.001,t.setParent(this.scene),new r.AxesHelper(this.gl.gl,{size:6,symmetric:!0}).setParent(this.scene),this.orbit=new p(this.camera,{element:this.canvas}),this.raycast=new r.Raycast,this.mouse=new r.Vec2,this.isEventListenersAdded=!1}update(){this.orbit?.update()}addFigure(e){const t=super.addFigure(e);if(t.geometry){const i=t.geometry.constructor.name;t.geometry.raycast=i.includes("Sphere")?"sphere":"box"}return t.isHit=!1,t.onBeforeRender(({mesh:i})=>{this.updateHitUniform(i)}),this.isEventListenersAdded||this.initMouseListeners(),t}updateHitUniform(e){this.program.uniforms.uHit.value=e.isHit?1:0}initMouseListeners(){document.addEventListener("mousemove",this.handleMouseMove,!1),this.isEventListenersAdded=!0}handleMouseMove=e=>{if(this.orbit.isInteracting)return;this.mouse.set(2*(e.x/this.gl.width)-1,2*(1-e.y/this.gl.height)-1),this.raycast.castMouse(this.camera,this.mouse),this.meshes.forEach(i=>i.isHit=!1),this.raycast.intersectBounds(this.meshes).forEach(i=>i.isHit=!0)};destroy(){this.isEventListenersAdded&&(window.removeEventListener("mousemove",this.handleMouseMove,!1),this.isEventListenersAdded=!1),this.orbit=null,this.raycast=null,this.mouse=null,super.destroy()}}class f extends h{orbit;constructor(e){super(e),this.orbit=new r.Orbit(this.camera,{element:this.canvas,target:new r.Vec3(0,0,0),minPolarAngle:Math.PI/2,maxPolarAngle:Math.PI/2,enableRotate:!0,enableZoom:!1,enablePan:!1})}update(){this.orbit?.update()}}class b{type;position;normal;uv;material;constructor(e){this.type=e.type,this.position=e.position,this.normal=e.normal??[],this.uv=e.uv??[],this.material=e.material}}var v=(s=>(s[s.Cube=0]="Cube",s[s.Sphere=1]="Sphere",s[s.Plane=2]="Plane",s[s.Cylinder=3]="Cylinder",s[s.Custom=4]="Custom",s))(v||{});class y{positions=[];normals=[];uvs=[];tmpPositions=[];tmpNormals=[];tmpUVs=[];load(e){const t=e.split(`
30
- `);for(const o of t){if(!o.trim()||o.startsWith("#"))continue;const n=o.trim().split(/\s+/);switch(n[0]){case"v":this.tmpPositions.push(n.slice(1).map(Number));break;case"vn":this.tmpNormals.push(n.slice(1).map(Number));break;case"vt":this.tmpUVs.push(n.slice(1).map(Number));break;case"f":this.processFaceLine(n);break}}const i={type:v.Custom,position:this.positions,...this.normals.length>0&&{normal:this.normals},...this.uvs.length>0&&{uv:this.uvs}};return new b(i)}processFaceLine(e){for(let t=1;t<e.length;t++){const i=e[t];if(!i)continue;const[o,n,l]=i.split("/"),m=o?parseInt(o,10):void 0,c=n?parseInt(n,10):void 0,u=l?parseInt(l,10):void 0;if(m!==void 0){const a=this.tmpPositions[m-1];a&&this.positions.push(...a)}if(c!==void 0){const a=this.tmpUVs[c-1];a&&this.uvs.push(...a)}if(u!==void 0){const a=this.tmpNormals[u-1];a&&this.normals.push(...a)}}}}exports.EditorRenderer=g;exports.ObjLoader=y;exports.PreviewRenderer=f;exports.Renderer=h;exports.createProgram=d;
59
+ `;return new D.Program(t,{vertex:e,fragment:r,cullFace:!1,uniforms:{uHit:{value:0},uSelected:{value:0}}})}class nt extends D.Mesh{isHit;constructor(e,r){super(e,r),this.isHit=!1}}class Ie{gl;scene;camera;canvas;program;meshes;constructor(e){this.canvas=e,this.gl=new D.Renderer({canvas:e,dpr:2}),this.gl.setSize(e.clientWidth,e.clientHeight),this.gl.gl.clearColor(.1,.1,.1,1),this.scene=new D.Transform,this.camera=new D.Camera(this.gl.gl,{fov:45}),this.camera.position.set(1,1,7),this.camera.lookAt([0,0,0]),this.program=Rt(this.gl.gl),this.meshes=[]}resize(){this.gl.setSize(this.canvas.width,this.canvas.height),this.camera.perspective({aspect:this.canvas.width/this.canvas.height})}render(){this.gl.render({scene:this.scene,camera:this.camera})}update(){}loop(){this.update(),this.render(),requestAnimationFrame(this.loop.bind(this))}addFigure(e){const r=new D.Geometry(this.gl.gl,{position:{size:3,data:new Float32Array(e.position)},normal:{size:3,data:new Float32Array(e.normal??[])},uv:{size:2,data:new Float32Array(e.uv??[])}}),i=new nt(this.gl.gl,{geometry:r,program:this.program});return i.setParent(this.scene),this.meshes.push(i),i}addMesh(e){this.scene.addChild(e)}getContext(){return this.gl.gl}removeMesh(e){this.scene.removeChild(e)}getMeshes(){return this.meshes}getProgram(){return this.program}destroy(){this.meshes&&(this.meshes.length=0,this.meshes=[]),this.scene=null,this.camera=null,this.program=null,this.gl=null,this.canvas=null}}class Pt extends D.Orbit{isInteracting=!1;_element;constructor(e,r={}){super(e,r),this._element=r.element||document,this._element.addEventListener("mousedown",()=>this.isInteracting=!0),this._element.addEventListener("mouseup",()=>this.isInteracting=!1),this._element.addEventListener("touchstart",()=>this.isInteracting=!0),this._element.addEventListener("touchend",()=>this.isInteracting=!1)}destroy(){this._element.removeEventListener("mousedown",()=>this.isInteracting=!0),this._element.removeEventListener("mouseup",()=>this.isInteracting=!1),this._element.removeEventListener("touchstart",()=>this.isInteracting=!0),this._element.removeEventListener("touchend",()=>this.isInteracting=!1)}}var Me;(function(t){t[t.Transient=0]="Transient",t[t.Singleton=1]="Singleton",t[t.ResolutionScoped=2]="ResolutionScoped",t[t.ContainerScoped=3]="ContainerScoped"})(Me||(Me={}));const H=Me;/*! *****************************************************************************
60
+ Copyright (c) Microsoft Corporation.
61
+
62
+ Permission to use, copy, modify, and/or distribute this software for any
63
+ purpose with or without fee is hereby granted.
64
+
65
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
66
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
67
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
68
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
69
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
70
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
71
+ PERFORMANCE OF THIS SOFTWARE.
72
+ ***************************************************************************** */var be=function(t,e){return be=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)i.hasOwnProperty(o)&&(r[o]=i[o])},be(t,e)};function Le(t,e){be(t,e);function r(){this.constructor=t}t.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}function Ct(t,e,r,i){function o(n){return n instanceof r?n:new r(function(l){l(n)})}return new(r||(r=Promise))(function(n,l){function w(S){try{_(i.next(S))}catch(j){l(j)}}function E(S){try{_(i.throw(S))}catch(j){l(j)}}function _(S){S.done?n(S.value):o(S.value).then(w,E)}_((i=i.apply(t,[])).next())})}function St(t,e){var r={label:0,sent:function(){if(n[0]&1)throw n[1];return n[1]},trys:[],ops:[]},i,o,n,l;return l={next:w(0),throw:w(1),return:w(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function w(_){return function(S){return E([_,S])}}function E(_){if(i)throw new TypeError("Generator is already executing.");for(;r;)try{if(i=1,o&&(n=_[0]&2?o.return:_[0]?o.throw||((n=o.return)&&n.call(o),0):o.next)&&!(n=n.call(o,_[1])).done)return n;switch(o=0,n&&(_=[_[0]&2,n.value]),_[0]){case 0:case 1:n=_;break;case 4:return r.label++,{value:_[1],done:!1};case 5:r.label++,o=_[1],_=[0];continue;case 7:_=r.ops.pop(),r.trys.pop();continue;default:if(n=r.trys,!(n=n.length>0&&n[n.length-1])&&(_[0]===6||_[0]===2)){r=0;continue}if(_[0]===3&&(!n||_[1]>n[0]&&_[1]<n[3])){r.label=_[1];break}if(_[0]===6&&r.label<n[1]){r.label=n[1],n=_;break}if(n&&r.label<n[2]){r.label=n[2],r.ops.push(_);break}n[2]&&r.ops.pop(),r.trys.pop();continue}_=e.call(t,r)}catch(S){_=[6,S],o=0}finally{i=n=0}if(_[0]&5)throw _[1];return{value:_[0]?_[1]:void 0,done:!0}}}function ae(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],i=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function he(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var i=r.call(t),o,n=[],l;try{for(;(e===void 0||e-- >0)&&!(o=i.next()).done;)n.push(o.value)}catch(w){l={error:w}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(l)throw l.error}}return n}function Z(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(he(arguments[e]));return t}var Oe="injectionTokens";function xt(t){var e=Reflect.getMetadata("design:paramtypes",t)||[],r=Reflect.getOwnMetadata(Oe,t)||{};return Object.keys(r).forEach(function(i){e[+i]=r[i]}),e}function it(t,e){return function(r,i,o){var n=Reflect.getOwnMetadata(Oe,r)||{};n[o]=t,Reflect.defineMetadata(Oe,n,r)}}function st(t){return!!t.useClass}function Ee(t){return!!t.useFactory}var ot=(function(){function t(e){this.wrap=e,this.reflectMethods=["get","getPrototypeOf","setPrototypeOf","getOwnPropertyDescriptor","defineProperty","has","set","deleteProperty","apply","construct","ownKeys"]}return t.prototype.createProxy=function(e){var r=this,i={},o=!1,n,l=function(){return o||(n=e(r.wrap()),o=!0),n};return new Proxy(i,this.createHandler(l))},t.prototype.createHandler=function(e){var r={},i=function(o){r[o]=function(){for(var n=[],l=0;l<arguments.length;l++)n[l]=arguments[l];n[0]=e();var w=Reflect[o];return w.apply(void 0,Z(n))}};return this.reflectMethods.forEach(i),r},t})();function K(t){return typeof t=="string"||typeof t=="symbol"}function It(t){return typeof t=="object"&&"token"in t&&"multiple"in t}function Xe(t){return typeof t=="object"&&"token"in t&&"transform"in t}function Lt(t){return typeof t=="function"||t instanceof ot}function fe(t){return!!t.useToken}function ce(t){return t.useValue!=null}function Tt(t){return st(t)||ce(t)||fe(t)||Ee(t)}var Te=(function(){function t(){this._registryMap=new Map}return t.prototype.entries=function(){return this._registryMap.entries()},t.prototype.getAll=function(e){return this.ensure(e),this._registryMap.get(e)},t.prototype.get=function(e){this.ensure(e);var r=this._registryMap.get(e);return r[r.length-1]||null},t.prototype.set=function(e,r){this.ensure(e),this._registryMap.get(e).push(r)},t.prototype.setAll=function(e,r){this._registryMap.set(e,r)},t.prototype.has=function(e){return this.ensure(e),this._registryMap.get(e).length>0},t.prototype.clear=function(){this._registryMap.clear()},t.prototype.ensure=function(e){this._registryMap.has(e)||this._registryMap.set(e,[])},t})(),At=(function(t){Le(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e})(Te),ue=(function(){function t(){this.scopedResolutions=new Map}return t})();function kt(t,e){if(t===null)return"at position #"+e;var r=t.split(",")[e].trim();return'"'+r+'" at position #'+e}function jt(t,e,r){return r===void 0&&(r=" "),Z([t],e.message.split(`
73
+ `).map(function(i){return r+i})).join(`
74
+ `)}function Dt(t,e,r){var i=he(t.toString().match(/constructor\(([\w, ]+)\)/)||[],2),o=i[1],n=o===void 0?null:o,l=kt(n,e);return jt("Cannot inject the dependency "+l+' of "'+t.name+'" constructor. Reason:',r)}function Ht(t){if(typeof t.dispose!="function")return!1;var e=t.dispose;return!(e.length>0)}var Nt=(function(t){Le(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e})(Te),Ft=(function(t){Le(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e})(Te),Bt=(function(){function t(){this.preResolution=new Nt,this.postResolution=new Ft}return t})(),at=new Map,$t=(function(){function t(e){this.parent=e,this._registry=new At,this.interceptors=new Bt,this.disposed=!1,this.disposables=new Set}return t.prototype.register=function(e,r,i){i===void 0&&(i={lifecycle:H.Transient}),this.ensureNotDisposed();var o;if(Tt(r)?o=r:o={useClass:r},fe(o))for(var n=[e],l=o;l!=null;){var w=l.useToken;if(n.includes(w))throw new Error("Token registration cycle detected! "+Z(n,[w]).join(" -> "));n.push(w);var E=this._registry.get(w);E&&fe(E.provider)?l=E.provider:l=null}if((i.lifecycle===H.Singleton||i.lifecycle==H.ContainerScoped||i.lifecycle==H.ResolutionScoped)&&(ce(o)||Ee(o)))throw new Error('Cannot use lifecycle "'+H[i.lifecycle]+'" with ValueProviders or FactoryProviders');return this._registry.set(e,{provider:o,options:i}),this},t.prototype.registerType=function(e,r){return this.ensureNotDisposed(),K(r)?this.register(e,{useToken:r}):this.register(e,{useClass:r})},t.prototype.registerInstance=function(e,r){return this.ensureNotDisposed(),this.register(e,{useValue:r})},t.prototype.registerSingleton=function(e,r){if(this.ensureNotDisposed(),K(e)){if(K(r))return this.register(e,{useToken:r},{lifecycle:H.Singleton});if(r)return this.register(e,{useClass:r},{lifecycle:H.Singleton});throw new Error('Cannot register a type name as a singleton without a "to" token')}var i=e;return r&&!K(r)&&(i=r),this.register(e,{useClass:i},{lifecycle:H.Singleton})},t.prototype.resolve=function(e,r,i){r===void 0&&(r=new ue),i===void 0&&(i=!1),this.ensureNotDisposed();var o=this.getRegistration(e);if(!o&&K(e)){if(i)return;throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"Single"),o){var n=this.resolveRegistration(o,r);return this.executePostResolutionInterceptor(e,n,"Single"),n}if(Lt(e)){var n=this.construct(e,r);return this.executePostResolutionInterceptor(e,n,"Single"),n}throw new Error("Attempted to construct an undefined constructor. Could mean a circular dependency problem. Try using `delay` function.")},t.prototype.executePreResolutionInterceptor=function(e,r){var i,o;if(this.interceptors.preResolution.has(e)){var n=[];try{for(var l=ae(this.interceptors.preResolution.getAll(e)),w=l.next();!w.done;w=l.next()){var E=w.value;E.options.frequency!="Once"&&n.push(E),E.callback(e,r)}}catch(_){i={error:_}}finally{try{w&&!w.done&&(o=l.return)&&o.call(l)}finally{if(i)throw i.error}}this.interceptors.preResolution.setAll(e,n)}},t.prototype.executePostResolutionInterceptor=function(e,r,i){var o,n;if(this.interceptors.postResolution.has(e)){var l=[];try{for(var w=ae(this.interceptors.postResolution.getAll(e)),E=w.next();!E.done;E=w.next()){var _=E.value;_.options.frequency!="Once"&&l.push(_),_.callback(e,r,i)}}catch(S){o={error:S}}finally{try{E&&!E.done&&(n=w.return)&&n.call(w)}finally{if(o)throw o.error}}this.interceptors.postResolution.setAll(e,l)}},t.prototype.resolveRegistration=function(e,r){if(this.ensureNotDisposed(),e.options.lifecycle===H.ResolutionScoped&&r.scopedResolutions.has(e))return r.scopedResolutions.get(e);var i=e.options.lifecycle===H.Singleton,o=e.options.lifecycle===H.ContainerScoped,n=i||o,l;return ce(e.provider)?l=e.provider.useValue:fe(e.provider)?l=n?e.instance||(e.instance=this.resolve(e.provider.useToken,r)):this.resolve(e.provider.useToken,r):st(e.provider)?l=n?e.instance||(e.instance=this.construct(e.provider.useClass,r)):this.construct(e.provider.useClass,r):Ee(e.provider)?l=e.provider.useFactory(this):l=this.construct(e.provider,r),e.options.lifecycle===H.ResolutionScoped&&r.scopedResolutions.set(e,l),l},t.prototype.resolveAll=function(e,r,i){var o=this;r===void 0&&(r=new ue),i===void 0&&(i=!1),this.ensureNotDisposed();var n=this.getAllRegistrations(e);if(!n&&K(e)){if(i)return[];throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"All"),n){var l=n.map(function(E){return o.resolveRegistration(E,r)});return this.executePostResolutionInterceptor(e,l,"All"),l}var w=[this.construct(e,r)];return this.executePostResolutionInterceptor(e,w,"All"),w},t.prototype.isRegistered=function(e,r){return r===void 0&&(r=!1),this.ensureNotDisposed(),this._registry.has(e)||r&&(this.parent||!1)&&this.parent.isRegistered(e,!0)},t.prototype.reset=function(){this.ensureNotDisposed(),this._registry.clear(),this.interceptors.preResolution.clear(),this.interceptors.postResolution.clear()},t.prototype.clearInstances=function(){var e,r;this.ensureNotDisposed();try{for(var i=ae(this._registry.entries()),o=i.next();!o.done;o=i.next()){var n=he(o.value,2),l=n[0],w=n[1];this._registry.setAll(l,w.filter(function(E){return!ce(E.provider)}).map(function(E){return E.instance=void 0,E}))}}catch(E){e={error:E}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.prototype.createChildContainer=function(){var e,r;this.ensureNotDisposed();var i=new t(this);try{for(var o=ae(this._registry.entries()),n=o.next();!n.done;n=o.next()){var l=he(n.value,2),w=l[0],E=l[1];E.some(function(_){var S=_.options;return S.lifecycle===H.ContainerScoped})&&i._registry.setAll(w,E.map(function(_){return _.options.lifecycle===H.ContainerScoped?{provider:_.provider,options:_.options}:_}))}}catch(_){e={error:_}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return i},t.prototype.beforeResolution=function(e,r,i){i===void 0&&(i={frequency:"Always"}),this.interceptors.preResolution.set(e,{callback:r,options:i})},t.prototype.afterResolution=function(e,r,i){i===void 0&&(i={frequency:"Always"}),this.interceptors.postResolution.set(e,{callback:r,options:i})},t.prototype.dispose=function(){return Ct(this,void 0,void 0,function(){var e;return St(this,function(r){switch(r.label){case 0:return this.disposed=!0,e=[],this.disposables.forEach(function(i){var o=i.dispose();o&&e.push(o)}),[4,Promise.all(e)];case 1:return r.sent(),[2]}})})},t.prototype.getRegistration=function(e){return this.isRegistered(e)?this._registry.get(e):this.parent?this.parent.getRegistration(e):null},t.prototype.getAllRegistrations=function(e){return this.isRegistered(e)?this._registry.getAll(e):this.parent?this.parent.getAllRegistrations(e):null},t.prototype.construct=function(e,r){var i=this;if(e instanceof ot)return e.createProxy(function(n){return i.resolve(n,r)});var o=(function(){var n=at.get(e);if(!n||n.length===0){if(e.length===0)return new e;throw new Error('TypeInfo not known for "'+e.name+'"')}var l=n.map(i.resolveParams(r,e));return new(e.bind.apply(e,Z([void 0],l)))})();return Ht(o)&&this.disposables.add(o),o},t.prototype.resolveParams=function(e,r){var i=this;return function(o,n){var l,w,E;try{return It(o)?Xe(o)?o.multiple?(l=i.resolve(o.transform)).transform.apply(l,Z([i.resolveAll(o.token,new ue,o.isOptional)],o.transformArgs)):(w=i.resolve(o.transform)).transform.apply(w,Z([i.resolve(o.token,e,o.isOptional)],o.transformArgs)):o.multiple?i.resolveAll(o.token,new ue,o.isOptional):i.resolve(o.token,e,o.isOptional):Xe(o)?(E=i.resolve(o.transform,e)).transform.apply(E,Z([i.resolve(o.token,e)],o.transformArgs)):i.resolve(o,e)}catch(_){throw new Error(Dt(r,n,_))}}},t.prototype.ensureNotDisposed=function(){if(this.disposed)throw new Error("This container has been disposed, you cannot interact with a disposed container")},t})(),Wt=new $t;function W(t,e){var r={token:t,multiple:!1,isOptional:e};return it(r)}function U(t){return function(e){at.set(e,xt(e))}}function ut(t,e){var r={token:t,multiple:!0,isOptional:e};return it(r)}if(typeof Reflect>"u"||!Reflect.getMetadata)throw new Error(`tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.`);var le={exports:{}},Ke;function Gt(){if(Ke)return le.exports;Ke=1;var t=typeof Reflect=="object"?Reflect:null,e=t&&typeof t.apply=="function"?t.apply:function(f,d,m){return Function.prototype.apply.call(f,d,m)},r;t&&typeof t.ownKeys=="function"?r=t.ownKeys:Object.getOwnPropertySymbols?r=function(f){return Object.getOwnPropertyNames(f).concat(Object.getOwnPropertySymbols(f))}:r=function(f){return Object.getOwnPropertyNames(f)};function i(c){console&&console.warn&&console.warn(c)}var o=Number.isNaN||function(f){return f!==f};function n(){n.init.call(this)}le.exports=n,le.exports.once=Q,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var l=10;function w(c){if(typeof c!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof c)}Object.defineProperty(n,"defaultMaxListeners",{enumerable:!0,get:function(){return l},set:function(c){if(typeof c!="number"||c<0||o(c))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+c+".");l=c}}),n.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(f){if(typeof f!="number"||f<0||o(f))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+f+".");return this._maxListeners=f,this};function E(c){return c._maxListeners===void 0?n.defaultMaxListeners:c._maxListeners}n.prototype.getMaxListeners=function(){return E(this)},n.prototype.emit=function(f){for(var d=[],m=1;m<arguments.length;m++)d.push(arguments[m]);var O=f==="error",x=this._events;if(x!==void 0)O=O&&x.error===void 0;else if(!O)return!1;if(O){var R;if(d.length>0&&(R=d[0]),R instanceof Error)throw R;var N=new Error("Unhandled error."+(R?" ("+R.message+")":""));throw N.context=R,N}var q=x[f];if(q===void 0)return!1;if(typeof q=="function")e(q,this,d);else for(var se=q.length,pe=Y(q,se),m=0;m<se;++m)e(pe[m],this,d);return!0};function _(c,f,d,m){var O,x,R;if(w(d),x=c._events,x===void 0?(x=c._events=Object.create(null),c._eventsCount=0):(x.newListener!==void 0&&(c.emit("newListener",f,d.listener?d.listener:d),x=c._events),R=x[f]),R===void 0)R=x[f]=d,++c._eventsCount;else if(typeof R=="function"?R=x[f]=m?[d,R]:[R,d]:m?R.unshift(d):R.push(d),O=E(c),O>0&&R.length>O&&!R.warned){R.warned=!0;var N=new Error("Possible EventEmitter memory leak detected. "+R.length+" "+String(f)+" listeners added. Use emitter.setMaxListeners() to increase limit");N.name="MaxListenersExceededWarning",N.emitter=c,N.type=f,N.count=R.length,i(N)}return c}n.prototype.addListener=function(f,d){return _(this,f,d,!1)},n.prototype.on=n.prototype.addListener,n.prototype.prependListener=function(f,d){return _(this,f,d,!0)};function S(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function j(c,f,d){var m={fired:!1,wrapFn:void 0,target:c,type:f,listener:d},O=S.bind(m);return O.listener=d,m.wrapFn=O,O}n.prototype.once=function(f,d){return w(d),this.on(f,j(this,f,d)),this},n.prototype.prependOnceListener=function(f,d){return w(d),this.prependListener(f,j(this,f,d)),this},n.prototype.removeListener=function(f,d){var m,O,x,R,N;if(w(d),O=this._events,O===void 0)return this;if(m=O[f],m===void 0)return this;if(m===d||m.listener===d)--this._eventsCount===0?this._events=Object.create(null):(delete O[f],O.removeListener&&this.emit("removeListener",f,m.listener||d));else if(typeof m!="function"){for(x=-1,R=m.length-1;R>=0;R--)if(m[R]===d||m[R].listener===d){N=m[R].listener,x=R;break}if(x<0)return this;x===0?m.shift():ee(m,x),m.length===1&&(O[f]=m[0]),O.removeListener!==void 0&&this.emit("removeListener",f,N||d)}return this},n.prototype.off=n.prototype.removeListener,n.prototype.removeAllListeners=function(f){var d,m,O;if(m=this._events,m===void 0)return this;if(m.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):m[f]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete m[f]),this;if(arguments.length===0){var x=Object.keys(m),R;for(O=0;O<x.length;++O)R=x[O],R!=="removeListener"&&this.removeAllListeners(R);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(d=m[f],typeof d=="function")this.removeListener(f,d);else if(d!==void 0)for(O=d.length-1;O>=0;O--)this.removeListener(f,d[O]);return this};function G(c,f,d){var m=c._events;if(m===void 0)return[];var O=m[f];return O===void 0?[]:typeof O=="function"?d?[O.listener||O]:[O]:d?z(O):Y(O,O.length)}n.prototype.listeners=function(f){return G(this,f,!0)},n.prototype.rawListeners=function(f){return G(this,f,!1)},n.listenerCount=function(c,f){return typeof c.listenerCount=="function"?c.listenerCount(f):V.call(c,f)},n.prototype.listenerCount=V;function V(c){var f=this._events;if(f!==void 0){var d=f[c];if(typeof d=="function")return 1;if(d!==void 0)return d.length}return 0}n.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]};function Y(c,f){for(var d=new Array(f),m=0;m<f;++m)d[m]=c[m];return d}function ee(c,f){for(;f+1<c.length;f++)c[f]=c[f+1];c.pop()}function z(c){for(var f=new Array(c.length),d=0;d<f.length;++d)f[d]=c[d].listener||c[d];return f}function Q(c,f){return new Promise(function(d,m){function O(R){c.removeListener(f,x),m(R)}function x(){typeof c.removeListener=="function"&&c.removeListener("error",O),d([].slice.call(arguments))}ie(c,f,x,{once:!0}),f!=="error"&&ne(c,O,{once:!0})})}function ne(c,f,d){typeof c.on=="function"&&ie(c,"error",f,d)}function ie(c,f,d,m){if(typeof c.on=="function")m.once?c.once(f,d):c.on(f,d);else if(typeof c.addEventListener=="function")c.addEventListener(f,function O(x){m.once&&c.removeEventListener(f,O),d(x)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof c)}return le.exports}var Vt=Gt(),zt=Object.getOwnPropertyDescriptor,Ut=(t,e,r,i)=>{for(var o=i>1?void 0:i?zt(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o};exports.EventBus=class{_emitter;constructor(){this._emitter=new Vt.EventEmitter}emit(e,r){this._emitter.emit(e,r)}on(e,r){this._emitter.on(e,r)}off(e,r){this._emitter.off(e,r)}};exports.EventBus=Ut([U()],exports.EventBus);var J=(t=>(t.SelectHover="select.hover",t.SelectClick="select.click",t))(J||{}),qt=Object.getOwnPropertyDescriptor,Zt=(t,e,r,i)=>{for(var o=i>1?void 0:i?qt(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o},et=(t,e)=>(r,i)=>e(r,i,t);exports.EditorRenderer=class extends Ie{constructor(e,r){super(e),this._canvas=e,this._bus=r;const i=new D.GridHelper(this.gl.gl,{size:10,divisions:10});i.position.y=-.001,i.setParent(this.scene),new D.AxesHelper(this.gl.gl,{size:6,symmetric:!0}).setParent(this.scene),this._orbit=new Pt(this.camera,{element:this.canvas}),this._raycast=new D.Raycast,this._mouse=new D.Vec2,this._isEventListenersAdded=!1}_orbit;_raycast;_mouse;_isEventListenersAdded;update(){this._orbit?.update()}addFigure(e){const r=super.addFigure(e);if(r.geometry){const i=r.geometry.constructor.name;r.geometry.raycast=i.includes("Sphere")?"sphere":"box"}return this._isEventListenersAdded||this.initMouseListeners(),r}setMeshBeforeRender(e,r){e.onBeforeRender(r)}initMouseListeners(){document.addEventListener("mousemove",this._handleMouseMove,!1),document.addEventListener("click",this._handleMouseClick,!1),this._isEventListenersAdded=!0}_handleMouseMove=e=>{this._processRaycastEvent(e,J.SelectHover,!0)};_handleMouseClick=e=>{this._processRaycastEvent(e,J.SelectClick,!1)};_processRaycastEvent(e,r,i){if(this._orbit.isInteracting)return;this._mouse.set(2*(e.x/this.gl.width)-1,2*(1-e.y/this.gl.height)-1),this._raycast.castMouse(this.camera,this._mouse),i&&this.meshes.forEach(l=>l.isHit=!1);const o=this._raycast.intersectBounds(this.meshes),n=o.length?o[0]:null;this._bus.emit(r,n?{mesh:n}:null),i&&o.forEach(l=>l.isHit=!0)}destroy(){this._isEventListenersAdded&&(document.removeEventListener("mousemove",this._handleMouseMove,!1),document.removeEventListener("click",this._handleMouseClick,!1),this._isEventListenersAdded=!1),this._orbit.destroy(),this._orbit=null,this._raycast=null,this._mouse=null,super.destroy()}};exports.EditorRenderer=Zt([U(),et(0,W("Canvas")),et(1,W("EventBus"))],exports.EditorRenderer);class Jt extends Ie{_orbit;constructor(e){super(e),this._orbit=new D.Orbit(this.camera,{element:this.canvas,target:new D.Vec3(0,0,0),minPolarAngle:Math.PI/2,maxPolarAngle:Math.PI/2,enableRotate:!0,enableZoom:!1,enablePan:!1})}update(){this._orbit?.update()}}class Yt{type;position;normal;uv;material;constructor(e){this.type=e.type,this.position=e.position,this.normal=e.normal??[],this.uv=e.uv??[],this.material=e.material}}var lt=(t=>(t[t.Cube=0]="Cube",t[t.Sphere=1]="Sphere",t[t.Plane=2]="Plane",t[t.Cylinder=3]="Cylinder",t[t.Custom=4]="Custom",t))(lt||{}),re=(t=>(t.Plane="plane",t.Wireframe="wireframe",t.Texture="texture",t))(re||{}),ve=(t=>(t.Mesh="mesh",t.Face="face",t.Edge="edge",t.Vertex="vertex",t))(ve||{});class Qt{_positions=[];_normals=[];_uvs=[];_tmpPositions=[];_tmpNormals=[];_tmpUVs=[];load(e){const r=e.split(`
75
+ `);for(const o of r){if(!o.trim()||o.startsWith("#"))continue;const n=o.trim().split(/\s+/);switch(n[0]){case"v":this._tmpPositions.push(n.slice(1).map(Number));break;case"vn":this._tmpNormals.push(n.slice(1).map(Number));break;case"vt":this._tmpUVs.push(n.slice(1).map(Number));break;case"f":this.processFaceLine(n);break}}const i={type:lt.Custom,position:this._positions,...this._normals.length>0&&{normal:this._normals},...this._uvs.length>0&&{uv:this._uvs}};return new Yt(i)}processFaceLine(e){for(let r=1;r<e.length;r++){const i=e[r];if(!i)continue;const[o,n,l]=i.split("/"),w=o?parseInt(o,10):void 0,E=n?parseInt(n,10):void 0,_=l?parseInt(l,10):void 0;if(w!==void 0){const S=this._tmpPositions[w-1];S&&this._positions.push(...S)}if(E!==void 0){const S=this._tmpUVs[E-1];S&&this._uvs.push(...S)}if(_!==void 0){const S=this._tmpNormals[_-1];S&&this._normals.push(...S)}}}}var Xt=Object.getOwnPropertyDescriptor,Kt=(t,e,r,i)=>{for(var o=i>1?void 0:i?Xt(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o},er=(t,e)=>(r,i)=>e(r,i,t);let Re=class{_currentMode=re.Plane;_handlers;constructor(t){this._handlers=new Map(t.map(e=>[e.mode,e]))}manage(t){t!==this._currentMode&&(this._handlers.get(this._currentMode)?.rollback(),t!==re.Plane&&this._handlers.get(t)?.handle(),this._currentMode=t)}destroy(){this._handlers&&this._handlers.clear(),this._currentMode=re.Plane}};Re=Kt([U(),er(0,ut("IDisplayHandler"))],Re);var de=(t=>(t.Hover="hover",t.Click="click",t))(de||{}),tr=Object.getOwnPropertyDescriptor,rr=(t,e,r,i)=>{for(var o=i>1?void 0:i?tr(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o},tt=(t,e)=>(r,i)=>e(r,i,t);let Pe=class{constructor(t,e){this._eventBus=t,this._handlers=new Map(e.map(r=>[r.mode,r])),this._eventBus.on(J.SelectHover,this._onHover),this._eventBus.on(J.SelectClick,this._onClick)}_currentMode=ve.Mesh;_handlers;manage(t){t!==this._currentMode&&(this._handlers.get(this._currentMode)?.rollback(),this._currentMode=t)}_onHover=t=>{if(!t)return;this._handlers.get(this._currentMode)?.handle(t,de.Hover)};_onClick=t=>{if(!t)return;this._handlers.get(this._currentMode)?.handle(t,de.Click)};destroy(){this._eventBus.off(J.SelectHover,this._onHover)}};Pe=rr([U(),tt(0,W("EventBus")),tt(1,ut("ISelectHandler"))],Pe);var nr=Object.getOwnPropertyDescriptor,ir=(t,e,r,i)=>{for(var o=i>1?void 0:i?nr(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o},sr=(t,e)=>(r,i)=>e(r,i,t);let Ce=class{constructor(t){this._api=t,this._wireMeshes=[],this._context=this._api.getContext(),this._wireMeshProgram=new D.NormalProgram(this._context)}mode=re.Wireframe;_wireMeshes;_wireMeshProgram;_context;handle(){const t=this._api.getMeshes();this.createWireMeshes(t),this._api.removeMeshes(t),this._api.addMeshes(this._wireMeshes)}rollback(){const t=this._api.getMeshes();this._api.removeMeshes(this._wireMeshes),this._api.addMeshes(t)}destroy(){this._wireMeshes&&(this._wireMeshes.length=0,this._wireMeshes=[])}createWireMeshes(t){for(const e of t){const r=new D.WireMesh(this._context,{geometry:e.geometry,program:this._wireMeshProgram});this._wireMeshes.push(r)}}};Ce=ir([U(),sr(0,W("RendererApi"))],Ce);var or=Object.getOwnPropertyDescriptor,ar=(t,e,r,i)=>{for(var o=i>1?void 0:i?or(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o},ur=(t,e)=>(r,i)=>e(r,i,t);let Se=class{constructor(t){this._api=t,this._program=t.getProgram(),this._selectedMesh=null}mode=ve.Mesh;_program;_selectedMesh;handle(t,e){if(!t)return;const{mesh:r}=t;e===de.Hover?this._api.setMeshBeforeRender(r,()=>this._onHover(r)):this._api.setMeshBeforeRender(r,()=>this._onClick(r))}_onHover=t=>{t.program.uniforms.uHit.value=t.isHit?1:0};_onClick=t=>{this._selectedMesh&&this._selectedMesh.program?.uniforms.uSelected&&(this._selectedMesh.program.uniforms.uSelected.value=0),this._selectedMesh=t,t.program?.uniforms.uSelected&&(t.program.uniforms.uSelected.value=1),console.log(`Selected mesh: ${t.id}`)};rollback(){this._program.uniforms.uHit.value=0}destroy(){this.rollback()}};Se=ar([U(),ur(0,W("RendererApi"))],Se);var lr=Object.getOwnPropertyDescriptor,fr=(t,e,r,i)=>{for(var o=i>1?void 0:i?lr(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o},cr=(t,e)=>(r,i)=>e(r,i,t);let xe=class{constructor(t){this._renderer=t}addMesh(t){this._renderer.addMesh(t)}addMeshes(t){for(const e of t)this._renderer.addMesh(e)}removeMesh(t){this._renderer.removeMesh(t)}removeMeshes(t){for(const e of t)this._renderer.removeMesh(e)}getMeshes(){return this._renderer.getMeshes()}getContext(){return this._renderer.getContext()}getProgram(){return this._renderer.getProgram()}setMeshBeforeRender(t,e){this._renderer.setMeshBeforeRender(t,e)}};xe=fr([U(),cr(0,W("EditorRenderer"))],xe);var hr=Object.getOwnPropertyDescriptor,dr=(t,e,r,i)=>{for(var o=i>1?void 0:i?hr(e,r):e,n=t.length-1,l;n>=0;n--)(l=t[n])&&(o=l(o)||o);return o},we=(t,e)=>(r,i)=>e(r,i,t);exports.EditorHub=class{constructor(e,r,i){this._displayManager=e,this._selectManager=r,this._renderer=i,r.manage(ve.Mesh)}setDisplayMode(e){this._displayManager.manage(e)}setSelectMode(e){this._selectManager.manage(e)}resizeRenderer(){this._renderer.resize()}updateRenderer(){this._renderer.loop()}addFigure(e){this._renderer.addFigure(e)}destroy(){this._displayManager.destroy(),this._selectManager.destroy(),this._renderer.destroy()}};exports.EditorHub=dr([U(),we(0,W("IDisplayManager")),we(1,W("ISelectManager")),we(2,W("EditorRenderer"))],exports.EditorHub);let rt=!1;const B=Wt.createChildContainer();function vr(t){return rt||(B.registerInstance("Canvas",t),B.registerSingleton("EventBus",exports.EventBus),B.registerSingleton("EditorRenderer",exports.EditorRenderer),B.registerSingleton("RendererApi",xe),B.registerSingleton("IDisplayHandler",Ce),B.registerSingleton("ISelectHandler",Se),B.registerSingleton("IDisplayManager",Re),B.registerSingleton("ISelectManager",Pe),B.registerSingleton("EditorHub",exports.EditorHub),rt=!0),B}function pr(t){return vr(t).resolve("EditorHub")}exports.EditorMesh=nt;exports.EventTopics=J;exports.ObjLoader=Qt;exports.PreviewRenderer=Jt;exports.Renderer=Ie;exports.createAppHub=pr;
package/dist/index.d.ts CHANGED
@@ -2,5 +2,14 @@ export * from './core/renderer';
2
2
  export * from './core/editor-renderer';
3
3
  export * from './core/preview-renderer';
4
4
  export * from './loaders/obj-loader';
5
- export * from './utils/program-settings';
5
+ export * from './hub/app-hub';
6
+ export * from './hub/editor-hub';
7
+ export * from './interfaces/manager/manager';
8
+ export * from './interfaces/manager/display-manager';
9
+ export * from './interfaces/manager/select-manager';
10
+ export * from './events/event-bus';
11
+ export * from './extensions/mesh-extension';
12
+ export * from './events/editor-events';
13
+ export * from './events/event-topics';
14
+ export * from './types/camera/camera-position';
6
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAExC,cAAc,sBAAsB,CAAC;AAErC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,oBAAoB,CAAC;AAEnC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC"}