@roomle/web-sdk 3.6.0-alpha.3 → 3.6.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/BufferGeometry-DLEagG41.mjs +1022 -0
- package/lib/BufferGeometry-DLEagG41.mjs.map +1 -0
- package/lib/ConfiguratorKernel.wasm +0 -0
- package/lib/GLTFExporter-D8qsdwDK.mjs +1092 -0
- package/lib/GLTFExporter-D8qsdwDK.mjs.map +1 -0
- package/lib/Object3D-DSjIOhON.mjs +1713 -0
- package/lib/Object3D-DSjIOhON.mjs.map +1 -0
- package/lib/PointLightHelper-BnjxGaOG.mjs +257 -0
- package/lib/PointLightHelper-BnjxGaOG.mjs.map +1 -0
- package/lib/RoomleCore.wasm +0 -0
- package/lib/RoomleToolsCore.wasm +0 -0
- package/lib/SpotLightHelper-DqsfqCrs.mjs +154 -0
- package/lib/SpotLightHelper-DqsfqCrs.mjs.map +1 -0
- package/lib/USDZExporter-DxIqi8St.mjs +296 -0
- package/lib/USDZExporter-DxIqi8St.mjs.map +1 -0
- package/lib/Vector4-DGmBYfpK.mjs +204 -0
- package/lib/Vector4-DGmBYfpK.mjs.map +1 -0
- package/lib/api-CNoIBuvr.mjs +55 -0
- package/lib/api-CNoIBuvr.mjs.map +1 -0
- package/lib/banana-for-scale-C_iNmlCT.mjs +36 -0
- package/lib/banana-for-scale-C_iNmlCT.mjs.map +1 -0
- package/lib/common-utils-DMSTohiS.mjs +187 -0
- package/lib/common-utils-DMSTohiS.mjs.map +1 -0
- package/lib/component-dimensioning-CvRmUja4.mjs +162 -0
- package/lib/component-dimensioning-CvRmUja4.mjs.map +1 -0
- package/lib/component-raycast-helper-CEp7wy9c.mjs +97 -0
- package/lib/component-raycast-helper-CEp7wy9c.mjs.map +1 -0
- package/lib/configurator-B_5XVG2O.mjs +45 -0
- package/lib/configurator-B_5XVG2O.mjs.map +1 -0
- package/lib/configurator-DCdvMM0o.mjs +2 -0
- package/lib/continuous-drawing-helper-v_5UAM9A.mjs +42 -0
- package/lib/continuous-drawing-helper-v_5UAM9A.mjs.map +1 -0
- package/lib/decorate-C1QnXPYw.mjs +35 -0
- package/lib/decorate-C1QnXPYw.mjs.map +1 -0
- package/lib/dimensioning-helper-DTcW85Oq.mjs +2 -0
- package/lib/dimensioning-helper-Fwpt1HTT.mjs +268 -0
- package/lib/dimensioning-helper-Fwpt1HTT.mjs.map +1 -0
- package/lib/fflate.module-dFNj5UPI.mjs +536 -0
- package/lib/fflate.module-dFNj5UPI.mjs.map +1 -0
- package/lib/glb-viewer-cP8g6bcm.mjs +315 -0
- package/lib/glb-viewer-cP8g6bcm.mjs.map +1 -0
- package/lib/glb-viewer-dZThmlwM.mjs +2 -0
- package/lib/homag-intelligence-LoOJ7roM.mjs +381 -0
- package/lib/homag-intelligence-LoOJ7roM.mjs.map +1 -0
- package/lib/imos-ix-poc-export-helper-CQh94HsO.mjs +161 -0
- package/lib/imos-ix-poc-export-helper-CQh94HsO.mjs.map +1 -0
- package/lib/kernel-BAQSG9r5.mjs +46 -0
- package/lib/kernel-BAQSG9r5.mjs.map +1 -0
- package/lib/kernel-utils-H74uNY1h.mjs +44 -0
- package/lib/kernel-utils-H74uNY1h.mjs.map +1 -0
- package/lib/layer-C_JtkhdO.mjs +8 -0
- package/lib/layer-C_JtkhdO.mjs.map +1 -0
- package/lib/main-BxEZ11ag.mjs +20461 -0
- package/lib/main-BxEZ11ag.mjs.map +1 -0
- package/lib/material-viewer-njBFF0Zg.mjs +292 -0
- package/lib/material-viewer-njBFF0Zg.mjs.map +1 -0
- package/lib/planner-Cr495Cyn.mjs +2 -0
- package/lib/planner-DY73rplC.mjs +44 -0
- package/lib/planner-DY73rplC.mjs.map +1 -0
- package/lib/plugin-system-D9K46xJk.mjs +55 -0
- package/lib/plugin-system-D9K46xJk.mjs.map +1 -0
- package/lib/roomle-sdk.d.ts +15 -2
- package/lib/roomle-sdk.js +7 -36
- package/lib/scene-renderer-D8HkTFeZ.mjs +3826 -0
- package/lib/scene-renderer-D8HkTFeZ.mjs.map +1 -0
- package/lib/script-loader-KBq8SjP6.mjs +45 -0
- package/lib/script-loader-KBq8SjP6.mjs.map +1 -0
- package/lib/static/draco/node_modules/three/examples/jsm/libs/draco/draco_decoder.js +34 -0
- package/lib/static/draco/node_modules/three/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
- package/lib/static/draco/node_modules/three/examples/jsm/libs/draco/draco_encoder.js +33 -0
- package/lib/static/draco/node_modules/three/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
- package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -0
- package/lib/static/roomle-core-hsc/{src → node_modules/roomle-core-hsc/src}/embind/plannerCoreInterface.d.ts +2 -0
- package/lib/static/roomle-core-hsc/{wasm_modern → node_modules/roomle-core-hsc/wasm_modern}/ConfiguratorKernel.wasm +0 -0
- package/lib/static/roomle-core-hsc/{RoomleCore.wasm → node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm} +0 -0
- package/lib/static/roomle-core-hsc/{wasm_modern → node_modules/roomle-core-hsc/wasm_modern}/RoomleToolsCore.wasm +0 -0
- package/lib/stats-helper-HM0TaIM5.mjs +95 -0
- package/lib/stats-helper-HM0TaIM5.mjs.map +1 -0
- package/lib/three.core-CLIofecG.mjs +7629 -0
- package/lib/three.core-CLIofecG.mjs.map +1 -0
- package/lib/three.module-C4Q1skJQ.mjs +5795 -0
- package/lib/three.module-C4Q1skJQ.mjs.map +1 -0
- package/lib/three.webgpu-dFspy2yF.mjs +16057 -0
- package/lib/three.webgpu-dFspy2yF.mjs.map +1 -0
- package/lib/threejs-utils-jEzvlJF1.mjs +2233 -0
- package/lib/threejs-utils-jEzvlJF1.mjs.map +1 -0
- package/lib/tools-core-CZbPygRC.mjs +30 -0
- package/lib/tools-core-CZbPygRC.mjs.map +1 -0
- package/package.json +1 -1
- package/lib/BufferGeometry-C1o0MiFL.mjs +0 -2064
- package/lib/BufferGeometry-C1o0MiFL.mjs.map +0 -1
- package/lib/GLTFExporter-CXMBueJw.mjs +0 -1323
- package/lib/GLTFExporter-CXMBueJw.mjs.map +0 -1
- package/lib/PointLightHelper-ICWLqwjK.mjs +0 -522
- package/lib/PointLightHelper-ICWLqwjK.mjs.map +0 -1
- package/lib/SpotLightHelper-CW5lDGFp.mjs +0 -222
- package/lib/SpotLightHelper-CW5lDGFp.mjs.map +0 -1
- package/lib/USDZExporter-CUp3dX08.mjs +0 -552
- package/lib/USDZExporter-CUp3dX08.mjs.map +0 -1
- package/lib/banana-for-scale-CfQ8dnY2.mjs +0 -50
- package/lib/banana-for-scale-CfQ8dnY2.mjs.map +0 -1
- package/lib/component-dimensioning-C9AWhxvj.mjs +0 -237
- package/lib/component-dimensioning-C9AWhxvj.mjs.map +0 -1
- package/lib/continuous-drawing-helper-B5BlbPPz.mjs +0 -48
- package/lib/continuous-drawing-helper-B5BlbPPz.mjs.map +0 -1
- package/lib/homag-intelligence-UFo9Z8FS.mjs +0 -549
- package/lib/homag-intelligence-UFo9Z8FS.mjs.map +0 -1
- package/lib/imos-ix-poc-export-helper-CGSk-8yx.mjs +0 -180
- package/lib/imos-ix-poc-export-helper-CGSk-8yx.mjs.map +0 -1
- package/lib/index-DIyMlQBA.mjs +0 -100947
- package/lib/index-DIyMlQBA.mjs.map +0 -1
- package/lib/material-viewer-QTlidNBs.mjs +0 -451
- package/lib/material-viewer-QTlidNBs.mjs.map +0 -1
- package/lib/roomle-sdk.js.map +0 -1
- package/lib/static/draco/gltf/draco_decoder.js +0 -33
- package/lib/static/draco/gltf/draco_decoder.wasm +0 -0
- package/lib/static/draco/gltf/draco_encoder.js +0 -33
- package/lib/static/draco/gltf/draco_wasm_wrapper.js +0 -116
- package/lib/static/roomle-core-hsc/ConfiguratorKernel.wasm +0 -0
- package/lib/static/roomle-core-hsc/RoomleToolsCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/embind/configuratorCallback.d.ts +0 -82
- package/lib/static/roomle-core-hsc/embind/configuratorCallback.js +0 -355
- package/lib/static/roomle-core-hsc/embind/configuratorCallback.js.map +0 -1
- package/lib/static/roomle-core-hsc/embind/configuratorCore.d.ts +0 -19
- package/lib/static/roomle-core-hsc/embind/configuratorCore.js +0 -50
- package/lib/static/roomle-core-hsc/embind/configuratorCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/embind/configuratorCoreInterface.d.ts +0 -746
- package/lib/static/roomle-core-hsc/embind/configuratorCoreInterface.js +0 -99
- package/lib/static/roomle-core-hsc/embind/configuratorCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/embind/configuratorUtils.d.ts +0 -3
- package/lib/static/roomle-core-hsc/embind/configuratorUtils.js +0 -52
- package/lib/static/roomle-core-hsc/embind/configuratorUtils.js.map +0 -1
- package/lib/static/roomle-core-hsc/embind/coreModue.d.ts +0 -4
- package/lib/static/roomle-core-hsc/embind/coreModue.js +0 -3
- package/lib/static/roomle-core-hsc/embind/coreModue.js.map +0 -1
- package/lib/static/roomle-core-hsc/embind/coreModule.d.ts +0 -11
- package/lib/static/roomle-core-hsc/embind/coreModule.js +0 -19
- package/lib/static/roomle-core-hsc/embind/coreModule.js.map +0 -1
- package/lib/static/roomle-core-hsc/embind/plannerCoreInterface.d.ts +0 -851
- package/lib/static/roomle-core-hsc/loader/configurableObject.d.ts +0 -30
- package/lib/static/roomle-core-hsc/loader/configurableObject.js +0 -111
- package/lib/static/roomle-core-hsc/loader/configurableObject.js.map +0 -1
- package/lib/static/roomle-core-hsc/loader/configurationGeometryConstructor.d.ts +0 -21
- package/lib/static/roomle-core-hsc/loader/configurationGeometryConstructor.js +0 -90
- package/lib/static/roomle-core-hsc/loader/configurationGeometryConstructor.js.map +0 -1
- package/lib/static/roomle-core-hsc/loader/configurationLoader.d.ts +0 -116
- package/lib/static/roomle-core-hsc/loader/configurationLoader.js +0 -345
- package/lib/static/roomle-core-hsc/loader/configurationLoader.js.map +0 -1
- package/lib/static/roomle-core-hsc/loader/configurationManager.d.ts +0 -41
- package/lib/static/roomle-core-hsc/loader/configurationManager.js +0 -147
- package/lib/static/roomle-core-hsc/loader/configurationManager.js.map +0 -1
- package/lib/static/roomle-core-hsc/loaderUtility.d.ts +0 -81
- package/lib/static/roomle-core-hsc/loaderUtility.js +0 -141
- package/lib/static/roomle-core-hsc/loaderUtility.js.map +0 -1
- package/lib/static/roomle-core-hsc/logger.d.ts +0 -29
- package/lib/static/roomle-core-hsc/logger.js +0 -61
- package/lib/static/roomle-core-hsc/logger.js.map +0 -1
- package/lib/static/roomle-core-hsc/package.json +0 -1
- package/lib/static/roomle-core-hsc/planElementManager.d.ts +0 -96
- package/lib/static/roomle-core-hsc/planElementManager.js +0 -300
- package/lib/static/roomle-core-hsc/planElementManager.js.map +0 -1
- package/lib/static/roomle-core-hsc/plannerCore.d.ts +0 -31
- package/lib/static/roomle-core-hsc/plannerCore.js +0 -111
- package/lib/static/roomle-core-hsc/plannerCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/plannerCoreCallback.d.ts +0 -39
- package/lib/static/roomle-core-hsc/plannerCoreCallback.js +0 -116
- package/lib/static/roomle-core-hsc/plannerCoreCallback.js.map +0 -1
- package/lib/static/roomle-core-hsc/plannerCoreInterface.d.ts +0 -851
- package/lib/static/roomle-core-hsc/plannerCoreInterface.js +0 -93
- package/lib/static/roomle-core-hsc/plannerCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/rapiAccess.d.ts +0 -70
- package/lib/static/roomle-core-hsc/rapiAccess.js +0 -227
- package/lib/static/roomle-core-hsc/rapiAccess.js.map +0 -1
- package/lib/static/roomle-core-hsc/serviceCore.d.ts +0 -20
- package/lib/static/roomle-core-hsc/serviceCore.js +0 -54
- package/lib/static/roomle-core-hsc/serviceCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/serviceCoreInterface.d.ts +0 -13
- package/lib/static/roomle-core-hsc/serviceCoreInterface.js +0 -3
- package/lib/static/roomle-core-hsc/serviceCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/configuratorCallback.d.ts +0 -82
- package/lib/static/roomle-core-hsc/src/embind/configuratorCallback.js +0 -355
- package/lib/static/roomle-core-hsc/src/embind/configuratorCallback.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/configuratorCore.d.ts +0 -19
- package/lib/static/roomle-core-hsc/src/embind/configuratorCore.js +0 -50
- package/lib/static/roomle-core-hsc/src/embind/configuratorCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/configuratorCoreInterface.d.ts +0 -746
- package/lib/static/roomle-core-hsc/src/embind/configuratorCoreInterface.js +0 -99
- package/lib/static/roomle-core-hsc/src/embind/configuratorCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/configuratorUtils.d.ts +0 -3
- package/lib/static/roomle-core-hsc/src/embind/configuratorUtils.js +0 -52
- package/lib/static/roomle-core-hsc/src/embind/configuratorUtils.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/coreModue.d.ts +0 -4
- package/lib/static/roomle-core-hsc/src/embind/coreModue.js +0 -3
- package/lib/static/roomle-core-hsc/src/embind/coreModue.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/coreModule.d.ts +0 -11
- package/lib/static/roomle-core-hsc/src/embind/coreModule.js +0 -19
- package/lib/static/roomle-core-hsc/src/embind/coreModule.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCore.d.ts +0 -31
- package/lib/static/roomle-core-hsc/src/embind/plannerCore.js +0 -111
- package/lib/static/roomle-core-hsc/src/embind/plannerCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.d.ts +0 -39
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.js +0 -116
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreInterface.js +0 -93
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/serviceCore.d.ts +0 -20
- package/lib/static/roomle-core-hsc/src/embind/serviceCore.js +0 -54
- package/lib/static/roomle-core-hsc/src/embind/serviceCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/serviceCoreInterface.d.ts +0 -13
- package/lib/static/roomle-core-hsc/src/embind/serviceCoreInterface.js +0 -3
- package/lib/static/roomle-core-hsc/src/embind/serviceCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/toolsCore.d.ts +0 -17
- package/lib/static/roomle-core-hsc/src/embind/toolsCore.js +0 -75
- package/lib/static/roomle-core-hsc/src/embind/toolsCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/embind/toolsCoreInterface.d.ts +0 -40
- package/lib/static/roomle-core-hsc/src/embind/toolsCoreInterface.js +0 -8
- package/lib/static/roomle-core-hsc/src/embind/toolsCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/configurableObject.d.ts +0 -30
- package/lib/static/roomle-core-hsc/src/loader/configurableObject.js +0 -111
- package/lib/static/roomle-core-hsc/src/loader/configurableObject.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/configurationGeometryConstructor.d.ts +0 -21
- package/lib/static/roomle-core-hsc/src/loader/configurationGeometryConstructor.js +0 -90
- package/lib/static/roomle-core-hsc/src/loader/configurationGeometryConstructor.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/configurationLoader.d.ts +0 -116
- package/lib/static/roomle-core-hsc/src/loader/configurationLoader.js +0 -345
- package/lib/static/roomle-core-hsc/src/loader/configurationLoader.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/configurationManager.d.ts +0 -41
- package/lib/static/roomle-core-hsc/src/loader/configurationManager.js +0 -147
- package/lib/static/roomle-core-hsc/src/loader/configurationManager.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/loaderUtility.d.ts +0 -81
- package/lib/static/roomle-core-hsc/src/loader/loaderUtility.js +0 -141
- package/lib/static/roomle-core-hsc/src/loader/loaderUtility.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/logger.d.ts +0 -29
- package/lib/static/roomle-core-hsc/src/loader/logger.js +0 -61
- package/lib/static/roomle-core-hsc/src/loader/logger.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/planElementManager.d.ts +0 -96
- package/lib/static/roomle-core-hsc/src/loader/planElementManager.js +0 -300
- package/lib/static/roomle-core-hsc/src/loader/planElementManager.js.map +0 -1
- package/lib/static/roomle-core-hsc/src/loader/rapiAccess.d.ts +0 -70
- package/lib/static/roomle-core-hsc/src/loader/rapiAccess.js +0 -227
- package/lib/static/roomle-core-hsc/src/loader/rapiAccess.js.map +0 -1
- package/lib/static/roomle-core-hsc/toolsCore.d.ts +0 -17
- package/lib/static/roomle-core-hsc/toolsCore.js +0 -75
- package/lib/static/roomle-core-hsc/toolsCore.js.map +0 -1
- package/lib/static/roomle-core-hsc/toolsCoreInterface.d.ts +0 -40
- package/lib/static/roomle-core-hsc/toolsCoreInterface.js +0 -8
- package/lib/static/roomle-core-hsc/toolsCoreInterface.js.map +0 -1
- package/lib/static/roomle-core-hsc/wasm_modern/ConfiguratorKernel.js +0 -74
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleCore.js +0 -79
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleToolsCore.js +0 -74
- package/lib/stats-helper-cTITQsAT.mjs +0 -108
- package/lib/stats-helper-cTITQsAT.mjs.map +0 -1
- package/lib/tools-core-CCWbo8fD.mjs +0 -36
- package/lib/tools-core-CCWbo8fD.mjs.map +0 -1
- /package/lib/static/draco/{README.md → node_modules/three/examples/jsm/libs/draco/README.md} +0 -0
- /package/lib/static/draco/{draco_decoder.js → node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.js} +0 -0
- /package/lib/static/draco/{draco_decoder.wasm → node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.wasm} +0 -0
- /package/lib/static/draco/{draco_encoder.js → node_modules/three/examples/jsm/libs/draco/gltf/draco_encoder.js} +0 -0
- /package/lib/static/draco/{draco_wasm_wrapper.js → node_modules/three/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js} +0 -0
- /package/lib/static/{asset-loader.worker.js → packages/workers/generated/asset-loader.worker.js} +0 -0
- /package/lib/static/{budgeteer.sw.js → packages/workers/generated/budgeteer.sw.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCallback.d.ts → node_modules/roomle-core-hsc/src/embind/configuratorCallback.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCallback.js → node_modules/roomle-core-hsc/src/embind/configuratorCallback.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCallback.js.map → node_modules/roomle-core-hsc/src/embind/configuratorCallback.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCore.d.ts → node_modules/roomle-core-hsc/src/embind/configuratorCore.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCore.js → node_modules/roomle-core-hsc/src/embind/configuratorCore.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCore.js.map → node_modules/roomle-core-hsc/src/embind/configuratorCore.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCoreInterface.d.ts → node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCoreInterface.js → node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorCoreInterface.js.map → node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorUtils.d.ts → node_modules/roomle-core-hsc/src/embind/configuratorUtils.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorUtils.js → node_modules/roomle-core-hsc/src/embind/configuratorUtils.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configuratorUtils.js.map → node_modules/roomle-core-hsc/src/embind/configuratorUtils.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{coreModue.d.ts → node_modules/roomle-core-hsc/src/embind/coreModue.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{coreModue.js → node_modules/roomle-core-hsc/src/embind/coreModue.js} +0 -0
- /package/lib/static/roomle-core-hsc/{coreModue.js.map → node_modules/roomle-core-hsc/src/embind/coreModue.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{coreModule.d.ts → node_modules/roomle-core-hsc/src/embind/coreModule.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{coreModule.js → node_modules/roomle-core-hsc/src/embind/coreModule.js} +0 -0
- /package/lib/static/roomle-core-hsc/{coreModule.js.map → node_modules/roomle-core-hsc/src/embind/coreModule.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCore.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCore.js +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCore.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCoreCallback.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCoreCallback.js +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCoreCallback.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCoreInterface.js +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/plannerCoreInterface.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/serviceCore.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/serviceCore.js +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/serviceCore.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/serviceCoreInterface.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/serviceCoreInterface.js +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/serviceCoreInterface.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/toolsCore.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/toolsCore.js +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/toolsCore.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/toolsCoreInterface.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/toolsCoreInterface.js +0 -0
- /package/lib/static/roomle-core-hsc/{embind → node_modules/roomle-core-hsc/src/embind}/toolsCoreInterface.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{configurableObject.d.ts → node_modules/roomle-core-hsc/src/loader/configurableObject.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configurableObject.js → node_modules/roomle-core-hsc/src/loader/configurableObject.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configurableObject.js.map → node_modules/roomle-core-hsc/src/loader/configurableObject.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationGeometryConstructor.d.ts → node_modules/roomle-core-hsc/src/loader/configurationGeometryConstructor.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationGeometryConstructor.js → node_modules/roomle-core-hsc/src/loader/configurationGeometryConstructor.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationGeometryConstructor.js.map → node_modules/roomle-core-hsc/src/loader/configurationGeometryConstructor.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationLoader.d.ts → node_modules/roomle-core-hsc/src/loader/configurationLoader.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationLoader.js → node_modules/roomle-core-hsc/src/loader/configurationLoader.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationLoader.js.map → node_modules/roomle-core-hsc/src/loader/configurationLoader.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationManager.d.ts → node_modules/roomle-core-hsc/src/loader/configurationManager.d.ts} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationManager.js → node_modules/roomle-core-hsc/src/loader/configurationManager.js} +0 -0
- /package/lib/static/roomle-core-hsc/{configurationManager.js.map → node_modules/roomle-core-hsc/src/loader/configurationManager.js.map} +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/loaderUtility.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/loaderUtility.js +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/loaderUtility.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/logger.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/logger.js +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/logger.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/planElementManager.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/planElementManager.js +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/planElementManager.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/rapiAccess.d.ts +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/rapiAccess.js +0 -0
- /package/lib/static/roomle-core-hsc/{loader → node_modules/roomle-core-hsc/src/loader}/rapiAccess.js.map +0 -0
- /package/lib/static/roomle-core-hsc/{ConfiguratorKernel.js → node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.js} +0 -0
- /package/lib/static/roomle-core-hsc/{RoomleCore.js → node_modules/roomle-core-hsc/wasm_modern/RoomleCore.js} +0 -0
- /package/lib/static/roomle-core-hsc/{RoomleToolsCore.js → node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.js} +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { Rr as e, Xt as t, _t as n, c as r, gt as i, l as a, vt as o } from "./three.core-CLIofecG.mjs";
|
|
2
|
+
import { I as s } from "./threejs-utils-jEzvlJF1.mjs";
|
|
3
|
+
import { a as c } from "./kernel-utils-H74uNY1h.mjs";
|
|
4
|
+
import { n as l, r as u, t as d } from "./decorate-C1QnXPYw.mjs";
|
|
5
|
+
import { s as f, t as p } from "./dimensioning-helper-Fwpt1HTT.mjs";
|
|
6
|
+
import { t as m } from "./layer-C_JtkhdO.mjs";
|
|
7
|
+
//#region packages/configurator-core/src/utils/component-dimensioning-html-util.ts
|
|
8
|
+
function h(e, t, n, r) {
|
|
9
|
+
let i = document.createElement("div");
|
|
10
|
+
return i.classList.add("dimension-label"), t === 0 ? i.classList.add("dimension-label--primary") : i.classList.add("dimension-label--secondary"), n ? i.onclick = () => {
|
|
11
|
+
for (i.classList.add("dimension-label--editing"); i.firstChild;) i.removeChild(i.firstChild);
|
|
12
|
+
let t = g(e, n, r);
|
|
13
|
+
i.appendChild(t), t.focus(), t.select();
|
|
14
|
+
} : i.classList.add("dimension-label--disabled"), _(i, e), i;
|
|
15
|
+
}
|
|
16
|
+
function g(e, t, n) {
|
|
17
|
+
let r = document.createElement("input");
|
|
18
|
+
r.id = t, r.type = "text", r.enterKeyHint = "done", r.classList.add("dimension-label__input"), r.inputMode = "numeric", r.pattern = "[0-9]*", r.value = e;
|
|
19
|
+
function i(t, i) {
|
|
20
|
+
if (r.id !== t) return;
|
|
21
|
+
r.id = "";
|
|
22
|
+
let a = parseFloat(i);
|
|
23
|
+
if (isNaN(a) || a <= 0) {
|
|
24
|
+
n(t, e);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
n(t, i);
|
|
28
|
+
}
|
|
29
|
+
return r.onkeydown = (n) => {
|
|
30
|
+
n.key === "Escape" || n.key === "Esc" ? i(t, e) : n.key === "Enter" && i(t, r.value);
|
|
31
|
+
}, r.onblur = () => {
|
|
32
|
+
i(t, r.value);
|
|
33
|
+
}, r;
|
|
34
|
+
}
|
|
35
|
+
function _(e, t) {
|
|
36
|
+
for (; e.firstChild;) e.removeChild(e.firstChild);
|
|
37
|
+
let n = document.createElement("span");
|
|
38
|
+
n.classList.add("dimension-label__value"), n.innerHTML = t, e.appendChild(n);
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region packages/configurator-core/src/utils/component-dimensioning.ts
|
|
42
|
+
var v = "component_dimensioning_line_material", y = 3618615, b = .05, x = .02, S = .025, C = class t {
|
|
43
|
+
constructor(e, n, r) {
|
|
44
|
+
this._direction = t._getDirection(e);
|
|
45
|
+
let i = t._getDefaultLabelDirection(e, this._direction), a = r.dot(i) >= 0;
|
|
46
|
+
this._labelDirection = t._calculateActualLabelDirection(e, a, i), this._origin = t._calculateOrigin(e, n, a);
|
|
47
|
+
}
|
|
48
|
+
get direction() {
|
|
49
|
+
return this._direction;
|
|
50
|
+
}
|
|
51
|
+
get labelDirection() {
|
|
52
|
+
return this._labelDirection;
|
|
53
|
+
}
|
|
54
|
+
getEdge(e, t, r) {
|
|
55
|
+
return new n(this._origin.clone().add(this._direction.clone().multiplyScalar(e)).add(this._labelDirection.clone().multiplyScalar(r)), this._origin.clone().add(this._direction.clone().multiplyScalar(t)).add(this._labelDirection.clone().multiplyScalar(r)));
|
|
56
|
+
}
|
|
57
|
+
static _getDirection(t) {
|
|
58
|
+
return t.axis ? c(t.axis.direction).normalize() : t.dimensioning.axis === "x" ? new e(1, 0, 0) : t.dimensioning.axis === "y" ? new e(0, 0, 1) : new e(0, 1, 0);
|
|
59
|
+
}
|
|
60
|
+
static _getDefaultLabelDirection(t, n) {
|
|
61
|
+
if (t.axis) {
|
|
62
|
+
let e = c(t.axis.labelDirection);
|
|
63
|
+
return n.clone().cross(e).cross(n).normalize();
|
|
64
|
+
} else if (t.dimensioning.axis === "x") return new e(0, 1, 0);
|
|
65
|
+
else if (t.dimensioning.axis === "y") return new e(-1, 0, 0);
|
|
66
|
+
return new e(-1, 0, 0);
|
|
67
|
+
}
|
|
68
|
+
static _calculateActualLabelDirection(e, t, n) {
|
|
69
|
+
if (t) {
|
|
70
|
+
if (e.axis) {
|
|
71
|
+
if (e.axis.alternativeOrigin) return n.clone().multiplyScalar(-1);
|
|
72
|
+
} else if (e.dimensioning.axis === "y" || e.dimensioning.axis === "z") return n.clone().multiplyScalar(-1);
|
|
73
|
+
}
|
|
74
|
+
return n;
|
|
75
|
+
}
|
|
76
|
+
static _calculateOrigin(t, n, r) {
|
|
77
|
+
let i = n.getCenter(new e()), a = n.getSize(new e());
|
|
78
|
+
return t.axis ? r && t.axis.alternativeOrigin ? c(t.axis.alternativeOrigin) : c(t.axis.origin) : t.dimensioning.axis === "x" ? new e(0, i.y + a.y * .5, i.z - a.z * .5) : t.dimensioning.axis === "y" ? new e(i.x + a.x * (r ? .5 : -.5), i.y - a.y * .5, 0) : new e(i.x + a.x * (r ? .5 : -.5), 0, i.z - a.z * .5);
|
|
79
|
+
}
|
|
80
|
+
}, w = class extends t {
|
|
81
|
+
constructor(t, n, r, i) {
|
|
82
|
+
super(), this._mainLineObject = null, this.onEditingFinished = (e, t) => {
|
|
83
|
+
let n = this._unitFormatter.parseMMValueFromUnitString(t, "length");
|
|
84
|
+
this.editingFinishedCallback(e, n);
|
|
85
|
+
}, this.name = p, this._size = n.getSize(new e()), this._dimensioning = s(t.dimensioning), this._axis = new C(t, n, r), this._level = this._dimensioning.maxLevel - this._dimensioning.level, this.editingFinishedCallback = i, this._init();
|
|
86
|
+
}
|
|
87
|
+
clone() {
|
|
88
|
+
console.warn("Will not clone ComponentDimensioning because this can break the generation of perspective images. If the ComponentDimensioning is visible during the generation of the perspective image, three.js tries to clone it but clone does not give any parameters to the constructor and therefore the clone breaks.");
|
|
89
|
+
}
|
|
90
|
+
_initMaterials() {
|
|
91
|
+
this._cacheHolder.materialCache && (this._cacheHolder.materialCache.has(v) ? this._lineMaterial = this._cacheHolder.materialCache.get(v) : (this._lineMaterial = new o({ color: y }), this._cacheHolder.materialCache.set(v, this._lineMaterial)));
|
|
92
|
+
}
|
|
93
|
+
_init() {
|
|
94
|
+
this._initMaterials();
|
|
95
|
+
let e = Math.round(Math.max(this._size.y, this._size.x, this._size.z)), t = Math.abs(this._dimensioning.to - this._dimensioning.from), n = S + (e < 4 ? 0 : e * .005);
|
|
96
|
+
t < .3 && (n *= .5 + t);
|
|
97
|
+
let o = n * 1.4, s = b + (3 * x + o) * this._level, c = this._axis.getEdge(this._dimensioning.from, this._dimensioning.to, s);
|
|
98
|
+
this._addEdgeSideLines(o, c, this._axis.labelDirection.clone());
|
|
99
|
+
let l = new a(), u = [
|
|
100
|
+
c.start.x,
|
|
101
|
+
c.start.y,
|
|
102
|
+
c.start.z,
|
|
103
|
+
c.end.x,
|
|
104
|
+
c.end.y,
|
|
105
|
+
c.end.z
|
|
106
|
+
];
|
|
107
|
+
l.setAttribute("position", new r(new Float32Array(u), 3));
|
|
108
|
+
let d = new i(l, this._lineMaterial);
|
|
109
|
+
d.name = "component dimension line " + this._dimensioning.axis, d.renderOrder = 0, d.layers.set(m.DIMENSIONS), this._mainLineObject = d, this.add(d);
|
|
110
|
+
let f = this._unitFormatter.formatMMValueToUnitString(t * 1e3);
|
|
111
|
+
this._textLabel = this.createTextLabel(f), this.add(this._textLabel);
|
|
112
|
+
}
|
|
113
|
+
createTextLabel(e) {
|
|
114
|
+
let t = new f(h(e, this._dimensioning.level, this._dimensioning.interactionKey, this.onEditingFinished));
|
|
115
|
+
return t.userData.isLabel = !0, t.renderOrder = 1, t;
|
|
116
|
+
}
|
|
117
|
+
_getMainLineCenterWorldPosition() {
|
|
118
|
+
if (!this._mainLineObject) return null;
|
|
119
|
+
this.updateMatrixWorld(!0), this._mainLineObject.updateMatrixWorld(!0);
|
|
120
|
+
let t = this._mainLineObject.geometry.attributes.position.array;
|
|
121
|
+
if (t.length < 6) return null;
|
|
122
|
+
let n = new e(t[0], t[1], t[2]), r = new e(t[3], t[4], t[5]);
|
|
123
|
+
return n.applyMatrix4(this._mainLineObject.matrixWorld), r.applyMatrix4(this._mainLineObject.matrixWorld), n.clone().add(r).multiplyScalar(.5);
|
|
124
|
+
}
|
|
125
|
+
initializeTextLabels() {
|
|
126
|
+
if (!(!this._textLabel || this._textLabel.children.length > 0)) try {
|
|
127
|
+
this.updateMatrixWorld(!0);
|
|
128
|
+
let e = this._getMainLineCenterWorldPosition();
|
|
129
|
+
if (e) {
|
|
130
|
+
let t = this.worldToLocal(e.clone());
|
|
131
|
+
this._textLabel.position.copy(t);
|
|
132
|
+
}
|
|
133
|
+
} catch (e) {
|
|
134
|
+
console.warn("Failed to initialize text label for dimension:", e), this._textLabel && this.remove(this._textLabel);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
_addEdgeSideLines(e, t, n) {
|
|
138
|
+
let r = -(3 * x + e) * .5, i = t.start.clone(), a = t.start.clone().add(n.clone().multiplyScalar(r)), o = t.end.clone(), s = t.end.clone().add(n.clone().multiplyScalar(r));
|
|
139
|
+
this._addLine(a, i), this._addLine(s, o);
|
|
140
|
+
}
|
|
141
|
+
_addLine(e, t) {
|
|
142
|
+
let n = new a(), o = [
|
|
143
|
+
e.x,
|
|
144
|
+
e.y,
|
|
145
|
+
e.z,
|
|
146
|
+
t.x,
|
|
147
|
+
t.y,
|
|
148
|
+
t.z
|
|
149
|
+
];
|
|
150
|
+
n.setAttribute("position", new r(new Float32Array(o), 3));
|
|
151
|
+
let s = new i(n, this._lineMaterial);
|
|
152
|
+
s.renderOrder = 0, s.layers.set(m.DIMENSIONS), this.add(s);
|
|
153
|
+
}
|
|
154
|
+
dispose() {
|
|
155
|
+
this.remove(this._textLabel), this._mainLineObject = null;
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
d([u, l("design:type", Object)], w.prototype, "_cacheHolder", void 0), d([u, l("design:type", Object)], w.prototype, "_unitFormatter", void 0);
|
|
159
|
+
//#endregion
|
|
160
|
+
export { w as default };
|
|
161
|
+
|
|
162
|
+
//# sourceMappingURL=component-dimensioning-CvRmUja4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-dimensioning-CvRmUja4.mjs","names":[],"sources":["../../packages/configurator-core/src/utils/component-dimensioning-html-util.ts","../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["export function createDimensioningTextLabelHtmlDiv(\n labelText: string,\n dimensioningLevel: number,\n interactionKey: string | undefined,\n editingFinishedCallback: (interactionKey: string, value: string) => void,\n): HTMLDivElement {\n const labelHtmlDiv = document.createElement('div');\n labelHtmlDiv.classList.add('dimension-label');\n\n if (dimensioningLevel === 0) {\n labelHtmlDiv.classList.add('dimension-label--primary');\n } else {\n labelHtmlDiv.classList.add('dimension-label--secondary');\n }\n\n if (!interactionKey) {\n labelHtmlDiv.classList.add('dimension-label--disabled');\n } else {\n labelHtmlDiv.onclick = () => {\n labelHtmlDiv.classList.add('dimension-label--editing');\n while (labelHtmlDiv.firstChild) {\n labelHtmlDiv.removeChild(labelHtmlDiv.firstChild);\n }\n const labelHtmlInput = createDimensioningLabelHtmlInput(\n labelText,\n interactionKey,\n editingFinishedCallback,\n );\n labelHtmlDiv.appendChild(labelHtmlInput);\n labelHtmlInput.focus();\n labelHtmlInput.select();\n };\n }\n\n resetChildren(labelHtmlDiv, labelText);\n\n return labelHtmlDiv;\n}\n\nfunction createDimensioningLabelHtmlInput(\n originalValue: string,\n interactionKey: string,\n editingFinishedCallback: (interactionKey: string, value: string) => void,\n): HTMLInputElement {\n const labelHtmlInput = document.createElement('input');\n labelHtmlInput.id = interactionKey;\n labelHtmlInput.type = 'text';\n labelHtmlInput.enterKeyHint = 'done';\n labelHtmlInput.classList.add('dimension-label__input');\n labelHtmlInput.inputMode = 'numeric';\n labelHtmlInput.pattern = '[0-9]*';\n labelHtmlInput.value = originalValue;\n\n function finishEditing(interactionKey: string, valueToSet: string): void {\n // avoid race conditions\n if (labelHtmlInput.id !== interactionKey) {\n return;\n }\n labelHtmlInput.id = '';\n\n const numValue = parseFloat(valueToSet);\n\n if (isNaN(numValue) || numValue <= 0) {\n editingFinishedCallback(interactionKey, originalValue);\n return;\n }\n\n editingFinishedCallback(interactionKey, valueToSet);\n }\n\n labelHtmlInput.onkeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n finishEditing(interactionKey, originalValue);\n } else if (event.key === 'Enter') {\n finishEditing(interactionKey, labelHtmlInput.value);\n }\n };\n\n labelHtmlInput.onblur = () => {\n finishEditing(interactionKey, labelHtmlInput.value);\n };\n\n return labelHtmlInput;\n}\n\nfunction resetChildren(labelHtmlDiv: HTMLDivElement, labelText: string): void {\n while (labelHtmlDiv.firstChild) {\n labelHtmlDiv.removeChild(labelHtmlDiv.firstChild);\n }\n\n const labelHtmlSpan = document.createElement('span');\n labelHtmlSpan.classList.add('dimension-label__value');\n labelHtmlSpan.innerHTML = labelText;\n labelHtmlDiv.appendChild(labelHtmlSpan);\n}\n","import type CacheHolder from '../../../common-core/src/services/cache-holder';\nimport type UnitFormatter from '../services/unit-formatter';\nimport type { Dimensioning, DimensioningAxis } from '../../../typings/kernel';\n\nimport type { Box3 } from 'three';\nimport {\n BufferAttribute,\n BufferGeometry,\n Line,\n Line3,\n LineBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\nimport inject from '../../../common-core/src/di/inject';\nimport { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer.js';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { createDimensioningTextLabelHtmlDiv } from './component-dimensioning-html-util';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\nconst LINE_COLOR = 0x373737;\nconst LINE_SPACING = 0.05;\n\nconst TEXT_SPACING = 0.02;\nconst TEXT_SIZE = 0.025;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private readonly _direction: Vector3;\n private readonly _labelDirection: Vector3;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n cameraPosition: Vector3,\n ) {\n this._direction =\n ComponentDimensioningAxis._getDirection(dimensioningAndAxis);\n const defaultLabelDirection =\n ComponentDimensioningAxis._getDefaultLabelDirection(\n dimensioningAndAxis,\n this._direction,\n );\n const lookAtOppositeSide = cameraPosition.dot(defaultLabelDirection) >= 0;\n this._labelDirection =\n ComponentDimensioningAxis._calculateActualLabelDirection(\n dimensioningAndAxis,\n lookAtOppositeSide,\n defaultLabelDirection,\n );\n this._origin = ComponentDimensioningAxis._calculateOrigin(\n dimensioningAndAxis,\n boundingBox,\n lookAtOppositeSide,\n );\n }\n\n get direction(): Vector3 {\n return this._direction;\n }\n\n get labelDirection(): Vector3 {\n return this._labelDirection;\n }\n\n getEdge(from: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(from))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n const end = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(to))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n return new Line3(start, end);\n }\n\n private static _getDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n return convertToTHREE(dimensioningAndAxis.axis.direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(1, 0, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(0, 0, 1);\n }\n return new Vector3(0, 1, 0);\n }\n\n private static _getDefaultLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n direction: Vector3,\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n const labelDirection = convertToTHREE(\n dimensioningAndAxis.axis.labelDirection,\n );\n const planeNormal = direction.clone().cross(labelDirection);\n return planeNormal.cross(direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, 1, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(-1, 0, 0);\n }\n return new Vector3(-1, 0, 0);\n }\n\n private static _calculateActualLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n lookAtOppositeSide: boolean,\n labelDirection: Vector3,\n ): Vector3 {\n if (lookAtOppositeSide) {\n if (dimensioningAndAxis.axis) {\n if (dimensioningAndAxis.axis.alternativeOrigin) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n } else if (\n dimensioningAndAxis.dimensioning.axis === 'y' ||\n dimensioningAndAxis.dimensioning.axis === 'z'\n ) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n }\n return labelDirection;\n }\n\n private static _calculateOrigin(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n lookAtOppositeSide: boolean,\n ): Vector3 {\n const center = boundingBox.getCenter(new Vector3());\n const size = boundingBox.getSize(new Vector3());\n if (dimensioningAndAxis.axis) {\n return lookAtOppositeSide && dimensioningAndAxis.axis.alternativeOrigin\n ? convertToTHREE(dimensioningAndAxis.axis.alternativeOrigin)\n : convertToTHREE(dimensioningAndAxis.axis.origin);\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, center.y + size.y * 0.5, center.z - size.z * 0.5);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n center.y - size.y * 0.5,\n 0,\n );\n }\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n 0,\n center.z - size.z * 0.5,\n );\n }\n}\n\nexport default class ComponentDimensioning extends Object3D {\n @inject\n private _cacheHolder: CacheHolder;\n\n @inject\n private _unitFormatter: UnitFormatter;\n\n private _dimensioning: Dimensioning;\n private _axis: ComponentDimensioningAxis;\n private _size: Vector3;\n\n private readonly editingFinishedCallback: (\n interactionKey: string,\n value: number,\n ) => void;\n\n private readonly _level: number;\n private _lineMaterial: LineBasicMaterial;\n\n private _textLabel: CSS2DObject;\n\n private _mainLineObject: Line | null = null;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n relativeCameraDirection: Vector3,\n editingFinishedCallback: (interactionKey: string, value: number) => void,\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n\n this._size = boundingBox.getSize(new Vector3());\n this._dimensioning = kernelDimensioningToThree(\n dimensioningAndAxis.dimensioning,\n );\n this._axis = new ComponentDimensioningAxis(\n dimensioningAndAxis,\n boundingBox,\n relativeCameraDirection,\n );\n this._level = this._dimensioning.maxLevel - this._dimensioning.level;\n\n this.editingFinishedCallback = editingFinishedCallback;\n\n this._init();\n }\n\n clone() {\n console.warn(\n 'Will not clone ComponentDimensioning because this can break the generation of perspective images. ' +\n 'If the ComponentDimensioning is visible during the generation of the perspective image, ' +\n 'three.js tries to clone it but clone does not give any parameters to the constructor and therefore the clone breaks.',\n );\n // Since we do not need to clone ComponentDimensioning, we return undefined\n return undefined as any;\n }\n\n private _initMaterials() {\n if (!this._cacheHolder.materialCache) {\n return;\n }\n\n if (this._cacheHolder.materialCache.has(LINE_MATERIAL)) {\n this._lineMaterial = this._cacheHolder.materialCache.get(\n LINE_MATERIAL,\n ) as LineBasicMaterial;\n } else {\n this._lineMaterial = new LineBasicMaterial({\n color: LINE_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\n const maxSize = Math.round(\n Math.max(this._size.y, this._size.x, this._size.z),\n );\n const length = Math.abs(this._dimensioning.to - this._dimensioning.from);\n\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n\n // Approximate text height for spacing calculations\n // Based on typical font metrics (height is roughly 1.4x the font size)\n const levelSpacing = fontSize * 1.4;\n\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset,\n );\n\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone(),\n );\n\n const lineGeometry = new BufferGeometry();\n const vertices = [\n line.start.x,\n line.start.y,\n line.start.z,\n line.end.x,\n line.end.y,\n line.end.z,\n ];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3),\n );\n\n const lineObject = new Line(lineGeometry, this._lineMaterial);\n lineObject.name = 'component dimension line ' + this._dimensioning.axis;\n lineObject.renderOrder = 0;\n lineObject.layers.set(LAYER.DIMENSIONS);\n\n this._mainLineObject = lineObject;\n\n this.add(lineObject);\n\n const labelText = this._unitFormatter.formatMMValueToUnitString(\n length * 1000,\n );\n\n this._textLabel = this.createTextLabel(labelText);\n this.add(this._textLabel);\n }\n\n private createTextLabel(labelText: string): CSS2DObject {\n const labelHtmlDiv = createDimensioningTextLabelHtmlDiv(\n labelText,\n this._dimensioning.level,\n this._dimensioning.interactionKey,\n this.onEditingFinished,\n );\n const labelObject = new CSS2DObject(labelHtmlDiv);\n labelObject.userData.isLabel = true;\n labelObject.renderOrder = 1;\n\n return labelObject;\n }\n\n private onEditingFinished = (interactionKey: string, value: string): void => {\n const parsedValue = this._unitFormatter.parseMMValueFromUnitString(\n value,\n 'length',\n );\n\n this.editingFinishedCallback(interactionKey, parsedValue);\n };\n\n // Get the world position center of the main dimension line (same logic as getDimensionLineCenter)\n private _getMainLineCenterWorldPosition(): Vector3 | null {\n if (!this._mainLineObject) {\n return null;\n }\n\n this.updateMatrixWorld(true);\n this._mainLineObject.updateMatrixWorld(true);\n\n const positions = this._mainLineObject.geometry.attributes.position.array;\n\n if (positions.length < 6) {\n return null;\n }\n\n const start = new Vector3(positions[0], positions[1], positions[2]);\n const end = new Vector3(positions[3], positions[4], positions[5]);\n\n start.applyMatrix4(this._mainLineObject.matrixWorld);\n end.applyMatrix4(this._mainLineObject.matrixWorld);\n\n return start.clone().add(end).multiplyScalar(0.5);\n }\n\n public initializeTextLabels(): void {\n if (!this._textLabel || this._textLabel.children.length > 0) {\n return;\n }\n\n try {\n this.updateMatrixWorld(true);\n\n const labelWorldPos = this._getMainLineCenterWorldPosition();\n if (labelWorldPos) {\n const labelLocalPos = this.worldToLocal(labelWorldPos.clone());\n this._textLabel.position.copy(labelLocalPos);\n }\n } catch (error) {\n console.warn('Failed to initialize text label for dimension:', error);\n if (this._textLabel) {\n this.remove(this._textLabel);\n }\n }\n }\n\n private _addEdgeSideLines(\n levelSpacing: number,\n line: Line3,\n labelDirection: Vector3,\n ) {\n const sideOffset = -(3 * TEXT_SPACING + levelSpacing) * 0.5;\n const endFrom = line.start.clone();\n const startFrom = line.start\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n const endTo = line.end.clone();\n const startTo = line.end\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n this._addLine(startFrom, endFrom);\n this._addLine(startTo, endTo);\n }\n\n private _addLine(start: Vector3, end: Vector3) {\n const lineGeometry = new BufferGeometry();\n const vertices = [start.x, start.y, start.z, end.x, end.y, end.z];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3),\n );\n const line = new Line(lineGeometry, this._lineMaterial);\n line.renderOrder = 0;\n line.layers.set(LAYER.DIMENSIONS);\n this.add(line);\n }\n\n public dispose() {\n this.remove(this._textLabel);\n this._mainLineObject = null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { u as e } from "./scene-renderer-D8HkTFeZ.mjs";
|
|
2
|
+
import { Jn as t, K as n, Nt as r, Pt as i, Rr as a, Ut as o, o as s } from "./three.core-CLIofecG.mjs";
|
|
3
|
+
import { K as c } from "./threejs-utils-jEzvlJF1.mjs";
|
|
4
|
+
import { I as l } from "./common-utils-DMSTohiS.mjs";
|
|
5
|
+
import { t as u } from "./layer-C_JtkhdO.mjs";
|
|
6
|
+
//#region packages/configurator-core/src/utils/component-raycast-helper.ts
|
|
7
|
+
var d = /* @__PURE__ */ e({ default: () => f }), f = class {
|
|
8
|
+
constructor() {
|
|
9
|
+
this._nonTransparentComponent = null, this._raycaster = new t(), this._raycaster.near = .1, this._raycaster.layers.enable(u.OBJECT), this._raycaster.layers.enable(u.COMPONENT), this._raycaster.layers.enable(u.PREVIEW), this._raycaster.layers.enable(u.UI);
|
|
10
|
+
}
|
|
11
|
+
init(e, t) {
|
|
12
|
+
this._object = e, this._camera = t, this.checkComponentVisibility = l(this.checkComponentVisibility, 100).bind(this), this.checkPreviewVisibility = l(this.checkPreviewVisibility, 100).bind(this);
|
|
13
|
+
}
|
|
14
|
+
setCamera(e) {
|
|
15
|
+
this._camera = e;
|
|
16
|
+
}
|
|
17
|
+
setObject(e) {
|
|
18
|
+
this._object = e;
|
|
19
|
+
}
|
|
20
|
+
changeMaterialsOnSelect(e, t, n = !1, r) {
|
|
21
|
+
t !== this._nonTransparentComponent && (this._nonTransparentComponent = t, this._changeMaterialsOnSelect(e, t, n, r));
|
|
22
|
+
}
|
|
23
|
+
_changeMaterialsOnSelect(e, t, n = !1, r) {
|
|
24
|
+
if (e.children.length > 0) for (let a of e.children) {
|
|
25
|
+
let o = t && e.id === t.id || n, s = !(a instanceof i);
|
|
26
|
+
a.userData.ignoreComponentRaycast || this._changeMaterialsOnSelect(a, t, o && s ? !1 : o, r);
|
|
27
|
+
}
|
|
28
|
+
if (t) e instanceof i && e.material instanceof o && !e.userData.oldMaterial && (e.userData.oldMaterial = e.material, e.material = e.material.clone(), n || c(e, {
|
|
29
|
+
opacity: .2,
|
|
30
|
+
transparent: !0
|
|
31
|
+
}).then(() => {
|
|
32
|
+
r?.();
|
|
33
|
+
}));
|
|
34
|
+
else if (e.userData.oldMaterial && e instanceof i && e.material instanceof o) {
|
|
35
|
+
let { opacity: t, transparent: n } = e.userData.oldMaterial;
|
|
36
|
+
c(e, {
|
|
37
|
+
opacity: t,
|
|
38
|
+
transparent: n
|
|
39
|
+
}).then(() => r?.()), e.userData.oldMaterial = void 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
isComponentVisible(e) {
|
|
43
|
+
let t = [];
|
|
44
|
+
e.traverse((e) => t.push(e.uuid));
|
|
45
|
+
let n = new s().setFromObject(e).getCenter(new a()), r = new a().subVectors(n, this._camera.position).normalize();
|
|
46
|
+
this._raycaster.set(this._camera.position, r), this._raycaster.far = this._camera.position.distanceTo(n);
|
|
47
|
+
let i = [];
|
|
48
|
+
return this._raycaster.intersectObjects(this._object.children, !0).forEach((e) => {
|
|
49
|
+
e.object.material.visible && (t.includes(e.object.uuid) || e.object.userData.ignoreComponentRaycast || i.push(e));
|
|
50
|
+
}), i.length === 0;
|
|
51
|
+
}
|
|
52
|
+
checkComponentAndPreviewVisibility(e, t) {
|
|
53
|
+
e.hasSelection() ? this.checkComponentVisibility(e, t) : t.hasPreviews() ? this.checkPreviewVisibility(t) : this.changeMaterialsOnSelect(this._object, null);
|
|
54
|
+
}
|
|
55
|
+
checkComponentVisibility(e, t) {
|
|
56
|
+
if (!e.hasSelection()) return;
|
|
57
|
+
let n = t.getComponentsForIds(e.getSelectedRuntimeComponentIds());
|
|
58
|
+
if (n.length > 1) return;
|
|
59
|
+
let r = n[0];
|
|
60
|
+
this.isComponentVisible(r) ? this.changeMaterialsOnSelect(this._object, null) : this.changeMaterialsOnSelect(this._object, r);
|
|
61
|
+
}
|
|
62
|
+
areAllPreviewsVisible(e) {
|
|
63
|
+
if (!e.hasPreviews()) return !0;
|
|
64
|
+
let t = e.getPreviews();
|
|
65
|
+
return t.length === 0 ? !0 : t.map((e) => this.isComponentVisible(e)).reduce((e, t) => e && t);
|
|
66
|
+
}
|
|
67
|
+
areAllComponentsInFrustum(e) {
|
|
68
|
+
if (e.length === 0) return !0;
|
|
69
|
+
let t = new n(), i = new r().multiplyMatrices(this._camera.projectionMatrix, this._camera.matrixWorldInverse), o = new s();
|
|
70
|
+
t.setFromProjectionMatrix(i);
|
|
71
|
+
let c = (e) => {
|
|
72
|
+
let n = o.setFromObject(e).getCenter(new a());
|
|
73
|
+
return t.containsPoint(n);
|
|
74
|
+
};
|
|
75
|
+
return e.map((e) => c(e)).reduce((e, t) => e && t);
|
|
76
|
+
}
|
|
77
|
+
checkPreviewVisibility(e) {
|
|
78
|
+
e.hasPreviewLines() || (this.areAllPreviewsVisible(e) ? this.changeMaterialsOnSelect(this._object, null) : this.changeMaterialsOnSelect(this._object, { id: -1 }));
|
|
79
|
+
}
|
|
80
|
+
isComponentMeasurementLabelOccluded(e, t) {
|
|
81
|
+
let n = new a().subVectors(e, this._camera.position).normalize(), r = this._camera.position.distanceTo(e);
|
|
82
|
+
return this._raycaster.set(this._camera.position, n), this._raycaster.far = r - .01, this._raycaster.intersectObject(t, !0).filter((e) => {
|
|
83
|
+
let t = e.object;
|
|
84
|
+
return !(t.type !== "Mesh" || t.userData.ignoreComponentRaycast || t.material && !t.material.visible);
|
|
85
|
+
}).length > 0;
|
|
86
|
+
}
|
|
87
|
+
checkMultipleLabelOcclusion(e, t) {
|
|
88
|
+
let n = /* @__PURE__ */ new Set();
|
|
89
|
+
return e.forEach(({ id: e, worldPos: r }) => {
|
|
90
|
+
this.isComponentMeasurementLabelOccluded(r, t) && n.add(e);
|
|
91
|
+
}), n;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
//#endregion
|
|
95
|
+
export { d as n, f as t };
|
|
96
|
+
|
|
97
|
+
//# sourceMappingURL=component-raycast-helper-CEp7wy9c.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-raycast-helper-CEp7wy9c.mjs","names":[],"sources":["../../packages/configurator-core/src/utils/component-raycast-helper.ts"],"sourcesContent":["import { type RoomleComponent } from '../../../common-core/src/webgl/roomle-component-factory';\nimport type ConfiguratorSceneEventHandler from '../webgl/configurator-scene-event-handler';\nimport type ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport { throttle } from '../../../common-core/src/utils/common-utils';\nimport { LAYER } from '../../../common-core/src/webgl/layer';\nimport { transitionTransparencyOfMaterial } from '../../../common-core/src/utils/threejs-utils';\nimport type { Object3D, PerspectiveCamera } from 'three';\nimport {\n Box3,\n Frustum,\n Matrix4,\n Mesh,\n MeshStandardMaterial,\n Raycaster,\n Vector3,\n} from 'three';\n\nexport default class ComponentRaycastHelper {\n private _object: Object3D;\n private _camera: PerspectiveCamera;\n private _raycaster: Raycaster;\n\n private _nonTransparentComponent: RoomleComponent = null;\n\n constructor() {\n this._raycaster = new Raycaster();\n this._raycaster.near = 0.1;\n this._raycaster.layers.enable(LAYER.OBJECT);\n this._raycaster.layers.enable(LAYER.COMPONENT);\n this._raycaster.layers.enable(LAYER.PREVIEW);\n this._raycaster.layers.enable(LAYER.UI);\n }\n\n public init(object: Object3D, camera: PerspectiveCamera) {\n this._object = object;\n this._camera = camera;\n\n this.checkComponentVisibility = throttle(\n this.checkComponentVisibility,\n 100,\n ).bind(this);\n this.checkPreviewVisibility = throttle(\n this.checkPreviewVisibility,\n 100,\n ).bind(this);\n }\n\n public setCamera(camera: PerspectiveCamera) {\n this._camera = camera;\n }\n\n public setObject(object: Object3D) {\n this._object = object;\n }\n\n public changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void,\n ) {\n if (component === this._nonTransparentComponent) {\n return;\n }\n this._nonTransparentComponent = component;\n this._changeMaterialsOnSelect(object, component, selected, callback);\n }\n\n private _changeMaterialsOnSelect(\n object: Object3D,\n component: RoomleComponent,\n selected: boolean = false,\n callback?: () => void,\n ) {\n if (object.children.length > 0) {\n for (const child of object.children) {\n const selectChild =\n (component && object.id === component.id) || selected;\n const isComponent = !(child instanceof Mesh);\n if (!child.userData.ignoreComponentRaycast) {\n this._changeMaterialsOnSelect(\n child,\n component,\n selectChild && isComponent ? false : selectChild,\n callback,\n );\n }\n }\n }\n if (component) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial &&\n !object.userData.oldMaterial\n ) {\n object.userData.oldMaterial = object.material;\n object.material = object.material.clone();\n if (!selected) {\n transitionTransparencyOfMaterial(object, {\n opacity: 0.2,\n transparent: true,\n }).then(() => {\n callback?.();\n });\n }\n }\n } else if (object.userData.oldMaterial) {\n if (\n object instanceof Mesh &&\n object.material instanceof MeshStandardMaterial\n ) {\n const { opacity, transparent } = object.userData.oldMaterial;\n transitionTransparencyOfMaterial(object, { opacity, transparent }).then(\n () => callback?.(),\n );\n object.userData.oldMaterial = undefined;\n }\n }\n }\n\n public isComponentVisible(component: RoomleComponent): boolean {\n const uuids: string[] = [];\n component.traverse((object) => uuids.push(object.uuid));\n const position = new Box3()\n .setFromObject(component)\n .getCenter(new Vector3());\n const direction = new Vector3()\n .subVectors(position, this._camera.position)\n .normalize();\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = this._camera.position.distanceTo(position);\n const visibleIntersections = [];\n this._raycaster\n .intersectObjects(this._object.children, true)\n .forEach((i) => {\n // do not include invisible materials\n if (!(i.object as any).material.visible) {\n return;\n }\n // do not include the object itself\n if (uuids.includes(i.object.uuid)) {\n return;\n }\n // do not include objects which explicitly have the ignoreComponentRaycast flag\n if ((i.object as any).userData.ignoreComponentRaycast) {\n return;\n }\n visibleIntersections.push(i);\n });\n return visibleIntersections.length === 0;\n }\n\n public checkComponentAndPreviewVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel,\n ) {\n if (sceneEventHandler.hasSelection()) {\n this.checkComponentVisibility(sceneEventHandler, configuratorViewModel);\n } else if (configuratorViewModel.hasPreviews()) {\n this.checkPreviewVisibility(configuratorViewModel);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public checkComponentVisibility(\n sceneEventHandler: ConfiguratorSceneEventHandler,\n configuratorViewModel: ConfiguratorViewModel,\n ) {\n if (!sceneEventHandler.hasSelection()) {\n return;\n }\n const selectedComponents = configuratorViewModel.getComponentsForIds(\n sceneEventHandler.getSelectedRuntimeComponentIds(),\n );\n if (selectedComponents.length > 1) {\n return;\n }\n const selectedComponent = selectedComponents[0];\n if (this.isComponentVisible(selectedComponent)) {\n this.changeMaterialsOnSelect(this._object, null);\n } else {\n this.changeMaterialsOnSelect(this._object, selectedComponent);\n }\n }\n\n public areAllPreviewsVisible(\n configuratorViewModel: ConfiguratorViewModel,\n ): boolean {\n if (!configuratorViewModel.hasPreviews()) {\n return true;\n }\n const previews = configuratorViewModel.getPreviews();\n if (previews.length === 0) {\n return true;\n }\n return previews\n .map((preview) => this.isComponentVisible(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible,\n );\n }\n\n public areAllComponentsInFrustum(previews: RoomleComponent[]): boolean {\n if (previews.length === 0) {\n return true;\n }\n const frustum = new Frustum();\n const matrix = new Matrix4().multiplyMatrices(\n this._camera.projectionMatrix,\n this._camera.matrixWorldInverse,\n );\n const box3 = new Box3();\n frustum.setFromProjectionMatrix(matrix);\n const isComponentInFrustum = (component: RoomleComponent) => {\n const position = box3.setFromObject(component).getCenter(new Vector3());\n return frustum.containsPoint(position);\n };\n return previews\n .map((preview) => isComponentInFrustum(preview))\n .reduce(\n (arePreviewsVisible, isPreviewVisible) =>\n arePreviewsVisible && isPreviewVisible,\n );\n }\n\n public checkPreviewVisibility(configuratorViewModel: ConfiguratorViewModel) {\n if (configuratorViewModel.hasPreviewLines()) {\n return;\n }\n const allPreviewsVisible = this.areAllPreviewsVisible(\n configuratorViewModel,\n );\n if (!allPreviewsVisible) {\n this.changeMaterialsOnSelect(this._object, { id: -1 } as RoomleComponent);\n } else {\n this.changeMaterialsOnSelect(this._object, null);\n }\n }\n\n public isComponentMeasurementLabelOccluded(\n labelWorldPos: Vector3,\n component: RoomleComponent,\n ): boolean {\n const direction = new Vector3()\n .subVectors(labelWorldPos, this._camera.position)\n .normalize();\n const distance = this._camera.position.distanceTo(labelWorldPos);\n\n this._raycaster.set(this._camera.position, direction);\n this._raycaster.far = distance - 0.01;\n\n const intersections = this._raycaster.intersectObject(component, true);\n\n const occludingIntersections = intersections.filter((intersection) => {\n const obj = intersection.object as any;\n\n if (\n obj.type !== 'Mesh' ||\n obj.userData.ignoreComponentRaycast ||\n (obj.material && !obj.material.visible)\n ) {\n return false;\n }\n\n return true;\n });\n\n return occludingIntersections.length > 0;\n }\n\n public checkMultipleLabelOcclusion(\n labelPositions: Array<{ id: string; worldPos: Vector3 }>,\n component: RoomleComponent,\n ): Set<string> {\n const occludedLabelIds = new Set<string>();\n\n labelPositions.forEach(({ id, worldPos }) => {\n if (this.isComponentMeasurementLabelOccluded(worldPos, component)) {\n occludedLabelIds.add(id);\n }\n });\n\n return occludedLabelIds;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { C as e, D as t, G as n, K as r, N as i, Q as a, T as o, Z as s, d as c, et as l, n as u, q as d, r as f, t as p, tt as m, x as h } from "./main-BxEZ11ag.mjs";
|
|
2
|
+
import { t as g } from "./script-loader-KBq8SjP6.mjs";
|
|
3
|
+
import { t as _ } from "./component-raycast-helper-CEp7wy9c.mjs";
|
|
4
|
+
//#region packages/configurator-core/src/utils/injectables.ts
|
|
5
|
+
var v = [
|
|
6
|
+
new a("logger", d),
|
|
7
|
+
new a("rapi-access", l),
|
|
8
|
+
new a("script-loader", g),
|
|
9
|
+
new a("camera-control-3d", e),
|
|
10
|
+
new a("camera-control", o),
|
|
11
|
+
new a("global-init-data", n),
|
|
12
|
+
new a("data-syncer", r),
|
|
13
|
+
new a("configurator-scene-manager", c, s.CONTEXT),
|
|
14
|
+
new a("configurator-view-model", h, s.CONTEXT),
|
|
15
|
+
new a("component-raycast-helper", _, s.GLOBAL)
|
|
16
|
+
], y = class extends u {
|
|
17
|
+
setupDependencies() {
|
|
18
|
+
f.setup(v), this.lookup("planner-kernel-access", this._context).init(i.CONFIGURATOR), this.lookup("rapi-access", this._context), this.lookup("script-loader", this._context), this.lookup("logger", this._context);
|
|
19
|
+
}
|
|
20
|
+
cleanUpGlobals() {
|
|
21
|
+
delete window.RoomleConfigurator;
|
|
22
|
+
}
|
|
23
|
+
cleanUpDependencies() {
|
|
24
|
+
let e = this.lookup("script-loader"), t = this.lookup("rapi-access");
|
|
25
|
+
this.lookup("dom-helper");
|
|
26
|
+
let n = this.lookup("configurator-scene-manager");
|
|
27
|
+
e && e.cleanUp(), t && t.cleanUp(), n && n.cleanUp();
|
|
28
|
+
}
|
|
29
|
+
setupGlobals(e) {
|
|
30
|
+
m.init(e ?? {});
|
|
31
|
+
}
|
|
32
|
+
getApi() {
|
|
33
|
+
return this._configurator;
|
|
34
|
+
}
|
|
35
|
+
async bootFinished() {
|
|
36
|
+
this._configurator = new t(this._context), this._configurator.getMain = () => this, window.RoomleConfigurator || (window.RoomleConfigurator = this._configurator);
|
|
37
|
+
}
|
|
38
|
+
getContextName() {
|
|
39
|
+
return p.CONFIGURATOR;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { y as t };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=configurator-B_5XVG2O.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configurator-B_5XVG2O.mjs","names":[],"sources":["../../packages/configurator-core/src/utils/injectables.ts","../../packages/configurator-core/src/configurator.ts"],"sourcesContent":["import CameraControl from '../../../common-core/src/cameracontrol/camera-control';\nimport CameraControl3D from '../../../common-core/src/cameracontrol/camera-control-3d';\nimport ScriptLoader from '../../../common-core/src/script-loader';\nimport { RapiAccess } from '../../../common-core/src/rapi-access';\nimport Logger from '../../../common-core/src/logger';\nimport DataSyncer from '../../../common-core/src/services/data-syncer';\nimport {\n DependencyInjectionAssignment,\n DI_TYPE,\n} from '../../../common-core/src/di/container';\nimport ComponentRaycastHelper from './component-raycast-helper';\nimport ConfiguratorSceneManager from '../webgl/configurator-scene-manager';\nimport ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\nimport GlobalInitData from '../../../common-core/src/utils/global-init-data';\n\nexport const INJECTABLES: DependencyInjectionAssignment[] = [\n new DependencyInjectionAssignment('logger', Logger),\n new DependencyInjectionAssignment('rapi-access', RapiAccess),\n new DependencyInjectionAssignment('script-loader', ScriptLoader),\n new DependencyInjectionAssignment('camera-control-3d', CameraControl3D),\n new DependencyInjectionAssignment('camera-control', CameraControl),\n new DependencyInjectionAssignment('global-init-data', GlobalInitData),\n new DependencyInjectionAssignment('data-syncer', DataSyncer),\n new DependencyInjectionAssignment(\n 'configurator-scene-manager',\n ConfiguratorSceneManager,\n DI_TYPE.CONTEXT,\n ),\n new DependencyInjectionAssignment(\n 'configurator-view-model',\n ConfiguratorViewModel,\n DI_TYPE.CONTEXT,\n ),\n new DependencyInjectionAssignment(\n 'component-raycast-helper',\n ComponentRaycastHelper,\n DI_TYPE.GLOBAL,\n ),\n];\n","import './utils/global-definitions';\nimport { Main, BASE_CONTEXT } from '../../common-core/src/main';\nimport type { AppState } from '../../common-core/src/utils/app-context';\nimport ConfiguratorAppContext from '../../common-core/src/utils/app-context';\nimport { INJECTABLES } from './utils/injectables';\nimport RoomleDependencyInjection from '../../common-core/src/di/roomle-dependency-injection';\nimport type ScriptLoader from '../../common-core/src/script-loader';\nimport { type RapiAccess } from '../../common-core/src/rapi-access';\nimport type Logger from '../../common-core/src/logger';\nimport type DomHelper from '../../common-core/src/utils/dom-helper';\nimport type ConfiguratorSceneManager from './webgl/configurator-scene-manager';\nimport { RoomleConfigurator } from './roomle-configurator';\nimport type PlannerKernelAccess from '../../planner-core/src/services/planner-kernel-access';\nimport { KERNEL_TYPE } from '../../common-core/src/services/common-kernel-access';\n\nexport class Configurator extends Main {\n private _configurator: RoomleConfigurator;\n\n protected setupDependencies(): void {\n RoomleDependencyInjection.setup(INJECTABLES);\n // This needs to be done so that subscribe to events is done\n const plannerKernelAccess = this.lookup<PlannerKernelAccess>(\n 'planner-kernel-access',\n this._context,\n );\n plannerKernelAccess.init(KERNEL_TYPE.CONFIGURATOR);\n this.lookup<RapiAccess>('rapi-access', this._context);\n this.lookup<ScriptLoader>('script-loader', this._context);\n this.lookup<Logger>('logger', this._context);\n }\n\n protected cleanUpGlobals(): void {\n delete window.RoomleConfigurator;\n }\n\n protected cleanUpDependencies(): void {\n const scriptLoader = this.lookup<ScriptLoader>('script-loader');\n const rapiAccess = this.lookup<RapiAccess>('rapi-access');\n const domHelper = this.lookup<DomHelper>('dom-helper');\n const sceneManager = this.lookup<ConfiguratorSceneManager>(\n 'configurator-scene-manager',\n );\n\n if (scriptLoader) {\n scriptLoader.cleanUp();\n }\n\n if (rapiAccess) {\n rapiAccess.cleanUp();\n }\n\n if (domHelper) {\n //domHelper.cleanUp();\n }\n\n if (sceneManager) {\n sceneManager.cleanUp();\n }\n }\n\n /** Currently the only module that uses AppState — all others ignore the parameter. */\n protected setupGlobals(appState?: AppState): void {\n ConfiguratorAppContext.init(appState ?? {});\n }\n\n public getApi(): RoomleConfigurator {\n return this._configurator;\n }\n\n protected async bootFinished(): Promise<void> {\n this._configurator = new RoomleConfigurator(this._context);\n this._configurator.getMain = () => {\n return this;\n };\n\n if (!window.RoomleConfigurator) {\n window.RoomleConfigurator = this._configurator;\n }\n }\n\n protected getContextName(): string {\n return BASE_CONTEXT.CONFIGURATOR;\n }\n}\n"],"mappings":";;;;AAeA,IAAa,IAA+C;CAC1D,IAAI,EAA8B,UAAU,EAAO;CACnD,IAAI,EAA8B,eAAe,EAAW;CAC5D,IAAI,EAA8B,iBAAiB,EAAa;CAChE,IAAI,EAA8B,qBAAqB,EAAgB;CACvE,IAAI,EAA8B,kBAAkB,EAAc;CAClE,IAAI,EAA8B,oBAAoB,EAAe;CACrE,IAAI,EAA8B,eAAe,EAAW;CAC5D,IAAI,EACF,8BACA,GACA,EAAQ,QACT;CACD,IAAI,EACF,2BACA,GACA,EAAQ,QACT;CACD,IAAI,EACF,4BACA,GACA,EAAQ,OACT;CACF,ECvBY,IAAb,cAAkC,EAAK;CAGrC,oBAAoC;AAUlC,EATA,EAA0B,MAAM,EAAY,EAEhB,KAAK,OAC/B,yBACA,KAAK,SACN,CACmB,KAAK,EAAY,aAAa,EAClD,KAAK,OAAmB,eAAe,KAAK,SAAS,EACrD,KAAK,OAAqB,iBAAiB,KAAK,SAAS,EACzD,KAAK,OAAe,UAAU,KAAK,SAAS;;CAG9C,iBAAiC;AAC/B,SAAO,OAAO;;CAGhB,sBAAsC;EACpC,IAAM,IAAe,KAAK,OAAqB,gBAAgB,EACzD,IAAa,KAAK,OAAmB,cAAc;AACvC,OAAK,OAAkB,aAAa;EAFtD,IAGM,IAAe,KAAK,OACxB,6BACD;AAcD,EAZI,KACF,EAAa,SAAS,EAGpB,KACF,EAAW,SAAS,EAOlB,KACF,EAAa,SAAS;;CAK1B,aAAuB,GAA2B;AAChD,IAAuB,KAAK,KAAY,EAAE,CAAC;;CAG7C,SAAoC;AAClC,SAAO,KAAK;;CAGd,MAAgB,eAA8B;AAM5C,EALA,KAAK,gBAAgB,IAAI,EAAmB,KAAK,SAAS,EAC1D,KAAK,cAAc,gBACV,MAGJ,OAAO,uBACV,OAAO,qBAAqB,KAAK;;CAIrC,iBAAmC;AACjC,SAAO,EAAa"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Ft as e, Pt as t, nr as n } from "./three.core-CLIofecG.mjs";
|
|
2
|
+
import { a as r } from "./kernel-utils-H74uNY1h.mjs";
|
|
3
|
+
//#region packages/planner-core/src/webgl/continuous-drawing-helper.ts
|
|
4
|
+
var i = class {
|
|
5
|
+
constructor() {
|
|
6
|
+
this._currentInnerRadius = 0;
|
|
7
|
+
}
|
|
8
|
+
init(e, t, n) {
|
|
9
|
+
this._drawingGroup = e, this._continuousDrawingManager = t, this._kernelZoomFactor = n, this.update();
|
|
10
|
+
}
|
|
11
|
+
update() {
|
|
12
|
+
this._initCircle(), this._updateCircle();
|
|
13
|
+
}
|
|
14
|
+
_initCircle() {
|
|
15
|
+
if (this._circleMesh) return;
|
|
16
|
+
let r = 70 / this._kernelZoomFactor / 1e3;
|
|
17
|
+
this._circleMesh = new t(new n(r, r + r / 50, 32), new e({
|
|
18
|
+
color: 10066329,
|
|
19
|
+
side: 2
|
|
20
|
+
})), this._circleMesh.name = "Circle", this._circleMesh.rotation.set(Math.PI / 2, 0, 0), this._circleMesh.visible = this._continuousDrawingManager.shouldShowCircle(), this._drawingGroup.add(this._circleMesh);
|
|
21
|
+
}
|
|
22
|
+
_updateCircle() {
|
|
23
|
+
if (!this._circleMesh) return;
|
|
24
|
+
let e = 70 / this._kernelZoomFactor / 1e3;
|
|
25
|
+
if (e !== this._currentInnerRadius) {
|
|
26
|
+
let t = e + e / 50;
|
|
27
|
+
this._circleMesh.geometry = new n(e, t, 32);
|
|
28
|
+
}
|
|
29
|
+
let t = r(this._continuousDrawingManager.getStartPoint());
|
|
30
|
+
t.y = 5, this._circleMesh.position.copy(t), this._circleMesh.visible = this._continuousDrawingManager.shouldShowCircle(), this._currentInnerRadius = e;
|
|
31
|
+
}
|
|
32
|
+
setKernelZoomFactor(e) {
|
|
33
|
+
this._kernelZoomFactor = e;
|
|
34
|
+
}
|
|
35
|
+
endDrawing() {
|
|
36
|
+
this._drawingGroup.remove(this._circleMesh), this._circleMesh = null;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
export { i as default };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=continuous-drawing-helper-v_5UAM9A.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuous-drawing-helper-v_5UAM9A.mjs","names":[],"sources":["../../packages/planner-core/src/webgl/continuous-drawing-helper.ts"],"sourcesContent":["import type { ContinuousDrawingManager } from '../../../typings/planner';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport type { Group } from 'three';\nimport { DoubleSide, Mesh, MeshBasicMaterial, RingGeometry } from 'three';\n\nexport default class ContinuousDrawingHelper {\n private _drawingGroup: Group;\n private _continuousDrawingManager: ContinuousDrawingManager;\n\n private _circleMesh: Mesh;\n\n private _kernelZoomFactor: number;\n\n private _currentInnerRadius: number = 0;\n\n init(\n drawingGroup: Group,\n continuousDrawingManager: ContinuousDrawingManager,\n kernelZoomFactor: number,\n ) {\n this._drawingGroup = drawingGroup;\n this._continuousDrawingManager = continuousDrawingManager;\n this._kernelZoomFactor = kernelZoomFactor;\n this.update();\n }\n\n public update() {\n this._initCircle();\n this._updateCircle();\n }\n\n private _initCircle() {\n if (this._circleMesh) {\n return;\n }\n\n const innerRadius = 70 / this._kernelZoomFactor / 1000;\n const outerRadius = innerRadius + innerRadius / 50;\n\n const innerRingGeometry = new RingGeometry(innerRadius, outerRadius, 32);\n const innerRingMaterial = new MeshBasicMaterial({\n color: 0x999999,\n side: DoubleSide,\n });\n this._circleMesh = new Mesh(innerRingGeometry, innerRingMaterial);\n this._circleMesh.name = 'Circle';\n this._circleMesh.rotation.set(Math.PI / 2, 0, 0);\n this._circleMesh.visible =\n this._continuousDrawingManager.shouldShowCircle();\n\n this._drawingGroup.add(this._circleMesh);\n }\n\n private _updateCircle() {\n if (!this._circleMesh) {\n return;\n }\n\n const innerRadius = 70 / this._kernelZoomFactor / 1000;\n if (innerRadius !== this._currentInnerRadius) {\n const outerRadius = innerRadius + innerRadius / 50;\n\n this._circleMesh.geometry = new RingGeometry(\n innerRadius,\n outerRadius,\n 32,\n );\n }\n\n const position = convertToTHREE(\n this._continuousDrawingManager.getStartPoint(),\n );\n position.y = 5;\n\n this._circleMesh.position.copy(position);\n this._circleMesh.visible =\n this._continuousDrawingManager.shouldShowCircle();\n\n this._currentInnerRadius = innerRadius;\n }\n\n public setKernelZoomFactor(kernelZoomFactor: number) {\n this._kernelZoomFactor = kernelZoomFactor;\n }\n\n public endDrawing() {\n this._drawingGroup.remove(this._circleMesh);\n this._circleMesh = null;\n }\n}\n"],"mappings":";;;AAKA,IAAqB,IAArB,MAA6C;;6BAQL;;CAEtC,KACE,GACA,GACA,GACA;AAIA,EAHA,KAAK,gBAAgB,GACrB,KAAK,4BAA4B,GACjC,KAAK,oBAAoB,GACzB,KAAK,QAAQ;;CAGf,SAAgB;AAEd,EADA,KAAK,aAAa,EAClB,KAAK,eAAe;;CAGtB,cAAsB;AACpB,MAAI,KAAK,YACP;EAGF,IAAM,IAAc,KAAK,KAAK,oBAAoB;AAclD,EANA,KAAK,cAAc,IAAI,EALG,IAAI,EAAa,GAFvB,IAAc,IAAc,IAEqB,GAAG,EAC9C,IAAI,EAAkB;GAC9C,OAAO;GACP,MAAA;GACD,CAAC,CAC+D,EACjE,KAAK,YAAY,OAAO,UACxB,KAAK,YAAY,SAAS,IAAI,KAAK,KAAK,GAAG,GAAG,EAAE,EAChD,KAAK,YAAY,UACf,KAAK,0BAA0B,kBAAkB,EAEnD,KAAK,cAAc,IAAI,KAAK,YAAY;;CAG1C,gBAAwB;AACtB,MAAI,CAAC,KAAK,YACR;EAGF,IAAM,IAAc,KAAK,KAAK,oBAAoB;AAClD,MAAI,MAAgB,KAAK,qBAAqB;GAC5C,IAAM,IAAc,IAAc,IAAc;AAEhD,QAAK,YAAY,WAAW,IAAI,EAC9B,GACA,GACA,GACD;;EAGH,IAAM,IAAW,EACf,KAAK,0BAA0B,eAAe,CAC/C;AAOD,EANA,EAAS,IAAI,GAEb,KAAK,YAAY,SAAS,KAAK,EAAS,EACxC,KAAK,YAAY,UACf,KAAK,0BAA0B,kBAAkB,EAEnD,KAAK,sBAAsB;;CAG7B,oBAA2B,GAA0B;AACnD,OAAK,oBAAoB;;CAG3B,aAAoB;AAElB,EADA,KAAK,cAAc,OAAO,KAAK,YAAY,EAC3C,KAAK,cAAc"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region packages/common-core/src/utils/string-utils.ts
|
|
2
|
+
var e = function(e) {
|
|
3
|
+
return e.startsWith("_") && (e = e.substr(1)), e.replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g, function(e, t) {
|
|
4
|
+
return (t > 0 ? "-" : "") + e.toLowerCase();
|
|
5
|
+
});
|
|
6
|
+
};
|
|
7
|
+
//#endregion
|
|
8
|
+
//#region packages/common-core/src/di/inject.ts
|
|
9
|
+
function t(t, n) {
|
|
10
|
+
let r = Symbol("property-cache");
|
|
11
|
+
Object.defineProperty(t, n, { get() {
|
|
12
|
+
if (!this[r]) {
|
|
13
|
+
let t = window.__RML__DI__?.lookup(e(n), this._creator_);
|
|
14
|
+
t ? this[r] = t : console.error("Dependency " + e(n) + " not found! Add dependency to /utils/injectables.ts");
|
|
15
|
+
}
|
|
16
|
+
return this[r];
|
|
17
|
+
} });
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
//#region \0@oxc-project+runtime@0.122.0/helpers/decorateMetadata.js
|
|
21
|
+
function n(e, t) {
|
|
22
|
+
if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(e, t);
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region \0@oxc-project+runtime@0.122.0/helpers/decorate.js
|
|
26
|
+
function r(e, t, n, r) {
|
|
27
|
+
var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
|
|
28
|
+
if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
|
|
29
|
+
else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
|
|
30
|
+
return i > 3 && a && Object.defineProperty(t, n, a), a;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { n, t as r, r as t };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=decorate-C1QnXPYw.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorate-C1QnXPYw.mjs","names":[],"sources":["../../packages/common-core/src/utils/string-utils.ts","../../packages/common-core/src/di/inject.ts"],"sourcesContent":["/*\n * Lifted from https://github.com/shahata/dasherize/blob/master/index.js\n */\nexport const dashCase = function (str: string) {\n if (str.startsWith('_')) {\n str = str.substr(1);\n }\n return str.replace(\n /[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,\n function (s: string, i: number) {\n return (i > 0 ? '-' : '') + s.toLowerCase();\n },\n );\n};\n","import './global-definitions';\nimport { dashCase } from '../utils/string-utils';\n\nexport default function inject(target: any, propertyName: string): void {\n const propertyCache = Symbol('property-cache');\n Object.defineProperty(target, propertyName, {\n get(this: any) {\n if (!this[propertyCache]) {\n // eslint-disable-next-line\n const instance = window.__RML__DI__?.lookup(\n dashCase(propertyName),\n this._creator_,\n );\n if (!instance) {\n console.error(\n 'Dependency ' +\n dashCase(propertyName) +\n ' not found! Add dependency to /utils/injectables.ts',\n );\n } else {\n this[propertyCache] = instance;\n }\n }\n return this[propertyCache];\n },\n });\n}\n"],"mappings":";AAGA,IAAa,IAAW,SAAU,GAAa;AAI7C,QAHI,EAAI,WAAW,IAAI,KACrB,IAAM,EAAI,OAAO,EAAE,GAEd,EAAI,QACT,gDACA,SAAU,GAAW,GAAW;AAC9B,UAAQ,IAAI,IAAI,MAAM,MAAM,EAAE,aAAa;GAE9C;;;;ACTH,SAAwB,EAAO,GAAa,GAA4B;CACtE,IAAM,IAAgB,OAAO,iBAAiB;AAC9C,QAAO,eAAe,GAAQ,GAAc,EAC1C,MAAe;AACb,MAAI,CAAC,KAAK,IAAgB;GAExB,IAAM,IAAW,OAAO,aAAa,OACnC,EAAS,EAAa,EACtB,KAAK,UACN;AACD,GAAK,IAOH,KAAK,KAAiB,IANtB,QAAQ,MACN,gBACE,EAAS,EAAa,GACtB,sDACH;;AAKL,SAAO,KAAK;IAEf,CAAC"}
|