@roomle/web-sdk 3.6.0-alpha.2 → 3.6.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/{BufferGeometry-BZdSmtHt.mjs → BufferGeometry-C1o0MiFL.mjs} +2 -2
- package/lib/{BufferGeometry-BZdSmtHt.mjs.map → BufferGeometry-C1o0MiFL.mjs.map} +1 -1
- package/lib/ConfiguratorKernel.js +2 -2
- package/lib/ConfiguratorKernel.wasm +0 -0
- package/lib/{GLTFExporter-DiE_HuI6.mjs → GLTFExporter-CXMBueJw.mjs} +510 -473
- package/lib/GLTFExporter-CXMBueJw.mjs.map +1 -0
- package/lib/{PointLightHelper-BvRpTX7D.mjs → PointLightHelper-ICWLqwjK.mjs} +3 -3
- package/lib/{PointLightHelper-BvRpTX7D.mjs.map → PointLightHelper-ICWLqwjK.mjs.map} +1 -1
- package/lib/RoomleCore.js +4 -4
- package/lib/RoomleCore.wasm +0 -0
- package/lib/RoomleToolsCore.wasm +0 -0
- package/lib/{SpotLightHelper-Byg39thi.mjs → SpotLightHelper-CW5lDGFp.mjs} +3 -3
- package/lib/{SpotLightHelper-Byg39thi.mjs.map → SpotLightHelper-CW5lDGFp.mjs.map} +1 -1
- package/lib/{USDZExporter-VBx9xybH.mjs → USDZExporter-CUp3dX08.mjs} +218 -211
- package/lib/USDZExporter-CUp3dX08.mjs.map +1 -0
- package/lib/asset-loader.worker.js +1 -1
- package/lib/{banana-for-scale-C9_AyZkI.mjs → banana-for-scale-CfQ8dnY2.mjs} +2 -2
- package/lib/{banana-for-scale-C9_AyZkI.mjs.map → banana-for-scale-CfQ8dnY2.mjs.map} +1 -1
- package/lib/component-dimensioning-C9AWhxvj.mjs +237 -0
- package/lib/component-dimensioning-C9AWhxvj.mjs.map +1 -0
- package/lib/{continuous-drawing-helper-BNHRsd4B.mjs → continuous-drawing-helper-B5BlbPPz.mjs} +2 -2
- package/lib/{continuous-drawing-helper-BNHRsd4B.mjs.map → continuous-drawing-helper-B5BlbPPz.mjs.map} +1 -1
- package/lib/{homag-intelligence-BraN723F.mjs → homag-intelligence-UFo9Z8FS.mjs} +42 -38
- package/lib/homag-intelligence-UFo9Z8FS.mjs.map +1 -0
- package/lib/{imos-ix-poc-export-helper-D7ubISCJ.mjs → imos-ix-poc-export-helper-CGSk-8yx.mjs} +2 -2
- package/lib/{imos-ix-poc-export-helper-D7ubISCJ.mjs.map → imos-ix-poc-export-helper-CGSk-8yx.mjs.map} +1 -1
- package/lib/{index-C-Prfui2.mjs → index-DIyMlQBA.mjs} +46178 -18733
- package/lib/index-DIyMlQBA.mjs.map +1 -0
- package/lib/{material-viewer-DyVGp6Xm.mjs → material-viewer-QTlidNBs.mjs} +7 -6
- package/lib/material-viewer-QTlidNBs.mjs.map +1 -0
- package/lib/roomle-sdk.d.ts +287 -132
- package/lib/roomle-sdk.js +29 -29
- package/lib/static/asset-loader.worker.js +1 -1
- package/lib/static/roomle-core-hsc/ConfiguratorKernel.js +2 -2
- package/lib/static/roomle-core-hsc/ConfiguratorKernel.wasm +0 -0
- package/lib/static/roomle-core-hsc/RoomleCore.js +4 -4
- package/lib/static/roomle-core-hsc/RoomleCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/RoomleToolsCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/configurableObject.d.ts +2 -2
- package/lib/static/roomle-core-hsc/configurableObject.js +6 -6
- package/lib/static/roomle-core-hsc/configurableObject.js.map +1 -1
- package/lib/static/roomle-core-hsc/configurationLoader.js +1 -5
- package/lib/static/roomle-core-hsc/configurationLoader.js.map +1 -1
- package/lib/static/roomle-core-hsc/configurationManager.d.ts +1 -0
- package/lib/static/roomle-core-hsc/configurationManager.js +6 -0
- package/lib/static/roomle-core-hsc/configurationManager.js.map +1 -1
- package/lib/static/roomle-core-hsc/configuratorCore.d.ts +1 -2
- package/lib/static/roomle-core-hsc/configuratorCoreInterface.d.ts +22 -29
- package/lib/static/roomle-core-hsc/embind/configuratorCore.d.ts +1 -2
- package/lib/static/roomle-core-hsc/embind/configuratorCoreInterface.d.ts +22 -29
- package/lib/static/roomle-core-hsc/embind/plannerCore.d.ts +1 -2
- package/lib/static/roomle-core-hsc/embind/plannerCoreCallback.d.ts +1 -1
- package/lib/static/roomle-core-hsc/embind/plannerCoreCallback.js +1 -1
- package/lib/static/roomle-core-hsc/embind/plannerCoreCallback.js.map +1 -1
- package/lib/static/roomle-core-hsc/embind/plannerCoreInterface.d.ts +74 -81
- package/lib/static/roomle-core-hsc/embind/plannerCoreInterface.js +1 -6
- package/lib/static/roomle-core-hsc/embind/plannerCoreInterface.js.map +1 -1
- package/lib/static/roomle-core-hsc/loader/configurableObject.d.ts +2 -2
- package/lib/static/roomle-core-hsc/loader/configurableObject.js +6 -6
- package/lib/static/roomle-core-hsc/loader/configurableObject.js.map +1 -1
- package/lib/static/roomle-core-hsc/loader/configurationLoader.js +1 -5
- package/lib/static/roomle-core-hsc/loader/configurationLoader.js.map +1 -1
- package/lib/static/roomle-core-hsc/loader/configurationManager.d.ts +1 -0
- package/lib/static/roomle-core-hsc/loader/configurationManager.js +6 -0
- package/lib/static/roomle-core-hsc/loader/configurationManager.js.map +1 -1
- package/lib/static/roomle-core-hsc/loader/planElementManager.d.ts +2 -2
- package/lib/static/roomle-core-hsc/loader/planElementManager.js.map +1 -1
- package/lib/static/roomle-core-hsc/package.json +1 -1
- package/lib/static/roomle-core-hsc/planElementManager.d.ts +2 -2
- package/lib/static/roomle-core-hsc/planElementManager.js.map +1 -1
- package/lib/static/roomle-core-hsc/plannerCore.d.ts +1 -2
- package/lib/static/roomle-core-hsc/plannerCoreCallback.d.ts +1 -1
- package/lib/static/roomle-core-hsc/plannerCoreCallback.js +1 -1
- package/lib/static/roomle-core-hsc/plannerCoreCallback.js.map +1 -1
- package/lib/static/roomle-core-hsc/plannerCoreInterface.d.ts +74 -81
- package/lib/static/roomle-core-hsc/plannerCoreInterface.js +1 -6
- package/lib/static/roomle-core-hsc/plannerCoreInterface.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/embind/configuratorCore.d.ts +1 -2
- package/lib/static/roomle-core-hsc/src/embind/configuratorCoreInterface.d.ts +22 -29
- package/lib/static/roomle-core-hsc/src/embind/plannerCore.d.ts +1 -2
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.d.ts +1 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.js +1 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreCallback.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +74 -81
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreInterface.js +1 -6
- package/lib/static/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/loader/configurableObject.d.ts +2 -2
- package/lib/static/roomle-core-hsc/src/loader/configurableObject.js +6 -6
- package/lib/static/roomle-core-hsc/src/loader/configurableObject.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/loader/configurationLoader.js +1 -5
- package/lib/static/roomle-core-hsc/src/loader/configurationLoader.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/loader/configurationManager.d.ts +1 -0
- package/lib/static/roomle-core-hsc/src/loader/configurationManager.js +6 -0
- package/lib/static/roomle-core-hsc/src/loader/configurationManager.js.map +1 -1
- package/lib/static/roomle-core-hsc/src/loader/planElementManager.d.ts +2 -2
- package/lib/static/roomle-core-hsc/src/loader/planElementManager.js.map +1 -1
- package/lib/static/roomle-core-hsc/wasm_modern/ConfiguratorKernel.js +2 -2
- package/lib/static/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleCore.js +4 -4
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
- package/lib/static/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
- package/lib/{stats-helper-UQlUyOTj.mjs → stats-helper-cTITQsAT.mjs} +2 -2
- package/lib/{stats-helper-UQlUyOTj.mjs.map → stats-helper-cTITQsAT.mjs.map} +1 -1
- package/lib/{tools-core-wkPFRdnH.mjs → tools-core-CCWbo8fD.mjs} +2 -2
- package/lib/{tools-core-wkPFRdnH.mjs.map → tools-core-CCWbo8fD.mjs.map} +1 -1
- package/package.json +3 -3
- package/lib/GLTFExporter-DiE_HuI6.mjs.map +0 -1
- package/lib/USDZExporter-VBx9xybH.mjs.map +0 -1
- package/lib/component-dimensioning-DHTSa-If.mjs +0 -229
- package/lib/component-dimensioning-DHTSa-If.mjs.map +0 -1
- package/lib/homag-intelligence-BraN723F.mjs.map +0 -1
- package/lib/index-C-Prfui2.mjs.map +0 -1
- package/lib/material-viewer-DyVGp6Xm.mjs.map +0 -1
- package/lib/three.webgpu-sHJcp001.mjs +0 -27625
- package/lib/three.webgpu-sHJcp001.mjs.map +0 -1
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { at as M, au as S, as as n, av as W, aw as v, ax as C, ay as x, az as p, aA as y, aB as w, aC as E, aD as P, aE as u, r as g } from "./index-C-Prfui2.mjs";
|
|
2
|
-
var j = Object.defineProperty, T = (m, t, e, i) => {
|
|
3
|
-
for (var a = void 0, l = m.length - 1, s; l >= 0; l--)
|
|
4
|
-
(s = m[l]) && (a = s(t, e, a) || a);
|
|
5
|
-
return a && j(t, e, a), a;
|
|
6
|
-
};
|
|
7
|
-
const L = "component_dimensioning_line_material", F = 0.025, I = 0.05;
|
|
8
|
-
class c {
|
|
9
|
-
constructor(t, e, i) {
|
|
10
|
-
this._direction = c._getDirection(t);
|
|
11
|
-
const a = c._getDefaultLabelDirection(
|
|
12
|
-
t,
|
|
13
|
-
this._direction
|
|
14
|
-
), l = i.dot(a) >= 0;
|
|
15
|
-
this._labelDirection = c._calculateActualLabelDirection(
|
|
16
|
-
t,
|
|
17
|
-
l,
|
|
18
|
-
a
|
|
19
|
-
), this._origin = c._calculateOrigin(
|
|
20
|
-
t,
|
|
21
|
-
e,
|
|
22
|
-
l
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
get direction() {
|
|
26
|
-
return this._direction;
|
|
27
|
-
}
|
|
28
|
-
get labelDirection() {
|
|
29
|
-
return this._labelDirection;
|
|
30
|
-
}
|
|
31
|
-
getEdge(t, e, i) {
|
|
32
|
-
const a = this._origin.clone().add(this._direction.clone().multiplyScalar(t)).add(this._labelDirection.clone().multiplyScalar(i)), l = this._origin.clone().add(this._direction.clone().multiplyScalar(e)).add(this._labelDirection.clone().multiplyScalar(i));
|
|
33
|
-
return new P(a, l);
|
|
34
|
-
}
|
|
35
|
-
static _getDirection(t) {
|
|
36
|
-
return t.axis ? u(t.axis.direction).normalize() : t.dimensioning.axis === "x" ? new n(1, 0, 0) : t.dimensioning.axis === "y" ? new n(0, 0, 1) : new n(0, 1, 0);
|
|
37
|
-
}
|
|
38
|
-
static _getDefaultLabelDirection(t, e) {
|
|
39
|
-
if (t.axis) {
|
|
40
|
-
const i = u(
|
|
41
|
-
t.axis.labelDirection
|
|
42
|
-
);
|
|
43
|
-
return e.clone().cross(i).cross(e).normalize();
|
|
44
|
-
} else {
|
|
45
|
-
if (t.dimensioning.axis === "x")
|
|
46
|
-
return new n(0, 1, 0);
|
|
47
|
-
if (t.dimensioning.axis === "y")
|
|
48
|
-
return new n(-1, 0, 0);
|
|
49
|
-
}
|
|
50
|
-
return new n(-1, 0, 0);
|
|
51
|
-
}
|
|
52
|
-
static _calculateActualLabelDirection(t, e, i) {
|
|
53
|
-
if (e) {
|
|
54
|
-
if (t.axis) {
|
|
55
|
-
if (t.axis.alternativeOrigin)
|
|
56
|
-
return i.clone().multiplyScalar(-1);
|
|
57
|
-
} else if (t.dimensioning.axis === "y" || t.dimensioning.axis === "z")
|
|
58
|
-
return i.clone().multiplyScalar(-1);
|
|
59
|
-
}
|
|
60
|
-
return i;
|
|
61
|
-
}
|
|
62
|
-
static _calculateOrigin(t, e, i) {
|
|
63
|
-
const a = e.getCenter(new n()), l = e.getSize(new n());
|
|
64
|
-
return t.axis ? i && t.axis.alternativeOrigin ? u(t.axis.alternativeOrigin) : u(t.axis.origin) : t.dimensioning.axis === "x" ? new n(0, a.y + l.y * 0.5, a.z - l.z * 0.5) : t.dimensioning.axis === "y" ? new n(
|
|
65
|
-
a.x + l.x * (i ? 0.5 : -0.5),
|
|
66
|
-
a.y - l.y * 0.5,
|
|
67
|
-
0
|
|
68
|
-
) : new n(
|
|
69
|
-
a.x + l.x * (i ? 0.5 : -0.5),
|
|
70
|
-
0,
|
|
71
|
-
a.z - l.z * 0.5
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
class z extends M {
|
|
76
|
-
constructor(t, e, i, a) {
|
|
77
|
-
super(), this._camera = null, this._mainLineObject = null, this._labelText = null, this.name = S, this._font = a || null, this._size = e.getSize(new n()), this._dimensioning = W(
|
|
78
|
-
t.dimensioning
|
|
79
|
-
), this._axis = new c(
|
|
80
|
-
t,
|
|
81
|
-
e,
|
|
82
|
-
i
|
|
83
|
-
), this._level = this._dimensioning.maxLevel - this._dimensioning.level, this._init();
|
|
84
|
-
}
|
|
85
|
-
clone() {
|
|
86
|
-
console.warn("Will not clone ComponentDimensioning");
|
|
87
|
-
}
|
|
88
|
-
setCamera(t) {
|
|
89
|
-
this._camera = t, this._textLabel && this._updateLabelOrientation();
|
|
90
|
-
}
|
|
91
|
-
_initMaterials() {
|
|
92
|
-
this._cacheHolder.materialCache && (this._cacheHolder.materialCache.has(L) ? this._lineMaterial = this._cacheHolder.materialCache.get(
|
|
93
|
-
L
|
|
94
|
-
) : (this._lineMaterial = new v({
|
|
95
|
-
color: C
|
|
96
|
-
}), this._cacheHolder.materialCache.set(L, this._lineMaterial)));
|
|
97
|
-
}
|
|
98
|
-
_init() {
|
|
99
|
-
this._initMaterials();
|
|
100
|
-
const t = Math.round(
|
|
101
|
-
Math.max(this._size.y, this._size.x, this._size.z)
|
|
102
|
-
), e = Math.abs(this._dimensioning.to - this._dimensioning.from);
|
|
103
|
-
let i = F + (t < 4 ? 0 : t * 5e-3);
|
|
104
|
-
e < 0.3 && (i *= 0.5 + e);
|
|
105
|
-
const a = i * 1.4, l = I + (3 * x + a) * this._level, s = this._axis.getEdge(
|
|
106
|
-
this._dimensioning.from,
|
|
107
|
-
this._dimensioning.to,
|
|
108
|
-
l
|
|
109
|
-
);
|
|
110
|
-
this._addEdgeSideLines(
|
|
111
|
-
a,
|
|
112
|
-
s,
|
|
113
|
-
this._axis.labelDirection.clone()
|
|
114
|
-
);
|
|
115
|
-
const r = new p(), h = [
|
|
116
|
-
s.start.x,
|
|
117
|
-
s.start.y,
|
|
118
|
-
s.start.z,
|
|
119
|
-
s.end.x,
|
|
120
|
-
s.end.y,
|
|
121
|
-
s.end.z
|
|
122
|
-
];
|
|
123
|
-
r.setAttribute(
|
|
124
|
-
"position",
|
|
125
|
-
new y(new Float32Array(h), 3)
|
|
126
|
-
);
|
|
127
|
-
const o = new w(r, this._lineMaterial);
|
|
128
|
-
if (o.name = "component dimension line " + this._dimensioning.axis, o.renderOrder = 0, this._mainLineObject = o, this.add(o), this._font) {
|
|
129
|
-
const d = Math.abs(this._dimensioning.to - this._dimensioning.from);
|
|
130
|
-
this._labelText = this._unitFormatter.formatMMValueToUnitString(
|
|
131
|
-
d * 1e3
|
|
132
|
-
), this._textLabel = new E(this._font), this._textLabel.userData.isLabel = !0, this._textLabel.renderOrder = 1, this.add(this._textLabel);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// Get the world position center of the main dimension line (same logic as getDimensionLineCenter)
|
|
136
|
-
_getMainLineCenterWorldPosition() {
|
|
137
|
-
if (!this._mainLineObject)
|
|
138
|
-
return null;
|
|
139
|
-
this.updateMatrixWorld(!0), this._mainLineObject.updateMatrixWorld(!0);
|
|
140
|
-
const t = this._mainLineObject.geometry.attributes.position.array;
|
|
141
|
-
if (t.length < 6)
|
|
142
|
-
return null;
|
|
143
|
-
const e = new n(t[0], t[1], t[2]), i = new n(t[3], t[4], t[5]);
|
|
144
|
-
return e.applyMatrix4(this._mainLineObject.matrixWorld), i.applyMatrix4(this._mainLineObject.matrixWorld), e.clone().add(i).multiplyScalar(0.5);
|
|
145
|
-
}
|
|
146
|
-
_updateLabelOrientation() {
|
|
147
|
-
if (!this._textLabel || !this._camera || !this._labelText)
|
|
148
|
-
return;
|
|
149
|
-
const t = new n();
|
|
150
|
-
this._camera.getWorldDirection(t);
|
|
151
|
-
const e = new n();
|
|
152
|
-
this._camera.getWorldPosition(e);
|
|
153
|
-
const i = this._mainLineObject.geometry.attributes.position.array, a = new n(i[0], i[1], i[2]), l = new n(i[3], i[4], i[5]), s = a.clone().add(l).multiplyScalar(0.5), r = this.localToWorld(s.clone()), h = e.clone().sub(r).normalize(), o = this.worldToLocal(
|
|
154
|
-
this.localToWorld(new n()).add(h)
|
|
155
|
-
).sub(this.worldToLocal(this.localToWorld(new n()))), d = s.clone().add(o.multiplyScalar(2e-3));
|
|
156
|
-
if (Math.abs(t.y) > 0.95) {
|
|
157
|
-
const O = l.clone().sub(a), _ = this.localToWorld(O.clone()).sub(
|
|
158
|
-
this.localToWorld(new n())
|
|
159
|
-
);
|
|
160
|
-
_.y = 0, _.normalize();
|
|
161
|
-
const f = e.clone();
|
|
162
|
-
f.y = r.y;
|
|
163
|
-
const b = f.clone().sub(r);
|
|
164
|
-
b.y = 0, b.normalize(), _.dot(b) < 0 && _.multiplyScalar(-1);
|
|
165
|
-
const D = r.clone().add(_.multiplyScalar(0.01)).add(new n(0, 1, 0));
|
|
166
|
-
this._textLabel.update(d, this._labelText, D);
|
|
167
|
-
} else
|
|
168
|
-
this._textLabel.update(d, this._labelText, e);
|
|
169
|
-
}
|
|
170
|
-
initializeTextLabels() {
|
|
171
|
-
if (!(!this._font || !this._labelText || !this._textLabel) && !this._textLabel.children.length)
|
|
172
|
-
try {
|
|
173
|
-
if (this.updateMatrixWorld(!0), this._camera)
|
|
174
|
-
this._updateLabelOrientation();
|
|
175
|
-
else {
|
|
176
|
-
const t = this._getMainLineCenterWorldPosition();
|
|
177
|
-
if (t) {
|
|
178
|
-
const e = this.worldToLocal(t.clone());
|
|
179
|
-
this._textLabel.position.copy(e);
|
|
180
|
-
const i = new n(0, 0, 1);
|
|
181
|
-
e.add(new n(0, 0, 2e-3)), this._textLabel.update(
|
|
182
|
-
e,
|
|
183
|
-
this._labelText,
|
|
184
|
-
i
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
} catch (t) {
|
|
189
|
-
console.warn("Failed to initialize text label for dimension:", t), this._textLabel && (this.remove(this._textLabel), this._textLabel = null);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
updateLabelForCamera(t) {
|
|
193
|
-
this._textLabel && (this._camera = t, this._textLabel.children.length ? this._updateLabelOrientation() : this.initializeTextLabels());
|
|
194
|
-
}
|
|
195
|
-
_addEdgeSideLines(t, e, i) {
|
|
196
|
-
const a = -(3 * x + t) * 0.5, l = e.start.clone(), s = e.start.clone().add(i.clone().multiplyScalar(a)), r = e.end.clone(), h = e.end.clone().add(i.clone().multiplyScalar(a));
|
|
197
|
-
this._addLine(s, l), this._addLine(h, r);
|
|
198
|
-
}
|
|
199
|
-
_addLine(t, e) {
|
|
200
|
-
const i = new p(), a = [t.x, t.y, t.z, e.x, e.y, e.z];
|
|
201
|
-
i.setAttribute(
|
|
202
|
-
"position",
|
|
203
|
-
new y(new Float32Array(a), 3)
|
|
204
|
-
);
|
|
205
|
-
const l = new w(i, this._lineMaterial);
|
|
206
|
-
l.renderOrder = 0, this.add(l);
|
|
207
|
-
}
|
|
208
|
-
dispose() {
|
|
209
|
-
if (this._textLabel) {
|
|
210
|
-
try {
|
|
211
|
-
this._textLabel.dispose();
|
|
212
|
-
} catch (t) {
|
|
213
|
-
console.warn("Error disposing text label:", t);
|
|
214
|
-
}
|
|
215
|
-
this._textLabel = null;
|
|
216
|
-
}
|
|
217
|
-
this._mainLineObject = null, this._labelText = null, this._camera = null;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
T([
|
|
221
|
-
g
|
|
222
|
-
], z.prototype, "_cacheHolder");
|
|
223
|
-
T([
|
|
224
|
-
g
|
|
225
|
-
], z.prototype, "_unitFormatter");
|
|
226
|
-
export {
|
|
227
|
-
z as default
|
|
228
|
-
};
|
|
229
|
-
//# sourceMappingURL=component-dimensioning-DHTSa-If.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component-dimensioning-DHTSa-If.mjs","sources":["../../packages/configurator-core/src/utils/component-dimensioning.ts"],"sourcesContent":["import type CacheHolder from '../../../common-core/src/services/cache-holder';\nimport type UnitFormatter from '../services/unit-formatter';\nimport type { Dimensioning, DimensioningAxis } from '../../../typings/kernel';\n\nimport type { Box3, Camera } from 'three';\nimport {\n BufferAttribute,\n BufferGeometry,\n Line,\n Line3,\n LineBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\nimport { kernelDimensioningToThree } from '../../../common-core/src/utils/threejs-utils';\nimport { convertToTHREE } from '../../../common-core/src/utils/kernel-utils';\nimport { DIMENSIONING_GEOMETRY } from './dimensioning-helper';\nimport type { Font } from 'three/examples/jsm/loaders/FontLoader.js';\nimport TextWithBackground, {\n TEXT_COLOR,\n TEXT_SPACING,\n} from './text-with-background';\nimport inject from '../../../common-core/src/di/inject';\n\nconst LINE_MATERIAL = 'component_dimensioning_line_material';\n\nconst TEXT_SIZE = 0.025;\nconst LINE_SPACING = 0.05;\n\nexport interface DimensioningAndAxis {\n dimensioning: Dimensioning;\n axis?: DimensioningAxis;\n}\n\nclass ComponentDimensioningAxis {\n private _origin: Vector3;\n private _direction: Vector3;\n private _labelDirection: Vector3;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n cameraPosition: Vector3,\n ) {\n this._direction =\n ComponentDimensioningAxis._getDirection(dimensioningAndAxis);\n const defaultLabelDirection =\n ComponentDimensioningAxis._getDefaultLabelDirection(\n dimensioningAndAxis,\n this._direction,\n );\n const lookAtOppositeSide = cameraPosition.dot(defaultLabelDirection) >= 0;\n this._labelDirection =\n ComponentDimensioningAxis._calculateActualLabelDirection(\n dimensioningAndAxis,\n lookAtOppositeSide,\n defaultLabelDirection,\n );\n this._origin = ComponentDimensioningAxis._calculateOrigin(\n dimensioningAndAxis,\n boundingBox,\n lookAtOppositeSide,\n );\n }\n\n get direction(): Vector3 {\n return this._direction;\n }\n\n get labelDirection(): Vector3 {\n return this._labelDirection;\n }\n\n getEdge(from: number, to: number, lineOffset: number): Line3 {\n const start = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(from))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n const end = this._origin\n .clone()\n .add(this._direction.clone().multiplyScalar(to))\n .add(this._labelDirection.clone().multiplyScalar(lineOffset));\n return new Line3(start, end);\n }\n\n private static _getDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n return convertToTHREE(dimensioningAndAxis.axis.direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(1, 0, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(0, 0, 1);\n }\n return new Vector3(0, 1, 0);\n }\n\n private static _getDefaultLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n direction: Vector3,\n ): Vector3 {\n if (dimensioningAndAxis.axis) {\n const labelDirection = convertToTHREE(\n dimensioningAndAxis.axis.labelDirection,\n );\n const planeNormal = direction.clone().cross(labelDirection);\n return planeNormal.cross(direction).normalize();\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, 1, 0);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(-1, 0, 0);\n }\n return new Vector3(-1, 0, 0);\n }\n\n private static _calculateActualLabelDirection(\n dimensioningAndAxis: DimensioningAndAxis,\n lookAtOppositeSide: boolean,\n labelDirection: Vector3,\n ): Vector3 {\n if (lookAtOppositeSide) {\n if (dimensioningAndAxis.axis) {\n if (dimensioningAndAxis.axis.alternativeOrigin) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n } else if (\n dimensioningAndAxis.dimensioning.axis === 'y' ||\n dimensioningAndAxis.dimensioning.axis === 'z'\n ) {\n return labelDirection.clone().multiplyScalar(-1);\n }\n }\n return labelDirection;\n }\n\n private static _calculateOrigin(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n lookAtOppositeSide: boolean,\n ): Vector3 {\n const center = boundingBox.getCenter(new Vector3());\n const size = boundingBox.getSize(new Vector3());\n if (dimensioningAndAxis.axis) {\n return lookAtOppositeSide && dimensioningAndAxis.axis.alternativeOrigin\n ? convertToTHREE(dimensioningAndAxis.axis.alternativeOrigin)\n : convertToTHREE(dimensioningAndAxis.axis.origin);\n } else if (dimensioningAndAxis.dimensioning.axis === 'x') {\n return new Vector3(0, center.y + size.y * 0.5, center.z - size.z * 0.5);\n } else if (dimensioningAndAxis.dimensioning.axis === 'y') {\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n center.y - size.y * 0.5,\n 0,\n );\n }\n return new Vector3(\n center.x + size.x * (lookAtOppositeSide ? 0.5 : -0.5),\n 0,\n center.z - size.z * 0.5,\n );\n }\n}\n\nexport default class ComponentDimensioning extends Object3D {\n @inject\n private _cacheHolder: CacheHolder;\n\n @inject\n private _unitFormatter: UnitFormatter;\n\n private _dimensioning: Dimensioning;\n private _axis: ComponentDimensioningAxis;\n private _size: Vector3;\n\n private _level: number;\n private _lineMaterial: LineBasicMaterial;\n private _font: Font;\n\n private _textLabel: TextWithBackground;\n private _camera: Camera | null = null;\n\n private _mainLineObject: Line | null = null;\n private _labelText: string | null = null;\n\n constructor(\n dimensioningAndAxis: DimensioningAndAxis,\n boundingBox: Box3,\n relativeCameraDirection: Vector3,\n font?: Font,\n ) {\n super();\n this.name = DIMENSIONING_GEOMETRY;\n\n this._font = font || null;\n\n this._size = boundingBox.getSize(new Vector3());\n this._dimensioning = kernelDimensioningToThree(\n dimensioningAndAxis.dimensioning,\n );\n this._axis = new ComponentDimensioningAxis(\n dimensioningAndAxis,\n boundingBox,\n relativeCameraDirection,\n );\n this._level = this._dimensioning.maxLevel - this._dimensioning.level;\n\n this._init();\n }\n\n clone() {\n // We do not clone ComponentDimensioning because this can break the\n // generation of perspective images. If the ComponentDimensioning is\n // visible during the generation of the perspective image, three.js\n // tries to clone it but clone does not give any parameters to the\n // constructor and therefore the clone breaks. Since we do not need\n // to clone ComponentDimensioning, we return undefined\n console.warn('Will not clone ComponentDimensioning');\n return undefined as any;\n }\n\n public setCamera(camera: Camera): void {\n this._camera = camera;\n if (this._textLabel) {\n this._updateLabelOrientation();\n }\n }\n\n private _initMaterials() {\n if (!this._cacheHolder.materialCache) {\n return;\n }\n\n if (this._cacheHolder.materialCache.has(LINE_MATERIAL)) {\n this._lineMaterial = this._cacheHolder.materialCache.get(\n LINE_MATERIAL,\n ) as LineBasicMaterial;\n } else {\n this._lineMaterial = new LineBasicMaterial({\n color: TEXT_COLOR,\n });\n this._cacheHolder.materialCache.set(LINE_MATERIAL, this._lineMaterial);\n }\n }\n\n private _init() {\n this._initMaterials();\n\n const maxSize = Math.round(\n Math.max(this._size.y, this._size.x, this._size.z),\n );\n const length = Math.abs(this._dimensioning.to - this._dimensioning.from);\n\n let fontSize = TEXT_SIZE + (maxSize < 4 ? 0 : maxSize * 0.005);\n if (length < 0.3) {\n fontSize *= 0.5 + length;\n }\n\n // Approximate text height for spacing calculations\n // Based on typical font metrics (height is roughly 1.4x the font size)\n const levelSpacing = fontSize * 1.4;\n\n const lineOffset =\n LINE_SPACING + (3 * TEXT_SPACING + levelSpacing) * this._level;\n\n const line = this._axis.getEdge(\n this._dimensioning.from,\n this._dimensioning.to,\n lineOffset,\n );\n\n this._addEdgeSideLines(\n levelSpacing,\n line,\n this._axis.labelDirection.clone(),\n );\n\n const lineGeometry = new BufferGeometry();\n const vertices = [\n line.start.x,\n line.start.y,\n line.start.z,\n line.end.x,\n line.end.y,\n line.end.z,\n ];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3),\n );\n\n const lineObject = new Line(lineGeometry, this._lineMaterial);\n lineObject.name = 'component dimension line ' + this._dimensioning.axis;\n lineObject.renderOrder = 0;\n\n this._mainLineObject = lineObject;\n\n this.add(lineObject);\n\n if (this._font) {\n const length = Math.abs(this._dimensioning.to - this._dimensioning.from);\n this._labelText = this._unitFormatter.formatMMValueToUnitString(\n length * 1000,\n );\n\n this._textLabel = new TextWithBackground(this._font);\n this._textLabel.userData.isLabel = true;\n\n this._textLabel.renderOrder = 1;\n\n this.add(this._textLabel);\n }\n }\n\n // Get the world position center of the main dimension line (same logic as getDimensionLineCenter)\n private _getMainLineCenterWorldPosition(): Vector3 | null {\n if (!this._mainLineObject) {\n return null;\n }\n\n this.updateMatrixWorld(true);\n this._mainLineObject.updateMatrixWorld(true);\n\n const positions = this._mainLineObject.geometry.attributes.position.array;\n\n if (positions.length < 6) {\n return null;\n }\n\n const start = new Vector3(positions[0], positions[1], positions[2]);\n const end = new Vector3(positions[3], positions[4], positions[5]);\n\n start.applyMatrix4(this._mainLineObject.matrixWorld);\n end.applyMatrix4(this._mainLineObject.matrixWorld);\n\n return start.clone().add(end).multiplyScalar(0.5);\n }\n\n private _updateLabelOrientation(): void {\n if (!this._textLabel || !this._camera || !this._labelText) {\n return;\n }\n\n const cameraDir = new Vector3();\n this._camera.getWorldDirection(cameraDir);\n const cameraWorldPos = new Vector3();\n this._camera.getWorldPosition(cameraWorldPos);\n\n const positions = this._mainLineObject.geometry.attributes.position.array;\n const start = new Vector3(positions[0], positions[1], positions[2]);\n const end = new Vector3(positions[3], positions[4], positions[5]);\n const labelPosition = start.clone().add(end).multiplyScalar(0.5);\n const labelWorldPos = this.localToWorld(labelPosition.clone());\n\n const toCameraWorld = cameraWorldPos.clone().sub(labelWorldPos).normalize();\n const toCameraLocal = this.worldToLocal(\n this.localToWorld(new Vector3()).add(toCameraWorld),\n ).sub(this.worldToLocal(this.localToWorld(new Vector3())));\n\n const offsetPosition = labelPosition\n .clone()\n .add(toCameraLocal.multiplyScalar(0.002));\n\n const isTopDown = Math.abs(cameraDir.y) > 0.95;\n\n if (isTopDown) {\n const lineDir = end.clone().sub(start);\n const lineDirWorld = this.localToWorld(lineDir.clone()).sub(\n this.localToWorld(new Vector3()),\n );\n lineDirWorld.y = 0;\n lineDirWorld.normalize();\n\n const cameraFlat = cameraWorldPos.clone();\n cameraFlat.y = labelWorldPos.y;\n\n const toCameraFlat = cameraFlat.clone().sub(labelWorldPos);\n toCameraFlat.y = 0;\n toCameraFlat.normalize();\n\n const shouldFlip = lineDirWorld.dot(toCameraFlat) < 0;\n if (shouldFlip) {\n lineDirWorld.multiplyScalar(-1);\n }\n\n const pseudoCameraPos = labelWorldPos\n .clone()\n .add(lineDirWorld.multiplyScalar(0.01))\n .add(new Vector3(0, 1, 0));\n\n this._textLabel.update(offsetPosition, this._labelText, pseudoCameraPos);\n } else {\n this._textLabel.update(offsetPosition, this._labelText, cameraWorldPos);\n }\n }\n\n public initializeTextLabels(): void {\n if (!this._font || !this._labelText || !this._textLabel) {\n return;\n }\n\n if (this._textLabel.children.length) {\n return;\n }\n\n try {\n this.updateMatrixWorld(true);\n\n if (this._camera) {\n this._updateLabelOrientation();\n } else {\n const labelWorldPos = this._getMainLineCenterWorldPosition();\n if (labelWorldPos) {\n const labelLocalPos = this.worldToLocal(labelWorldPos.clone());\n this._textLabel.position.copy(labelLocalPos);\n const defaultCameraDir = new Vector3(0, 0, 1);\n labelLocalPos.add(new Vector3(0, 0, 0.002));\n this._textLabel.update(\n labelLocalPos,\n this._labelText,\n defaultCameraDir,\n );\n }\n }\n } catch (error) {\n console.warn('Failed to initialize text label for dimension:', error);\n if (this._textLabel) {\n this.remove(this._textLabel);\n this._textLabel = null;\n }\n }\n }\n\n public updateLabelForCamera(camera: Camera): void {\n if (!this._textLabel) {\n return;\n }\n\n this._camera = camera;\n\n if (!this._textLabel.children.length) {\n this.initializeTextLabels();\n } else {\n this._updateLabelOrientation();\n }\n }\n\n private _addEdgeSideLines(\n levelSpacing: number,\n line: Line3,\n labelDirection: Vector3,\n ) {\n const sideOffset = -(3 * TEXT_SPACING + levelSpacing) * 0.5;\n const endFrom = line.start.clone();\n const startFrom = line.start\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n const endTo = line.end.clone();\n const startTo = line.end\n .clone()\n .add(labelDirection.clone().multiplyScalar(sideOffset));\n this._addLine(startFrom, endFrom);\n this._addLine(startTo, endTo);\n }\n\n private _addLine(start: Vector3, end: Vector3) {\n const lineGeometry = new BufferGeometry();\n const vertices = [start.x, start.y, start.z, end.x, end.y, end.z];\n lineGeometry.setAttribute(\n 'position',\n new BufferAttribute(new Float32Array(vertices), 3),\n );\n const line = new Line(lineGeometry, this._lineMaterial);\n line.renderOrder = 0;\n this.add(line);\n }\n\n public dispose() {\n if (this._textLabel) {\n try {\n this._textLabel.dispose();\n } catch (error) {\n console.warn('Error disposing text label:', error);\n }\n this._textLabel = null;\n }\n this._mainLineObject = null;\n this._labelText = null;\n this._camera = null;\n }\n}\n"],"names":["LINE_MATERIAL","TEXT_SIZE","LINE_SPACING","ComponentDimensioningAxis","dimensioningAndAxis","boundingBox","cameraPosition","defaultLabelDirection","lookAtOppositeSide","from","to","lineOffset","start","end","Line3","convertToTHREE","Vector3","direction","labelDirection","center","size","ComponentDimensioning","Object3D","relativeCameraDirection","font","DIMENSIONING_GEOMETRY","kernelDimensioningToThree","camera","LineBasicMaterial","TEXT_COLOR","maxSize","length","fontSize","levelSpacing","TEXT_SPACING","line","lineGeometry","BufferGeometry","vertices","BufferAttribute","lineObject","Line","TextWithBackground","positions","cameraDir","cameraWorldPos","labelPosition","labelWorldPos","toCameraWorld","toCameraLocal","offsetPosition","lineDir","lineDirWorld","cameraFlat","toCameraFlat","pseudoCameraPos","labelLocalPos","defaultCameraDir","error","sideOffset","endFrom","startFrom","endTo","startTo","__decorateClass","inject"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"homag-intelligence-BraN723F.mjs","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 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: 'Bedroom & bathroom 01',\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(planId);\n if (!orderData) {\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\n let priceData = withPrice\n ? await this._fetchOrderDataWithPrice(planData.orderData, orderHeader)\n : null;\n\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 this._addAdditionalDataToOrder(order.items[0], planData);\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 LibraryData,\n RoomDesignerRequests,\n} from './glue-logic';\nimport type { ExternalObjectGroup } from 'roomle-core-hsc/src/embind/plannerCoreInterface';\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 ExternalObjectSnapshotSaveResult,\n ExternalRoomInformation,\n LoadExternalObjectOptions,\n} from './external-object-api';\nimport type { ExternalObjectValidContainerModules } from './external-object-api-callbacks';\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 ): 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 );\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 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 ): ExternalObjectValidContainerModules[] {\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 ): void {\n this._logRequest('addSubArticle', articleId, rootModuleId, parentModuleId);\n return this._glueLogic.addSubArticle(\n articleId,\n rootModuleId,\n parentModuleId,\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 async newPosDataFromId(id: string): Promise<PosGroup | undefined> {\n this._logRequest('newPosDataFromId', id);\n return this._glueLogic.newPosDataFromId(id);\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 roomlePlannerId?: string,\n ): Promise<HiOrderData | null> {\n this._logRequest('getGroupDataForOrder', roomlePlannerId);\n return this._glueLogic.getGroupDataForOrder(roomlePlannerId);\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(): Promise<ExternalRoomInformation> {\n this._logResponse('getRoomInformation');\n return this._roomDesignerRequests.getRoomInformation();\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} 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\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 return this._glueLogic.getLibraryData(libraryId);\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 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 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 ): PosGroup {\n if (!libraryExports.addSubArticle) {\n return targetPosGroup;\n }\n const results = libraryExports.addSubArticle(\n targetPosGroup,\n article,\n rootId,\n parentModuleId,\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 try {\n window.exports = {};\n const blob = new Blob([scriptText], { type: 'text/javascript' });\n const blobUrl = URL.createObjectURL(blob);\n await import(blobUrl);\n URL.revokeObjectURL(blobUrl); // dispose of it when done\n return window.exports;\n } catch (e) {\n console.error(e);\n throw new Error('Failed to load calc.js!');\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"],"names":["byteToHex","i","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native","v4","options","buf","rnds","initCallbacks","roomlePlanner","gluLogic","groupId","rootModuleId","subModuleId","context","selectionMode","objectType","payload","payloadPromise","planElementViewModel","reason","getISO8601Date","date","isoString","msPosition","baseTimestamp","offsetMinutes","offsetHours","offsetMins","offsetString","createEmptyOrder","_addMerchantPositions","groupData","planOverview","count","itemIds","acc","item","merchantItems","posNo","pos","Orders","glueLogic","planId","orderHeader","orderData","withPrice","planData","priceData","order","GlueLayerRequestDebugLogging","hiCallbacks","message","args","messageAndArgs","libraryId","libraryData","posData","articleCatalogJson","targetGroup","idsOfGroupsMerged","idOfTargetRootModule","remainingGroup","rootModuleIdToDelete","splitOffGroups","splitGroup","newGroupedRootModules","duplicatedGroup","moduleIdObjects","attributeName","value","moduleId","attributeId","attributeValue","attributeIds","propertyName","propertyValue","posGroupIds","subArticleId","articleId","parentModuleId","subModuleIds","changedGroup","objectPositionChanged","posDataJson","reloadGroup","id","roomlePlannerId","materialId","groupOrModuleId","GlueLayerResponseDebugLogging","roomDesignerRequests","masterData","groupIds","group","groupOrRootModuleId","open","animate","HomagIntelligence","hiOptions","uuidv4","RoomDesignerApi","api","GlueLogicImplementation","savedPosGroupData","articles","catalogCallbacks","libraryExports","rooms","module","ids","attribute","attributeOptions","error","calculatedPosGroup","subArticle","targetPosGroup","article","rootId","articleModuleId","calcScriptString","scriptText","blob","blobUrl","e"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|