@roomle/web-sdk 4.1.0 → 4.2.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/lib/ConfiguratorKernel.wasm +0 -0
  2. package/lib/RoomleCore.wasm +0 -0
  3. package/lib/RoomleToolsCore.wasm +0 -0
  4. package/lib/{api-COog8C3X.mjs → api-VdWgw-jg.mjs} +2 -2
  5. package/lib/{api-COog8C3X.mjs.map → api-VdWgw-jg.mjs.map} +1 -1
  6. package/lib/asset-loader.worker-eqHzNAwa.mjs.map +1 -1
  7. package/lib/{component-dimensioning-pA7fsqsP.mjs → component-dimensioning-DJuokZnv.mjs} +2 -2
  8. package/lib/{component-dimensioning-pA7fsqsP.mjs.map → component-dimensioning-DJuokZnv.mjs.map} +1 -1
  9. package/lib/{component-raycast-helper-CbpkovD8.mjs → component-raycast-helper-SZg14d7A.mjs} +2 -2
  10. package/lib/{component-raycast-helper-CbpkovD8.mjs.map → component-raycast-helper-SZg14d7A.mjs.map} +1 -1
  11. package/lib/{configurator-Ducp-Nxf.mjs → configurator-Bl3B3C63.mjs} +4 -4
  12. package/lib/{configurator-Ducp-Nxf.mjs.map → configurator-Bl3B3C63.mjs.map} +1 -1
  13. package/lib/configurator-CHYss9Ix.mjs +2 -0
  14. package/lib/glb-viewer-Bo6d43Pf.mjs +2 -0
  15. package/lib/{glb-viewer-BvnOSeLd.mjs → glb-viewer-DxwekYzn.mjs} +5 -5
  16. package/lib/glb-viewer-DxwekYzn.mjs.map +1 -0
  17. package/lib/{highlight-coordinator-DCfeXyn-.mjs → highlight-coordinator-Qonmfsu1.mjs} +2 -2
  18. package/lib/{highlight-coordinator-DCfeXyn-.mjs.map → highlight-coordinator-Qonmfsu1.mjs.map} +1 -1
  19. package/lib/{homag-intelligence-DWfY5Rhy.mjs → homag-intelligence-DwBJIGnh.mjs} +3 -3
  20. package/lib/{homag-intelligence-DWfY5Rhy.mjs.map → homag-intelligence-DwBJIGnh.mjs.map} +1 -1
  21. package/lib/{material-viewer-DShIT0xY.mjs → material-viewer-DjGxE0tY.mjs} +5 -5
  22. package/lib/material-viewer-DjGxE0tY.mjs.map +1 -0
  23. package/lib/{packages-6njsPLBJ.mjs → packages-Dz8NmJP4.mjs} +5 -5
  24. package/lib/{packages-6njsPLBJ.mjs.map → packages-Dz8NmJP4.mjs.map} +1 -1
  25. package/lib/{planner-ABiXTXmc.mjs → planner-CWJXj28p.mjs} +3 -3
  26. package/lib/{planner-ABiXTXmc.mjs.map → planner-CWJXj28p.mjs.map} +1 -1
  27. package/lib/planner-CuYso338.mjs +2 -0
  28. package/lib/roomle-headless.d.ts +50 -9
  29. package/lib/roomle-headless.js +15 -17
  30. package/lib/roomle-headless.js.map +1 -1
  31. package/lib/roomle-renderer-FUqNfNIf.mjs.map +1 -1
  32. package/lib/{roomle-sdk-BdEmEYZg.mjs → roomle-sdk-FrWkv2ZJ.mjs} +1523 -1312
  33. package/lib/roomle-sdk-FrWkv2ZJ.mjs.map +1 -0
  34. package/lib/roomle-sdk.d.ts +49 -9
  35. package/lib/roomle-sdk.js +7 -7
  36. package/lib/{roomle-webgpu-renderer-RLBME9mQ.mjs → roomle-webgpu-renderer-CNZiK43x.mjs} +8 -8
  37. package/lib/{roomle-webgpu-renderer-RLBME9mQ.mjs.map → roomle-webgpu-renderer-CNZiK43x.mjs.map} +1 -1
  38. package/lib/{scene-renderer-B4HVqeg3.mjs → scene-renderer-DR7EFd-8.mjs} +2 -2
  39. package/lib/{scene-renderer-B4HVqeg3.mjs.map → scene-renderer-DR7EFd-8.mjs.map} +1 -1
  40. package/lib/{script-loader-BTy3OZVv.mjs → script-loader-YLmjONN5.mjs} +2 -2
  41. package/lib/{script-loader-BTy3OZVv.mjs.map → script-loader-YLmjONN5.mjs.map} +1 -1
  42. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -1
  43. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +3 -0
  44. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.js +2 -0
  45. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +1 -1
  46. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
  47. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
  48. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
  49. package/lib/{stats-helper-Cae4Gs0E.mjs → stats-helper-vEwFkDIt.mjs} +2 -2
  50. package/lib/{stats-helper-Cae4Gs0E.mjs.map → stats-helper-vEwFkDIt.mjs.map} +1 -1
  51. package/lib/{threejs-utils-mqRHdm-p.mjs → threejs-utils-C9zED_Tu.mjs} +4 -2
  52. package/lib/threejs-utils-C9zED_Tu.mjs.map +1 -0
  53. package/lib/{tools-core-T65Q1eht.mjs → tools-core-CToGr3ow.mjs} +3 -3
  54. package/lib/{tools-core-T65Q1eht.mjs.map → tools-core-CToGr3ow.mjs.map} +1 -1
  55. package/package.json +2 -2
  56. package/lib/configurator-9q_a9B9k.mjs +0 -2
  57. package/lib/glb-viewer-BiRBZWfu.mjs +0 -2
  58. package/lib/glb-viewer-BvnOSeLd.mjs.map +0 -1
  59. package/lib/material-viewer-DShIT0xY.mjs.map +0 -1
  60. package/lib/planner-v3xjVi85.mjs +0 -2
  61. package/lib/roomle-sdk-BdEmEYZg.mjs.map +0 -1
  62. package/lib/threejs-utils-mqRHdm-p.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"homag-intelligence-DWfY5Rhy.mjs","names":["native"],"sources":["../../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/uuid/dist/esm-browser/native.js","../../../../node_modules/uuid/dist/esm-browser/v4.js","../../packages/homag-intelligence/src/callbacks.ts","../../packages/homag-intelligence/src/orders.ts","../../packages/homag-intelligence/src/debug-logging.ts","../../packages/homag-intelligence/src/homag-intelligence.ts"],"sourcesContent":["import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFNckMsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxHQUFlLEVBQUUsTUFBTSxHQUFHLENBQUM7SUFNekQsT0FBTyxDQUNMLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEdBQUc7UUFDSCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixHQUFHO1FBQ0gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsR0FBRztRQUNILFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEdBQUc7UUFDSCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUM1QixDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFlLEVBQUUsTUFBTSxHQUFHLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQU8xQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsZUFBZSxTQUFTLENBQUMifQ==","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm5nLWJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm5nLWJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsSUFBSSxlQUEwRCxDQUFDO0FBRS9ELE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxPQUFPLFVBQVUsR0FBRztJQUV6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FDYiwwR0FBMEcsQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFFRCxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUMifQ==","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlLWJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLEdBQ2QsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFdkYsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDIn0=","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random || (options.rng || rng)();\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdjQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUMzQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakQsU0FBUyxFQUFFLENBQUMsT0FBeUIsRUFBRSxHQUFnQixFQUFFLE1BQWU7SUFDdEUsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBRXhCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFHdEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBR2xDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlLEVBQUUsQ0FBQyJ9","import type { GlueLogic } from './glue-logic';\nimport { type RoomlePlanner } from '../../planner-core/src/roomle-planner';\nimport type { BASE_CONTEXT } from '../../common-core/src/main';\nimport type { SELECTION_MODE } from '../../configurator-core/src/utils/selection-handler';\nimport type { CallbackObjectType } from '../../planner-core/src/utils/planner-scene-utils';\nimport type { SelectionPayload } from '../../planner-core/src/roomle-planner-ui-callback';\nimport { type PlanElementViewModel } from '../../common-core/src/view-model/plan-element-view-model';\nimport type { CancelSelectionReasons } from '../../typings/planner';\n\nexport const initCallbacks = (\n roomlePlanner: RoomlePlanner,\n gluLogic: GlueLogic,\n) => {\n roomlePlanner.callbacks.onCompletelyLoaded = () => {\n gluLogic.groupsCompletelyLoaded();\n };\n\n roomlePlanner.callbacks.onExternalObjectModuleSelected = (\n groupId: string,\n rootModuleId: string | null,\n subModuleId: string | null,\n ) => {\n gluLogic.hiObjectSelection.groupOrModuleSelected(\n groupId,\n rootModuleId,\n subModuleId,\n );\n };\n\n roomlePlanner.callbacks.onContextChanged = (context: BASE_CONTEXT): void => {\n gluLogic.hiObjectSelection.contextChanged(context);\n };\n\n roomlePlanner.callbacks.onSelectionChange = (\n selectionMode: SELECTION_MODE,\n objectType: CallbackObjectType,\n payload: SelectionPayload,\n payloadPromise: Promise<SelectionPayload>,\n planElementViewModel: PlanElementViewModel,\n ): void => {\n gluLogic.hiObjectSelection.selectionChanged(\n selectionMode,\n objectType,\n payload,\n payloadPromise,\n planElementViewModel,\n );\n };\n\n roomlePlanner.callbacks.onSelectionCancel = (\n reason: CancelSelectionReasons,\n ): void => {\n gluLogic.hiObjectSelection.selectionCancel(reason);\n };\n};\n","import { type RoomlePlanner } from '../../planner-core/src/roomle-planner';\nimport type { GlueLogic } from './glue-logic';\nimport type { KernelPlanObject } from '../../typings/kernel';\nimport type { ExternalObjectSnapshotSaveResult } from './external-object-api';\nimport type {\n HiOrder,\n HiOrderData,\n HiOrderHeader,\n} from '#/common/src/hi/hi-types';\n\nconst getISO8601Date = (date = new Date()) => {\n // Get the ISO string (in UTC)\n let isoString = date.toISOString();\n\n // Remove the 'Z' at the end which indicates UTC\n isoString = isoString.slice(0, -1);\n\n // Find the position of milliseconds\n const msPosition = isoString.lastIndexOf('.');\n\n // Get the base timestamp with 3 digits of milliseconds and extend with zeros\n let baseTimestamp = isoString;\n\n if (msPosition !== -1) {\n // Add 4 zeros to extend from 3 to 7 digits of precision\n baseTimestamp = isoString.substring(0, msPosition + 4) + '0000';\n }\n\n // Get timezone offset in minutes and convert to hours and minutes\n const offsetMinutes = date.getTimezoneOffset();\n const offsetHours = Math.abs(Math.floor(offsetMinutes / 60));\n const offsetMins = Math.abs(offsetMinutes % 60);\n\n // Format the offset as +HH:MM or -HH:MM\n const offsetSign = offsetMinutes <= 0 ? '+' : '-';\n const offsetString = `${offsetSign}${String(offsetHours).padStart(\n 2,\n '0',\n )}:${String(offsetMins).padStart(2, '0')}`;\n\n return baseTimestamp + offsetString;\n};\n\nexport const createEmptyOrder = (): HiOrder => {\n const formatLocalDateTime = (date: Date = new Date()): string => {\n const pad = (n: number) => String(n).padStart(2, '0');\n\n const yyyy = date.getFullYear();\n const MM = pad(date.getMonth() + 1); // months are 0-based\n const dd = pad(date.getDate());\n\n const HH = pad(date.getHours());\n const mm = pad(date.getMinutes());\n const ss = pad(date.getSeconds());\n\n return `${yyyy}-${MM}-${dd} ${HH}:${mm}:${ss}`;\n };\n\n return {\n id: (window as any).uuidv4\n ? (window as any).uuidv4()\n : '00000000-0000-0000-0000-000000000000',\n state: 'New',\n orderNumber: '736362',\n orderName: 'SC-Order ' + formatLocalDateTime(),\n orderDescription: 'Lorem ipsum dolor sit amet...',\n project: 'Single family house Müller John',\n personInCharge: 'Joe',\n orderDate: getISO8601Date(),\n deliveryDatePlanned: getISO8601Date(\n new Date(Date.now() + 14 * 24 * 60 * 60 * 1000),\n ),\n addresses: [\n {\n type: 'Delivery, Billing',\n street: 'Musterstraße',\n houseNumber: '1',\n postalCode: '12345',\n city: 'Musterstadt',\n country: 'Deutschland',\n },\n ],\n customerName: 'Müller & Co.',\n customerNumber: '462642',\n createdAt: getISO8601Date(),\n changedAt: getISO8601Date(),\n changedBy: 'Selfish',\n items: [] as any[],\n };\n};\n\nconst _addMerchantPositions = async (\n roomlePlanner: RoomlePlanner,\n groupData: any,\n) => {\n const planOverview = await roomlePlanner.getPlanOverview();\n const count: Record<string, number> = {}; // key is id and value is count\n const itemIds = (\n planOverview.objects as unknown as KernelPlanObject[]\n ).reduce((acc: string[], item: any) => {\n if (item.catalogItemId) {\n if (!count[item.catalogItemId]) {\n count[item.catalogItemId] = 0;\n acc.push(item.catalogItemId);\n }\n count[item.catalogItemId]++;\n }\n return acc;\n }, []);\n const items =\n Array.isArray(itemIds) && itemIds.length > 0\n ? await roomlePlanner.getRapiAccess().getItems(itemIds)\n : [];\n const merchantItems = items.filter((item: any) => {\n if (item.manufacturerSKU !== undefined) {\n item.count = count[item.id];\n return true;\n }\n return false;\n });\n if (Array.isArray(merchantItems) && merchantItems.length > 0) {\n if (!groupData.items) {\n groupData.items = [];\n }\n let posNo = groupData.items.reduce((acc: number, item: any) => {\n if (item.items?.length) {\n return acc + item.items.length;\n }\n return acc;\n }, 0);\n merchantItems.forEach((item) => {\n const pos = {} as any;\n pos.type = 'Position';\n pos.name = (++posNo).toString();\n pos.articleNumber = item.manufacturerSKU;\n pos.articleName = item.label;\n pos.catalog = item.catalog;\n pos.quantity = item.count;\n pos.height = item.displayedHeight;\n pos.width = item.displayedWidth;\n pos.depth = item.displayedDepth;\n pos.color = item.basecolor;\n pos.procurementType = 'PTO';\n pos.additionalData = [];\n if (item.perspectiveImage) {\n pos.additionalData.push({\n category: 'ArticleImage',\n downloadUri: item.perspectiveImage,\n type: 'Image',\n });\n }\n groupData.items.push(pos);\n });\n }\n};\n\nexport default class Orders {\n private _roomlePlanner: RoomlePlanner;\n private _glueLogic: GlueLogic;\n\n constructor(roomlePlanner: RoomlePlanner, glueLogic: GlueLogic) {\n this._roomlePlanner = roomlePlanner;\n this._glueLogic = glueLogic;\n }\n\n public async fetchPrice(planId?: string, orderHeader?: HiOrderHeader) {\n let orderData = await this._glueLogic.getGroupDataForOrder({\n roomlePlannerId: planId,\n });\n if (!orderData?.items?.length) {\n return null;\n }\n return await this._fetchOrderDataWithPrice(orderData, orderHeader);\n }\n\n public async placeOrder(\n withPrice: boolean = true,\n orderHeader?: HiOrderHeader,\n ) {\n const planData = await this._roomlePlanner.saveExternalObjectSnapshot();\n if (!planData) {\n console.error('Could not save plan snapshot before placing order');\n return;\n }\n if (!planData.orderData) {\n console.error('No order data found in plan snapshot');\n return;\n }\n\n const priceData =\n withPrice && planData.orderData.items?.length > 0\n ? await this._fetchOrderDataWithPrice(planData.orderData, orderHeader)\n : null;\n let order;\n if (priceData) {\n order = priceData.orderData;\n } else {\n order = this._createOrder(orderHeader);\n order.items.push(planData.orderData as never);\n await _addMerchantPositions(this._roomlePlanner, planData.orderData);\n }\n\n // The first item in the order is the one created from the HI objects in the plan\n if (order.items?.length > 0) {\n this._addAdditionalDataToOrder(order.items[0], planData);\n }\n\n await this._glueLogic.hiCallbacks?.onPlaceOrder?.(order);\n }\n\n private _addAdditionalDataToOrder(\n orderData: HiOrderData,\n planData: ExternalObjectSnapshotSaveResult,\n ) {\n if (!Array.isArray(orderData.additionalData)) {\n orderData.additionalData = [];\n }\n if (planData.perspectiveImageLink) {\n orderData.additionalData.push({\n type: 'Image',\n category: 'OverviewImage',\n downloadUri: planData.perspectiveImageLink,\n });\n }\n if (planData.topImageLink) {\n orderData.additionalData.push({\n type: 'Image',\n category: 'AboveImage',\n downloadUri: planData.topImageLink,\n });\n }\n if (planData.objectGlbLink) {\n orderData.additionalData.push({\n type: 'ThreeD',\n category: 'ThreeDModel',\n downloadUri: planData.objectGlbLink,\n });\n }\n }\n\n private async _fetchOrderDataWithPrice(\n orderData: HiOrderData,\n orderHeader?: HiOrderHeader,\n ): Promise<any> {\n let order = this._createOrder(orderHeader);\n order.items.push(orderData as never);\n return this._glueLogic.hiCallbacks?.onFetchPrice?.(order) ?? null;\n }\n\n private _createOrder(orderHeader?: HiOrderHeader): HiOrder {\n return orderHeader\n ? {\n ...orderHeader,\n items: [],\n }\n : createEmptyOrder();\n }\n}\n","import type { HiCallbacks, HiOrderData } from '#/common/src/hi/hi-types';\nimport type {\n GlueLogic,\n GetGroupDataForOrderOptions,\n LibraryData,\n RoomDesignerRequests,\n ValidContainerModules,\n} from './glue-logic';\nimport type { ExternalObjectGroup } from './external-object-api-callbacks';\nimport type { ExternalModuleInformation } from '../../typings/kernel';\nimport type {\n CheckDropDownResult,\n PosArticle,\n PosGroup,\n PosSaveData,\n} from './model/oc-scripts-domain.model';\nimport type { HiObjectSelectionApi } from './hi-object-selection';\nimport type {\n ExternalObjectGroupLayout,\n ExternalObjectSnapshotSaveResult,\n ExternalRoomInformation,\n LoadExternalObjectOptions,\n PlanRoomGeometryMode,\n} from './external-object-api';\n\nexport class GlueLayerRequestDebugLogging implements GlueLogic {\n private _glueLogic: GlueLogic;\n private _hiCallbacks: HiCallbacks;\n\n constructor(glueLogic: GlueLogic, hiCallbacks: HiCallbacks) {\n this._glueLogic = glueLogic;\n this._hiCallbacks = hiCallbacks;\n }\n\n public get hiCallbacks(): HiCallbacks | null {\n return this._hiCallbacks;\n }\n\n public get hiObjectSelection(): HiObjectSelectionApi {\n return this._glueLogic.hiObjectSelection;\n }\n\n private _logRequest(\n message: string,\n ...args: Array<string | null | undefined>\n ) {\n let messageAndArgs = message;\n if (args) {\n args.forEach((item) => {\n messageAndArgs += ' ' + item;\n });\n }\n this._hiCallbacks.onLogMessage?.('HI REQUEST', messageAndArgs);\n }\n\n public isLibraryLoaded(libraryId: string): boolean {\n return this._glueLogic.isLibraryLoaded(libraryId);\n }\n\n public getLibraryData(libraryId: string): LibraryData | null {\n return this._glueLogic.getLibraryData(libraryId);\n }\n\n public addLibrary(libraryData: LibraryData): Promise<void> {\n this._logRequest('addLibrary', libraryData.libraryId);\n return this._glueLogic.addLibrary(libraryData);\n }\n\n public setPosDataForLoading(posData: PosSaveData | null): Promise<void> {\n this._logRequest('setPosDataForLoading', posData ? 'set' : 'null');\n return this._glueLogic.setPosDataForLoading(posData);\n }\n\n public loadPosData(articleCatalogJson: any, libraryId: string): void {\n this._logRequest('loadPosData', libraryId);\n this._glueLogic.loadPosData(articleCatalogJson, libraryId);\n }\n\n public async mergeGroups(\n targetGroup: ExternalObjectGroup,\n idsOfGroupsMerged: string | string[],\n idOfTargetRootModule: string,\n mergedWithDragging: boolean,\n ): Promise<void> {\n this._logRequest(\n 'mergeGroups',\n targetGroup.groupId,\n JSON.stringify(idsOfGroupsMerged),\n idOfTargetRootModule,\n );\n return this._glueLogic.mergeGroups(\n targetGroup,\n idsOfGroupsMerged,\n idOfTargetRootModule,\n mergedWithDragging,\n );\n }\n\n public deleteRootModule(\n remainingGroup: ExternalObjectGroup,\n rootModuleIdToDelete: string,\n splitOffGroups: ExternalObjectGroup[],\n ): Promise<void> {\n this._logRequest(\n 'deleteRootModule',\n JSON.stringify(remainingGroup),\n rootModuleIdToDelete,\n JSON.stringify(splitOffGroups),\n );\n return this._glueLogic.deleteRootModule(\n remainingGroup,\n rootModuleIdToDelete,\n splitOffGroups,\n );\n }\n\n public splitRootModuleFromGroup(\n splitGroup: ExternalObjectGroup,\n newGroupedRootModules: ExternalObjectGroup[],\n ): Promise<void> {\n this._logRequest(\n 'splitRootModuleFromGroup',\n JSON.stringify(splitGroup),\n JSON.stringify(newGroupedRootModules),\n );\n return this._glueLogic.splitRootModuleFromGroup(\n splitGroup,\n newGroupedRootModules,\n );\n }\n\n public async duplicateGroup(\n duplicatedGroup: ExternalObjectGroup,\n ): Promise<void> {\n this._logRequest('duplicateGroup', duplicatedGroup.groupId);\n return this._glueLogic.duplicateGroup(duplicatedGroup);\n }\n\n public adjustGroup(groupId: string): Promise<void> {\n this._logRequest('adjustGroup', groupId);\n return this._glueLogic.adjustGroup(groupId);\n }\n\n public modifyAttribute(\n groupId: string,\n moduleIdObjects: ExternalModuleInformation[],\n attributeName: string,\n value: string,\n ): Promise<void> {\n this._logRequest(\n 'modifyAttribute',\n groupId,\n JSON.stringify(moduleIdObjects),\n attributeName,\n value,\n );\n return this._glueLogic.modifyAttribute(\n groupId,\n moduleIdObjects,\n attributeName,\n value,\n );\n }\n\n public updateAttribute(\n rootModuleId: string,\n moduleId: string | null,\n attributeId: string,\n attributeValue: string | boolean,\n ): Promise<void> {\n this._logRequest(\n 'updateAttribute',\n rootModuleId,\n moduleId,\n attributeId,\n attributeValue.toString(),\n );\n return this._glueLogic.updateAttribute(\n rootModuleId,\n moduleId,\n attributeId,\n attributeValue,\n );\n }\n\n public getVerifiedAttributeOptions(\n moduleId: string,\n attributeIds?: string | string[],\n ): Promise<Record<string, CheckDropDownResult> | undefined> {\n this._logRequest(\n 'getVerifiedAttributeOptions',\n moduleId,\n attributeIds ? JSON.stringify(attributeIds) : '[]',\n );\n return this._glueLogic.getVerifiedAttributeOptions(moduleId, attributeIds);\n }\n\n public getVerifiedGroupAttributeOptions(\n groupId: string,\n attributeIds?: string | string[],\n ): Promise<Record<string, CheckDropDownResult> | undefined> {\n this._logRequest(\n 'getVerifiedGroupAttributeOptions',\n groupId,\n attributeIds ? JSON.stringify(attributeIds) : '[]',\n );\n return this._glueLogic.getVerifiedGroupAttributeOptions(\n groupId,\n attributeIds,\n );\n }\n\n public updateProperty(\n rootModuleId?: string,\n propertyName?: string,\n propertyValue?: string | number | boolean,\n ): void {\n this._logRequest(\n 'updateProperty',\n rootModuleId ?? 'undefined',\n propertyName ?? 'undefined',\n propertyValue?.toString() ?? 'undefined',\n );\n this._glueLogic.updateProperty(rootModuleId, propertyName, propertyValue);\n }\n\n public findValidSubArticles(posGroupIds: string[] | string): PosArticle[] {\n this._logRequest(\n 'findValidSubArticles',\n Array.isArray(posGroupIds) ? JSON.stringify(posGroupIds) : posGroupIds,\n );\n return this._glueLogic.findValidSubArticles(posGroupIds);\n }\n\n public getValidContainerModulesForSubArticle(\n posGroupIds: string[] | string,\n subArticleId: string,\n ): ValidContainerModules[] {\n this._logRequest(\n 'getValidContainerModulesForSubArticle',\n Array.isArray(posGroupIds) ? JSON.stringify(posGroupIds) : posGroupIds,\n subArticleId,\n );\n return this._glueLogic.getValidContainerModulesForSubArticle(\n posGroupIds,\n subArticleId,\n );\n }\n\n public addSubArticle(\n articleId: string,\n rootModuleId: string,\n parentModuleId: string,\n insertPosition?: number[],\n ): void {\n this._logRequest(\n 'addSubArticle',\n articleId,\n rootModuleId,\n parentModuleId,\n insertPosition ? JSON.stringify(insertPosition) : 'undefined',\n );\n return this._glueLogic.addSubArticle(\n articleId,\n rootModuleId,\n parentModuleId,\n insertPosition,\n );\n }\n\n public deleteSubArticles(\n groupId: string,\n subModuleIds: string[] | string,\n ): Promise<void> {\n this._logRequest(\n 'deleteSubArticles',\n groupId,\n Array.isArray(subModuleIds) ? JSON.stringify(subModuleIds) : subModuleIds,\n );\n return this._glueLogic.deleteSubArticles(groupId, subModuleIds);\n }\n\n public swapRootModule(\n groupId: string,\n rootModuleId: string,\n articleId: string,\n ): Promise<void> {\n this._logRequest('swapRootModule', groupId, rootModuleId, articleId);\n return this._glueLogic.swapRootModule(groupId, rootModuleId, articleId);\n }\n\n public arrangeRootModulesOfGroup(\n changedGroup: ExternalObjectGroup,\n ): Promise<void> {\n this._logRequest('arrangeRootModulesOfGroup', JSON.stringify(changedGroup));\n return this._glueLogic.arrangeRootModulesOfGroup(changedGroup);\n }\n\n public changedGroupPlanningSituation(\n changedGroup: ExternalObjectGroup,\n objectPositionChanged: boolean,\n ): Promise<void> {\n this._logRequest(\n 'changedGroupPlanningSituation',\n changedGroup.groupId,\n objectPositionChanged.toString(),\n );\n return this._glueLogic.changedGroupPlanningSituation(\n changedGroup,\n objectPositionChanged,\n );\n }\n\n public changedGroupFromHistory(\n posDataJson: PosGroup,\n reloadGroup: boolean,\n ): void {\n this._logRequest(\n 'changedGroupFromHistory',\n posDataJson.id,\n reloadGroup.toString(),\n );\n this._glueLogic.changedGroupFromHistory(posDataJson, reloadGroup);\n }\n\n public loadedGroup(posDataJson: PosGroup): Promise<void> {\n this._logRequest('loadedGroup', posDataJson.id);\n return this._glueLogic.loadedGroup(posDataJson);\n }\n\n public groupsCompletelyLoaded(): void {\n this._logRequest('groupsCompletelyLoaded');\n this._glueLogic.groupsCompletelyLoaded();\n }\n\n public removedGroup(groupId: string): void {\n this._logRequest('removedGroup', groupId);\n this._glueLogic.removedGroup(groupId);\n }\n\n public openCloseGroup(groupId: string): void {\n this._logRequest('openCloseGroup', groupId);\n this._glueLogic.openCloseGroup(groupId);\n }\n\n public getSaveDataGroups(): Promise<PosGroup[] | null> {\n this._logRequest('getSaveDataGroups');\n return this._glueLogic.getSaveDataGroups();\n }\n\n public getSubArticleId(id: string): string | undefined {\n this._logRequest('getSubArticleId', id);\n return this._glueLogic.getSubArticleId(id);\n }\n\n public async newPosDataFromId(id: string): Promise<PosGroup | undefined> {\n this._logRequest('newPosDataFromId', id);\n return this._glueLogic.newPosDataFromId(id);\n }\n\n public async newPosDataFromArticleLayout(\n articleLayoutJson: ExternalObjectGroupLayout,\n layoutType: string,\n posArticles?: PosArticle[],\n ): Promise<PosGroup | undefined> {\n this._logRequest(\n 'newPosDataFromArticleLayout',\n layoutType,\n JSON.stringify(articleLayoutJson),\n );\n return this._glueLogic.newPosDataFromArticleLayout(\n articleLayoutJson,\n layoutType,\n posArticles,\n );\n }\n\n public async newPosDataFromGroup(posDataJson: PosGroup): Promise<PosGroup> {\n this._logRequest('newPosDataFromId', JSON.stringify(posDataJson));\n return this._glueLogic.newPosDataFromGroup(posDataJson);\n }\n\n public getGroupDataForOrder(\n options: GetGroupDataForOrderOptions,\n ): Promise<HiOrderData | null> {\n this._logRequest(\n 'getGroupDataForOrder',\n options.roomlePlannerId,\n options.mode,\n );\n return this._glueLogic.getGroupDataForOrder(options);\n }\n\n public getMaterialUrl(\n materialId: string,\n groupOrModuleId?: string,\n ): string | null {\n this._logRequest('getMaterialUrl', materialId, groupOrModuleId);\n return this._glueLogic.getMaterialUrl(materialId, groupOrModuleId);\n }\n}\n\nexport class GlueLayerResponseDebugLogging implements RoomDesignerRequests {\n private _roomDesignerRequests: RoomDesignerRequests;\n private _hiCallbacks: HiCallbacks;\n\n constructor(\n roomDesignerRequests: RoomDesignerRequests,\n hiCallbacks: HiCallbacks,\n ) {\n this._roomDesignerRequests = roomDesignerRequests;\n this._hiCallbacks = hiCallbacks;\n }\n\n private _logResponse(message: string, ...args: Array<string | null>) {\n let messageAndArgs = message;\n if (args) {\n args.forEach((item) => {\n messageAndArgs += ' ' + item;\n });\n }\n this._hiCallbacks.onLogMessage?.('HI RESPONSE', messageAndArgs);\n }\n\n public loadMasterData(masterData: any): void {\n this._logResponse('loadMasterData');\n this._roomDesignerRequests.loadMasterData(masterData);\n }\n\n public async loadPosGroups(\n posDataJson: PosGroup | PosGroup[],\n options: LoadExternalObjectOptions,\n ): Promise<void> {\n const groupIds = Array.isArray(posDataJson)\n ? posDataJson.map((group) => group.id).join(',')\n : posDataJson.id;\n this._logResponse(\n 'loadPosGroups',\n groupIds,\n options.reason ?? 'undefined',\n options.findFreeSpaceInPlan?.toString() ?? 'false',\n options.moduleIdMap ? JSON.stringify(options.moduleIdMap) : '[]',\n options.mergedGroups ? JSON.stringify(options.mergedGroups) : '[]',\n );\n return this._roomDesignerRequests.loadPosGroups(posDataJson, options);\n }\n\n public completelyLoaded(): void {\n this._logResponse('completelyLoaded');\n this._roomDesignerRequests.completelyLoaded();\n }\n\n public async selectGroup(groupId: string): Promise<void> {\n this._logResponse('selectGroup', groupId);\n return this._roomDesignerRequests.selectGroup(groupId);\n }\n\n public async selectRoot(rootModuleId: string): Promise<void> {\n this._logResponse('selectRoot', rootModuleId);\n return this._roomDesignerRequests.selectRoot(rootModuleId);\n }\n\n public async selectModule(\n rootModuleId: string,\n subModuleId: string,\n ): Promise<void> {\n this._logResponse('selectModule', rootModuleId, subModuleId);\n return this._roomDesignerRequests.selectModule(rootModuleId, subModuleId);\n }\n\n public openCloseGroup(\n groupOrRootModuleId: string,\n subModuleId: string | null,\n open: boolean,\n animate: boolean,\n ) {\n this._logResponse(\n 'openCloseGroup',\n groupOrRootModuleId,\n subModuleId,\n open.toString(),\n animate.toString(),\n );\n this._roomDesignerRequests.openCloseGroup(\n groupOrRootModuleId,\n subModuleId,\n open,\n animate,\n );\n return Promise.resolve();\n }\n\n public deleteGroup(groupId: string): void {\n this._logResponse('deleteGroup', groupId);\n return this._roomDesignerRequests.deleteGroup(groupId);\n }\n\n public deleteRootModule(rootModuleId: string): void {\n this._logResponse('deleteRootModule', rootModuleId);\n return this._roomDesignerRequests.deleteRootModule(rootModuleId);\n }\n\n public getPosDataOfAllGroups(): Promise<PosGroup[]> {\n this._logResponse('getPosDataOfAllGroups');\n return this._roomDesignerRequests.getPosDataOfAllGroups();\n }\n\n public getRoomInformation(\n mode?: PlanRoomGeometryMode,\n ): Promise<ExternalRoomInformation> {\n this._logResponse('getRoomInformation', mode ?? null);\n return this._roomDesignerRequests.getRoomInformation(mode);\n }\n\n public saveExternalObjectSnapshot(): Promise<ExternalObjectSnapshotSaveResult | null> {\n this._logResponse('saveExternalObjectSnapshot');\n return this._roomDesignerRequests.saveExternalObjectSnapshot();\n }\n}\n","import { RoomDesignerApi } from './api';\nimport type { GlueLogic, HiAttributeOptionsResult } from './glue-logic';\nimport { GlueLogicImplementation, type LibraryData } from './glue-logic';\nimport { type HomagIntelligenceInitData } from './hi-api-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport type {\n MasterData,\n PosArticle,\n PosContour,\n PosGroup,\n PosModuleAttribute,\n PosModuleData,\n PosRoom,\n} from './model/oc-scripts-domain.model';\nimport { initCallbacks } from './callbacks';\nimport { type RoomlePlanner } from '../../planner-core/src/roomle-planner';\nimport Orders from './orders';\nimport type {\n ExternalConfiguration,\n ExternalItem,\n} from '../../typings/external-objects';\nimport type { HiTagCatalogCallbacks } from './hi-tag-catalog-callbacks';\nimport type { HiCallbacks, HiOrderHeader } from '#/common/src/hi/hi-types';\nimport {\n GlueLayerRequestDebugLogging,\n GlueLayerResponseDebugLogging,\n} from './debug-logging';\nimport type { ExternalObjectValidContainerModules } from './external-object-api-callbacks';\n\ndeclare global {\n interface Window {\n uuidv4: () => string;\n }\n}\n\nconsole.warn('Homag Intelligence plugin is loaded.');\n\n// export const HOMAG_INTELLIGENCE_ENDPOINT = 'http://localhost:8080/proxy_request?url=';\n// export const HOMAG_INTELLIGENCE_ENDPOINT =\n// 'https://europe-west3-rml-showcases.cloudfunctions.net/proxy_request?url=';\n\nexport type ExternalObjects = Map<\n string,\n { id: string; label: string; items: any[] }\n>;\nexport type ExternalItems = Map<string, ExternalItem>;\nexport type ExternalConfigurations = Map<string, ExternalConfiguration>;\n\n/**\n * Serialization lock for _initCalcScript.\n * Concurrent calls share `window.exports`, so they must run one at a time.\n */\nlet calcScriptLock: Promise<void> = Promise.resolve();\n\nconst acquireCalcScriptLock = (): Promise<() => void> => {\n let release: () => void = () => {};\n const next = new Promise<void>((resolve) => {\n release = resolve;\n });\n const prev = calcScriptLock;\n calcScriptLock = next;\n return prev.then(() => release);\n};\n\nexport class HomagIntelligence {\n private _roomlePlanner: RoomlePlanner;\n private _api: RoomDesignerApi;\n private _glueLogic: GlueLogic;\n private _orders: Orders;\n private _hiCallbacks: HiCallbacks;\n\n constructor(\n roomlePlanner: RoomlePlanner,\n hiOptions: HomagIntelligenceInitData,\n hiCallbacks: HiCallbacks,\n ) {\n if (!window.uuidv4) {\n window.uuidv4 = uuidv4; // Ensure uuidv4 is available globally\n }\n\n this._roomlePlanner = roomlePlanner;\n this._roomlePlanner.setHomagIntelligence(this);\n this._hiCallbacks = hiCallbacks;\n this._api = new RoomDesignerApi(this._roomlePlanner);\n\n if (hiOptions?.debugLogging) {\n const api = new GlueLayerResponseDebugLogging(this._api, hiCallbacks);\n const glueLogic = new GlueLogicImplementation(api, hiCallbacks);\n this._glueLogic = new GlueLayerRequestDebugLogging(\n glueLogic,\n hiCallbacks,\n );\n } else {\n this._glueLogic = new GlueLogicImplementation(this._api, hiCallbacks);\n }\n initCallbacks(this._roomlePlanner, this._glueLogic);\n this._orders = new Orders(roomlePlanner, this._glueLogic);\n }\n\n /**\n * Loads previously saved PosGroup data via hiCallbacks.\n * Must be called after construction to restore saved state.\n */\n public async loadSavedPosData(): Promise<void> {\n const savedPosGroupData =\n (await this._hiCallbacks.onGetSavedPosGroupData?.()) ?? null;\n await this._glueLogic.setPosDataForLoading(savedPosGroupData);\n }\n\n public async loadLibrary(libraryId: string) {\n const libraryData = await this._loadLibraryData(libraryId);\n await this._glueLogic.addLibrary(libraryData);\n }\n\n public async loadCatalog(\n libraryId: string,\n articles: any,\n catalogCallbacks: HiTagCatalogCallbacks,\n ) {\n catalogCallbacks?.setEmulator(this._glueLogic);\n this._glueLogic.loadPosData(await articles, libraryId);\n }\n\n private async _loadLibraryData(libraryId: string): Promise<LibraryData> {\n if (this._glueLogic.isLibraryLoaded(libraryId)) {\n const data = this._glueLogic.getLibraryData(libraryId);\n if (data !== null) {\n return data;\n }\n }\n const hiCallbacks = this._glueLogic.hiCallbacks;\n if (hiCallbacks === null) {\n throw new Error('HiCallbacks not initialized');\n }\n const { masterData, libraryExports } = await this._requestHiLibrary(\n libraryId,\n hiCallbacks,\n );\n this._loadMasterData(masterData);\n const libraryData: LibraryData = {\n libraryId,\n masterData,\n posGroupVersion: 1,\n initializePosGroup: (posGroup: PosGroup): void => {\n if (!libraryExports.initializePosGroup) {\n return;\n }\n libraryExports.initializePosGroup(posGroup);\n },\n calculateGroup: (groupData: PosGroup): PosGroup => {\n return libraryExports.calc(groupData);\n },\n getOrderData: (\n groupData: PosGroup[],\n roomlePlannerId?: string,\n rooms?: PosContour[],\n ): any => {\n return libraryExports.getOrderData(groupData, roomlePlannerId, rooms);\n },\n getAttributesDropDownValues: async (\n module: PosModuleData,\n attributeIds?: string | string[],\n ): Promise<Record<string, HiAttributeOptionsResult>> => {\n const ids = attributeIds\n ? Array.isArray(attributeIds)\n ? attributeIds\n : [attributeIds]\n : (module.attributes ?? []).map((attribute) => attribute.id);\n const attributeOptions: Record<string, any[]> = {};\n for (const attributeId of ids) {\n try {\n const attributeDropDownApi =\n libraryExports.getAttributesDropDownValuesV2 ??\n libraryExports.getAttributesDropDownValues;\n const options = await attributeDropDownApi(module, attributeId);\n attributeOptions[attributeId] = options;\n } catch (error) {\n console.error(error);\n attributeOptions[attributeId] = [];\n }\n }\n return attributeOptions;\n },\n solveModuleAttributeConflict: (\n module: PosModuleData,\n attributeName: string,\n value: string | number | boolean,\n ): PosModuleAttribute[] | undefined => {\n if (!libraryExports.solveModuleAttributeConflict) {\n return undefined;\n }\n const results = libraryExports.solveModuleAttributeConflict(\n module,\n attributeName,\n value,\n );\n return results;\n },\n groupAdjust: (\n posGroup: PosGroup,\n articles: PosArticle[],\n roomInformation: PosRoom,\n ): PosGroup => {\n if (!libraryExports.groupAdjust) {\n return posGroup;\n }\n const results = libraryExports.groupAdjust(\n posGroup,\n articles,\n roomInformation,\n );\n return results;\n },\n getValidSubArticles(\n calculatedPosGroup: PosGroup,\n articles: PosArticle[],\n masterData: MasterData,\n ): PosArticle[] {\n if (!libraryExports.getValidSubArticles) {\n return [];\n }\n const results = libraryExports.getValidSubArticles(\n calculatedPosGroup,\n articles,\n masterData,\n );\n return results;\n },\n getValidContainerModulesForSubArticle(\n calculatedPosGroup: PosGroup,\n subArticle: PosArticle,\n masterData: MasterData,\n ): ExternalObjectValidContainerModules[] {\n if (!libraryExports.getValidContainerModulesForSubArticle) {\n return [];\n }\n const results = libraryExports.getValidContainerModulesForSubArticle(\n calculatedPosGroup,\n subArticle,\n masterData,\n );\n return results;\n },\n addSubArticle(\n targetPosGroup: PosGroup,\n article: PosArticle,\n rootId: string,\n parentModuleId: string,\n insertPosition?: number[],\n masterData?: MasterData,\n ): PosGroup {\n if (!libraryExports.addSubArticle) {\n return targetPosGroup;\n }\n const results = libraryExports.addSubArticle(\n targetPosGroup,\n article,\n rootId,\n parentModuleId,\n insertPosition,\n masterData,\n );\n return results;\n },\n deleteSubArticle(\n targetPosGroup: PosGroup,\n rootId: string,\n articleModuleId: string,\n ): PosGroup {\n if (!libraryExports.deleteSubArticle) {\n return targetPosGroup;\n }\n const results = libraryExports.deleteSubArticle(\n targetPosGroup,\n rootId,\n articleModuleId,\n );\n return results;\n },\n };\n return libraryData;\n }\n\n public async _requestHiLibrary(\n libraryId: string,\n hiCallbacks: HiCallbacks,\n ): Promise<{\n masterData: MasterData;\n libraryExports: any;\n }> {\n const [masterData, calcScriptString] = await Promise.all([\n hiCallbacks.onLoadMasterData(libraryId),\n hiCallbacks.onLoadJavascript(libraryId),\n ]);\n const libraryExports = await this._initCalcScript(calcScriptString);\n return {\n masterData,\n libraryExports,\n };\n }\n\n private _loadMasterData(masterData: MasterData): void {\n return this._api.loadMasterData(masterData);\n }\n\n private async _initCalcScript(scriptText: string): Promise<any> {\n // Acquire the lock so concurrent _initCalcScript calls don't corrupt\n // each other's window.exports (which is a shared global).\n const release = await acquireCalcScriptLock();\n let blobUrl: string | undefined;\n try {\n window.exports = {};\n const blob = new Blob([scriptText], { type: 'text/javascript' });\n blobUrl = URL.createObjectURL(blob);\n await import(blobUrl);\n return window.exports;\n } catch (e) {\n console.error(e);\n throw new Error('Failed to load calc.js!');\n } finally {\n if (blobUrl) {\n URL.revokeObjectURL(blobUrl);\n }\n release();\n }\n }\n\n public getGlueLogic(): GlueLogic {\n return this._glueLogic;\n }\n\n public async placeOrder(\n withPrice: boolean = true,\n orderHeader?: HiOrderHeader,\n ) {\n await this._orders.placeOrder(withPrice, orderHeader);\n }\n\n public async fetchPrice(planId?: string, orderHeader?: HiOrderHeader) {\n return this._orders.fetchPrice(planId, orderHeader);\n }\n}\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
1
+ {"version":3,"file":"homag-intelligence-DwBJIGnh.mjs","names":["native"],"sources":["../../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/uuid/dist/esm-browser/native.js","../../../../node_modules/uuid/dist/esm-browser/v4.js","../../packages/homag-intelligence/src/callbacks.ts","../../packages/homag-intelligence/src/orders.ts","../../packages/homag-intelligence/src/debug-logging.ts","../../packages/homag-intelligence/src/homag-intelligence.ts"],"sourcesContent":["import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFNckMsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxHQUFlLEVBQUUsTUFBTSxHQUFHLENBQUM7SUFNekQsT0FBTyxDQUNMLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEdBQUc7UUFDSCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixHQUFHO1FBQ0gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsR0FBRztRQUNILFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEdBQUc7UUFDSCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUM1QixDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFlLEVBQUUsTUFBTSxHQUFHLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQU8xQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsZUFBZSxTQUFTLENBQUMifQ==","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm5nLWJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm5nLWJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsSUFBSSxlQUEwRCxDQUFDO0FBRS9ELE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxPQUFPLFVBQVUsR0FBRztJQUV6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FDYiwwR0FBMEcsQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFFRCxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUMifQ==","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlLWJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLEdBQ2QsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFdkYsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDIn0=","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random || (options.rng || rng)();\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdjQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUMzQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakQsU0FBUyxFQUFFLENBQUMsT0FBeUIsRUFBRSxHQUFnQixFQUFFLE1BQWU7SUFDdEUsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBRXhCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFHdEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBR2xDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxlQUFlLEVBQUUsQ0FBQyJ9","import type { GlueLogic } from './glue-logic';\nimport { type RoomlePlanner } from '../../planner-core/src/roomle-planner';\nimport type { BASE_CONTEXT } from '../../common-core/src/main';\nimport type { SELECTION_MODE } from '../../configurator-core/src/utils/selection-handler';\nimport type { CallbackObjectType } from '../../planner-core/src/utils/planner-scene-utils';\nimport type { SelectionPayload } from '../../planner-core/src/roomle-planner-ui-callback';\nimport { type PlanElementViewModel } from '../../common-core/src/view-model/plan-element-view-model';\nimport type { CancelSelectionReasons } from '../../typings/planner';\n\nexport const initCallbacks = (\n roomlePlanner: RoomlePlanner,\n gluLogic: GlueLogic,\n) => {\n roomlePlanner.callbacks.onCompletelyLoaded = () => {\n gluLogic.groupsCompletelyLoaded();\n };\n\n roomlePlanner.callbacks.onExternalObjectModuleSelected = (\n groupId: string,\n rootModuleId: string | null,\n subModuleId: string | null,\n ) => {\n gluLogic.hiObjectSelection.groupOrModuleSelected(\n groupId,\n rootModuleId,\n subModuleId,\n );\n };\n\n roomlePlanner.callbacks.onContextChanged = (context: BASE_CONTEXT): void => {\n gluLogic.hiObjectSelection.contextChanged(context);\n };\n\n roomlePlanner.callbacks.onSelectionChange = (\n selectionMode: SELECTION_MODE,\n objectType: CallbackObjectType,\n payload: SelectionPayload,\n payloadPromise: Promise<SelectionPayload>,\n planElementViewModel: PlanElementViewModel,\n ): void => {\n gluLogic.hiObjectSelection.selectionChanged(\n selectionMode,\n objectType,\n payload,\n payloadPromise,\n planElementViewModel,\n );\n };\n\n roomlePlanner.callbacks.onSelectionCancel = (\n reason: CancelSelectionReasons,\n ): void => {\n gluLogic.hiObjectSelection.selectionCancel(reason);\n };\n};\n","import { type RoomlePlanner } from '../../planner-core/src/roomle-planner';\nimport type { GlueLogic } from './glue-logic';\nimport type { KernelPlanObject } from '../../typings/kernel';\nimport type { ExternalObjectSnapshotSaveResult } from './external-object-api';\nimport type {\n HiOrder,\n HiOrderData,\n HiOrderHeader,\n} from '#/common/src/hi/hi-types';\n\nconst getISO8601Date = (date = new Date()) => {\n // Get the ISO string (in UTC)\n let isoString = date.toISOString();\n\n // Remove the 'Z' at the end which indicates UTC\n isoString = isoString.slice(0, -1);\n\n // Find the position of milliseconds\n const msPosition = isoString.lastIndexOf('.');\n\n // Get the base timestamp with 3 digits of milliseconds and extend with zeros\n let baseTimestamp = isoString;\n\n if (msPosition !== -1) {\n // Add 4 zeros to extend from 3 to 7 digits of precision\n baseTimestamp = isoString.substring(0, msPosition + 4) + '0000';\n }\n\n // Get timezone offset in minutes and convert to hours and minutes\n const offsetMinutes = date.getTimezoneOffset();\n const offsetHours = Math.abs(Math.floor(offsetMinutes / 60));\n const offsetMins = Math.abs(offsetMinutes % 60);\n\n // Format the offset as +HH:MM or -HH:MM\n const offsetSign = offsetMinutes <= 0 ? '+' : '-';\n const offsetString = `${offsetSign}${String(offsetHours).padStart(\n 2,\n '0',\n )}:${String(offsetMins).padStart(2, '0')}`;\n\n return baseTimestamp + offsetString;\n};\n\nexport const createEmptyOrder = (): HiOrder => {\n const formatLocalDateTime = (date: Date = new Date()): string => {\n const pad = (n: number) => String(n).padStart(2, '0');\n\n const yyyy = date.getFullYear();\n const MM = pad(date.getMonth() + 1); // months are 0-based\n const dd = pad(date.getDate());\n\n const HH = pad(date.getHours());\n const mm = pad(date.getMinutes());\n const ss = pad(date.getSeconds());\n\n return `${yyyy}-${MM}-${dd} ${HH}:${mm}:${ss}`;\n };\n\n return {\n id: (window as any).uuidv4\n ? (window as any).uuidv4()\n : '00000000-0000-0000-0000-000000000000',\n state: 'New',\n orderNumber: '736362',\n orderName: 'SC-Order ' + formatLocalDateTime(),\n orderDescription: 'Lorem ipsum dolor sit amet...',\n project: 'Single family house Müller John',\n personInCharge: 'Joe',\n orderDate: getISO8601Date(),\n deliveryDatePlanned: getISO8601Date(\n new Date(Date.now() + 14 * 24 * 60 * 60 * 1000),\n ),\n addresses: [\n {\n type: 'Delivery, Billing',\n street: 'Musterstraße',\n houseNumber: '1',\n postalCode: '12345',\n city: 'Musterstadt',\n country: 'Deutschland',\n },\n ],\n customerName: 'Müller & Co.',\n customerNumber: '462642',\n createdAt: getISO8601Date(),\n changedAt: getISO8601Date(),\n changedBy: 'Selfish',\n items: [] as any[],\n };\n};\n\nconst _addMerchantPositions = async (\n roomlePlanner: RoomlePlanner,\n groupData: any,\n) => {\n const planOverview = await roomlePlanner.getPlanOverview();\n const count: Record<string, number> = {}; // key is id and value is count\n const itemIds = (\n planOverview.objects as unknown as KernelPlanObject[]\n ).reduce((acc: string[], item: any) => {\n if (item.catalogItemId) {\n if (!count[item.catalogItemId]) {\n count[item.catalogItemId] = 0;\n acc.push(item.catalogItemId);\n }\n count[item.catalogItemId]++;\n }\n return acc;\n }, []);\n const items =\n Array.isArray(itemIds) && itemIds.length > 0\n ? await roomlePlanner.getRapiAccess().getItems(itemIds)\n : [];\n const merchantItems = items.filter((item: any) => {\n if (item.manufacturerSKU !== undefined) {\n item.count = count[item.id];\n return true;\n }\n return false;\n });\n if (Array.isArray(merchantItems) && merchantItems.length > 0) {\n if (!groupData.items) {\n groupData.items = [];\n }\n let posNo = groupData.items.reduce((acc: number, item: any) => {\n if (item.items?.length) {\n return acc + item.items.length;\n }\n return acc;\n }, 0);\n merchantItems.forEach((item) => {\n const pos = {} as any;\n pos.type = 'Position';\n pos.name = (++posNo).toString();\n pos.articleNumber = item.manufacturerSKU;\n pos.articleName = item.label;\n pos.catalog = item.catalog;\n pos.quantity = item.count;\n pos.height = item.displayedHeight;\n pos.width = item.displayedWidth;\n pos.depth = item.displayedDepth;\n pos.color = item.basecolor;\n pos.procurementType = 'PTO';\n pos.additionalData = [];\n if (item.perspectiveImage) {\n pos.additionalData.push({\n category: 'ArticleImage',\n downloadUri: item.perspectiveImage,\n type: 'Image',\n });\n }\n groupData.items.push(pos);\n });\n }\n};\n\nexport default class Orders {\n private _roomlePlanner: RoomlePlanner;\n private _glueLogic: GlueLogic;\n\n constructor(roomlePlanner: RoomlePlanner, glueLogic: GlueLogic) {\n this._roomlePlanner = roomlePlanner;\n this._glueLogic = glueLogic;\n }\n\n public async fetchPrice(planId?: string, orderHeader?: HiOrderHeader) {\n let orderData = await this._glueLogic.getGroupDataForOrder({\n roomlePlannerId: planId,\n });\n if (!orderData?.items?.length) {\n return null;\n }\n return await this._fetchOrderDataWithPrice(orderData, orderHeader);\n }\n\n public async placeOrder(\n withPrice: boolean = true,\n orderHeader?: HiOrderHeader,\n ) {\n const planData = await this._roomlePlanner.saveExternalObjectSnapshot();\n if (!planData) {\n console.error('Could not save plan snapshot before placing order');\n return;\n }\n if (!planData.orderData) {\n console.error('No order data found in plan snapshot');\n return;\n }\n\n const priceData =\n withPrice && planData.orderData.items?.length > 0\n ? await this._fetchOrderDataWithPrice(planData.orderData, orderHeader)\n : null;\n let order;\n if (priceData) {\n order = priceData.orderData;\n } else {\n order = this._createOrder(orderHeader);\n order.items.push(planData.orderData as never);\n await _addMerchantPositions(this._roomlePlanner, planData.orderData);\n }\n\n // The first item in the order is the one created from the HI objects in the plan\n if (order.items?.length > 0) {\n this._addAdditionalDataToOrder(order.items[0], planData);\n }\n\n await this._glueLogic.hiCallbacks?.onPlaceOrder?.(order);\n }\n\n private _addAdditionalDataToOrder(\n orderData: HiOrderData,\n planData: ExternalObjectSnapshotSaveResult,\n ) {\n if (!Array.isArray(orderData.additionalData)) {\n orderData.additionalData = [];\n }\n if (planData.perspectiveImageLink) {\n orderData.additionalData.push({\n type: 'Image',\n category: 'OverviewImage',\n downloadUri: planData.perspectiveImageLink,\n });\n }\n if (planData.topImageLink) {\n orderData.additionalData.push({\n type: 'Image',\n category: 'AboveImage',\n downloadUri: planData.topImageLink,\n });\n }\n if (planData.objectGlbLink) {\n orderData.additionalData.push({\n type: 'ThreeD',\n category: 'ThreeDModel',\n downloadUri: planData.objectGlbLink,\n });\n }\n }\n\n private async _fetchOrderDataWithPrice(\n orderData: HiOrderData,\n orderHeader?: HiOrderHeader,\n ): Promise<any> {\n let order = this._createOrder(orderHeader);\n order.items.push(orderData as never);\n return this._glueLogic.hiCallbacks?.onFetchPrice?.(order) ?? null;\n }\n\n private _createOrder(orderHeader?: HiOrderHeader): HiOrder {\n return orderHeader\n ? {\n ...orderHeader,\n items: [],\n }\n : createEmptyOrder();\n }\n}\n","import type { HiCallbacks, HiOrderData } from '#/common/src/hi/hi-types';\nimport type {\n GlueLogic,\n GetGroupDataForOrderOptions,\n LibraryData,\n RoomDesignerRequests,\n ValidContainerModules,\n} from './glue-logic';\nimport type { ExternalObjectGroup } from './external-object-api-callbacks';\nimport type { ExternalModuleInformation } from '../../typings/kernel';\nimport type {\n CheckDropDownResult,\n PosArticle,\n PosGroup,\n PosSaveData,\n} from './model/oc-scripts-domain.model';\nimport type { HiObjectSelectionApi } from './hi-object-selection';\nimport type {\n ExternalObjectGroupLayout,\n ExternalObjectSnapshotSaveResult,\n ExternalRoomInformation,\n LoadExternalObjectOptions,\n PlanRoomGeometryMode,\n} from './external-object-api';\n\nexport class GlueLayerRequestDebugLogging implements GlueLogic {\n private _glueLogic: GlueLogic;\n private _hiCallbacks: HiCallbacks;\n\n constructor(glueLogic: GlueLogic, hiCallbacks: HiCallbacks) {\n this._glueLogic = glueLogic;\n this._hiCallbacks = hiCallbacks;\n }\n\n public get hiCallbacks(): HiCallbacks | null {\n return this._hiCallbacks;\n }\n\n public get hiObjectSelection(): HiObjectSelectionApi {\n return this._glueLogic.hiObjectSelection;\n }\n\n private _logRequest(\n message: string,\n ...args: Array<string | null | undefined>\n ) {\n let messageAndArgs = message;\n if (args) {\n args.forEach((item) => {\n messageAndArgs += ' ' + item;\n });\n }\n this._hiCallbacks.onLogMessage?.('HI REQUEST', messageAndArgs);\n }\n\n public isLibraryLoaded(libraryId: string): boolean {\n return this._glueLogic.isLibraryLoaded(libraryId);\n }\n\n public getLibraryData(libraryId: string): LibraryData | null {\n return this._glueLogic.getLibraryData(libraryId);\n }\n\n public addLibrary(libraryData: LibraryData): Promise<void> {\n this._logRequest('addLibrary', libraryData.libraryId);\n return this._glueLogic.addLibrary(libraryData);\n }\n\n public setPosDataForLoading(posData: PosSaveData | null): Promise<void> {\n this._logRequest('setPosDataForLoading', posData ? 'set' : 'null');\n return this._glueLogic.setPosDataForLoading(posData);\n }\n\n public loadPosData(articleCatalogJson: any, libraryId: string): void {\n this._logRequest('loadPosData', libraryId);\n this._glueLogic.loadPosData(articleCatalogJson, libraryId);\n }\n\n public async mergeGroups(\n targetGroup: ExternalObjectGroup,\n idsOfGroupsMerged: string | string[],\n idOfTargetRootModule: string,\n mergedWithDragging: boolean,\n ): Promise<void> {\n this._logRequest(\n 'mergeGroups',\n targetGroup.groupId,\n JSON.stringify(idsOfGroupsMerged),\n idOfTargetRootModule,\n );\n return this._glueLogic.mergeGroups(\n targetGroup,\n idsOfGroupsMerged,\n idOfTargetRootModule,\n mergedWithDragging,\n );\n }\n\n public deleteRootModule(\n remainingGroup: ExternalObjectGroup,\n rootModuleIdToDelete: string,\n splitOffGroups: ExternalObjectGroup[],\n ): Promise<void> {\n this._logRequest(\n 'deleteRootModule',\n JSON.stringify(remainingGroup),\n rootModuleIdToDelete,\n JSON.stringify(splitOffGroups),\n );\n return this._glueLogic.deleteRootModule(\n remainingGroup,\n rootModuleIdToDelete,\n splitOffGroups,\n );\n }\n\n public splitRootModuleFromGroup(\n splitGroup: ExternalObjectGroup,\n newGroupedRootModules: ExternalObjectGroup[],\n ): Promise<void> {\n this._logRequest(\n 'splitRootModuleFromGroup',\n JSON.stringify(splitGroup),\n JSON.stringify(newGroupedRootModules),\n );\n return this._glueLogic.splitRootModuleFromGroup(\n splitGroup,\n newGroupedRootModules,\n );\n }\n\n public async duplicateGroup(\n duplicatedGroup: ExternalObjectGroup,\n ): Promise<void> {\n this._logRequest('duplicateGroup', duplicatedGroup.groupId);\n return this._glueLogic.duplicateGroup(duplicatedGroup);\n }\n\n public adjustGroup(groupId: string): Promise<void> {\n this._logRequest('adjustGroup', groupId);\n return this._glueLogic.adjustGroup(groupId);\n }\n\n public modifyAttribute(\n groupId: string,\n moduleIdObjects: ExternalModuleInformation[],\n attributeName: string,\n value: string,\n ): Promise<void> {\n this._logRequest(\n 'modifyAttribute',\n groupId,\n JSON.stringify(moduleIdObjects),\n attributeName,\n value,\n );\n return this._glueLogic.modifyAttribute(\n groupId,\n moduleIdObjects,\n attributeName,\n value,\n );\n }\n\n public updateAttribute(\n rootModuleId: string,\n moduleId: string | null,\n attributeId: string,\n attributeValue: string | boolean,\n ): Promise<void> {\n this._logRequest(\n 'updateAttribute',\n rootModuleId,\n moduleId,\n attributeId,\n attributeValue.toString(),\n );\n return this._glueLogic.updateAttribute(\n rootModuleId,\n moduleId,\n attributeId,\n attributeValue,\n );\n }\n\n public getVerifiedAttributeOptions(\n moduleId: string,\n attributeIds?: string | string[],\n ): Promise<Record<string, CheckDropDownResult> | undefined> {\n this._logRequest(\n 'getVerifiedAttributeOptions',\n moduleId,\n attributeIds ? JSON.stringify(attributeIds) : '[]',\n );\n return this._glueLogic.getVerifiedAttributeOptions(moduleId, attributeIds);\n }\n\n public getVerifiedGroupAttributeOptions(\n groupId: string,\n attributeIds?: string | string[],\n ): Promise<Record<string, CheckDropDownResult> | undefined> {\n this._logRequest(\n 'getVerifiedGroupAttributeOptions',\n groupId,\n attributeIds ? JSON.stringify(attributeIds) : '[]',\n );\n return this._glueLogic.getVerifiedGroupAttributeOptions(\n groupId,\n attributeIds,\n );\n }\n\n public updateProperty(\n rootModuleId?: string,\n propertyName?: string,\n propertyValue?: string | number | boolean,\n ): void {\n this._logRequest(\n 'updateProperty',\n rootModuleId ?? 'undefined',\n propertyName ?? 'undefined',\n propertyValue?.toString() ?? 'undefined',\n );\n this._glueLogic.updateProperty(rootModuleId, propertyName, propertyValue);\n }\n\n public findValidSubArticles(posGroupIds: string[] | string): PosArticle[] {\n this._logRequest(\n 'findValidSubArticles',\n Array.isArray(posGroupIds) ? JSON.stringify(posGroupIds) : posGroupIds,\n );\n return this._glueLogic.findValidSubArticles(posGroupIds);\n }\n\n public getValidContainerModulesForSubArticle(\n posGroupIds: string[] | string,\n subArticleId: string,\n ): ValidContainerModules[] {\n this._logRequest(\n 'getValidContainerModulesForSubArticle',\n Array.isArray(posGroupIds) ? JSON.stringify(posGroupIds) : posGroupIds,\n subArticleId,\n );\n return this._glueLogic.getValidContainerModulesForSubArticle(\n posGroupIds,\n subArticleId,\n );\n }\n\n public addSubArticle(\n articleId: string,\n rootModuleId: string,\n parentModuleId: string,\n insertPosition?: number[],\n ): void {\n this._logRequest(\n 'addSubArticle',\n articleId,\n rootModuleId,\n parentModuleId,\n insertPosition ? JSON.stringify(insertPosition) : 'undefined',\n );\n return this._glueLogic.addSubArticle(\n articleId,\n rootModuleId,\n parentModuleId,\n insertPosition,\n );\n }\n\n public deleteSubArticles(\n groupId: string,\n subModuleIds: string[] | string,\n ): Promise<void> {\n this._logRequest(\n 'deleteSubArticles',\n groupId,\n Array.isArray(subModuleIds) ? JSON.stringify(subModuleIds) : subModuleIds,\n );\n return this._glueLogic.deleteSubArticles(groupId, subModuleIds);\n }\n\n public swapRootModule(\n groupId: string,\n rootModuleId: string,\n articleId: string,\n ): Promise<void> {\n this._logRequest('swapRootModule', groupId, rootModuleId, articleId);\n return this._glueLogic.swapRootModule(groupId, rootModuleId, articleId);\n }\n\n public arrangeRootModulesOfGroup(\n changedGroup: ExternalObjectGroup,\n ): Promise<void> {\n this._logRequest('arrangeRootModulesOfGroup', JSON.stringify(changedGroup));\n return this._glueLogic.arrangeRootModulesOfGroup(changedGroup);\n }\n\n public changedGroupPlanningSituation(\n changedGroup: ExternalObjectGroup,\n objectPositionChanged: boolean,\n ): Promise<void> {\n this._logRequest(\n 'changedGroupPlanningSituation',\n changedGroup.groupId,\n objectPositionChanged.toString(),\n );\n return this._glueLogic.changedGroupPlanningSituation(\n changedGroup,\n objectPositionChanged,\n );\n }\n\n public changedGroupFromHistory(\n posDataJson: PosGroup,\n reloadGroup: boolean,\n ): void {\n this._logRequest(\n 'changedGroupFromHistory',\n posDataJson.id,\n reloadGroup.toString(),\n );\n this._glueLogic.changedGroupFromHistory(posDataJson, reloadGroup);\n }\n\n public loadedGroup(posDataJson: PosGroup): Promise<void> {\n this._logRequest('loadedGroup', posDataJson.id);\n return this._glueLogic.loadedGroup(posDataJson);\n }\n\n public groupsCompletelyLoaded(): void {\n this._logRequest('groupsCompletelyLoaded');\n this._glueLogic.groupsCompletelyLoaded();\n }\n\n public removedGroup(groupId: string): void {\n this._logRequest('removedGroup', groupId);\n this._glueLogic.removedGroup(groupId);\n }\n\n public openCloseGroup(groupId: string): void {\n this._logRequest('openCloseGroup', groupId);\n this._glueLogic.openCloseGroup(groupId);\n }\n\n public getSaveDataGroups(): Promise<PosGroup[] | null> {\n this._logRequest('getSaveDataGroups');\n return this._glueLogic.getSaveDataGroups();\n }\n\n public getSubArticleId(id: string): string | undefined {\n this._logRequest('getSubArticleId', id);\n return this._glueLogic.getSubArticleId(id);\n }\n\n public async newPosDataFromId(id: string): Promise<PosGroup | undefined> {\n this._logRequest('newPosDataFromId', id);\n return this._glueLogic.newPosDataFromId(id);\n }\n\n public async newPosDataFromArticleLayout(\n articleLayoutJson: ExternalObjectGroupLayout,\n layoutType: string,\n posArticles?: PosArticle[],\n ): Promise<PosGroup | undefined> {\n this._logRequest(\n 'newPosDataFromArticleLayout',\n layoutType,\n JSON.stringify(articleLayoutJson),\n );\n return this._glueLogic.newPosDataFromArticleLayout(\n articleLayoutJson,\n layoutType,\n posArticles,\n );\n }\n\n public async newPosDataFromGroup(posDataJson: PosGroup): Promise<PosGroup> {\n this._logRequest('newPosDataFromId', JSON.stringify(posDataJson));\n return this._glueLogic.newPosDataFromGroup(posDataJson);\n }\n\n public getGroupDataForOrder(\n options: GetGroupDataForOrderOptions,\n ): Promise<HiOrderData | null> {\n this._logRequest(\n 'getGroupDataForOrder',\n options.roomlePlannerId,\n options.mode,\n );\n return this._glueLogic.getGroupDataForOrder(options);\n }\n\n public getMaterialUrl(\n materialId: string,\n groupOrModuleId?: string,\n ): string | null {\n this._logRequest('getMaterialUrl', materialId, groupOrModuleId);\n return this._glueLogic.getMaterialUrl(materialId, groupOrModuleId);\n }\n}\n\nexport class GlueLayerResponseDebugLogging implements RoomDesignerRequests {\n private _roomDesignerRequests: RoomDesignerRequests;\n private _hiCallbacks: HiCallbacks;\n\n constructor(\n roomDesignerRequests: RoomDesignerRequests,\n hiCallbacks: HiCallbacks,\n ) {\n this._roomDesignerRequests = roomDesignerRequests;\n this._hiCallbacks = hiCallbacks;\n }\n\n private _logResponse(message: string, ...args: Array<string | null>) {\n let messageAndArgs = message;\n if (args) {\n args.forEach((item) => {\n messageAndArgs += ' ' + item;\n });\n }\n this._hiCallbacks.onLogMessage?.('HI RESPONSE', messageAndArgs);\n }\n\n public loadMasterData(masterData: any): void {\n this._logResponse('loadMasterData');\n this._roomDesignerRequests.loadMasterData(masterData);\n }\n\n public async loadPosGroups(\n posDataJson: PosGroup | PosGroup[],\n options: LoadExternalObjectOptions,\n ): Promise<void> {\n const groupIds = Array.isArray(posDataJson)\n ? posDataJson.map((group) => group.id).join(',')\n : posDataJson.id;\n this._logResponse(\n 'loadPosGroups',\n groupIds,\n options.reason ?? 'undefined',\n options.findFreeSpaceInPlan?.toString() ?? 'false',\n options.moduleIdMap ? JSON.stringify(options.moduleIdMap) : '[]',\n options.mergedGroups ? JSON.stringify(options.mergedGroups) : '[]',\n );\n return this._roomDesignerRequests.loadPosGroups(posDataJson, options);\n }\n\n public completelyLoaded(): void {\n this._logResponse('completelyLoaded');\n this._roomDesignerRequests.completelyLoaded();\n }\n\n public async selectGroup(groupId: string): Promise<void> {\n this._logResponse('selectGroup', groupId);\n return this._roomDesignerRequests.selectGroup(groupId);\n }\n\n public async selectRoot(rootModuleId: string): Promise<void> {\n this._logResponse('selectRoot', rootModuleId);\n return this._roomDesignerRequests.selectRoot(rootModuleId);\n }\n\n public async selectModule(\n rootModuleId: string,\n subModuleId: string,\n ): Promise<void> {\n this._logResponse('selectModule', rootModuleId, subModuleId);\n return this._roomDesignerRequests.selectModule(rootModuleId, subModuleId);\n }\n\n public openCloseGroup(\n groupOrRootModuleId: string,\n subModuleId: string | null,\n open: boolean,\n animate: boolean,\n ) {\n this._logResponse(\n 'openCloseGroup',\n groupOrRootModuleId,\n subModuleId,\n open.toString(),\n animate.toString(),\n );\n this._roomDesignerRequests.openCloseGroup(\n groupOrRootModuleId,\n subModuleId,\n open,\n animate,\n );\n return Promise.resolve();\n }\n\n public deleteGroup(groupId: string): void {\n this._logResponse('deleteGroup', groupId);\n return this._roomDesignerRequests.deleteGroup(groupId);\n }\n\n public deleteRootModule(rootModuleId: string): void {\n this._logResponse('deleteRootModule', rootModuleId);\n return this._roomDesignerRequests.deleteRootModule(rootModuleId);\n }\n\n public getPosDataOfAllGroups(): Promise<PosGroup[]> {\n this._logResponse('getPosDataOfAllGroups');\n return this._roomDesignerRequests.getPosDataOfAllGroups();\n }\n\n public getRoomInformation(\n mode?: PlanRoomGeometryMode,\n ): Promise<ExternalRoomInformation> {\n this._logResponse('getRoomInformation', mode ?? null);\n return this._roomDesignerRequests.getRoomInformation(mode);\n }\n\n public saveExternalObjectSnapshot(): Promise<ExternalObjectSnapshotSaveResult | null> {\n this._logResponse('saveExternalObjectSnapshot');\n return this._roomDesignerRequests.saveExternalObjectSnapshot();\n }\n}\n","import { RoomDesignerApi } from './api';\nimport type { GlueLogic, HiAttributeOptionsResult } from './glue-logic';\nimport { GlueLogicImplementation, type LibraryData } from './glue-logic';\nimport { type HomagIntelligenceInitData } from './hi-api-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport type {\n MasterData,\n PosArticle,\n PosContour,\n PosGroup,\n PosModuleAttribute,\n PosModuleData,\n PosRoom,\n} from './model/oc-scripts-domain.model';\nimport { initCallbacks } from './callbacks';\nimport { type RoomlePlanner } from '../../planner-core/src/roomle-planner';\nimport Orders from './orders';\nimport type {\n ExternalConfiguration,\n ExternalItem,\n} from '../../typings/external-objects';\nimport type { HiTagCatalogCallbacks } from './hi-tag-catalog-callbacks';\nimport type { HiCallbacks, HiOrderHeader } from '#/common/src/hi/hi-types';\nimport {\n GlueLayerRequestDebugLogging,\n GlueLayerResponseDebugLogging,\n} from './debug-logging';\nimport type { ExternalObjectValidContainerModules } from './external-object-api-callbacks';\n\ndeclare global {\n interface Window {\n uuidv4: () => string;\n }\n}\n\nconsole.warn('Homag Intelligence plugin is loaded.');\n\n// export const HOMAG_INTELLIGENCE_ENDPOINT = 'http://localhost:8080/proxy_request?url=';\n// export const HOMAG_INTELLIGENCE_ENDPOINT =\n// 'https://europe-west3-rml-showcases.cloudfunctions.net/proxy_request?url=';\n\nexport type ExternalObjects = Map<\n string,\n { id: string; label: string; items: any[] }\n>;\nexport type ExternalItems = Map<string, ExternalItem>;\nexport type ExternalConfigurations = Map<string, ExternalConfiguration>;\n\n/**\n * Serialization lock for _initCalcScript.\n * Concurrent calls share `window.exports`, so they must run one at a time.\n */\nlet calcScriptLock: Promise<void> = Promise.resolve();\n\nconst acquireCalcScriptLock = (): Promise<() => void> => {\n let release: () => void = () => {};\n const next = new Promise<void>((resolve) => {\n release = resolve;\n });\n const prev = calcScriptLock;\n calcScriptLock = next;\n return prev.then(() => release);\n};\n\nexport class HomagIntelligence {\n private _roomlePlanner: RoomlePlanner;\n private _api: RoomDesignerApi;\n private _glueLogic: GlueLogic;\n private _orders: Orders;\n private _hiCallbacks: HiCallbacks;\n\n constructor(\n roomlePlanner: RoomlePlanner,\n hiOptions: HomagIntelligenceInitData,\n hiCallbacks: HiCallbacks,\n ) {\n if (!window.uuidv4) {\n window.uuidv4 = uuidv4; // Ensure uuidv4 is available globally\n }\n\n this._roomlePlanner = roomlePlanner;\n this._roomlePlanner.setHomagIntelligence(this);\n this._hiCallbacks = hiCallbacks;\n this._api = new RoomDesignerApi(this._roomlePlanner);\n\n if (hiOptions?.debugLogging) {\n const api = new GlueLayerResponseDebugLogging(this._api, hiCallbacks);\n const glueLogic = new GlueLogicImplementation(api, hiCallbacks);\n this._glueLogic = new GlueLayerRequestDebugLogging(\n glueLogic,\n hiCallbacks,\n );\n } else {\n this._glueLogic = new GlueLogicImplementation(this._api, hiCallbacks);\n }\n initCallbacks(this._roomlePlanner, this._glueLogic);\n this._orders = new Orders(roomlePlanner, this._glueLogic);\n }\n\n /**\n * Loads previously saved PosGroup data via hiCallbacks.\n * Must be called after construction to restore saved state.\n */\n public async loadSavedPosData(): Promise<void> {\n const savedPosGroupData =\n (await this._hiCallbacks.onGetSavedPosGroupData?.()) ?? null;\n await this._glueLogic.setPosDataForLoading(savedPosGroupData);\n }\n\n public async loadLibrary(libraryId: string) {\n const libraryData = await this._loadLibraryData(libraryId);\n await this._glueLogic.addLibrary(libraryData);\n }\n\n public async loadCatalog(\n libraryId: string,\n articles: any,\n catalogCallbacks: HiTagCatalogCallbacks,\n ) {\n catalogCallbacks?.setEmulator(this._glueLogic);\n this._glueLogic.loadPosData(await articles, libraryId);\n }\n\n private async _loadLibraryData(libraryId: string): Promise<LibraryData> {\n if (this._glueLogic.isLibraryLoaded(libraryId)) {\n const data = this._glueLogic.getLibraryData(libraryId);\n if (data !== null) {\n return data;\n }\n }\n const hiCallbacks = this._glueLogic.hiCallbacks;\n if (hiCallbacks === null) {\n throw new Error('HiCallbacks not initialized');\n }\n const { masterData, libraryExports } = await this._requestHiLibrary(\n libraryId,\n hiCallbacks,\n );\n this._loadMasterData(masterData);\n const libraryData: LibraryData = {\n libraryId,\n masterData,\n posGroupVersion: 1,\n initializePosGroup: (posGroup: PosGroup): void => {\n if (!libraryExports.initializePosGroup) {\n return;\n }\n libraryExports.initializePosGroup(posGroup);\n },\n calculateGroup: (groupData: PosGroup): PosGroup => {\n return libraryExports.calc(groupData);\n },\n getOrderData: (\n groupData: PosGroup[],\n roomlePlannerId?: string,\n rooms?: PosContour[],\n ): any => {\n return libraryExports.getOrderData(groupData, roomlePlannerId, rooms);\n },\n getAttributesDropDownValues: async (\n module: PosModuleData,\n attributeIds?: string | string[],\n ): Promise<Record<string, HiAttributeOptionsResult>> => {\n const ids = attributeIds\n ? Array.isArray(attributeIds)\n ? attributeIds\n : [attributeIds]\n : (module.attributes ?? []).map((attribute) => attribute.id);\n const attributeOptions: Record<string, any[]> = {};\n for (const attributeId of ids) {\n try {\n const attributeDropDownApi =\n libraryExports.getAttributesDropDownValuesV2 ??\n libraryExports.getAttributesDropDownValues;\n const options = await attributeDropDownApi(module, attributeId);\n attributeOptions[attributeId] = options;\n } catch (error) {\n console.error(error);\n attributeOptions[attributeId] = [];\n }\n }\n return attributeOptions;\n },\n solveModuleAttributeConflict: (\n module: PosModuleData,\n attributeName: string,\n value: string | number | boolean,\n ): PosModuleAttribute[] | undefined => {\n if (!libraryExports.solveModuleAttributeConflict) {\n return undefined;\n }\n const results = libraryExports.solveModuleAttributeConflict(\n module,\n attributeName,\n value,\n );\n return results;\n },\n groupAdjust: (\n posGroup: PosGroup,\n articles: PosArticle[],\n roomInformation: PosRoom,\n ): PosGroup => {\n if (!libraryExports.groupAdjust) {\n return posGroup;\n }\n const results = libraryExports.groupAdjust(\n posGroup,\n articles,\n roomInformation,\n );\n return results;\n },\n getValidSubArticles(\n calculatedPosGroup: PosGroup,\n articles: PosArticle[],\n masterData: MasterData,\n ): PosArticle[] {\n if (!libraryExports.getValidSubArticles) {\n return [];\n }\n const results = libraryExports.getValidSubArticles(\n calculatedPosGroup,\n articles,\n masterData,\n );\n return results;\n },\n getValidContainerModulesForSubArticle(\n calculatedPosGroup: PosGroup,\n subArticle: PosArticle,\n masterData: MasterData,\n ): ExternalObjectValidContainerModules[] {\n if (!libraryExports.getValidContainerModulesForSubArticle) {\n return [];\n }\n const results = libraryExports.getValidContainerModulesForSubArticle(\n calculatedPosGroup,\n subArticle,\n masterData,\n );\n return results;\n },\n addSubArticle(\n targetPosGroup: PosGroup,\n article: PosArticle,\n rootId: string,\n parentModuleId: string,\n insertPosition?: number[],\n masterData?: MasterData,\n ): PosGroup {\n if (!libraryExports.addSubArticle) {\n return targetPosGroup;\n }\n const results = libraryExports.addSubArticle(\n targetPosGroup,\n article,\n rootId,\n parentModuleId,\n insertPosition,\n masterData,\n );\n return results;\n },\n deleteSubArticle(\n targetPosGroup: PosGroup,\n rootId: string,\n articleModuleId: string,\n ): PosGroup {\n if (!libraryExports.deleteSubArticle) {\n return targetPosGroup;\n }\n const results = libraryExports.deleteSubArticle(\n targetPosGroup,\n rootId,\n articleModuleId,\n );\n return results;\n },\n };\n return libraryData;\n }\n\n public async _requestHiLibrary(\n libraryId: string,\n hiCallbacks: HiCallbacks,\n ): Promise<{\n masterData: MasterData;\n libraryExports: any;\n }> {\n const [masterData, calcScriptString] = await Promise.all([\n hiCallbacks.onLoadMasterData(libraryId),\n hiCallbacks.onLoadJavascript(libraryId),\n ]);\n const libraryExports = await this._initCalcScript(calcScriptString);\n return {\n masterData,\n libraryExports,\n };\n }\n\n private _loadMasterData(masterData: MasterData): void {\n return this._api.loadMasterData(masterData);\n }\n\n private async _initCalcScript(scriptText: string): Promise<any> {\n // Acquire the lock so concurrent _initCalcScript calls don't corrupt\n // each other's window.exports (which is a shared global).\n const release = await acquireCalcScriptLock();\n let blobUrl: string | undefined;\n try {\n window.exports = {};\n const blob = new Blob([scriptText], { type: 'text/javascript' });\n blobUrl = URL.createObjectURL(blob);\n await import(blobUrl);\n return window.exports;\n } catch (e) {\n console.error(e);\n throw new Error('Failed to load calc.js!');\n } finally {\n if (blobUrl) {\n URL.revokeObjectURL(blobUrl);\n }\n release();\n }\n }\n\n public getGlueLogic(): GlueLogic {\n return this._glueLogic;\n }\n\n public async placeOrder(\n withPrice: boolean = true,\n orderHeader?: HiOrderHeader,\n ) {\n await this._orders.placeOrder(withPrice, orderHeader);\n }\n\n public async fetchPrice(planId?: string, orderHeader?: HiOrderHeader) {\n return this._orders.fetchPrice(planId, orderHeader);\n }\n}\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { A as e, D as t, M as n, U as r, c as i, l as a, tt as o } from "./threejs-utils-mqRHdm-p.mjs";
1
+ import { A as e, D as t, M as n, U as r, c as i, l as a, tt as o } from "./threejs-utils-C9zED_Tu.mjs";
2
2
  import { $r as s, An as c, cn as l, f as u, oi as d, p as f, w as p } from "./three.core-0KaTx8dm.mjs";
3
3
  import { n as m, r as h, t as g } from "./decorate-CX1ZGuFY.mjs";
4
4
  import { V as _ } from "./common-utils-6T8eGlhX.mjs";
5
- import { $ as v, H as y, I as b, L as x, T as S, V as C, X as w, Y as T, _ as E, ct as D, g as O, n as k, nt as A, ot as j, p as M, rt as N, st as P, tt as F, v as I } from "./roomle-sdk-BdEmEYZg.mjs";
6
- import { t as L } from "./script-loader-BTy3OZVv.mjs";
5
+ import { $ as v, H as y, I as b, L as x, T as S, V as C, X as w, Y as T, _ as E, ct as D, g as O, n as k, nt as A, ot as j, p as M, rt as N, st as P, tt as F, v as I } from "./roomle-sdk-FrWkv2ZJ.mjs";
6
+ import { t as L } from "./script-loader-YLmjONN5.mjs";
7
7
  //#region packages/common-core/src/cameracontrol/material-viewer-camera-behaviour.ts
8
8
  var R = class extends M {
9
9
  get cameraControl() {
@@ -135,7 +135,7 @@ var R = class extends M {
135
135
  }
136
136
  async changeFloorMaterialById(e) {
137
137
  let t = await this._rapiAccess.getMaterial(e);
138
- return (!this._environment || !(this._environment instanceof E)) && (this._environment = new E(this._scene, this._environment, !this._initData.featureFlags.webGpu)), new Promise((e, n) => {
138
+ return (!this._environment || !(this._environment instanceof E)) && (this._environment = new E(this._scene, this._environment, !this._initData.webGpu)), new Promise((e, n) => {
139
139
  this._environment.changeFloorMaterial(t, this._maxAnisotropy).then(() => {
140
140
  this._requestRender(), e();
141
141
  }, n);
@@ -294,4 +294,4 @@ var U = class extends w {
294
294
  //#endregion
295
295
  export { G as MaterialViewer };
296
296
 
297
- //# sourceMappingURL=material-viewer-DShIT0xY.mjs.map
297
+ //# sourceMappingURL=material-viewer-DjGxE0tY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-viewer-DjGxE0tY.mjs","names":[],"sources":["../../packages/common-core/src/cameracontrol/material-viewer-camera-behaviour.ts","../../packages/material-viewer/src/webgl/material-viewer-scene-manager.ts","../../packages/material-viewer/src/roomle-material-viewer.ts","../../packages/material-viewer/src/roomle-material-viewer-ui-callback.ts","../../packages/material-viewer/src/utils/injectables.ts","../../packages/material-viewer/src/material-viewer.ts"],"sourcesContent":["import CameraBehaviour from './camera-behaviour';\nimport type AdjustableCameraControl3D from '../../../glb-viewer-core/src/camera-control/adjustable-camera-control-3d';\n\nexport default class MaterialViewerCameraBehaviour extends CameraBehaviour {\n public get cameraControl(): AdjustableCameraControl3D {\n return this._cameraControl as AdjustableCameraControl3D;\n }\n}\n","import SceneManager from '../../../common-core/src/webgl/scene-manager';\nimport type { GenericGUIParamFolder } from '../../../common-core/src/webgl/gui-types';\nimport type { RoomleWebGPURenderer } from '../../../common-core/src/webgpu/roomle-webgpu-renderer';\nimport type { CanvasOffset } from '../../../common-core/src/common-interfaces';\nimport type InputManager from '../../../common-core/src/input/input-manager';\nimport inject from '../../../common-core/src/di/inject';\nimport CameraControl3D from '../../../common-core/src/cameracontrol/camera-control-3d';\nimport type {\n RapiId,\n RapiMaterial,\n RapiMaterialShading,\n RapiTexture,\n} from '../../../typings/rapi-types';\nimport { RAPI_TEXTURE_TYPE } from '../../../typings/rapi-types';\nimport {\n addExistingTexture,\n addTexture,\n getWebGLGUI,\n getMaterialShading,\n setMaterial,\n getMaxTextures,\n} from '../../../common-core/src/utils/threejs-utils';\nimport { CAMERA_TYPE } from '../../../common-core/src/cameracontrol/camera-type';\nimport type ConfiguratorMeshGenerator from '../../../configurator-core/src/webgl/configurator-mesh-generator';\nimport type RoomleMaterialViewerUiCallback from '../roomle-material-viewer-ui-callback';\nimport BackgroundEnvironment from '../../../common-core/src/environment/background-environment';\nimport FloorEnvironment from '../../../configurator-core/src/webgl/environment/floor-environment';\nimport { type RapiAccess } from '../../../common-core/src/rapi-access';\nimport DynamicLightSettingLoader, {\n PREDEFINED_LIGHTSETTING,\n} from '../../../common-core/src/lightsetting/dynamic-light-setting-loader';\nimport { CANVAS_ID } from '../../../common-core/src/utils/dom-helper';\nimport type { Enumify } from '#/common/src/utils/types';\nimport type { MeshPhysicalMaterial } from 'three';\nimport {\n Box3,\n BoxGeometry,\n Color,\n DoubleSide,\n FrontSide,\n Mesh,\n PlaneGeometry,\n SphereGeometry,\n Texture,\n} from 'three';\nimport MaterialCreator from '../../../common-core/src/utils/material-creator';\nimport MaterialViewerCameraBehaviour from '../../../common-core/src/cameracontrol/material-viewer-camera-behaviour';\n\nexport const enum GEOMETRY {\n CUBE = 'cube',\n SPHERE = 'sphere',\n PLANE_VERTICAL = 'plane_vertical',\n PLANE_HORIZONTAL = 'plane_horizontal',\n}\n\nconst SIZE = { x: 1, y: 1, z: 1 };\nexport default class MaterialViewerSceneManager extends SceneManager {\n @inject\n private _inputManager: InputManager;\n\n @inject\n private _configuratorMeshGenerator: ConfiguratorMeshGenerator;\n\n @inject\n private _roomleMaterialViewerUiCallback: RoomleMaterialViewerUiCallback;\n\n @inject\n private _rapiAccess: RapiAccess;\n\n private _gui: GenericGUIParamFolder | null;\n private _guiGeometryFolder: GenericGUIParamFolder | undefined;\n private _guiMaterialFolder: GenericGUIParamFolder | undefined;\n private _mesh: Mesh;\n private _material: MeshPhysicalMaterial;\n private _sceneParams = {\n type: GEOMETRY.CUBE,\n };\n private _materialParams = {\n color: '#ffffff',\n metallic: 0.5,\n alpha: 0,\n alphaCutoff: 0,\n doubleSided: false,\n };\n\n constructor(creator: string, offset: CanvasOffset) {\n super(creator, offset, CANVAS_ID.RMV, CAMERA_TYPE.CAMERA_3D);\n\n // Use lazy initialization for renderer-dependent settings\n this._initializeRendererSettings();\n\n this._initScene();\n }\n\n // If renderer is not ready yet, will retry on next tick.\n // This is necessary for dynamic WebGPU renderer imports.\n private _initializeRendererSettings(): void {\n if (!this._renderer) {\n // Retry on next tick if renderer not ready\n setTimeout(() => this._initializeRendererSettings(), 0);\n return;\n }\n\n const maxTextures = getMaxTextures(this._renderer);\n if (maxTextures > 8) {\n const lightSource =\n DynamicLightSettingLoader.createDynamicLightSettingSource(\n null,\n PREDEFINED_LIGHTSETTING.CAMERA,\n );\n if (lightSource) {\n this.loadDynamicLightSetting(lightSource);\n }\n }\n }\n\n private _initScene() {\n const geometry = new BoxGeometry(SIZE.x, SIZE.y, SIZE.z, 100, 100, 100);\n const meshPhysicalMaterial = MaterialCreator.createMeshPhysicalMaterial({\n color: this._initData.colors.PRIMARY,\n });\n this._setMaterial(meshPhysicalMaterial);\n this._mesh = new Mesh(geometry, this._material);\n this._mesh.castShadow = true;\n this._mesh.position.setY(SIZE.y / 2);\n this._scene.add(this._mesh);\n\n const { initialFloorMaterial } = this._initData;\n\n if (initialFloorMaterial) {\n this.changeFloorMaterialById(initialFloorMaterial);\n } else {\n this._environment = new BackgroundEnvironment(\n this._scene,\n undefined,\n new Color(0xffffff),\n );\n }\n\n if (this.cameraBehaviour.cameraControl instanceof CameraControl3D) {\n const boundingBox = new Box3();\n boundingBox.setFromObject(this._mesh);\n console.trace('reset camera');\n this.cameraBehaviour.cameraControl.updateAndReset(boundingBox);\n }\n\n void this.showGUI();\n }\n\n public loadMaterialId(materialId: RapiId): Promise<void> {\n return new Promise<void>((resolve) => {\n this._configuratorMeshGenerator\n .loadMaterial(materialId, SIZE.x * 1000, SIZE.y * 1000)\n .then((material) => {\n this._setMaterial(material as MeshPhysicalMaterial);\n this._mesh.material = this._material;\n this._updateGUI();\n this._requestRender();\n resolve();\n });\n });\n }\n\n public loadMaterial(material: RapiMaterial): Promise<void> {\n return new Promise<void>((resolve) => {\n // eslint-disable-next-line\n if (!material.__rapi_path__) {\n // eslint-disable-next-line\n material.__rapi_path__ = 'materials';\n }\n this._mesh.material = this._material;\n this._configuratorMeshGenerator\n .loadTextures(material, this._material, SIZE.x * 100, SIZE.y * 100)\n .then(() => {\n this._updateGUI();\n this._requestRender();\n });\n resolve();\n });\n }\n\n public loadMaterialShading(\n materialShading: RapiMaterialShading,\n ): Promise<void> {\n return new Promise<void>((resolve) => {\n let material = { shading: materialShading };\n this._setMaterial(setMaterial(this._material, material as RapiMaterial));\n this._mesh.material = this._material;\n this._updateGUI();\n this._requestRender();\n resolve();\n });\n }\n\n private _setMaterial(material: MeshPhysicalMaterial) {\n this._material = material;\n this._materialParams.alpha = material.opacity;\n this._materialParams.alphaCutoff = material.alphaTest;\n this._materialParams.color = '#' + material.color.getHexString();\n this._materialParams.doubleSided = material.side === DoubleSide;\n this._materialParams.metallic =\n material.metalness === 1 ? 1 : material.reflectivity;\n }\n\n public getMaterialShading(version: number = 1): RapiMaterialShading {\n return getMaterialShading(this._material, version);\n }\n\n protected createCameraControl(\n _mode: Enumify<typeof CAMERA_TYPE>,\n _offset: CanvasOffset,\n ) {\n this._changeCameraBehaviour(\n new MaterialViewerCameraBehaviour(\n new CameraControl3D(this._creator_, this._getInputManager(), undefined),\n this._cameraBehaviourState,\n ),\n );\n }\n\n protected _getInputManager(): InputManager {\n return this._inputManager;\n }\n\n public sceneChanged(): void {\n //override when needed\n }\n\n public getBounds(): Box3 | null {\n if (!this._mesh) {\n return null;\n }\n return new Box3().setFromObject(this._mesh);\n }\n\n getGeometryBounds(): Box3 | null {\n return null;\n }\n\n protected initializeWebGLGUI() {\n this._gui = getWebGLGUI();\n this._updateGUI();\n }\n\n protected override initializeWebGPUGUI(\n roomleWebGPURenderer: RoomleWebGPURenderer,\n ): void {\n super.initializeWebGPUGUI(roomleWebGPURenderer);\n this._gui =\n roomleWebGPURenderer.getOrCreateGUIParameters('Material Viewer');\n this._updateGUI();\n }\n\n private _updateGUI() {\n const gui = this._gui;\n if (!gui) {\n return;\n }\n if (!this._guiGeometryFolder) {\n this._guiGeometryFolder = gui.addFolder('Geometry');\n this._guiGeometryFolder\n .add(this._sceneParams, 'type', {\n Cube: GEOMETRY.CUBE,\n Sphere: GEOMETRY.SPHERE,\n PlaneVertical: GEOMETRY.PLANE_VERTICAL,\n PlaneHorizontal: GEOMETRY.PLANE_HORIZONTAL,\n })\n .onChange((type: number) => {\n console.log(type);\n this._setGeometry();\n });\n }\n if (this._material) {\n if (!this._guiMaterialFolder) {\n this._guiMaterialFolder = gui.addFolder('Material');\n this._guiMaterialFolder\n .addColor(this._materialParams, 'color')\n .onChange((color: string) => {\n this._material.color = new Color(color);\n this._shadingChanged();\n });\n this._guiMaterialFolder\n .add(this._materialParams, 'metallic', 0, 1, 0.01)\n .onChange((metallic: number) => {\n this._material.metalness = metallic === 1 ? 1 : 0.5;\n this._material.reflectivity = metallic || 0.5;\n this._shadingChanged();\n });\n this._guiMaterialFolder\n .add(this._material, 'roughness', 0, 1, 0.01)\n .onChange((_roughness: number) => {\n this._shadingChanged();\n });\n this._guiMaterialFolder\n .add(this._material, 'transmission', 0, 1, 0.01)\n .onChange((transmission: number) => {\n this._material.transmission = transmission;\n if (transmission > 0) {\n this._material.opacity = 1;\n this._material.alphaTest = 0.5;\n this._material.depthWrite = true;\n this._material.metalness = 0;\n }\n this._mesh.castShadow = !this._material.transparent;\n this._shadingChanged();\n });\n this._guiMaterialFolder\n .add(this._materialParams, 'alpha', 0, 1, 0.01)\n .onChange((alpha: number) => {\n this._material.transparent = alpha < 1;\n this._material.opacity = alpha;\n this._material.depthWrite = alpha >= 1;\n this._mesh.castShadow = !this._material.transparent;\n this._shadingChanged();\n });\n this._guiMaterialFolder\n .add(this._materialParams, 'alphaCutoff', 0, 1, 0.01)\n .onChange((alphaCutoff: number) => {\n if (alphaCutoff) {\n this._material.alphaTest = alphaCutoff;\n } else {\n this._material.alphaTest = 0;\n }\n this._shadingChanged();\n });\n this._guiMaterialFolder\n .add(this._materialParams, 'doubleSided')\n .onChange((doubleSided: boolean) => {\n if (doubleSided) {\n this._material.side = DoubleSide;\n } else {\n this._material.side = FrontSide;\n }\n this._shadingChanged();\n });\n }\n }\n }\n\n private _shadingChanged() {\n this._roomleMaterialViewerUiCallback.onMaterialShadingChanged(\n getMaterialShading(this._material),\n );\n this._requestRender();\n }\n\n public setGeometry(type: GEOMETRY) {\n this._sceneParams.type = type;\n this._setGeometry();\n }\n\n private _setGeometry() {\n let geometry;\n if (this._sceneParams.type === GEOMETRY.CUBE) {\n geometry = new BoxGeometry(SIZE.x, SIZE.y, SIZE.z, 100, 100, 100);\n } else if (this._sceneParams.type === GEOMETRY.SPHERE) {\n geometry = new SphereGeometry(0.5, 100, 100);\n } else if (this._sceneParams.type === GEOMETRY.PLANE_HORIZONTAL) {\n geometry = new PlaneGeometry(SIZE.x, SIZE.z);\n geometry.rotateX(-Math.PI / 2);\n } else if (this._sceneParams.type === GEOMETRY.PLANE_VERTICAL) {\n geometry = new PlaneGeometry(SIZE.x, SIZE.z);\n } else {\n console.error(\n `MaterialViewerSceneManager: unexpected geometry type \"${this._sceneParams.type}\"`,\n );\n return;\n }\n this._mesh.geometry = geometry;\n this._renderEverything();\n }\n\n public async changeFloorMaterialById(materialId: string): Promise<void> {\n const material = await this._rapiAccess.getMaterial(materialId);\n if (\n !this._environment ||\n !(this._environment instanceof FloorEnvironment)\n ) {\n this._environment = new FloorEnvironment(\n this._scene,\n this._environment,\n !this._initData.webGpu,\n );\n }\n return new Promise((resolve, reject) => {\n (this._environment as FloorEnvironment)\n .changeFloorMaterial(material, this._maxAnisotropy)\n .then(() => {\n this._requestRender();\n resolve();\n }, reject);\n });\n }\n\n public async addTexture(rapiTexture: RapiTexture, base64Image?: string) {\n const width = SIZE.x * 100;\n const height = SIZE.y * 100;\n const repeatWidth =\n width / (rapiTexture.mmWidth === 0 ? 1 : rapiTexture.mmWidth);\n const repeatHeight =\n height / (rapiTexture.mmHeight === 0 ? 1 : rapiTexture.mmHeight);\n const maxTextures = getMaxTextures(this._renderer);\n if (base64Image) {\n const image = new Image();\n image.src = base64Image;\n const texture = new Texture();\n texture.image = image;\n image.onload = function () {\n texture.needsUpdate = true;\n };\n addExistingTexture(\n texture,\n rapiTexture,\n this._material,\n this._maxAnisotropy,\n repeatWidth,\n repeatHeight,\n maxTextures,\n );\n } else {\n await addTexture(\n rapiTexture.image,\n rapiTexture,\n this._material,\n this._maxAnisotropy,\n repeatWidth,\n repeatHeight,\n maxTextures,\n );\n }\n this._requestRender();\n }\n\n public removeTexture(rapiTexture: RapiTexture) {\n if (rapiTexture.mapping === RAPI_TEXTURE_TYPE.ORM) {\n this._material.aoMap = null;\n this._material.roughnessMap = null;\n this._material.metalnessMap = null;\n }\n if (\n rapiTexture.mapping === RAPI_TEXTURE_TYPE.RGB ||\n rapiTexture.mapping === RAPI_TEXTURE_TYPE.RGBA\n ) {\n this._material.map = null;\n }\n if (rapiTexture.mapping === RAPI_TEXTURE_TYPE.XYZ) {\n this._material.normalMap = null;\n }\n this._material.needsUpdate = true;\n this._requestRender();\n }\n\n public clearCache() {\n this._configuratorMeshGenerator.clear();\n }\n}\n","import type ScriptLoader from '../../common-core/src/script-loader';\nimport type DomHelper from '../../common-core/src/utils/dom-helper';\nimport inject from '../../common-core/src/di/inject';\nimport type { ExternalEmbeddable, GlobalAPI } from '../../common-core/src/main';\nimport type { Main } from '../../common-core/src/main';\nimport type { Context } from '../../common-core/src/di/context';\nimport type { LifeCycleManager } from '../../common-core/src/life-cycle-manager';\nimport type { SceneSettings } from '../../common-core/src/scene-settings-loader';\nimport type { GEOMETRY } from './webgl/material-viewer-scene-manager';\nimport MaterialViewerSceneManager from './webgl/material-viewer-scene-manager';\nimport type {\n RapiId,\n RapiMaterial,\n RapiMaterialShading,\n RapiTexture,\n} from '../../typings/rapi-types';\nimport type RoomleMaterialViewerUiCallback from './roomle-material-viewer-ui-callback';\nimport type { InitDataDefinition } from '../../common-core/src/utils/shims';\nimport type InitData from '../../common-core/src/utils/init-data';\nimport { type RapiAccess } from '../../common-core/src/rapi-access';\nimport type { CanvasOffset } from '../../common-core/src/common-interfaces';\nimport type UnitFormatter from '../../configurator-core/src/services/unit-formatter';\nimport type { Scene } from 'three';\nimport { type IdbManager } from '../../common-core/src/services/idb-manager';\nimport type { GlobalCallback } from '../../common-core/src/services/global-callback';\n\nexport default class RoomleMaterialViewer\n implements\n GlobalAPI,\n Context,\n ExternalEmbeddable<RoomleMaterialViewerUiCallback>\n{\n public _creator_: string;\n\n @inject\n private _domHelper: DomHelper;\n\n @inject\n private _scriptLoader: ScriptLoader;\n\n @inject\n private _lifeCycleManager: LifeCycleManager;\n\n @inject\n private _roomleMaterialViewerUiCallback: RoomleMaterialViewerUiCallback;\n\n @inject\n private _initData: InitData;\n\n @inject\n private _globalCallback: GlobalCallback;\n\n @inject\n private _rapiAccess: RapiAccess;\n\n @inject\n private _unitFormatter: UnitFormatter;\n\n @inject\n protected _idbManager: IdbManager;\n\n private _sceneManager: MaterialViewerSceneManager;\n\n constructor(creator: string) {\n this._creator_ = creator;\n }\n\n public setCameraOffset(offset: CanvasOffset): void {\n this._sceneManager.setCameraOffset(offset);\n }\n\n public getCameraOffset(): CanvasOffset {\n return this._sceneManager.getCameraOffset();\n }\n\n public init(element: HTMLElement): Promise<void> {\n this._domHelper.setDomElement(element);\n\n if (this._sceneManager) {\n this._lifeCycleManager.resume();\n return Promise.resolve();\n }\n\n return new Promise<void>(this._initPromiseCallback.bind(this));\n }\n\n private _initPromiseCallback(resolve: () => void, _reject: () => void) {\n this._sceneManager = new MaterialViewerSceneManager(this._creator_, {\n left: 0,\n top: 1,\n right: 1,\n bottom: 0,\n });\n this._sceneManager.enableHD();\n resolve();\n }\n\n get callbacks(): RoomleMaterialViewerUiCallback {\n return this._roomleMaterialViewerUiCallback;\n }\n\n set callbacks(callback: RoomleMaterialViewerUiCallback) {\n this._roomleMaterialViewerUiCallback = callback;\n }\n\n public loadMaterialShading(\n materialShading: RapiMaterialShading,\n ): Promise<void> {\n return this._sceneManager.loadMaterialShading(materialShading);\n }\n\n public loadMaterial(\n material: RapiMaterial,\n options: { flushCache?: boolean } = {},\n ): Promise<void> {\n if (options.flushCache) {\n this._clearCaches();\n }\n return this._sceneManager.loadMaterial(material);\n }\n\n public loadMaterialId(\n materialId: RapiId,\n options: { flushCache?: boolean } = {},\n ): Promise<void> {\n if (options.flushCache) {\n this._clearCaches();\n }\n return this._sceneManager.loadMaterialId(materialId);\n }\n\n public getMaterialShading(version: number = 1): RapiMaterialShading {\n return this._sceneManager.getMaterialShading(version);\n }\n\n /**\n * Loads a SceneSettings object, currently it can can contain a light setting definition\n * (see {@link @roomle/web-sdk/configurator-core/src/roomle-configurator#RoomleConfigurator.loadDynamicLightSetting}) and an environment definition (see {@link @roomle/web-sdk/configurator-core/src/environment/dynamic-environment-setting-loader#EnvironmentSetting}).\n * @param sceneSettings\n */\n public loadSceneSetting(sceneSettings: SceneSettings): Promise<void> {\n return this._sceneManager.loadSceneSettings(sceneSettings);\n }\n\n public setOverrides(initData: InitDataDefinition): void {\n if (!initData) {\n return;\n }\n this._initData.setOverrides(initData);\n }\n\n public updateSize(): void {\n this._sceneManager.updateCamera();\n }\n\n /**\n * Return the main class which has access to lifecycle events and RapiAccess.\n * Hidden because it's only useful for embedding API.\n * Has to be overridden by main class.\n * @hidden\n */\n public getMain(): Main | undefined {\n return undefined;\n }\n\n public resumeTest(element: HTMLElement) {\n this._domHelper.setDomElement(element);\n this._lifeCycleManager.resume();\n }\n\n public pauseTest() {\n this._lifeCycleManager.pause();\n }\n\n public showGUI() {\n this._sceneManager.showGUI();\n }\n\n /**\n * Sets the material of the floor to the given material id.\n * If the current environment is not floor environment it will be changed\n *\n * Example material ids are:\n * roomle_floor:DresdenEiche\n * roomle_floor:Ibiza\n * roomle_floor:Palma\n * roomle_floor:Elba\n * roomle_floor:Manacor\n * roomle_floor:KernEiche\n * roomle_floor:KieferScandic\n * roomle_floor:EicheHabsburg\n * roomle_floor:FuldaKiefer\n * roomle_floor:Ashton\n * roomle_floor:EicheLondon\n *\n * @param materialId\n * @returns promise that resolves when material has been changed\n */\n public async changeFloorMaterialById(materialId: string): Promise<void> {\n return this._sceneManager.changeFloorMaterialById(materialId);\n }\n\n /**\n * Set the geometry of the demo material mesh\n *\n * Possible parameter:\n * 'cube',\n * 'sphere',\n * 'plane_vertical',\n * 'plane_horizontal'\n *\n * @param type\n */\n public setGeometry(type: GEOMETRY) {\n this._sceneManager.setGeometry(type);\n }\n\n /**\n * Set a texture on the demo material, if no base64Image is set, the image field of rapiTexture is used\n * @param rapiTexture\n * @param base64Image for example \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==\"\n */\n public async addTexture(rapiTexture: RapiTexture, base64Image?: string) {\n return this._sceneManager.addTexture(rapiTexture, base64Image);\n }\n\n /**\n * Remove texture from the demo material\n * @param rapiTexture\n */\n public removeTexture(rapiTexture: RapiTexture) {\n return this._sceneManager.removeTexture(rapiTexture);\n }\n\n private _clearCaches() {\n this._rapiAccess.cleanUp();\n this._sceneManager.clearCache();\n }\n\n public getScene(): Scene {\n return this._sceneManager.getScene();\n }\n\n public updateScene(): void {\n this._sceneManager.updateScene();\n }\n\n /**\n * returns unit formatter for formatting input und output values in scene\n */\n public getUnitFormatter(): UnitFormatter {\n return this._unitFormatter;\n }\n\n /**\n * returns manager class to interface with indexedDB storage\n */\n public getStorage(): IdbManager {\n return this._idbManager;\n }\n\n public setEnvironmentMap(params: {\n url?: string;\n intensity?: number;\n rotation?: number;\n maxLightSources?: number;\n }): void {\n const { url, intensity, rotation, maxLightSources } = params;\n this._sceneManager.setEnvironmentMap(\n url,\n intensity,\n rotation,\n maxLightSources,\n );\n }\n\n /**\n * @internal\n * Use this callbacks to hook in your functionality\n */\n public get globalCallbacks(): GlobalCallback {\n return this._globalCallback;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport { UiCallback } from '../../common-core/src/utils/ui-callback';\nimport type { RapiMaterialShading } from '../../typings/rapi-types';\n\nexport default class RoomleMaterialViewerUiCallback extends UiCallback {\n constructor(creator: string) {\n super(creator);\n }\n\n /**\n * Gets called when a material parameter has been changed using the graphical user interface\n * @param materialShading\n */\n public onMaterialShadingChanged = (\n materialShading: RapiMaterialShading,\n ): void => undefined;\n}\n","import Logger from '../../../common-core/src/logger';\nimport ScriptLoader from '../../../common-core/src/script-loader';\nimport {\n DependencyInjectionAssignment,\n DI_TYPE,\n} from '../../../common-core/src/di/container';\nimport InputManager from '../../../common-core/src/input/input-manager';\nimport ConfiguratorMeshGenerator from '../../../configurator-core/src/webgl/configurator-mesh-generator';\nimport { RapiAccess } from '../../../common-core/src/rapi-access';\nimport RoomleMaterialViewerUiCallback from '../roomle-material-viewer-ui-callback';\n\nexport const INJECTABLES: DependencyInjectionAssignment[] = [\n new DependencyInjectionAssignment('script-loader', ScriptLoader),\n new DependencyInjectionAssignment('logger', Logger),\n new DependencyInjectionAssignment(\n 'input-manager',\n InputManager,\n DI_TYPE.CONTEXT,\n ),\n new DependencyInjectionAssignment(\n 'configurator-mesh-generator',\n ConfiguratorMeshGenerator,\n ),\n new DependencyInjectionAssignment('rapi-access', RapiAccess),\n new DependencyInjectionAssignment(\n 'roomle-material-viewer-ui-callback',\n RoomleMaterialViewerUiCallback,\n DI_TYPE.CONTEXT,\n ),\n];\n","import './utils/global-definitions';\nimport { Main, BASE_CONTEXT } from '../../common-core/src/main';\nimport type Logger from '../../common-core/src/logger';\nimport RoomleDependencyInjection from '../../common-core/src/di/roomle-dependency-injection';\nimport RoomleMaterialViewer from './roomle-material-viewer';\nimport { INJECTABLES } from './utils/injectables';\n\nexport class MaterialViewer extends Main {\n private _viewer: RoomleMaterialViewer;\n\n protected setupGlobals(): void {\n //globals are initialized in bootFinished()\n }\n\n protected setupDependencies(): void {\n RoomleDependencyInjection.setup(INJECTABLES);\n this.lookup<Logger>('logger', this._context);\n }\n\n protected cleanUpGlobals(): void {\n throw new Error('Method not implemented.');\n }\n\n protected cleanUpDependencies(): void {\n throw new Error('Method not implemented.');\n }\n\n protected async bootFinished(): Promise<void> {\n this._viewer = new RoomleMaterialViewer(this._context);\n\n if (!window.RoomleMaterialViewer) {\n window.RoomleMaterialViewer = this._viewer;\n }\n }\n\n public getApi(): RoomleMaterialViewer {\n return this._viewer;\n }\n\n protected getContextName(): string {\n return BASE_CONTEXT.MATERIAL_VIEWER;\n }\n}\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import "./roomle-sdk-BdEmEYZg.mjs";
2
- import "./configurator-Ducp-Nxf.mjs";
3
- import "./planner-ABiXTXmc.mjs";
4
- import "./glb-viewer-BvnOSeLd.mjs";
1
+ import "./roomle-sdk-FrWkv2ZJ.mjs";
2
+ import "./configurator-Bl3B3C63.mjs";
3
+ import "./planner-CWJXj28p.mjs";
4
+ import "./glb-viewer-DxwekYzn.mjs";
5
5
  //#region ../common/src/utils/id-inferrer.ts
6
6
  var e = (e) => e.split(":").length - 1 == 1, t = (e) => e.split(":").length - 1 <= 0, n = (e) => e ? e.startsWith("component@") : !1, r = (e) => e.startsWith("{") && e.endsWith("}"), i = (e) => e.startsWith("ps_");
7
7
  //#endregion
8
8
  export { i as a, e as i, r as n, t as r, n as t };
9
9
 
10
- //# sourceMappingURL=packages-6njsPLBJ.mjs.map
10
+ //# sourceMappingURL=packages-Dz8NmJP4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"packages-6njsPLBJ.mjs","names":[],"sources":["../../../common/src/utils/id-inferrer.ts"],"sourcesContent":["import type { RapiId, RapiPlanSnapshotId } from '@roomle/web-sdk';\n\nexport const isIdAnItem = (id: string) => id.split(':').length - 1 === 1;\n\nexport const isIdAPlan = (id: string) => id.split(':').length - 1 <= 0;\n\nexport const isIdAComponent = (id: string) =>\n id ? id.startsWith('component@') : false;\n\nexport const isIdAConfigurationString = (id: string) =>\n id.startsWith('{') && id.endsWith('}');\n\nexport const isPlanSnapshotId = (\n id: string | RapiId,\n): id is RapiPlanSnapshotId => id.startsWith('ps_');\n"],"mappings":";;;;;AAEA,IAAa,KAAc,MAAe,EAAG,MAAM,IAAI,CAAC,SAAS,KAAM,GAE1D,KAAa,MAAe,EAAG,MAAM,IAAI,CAAC,SAAS,KAAK,GAExD,KAAkB,MAC7B,IAAK,EAAG,WAAW,aAAa,GAAG,IAExB,KAA4B,MACvC,EAAG,WAAW,IAAI,IAAI,EAAG,SAAS,IAAI,EAE3B,KACX,MAC6B,EAAG,WAAW,MAAM"}
1
+ {"version":3,"file":"packages-Dz8NmJP4.mjs","names":[],"sources":["../../../common/src/utils/id-inferrer.ts"],"sourcesContent":["import type { RapiId, RapiPlanSnapshotId } from '@roomle/web-sdk';\n\nexport const isIdAnItem = (id: string) => id.split(':').length - 1 === 1;\n\nexport const isIdAPlan = (id: string) => id.split(':').length - 1 <= 0;\n\nexport const isIdAComponent = (id: string) =>\n id ? id.startsWith('component@') : false;\n\nexport const isIdAConfigurationString = (id: string) =>\n id.startsWith('{') && id.endsWith('}');\n\nexport const isPlanSnapshotId = (\n id: string | RapiId,\n): id is RapiPlanSnapshotId => id.startsWith('ps_');\n"],"mappings":";;;;;AAEA,IAAa,KAAc,MAAe,EAAG,MAAM,IAAI,CAAC,SAAS,KAAM,GAE1D,KAAa,MAAe,EAAG,MAAM,IAAI,CAAC,SAAS,KAAK,GAExD,KAAkB,MAC7B,IAAK,EAAG,WAAW,aAAa,GAAG,IAExB,KAA4B,MACvC,EAAG,WAAW,IAAI,IAAI,EAAG,SAAS,IAAI,EAE3B,KACX,MAC6B,EAAG,WAAW,MAAM"}
@@ -1,5 +1,5 @@
1
- import { A as e, C as t, H as n, I as r, V as i, Z as a, c as o, ct as s, ft as c, n as l, ot as u, st as d, tt as f, u as p, w as m } from "./roomle-sdk-BdEmEYZg.mjs";
2
- import { t as h } from "./script-loader-BTy3OZVv.mjs";
1
+ import { A as e, C as t, H as n, I as r, V as i, Z as a, c as o, ct as s, ft as c, n as l, ot as u, st as d, tt as f, u as p, w as m } from "./roomle-sdk-FrWkv2ZJ.mjs";
2
+ import { t as h } from "./script-loader-YLmjONN5.mjs";
3
3
  //#region packages/planner-core/src/input/planner-input-manager.ts
4
4
  var g = class extends r {
5
5
  _canDrag(e) {
@@ -41,4 +41,4 @@ var g = class extends r {
41
41
  //#endregion
42
42
  export { v as t };
43
43
 
44
- //# sourceMappingURL=planner-ABiXTXmc.mjs.map
44
+ //# sourceMappingURL=planner-CWJXj28p.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"planner-ABiXTXmc.mjs","names":[],"sources":["../../packages/planner-core/src/input/planner-input-manager.ts","../../packages/planner-core/src/utils/injectables.ts","../../packages/planner-core/src/planner.ts"],"sourcesContent":["import type { INPUT_EVENT_TYPE } from '../../../common-core/src/input/input-manager';\nimport InputManager from '../../../common-core/src/input/input-manager';\n\nexport default class PlannerInputManager extends InputManager {\n protected _canDrag(_type: INPUT_EVENT_TYPE): boolean {\n return true;\n }\n}\n","import ScriptLoader from '../../../common-core/src/script-loader';\nimport {\n DependencyInjectionAssignment,\n DI_TYPE,\n} from '../../../common-core/src/di/container';\nimport Logger from '../../../common-core/src/logger';\nimport { default as PlannerMeshGenerator } from '../webgl/planner-mesh-generator';\nimport { RapiAccess } from '../../../common-core/src/rapi-access';\nimport PlannerInputManager from '../input/planner-input-manager';\nimport PlannerSelectionHandler from './planner-selection-handler';\nimport GlobalInitData from '../../../common-core/src/utils/global-init-data';\nimport ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\n\nexport const INJECTABLES: DependencyInjectionAssignment[] = [\n new DependencyInjectionAssignment('script-loader', ScriptLoader),\n new DependencyInjectionAssignment(\n 'planner-input-manager',\n PlannerInputManager,\n DI_TYPE.CONTEXT,\n ),\n new DependencyInjectionAssignment('logger', Logger),\n new DependencyInjectionAssignment(\n 'planner-mesh-generator',\n PlannerMeshGenerator,\n ),\n new DependencyInjectionAssignment(\n 'configurator-view-model',\n ConfiguratorViewModel,\n DI_TYPE.CONTEXT,\n ),\n new DependencyInjectionAssignment('rapi-access', RapiAccess),\n new DependencyInjectionAssignment('global-init-data', GlobalInitData),\n new DependencyInjectionAssignment(\n 'planner-selection-handler',\n PlannerSelectionHandler,\n ),\n];\n","import './utils/global-definitions';\nimport { Main, BASE_CONTEXT } from '../../common-core/src/main';\nimport { RoomlePlanner } from './roomle-planner';\nimport RoomleDependencyInjection from '../../common-core/src/di/roomle-dependency-injection';\nimport { INJECTABLES } from './utils/injectables';\nimport type PlannerKernelAccess from './services/planner-kernel-access';\nimport type Logger from '../../common-core/src/logger';\nimport { KERNEL_TYPE } from '../../common-core/src/services/common-kernel-access';\nimport type { PluginName } from '../../configurator-core/src/utils/plugin-types';\nimport type InitData from '../../common-core/src/utils/init-data';\nimport { isInIframe } from '../../common-core/src/utils/rapi-utils';\n\nexport class Planner<\n P extends readonly PluginName[] = readonly [],\n> extends Main {\n private _planner: RoomlePlanner<P>;\n private _activePlugins: P;\n\n constructor(creator?: string, activePlugins?: P) {\n super(creator);\n this._activePlugins = (activePlugins || []) as P;\n }\n protected setupGlobals(): void {\n //globals are initialized in bootFinished()\n }\n\n protected setupDependencies(): void {\n RoomleDependencyInjection.setup(INJECTABLES);\n this.lookup<Logger>('logger', this._context);\n // instantiate kernel acccess\n // instantiate pka\n // set pka on kernel access\n const plannerKernelAccess = this.lookup<PlannerKernelAccess>(\n 'planner-kernel-access',\n this._context,\n );\n plannerKernelAccess.init(KERNEL_TYPE.PLANNER);\n }\n\n protected cleanUpGlobals(): void {\n throw new Error('Method not implemented.');\n }\n\n protected cleanUpDependencies(): void {\n throw new Error('Method not implemented.');\n }\n\n protected async bootFinished(): Promise<void> {\n this._planner = new RoomlePlanner<P>(this._context, this._activePlugins);\n\n this._planner.getMain = () => {\n return this;\n };\n\n if (!window.RoomlePlanner) {\n if (this._activePlugins.length === 0) {\n // cast to unknown because we know that the planner is a RoomlePlanner\n window.RoomlePlanner = this._planner as unknown as RoomlePlanner;\n } else {\n window.RoomlePlanner = this._planner as RoomlePlanner<\n readonly PluginName[]\n >;\n }\n }\n\n const initData = this.lookup<InitData>('init-data', this._context);\n\n if (initData?.hi && isInIframe()) {\n await this._planner.setupHomagIntelligence();\n }\n }\n\n public getApi(): RoomlePlanner<P> {\n return this._planner;\n }\n\n protected getContextName(): string {\n return BASE_CONTEXT.PLANNER;\n }\n}\n"],"mappings":";;;AAGA,IAAqB,IAArB,cAAiD,EAAa;CAC5D,SAAmB,GAAkC;AACnD,SAAO;;GCQE,IAA+C;CAC1D,IAAI,EAA8B,iBAAiB,EAAa;CAChE,IAAI,EACF,yBACA,GACA,EAAQ,QACT;CACD,IAAI,EAA8B,UAAU,EAAO;CACnD,IAAI,EACF,0BACA,EACD;CACD,IAAI,EACF,2BACA,GACA,EAAQ,QACT;CACD,IAAI,EAA8B,eAAe,EAAW;CAC5D,IAAI,EAA8B,oBAAoB,EAAe;CACrE,IAAI,EACF,6BACA,EACD;CACF,ECxBY,IAAb,cAEU,EAAK;CAIb,YAAY,GAAkB,GAAmB;AAE/C,EADA,MAAM,EAAQ,EACd,KAAK,iBAAkB,KAAiB,EAAE;;CAE5C,eAA+B;CAI/B,oBAAoC;AAMN,EAL5B,EAA0B,MAAM,EAAY,EAC5C,KAAK,OAAe,UAAU,KAAK,SAAS,EAIhB,KAAK,OAC/B,yBACA,KAAK,SACN,CACmB,KAAK,EAAY,QAAQ;;CAG/C,iBAAiC;AAC/B,QAAU,MAAM,0BAA0B;;CAG5C,sBAAsC;AACpC,QAAU,MAAM,0BAA0B;;CAG5C,MAAgB,eAA8B;AAoB5C,EAnBA,KAAK,WAAW,IAAI,EAAiB,KAAK,UAAU,KAAK,eAAe,EAExE,KAAK,SAAS,gBACL,MAGJ,OAAO,kBACN,KAAK,eAAe,QAEtB,OAAO,gBAAgB,KAAK,WAQf,KAAK,OAAiB,aAAa,KAAK,SAAS,EAEpD,MAAM,GAAY,IAC9B,MAAM,KAAK,SAAS,wBAAwB;;CAIhD,SAAkC;AAChC,SAAO,KAAK;;CAGd,iBAAmC;AACjC,SAAO,EAAa"}
1
+ {"version":3,"file":"planner-CWJXj28p.mjs","names":[],"sources":["../../packages/planner-core/src/input/planner-input-manager.ts","../../packages/planner-core/src/utils/injectables.ts","../../packages/planner-core/src/planner.ts"],"sourcesContent":["import type { INPUT_EVENT_TYPE } from '../../../common-core/src/input/input-manager';\nimport InputManager from '../../../common-core/src/input/input-manager';\n\nexport default class PlannerInputManager extends InputManager {\n protected _canDrag(_type: INPUT_EVENT_TYPE): boolean {\n return true;\n }\n}\n","import ScriptLoader from '../../../common-core/src/script-loader';\nimport {\n DependencyInjectionAssignment,\n DI_TYPE,\n} from '../../../common-core/src/di/container';\nimport Logger from '../../../common-core/src/logger';\nimport { default as PlannerMeshGenerator } from '../webgl/planner-mesh-generator';\nimport { RapiAccess } from '../../../common-core/src/rapi-access';\nimport PlannerInputManager from '../input/planner-input-manager';\nimport PlannerSelectionHandler from './planner-selection-handler';\nimport GlobalInitData from '../../../common-core/src/utils/global-init-data';\nimport ConfiguratorViewModel from '../../../common-core/src/view-model/configurator-view-model';\n\nexport const INJECTABLES: DependencyInjectionAssignment[] = [\n new DependencyInjectionAssignment('script-loader', ScriptLoader),\n new DependencyInjectionAssignment(\n 'planner-input-manager',\n PlannerInputManager,\n DI_TYPE.CONTEXT,\n ),\n new DependencyInjectionAssignment('logger', Logger),\n new DependencyInjectionAssignment(\n 'planner-mesh-generator',\n PlannerMeshGenerator,\n ),\n new DependencyInjectionAssignment(\n 'configurator-view-model',\n ConfiguratorViewModel,\n DI_TYPE.CONTEXT,\n ),\n new DependencyInjectionAssignment('rapi-access', RapiAccess),\n new DependencyInjectionAssignment('global-init-data', GlobalInitData),\n new DependencyInjectionAssignment(\n 'planner-selection-handler',\n PlannerSelectionHandler,\n ),\n];\n","import './utils/global-definitions';\nimport { Main, BASE_CONTEXT } from '../../common-core/src/main';\nimport { RoomlePlanner } from './roomle-planner';\nimport RoomleDependencyInjection from '../../common-core/src/di/roomle-dependency-injection';\nimport { INJECTABLES } from './utils/injectables';\nimport type PlannerKernelAccess from './services/planner-kernel-access';\nimport type Logger from '../../common-core/src/logger';\nimport { KERNEL_TYPE } from '../../common-core/src/services/common-kernel-access';\nimport type { PluginName } from '../../configurator-core/src/utils/plugin-types';\nimport type InitData from '../../common-core/src/utils/init-data';\nimport { isInIframe } from '../../common-core/src/utils/rapi-utils';\n\nexport class Planner<\n P extends readonly PluginName[] = readonly [],\n> extends Main {\n private _planner: RoomlePlanner<P>;\n private _activePlugins: P;\n\n constructor(creator?: string, activePlugins?: P) {\n super(creator);\n this._activePlugins = (activePlugins || []) as P;\n }\n protected setupGlobals(): void {\n //globals are initialized in bootFinished()\n }\n\n protected setupDependencies(): void {\n RoomleDependencyInjection.setup(INJECTABLES);\n this.lookup<Logger>('logger', this._context);\n // instantiate kernel acccess\n // instantiate pka\n // set pka on kernel access\n const plannerKernelAccess = this.lookup<PlannerKernelAccess>(\n 'planner-kernel-access',\n this._context,\n );\n plannerKernelAccess.init(KERNEL_TYPE.PLANNER);\n }\n\n protected cleanUpGlobals(): void {\n throw new Error('Method not implemented.');\n }\n\n protected cleanUpDependencies(): void {\n throw new Error('Method not implemented.');\n }\n\n protected async bootFinished(): Promise<void> {\n this._planner = new RoomlePlanner<P>(this._context, this._activePlugins);\n\n this._planner.getMain = () => {\n return this;\n };\n\n if (!window.RoomlePlanner) {\n if (this._activePlugins.length === 0) {\n // cast to unknown because we know that the planner is a RoomlePlanner\n window.RoomlePlanner = this._planner as unknown as RoomlePlanner;\n } else {\n window.RoomlePlanner = this._planner as RoomlePlanner<\n readonly PluginName[]\n >;\n }\n }\n\n const initData = this.lookup<InitData>('init-data', this._context);\n\n if (initData?.hi && isInIframe()) {\n await this._planner.setupHomagIntelligence();\n }\n }\n\n public getApi(): RoomlePlanner<P> {\n return this._planner;\n }\n\n protected getContextName(): string {\n return BASE_CONTEXT.PLANNER;\n }\n}\n"],"mappings":";;;AAGA,IAAqB,IAArB,cAAiD,EAAa;CAC5D,SAAmB,GAAkC;AACnD,SAAO;;GCQE,IAA+C;CAC1D,IAAI,EAA8B,iBAAiB,EAAa;CAChE,IAAI,EACF,yBACA,GACA,EAAQ,QACT;CACD,IAAI,EAA8B,UAAU,EAAO;CACnD,IAAI,EACF,0BACA,EACD;CACD,IAAI,EACF,2BACA,GACA,EAAQ,QACT;CACD,IAAI,EAA8B,eAAe,EAAW;CAC5D,IAAI,EAA8B,oBAAoB,EAAe;CACrE,IAAI,EACF,6BACA,EACD;CACF,ECxBY,IAAb,cAEU,EAAK;CAIb,YAAY,GAAkB,GAAmB;AAE/C,EADA,MAAM,EAAQ,EACd,KAAK,iBAAkB,KAAiB,EAAE;;CAE5C,eAA+B;CAI/B,oBAAoC;AAMN,EAL5B,EAA0B,MAAM,EAAY,EAC5C,KAAK,OAAe,UAAU,KAAK,SAAS,EAIhB,KAAK,OAC/B,yBACA,KAAK,SACN,CACmB,KAAK,EAAY,QAAQ;;CAG/C,iBAAiC;AAC/B,QAAU,MAAM,0BAA0B;;CAG5C,sBAAsC;AACpC,QAAU,MAAM,0BAA0B;;CAG5C,MAAgB,eAA8B;AAoB5C,EAnBA,KAAK,WAAW,IAAI,EAAiB,KAAK,UAAU,KAAK,eAAe,EAExE,KAAK,SAAS,gBACL,MAGJ,OAAO,kBACN,KAAK,eAAe,QAEtB,OAAO,gBAAgB,KAAK,WAQf,KAAK,OAAiB,aAAa,KAAK,SAAS,EAEpD,MAAM,GAAY,IAC9B,MAAM,KAAK,SAAS,wBAAwB;;CAIhD,SAAkC;AAChC,SAAO,KAAK;;CAGd,iBAAmC;AACjC,SAAO,EAAa"}
@@ -0,0 +1,2 @@
1
+ import { t as e } from "./planner-CWJXj28p.mjs";
2
+ export { e as Planner };