@planara/core 3.2.2 → 3.2.3

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.
@@ -31,7 +31,7 @@ export declare class BenchmarkHub implements Disposable {
31
31
  * @public
32
32
  * @method
33
33
  */
34
- run(config: BenchmarkConfig): BenchmarkRunResult;
34
+ run(config: BenchmarkConfig): Promise<BenchmarkRunResult>;
35
35
  /**
36
36
  * Возвращает отчет по успешно выполненным benchmark-тестам.
37
37
  *
@@ -63,5 +63,6 @@ export declare class BenchmarkHub implements Disposable {
63
63
  */
64
64
  stop(): void;
65
65
  dispose(): Promise<void> | void;
66
+ private _wait;
66
67
  }
67
68
  //# sourceMappingURL=benchmark-hub.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark-hub.d.ts","sourceRoot":"","sources":["../../src/hub/benchmark-hub.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,UAAU,CAAC;AAE/D,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAExB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC;;;;;;;;;GASG;AACH,qBACa,YAAa,YAAW,UAAU;IAEvB,OAAO,CAAC,SAAS;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC5B,OAAO,CAAC,OAAO;gBAHN,SAAS,EAAE,QAAQ,EACT,SAAS,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACnC,OAAO,EAAE,OAAO;IAG7C;;;;;;;;;OASG;IACI,GAAG,CAAC,MAAM,EAAE,eAAe,GAAG,kBAAkB;IAoBvD;;;;;;;OAOG;IACI,SAAS,IAAI,eAAe;IAInC;;;;;;;;;OASG;IACI,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI;IAIvD,cAAc;IAIrB;;;OAGG;IACI,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACI,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAKvC"}
1
+ {"version":3,"file":"benchmark-hub.d.ts","sourceRoot":"","sources":["../../src/hub/benchmark-hub.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,UAAU,CAAC;AAE/D,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EAExB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC;;;;;;;;;GASG;AACH,qBACa,YAAa,YAAW,UAAU;IAEvB,OAAO,CAAC,SAAS;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC5B,OAAO,CAAC,OAAO;gBAHN,SAAS,EAAE,QAAQ,EACT,SAAS,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACnC,OAAO,EAAE,OAAO;IAG7C;;;;;;;;;OASG;IACU,GAAG,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsBtE;;;;;;;OAOG;IACI,SAAS,IAAI,eAAe;IAInC;;;;;;;;;OASG;IACI,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI;IAIvD,cAAc;IAIrB;;;OAGG;IACI,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACI,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAMtC,OAAO,CAAC,KAAK;CAKd"}
package/dist/index.cjs.js CHANGED
@@ -17,4 +17,4 @@
17
17
  `;s+=v}function g(_){let v=0;const M=_.geometry,A=M.getAttribute("position"),x=M.getAttribute("color");if(r+="o "+_.name+`
18
18
  `,A!==void 0){for(let S=0,y=A.count;S<y;S++,v++)o.fromBufferAttribute(A,S),o.applyMatrix4(_.matrixWorld),r+="v "+o.x+" "+o.y+" "+o.z,x!==void 0&&(l.fromBufferAttribute(x,S),b.ColorManagement.workingToColorSpace(l,b.SRGBColorSpace),r+=" "+l.r+" "+l.g+" "+l.b),r+=`
19
19
  `;r+="p ";for(let S=1,y=A.count;S<=y;S++)r+=s+S+" ";r+=`
20
- `}s+=v}return t.traverse(function(_){_.isMesh===!0&&p(_),_.isLine===!0&&f(_),_.isPoints===!0&&g(_)}),r}}var Ks=Object.getOwnPropertyDescriptor,Zs=(e,t,r,s)=>{for(var i=s>1?void 0:s?Ks(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},xt=(e,t)=>(r,s)=>t(r,s,e);let he=class{constructor(e,t){this._api=e,this._exportStore=t}mode=h.SceneMode.Export;handle(){const e=this._api.getScene(),t=gr(e),s=new Ys().parse(t),i=Date.now();this._exportStore.setResult({format:"obj",filename:`scene-${i}.obj`,mimeType:"text/plain;charset=utf-8",content:s,createdAt:i})}rollback(){}dispose(){this._exportStore.clearResult()}};he=Zs([a.injectable(),xt(0,a.inject("ISceneApi")),xt(1,a.inject("ExportStore"))],he);var Js=Object.defineProperty,Qs=Object.getOwnPropertyDescriptor,Rt=(e,t,r,s)=>{for(var i=s>1?void 0:s?Qs(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&Js(t,r,i),i},At=(e,t)=>(r,s)=>t(r,s,e);let W=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.Load;handle(e){const t=[...this._api.getMeshes()];this._api.removeMeshes(t);const r=Vt(e);this._api.addMeshes(r)}rollback(){}dispose(){}};Rt([Ht(e=>e._validator)],W.prototype,"handle",1);W=Rt([a.injectable(),At(0,a.inject("IMeshApi")),At(1,a.inject("ObjValidator"))],W);var ei=Object.defineProperty,ti=Object.getOwnPropertyDescriptor,Ft=(e,t,r,s)=>{for(var i=s>1?void 0:s?ti(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&ei(t,r,i),i},jt=(e,t)=>(r,s)=>t(r,s,e);let N=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.LoadFigure;handle(e){const t=Vt(e);this._api.addMeshes(t)}rollback(){}dispose(){}};Ft([Ht(e=>e._validator)],N.prototype,"handle",1);N=Ft([a.injectable(),jt(0,a.inject("IMeshApi")),jt(1,a.inject("ObjValidator"))],N);class _e{constructor(t,r,s,i){this._sceneApi=t,this._interactionApi=r,this._metricsApi=s,this._store=i}_group=null;_liveTimerId=null;async handle(t){this._interactionApi.setInteractionEnabled(!1),this._prepareScene(),this._metricsApi.start(this.objectsCount),this._startLiveMetrics(),await this._wait(t),this._stopLiveMetrics(),this._metricsApi.stop();const r=this._metricsApi.getMetrics();this._store.setCurrentMetrics(r),this._store.addMetrics(this.mode,r),this._interactionApi.setInteractionEnabled(!0)}rollback(){this._interactionApi.setInteractionEnabled(!0),this._stopLiveMetrics(),this._metricsApi.stop(),this._metricsApi.reset(),this._store.setCurrentMetrics(null),this._group&&(this._sceneApi.removeFromScene(this._group,!0),this._group.clear(),this._group=null)}dispose(){this.rollback()}_prepareScene(){const t=new c.Group;t.name=this.groupName,this.fillGroup(t),this._group=t,this._sceneApi.addToScene(t)}_wait(t){return new Promise(r=>{window.setTimeout(r,t)})}_startLiveMetrics(){this._stopLiveMetrics(),this._liveTimerId=window.setInterval(()=>{this._store.setCurrentMetrics(this._metricsApi.getMetrics())},250)}_stopLiveMetrics(){this._liveTimerId!==null&&(window.clearInterval(this._liveTimerId),this._liveTimerId=null)}}var ri=Object.getOwnPropertyDescriptor,si=(e,t,r,s)=>{for(var i=s>1?void 0:s?ri(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},K=(e,t)=>(r,s)=>t(r,s,e);let qe=class extends _e{mode=h.BenchmarkTestType.Light;groupName="__LIGHT_BENCHMARK__";objectsCount=st;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.BoxGeometry(.4,.4,.4),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set(i-r,.2,n-r),e.add(d)}}};qe=si([a.injectable(),K(0,a.inject("ISceneApi")),K(1,a.inject("IInteractionApi")),K(2,a.inject("IMetricsApi")),K(3,a.inject("MetricsStore"))],qe);var ii=Object.getOwnPropertyDescriptor,ni=(e,t,r,s)=>{for(var i=s>1?void 0:s?ii(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Z=(e,t)=>(r,s)=>t(r,s,e);let Ye=class extends _e{mode=h.BenchmarkTestType.Medium;groupName="__MEDIUM_BENCHMARK__";objectsCount=st;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.CylinderGeometry(.18,.18,.45,24),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.6,.225,(n-r)*.6),e.add(d)}}};Ye=ni([a.injectable(),Z(0,a.inject("ISceneApi")),Z(1,a.inject("IInteractionApi")),Z(2,a.inject("IMetricsApi")),Z(3,a.inject("MetricsStore"))],Ye);var oi=Object.getOwnPropertyDescriptor,ai=(e,t,r,s)=>{for(var i=s>1?void 0:s?oi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},J=(e,t)=>(r,s)=>t(r,s,e);let Ke=class extends _e{mode=h.BenchmarkTestType.Heavy;groupName="__HEAVY_BENCHMARK__";objectsCount=st;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.TorusKnotGeometry(.16,.05,64,12),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.7,.25,(n-r)*.7),e.add(d)}}};Ke=ai([a.injectable(),J(0,a.inject("ISceneApi")),J(1,a.inject("IInteractionApi")),J(2,a.inject("IMetricsApi")),J(3,a.inject("MetricsStore"))],Ke);var ci=Object.getOwnPropertyDescriptor,li=(e,t,r,s)=>{for(var i=s>1?void 0:s?ci(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Q=(e,t)=>(r,s)=>t(r,s,e);let Ze=class extends _e{mode=h.BenchmarkTestType.Mixed;groupName="__MIXED_BENCHMARK__";objectsCount=pt+mt+ft;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){this._addLightObjects(e,-10),this._addMediumObjects(e,0),this._addHardObjects(e,10)}_addLightObjects(e,t){this._addGrid(e,pt,t,()=>new c.Mesh(new c.BoxGeometry(.3,.3,.3),new c.MeshStandardMaterial))}_addMediumObjects(e,t){this._addGrid(e,mt,t,()=>new c.Mesh(new c.CylinderGeometry(.18,.18,.45,24),new c.MeshStandardMaterial))}_addHardObjects(e,t){this._addGrid(e,ft,t,()=>new c.Mesh(new c.TorusKnotGeometry(.16,.05,64,12),new c.MeshStandardMaterial))}_addGrid(e,t,r,s){const i=Math.ceil(Math.sqrt(t)),n=i/2;for(let o=0;o<t;o+=1){const l=o%i,d=Math.floor(o/i),u=s(o);u.position.set(r+(l-n)*.65,.25,(d-n)*.65),e.add(u)}}};Ze=li([a.injectable(),Q(0,a.inject("ISceneApi")),Q(1,a.inject("IInteractionApi")),Q(2,a.inject("IMetricsApi")),Q(3,a.inject("MetricsStore"))],Ze);var hi=Object.getOwnPropertyDescriptor,di=(e,t,r,s)=>{for(var i=s>1?void 0:s?hi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},z=(e,t)=>(r,s)=>t(r,s,e);exports.EditorHub=class{constructor(t,r,s,i,n){this._renderer=t,this._mediator=r,this._store=s,this._exportStore=i,this._worker=n,this.setSelectMode(h.SelectMode.Mesh),this.setToolMode(h.ToolType.Translate)}setDisplayMode(t){return this._mediator.send({type:C.Display,payload:[t]})}setSelectMode(t){return this._mediator.send({type:C.Select,payload:[t]})}setToolMode(t){return this._mediator.send({type:C.Tool,payload:[t]})}addFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.AddFigure,t]})}deleteFigure(){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.DeleteFigure]})}loadFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.Load,t]})}exportScene(){return this._exportStore.clearResult(),{response:this._mediator.send({type:C.Scene,payload:[h.SceneMode.Export]}),result:this._exportStore.getResult()}}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}getSelectionStats(){return this._store.getSelectionStats()}onSelectionStatsChange(t){const r=this._store.onSelectedObjectChange(()=>{t()}),s=this._store.onSelectedTransformChange(()=>{t()});return()=>{r(),s()}}dispose(){this._mediator.dispose(),this._worker.dispose()}};exports.EditorHub=di([a.injectable(),z(0,a.inject("Renderer")),z(1,a.inject("IMediator")),z(2,a.inject("EditorStore")),z(3,a.inject("ExportStore")),z(4,a.inject("IWorker"))],exports.EditorHub);var ui=Object.getOwnPropertyDescriptor,_i=(e,t,r,s)=>{for(var i=s>1?void 0:s?ui(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},be=(e,t)=>(r,s)=>t(r,s,e);exports.ViewerHub=class{constructor(t,r,s){this._renderer=t,this._mediator=r,this._worker=s}addFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.AddFigure,t]})}loadFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.Load,t]})}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose()}};exports.ViewerHub=_i([a.injectable(),be(0,a.inject("Renderer")),be(1,a.inject("IMediator")),be(2,a.inject("IWorker"))],exports.ViewerHub);var pi=Object.getOwnPropertyDescriptor,mi=(e,t,r,s)=>{for(var i=s>1?void 0:s?pi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},ee=(e,t)=>(r,s)=>t(r,s,e);exports.BenchmarkHub=class{constructor(t,r,s,i){this._renderer=t,this._mediator=r,this._store=s,this._worker=i}run(t){this._store.clear();const r=[];for(const s of t.tests){const i=this._mediator.send({type:C.Benchmark,payload:[s,t.durationMs]});r.push({type:s,status:i===null?h.BenchmarkTestStatus.Success:h.BenchmarkTestStatus.Failed})}return{tests:r}}getReport(){return this._store.getReport()}subscribeMetrics(t){return this._store.subscribe(t)}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose(),this._store.clear()}};exports.BenchmarkHub=mi([a.injectable(),ee(0,a.inject("Renderer")),ee(1,a.inject("IMediator")),ee(2,a.inject("MetricsStore")),ee(3,a.inject("IWorker"))],exports.BenchmarkHub);var fi=Object.getOwnPropertyDescriptor,gi=(e,t,r,s)=>{for(var i=s>1?void 0:s?fi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let Je=class{_selectMode=h.SelectMode.Mesh;_toolType=h.ToolType.Translate;_displayMode=h.DisplayMode.Plane;_selectedObject=null;_selectedListeners=new Set;_transformListeners=new Set;constructor(){oe.makeAutoObservable(this,{},{autoBind:!0})}getSelectMode(){return this._selectMode}getToolType(){return this._toolType}getDisplayMode(){return this._displayMode}setSelectMode(e){this._selectMode=e}setToolType(e){this._toolType=e}setDisplayMode(e){this._displayMode=e}getSelectedObject(){return this._selectedObject}getSelectionStats(){const e=this._selectedObject;return e?_r(e):null}setSelectedObject(e){if(this._selectedObject!==e){this._selectedObject=e;for(const t of this._selectedListeners)t(this._selectedObject)}}onSelectedObjectChange(e){return this._selectedListeners.add(e),()=>this._selectedListeners.delete(e)}onSelectedTransformChange(e){return this._transformListeners.add(e),()=>this._transformListeners.delete(e)}notifySelectedTransformChange(){for(const e of this._transformListeners)e()}};Je=gi([a.injectable()],Je);class $t{_result=null;constructor(){oe.makeAutoObservable(this,{_result:oe.observable.ref},{autoBind:!0})}get result(){return this._result}get hasResult(){return this._result!==null}setResult(t){this._result=t}getResult(){return this._result}clearResult(){this._result=null}}var vi=Object.getOwnPropertyDescriptor,bi=(e,t,r,s)=>{for(var i=s>1?void 0:s?vi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let Qe=class{_createdAt=new Date().toISOString();_tests=[];_currentMetrics=null;_listeners=new Set;constructor(){oe.makeAutoObservable(this,{},{autoBind:!0})}clear(){this._createdAt=new Date().toISOString(),this._tests=[],this.setCurrentMetrics(null)}addMetrics(e,t){this._tests.push({type:e,status:h.BenchmarkTestStatus.Success,metrics:t})}setCurrentMetrics(e){this._currentMetrics=e;for(const t of this._listeners)t(this._currentMetrics)}getCurrentMetrics(){return this._currentMetrics}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}getReport(){return{createdAt:this._createdAt,tests:[...this._tests]}}};Qe=bi([a.injectable()],Qe);class kt extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="PolicyException"}class ie extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="ValidationException"}var Mi=Object.getOwnPropertyDescriptor,yi=(e,t,r,s)=>{for(var i=s>1?void 0:s?Mi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},wi=(e,t)=>(r,s)=>t(r,s,e);let et=class{constructor(e){this._store=e}check(e){const t=this._store.getSelectMode();if(!h.DEFAULT_TOOL_RULES[t].includes(e))throw new kt(h.ResponseType.NotAllowed,`Tool ${e} is not allowed`,"TOOL_NOT_ALLOWED")}};et=yi([a.injectable(),wi(0,a.inject("EditorStore"))],et);class Si{constructor(){}validate(t){const r=t.trim();if(!r)throw new ie(h.ResponseType.ValidationError,"File content is empty.","FILE_CONTENT_EMPTY");if(!/^v\s+[-+.\deE]+\s+[-+.\deE]+\s+[-+.\deE]+/m.test(r))throw new ie(h.ResponseType.ValidationError,"OBJ content does not contain vertices.","WRONG_FILE_CONTENT");if(!/^f\s+/m.test(r))throw new ie(h.ResponseType.ValidationError,"OBJ content does not contain faces.","WRONG_FILE_CONTENT")}}var xi=Object.getOwnPropertyDescriptor,Ai=(e,t,r,s)=>{for(var i=s>1?void 0:s?xi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let tt=class{handle(e){try{return e()}catch(t){return t instanceof kt?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof ie?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof Error?{type:h.ResponseType.Error,message:t.message,code:"UNHANDLED_EXCEPTION",blocked:!0}:{type:h.ResponseType.Error,message:"Unknown exception",code:"UNKNOWN_EXCEPTION",blocked:!0}}}};tt=Ai([a.injectable()],tt);var ji=Object.getOwnPropertyDescriptor,Ii=(e,t,r,s)=>{for(var i=s>1?void 0:s?ji(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},It=(e,t)=>(r,s)=>t(r,s,e);let rt=class{constructor(e,t){this._middlewares=t,this._managers=new Map(e.map(r=>[r.type,r]))}_managers;send(e){const t=this._managers.get(e.type);if(!t)return{type:h.ResponseType.Error,message:`Manager for feature "${String(e.type)}" not found`,code:"MANAGER_NOT_FOUND",blocked:!0};const r=()=>(t.manage(...e.payload),null);return this._middlewares.reduceRight((i,n)=>()=>n.handle(i),r)()}dispose(){this._managers&&this._managers.clear()}};rt=Ii([a.injectable(),It(0,a.injectAll("IManager")),It(1,a.injectAll("IMiddleware"))],rt);let te=null,re=null,se=null;function ot(){return a.container.createChildContainer()}function Gt(e,t){e.registerInstance("Canvas",t)}function zt(e,t){e.registerInstance("RendererConfig",pr(vr,t))}function at(e){e.registerSingleton("IWorker",Me),e.registerSingleton("Renderer",exports.Renderer),e.register("IRenderable",{useToken:"Renderer"}),e.register("IRendererAccess",{useToken:"Renderer"}),e.register("IRendererCameraAccess",{useToken:"Renderer"}),e.register("IRendererDomAccess",{useToken:"Renderer"}),e.register("IRendererSceneAccess",{useToken:"Renderer"})}function Oi(e){at(e),e.register("IRendererInfoAccess",{useToken:"Renderer"})}function Ci(e){e.registerSingleton("EventBus",exports.EventBus)}function Ei(e){e.registerSingleton("ToolPolicy",et)}function Wt(e){e.registerSingleton("ObjValidator",Si)}function Nt(e){e.registerSingleton("IMeshApi",we),e.registerSingleton("ICameraApi",je),e.registerSingleton("IDomApi",Ie),e.registerSingleton("ISceneApi",Oe)}function Ut(e){Nt(e),e.registerSingleton("IControlsStateApi",ye),e.registerSingleton("IRaycastApi",Se),e.registerSingleton("ITransformApi",xe),e.registerSingleton("IInteractionApi",Ae)}function Ti(e){Nt(e)}function Pi(e){Ut(e),e.registerSingleton("IRendererInfoApi",Ce)}function Xt(e){e.registerSingleton("ControlsModule",ae),e.registerSingleton("GizmoModule",Ee),e.registerSingleton("RaycastModule",Te),e.registerSingleton("SceneModule",Pe),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRenderableModule",{useToken:"GizmoModule"}),e.register("IRuntimeModule",{useToken:"RaycastModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"}),e.register("IInteractiveModule",{useToken:"RaycastModule"}),e.register("IInteractiveModule",{useToken:"GizmoModule"})}function Li(e){e.registerSingleton("ControlsModule",ae),e.registerSingleton("SceneModule",Le),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"})}function Di(e){Xt(e),e.registerSingleton("MetricsModule",De),e.register("IObserverModule",{useToken:"MetricsModule"}),e.register("IMetricsApi",{useToken:"MetricsModule"})}function Vi(e){e.registerSingleton("IDisplayHandler",Fe)}function Hi(e){e.registerSingleton("ISelectHandler",Ge),e.registerSingleton("ISelectHandler",ke),e.registerSingleton("ISelectHandler",$e),e.registerSingleton("ISelectHandler",ze)}function Bi(e){e.registerSingleton("IToolHandler",Ue),e.registerSingleton("IToolHandler",Ne),e.registerSingleton("IToolHandler",We)}function Ri(e){e.registerSingleton("ISceneHandler",le),e.registerSingleton("ISceneHandler",Xe),e.registerSingleton("ISceneHandler",he),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function Fi(e){e.registerSingleton("ISceneHandler",le),e.registerSingleton("ISceneHandler",he),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function $i(e){e.registerSingleton("IBenchmarkHandler",qe),e.registerSingleton("IBenchmarkHandler",Ye),e.registerSingleton("IBenchmarkHandler",Ke),e.registerSingleton("IBenchmarkHandler",Ze)}function ki(e){e.registerSingleton("DisplayManager",Ve),e.register("IDisplayManager",{useToken:"DisplayManager"}),e.register("IManager",{useToken:"DisplayManager"})}function Gi(e){e.registerSingleton("SelectManager",Be),e.register("ISelectManager",{useToken:"SelectManager"}),e.register("IManager",{useToken:"SelectManager"})}function zi(e){e.registerSingleton("ToolManager",ce),e.register("IToolManager",{useToken:"ToolManager"}),e.register("IManager",{useToken:"ToolManager"})}function qt(e){e.registerSingleton("SceneManager",He),e.register("ISceneManager",{useToken:"SceneManager"}),e.register("IManager",{useToken:"SceneManager"})}function Wi(e){e.registerSingleton("BenchmarkManager",Re),e.register("IBenchmarkManager",{useToken:"BenchmarkManager"}),e.register("IManager",{useToken:"BenchmarkManager"})}function Ni(e){ki(e),Gi(e),zi(e),qt(e)}function Ui(e){qt(e)}function Yt(e){e.registerSingleton("IMiddleware",tt),e.registerSingleton("IMediator",rt)}function Xi(e){e.registerSingleton("EditorStore",Je),e.registerSingleton("ExportStore",$t)}function qi(e){e.registerSingleton("ExportStore",$t)}function Yi(e){e.registerSingleton("MetricsStore",Qe)}function Ki(e){e.registerSingleton("EditorHub",exports.EditorHub)}function Zi(e){e.registerSingleton("ViewerHub",exports.ViewerHub)}function Ji(e){e.registerSingleton("BenchmarkHub",exports.BenchmarkHub)}function Kt(e,t,r){return Gt(e,t),zt(e,r),Ci(e),at(e),Ei(e),Wt(e),Ut(e),Xt(e),Vi(e),Hi(e),Bi(e),Ri(e),Ni(e),Yt(e),Ki(e),Xi(e),e}function Qi(e,t,r){return Kt(e,t,r),Oi(e),Di(e),Pi(e),$i(e),Wi(e),Yi(e),Ji(e),e}function en(e,t,r){return Gt(e,t),zt(e,r),at(e),Wt(e),Ti(e),Li(e),Fi(e),Ui(e),Yt(e),Zi(e),qi(e),e}function tn(e,t){return te||(te=Kt(ot(),e,t),te)}function rn(e,t){return re||(re=en(ot(),e,t),re)}function sn(e,t){return se||(se=Qi(ot(),e,t),se)}let E=null;const nn=(e,t)=>(E||(E=tn(e,t)),E.resolve("EditorHub")),on=()=>{if(!E)throw new Error("EditorHub is not initialized. Call createEditorHub(canvas) first.");return E.resolve("EditorHub")},an=(e,t)=>(E||(E=rn(e,t)),E.resolve("ViewerHub")),cn=()=>{if(!E)throw new Error("ViewerHub is not initialized. Call createViewerHub(canvas) first.");return E.resolve("ViewerHub")},ln=(e,t)=>(E||(E=sn(e,t)),E.resolve("BenchmarkHub")),hn=()=>{if(!E)throw new Error("ViewerHub is not initialized. Call createBenchmarkHub(canvas) first.");return E.resolve("BenchmarkHub")};exports.EventTopics=V;exports.FeatureType=C;exports.ObjLoader=yr;exports.createBenchmarkHub=ln;exports.createEditorHub=nn;exports.createViewerHub=an;exports.getBenchmarkHub=hn;exports.getEditorHub=on;exports.getViewerHub=cn;
20
+ `}s+=v}return t.traverse(function(_){_.isMesh===!0&&p(_),_.isLine===!0&&f(_),_.isPoints===!0&&g(_)}),r}}var Ks=Object.getOwnPropertyDescriptor,Zs=(e,t,r,s)=>{for(var i=s>1?void 0:s?Ks(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},xt=(e,t)=>(r,s)=>t(r,s,e);let he=class{constructor(e,t){this._api=e,this._exportStore=t}mode=h.SceneMode.Export;handle(){const e=this._api.getScene(),t=gr(e),s=new Ys().parse(t),i=Date.now();this._exportStore.setResult({format:"obj",filename:`scene-${i}.obj`,mimeType:"text/plain;charset=utf-8",content:s,createdAt:i})}rollback(){}dispose(){this._exportStore.clearResult()}};he=Zs([a.injectable(),xt(0,a.inject("ISceneApi")),xt(1,a.inject("ExportStore"))],he);var Js=Object.defineProperty,Qs=Object.getOwnPropertyDescriptor,Rt=(e,t,r,s)=>{for(var i=s>1?void 0:s?Qs(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&Js(t,r,i),i},At=(e,t)=>(r,s)=>t(r,s,e);let W=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.Load;handle(e){const t=[...this._api.getMeshes()];this._api.removeMeshes(t);const r=Vt(e);this._api.addMeshes(r)}rollback(){}dispose(){}};Rt([Ht(e=>e._validator)],W.prototype,"handle",1);W=Rt([a.injectable(),At(0,a.inject("IMeshApi")),At(1,a.inject("ObjValidator"))],W);var ei=Object.defineProperty,ti=Object.getOwnPropertyDescriptor,Ft=(e,t,r,s)=>{for(var i=s>1?void 0:s?ti(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&ei(t,r,i),i},jt=(e,t)=>(r,s)=>t(r,s,e);let N=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.LoadFigure;handle(e){const t=Vt(e);this._api.addMeshes(t)}rollback(){}dispose(){}};Ft([Ht(e=>e._validator)],N.prototype,"handle",1);N=Ft([a.injectable(),jt(0,a.inject("IMeshApi")),jt(1,a.inject("ObjValidator"))],N);class _e{constructor(t,r,s,i){this._sceneApi=t,this._interactionApi=r,this._metricsApi=s,this._store=i}_group=null;_liveTimerId=null;async handle(t){this._interactionApi.setInteractionEnabled(!1),this._prepareScene(),this._metricsApi.start(this.objectsCount),this._startLiveMetrics(),await this._wait(t),this._stopLiveMetrics(),this._metricsApi.stop();const r=this._metricsApi.getMetrics();this._store.setCurrentMetrics(r),this._store.addMetrics(this.mode,r),this._interactionApi.setInteractionEnabled(!0)}rollback(){this._interactionApi.setInteractionEnabled(!0),this._stopLiveMetrics(),this._metricsApi.stop(),this._metricsApi.reset(),this._store.setCurrentMetrics(null),this._group&&(this._sceneApi.removeFromScene(this._group,!0),this._group.clear(),this._group=null)}dispose(){this.rollback()}_prepareScene(){const t=new c.Group;t.name=this.groupName,this.fillGroup(t),this._group=t,this._sceneApi.addToScene(t)}_wait(t){return new Promise(r=>{window.setTimeout(r,t)})}_startLiveMetrics(){this._stopLiveMetrics(),this._liveTimerId=window.setInterval(()=>{this._store.setCurrentMetrics(this._metricsApi.getMetrics())},250)}_stopLiveMetrics(){this._liveTimerId!==null&&(window.clearInterval(this._liveTimerId),this._liveTimerId=null)}}var ri=Object.getOwnPropertyDescriptor,si=(e,t,r,s)=>{for(var i=s>1?void 0:s?ri(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},K=(e,t)=>(r,s)=>t(r,s,e);let qe=class extends _e{mode=h.BenchmarkTestType.Light;groupName="__LIGHT_BENCHMARK__";objectsCount=st;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.BoxGeometry(.4,.4,.4),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set(i-r,.2,n-r),e.add(d)}}};qe=si([a.injectable(),K(0,a.inject("ISceneApi")),K(1,a.inject("IInteractionApi")),K(2,a.inject("IMetricsApi")),K(3,a.inject("MetricsStore"))],qe);var ii=Object.getOwnPropertyDescriptor,ni=(e,t,r,s)=>{for(var i=s>1?void 0:s?ii(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Z=(e,t)=>(r,s)=>t(r,s,e);let Ye=class extends _e{mode=h.BenchmarkTestType.Medium;groupName="__MEDIUM_BENCHMARK__";objectsCount=st;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.CylinderGeometry(.18,.18,.45,24),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.6,.225,(n-r)*.6),e.add(d)}}};Ye=ni([a.injectable(),Z(0,a.inject("ISceneApi")),Z(1,a.inject("IInteractionApi")),Z(2,a.inject("IMetricsApi")),Z(3,a.inject("MetricsStore"))],Ye);var oi=Object.getOwnPropertyDescriptor,ai=(e,t,r,s)=>{for(var i=s>1?void 0:s?oi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},J=(e,t)=>(r,s)=>t(r,s,e);let Ke=class extends _e{mode=h.BenchmarkTestType.Heavy;groupName="__HEAVY_BENCHMARK__";objectsCount=st;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.TorusKnotGeometry(.16,.05,64,12),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.7,.25,(n-r)*.7),e.add(d)}}};Ke=ai([a.injectable(),J(0,a.inject("ISceneApi")),J(1,a.inject("IInteractionApi")),J(2,a.inject("IMetricsApi")),J(3,a.inject("MetricsStore"))],Ke);var ci=Object.getOwnPropertyDescriptor,li=(e,t,r,s)=>{for(var i=s>1?void 0:s?ci(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Q=(e,t)=>(r,s)=>t(r,s,e);let Ze=class extends _e{mode=h.BenchmarkTestType.Mixed;groupName="__MIXED_BENCHMARK__";objectsCount=pt+mt+ft;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){this._addLightObjects(e,-10),this._addMediumObjects(e,0),this._addHardObjects(e,10)}_addLightObjects(e,t){this._addGrid(e,pt,t,()=>new c.Mesh(new c.BoxGeometry(.3,.3,.3),new c.MeshStandardMaterial))}_addMediumObjects(e,t){this._addGrid(e,mt,t,()=>new c.Mesh(new c.CylinderGeometry(.18,.18,.45,24),new c.MeshStandardMaterial))}_addHardObjects(e,t){this._addGrid(e,ft,t,()=>new c.Mesh(new c.TorusKnotGeometry(.16,.05,64,12),new c.MeshStandardMaterial))}_addGrid(e,t,r,s){const i=Math.ceil(Math.sqrt(t)),n=i/2;for(let o=0;o<t;o+=1){const l=o%i,d=Math.floor(o/i),u=s(o);u.position.set(r+(l-n)*.65,.25,(d-n)*.65),e.add(u)}}};Ze=li([a.injectable(),Q(0,a.inject("ISceneApi")),Q(1,a.inject("IInteractionApi")),Q(2,a.inject("IMetricsApi")),Q(3,a.inject("MetricsStore"))],Ze);var hi=Object.getOwnPropertyDescriptor,di=(e,t,r,s)=>{for(var i=s>1?void 0:s?hi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},z=(e,t)=>(r,s)=>t(r,s,e);exports.EditorHub=class{constructor(t,r,s,i,n){this._renderer=t,this._mediator=r,this._store=s,this._exportStore=i,this._worker=n,this.setSelectMode(h.SelectMode.Mesh),this.setToolMode(h.ToolType.Translate)}setDisplayMode(t){return this._mediator.send({type:C.Display,payload:[t]})}setSelectMode(t){return this._mediator.send({type:C.Select,payload:[t]})}setToolMode(t){return this._mediator.send({type:C.Tool,payload:[t]})}addFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.AddFigure,t]})}deleteFigure(){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.DeleteFigure]})}loadFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.Load,t]})}exportScene(){return this._exportStore.clearResult(),{response:this._mediator.send({type:C.Scene,payload:[h.SceneMode.Export]}),result:this._exportStore.getResult()}}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}getSelectionStats(){return this._store.getSelectionStats()}onSelectionStatsChange(t){const r=this._store.onSelectedObjectChange(()=>{t()}),s=this._store.onSelectedTransformChange(()=>{t()});return()=>{r(),s()}}dispose(){this._mediator.dispose(),this._worker.dispose()}};exports.EditorHub=di([a.injectable(),z(0,a.inject("Renderer")),z(1,a.inject("IMediator")),z(2,a.inject("EditorStore")),z(3,a.inject("ExportStore")),z(4,a.inject("IWorker"))],exports.EditorHub);var ui=Object.getOwnPropertyDescriptor,_i=(e,t,r,s)=>{for(var i=s>1?void 0:s?ui(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},be=(e,t)=>(r,s)=>t(r,s,e);exports.ViewerHub=class{constructor(t,r,s){this._renderer=t,this._mediator=r,this._worker=s}addFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.AddFigure,t]})}loadFigure(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:C.Scene,payload:[h.SceneMode.Load,t]})}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose()}};exports.ViewerHub=_i([a.injectable(),be(0,a.inject("Renderer")),be(1,a.inject("IMediator")),be(2,a.inject("IWorker"))],exports.ViewerHub);var pi=Object.getOwnPropertyDescriptor,mi=(e,t,r,s)=>{for(var i=s>1?void 0:s?pi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},ee=(e,t)=>(r,s)=>t(r,s,e);exports.BenchmarkHub=class{constructor(t,r,s,i){this._renderer=t,this._mediator=r,this._store=s,this._worker=i}async run(t){this._store.clear();const r=[];for(const s of t.tests){const i=this._mediator.send({type:C.Benchmark,payload:[s,t.durationMs]});await this._wait(t.durationMs+300),r.push({type:s,status:i===null?h.BenchmarkTestStatus.Success:h.BenchmarkTestStatus.Failed})}return{tests:r}}getReport(){return this._store.getReport()}subscribeMetrics(t){return this._store.subscribe(t)}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose(),this._store.clear()}_wait(t){return new Promise(r=>{window.setTimeout(r,t)})}};exports.BenchmarkHub=mi([a.injectable(),ee(0,a.inject("Renderer")),ee(1,a.inject("IMediator")),ee(2,a.inject("MetricsStore")),ee(3,a.inject("IWorker"))],exports.BenchmarkHub);var fi=Object.getOwnPropertyDescriptor,gi=(e,t,r,s)=>{for(var i=s>1?void 0:s?fi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let Je=class{_selectMode=h.SelectMode.Mesh;_toolType=h.ToolType.Translate;_displayMode=h.DisplayMode.Plane;_selectedObject=null;_selectedListeners=new Set;_transformListeners=new Set;constructor(){oe.makeAutoObservable(this,{},{autoBind:!0})}getSelectMode(){return this._selectMode}getToolType(){return this._toolType}getDisplayMode(){return this._displayMode}setSelectMode(e){this._selectMode=e}setToolType(e){this._toolType=e}setDisplayMode(e){this._displayMode=e}getSelectedObject(){return this._selectedObject}getSelectionStats(){const e=this._selectedObject;return e?_r(e):null}setSelectedObject(e){if(this._selectedObject!==e){this._selectedObject=e;for(const t of this._selectedListeners)t(this._selectedObject)}}onSelectedObjectChange(e){return this._selectedListeners.add(e),()=>this._selectedListeners.delete(e)}onSelectedTransformChange(e){return this._transformListeners.add(e),()=>this._transformListeners.delete(e)}notifySelectedTransformChange(){for(const e of this._transformListeners)e()}};Je=gi([a.injectable()],Je);class $t{_result=null;constructor(){oe.makeAutoObservable(this,{_result:oe.observable.ref},{autoBind:!0})}get result(){return this._result}get hasResult(){return this._result!==null}setResult(t){this._result=t}getResult(){return this._result}clearResult(){this._result=null}}var vi=Object.getOwnPropertyDescriptor,bi=(e,t,r,s)=>{for(var i=s>1?void 0:s?vi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let Qe=class{_createdAt=new Date().toISOString();_tests=[];_currentMetrics=null;_listeners=new Set;constructor(){oe.makeAutoObservable(this,{},{autoBind:!0})}clear(){this._createdAt=new Date().toISOString(),this._tests=[],this.setCurrentMetrics(null)}addMetrics(e,t){this._tests.push({type:e,status:h.BenchmarkTestStatus.Success,metrics:t})}setCurrentMetrics(e){this._currentMetrics=e;for(const t of this._listeners)t(this._currentMetrics)}getCurrentMetrics(){return this._currentMetrics}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}getReport(){return{createdAt:this._createdAt,tests:[...this._tests]}}};Qe=bi([a.injectable()],Qe);class kt extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="PolicyException"}class ie extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="ValidationException"}var Mi=Object.getOwnPropertyDescriptor,yi=(e,t,r,s)=>{for(var i=s>1?void 0:s?Mi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},wi=(e,t)=>(r,s)=>t(r,s,e);let et=class{constructor(e){this._store=e}check(e){const t=this._store.getSelectMode();if(!h.DEFAULT_TOOL_RULES[t].includes(e))throw new kt(h.ResponseType.NotAllowed,`Tool ${e} is not allowed`,"TOOL_NOT_ALLOWED")}};et=yi([a.injectable(),wi(0,a.inject("EditorStore"))],et);class Si{constructor(){}validate(t){const r=t.trim();if(!r)throw new ie(h.ResponseType.ValidationError,"File content is empty.","FILE_CONTENT_EMPTY");if(!/^v\s+[-+.\deE]+\s+[-+.\deE]+\s+[-+.\deE]+/m.test(r))throw new ie(h.ResponseType.ValidationError,"OBJ content does not contain vertices.","WRONG_FILE_CONTENT");if(!/^f\s+/m.test(r))throw new ie(h.ResponseType.ValidationError,"OBJ content does not contain faces.","WRONG_FILE_CONTENT")}}var xi=Object.getOwnPropertyDescriptor,Ai=(e,t,r,s)=>{for(var i=s>1?void 0:s?xi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let tt=class{handle(e){try{return e()}catch(t){return t instanceof kt?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof ie?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof Error?{type:h.ResponseType.Error,message:t.message,code:"UNHANDLED_EXCEPTION",blocked:!0}:{type:h.ResponseType.Error,message:"Unknown exception",code:"UNKNOWN_EXCEPTION",blocked:!0}}}};tt=Ai([a.injectable()],tt);var ji=Object.getOwnPropertyDescriptor,Ii=(e,t,r,s)=>{for(var i=s>1?void 0:s?ji(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},It=(e,t)=>(r,s)=>t(r,s,e);let rt=class{constructor(e,t){this._middlewares=t,this._managers=new Map(e.map(r=>[r.type,r]))}_managers;send(e){const t=this._managers.get(e.type);if(!t)return{type:h.ResponseType.Error,message:`Manager for feature "${String(e.type)}" not found`,code:"MANAGER_NOT_FOUND",blocked:!0};const r=()=>(t.manage(...e.payload),null);return this._middlewares.reduceRight((i,n)=>()=>n.handle(i),r)()}dispose(){this._managers&&this._managers.clear()}};rt=Ii([a.injectable(),It(0,a.injectAll("IManager")),It(1,a.injectAll("IMiddleware"))],rt);let te=null,re=null,se=null;function ot(){return a.container.createChildContainer()}function Gt(e,t){e.registerInstance("Canvas",t)}function zt(e,t){e.registerInstance("RendererConfig",pr(vr,t))}function at(e){e.registerSingleton("IWorker",Me),e.registerSingleton("Renderer",exports.Renderer),e.register("IRenderable",{useToken:"Renderer"}),e.register("IRendererAccess",{useToken:"Renderer"}),e.register("IRendererCameraAccess",{useToken:"Renderer"}),e.register("IRendererDomAccess",{useToken:"Renderer"}),e.register("IRendererSceneAccess",{useToken:"Renderer"})}function Oi(e){at(e),e.register("IRendererInfoAccess",{useToken:"Renderer"})}function Ci(e){e.registerSingleton("EventBus",exports.EventBus)}function Ei(e){e.registerSingleton("ToolPolicy",et)}function Wt(e){e.registerSingleton("ObjValidator",Si)}function Nt(e){e.registerSingleton("IMeshApi",we),e.registerSingleton("ICameraApi",je),e.registerSingleton("IDomApi",Ie),e.registerSingleton("ISceneApi",Oe)}function Ut(e){Nt(e),e.registerSingleton("IControlsStateApi",ye),e.registerSingleton("IRaycastApi",Se),e.registerSingleton("ITransformApi",xe),e.registerSingleton("IInteractionApi",Ae)}function Ti(e){Nt(e)}function Pi(e){Ut(e),e.registerSingleton("IRendererInfoApi",Ce)}function Xt(e){e.registerSingleton("ControlsModule",ae),e.registerSingleton("GizmoModule",Ee),e.registerSingleton("RaycastModule",Te),e.registerSingleton("SceneModule",Pe),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRenderableModule",{useToken:"GizmoModule"}),e.register("IRuntimeModule",{useToken:"RaycastModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"}),e.register("IInteractiveModule",{useToken:"RaycastModule"}),e.register("IInteractiveModule",{useToken:"GizmoModule"})}function Li(e){e.registerSingleton("ControlsModule",ae),e.registerSingleton("SceneModule",Le),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"})}function Di(e){Xt(e),e.registerSingleton("MetricsModule",De),e.register("IObserverModule",{useToken:"MetricsModule"}),e.register("IMetricsApi",{useToken:"MetricsModule"})}function Vi(e){e.registerSingleton("IDisplayHandler",Fe)}function Hi(e){e.registerSingleton("ISelectHandler",Ge),e.registerSingleton("ISelectHandler",ke),e.registerSingleton("ISelectHandler",$e),e.registerSingleton("ISelectHandler",ze)}function Bi(e){e.registerSingleton("IToolHandler",Ue),e.registerSingleton("IToolHandler",Ne),e.registerSingleton("IToolHandler",We)}function Ri(e){e.registerSingleton("ISceneHandler",le),e.registerSingleton("ISceneHandler",Xe),e.registerSingleton("ISceneHandler",he),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function Fi(e){e.registerSingleton("ISceneHandler",le),e.registerSingleton("ISceneHandler",he),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function $i(e){e.registerSingleton("IBenchmarkHandler",qe),e.registerSingleton("IBenchmarkHandler",Ye),e.registerSingleton("IBenchmarkHandler",Ke),e.registerSingleton("IBenchmarkHandler",Ze)}function ki(e){e.registerSingleton("DisplayManager",Ve),e.register("IDisplayManager",{useToken:"DisplayManager"}),e.register("IManager",{useToken:"DisplayManager"})}function Gi(e){e.registerSingleton("SelectManager",Be),e.register("ISelectManager",{useToken:"SelectManager"}),e.register("IManager",{useToken:"SelectManager"})}function zi(e){e.registerSingleton("ToolManager",ce),e.register("IToolManager",{useToken:"ToolManager"}),e.register("IManager",{useToken:"ToolManager"})}function qt(e){e.registerSingleton("SceneManager",He),e.register("ISceneManager",{useToken:"SceneManager"}),e.register("IManager",{useToken:"SceneManager"})}function Wi(e){e.registerSingleton("BenchmarkManager",Re),e.register("IBenchmarkManager",{useToken:"BenchmarkManager"}),e.register("IManager",{useToken:"BenchmarkManager"})}function Ni(e){ki(e),Gi(e),zi(e),qt(e)}function Ui(e){qt(e)}function Yt(e){e.registerSingleton("IMiddleware",tt),e.registerSingleton("IMediator",rt)}function Xi(e){e.registerSingleton("EditorStore",Je),e.registerSingleton("ExportStore",$t)}function qi(e){e.registerSingleton("ExportStore",$t)}function Yi(e){e.registerSingleton("MetricsStore",Qe)}function Ki(e){e.registerSingleton("EditorHub",exports.EditorHub)}function Zi(e){e.registerSingleton("ViewerHub",exports.ViewerHub)}function Ji(e){e.registerSingleton("BenchmarkHub",exports.BenchmarkHub)}function Kt(e,t,r){return Gt(e,t),zt(e,r),Ci(e),at(e),Ei(e),Wt(e),Ut(e),Xt(e),Vi(e),Hi(e),Bi(e),Ri(e),Ni(e),Yt(e),Ki(e),Xi(e),e}function Qi(e,t,r){return Kt(e,t,r),Oi(e),Di(e),Pi(e),$i(e),Wi(e),Yi(e),Ji(e),e}function en(e,t,r){return Gt(e,t),zt(e,r),at(e),Wt(e),Ti(e),Li(e),Fi(e),Ui(e),Yt(e),Zi(e),qi(e),e}function tn(e,t){return te||(te=Kt(ot(),e,t),te)}function rn(e,t){return re||(re=en(ot(),e,t),re)}function sn(e,t){return se||(se=Qi(ot(),e,t),se)}let E=null;const nn=(e,t)=>(E||(E=tn(e,t)),E.resolve("EditorHub")),on=()=>{if(!E)throw new Error("EditorHub is not initialized. Call createEditorHub(canvas) first.");return E.resolve("EditorHub")},an=(e,t)=>(E||(E=rn(e,t)),E.resolve("ViewerHub")),cn=()=>{if(!E)throw new Error("ViewerHub is not initialized. Call createViewerHub(canvas) first.");return E.resolve("ViewerHub")},ln=(e,t)=>(E||(E=sn(e,t)),E.resolve("BenchmarkHub")),hn=()=>{if(!E)throw new Error("ViewerHub is not initialized. Call createBenchmarkHub(canvas) first.");return E.resolve("BenchmarkHub")};exports.EventTopics=V;exports.FeatureType=C;exports.ObjLoader=yr;exports.createBenchmarkHub=ln;exports.createEditorHub=nn;exports.createViewerHub=an;exports.getBenchmarkHub=hn;exports.getEditorHub=on;exports.getViewerHub=cn;
package/dist/index.es.js CHANGED
@@ -3524,7 +3524,7 @@ let ut = class {
3524
3524
  * @public
3525
3525
  * @method
3526
3526
  */
3527
- run(e) {
3527
+ async run(e) {
3528
3528
  this._store.clear();
3529
3529
  const t = [];
3530
3530
  for (const s of e.tests) {
@@ -3532,7 +3532,7 @@ let ut = class {
3532
3532
  type: P.Benchmark,
3533
3533
  payload: [s, e.durationMs]
3534
3534
  });
3535
- t.push({
3535
+ await this._wait(e.durationMs + 300), t.push({
3536
3536
  type: s,
3537
3537
  status: r === null ? Pe.Success : Pe.Failed
3538
3538
  });
@@ -3582,6 +3582,11 @@ let ut = class {
3582
3582
  dispose() {
3583
3583
  this._mediator.dispose(), this._worker.dispose(), this._store.clear();
3584
3584
  }
3585
+ _wait(e) {
3586
+ return new Promise((t) => {
3587
+ window.setTimeout(t, e);
3588
+ });
3589
+ }
3585
3590
  };
3586
3591
  ut = Zi([
3587
3592
  v(),
@@ -43,7 +43,7 @@ export declare class BenchmarkHub implements Disposable_2 {
43
43
  * @public
44
44
  * @method
45
45
  */
46
- run(config: BenchmarkConfig): BenchmarkRunResult;
46
+ run(config: BenchmarkConfig): Promise<BenchmarkRunResult>;
47
47
  /**
48
48
  * Возвращает отчет по успешно выполненным benchmark-тестам.
49
49
  *
@@ -75,6 +75,7 @@ export declare class BenchmarkHub implements Disposable_2 {
75
75
  */
76
76
  stop(): void;
77
77
  dispose(): Promise<void> | void;
78
+ private _wait;
78
79
  }
79
80
 
80
81
  /**
@@ -43,7 +43,7 @@ export declare class BenchmarkHub implements Disposable_2 {
43
43
  * @public
44
44
  * @method
45
45
  */
46
- run(config: BenchmarkConfig): BenchmarkRunResult;
46
+ run(config: BenchmarkConfig): Promise<BenchmarkRunResult>;
47
47
  /**
48
48
  * Возвращает отчет по успешно выполненным benchmark-тестам.
49
49
  *
@@ -75,6 +75,7 @@ export declare class BenchmarkHub implements Disposable_2 {
75
75
  */
76
76
  stop(): void;
77
77
  dispose(): Promise<void> | void;
78
+ private _wait;
78
79
  }
79
80
 
80
81
  /**
package/dist/index.umd.js CHANGED
@@ -17,4 +17,4 @@
17
17
  `;s+=v}function g(_){let v=0;const M=_.geometry,y=M.getAttribute("position"),j=M.getAttribute("color");if(r+="o "+_.name+`
18
18
  `,y!==void 0){for(let x=0,S=y.count;x<S;x++,v++)o.fromBufferAttribute(y,x),o.applyMatrix4(_.matrixWorld),r+="v "+o.x+" "+o.y+" "+o.z,j!==void 0&&(l.fromBufferAttribute(j,x),b.ColorManagement.workingToColorSpace(l,b.SRGBColorSpace),r+=" "+l.r+" "+l.g+" "+l.b),r+=`
19
19
  `;r+="p ";for(let x=1,S=y.count;x<=S;x++)r+=s+x+" ";r+=`
20
- `}s+=v}return t.traverse(function(_){_.isMesh===!0&&m(_),_.isLine===!0&&f(_),_.isPoints===!0&&g(_)}),r}}var Ks=Object.getOwnPropertyDescriptor,Zs=(e,t,r,s)=>{for(var i=s>1?void 0:s?Ks(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Et=(e,t)=>(r,s)=>t(r,s,e);let ne=class{constructor(e,t){this._api=e,this._exportStore=t}mode=h.SceneMode.Export;handle(){const e=this._api.getScene(),t=gr(e),s=new Ys().parse(t),i=Date.now();this._exportStore.setResult({format:"obj",filename:`scene-${i}.obj`,mimeType:"text/plain;charset=utf-8",content:s,createdAt:i})}rollback(){}dispose(){this._exportStore.clearResult()}};ne=Zs([a.injectable(),Et(0,a.inject("ISceneApi")),Et(1,a.inject("ExportStore"))],ne);var Js=Object.defineProperty,Qs=Object.getOwnPropertyDescriptor,Vt=(e,t,r,s)=>{for(var i=s>1?void 0:s?Qs(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&Js(t,r,i),i},Bt=(e,t)=>(r,s)=>t(r,s,e);let W=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.Load;handle(e){const t=[...this._api.getMeshes()];this._api.removeMeshes(t);const r=xt(e);this._api.addMeshes(r)}rollback(){}dispose(){}};Vt([It(e=>e._validator)],W.prototype,"handle",1),W=Vt([a.injectable(),Bt(0,a.inject("IMeshApi")),Bt(1,a.inject("ObjValidator"))],W);var ei=Object.defineProperty,ti=Object.getOwnPropertyDescriptor,Ft=(e,t,r,s)=>{for(var i=s>1?void 0:s?ti(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&ei(t,r,i),i},$t=(e,t)=>(r,s)=>t(r,s,e);let N=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.LoadFigure;handle(e){const t=xt(e);this._api.addMeshes(t)}rollback(){}dispose(){}};Ft([It(e=>e._validator)],N.prototype,"handle",1),N=Ft([a.injectable(),$t(0,a.inject("IMeshApi")),$t(1,a.inject("ObjValidator"))],N);class oe{constructor(t,r,s,i){this._sceneApi=t,this._interactionApi=r,this._metricsApi=s,this._store=i}_group=null;_liveTimerId=null;async handle(t){this._interactionApi.setInteractionEnabled(!1),this._prepareScene(),this._metricsApi.start(this.objectsCount),this._startLiveMetrics(),await this._wait(t),this._stopLiveMetrics(),this._metricsApi.stop();const r=this._metricsApi.getMetrics();this._store.setCurrentMetrics(r),this._store.addMetrics(this.mode,r),this._interactionApi.setInteractionEnabled(!0)}rollback(){this._interactionApi.setInteractionEnabled(!0),this._stopLiveMetrics(),this._metricsApi.stop(),this._metricsApi.reset(),this._store.setCurrentMetrics(null),this._group&&(this._sceneApi.removeFromScene(this._group,!0),this._group.clear(),this._group=null)}dispose(){this.rollback()}_prepareScene(){const t=new c.Group;t.name=this.groupName,this.fillGroup(t),this._group=t,this._sceneApi.addToScene(t)}_wait(t){return new Promise(r=>{window.setTimeout(r,t)})}_startLiveMetrics(){this._stopLiveMetrics(),this._liveTimerId=window.setInterval(()=>{this._store.setCurrentMetrics(this._metricsApi.getMetrics())},250)}_stopLiveMetrics(){this._liveTimerId!==null&&(window.clearInterval(this._liveTimerId),this._liveTimerId=null)}}var ri=Object.getOwnPropertyDescriptor,si=(e,t,r,s)=>{for(var i=s>1?void 0:s?ri(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},ae=(e,t)=>(r,s)=>t(r,s,e);let Je=class extends oe{mode=h.BenchmarkTestType.Light;groupName="__LIGHT_BENCHMARK__";objectsCount=ge;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.BoxGeometry(.4,.4,.4),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set(i-r,.2,n-r),e.add(d)}}};Je=si([a.injectable(),ae(0,a.inject("ISceneApi")),ae(1,a.inject("IInteractionApi")),ae(2,a.inject("IMetricsApi")),ae(3,a.inject("MetricsStore"))],Je);var ii=Object.getOwnPropertyDescriptor,ni=(e,t,r,s)=>{for(var i=s>1?void 0:s?ii(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},ce=(e,t)=>(r,s)=>t(r,s,e);let Qe=class extends oe{mode=h.BenchmarkTestType.Medium;groupName="__MEDIUM_BENCHMARK__";objectsCount=ge;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.CylinderGeometry(.18,.18,.45,24),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.6,.225,(n-r)*.6),e.add(d)}}};Qe=ni([a.injectable(),ce(0,a.inject("ISceneApi")),ce(1,a.inject("IInteractionApi")),ce(2,a.inject("IMetricsApi")),ce(3,a.inject("MetricsStore"))],Qe);var oi=Object.getOwnPropertyDescriptor,ai=(e,t,r,s)=>{for(var i=s>1?void 0:s?oi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},le=(e,t)=>(r,s)=>t(r,s,e);let et=class extends oe{mode=h.BenchmarkTestType.Heavy;groupName="__HEAVY_BENCHMARK__";objectsCount=ge;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.TorusKnotGeometry(.16,.05,64,12),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.7,.25,(n-r)*.7),e.add(d)}}};et=ai([a.injectable(),le(0,a.inject("ISceneApi")),le(1,a.inject("IInteractionApi")),le(2,a.inject("IMetricsApi")),le(3,a.inject("MetricsStore"))],et);var ci=Object.getOwnPropertyDescriptor,li=(e,t,r,s)=>{for(var i=s>1?void 0:s?ci(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},he=(e,t)=>(r,s)=>t(r,s,e);let tt=class extends oe{mode=h.BenchmarkTestType.Mixed;groupName="__MIXED_BENCHMARK__";objectsCount=gt+vt+bt;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){this._addLightObjects(e,-10),this._addMediumObjects(e,0),this._addHardObjects(e,10)}_addLightObjects(e,t){this._addGrid(e,gt,t,()=>new c.Mesh(new c.BoxGeometry(.3,.3,.3),new c.MeshStandardMaterial))}_addMediumObjects(e,t){this._addGrid(e,vt,t,()=>new c.Mesh(new c.CylinderGeometry(.18,.18,.45,24),new c.MeshStandardMaterial))}_addHardObjects(e,t){this._addGrid(e,bt,t,()=>new c.Mesh(new c.TorusKnotGeometry(.16,.05,64,12),new c.MeshStandardMaterial))}_addGrid(e,t,r,s){const i=Math.ceil(Math.sqrt(t)),n=i/2;for(let o=0;o<t;o+=1){const l=o%i,d=Math.floor(o/i),u=s(o);u.position.set(r+(l-n)*.65,.25,(d-n)*.65),e.add(u)}}};tt=li([a.injectable(),he(0,a.inject("ISceneApi")),he(1,a.inject("IInteractionApi")),he(2,a.inject("IMetricsApi")),he(3,a.inject("MetricsStore"))],tt);var hi=Object.getOwnPropertyDescriptor,di=(e,t,r,s)=>{for(var i=s>1?void 0:s?hi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},U=(e,t)=>(r,s)=>t(r,s,e);w.EditorHub=class{constructor(t,r,s,i,n){this._renderer=t,this._mediator=r,this._store=s,this._exportStore=i,this._worker=n,this.setSelectMode(h.SelectMode.Mesh),this.setToolMode(h.ToolType.Translate)}setDisplayMode(t){return this._mediator.send({type:P.Display,payload:[t]})}setSelectMode(t){return this._mediator.send({type:P.Select,payload:[t]})}setToolMode(t){return this._mediator.send({type:P.Tool,payload:[t]})}addFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.AddFigure,t]})}deleteFigure(){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.DeleteFigure]})}loadFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.Load,t]})}exportScene(){return this._exportStore.clearResult(),{response:this._mediator.send({type:P.Scene,payload:[h.SceneMode.Export]}),result:this._exportStore.getResult()}}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}getSelectionStats(){return this._store.getSelectionStats()}onSelectionStatsChange(t){const r=this._store.onSelectedObjectChange(()=>{t()}),s=this._store.onSelectedTransformChange(()=>{t()});return()=>{r(),s()}}dispose(){this._mediator.dispose(),this._worker.dispose()}},w.EditorHub=di([a.injectable(),U(0,a.inject("Renderer")),U(1,a.inject("IMediator")),U(2,a.inject("EditorStore")),U(3,a.inject("ExportStore")),U(4,a.inject("IWorker"))],w.EditorHub);var ui=Object.getOwnPropertyDescriptor,_i=(e,t,r,s)=>{for(var i=s>1?void 0:s?ui(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},rt=(e,t)=>(r,s)=>t(r,s,e);w.ViewerHub=class{constructor(t,r,s){this._renderer=t,this._mediator=r,this._worker=s}addFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.AddFigure,t]})}loadFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.Load,t]})}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose()}},w.ViewerHub=_i([a.injectable(),rt(0,a.inject("Renderer")),rt(1,a.inject("IMediator")),rt(2,a.inject("IWorker"))],w.ViewerHub);var mi=Object.getOwnPropertyDescriptor,pi=(e,t,r,s)=>{for(var i=s>1?void 0:s?mi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},de=(e,t)=>(r,s)=>t(r,s,e);w.BenchmarkHub=class{constructor(t,r,s,i){this._renderer=t,this._mediator=r,this._store=s,this._worker=i}run(t){this._store.clear();const r=[];for(const s of t.tests){const i=this._mediator.send({type:P.Benchmark,payload:[s,t.durationMs]});r.push({type:s,status:i===null?h.BenchmarkTestStatus.Success:h.BenchmarkTestStatus.Failed})}return{tests:r}}getReport(){return this._store.getReport()}subscribeMetrics(t){return this._store.subscribe(t)}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose(),this._store.clear()}},w.BenchmarkHub=pi([a.injectable(),de(0,a.inject("Renderer")),de(1,a.inject("IMediator")),de(2,a.inject("MetricsStore")),de(3,a.inject("IWorker"))],w.BenchmarkHub);var fi=Object.getOwnPropertyDescriptor,gi=(e,t,r,s)=>{for(var i=s>1?void 0:s?fi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let st=class{_selectMode=h.SelectMode.Mesh;_toolType=h.ToolType.Translate;_displayMode=h.DisplayMode.Plane;_selectedObject=null;_selectedListeners=new Set;_transformListeners=new Set;constructor(){Y.makeAutoObservable(this,{},{autoBind:!0})}getSelectMode(){return this._selectMode}getToolType(){return this._toolType}getDisplayMode(){return this._displayMode}setSelectMode(e){this._selectMode=e}setToolType(e){this._toolType=e}setDisplayMode(e){this._displayMode=e}getSelectedObject(){return this._selectedObject}getSelectionStats(){const e=this._selectedObject;return e?_r(e):null}setSelectedObject(e){if(this._selectedObject!==e){this._selectedObject=e;for(const t of this._selectedListeners)t(this._selectedObject)}}onSelectedObjectChange(e){return this._selectedListeners.add(e),()=>this._selectedListeners.delete(e)}onSelectedTransformChange(e){return this._transformListeners.add(e),()=>this._transformListeners.delete(e)}notifySelectedTransformChange(){for(const e of this._transformListeners)e()}};st=gi([a.injectable()],st);class kt{_result=null;constructor(){Y.makeAutoObservable(this,{_result:Y.observable.ref},{autoBind:!0})}get result(){return this._result}get hasResult(){return this._result!==null}setResult(t){this._result=t}getResult(){return this._result}clearResult(){this._result=null}}var vi=Object.getOwnPropertyDescriptor,bi=(e,t,r,s)=>{for(var i=s>1?void 0:s?vi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let it=class{_createdAt=new Date().toISOString();_tests=[];_currentMetrics=null;_listeners=new Set;constructor(){Y.makeAutoObservable(this,{},{autoBind:!0})}clear(){this._createdAt=new Date().toISOString(),this._tests=[],this.setCurrentMetrics(null)}addMetrics(e,t){this._tests.push({type:e,status:h.BenchmarkTestStatus.Success,metrics:t})}setCurrentMetrics(e){this._currentMetrics=e;for(const t of this._listeners)t(this._currentMetrics)}getCurrentMetrics(){return this._currentMetrics}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}getReport(){return{createdAt:this._createdAt,tests:[...this._tests]}}};it=bi([a.injectable()],it);class Ht extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="PolicyException"}class ue extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="ValidationException"}var Mi=Object.getOwnPropertyDescriptor,wi=(e,t,r,s)=>{for(var i=s>1?void 0:s?Mi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Si=(e,t)=>(r,s)=>t(r,s,e);let nt=class{constructor(e){this._store=e}check(e){const t=this._store.getSelectMode();if(!h.DEFAULT_TOOL_RULES[t].includes(e))throw new Ht(h.ResponseType.NotAllowed,`Tool ${e} is not allowed`,"TOOL_NOT_ALLOWED")}};nt=wi([a.injectable(),Si(0,a.inject("EditorStore"))],nt);class Ai{constructor(){}validate(t){const r=t.trim();if(!r)throw new ue(h.ResponseType.ValidationError,"File content is empty.","FILE_CONTENT_EMPTY");if(!/^v\s+[-+.\deE]+\s+[-+.\deE]+\s+[-+.\deE]+/m.test(r))throw new ue(h.ResponseType.ValidationError,"OBJ content does not contain vertices.","WRONG_FILE_CONTENT");if(!/^f\s+/m.test(r))throw new ue(h.ResponseType.ValidationError,"OBJ content does not contain faces.","WRONG_FILE_CONTENT")}}var xi=Object.getOwnPropertyDescriptor,ji=(e,t,r,s)=>{for(var i=s>1?void 0:s?xi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let ot=class{handle(e){try{return e()}catch(t){return t instanceof Ht?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof ue?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof Error?{type:h.ResponseType.Error,message:t.message,code:"UNHANDLED_EXCEPTION",blocked:!0}:{type:h.ResponseType.Error,message:"Unknown exception",code:"UNKNOWN_EXCEPTION",blocked:!0}}}};ot=ji([a.injectable()],ot);var yi=Object.getOwnPropertyDescriptor,Ii=(e,t,r,s)=>{for(var i=s>1?void 0:s?yi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Rt=(e,t)=>(r,s)=>t(r,s,e);let at=class{constructor(e,t){this._middlewares=t,this._managers=new Map(e.map(r=>[r.type,r]))}_managers;send(e){const t=this._managers.get(e.type);if(!t)return{type:h.ResponseType.Error,message:`Manager for feature "${String(e.type)}" not found`,code:"MANAGER_NOT_FOUND",blocked:!0};const r=()=>(t.manage(...e.payload),null);return this._middlewares.reduceRight((i,n)=>()=>n.handle(i),r)()}dispose(){this._managers&&this._managers.clear()}};at=Ii([a.injectable(),Rt(0,a.injectAll("IManager")),Rt(1,a.injectAll("IMiddleware"))],at);let _e=null,me=null,pe=null;function ct(){return a.container.createChildContainer()}function Gt(e,t){e.registerInstance("Canvas",t)}function zt(e,t){e.registerInstance("RendererConfig",mr(vr,t))}function lt(e){e.registerSingleton("IWorker",be),e.registerSingleton("Renderer",w.Renderer),e.register("IRenderable",{useToken:"Renderer"}),e.register("IRendererAccess",{useToken:"Renderer"}),e.register("IRendererCameraAccess",{useToken:"Renderer"}),e.register("IRendererDomAccess",{useToken:"Renderer"}),e.register("IRendererSceneAccess",{useToken:"Renderer"})}function Ci(e){lt(e),e.register("IRendererInfoAccess",{useToken:"Renderer"})}function Oi(e){e.registerSingleton("EventBus",w.EventBus)}function Pi(e){e.registerSingleton("ToolPolicy",nt)}function Wt(e){e.registerSingleton("ObjValidator",Ai)}function Nt(e){e.registerSingleton("IMeshApi",we),e.registerSingleton("ICameraApi",je),e.registerSingleton("IDomApi",ye),e.registerSingleton("ISceneApi",Ie)}function Ut(e){Nt(e),e.registerSingleton("IControlsStateApi",Me),e.registerSingleton("IRaycastApi",Se),e.registerSingleton("ITransformApi",Ae),e.registerSingleton("IInteractionApi",xe)}function Ti(e){Nt(e)}function Li(e){Ut(e),e.registerSingleton("IRendererInfoApi",Ce)}function Xt(e){e.registerSingleton("ControlsModule",Q),e.registerSingleton("GizmoModule",Te),e.registerSingleton("RaycastModule",Le),e.registerSingleton("SceneModule",De),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRenderableModule",{useToken:"GizmoModule"}),e.register("IRuntimeModule",{useToken:"RaycastModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"}),e.register("IInteractiveModule",{useToken:"RaycastModule"}),e.register("IInteractiveModule",{useToken:"GizmoModule"})}function Di(e){e.registerSingleton("ControlsModule",Q),e.registerSingleton("SceneModule",Ee),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"})}function Ei(e){Xt(e),e.registerSingleton("MetricsModule",Ve),e.register("IObserverModule",{useToken:"MetricsModule"}),e.register("IMetricsApi",{useToken:"MetricsModule"})}function Vi(e){e.registerSingleton("IDisplayHandler",Ge)}function Bi(e){e.registerSingleton("ISelectHandler",Ne),e.registerSingleton("ISelectHandler",We),e.registerSingleton("ISelectHandler",ze),e.registerSingleton("ISelectHandler",Ue)}function Fi(e){e.registerSingleton("IToolHandler",Ke),e.registerSingleton("IToolHandler",Ye),e.registerSingleton("IToolHandler",qe)}function $i(e){e.registerSingleton("ISceneHandler",ie),e.registerSingleton("ISceneHandler",Ze),e.registerSingleton("ISceneHandler",ne),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function ki(e){e.registerSingleton("ISceneHandler",ie),e.registerSingleton("ISceneHandler",ne),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function Hi(e){e.registerSingleton("IBenchmarkHandler",Je),e.registerSingleton("IBenchmarkHandler",Qe),e.registerSingleton("IBenchmarkHandler",et),e.registerSingleton("IBenchmarkHandler",tt)}function Ri(e){e.registerSingleton("DisplayManager",Be),e.register("IDisplayManager",{useToken:"DisplayManager"}),e.register("IManager",{useToken:"DisplayManager"})}function Gi(e){e.registerSingleton("SelectManager",ke),e.register("ISelectManager",{useToken:"SelectManager"}),e.register("IManager",{useToken:"SelectManager"})}function zi(e){e.registerSingleton("ToolManager",ee),e.register("IToolManager",{useToken:"ToolManager"}),e.register("IManager",{useToken:"ToolManager"})}function qt(e){e.registerSingleton("SceneManager",Fe),e.register("ISceneManager",{useToken:"SceneManager"}),e.register("IManager",{useToken:"SceneManager"})}function Wi(e){e.registerSingleton("BenchmarkManager",Re),e.register("IBenchmarkManager",{useToken:"BenchmarkManager"}),e.register("IManager",{useToken:"BenchmarkManager"})}function Ni(e){Ri(e),Gi(e),zi(e),qt(e)}function Ui(e){qt(e)}function Yt(e){e.registerSingleton("IMiddleware",ot),e.registerSingleton("IMediator",at)}function Xi(e){e.registerSingleton("EditorStore",st),e.registerSingleton("ExportStore",kt)}function qi(e){e.registerSingleton("ExportStore",kt)}function Yi(e){e.registerSingleton("MetricsStore",it)}function Ki(e){e.registerSingleton("EditorHub",w.EditorHub)}function Zi(e){e.registerSingleton("ViewerHub",w.ViewerHub)}function Ji(e){e.registerSingleton("BenchmarkHub",w.BenchmarkHub)}function Kt(e,t,r){return Gt(e,t),zt(e,r),Oi(e),lt(e),Pi(e),Wt(e),Ut(e),Xt(e),Vi(e),Bi(e),Fi(e),$i(e),Ni(e),Yt(e),Ki(e),Xi(e),e}function Qi(e,t,r){return Kt(e,t,r),Ci(e),Ei(e),Li(e),Hi(e),Wi(e),Yi(e),Ji(e),e}function en(e,t,r){return Gt(e,t),zt(e,r),lt(e),Wt(e),Ti(e),Di(e),ki(e),Ui(e),Yt(e),Zi(e),qi(e),e}function tn(e,t){return _e||(_e=Kt(ct(),e,t),_e)}function rn(e,t){return me||(me=en(ct(),e,t),me)}function sn(e,t){return pe||(pe=Qi(ct(),e,t),pe)}let T=null;const nn=(e,t)=>(T||(T=tn(e,t)),T.resolve("EditorHub")),on=()=>{if(!T)throw new Error("EditorHub is not initialized. Call createEditorHub(canvas) first.");return T.resolve("EditorHub")},an=(e,t)=>(T||(T=rn(e,t)),T.resolve("ViewerHub")),cn=()=>{if(!T)throw new Error("ViewerHub is not initialized. Call createViewerHub(canvas) first.");return T.resolve("ViewerHub")},ln=(e,t)=>(T||(T=sn(e,t)),T.resolve("BenchmarkHub")),hn=()=>{if(!T)throw new Error("ViewerHub is not initialized. Call createBenchmarkHub(canvas) first.");return T.resolve("BenchmarkHub")};w.EventTopics=B,w.FeatureType=P,w.ObjLoader=wr,w.createBenchmarkHub=ln,w.createEditorHub=nn,w.createViewerHub=an,w.getBenchmarkHub=hn,w.getEditorHub=on,w.getViewerHub=cn,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
20
+ `}s+=v}return t.traverse(function(_){_.isMesh===!0&&m(_),_.isLine===!0&&f(_),_.isPoints===!0&&g(_)}),r}}var Ks=Object.getOwnPropertyDescriptor,Zs=(e,t,r,s)=>{for(var i=s>1?void 0:s?Ks(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Et=(e,t)=>(r,s)=>t(r,s,e);let ne=class{constructor(e,t){this._api=e,this._exportStore=t}mode=h.SceneMode.Export;handle(){const e=this._api.getScene(),t=gr(e),s=new Ys().parse(t),i=Date.now();this._exportStore.setResult({format:"obj",filename:`scene-${i}.obj`,mimeType:"text/plain;charset=utf-8",content:s,createdAt:i})}rollback(){}dispose(){this._exportStore.clearResult()}};ne=Zs([a.injectable(),Et(0,a.inject("ISceneApi")),Et(1,a.inject("ExportStore"))],ne);var Js=Object.defineProperty,Qs=Object.getOwnPropertyDescriptor,Vt=(e,t,r,s)=>{for(var i=s>1?void 0:s?Qs(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&Js(t,r,i),i},Bt=(e,t)=>(r,s)=>t(r,s,e);let W=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.Load;handle(e){const t=[...this._api.getMeshes()];this._api.removeMeshes(t);const r=xt(e);this._api.addMeshes(r)}rollback(){}dispose(){}};Vt([It(e=>e._validator)],W.prototype,"handle",1),W=Vt([a.injectable(),Bt(0,a.inject("IMeshApi")),Bt(1,a.inject("ObjValidator"))],W);var ei=Object.defineProperty,ti=Object.getOwnPropertyDescriptor,Ft=(e,t,r,s)=>{for(var i=s>1?void 0:s?ti(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=(s?o(t,r,i):o(i))||i);return s&&i&&ei(t,r,i),i},$t=(e,t)=>(r,s)=>t(r,s,e);let N=class{constructor(e,t){this._api=e,this._validator=t}mode=h.SceneMode.LoadFigure;handle(e){const t=xt(e);this._api.addMeshes(t)}rollback(){}dispose(){}};Ft([It(e=>e._validator)],N.prototype,"handle",1),N=Ft([a.injectable(),$t(0,a.inject("IMeshApi")),$t(1,a.inject("ObjValidator"))],N);class oe{constructor(t,r,s,i){this._sceneApi=t,this._interactionApi=r,this._metricsApi=s,this._store=i}_group=null;_liveTimerId=null;async handle(t){this._interactionApi.setInteractionEnabled(!1),this._prepareScene(),this._metricsApi.start(this.objectsCount),this._startLiveMetrics(),await this._wait(t),this._stopLiveMetrics(),this._metricsApi.stop();const r=this._metricsApi.getMetrics();this._store.setCurrentMetrics(r),this._store.addMetrics(this.mode,r),this._interactionApi.setInteractionEnabled(!0)}rollback(){this._interactionApi.setInteractionEnabled(!0),this._stopLiveMetrics(),this._metricsApi.stop(),this._metricsApi.reset(),this._store.setCurrentMetrics(null),this._group&&(this._sceneApi.removeFromScene(this._group,!0),this._group.clear(),this._group=null)}dispose(){this.rollback()}_prepareScene(){const t=new c.Group;t.name=this.groupName,this.fillGroup(t),this._group=t,this._sceneApi.addToScene(t)}_wait(t){return new Promise(r=>{window.setTimeout(r,t)})}_startLiveMetrics(){this._stopLiveMetrics(),this._liveTimerId=window.setInterval(()=>{this._store.setCurrentMetrics(this._metricsApi.getMetrics())},250)}_stopLiveMetrics(){this._liveTimerId!==null&&(window.clearInterval(this._liveTimerId),this._liveTimerId=null)}}var ri=Object.getOwnPropertyDescriptor,si=(e,t,r,s)=>{for(var i=s>1?void 0:s?ri(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},ae=(e,t)=>(r,s)=>t(r,s,e);let Je=class extends oe{mode=h.BenchmarkTestType.Light;groupName="__LIGHT_BENCHMARK__";objectsCount=ge;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.BoxGeometry(.4,.4,.4),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set(i-r,.2,n-r),e.add(d)}}};Je=si([a.injectable(),ae(0,a.inject("ISceneApi")),ae(1,a.inject("IInteractionApi")),ae(2,a.inject("IMetricsApi")),ae(3,a.inject("MetricsStore"))],Je);var ii=Object.getOwnPropertyDescriptor,ni=(e,t,r,s)=>{for(var i=s>1?void 0:s?ii(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},ce=(e,t)=>(r,s)=>t(r,s,e);let Qe=class extends oe{mode=h.BenchmarkTestType.Medium;groupName="__MEDIUM_BENCHMARK__";objectsCount=ge;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.CylinderGeometry(.18,.18,.45,24),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.6,.225,(n-r)*.6),e.add(d)}}};Qe=ni([a.injectable(),ce(0,a.inject("ISceneApi")),ce(1,a.inject("IInteractionApi")),ce(2,a.inject("IMetricsApi")),ce(3,a.inject("MetricsStore"))],Qe);var oi=Object.getOwnPropertyDescriptor,ai=(e,t,r,s)=>{for(var i=s>1?void 0:s?oi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},le=(e,t)=>(r,s)=>t(r,s,e);let et=class extends oe{mode=h.BenchmarkTestType.Heavy;groupName="__HEAVY_BENCHMARK__";objectsCount=ge;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){const t=Math.ceil(Math.sqrt(this.objectsCount)),r=t/2;for(let s=0;s<this.objectsCount;s+=1){const i=s%t,n=Math.floor(s/t),o=new c.TorusKnotGeometry(.16,.05,64,12),l=new c.MeshStandardMaterial,d=new c.Mesh(o,l);d.position.set((i-r)*.7,.25,(n-r)*.7),e.add(d)}}};et=ai([a.injectable(),le(0,a.inject("ISceneApi")),le(1,a.inject("IInteractionApi")),le(2,a.inject("IMetricsApi")),le(3,a.inject("MetricsStore"))],et);var ci=Object.getOwnPropertyDescriptor,li=(e,t,r,s)=>{for(var i=s>1?void 0:s?ci(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},he=(e,t)=>(r,s)=>t(r,s,e);let tt=class extends oe{mode=h.BenchmarkTestType.Mixed;groupName="__MIXED_BENCHMARK__";objectsCount=gt+vt+bt;constructor(e,t,r,s){super(e,t,r,s)}fillGroup(e){this._addLightObjects(e,-10),this._addMediumObjects(e,0),this._addHardObjects(e,10)}_addLightObjects(e,t){this._addGrid(e,gt,t,()=>new c.Mesh(new c.BoxGeometry(.3,.3,.3),new c.MeshStandardMaterial))}_addMediumObjects(e,t){this._addGrid(e,vt,t,()=>new c.Mesh(new c.CylinderGeometry(.18,.18,.45,24),new c.MeshStandardMaterial))}_addHardObjects(e,t){this._addGrid(e,bt,t,()=>new c.Mesh(new c.TorusKnotGeometry(.16,.05,64,12),new c.MeshStandardMaterial))}_addGrid(e,t,r,s){const i=Math.ceil(Math.sqrt(t)),n=i/2;for(let o=0;o<t;o+=1){const l=o%i,d=Math.floor(o/i),u=s(o);u.position.set(r+(l-n)*.65,.25,(d-n)*.65),e.add(u)}}};tt=li([a.injectable(),he(0,a.inject("ISceneApi")),he(1,a.inject("IInteractionApi")),he(2,a.inject("IMetricsApi")),he(3,a.inject("MetricsStore"))],tt);var hi=Object.getOwnPropertyDescriptor,di=(e,t,r,s)=>{for(var i=s>1?void 0:s?hi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},U=(e,t)=>(r,s)=>t(r,s,e);w.EditorHub=class{constructor(t,r,s,i,n){this._renderer=t,this._mediator=r,this._store=s,this._exportStore=i,this._worker=n,this.setSelectMode(h.SelectMode.Mesh),this.setToolMode(h.ToolType.Translate)}setDisplayMode(t){return this._mediator.send({type:P.Display,payload:[t]})}setSelectMode(t){return this._mediator.send({type:P.Select,payload:[t]})}setToolMode(t){return this._mediator.send({type:P.Tool,payload:[t]})}addFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.AddFigure,t]})}deleteFigure(){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.DeleteFigure]})}loadFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.Load,t]})}exportScene(){return this._exportStore.clearResult(),{response:this._mediator.send({type:P.Scene,payload:[h.SceneMode.Export]}),result:this._exportStore.getResult()}}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}getSelectionStats(){return this._store.getSelectionStats()}onSelectionStatsChange(t){const r=this._store.onSelectedObjectChange(()=>{t()}),s=this._store.onSelectedTransformChange(()=>{t()});return()=>{r(),s()}}dispose(){this._mediator.dispose(),this._worker.dispose()}},w.EditorHub=di([a.injectable(),U(0,a.inject("Renderer")),U(1,a.inject("IMediator")),U(2,a.inject("EditorStore")),U(3,a.inject("ExportStore")),U(4,a.inject("IWorker"))],w.EditorHub);var ui=Object.getOwnPropertyDescriptor,_i=(e,t,r,s)=>{for(var i=s>1?void 0:s?ui(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},rt=(e,t)=>(r,s)=>t(r,s,e);w.ViewerHub=class{constructor(t,r,s){this._renderer=t,this._mediator=r,this._worker=s}addFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.AddFigure,t]})}loadFigure(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.LoadFigure,t]})}loadScene(t){return this._mediator.send({type:P.Scene,payload:[h.SceneMode.Load,t]})}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose()}},w.ViewerHub=_i([a.injectable(),rt(0,a.inject("Renderer")),rt(1,a.inject("IMediator")),rt(2,a.inject("IWorker"))],w.ViewerHub);var mi=Object.getOwnPropertyDescriptor,pi=(e,t,r,s)=>{for(var i=s>1?void 0:s?mi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},de=(e,t)=>(r,s)=>t(r,s,e);w.BenchmarkHub=class{constructor(t,r,s,i){this._renderer=t,this._mediator=r,this._store=s,this._worker=i}async run(t){this._store.clear();const r=[];for(const s of t.tests){const i=this._mediator.send({type:P.Benchmark,payload:[s,t.durationMs]});await this._wait(t.durationMs+300),r.push({type:s,status:i===null?h.BenchmarkTestStatus.Success:h.BenchmarkTestStatus.Failed})}return{tests:r}}getReport(){return this._store.getReport()}subscribeMetrics(t){return this._store.subscribe(t)}resizeRenderer(){this._renderer.resize()}start(){this._worker.start()}stop(){this._worker.stop()}dispose(){this._mediator.dispose(),this._worker.dispose(),this._store.clear()}_wait(t){return new Promise(r=>{window.setTimeout(r,t)})}},w.BenchmarkHub=pi([a.injectable(),de(0,a.inject("Renderer")),de(1,a.inject("IMediator")),de(2,a.inject("MetricsStore")),de(3,a.inject("IWorker"))],w.BenchmarkHub);var fi=Object.getOwnPropertyDescriptor,gi=(e,t,r,s)=>{for(var i=s>1?void 0:s?fi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let st=class{_selectMode=h.SelectMode.Mesh;_toolType=h.ToolType.Translate;_displayMode=h.DisplayMode.Plane;_selectedObject=null;_selectedListeners=new Set;_transformListeners=new Set;constructor(){Y.makeAutoObservable(this,{},{autoBind:!0})}getSelectMode(){return this._selectMode}getToolType(){return this._toolType}getDisplayMode(){return this._displayMode}setSelectMode(e){this._selectMode=e}setToolType(e){this._toolType=e}setDisplayMode(e){this._displayMode=e}getSelectedObject(){return this._selectedObject}getSelectionStats(){const e=this._selectedObject;return e?_r(e):null}setSelectedObject(e){if(this._selectedObject!==e){this._selectedObject=e;for(const t of this._selectedListeners)t(this._selectedObject)}}onSelectedObjectChange(e){return this._selectedListeners.add(e),()=>this._selectedListeners.delete(e)}onSelectedTransformChange(e){return this._transformListeners.add(e),()=>this._transformListeners.delete(e)}notifySelectedTransformChange(){for(const e of this._transformListeners)e()}};st=gi([a.injectable()],st);class kt{_result=null;constructor(){Y.makeAutoObservable(this,{_result:Y.observable.ref},{autoBind:!0})}get result(){return this._result}get hasResult(){return this._result!==null}setResult(t){this._result=t}getResult(){return this._result}clearResult(){this._result=null}}var vi=Object.getOwnPropertyDescriptor,bi=(e,t,r,s)=>{for(var i=s>1?void 0:s?vi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let it=class{_createdAt=new Date().toISOString();_tests=[];_currentMetrics=null;_listeners=new Set;constructor(){Y.makeAutoObservable(this,{},{autoBind:!0})}clear(){this._createdAt=new Date().toISOString(),this._tests=[],this.setCurrentMetrics(null)}addMetrics(e,t){this._tests.push({type:e,status:h.BenchmarkTestStatus.Success,metrics:t})}setCurrentMetrics(e){this._currentMetrics=e;for(const t of this._listeners)t(this._currentMetrics)}getCurrentMetrics(){return this._currentMetrics}subscribe(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}getReport(){return{createdAt:this._createdAt,tests:[...this._tests]}}};it=bi([a.injectable()],it);class Ht extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="PolicyException"}class ue extends Error{constructor(t,r,s,i){super(r),this.type=t,this.code=s,this.meta=i,this.name=this._name}_name="ValidationException"}var Mi=Object.getOwnPropertyDescriptor,wi=(e,t,r,s)=>{for(var i=s>1?void 0:s?Mi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Si=(e,t)=>(r,s)=>t(r,s,e);let nt=class{constructor(e){this._store=e}check(e){const t=this._store.getSelectMode();if(!h.DEFAULT_TOOL_RULES[t].includes(e))throw new Ht(h.ResponseType.NotAllowed,`Tool ${e} is not allowed`,"TOOL_NOT_ALLOWED")}};nt=wi([a.injectable(),Si(0,a.inject("EditorStore"))],nt);class Ai{constructor(){}validate(t){const r=t.trim();if(!r)throw new ue(h.ResponseType.ValidationError,"File content is empty.","FILE_CONTENT_EMPTY");if(!/^v\s+[-+.\deE]+\s+[-+.\deE]+\s+[-+.\deE]+/m.test(r))throw new ue(h.ResponseType.ValidationError,"OBJ content does not contain vertices.","WRONG_FILE_CONTENT");if(!/^f\s+/m.test(r))throw new ue(h.ResponseType.ValidationError,"OBJ content does not contain faces.","WRONG_FILE_CONTENT")}}var xi=Object.getOwnPropertyDescriptor,ji=(e,t,r,s)=>{for(var i=s>1?void 0:s?xi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i};let ot=class{handle(e){try{return e()}catch(t){return t instanceof Ht?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof ue?{type:t.type,message:t.message,code:t.code,blocked:!0}:t instanceof Error?{type:h.ResponseType.Error,message:t.message,code:"UNHANDLED_EXCEPTION",blocked:!0}:{type:h.ResponseType.Error,message:"Unknown exception",code:"UNKNOWN_EXCEPTION",blocked:!0}}}};ot=ji([a.injectable()],ot);var yi=Object.getOwnPropertyDescriptor,Ii=(e,t,r,s)=>{for(var i=s>1?void 0:s?yi(t,r):t,n=e.length-1,o;n>=0;n--)(o=e[n])&&(i=o(i)||i);return i},Rt=(e,t)=>(r,s)=>t(r,s,e);let at=class{constructor(e,t){this._middlewares=t,this._managers=new Map(e.map(r=>[r.type,r]))}_managers;send(e){const t=this._managers.get(e.type);if(!t)return{type:h.ResponseType.Error,message:`Manager for feature "${String(e.type)}" not found`,code:"MANAGER_NOT_FOUND",blocked:!0};const r=()=>(t.manage(...e.payload),null);return this._middlewares.reduceRight((i,n)=>()=>n.handle(i),r)()}dispose(){this._managers&&this._managers.clear()}};at=Ii([a.injectable(),Rt(0,a.injectAll("IManager")),Rt(1,a.injectAll("IMiddleware"))],at);let _e=null,me=null,pe=null;function ct(){return a.container.createChildContainer()}function Gt(e,t){e.registerInstance("Canvas",t)}function zt(e,t){e.registerInstance("RendererConfig",mr(vr,t))}function lt(e){e.registerSingleton("IWorker",be),e.registerSingleton("Renderer",w.Renderer),e.register("IRenderable",{useToken:"Renderer"}),e.register("IRendererAccess",{useToken:"Renderer"}),e.register("IRendererCameraAccess",{useToken:"Renderer"}),e.register("IRendererDomAccess",{useToken:"Renderer"}),e.register("IRendererSceneAccess",{useToken:"Renderer"})}function Ci(e){lt(e),e.register("IRendererInfoAccess",{useToken:"Renderer"})}function Oi(e){e.registerSingleton("EventBus",w.EventBus)}function Pi(e){e.registerSingleton("ToolPolicy",nt)}function Wt(e){e.registerSingleton("ObjValidator",Ai)}function Nt(e){e.registerSingleton("IMeshApi",we),e.registerSingleton("ICameraApi",je),e.registerSingleton("IDomApi",ye),e.registerSingleton("ISceneApi",Ie)}function Ut(e){Nt(e),e.registerSingleton("IControlsStateApi",Me),e.registerSingleton("IRaycastApi",Se),e.registerSingleton("ITransformApi",Ae),e.registerSingleton("IInteractionApi",xe)}function Ti(e){Nt(e)}function Li(e){Ut(e),e.registerSingleton("IRendererInfoApi",Ce)}function Xt(e){e.registerSingleton("ControlsModule",Q),e.registerSingleton("GizmoModule",Te),e.registerSingleton("RaycastModule",Le),e.registerSingleton("SceneModule",De),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRenderableModule",{useToken:"GizmoModule"}),e.register("IRuntimeModule",{useToken:"RaycastModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"}),e.register("IInteractiveModule",{useToken:"RaycastModule"}),e.register("IInteractiveModule",{useToken:"GizmoModule"})}function Di(e){e.registerSingleton("ControlsModule",Q),e.registerSingleton("SceneModule",Ee),e.register("IUpdatableModule",{useToken:"ControlsModule"}),e.register("IRuntimeModule",{useToken:"SceneModule"}),e.register("IInteractiveModule",{useToken:"ControlsModule"})}function Ei(e){Xt(e),e.registerSingleton("MetricsModule",Ve),e.register("IObserverModule",{useToken:"MetricsModule"}),e.register("IMetricsApi",{useToken:"MetricsModule"})}function Vi(e){e.registerSingleton("IDisplayHandler",Ge)}function Bi(e){e.registerSingleton("ISelectHandler",Ne),e.registerSingleton("ISelectHandler",We),e.registerSingleton("ISelectHandler",ze),e.registerSingleton("ISelectHandler",Ue)}function Fi(e){e.registerSingleton("IToolHandler",Ke),e.registerSingleton("IToolHandler",Ye),e.registerSingleton("IToolHandler",qe)}function $i(e){e.registerSingleton("ISceneHandler",ie),e.registerSingleton("ISceneHandler",Ze),e.registerSingleton("ISceneHandler",ne),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function ki(e){e.registerSingleton("ISceneHandler",ie),e.registerSingleton("ISceneHandler",ne),e.registerSingleton("ISceneHandler",N),e.registerSingleton("ISceneHandler",W)}function Hi(e){e.registerSingleton("IBenchmarkHandler",Je),e.registerSingleton("IBenchmarkHandler",Qe),e.registerSingleton("IBenchmarkHandler",et),e.registerSingleton("IBenchmarkHandler",tt)}function Ri(e){e.registerSingleton("DisplayManager",Be),e.register("IDisplayManager",{useToken:"DisplayManager"}),e.register("IManager",{useToken:"DisplayManager"})}function Gi(e){e.registerSingleton("SelectManager",ke),e.register("ISelectManager",{useToken:"SelectManager"}),e.register("IManager",{useToken:"SelectManager"})}function zi(e){e.registerSingleton("ToolManager",ee),e.register("IToolManager",{useToken:"ToolManager"}),e.register("IManager",{useToken:"ToolManager"})}function qt(e){e.registerSingleton("SceneManager",Fe),e.register("ISceneManager",{useToken:"SceneManager"}),e.register("IManager",{useToken:"SceneManager"})}function Wi(e){e.registerSingleton("BenchmarkManager",Re),e.register("IBenchmarkManager",{useToken:"BenchmarkManager"}),e.register("IManager",{useToken:"BenchmarkManager"})}function Ni(e){Ri(e),Gi(e),zi(e),qt(e)}function Ui(e){qt(e)}function Yt(e){e.registerSingleton("IMiddleware",ot),e.registerSingleton("IMediator",at)}function Xi(e){e.registerSingleton("EditorStore",st),e.registerSingleton("ExportStore",kt)}function qi(e){e.registerSingleton("ExportStore",kt)}function Yi(e){e.registerSingleton("MetricsStore",it)}function Ki(e){e.registerSingleton("EditorHub",w.EditorHub)}function Zi(e){e.registerSingleton("ViewerHub",w.ViewerHub)}function Ji(e){e.registerSingleton("BenchmarkHub",w.BenchmarkHub)}function Kt(e,t,r){return Gt(e,t),zt(e,r),Oi(e),lt(e),Pi(e),Wt(e),Ut(e),Xt(e),Vi(e),Bi(e),Fi(e),$i(e),Ni(e),Yt(e),Ki(e),Xi(e),e}function Qi(e,t,r){return Kt(e,t,r),Ci(e),Ei(e),Li(e),Hi(e),Wi(e),Yi(e),Ji(e),e}function en(e,t,r){return Gt(e,t),zt(e,r),lt(e),Wt(e),Ti(e),Di(e),ki(e),Ui(e),Yt(e),Zi(e),qi(e),e}function tn(e,t){return _e||(_e=Kt(ct(),e,t),_e)}function rn(e,t){return me||(me=en(ct(),e,t),me)}function sn(e,t){return pe||(pe=Qi(ct(),e,t),pe)}let T=null;const nn=(e,t)=>(T||(T=tn(e,t)),T.resolve("EditorHub")),on=()=>{if(!T)throw new Error("EditorHub is not initialized. Call createEditorHub(canvas) first.");return T.resolve("EditorHub")},an=(e,t)=>(T||(T=rn(e,t)),T.resolve("ViewerHub")),cn=()=>{if(!T)throw new Error("ViewerHub is not initialized. Call createViewerHub(canvas) first.");return T.resolve("ViewerHub")},ln=(e,t)=>(T||(T=sn(e,t)),T.resolve("BenchmarkHub")),hn=()=>{if(!T)throw new Error("ViewerHub is not initialized. Call createBenchmarkHub(canvas) first.");return T.resolve("BenchmarkHub")};w.EventTopics=B,w.FeatureType=P,w.ObjLoader=wr,w.createBenchmarkHub=ln,w.createEditorHub=nn,w.createViewerHub=an,w.getBenchmarkHub=hn,w.getEditorHub=on,w.getViewerHub=cn,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planara/core",
3
- "version": "3.2.2",
3
+ "version": "3.2.3",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"