@inweb/client 25.3.9 → 25.3.10

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.
@@ -856,416 +856,127 @@ class HttpClient {
856
856
  }
857
857
  }
858
858
 
859
- class Options {
860
- constructor(emitter) {
861
- this._emitter = emitter;
862
- this._data = Options.defaults();
863
- this.loadFromStorage();
859
+ class Permission {
860
+ constructor(data, fileId, httpClient) {
861
+ this.httpClient = httpClient;
862
+ this.fileId = fileId;
863
+ this.data = data;
864
864
  }
865
- static defaults() {
866
- return {
867
- showWCS: true,
868
- cameraAnimation: true,
869
- antialiasing: true,
870
- groundShadow: false,
871
- shadows: false,
872
- cameraAxisXSpeed: 4,
873
- cameraAxisYSpeed: 1,
874
- ambientOcclusion: false,
875
- enableStreamingMode: true,
876
- enablePartialMode: false,
877
- memoryLimit: 3294967296,
878
- cuttingPlaneFillColor: {
879
- red: 255,
880
- green: 152,
881
- blue: 0
882
- },
883
- edgesColor: {
884
- r: 255,
885
- g: 152,
886
- b: 0
887
- },
888
- facesColor: {
889
- r: 255,
890
- g: 152,
891
- b: 0
892
- },
893
- edgesVisibility: true,
894
- edgesOverlap: true,
895
- facesOverlap: false,
896
- facesTransparancy: 200,
897
- enableCustomHighlight: true,
898
- sceneGraph: false,
899
- edgeModel: true,
900
- reverseZoomWheel: false,
901
- enableZoomWheel: true,
902
- enableGestures: true,
903
- geometryType: "vsfx"
904
- };
865
+ internalGet() {
866
+ return this.httpClient.get(`/files/${this.fileId}/permissions/${this.id}`);
905
867
  }
906
- notifierChangeEvent() {
907
- if (this._emitter !== undefined) {
908
- this.saveToStorage();
909
- this._emitter.emit({
910
- type: "optionschange",
911
- data: this
912
- });
913
- }
868
+ internalPut(body) {
869
+ return this.httpClient.put(`/files/${this.fileId}/permissions/${this.id}`, body);
914
870
  }
915
- saveToStorage() {
916
- if (typeof window !== "undefined") try {
917
- localStorage.setItem("od-client-settings", JSON.stringify(this.data));
918
- } catch (error) {
919
- console.error("Cannot save client settings.", error);
920
- }
871
+ internalDelete() {
872
+ return this.httpClient.delete(`/files/${this.fileId}/permissions/${this.id}`);
921
873
  }
922
- loadFromStorage() {
923
- if (typeof window !== "undefined") try {
924
- const item = localStorage.getItem("od-client-settings");
925
- if (item) {
926
- const data = JSON.parse(item);
927
- this.data = {
928
- ...data
929
- };
930
- }
931
- } catch (error) {
932
- console.error("Cannot load client settings.", error);
933
- }
874
+ get actions() {
875
+ return this.data.actions;
934
876
  }
935
- resetToDefaults(fields) {
936
- if (fields !== undefined) {
937
- const defaults = Options.defaults();
938
- const resetData = fields.reduce(((acc, field) => {
939
- acc[field] = defaults[field];
940
- return acc;
941
- }), {});
942
- this.data = {
943
- ...this.data,
944
- ...resetData
945
- };
946
- } else {
947
- this.data = {
948
- ...this.data,
949
- ...Options.defaults()
950
- };
951
- }
877
+ set actions(value) {
878
+ this._data.actions = value;
952
879
  }
953
880
  get data() {
954
881
  return this._data;
955
882
  }
956
883
  set data(value) {
957
- const sceneGraph = value.enablePartialMode ? false : value.sceneGraph;
958
- this._data = {
959
- ...Options.defaults(),
960
- ...this._data,
961
- ...value,
962
- sceneGraph: sceneGraph
963
- };
964
- this.notifierChangeEvent();
884
+ this._data = value;
965
885
  }
966
- get showWCS() {
967
- return this._data.showWCS;
886
+ get id() {
887
+ return this.data.id;
968
888
  }
969
- set showWCS(value) {
970
- this._data.showWCS = value;
971
- this.notifierChangeEvent();
889
+ get grantedTo() {
890
+ return this.data.grantedTo;
972
891
  }
973
- get cameraAnimation() {
974
- return this._data.cameraAnimation;
892
+ set grantedTo(value) {
893
+ this.data.grantedTo = value;
975
894
  }
976
- set cameraAnimation(value) {
977
- this._data.cameraAnimation = value;
978
- this.notifierChangeEvent();
895
+ get public() {
896
+ return this.data.public;
979
897
  }
980
- get antialiasing() {
981
- return this._data.antialiasing;
898
+ set public(value) {
899
+ this.data.public = value;
982
900
  }
983
- set antialiasing(value) {
984
- this._data.antialiasing = value;
985
- this.notifierChangeEvent();
901
+ async checkout() {
902
+ this.data = await json(this.internalGet());
903
+ return this;
986
904
  }
987
- get groundShadow() {
988
- return this._data.groundShadow;
905
+ async update(data) {
906
+ this.data = await json(this.internalPut(data));
907
+ return this;
989
908
  }
990
- set groundShadow(value) {
991
- this._data.groundShadow = value;
992
- this.notifierChangeEvent();
909
+ delete() {
910
+ return json(this.internalDelete());
993
911
  }
994
- get shadows() {
995
- return this._data.shadows;
912
+ save() {
913
+ return this.update(this.data);
996
914
  }
997
- set shadows(value) {
998
- this._data.shadows = value;
999
- this.notifierChangeEvent();
915
+ }
916
+
917
+ class Job {
918
+ constructor(data, httpClient) {
919
+ this.httpClient = httpClient;
920
+ this.data = data;
1000
921
  }
1001
- get cameraAxisXSpeed() {
1002
- return this._data.cameraAxisXSpeed;
922
+ internalGet() {
923
+ return this.httpClient.get(`/jobs/${this.data.id}`);
1003
924
  }
1004
- set cameraAxisXSpeed(value) {
1005
- this._data.cameraAxisXSpeed = value;
1006
- this.notifierChangeEvent();
925
+ internalPut(body) {
926
+ return this.httpClient.put(`/jobs/${this.data.id}`, body);
1007
927
  }
1008
- get cameraAxisYSpeed() {
1009
- return this._data.cameraAxisYSpeed;
928
+ internalDelete() {
929
+ return this.httpClient.delete(`/jobs/${this.data.id}`);
1010
930
  }
1011
- set cameraAxisYSpeed(value) {
1012
- this.cameraAxisYSpeed = value;
1013
- this.notifierChangeEvent();
931
+ get assemblyId() {
932
+ return this.data.assemblyId;
1014
933
  }
1015
- get ambientOcclusion() {
1016
- return this._data.ambientOcclusion;
934
+ get authorId() {
935
+ return this.data.authorId;
1017
936
  }
1018
- set ambientOcclusion(value) {
1019
- this._data.ambientOcclusion = value;
1020
- this.notifierChangeEvent();
937
+ get createdAt() {
938
+ return this.data.createdAt;
1021
939
  }
1022
- get enableStreamingMode() {
1023
- return this._data.enableStreamingMode;
940
+ get data() {
941
+ return this._data;
1024
942
  }
1025
- set enableStreamingMode(value) {
1026
- this._data.enableStreamingMode = value;
1027
- if (this._data.enableStreamingMode) {
1028
- this._data.enablePartialMode = false;
1029
- }
1030
- this.notifierChangeEvent();
943
+ set data(value) {
944
+ this._data = value;
1031
945
  }
1032
- get enablePartialMode() {
1033
- return this._data.enablePartialMode;
946
+ get done() {
947
+ return this.data.status === "done" || this.data.status === "failed";
1034
948
  }
1035
- set enablePartialMode(value) {
1036
- this._data.enablePartialMode = value;
1037
- if (value) this._data.sceneGraph = false;
1038
- this.notifierChangeEvent();
949
+ get fileId() {
950
+ return this.data.fileId;
1039
951
  }
1040
- get memoryLimit() {
1041
- return this._data.memoryLimit;
952
+ get id() {
953
+ return this.data.id;
1042
954
  }
1043
- set memoryLimit(value) {
1044
- this._data.memoryLimit = value;
1045
- this.notifierChangeEvent();
955
+ get lastUpdate() {
956
+ return this.data.lastUpdate;
1046
957
  }
1047
- get cuttingPlaneFillColor() {
1048
- return this._data.cuttingPlaneFillColor;
958
+ get outputFormat() {
959
+ return this.data.outputFormat;
1049
960
  }
1050
- set cuttingPlaneFillColor(value) {
1051
- this._data.cuttingPlaneFillColor = value;
1052
- this.notifierChangeEvent();
961
+ get parameters() {
962
+ return this.data.parameters;
1053
963
  }
1054
- get edgesColor() {
1055
- return this._data.edgesColor;
964
+ get status() {
965
+ return this.data.status;
1056
966
  }
1057
- set edgesColor(value) {
1058
- this._data.edgesColor = value;
1059
- this.notifierChangeEvent();
967
+ get statusMessage() {
968
+ return this.data.statusMessage;
1060
969
  }
1061
- get facesColor() {
1062
- return this._data.facesColor;
970
+ get startedAt() {
971
+ return this.data.startedAt;
1063
972
  }
1064
- set facesColor(value) {
1065
- this._data.facesColor = value;
1066
- this.notifierChangeEvent();
973
+ async checkout() {
974
+ this.data = await json(this.internalGet());
975
+ return this;
1067
976
  }
1068
- get edgesVisibility() {
1069
- return this._data.edgesVisibility;
1070
- }
1071
- set edgesVisibility(value) {
1072
- this._data.edgesVisibility = value;
1073
- this.notifierChangeEvent();
1074
- }
1075
- get edgesOverlap() {
1076
- return this._data.edgesOverlap;
1077
- }
1078
- set edgesOverlap(value) {
1079
- this._data.edgesOverlap = value;
1080
- this.notifierChangeEvent();
1081
- }
1082
- get facesOverlap() {
1083
- return this._data.facesOverlap;
1084
- }
1085
- set facesOverlap(value) {
1086
- this._data.facesOverlap = value;
1087
- this.notifierChangeEvent();
1088
- }
1089
- get facesTransparancy() {
1090
- return this._data.facesTransparancy;
1091
- }
1092
- set facesTransparancy(value) {
1093
- this._data.facesTransparancy = value;
1094
- this.notifierChangeEvent();
1095
- }
1096
- get enableCustomHighlight() {
1097
- return this._data.enableCustomHighlight;
1098
- }
1099
- set enableCustomHighlight(value) {
1100
- this._data.enableCustomHighlight = value;
1101
- this.notifierChangeEvent();
1102
- }
1103
- get sceneGraph() {
1104
- return this._data.sceneGraph;
1105
- }
1106
- set sceneGraph(value) {
1107
- this._data.sceneGraph = value;
1108
- if (value) this._data.enablePartialMode = false;
1109
- this.notifierChangeEvent();
1110
- }
1111
- get edgeModel() {
1112
- return Boolean(this._data.edgeModel);
1113
- }
1114
- set edgeModel(value) {
1115
- this._data.edgeModel = Boolean(value);
1116
- this.notifierChangeEvent();
1117
- }
1118
- get reverseZoomWheel() {
1119
- return this._data.reverseZoomWheel;
1120
- }
1121
- set reverseZoomWheel(value) {
1122
- this._data.reverseZoomWheel = !!value;
1123
- this.notifierChangeEvent();
1124
- }
1125
- get enableZoomWheel() {
1126
- return this._data.enableZoomWheel;
1127
- }
1128
- set enableZoomWheel(value) {
1129
- this._data.enableZoomWheel = !!value;
1130
- this.notifierChangeEvent();
1131
- }
1132
- get enableGestures() {
1133
- return this._data.enableGestures;
1134
- }
1135
- set enableGestures(value) {
1136
- this._data.enableGestures = !!value;
1137
- this.notifierChangeEvent();
1138
- }
1139
- get geometryType() {
1140
- return this._data.geometryType;
1141
- }
1142
- set geometryType(value) {
1143
- this._data.geometryType = value;
1144
- this.notifierChangeEvent();
1145
- }
1146
- }
1147
-
1148
- class Permission {
1149
- constructor(data, fileId, httpClient) {
1150
- this.httpClient = httpClient;
1151
- this.fileId = fileId;
1152
- this.data = data;
1153
- }
1154
- internalGet() {
1155
- return this.httpClient.get(`/files/${this.fileId}/permissions/${this.id}`);
1156
- }
1157
- internalPut(body) {
1158
- return this.httpClient.put(`/files/${this.fileId}/permissions/${this.id}`, body);
1159
- }
1160
- internalDelete() {
1161
- return this.httpClient.delete(`/files/${this.fileId}/permissions/${this.id}`);
1162
- }
1163
- get actions() {
1164
- return this.data.actions;
1165
- }
1166
- set actions(value) {
1167
- this._data.actions = value;
1168
- }
1169
- get data() {
1170
- return this._data;
1171
- }
1172
- set data(value) {
1173
- this._data = value;
1174
- }
1175
- get id() {
1176
- return this.data.id;
1177
- }
1178
- get grantedTo() {
1179
- return this.data.grantedTo;
1180
- }
1181
- set grantedTo(value) {
1182
- this.data.grantedTo = value;
1183
- }
1184
- get public() {
1185
- return this.data.public;
1186
- }
1187
- set public(value) {
1188
- this.data.public = value;
1189
- }
1190
- async checkout() {
1191
- this.data = await json(this.internalGet());
1192
- return this;
1193
- }
1194
- async update(data) {
1195
- this.data = await json(this.internalPut(data));
1196
- return this;
1197
- }
1198
- delete() {
1199
- return json(this.internalDelete());
1200
- }
1201
- save() {
1202
- return this.update(this.data);
1203
- }
1204
- }
1205
-
1206
- class Job {
1207
- constructor(data, httpClient) {
1208
- this.httpClient = httpClient;
1209
- this.data = data;
1210
- }
1211
- internalGet() {
1212
- return this.httpClient.get(`/jobs/${this.data.id}`);
1213
- }
1214
- internalPut(body) {
1215
- return this.httpClient.put(`/jobs/${this.data.id}`, body);
1216
- }
1217
- internalDelete() {
1218
- return this.httpClient.delete(`/jobs/${this.data.id}`);
1219
- }
1220
- get assemblyId() {
1221
- return this.data.assemblyId;
1222
- }
1223
- get authorId() {
1224
- return this.data.authorId;
1225
- }
1226
- get createdAt() {
1227
- return this.data.createdAt;
1228
- }
1229
- get data() {
1230
- return this._data;
1231
- }
1232
- set data(value) {
1233
- this._data = value;
1234
- }
1235
- get done() {
1236
- return this.data.status === "done" || this.data.status === "failed";
1237
- }
1238
- get fileId() {
1239
- return this.data.fileId;
1240
- }
1241
- get id() {
1242
- return this.data.id;
1243
- }
1244
- get lastUpdate() {
1245
- return this.data.lastUpdate;
1246
- }
1247
- get outputFormat() {
1248
- return this.data.outputFormat;
1249
- }
1250
- get parameters() {
1251
- return this.data.parameters;
1252
- }
1253
- get status() {
1254
- return this.data.status;
1255
- }
1256
- get statusMessage() {
1257
- return this.data.statusMessage;
1258
- }
1259
- get startedAt() {
1260
- return this.data.startedAt;
1261
- }
1262
- async checkout() {
1263
- this.data = await json(this.internalGet());
1264
- return this;
1265
- }
1266
- async update(data) {
1267
- this.data = await json(this.internalPut(data));
1268
- return this;
977
+ async update(data) {
978
+ this.data = await json(this.internalPut(data));
979
+ return this;
1269
980
  }
1270
981
  delete() {
1271
982
  return json(this.internalDelete());
@@ -2061,14 +1772,59 @@ class Client extends EventEmitter2 {
2061
1772
  super();
2062
1773
  this.configure(params);
2063
1774
  this.eventEmitter = this;
2064
- this._options = new Options(this);
2065
1775
  this._user = null;
2066
1776
  }
2067
1777
  get serverUrl() {
2068
1778
  return this._serverUrl;
2069
1779
  }
2070
1780
  get options() {
2071
- return this._options;
1781
+ console.warn("Client.options has been deprecated since 25.3 and will be removed in a future release, use Viewer.options instead.");
1782
+ const data = {
1783
+ showWCS: true,
1784
+ cameraAnimation: true,
1785
+ antialiasing: true,
1786
+ groundShadow: false,
1787
+ shadows: false,
1788
+ cameraAxisXSpeed: 4,
1789
+ cameraAxisYSpeed: 1,
1790
+ ambientOcclusion: false,
1791
+ enableStreamingMode: true,
1792
+ enablePartialMode: false,
1793
+ memoryLimit: 3294967296,
1794
+ cuttingPlaneFillColor: {
1795
+ red: 255,
1796
+ green: 152,
1797
+ blue: 0
1798
+ },
1799
+ edgesColor: {
1800
+ r: 255,
1801
+ g: 152,
1802
+ b: 0
1803
+ },
1804
+ facesColor: {
1805
+ r: 255,
1806
+ g: 152,
1807
+ b: 0
1808
+ },
1809
+ edgesVisibility: true,
1810
+ edgesOverlap: true,
1811
+ facesOverlap: false,
1812
+ facesTransparancy: 200,
1813
+ enableCustomHighlight: true,
1814
+ sceneGraph: false,
1815
+ edgeModel: true,
1816
+ reverseZoomWheel: false,
1817
+ enableZoomWheel: true,
1818
+ enableGestures: true
1819
+ };
1820
+ return {
1821
+ ...data,
1822
+ data: data,
1823
+ defaults: () => data,
1824
+ resetToDefaults: () => {},
1825
+ saveToStorage: () => {},
1826
+ loadFromStorage: () => {}
1827
+ };
2072
1828
  }
2073
1829
  configure(params) {
2074
1830
  this._serverUrl = (params.serverUrl || "").replace(/\/+$/, "");
@@ -2080,7 +1836,7 @@ class Client extends EventEmitter2 {
2080
1836
  return this._httpClient.get("/version").then((response => response.json())).then((data => ({
2081
1837
  ...data,
2082
1838
  server: data.version,
2083
- client: "25.3.9"
1839
+ client: "25.3.10"
2084
1840
  })));
2085
1841
  }
2086
1842
  registerUser(email, password, userName) {
@@ -2213,7 +1969,7 @@ class Client extends EventEmitter2 {
2213
1969
  });
2214
1970
  (_a = params.onProgress) === null || _a === void 0 ? void 0 : _a.call(params, progress, file);
2215
1971
  })).then((xhr => JSON.parse(xhr.responseText))).then((data => new File$1(data, this._httpClient)));
2216
- const geometryType = typeof params.geometry === "string" ? params.geometry : this.options.geometryType;
1972
+ const geometryType = typeof params.geometry === "string" ? params.geometry : "vsfx";
2217
1973
  const jobs = [];
2218
1974
  if (params.geometry) jobs.push((await result.extractGeometry(geometryType)).outputFormat);
2219
1975
  if (params.properties) jobs.push((await result.extractProperties()).outputFormat);
@@ -2462,226 +2218,515 @@ class OdaGeAction {
2462
2218
  toGeVector(v) {
2463
2219
  return [ v.x, v.y, v.z ];
2464
2220
  }
2465
- toGePoint(point) {
2466
- return [ point.x, point.y, point.z ];
2221
+ toGePoint(point) {
2222
+ return [ point.x, point.y, point.z ];
2223
+ }
2224
+ toPoint(gePoint) {
2225
+ return this.m_module.Point3d.createFromArray(gePoint);
2226
+ }
2227
+ screenToWorld(x, y) {
2228
+ return this.toPoint(this.m_module.getViewer().screenToWorld(x, y));
2229
+ }
2230
+ toDoubleArray(points) {
2231
+ const p = [];
2232
+ for (let i = 0; i < points.length; i++) {
2233
+ p.push(points[i].x);
2234
+ p.push(points[i].y);
2235
+ p.push(points[i].z);
2236
+ }
2237
+ return p;
2238
+ }
2239
+ correctCameraTarget() {
2240
+ const params = this.getViewParams();
2241
+ const ext = this.m_module.getViewer().getActiveExtents();
2242
+ const {min: min, max: max} = ext;
2243
+ const target = this.toPoint(params.target);
2244
+ const contains = target.x >= min.x && target.y >= min.y && target.z >= min.z && target.x <= max.x && target.y <= max.y && target.z <= max.z;
2245
+ if (!contains) {
2246
+ params.target = ext.center();
2247
+ this.setViewParams(params);
2248
+ }
2249
+ }
2250
+ }
2251
+
2252
+ const CLICK_DELTA = 5;
2253
+
2254
+ const INTERACTIVITY_FPS = 24;
2255
+
2256
+ class OdBaseDragger extends OdaGeAction {
2257
+ constructor(subject) {
2258
+ super(subject.visualizeJs);
2259
+ this.beginInteractivity = () => {
2260
+ const viewer = this.getViewer();
2261
+ const view = viewer.activeView;
2262
+ if (view["beginInteractivity"]) {
2263
+ view.beginInteractivity(INTERACTIVITY_FPS);
2264
+ this.subject.update();
2265
+ }
2266
+ view.delete();
2267
+ };
2268
+ this.endInteractivity = () => {
2269
+ const viewer = this.getViewer();
2270
+ const view = viewer.activeView;
2271
+ if (view["endInteractivity"]) {
2272
+ view.endInteractivity();
2273
+ const device = this.getViewer().getActiveDevice();
2274
+ const canvas = this.m_module.canvas;
2275
+ device.invalidate([ 0, 0, canvas.width, canvas.height ]);
2276
+ device.delete();
2277
+ this.subject.update();
2278
+ }
2279
+ view.delete();
2280
+ };
2281
+ this.subject = subject;
2282
+ this.needInputText = false;
2283
+ this.mouseDownPosition = {
2284
+ x: 0,
2285
+ y: 0
2286
+ };
2287
+ this.autoSelect = false;
2288
+ this.onmessage = event => this.subject.emitEvent(event);
2289
+ this.canvasEvents = CANVAS_EVENTS;
2290
+ }
2291
+ initialize() {
2292
+ this.canvasEvents = this.canvasEvents.filter((x => typeof this[x] === "function"));
2293
+ this.canvasEvents.forEach((x => this[x] = this[x].bind(this)));
2294
+ this.canvasEvents.forEach((x => this.subject.on(x, this[x])));
2295
+ this.getViewer().setEnableAutoSelect(!!this.autoSelect);
2296
+ }
2297
+ dispose() {
2298
+ this.canvasEvents.forEach((x => this.subject.off(x, this[x])));
2299
+ }
2300
+ relativeCoords(event) {
2301
+ return {
2302
+ x: event.offsetX * window.devicePixelRatio,
2303
+ y: event.offsetY * window.devicePixelRatio
2304
+ };
2305
+ }
2306
+ pointerdown(ev) {
2307
+ if (!ev.isPrimary || OdBaseDragger.isGestureActive) {
2308
+ return;
2309
+ }
2310
+ ev.target.setPointerCapture(ev.pointerId);
2311
+ const relCoord = this.relativeCoords(ev);
2312
+ this.isDragging = true;
2313
+ this.mouseDownPosition = {
2314
+ x: relCoord.x,
2315
+ y: relCoord.y
2316
+ };
2317
+ this.start(relCoord.x, relCoord.y, ev.clientX, ev.clientY);
2318
+ this.subject.update();
2319
+ }
2320
+ pointerup(ev) {
2321
+ if (OdBaseDragger.needSkipPointerUp) {
2322
+ return;
2323
+ }
2324
+ if (!ev.isPrimary) {
2325
+ return;
2326
+ }
2327
+ ev.target.releasePointerCapture(ev.pointerId);
2328
+ const relCoord = this.relativeCoords(ev);
2329
+ this.end(relCoord.x, relCoord.y);
2330
+ this.isDragging = false;
2331
+ this.subject.update();
2332
+ }
2333
+ pointercancel(ev) {
2334
+ if (!ev.isPrimary) {
2335
+ return;
2336
+ }
2337
+ this.m_module.canvas.dispatchEvent(new PointerEvent("pointerup", ev));
2338
+ }
2339
+ pointermove(ev) {
2340
+ if (!ev.isPrimary || OdBaseDragger.isGestureActive) {
2341
+ return;
2342
+ }
2343
+ const relCoord = this.relativeCoords(ev);
2344
+ this.drag(relCoord.x, relCoord.y, ev.movementX, ev.movementY);
2345
+ if (this.isDragging) {
2346
+ this.subject.update();
2347
+ }
2348
+ }
2349
+ click(ev) {
2350
+ const viewer = this.getViewer();
2351
+ const relCoord = this.relativeCoords(ev);
2352
+ const x = relCoord.x;
2353
+ const y = relCoord.y;
2354
+ const isNotDragging = Math.abs(x - this.mouseDownPosition.x) < CLICK_DELTA && Math.abs(y - this.mouseDownPosition.y) < CLICK_DELTA;
2355
+ if (viewer && viewer.getEnableAutoSelect() && isNotDragging) {
2356
+ viewer.unselect();
2357
+ viewer.select(x, y, x, y);
2358
+ this.subject.update();
2359
+ const selectionSet = viewer.getSelected();
2360
+ const handles = this.subject.getSelected();
2361
+ this.onmessage({
2362
+ type: "select",
2363
+ data: selectionSet,
2364
+ handles: handles
2365
+ });
2366
+ }
2367
+ }
2368
+ dblclick(ev) {
2369
+ const viewer = this.getViewer();
2370
+ const relCoord = this.relativeCoords(ev);
2371
+ const x = relCoord.x;
2372
+ const y = relCoord.y;
2373
+ const device = viewer.getActiveDevice();
2374
+ const clickView = device.viewAt([ x, y ]);
2375
+ if (clickView && !clickView.active) {
2376
+ viewer.activeView = clickView;
2377
+ clickView.delete();
2378
+ this.subject.update();
2379
+ } else {
2380
+ if (viewer && viewer.getEnableAutoSelect()) {
2381
+ const pSelected = viewer.getSelected();
2382
+ if (!pSelected.isNull() && pSelected.numItems() !== 0) {
2383
+ const itr = pSelected.getIterator();
2384
+ const entity = itr.getEntity();
2385
+ viewer.zoomToEntity(entity);
2386
+ this.onmessage({
2387
+ type: "zoomtoentity",
2388
+ data: entity
2389
+ });
2390
+ this.subject.update();
2391
+ this.deleteAll([ itr, entity ]);
2392
+ }
2393
+ }
2394
+ }
2395
+ device.delete();
2396
+ }
2397
+ start(x, y, absoluteX = 0, absoluteY = 0) {}
2398
+ drag(x, y, absoluteX = 0, absoluteY = 0) {}
2399
+ end(x, y) {}
2400
+ getActiveMarkupEntity(entityName) {
2401
+ return this.subject.addMarkupEntity(entityName);
2402
+ }
2403
+ syncOverlayView() {
2404
+ return this.subject.syncOverlay();
2405
+ }
2406
+ deleteAll(objects) {
2407
+ var _a;
2408
+ for (const obj of objects) {
2409
+ (_a = obj === null || obj === void 0 ? void 0 : obj.delete) === null || _a === void 0 ? void 0 : _a.call(obj);
2410
+ }
2411
+ }
2412
+ updatePreview() {}
2413
+ static set isGestureActive(value) {
2414
+ if (OdBaseDragger._isGestureActive === value) {
2415
+ return;
2416
+ }
2417
+ OdBaseDragger._isGestureActive = value;
2418
+ if (OdBaseDragger._isGestureActive) {
2419
+ OdBaseDragger.needSkipPointerUp = true;
2420
+ }
2421
+ }
2422
+ static get isGestureActive() {
2423
+ return OdBaseDragger._isGestureActive;
2424
+ }
2425
+ static get needSkipPointerUp() {
2426
+ if (OdBaseDragger._needSkipPointerUp) {
2427
+ OdBaseDragger.needSkipPointerUp = false;
2428
+ return true;
2429
+ }
2430
+ return false;
2431
+ }
2432
+ static set needSkipPointerUp(value) {
2433
+ OdBaseDragger._needSkipPointerUp = value;
2434
+ }
2435
+ }
2436
+
2437
+ OdBaseDragger._isGestureActive = false;
2438
+
2439
+ OdBaseDragger._needSkipPointerUp = false;
2440
+
2441
+ class Options {
2442
+ constructor(emitter) {
2443
+ this._emitter = emitter;
2444
+ this._data = Options.defaults();
2445
+ this.loadFromStorage();
2446
+ }
2447
+ static defaults() {
2448
+ return {
2449
+ showWCS: true,
2450
+ cameraAnimation: true,
2451
+ antialiasing: true,
2452
+ groundShadow: false,
2453
+ shadows: false,
2454
+ cameraAxisXSpeed: 4,
2455
+ cameraAxisYSpeed: 1,
2456
+ ambientOcclusion: false,
2457
+ enableStreamingMode: true,
2458
+ enablePartialMode: false,
2459
+ memoryLimit: 3294967296,
2460
+ cuttingPlaneFillColor: {
2461
+ red: 255,
2462
+ green: 152,
2463
+ blue: 0
2464
+ },
2465
+ edgesColor: {
2466
+ r: 255,
2467
+ g: 152,
2468
+ b: 0
2469
+ },
2470
+ facesColor: {
2471
+ r: 255,
2472
+ g: 152,
2473
+ b: 0
2474
+ },
2475
+ edgesVisibility: true,
2476
+ edgesOverlap: true,
2477
+ facesOverlap: false,
2478
+ facesTransparancy: 200,
2479
+ enableCustomHighlight: true,
2480
+ sceneGraph: false,
2481
+ edgeModel: true,
2482
+ reverseZoomWheel: false,
2483
+ enableZoomWheel: true,
2484
+ enableGestures: true,
2485
+ geometryType: "vsfx"
2486
+ };
2487
+ }
2488
+ notifierChangeEvent() {
2489
+ if (this._emitter !== undefined) {
2490
+ this.saveToStorage();
2491
+ this._emitter.emit({
2492
+ type: "optionschange",
2493
+ data: this
2494
+ });
2495
+ }
2496
+ }
2497
+ saveToStorage() {
2498
+ if (typeof window !== "undefined") try {
2499
+ localStorage.setItem("od-client-settings", JSON.stringify(this.data));
2500
+ } catch (error) {
2501
+ console.error("Cannot save client settings.", error);
2502
+ }
2503
+ }
2504
+ loadFromStorage() {
2505
+ if (typeof window !== "undefined") try {
2506
+ const item = localStorage.getItem("od-client-settings");
2507
+ if (item) {
2508
+ const data = JSON.parse(item);
2509
+ this.data = {
2510
+ ...data
2511
+ };
2512
+ }
2513
+ } catch (error) {
2514
+ console.error("Cannot load client settings.", error);
2515
+ }
2516
+ }
2517
+ resetToDefaults(fields) {
2518
+ if (fields !== undefined) {
2519
+ const defaults = Options.defaults();
2520
+ const resetData = fields.reduce(((acc, field) => {
2521
+ acc[field] = defaults[field];
2522
+ return acc;
2523
+ }), {});
2524
+ this.data = {
2525
+ ...this.data,
2526
+ ...resetData
2527
+ };
2528
+ } else {
2529
+ this.data = {
2530
+ ...this.data,
2531
+ ...Options.defaults()
2532
+ };
2533
+ }
2534
+ }
2535
+ get data() {
2536
+ return this._data;
2537
+ }
2538
+ set data(value) {
2539
+ const sceneGraph = value.enablePartialMode ? false : value.sceneGraph;
2540
+ this._data = {
2541
+ ...Options.defaults(),
2542
+ ...this._data,
2543
+ ...value,
2544
+ sceneGraph: sceneGraph
2545
+ };
2546
+ this.notifierChangeEvent();
2547
+ }
2548
+ get showWCS() {
2549
+ return this._data.showWCS;
2550
+ }
2551
+ set showWCS(value) {
2552
+ this._data.showWCS = value;
2553
+ this.notifierChangeEvent();
2554
+ }
2555
+ get cameraAnimation() {
2556
+ return this._data.cameraAnimation;
2557
+ }
2558
+ set cameraAnimation(value) {
2559
+ this._data.cameraAnimation = value;
2560
+ this.notifierChangeEvent();
2561
+ }
2562
+ get antialiasing() {
2563
+ return this._data.antialiasing;
2564
+ }
2565
+ set antialiasing(value) {
2566
+ this._data.antialiasing = value;
2567
+ this.notifierChangeEvent();
2568
+ }
2569
+ get groundShadow() {
2570
+ return this._data.groundShadow;
2571
+ }
2572
+ set groundShadow(value) {
2573
+ this._data.groundShadow = value;
2574
+ this.notifierChangeEvent();
2575
+ }
2576
+ get shadows() {
2577
+ return this._data.shadows;
2578
+ }
2579
+ set shadows(value) {
2580
+ this._data.shadows = value;
2581
+ this.notifierChangeEvent();
2582
+ }
2583
+ get cameraAxisXSpeed() {
2584
+ return this._data.cameraAxisXSpeed;
2585
+ }
2586
+ set cameraAxisXSpeed(value) {
2587
+ this._data.cameraAxisXSpeed = value;
2588
+ this.notifierChangeEvent();
2589
+ }
2590
+ get cameraAxisYSpeed() {
2591
+ return this._data.cameraAxisYSpeed;
2592
+ }
2593
+ set cameraAxisYSpeed(value) {
2594
+ this.cameraAxisYSpeed = value;
2595
+ this.notifierChangeEvent();
2596
+ }
2597
+ get ambientOcclusion() {
2598
+ return this._data.ambientOcclusion;
2599
+ }
2600
+ set ambientOcclusion(value) {
2601
+ this._data.ambientOcclusion = value;
2602
+ this.notifierChangeEvent();
2603
+ }
2604
+ get enableStreamingMode() {
2605
+ return this._data.enableStreamingMode;
2606
+ }
2607
+ set enableStreamingMode(value) {
2608
+ this._data.enableStreamingMode = value;
2609
+ if (this._data.enableStreamingMode) {
2610
+ this._data.enablePartialMode = false;
2611
+ }
2612
+ this.notifierChangeEvent();
2613
+ }
2614
+ get enablePartialMode() {
2615
+ return this._data.enablePartialMode;
2616
+ }
2617
+ set enablePartialMode(value) {
2618
+ this._data.enablePartialMode = value;
2619
+ if (value) this._data.sceneGraph = false;
2620
+ this.notifierChangeEvent();
2621
+ }
2622
+ get memoryLimit() {
2623
+ return this._data.memoryLimit;
2624
+ }
2625
+ set memoryLimit(value) {
2626
+ this._data.memoryLimit = value;
2627
+ this.notifierChangeEvent();
2628
+ }
2629
+ get cuttingPlaneFillColor() {
2630
+ return this._data.cuttingPlaneFillColor;
2631
+ }
2632
+ set cuttingPlaneFillColor(value) {
2633
+ this._data.cuttingPlaneFillColor = value;
2634
+ this.notifierChangeEvent();
2635
+ }
2636
+ get edgesColor() {
2637
+ return this._data.edgesColor;
2638
+ }
2639
+ set edgesColor(value) {
2640
+ this._data.edgesColor = value;
2641
+ this.notifierChangeEvent();
2642
+ }
2643
+ get facesColor() {
2644
+ return this._data.facesColor;
2645
+ }
2646
+ set facesColor(value) {
2647
+ this._data.facesColor = value;
2648
+ this.notifierChangeEvent();
2649
+ }
2650
+ get edgesVisibility() {
2651
+ return this._data.edgesVisibility;
2467
2652
  }
2468
- toPoint(gePoint) {
2469
- return this.m_module.Point3d.createFromArray(gePoint);
2653
+ set edgesVisibility(value) {
2654
+ this._data.edgesVisibility = value;
2655
+ this.notifierChangeEvent();
2470
2656
  }
2471
- screenToWorld(x, y) {
2472
- return this.toPoint(this.m_module.getViewer().screenToWorld(x, y));
2657
+ get edgesOverlap() {
2658
+ return this._data.edgesOverlap;
2473
2659
  }
2474
- toDoubleArray(points) {
2475
- const p = [];
2476
- for (let i = 0; i < points.length; i++) {
2477
- p.push(points[i].x);
2478
- p.push(points[i].y);
2479
- p.push(points[i].z);
2480
- }
2481
- return p;
2660
+ set edgesOverlap(value) {
2661
+ this._data.edgesOverlap = value;
2662
+ this.notifierChangeEvent();
2482
2663
  }
2483
- correctCameraTarget() {
2484
- const params = this.getViewParams();
2485
- const ext = this.m_module.getViewer().getActiveExtents();
2486
- const {min: min, max: max} = ext;
2487
- const target = this.toPoint(params.target);
2488
- const contains = target.x >= min.x && target.y >= min.y && target.z >= min.z && target.x <= max.x && target.y <= max.y && target.z <= max.z;
2489
- if (!contains) {
2490
- params.target = ext.center();
2491
- this.setViewParams(params);
2492
- }
2664
+ get facesOverlap() {
2665
+ return this._data.facesOverlap;
2493
2666
  }
2494
- }
2495
-
2496
- const CLICK_DELTA = 5;
2497
-
2498
- const INTERACTIVITY_FPS = 24;
2499
-
2500
- class OdBaseDragger extends OdaGeAction {
2501
- constructor(subject) {
2502
- super(subject.visualizeJs);
2503
- this.beginInteractivity = () => {
2504
- const viewer = this.getViewer();
2505
- const view = viewer.activeView;
2506
- if (view["beginInteractivity"]) {
2507
- view.beginInteractivity(INTERACTIVITY_FPS);
2508
- this.subject.update();
2509
- }
2510
- view.delete();
2511
- };
2512
- this.endInteractivity = () => {
2513
- const viewer = this.getViewer();
2514
- const view = viewer.activeView;
2515
- if (view["endInteractivity"]) {
2516
- view.endInteractivity();
2517
- const device = this.getViewer().getActiveDevice();
2518
- const canvas = this.m_module.canvas;
2519
- device.invalidate([ 0, 0, canvas.width, canvas.height ]);
2520
- device.delete();
2521
- this.subject.update();
2522
- }
2523
- view.delete();
2524
- };
2525
- this.subject = subject;
2526
- this.needInputText = false;
2527
- this.mouseDownPosition = {
2528
- x: 0,
2529
- y: 0
2530
- };
2531
- this.autoSelect = false;
2532
- this.onmessage = event => this.subject.emitEvent(event);
2533
- this.canvasEvents = CANVAS_EVENTS;
2667
+ set facesOverlap(value) {
2668
+ this._data.facesOverlap = value;
2669
+ this.notifierChangeEvent();
2534
2670
  }
2535
- initialize() {
2536
- this.canvasEvents = this.canvasEvents.filter((x => typeof this[x] === "function"));
2537
- this.canvasEvents.forEach((x => this[x] = this[x].bind(this)));
2538
- this.canvasEvents.forEach((x => this.subject.on(x, this[x])));
2539
- this.getViewer().setEnableAutoSelect(!!this.autoSelect);
2671
+ get facesTransparancy() {
2672
+ return this._data.facesTransparancy;
2540
2673
  }
2541
- dispose() {
2542
- this.canvasEvents.forEach((x => this.subject.off(x, this[x])));
2674
+ set facesTransparancy(value) {
2675
+ this._data.facesTransparancy = value;
2676
+ this.notifierChangeEvent();
2543
2677
  }
2544
- relativeCoords(event) {
2545
- return {
2546
- x: event.offsetX * window.devicePixelRatio,
2547
- y: event.offsetY * window.devicePixelRatio
2548
- };
2678
+ get enableCustomHighlight() {
2679
+ return this._data.enableCustomHighlight;
2549
2680
  }
2550
- pointerdown(ev) {
2551
- if (!ev.isPrimary || OdBaseDragger.isGestureActive) {
2552
- return;
2553
- }
2554
- ev.target.setPointerCapture(ev.pointerId);
2555
- const relCoord = this.relativeCoords(ev);
2556
- this.isDragging = true;
2557
- this.mouseDownPosition = {
2558
- x: relCoord.x,
2559
- y: relCoord.y
2560
- };
2561
- this.start(relCoord.x, relCoord.y, ev.clientX, ev.clientY);
2562
- this.subject.update();
2681
+ set enableCustomHighlight(value) {
2682
+ this._data.enableCustomHighlight = value;
2683
+ this.notifierChangeEvent();
2563
2684
  }
2564
- pointerup(ev) {
2565
- if (OdBaseDragger.needSkipPointerUp) {
2566
- return;
2567
- }
2568
- if (!ev.isPrimary) {
2569
- return;
2570
- }
2571
- ev.target.releasePointerCapture(ev.pointerId);
2572
- const relCoord = this.relativeCoords(ev);
2573
- this.end(relCoord.x, relCoord.y);
2574
- this.isDragging = false;
2575
- this.subject.update();
2685
+ get sceneGraph() {
2686
+ return this._data.sceneGraph;
2576
2687
  }
2577
- pointercancel(ev) {
2578
- if (!ev.isPrimary) {
2579
- return;
2580
- }
2581
- this.m_module.canvas.dispatchEvent(new PointerEvent("pointerup", ev));
2688
+ set sceneGraph(value) {
2689
+ this._data.sceneGraph = value;
2690
+ if (value) this._data.enablePartialMode = false;
2691
+ this.notifierChangeEvent();
2582
2692
  }
2583
- pointermove(ev) {
2584
- if (!ev.isPrimary || OdBaseDragger.isGestureActive) {
2585
- return;
2586
- }
2587
- const relCoord = this.relativeCoords(ev);
2588
- this.drag(relCoord.x, relCoord.y, ev.movementX, ev.movementY);
2589
- if (this.isDragging) {
2590
- this.subject.update();
2591
- }
2693
+ get edgeModel() {
2694
+ return Boolean(this._data.edgeModel);
2592
2695
  }
2593
- click(ev) {
2594
- const viewer = this.getViewer();
2595
- const relCoord = this.relativeCoords(ev);
2596
- const x = relCoord.x;
2597
- const y = relCoord.y;
2598
- const isNotDragging = Math.abs(x - this.mouseDownPosition.x) < CLICK_DELTA && Math.abs(y - this.mouseDownPosition.y) < CLICK_DELTA;
2599
- if (viewer && viewer.getEnableAutoSelect() && isNotDragging) {
2600
- viewer.unselect();
2601
- viewer.select(x, y, x, y);
2602
- this.subject.update();
2603
- const selectionSet = viewer.getSelected();
2604
- const handles = this.subject.getSelected();
2605
- this.onmessage({
2606
- type: "select",
2607
- data: selectionSet,
2608
- handles: handles
2609
- });
2610
- }
2696
+ set edgeModel(value) {
2697
+ this._data.edgeModel = Boolean(value);
2698
+ this.notifierChangeEvent();
2611
2699
  }
2612
- dblclick(ev) {
2613
- const viewer = this.getViewer();
2614
- const relCoord = this.relativeCoords(ev);
2615
- const x = relCoord.x;
2616
- const y = relCoord.y;
2617
- const device = viewer.getActiveDevice();
2618
- const clickView = device.viewAt([ x, y ]);
2619
- if (clickView && !clickView.active) {
2620
- viewer.activeView = clickView;
2621
- clickView.delete();
2622
- this.subject.update();
2623
- } else {
2624
- if (viewer && viewer.getEnableAutoSelect()) {
2625
- const pSelected = viewer.getSelected();
2626
- if (!pSelected.isNull() && pSelected.numItems() !== 0) {
2627
- const itr = pSelected.getIterator();
2628
- const entity = itr.getEntity();
2629
- viewer.zoomToEntity(entity);
2630
- this.onmessage({
2631
- type: "zoomtoentity",
2632
- data: entity
2633
- });
2634
- this.subject.update();
2635
- this.deleteAll([ itr, entity ]);
2636
- }
2637
- }
2638
- }
2639
- device.delete();
2700
+ get reverseZoomWheel() {
2701
+ return this._data.reverseZoomWheel;
2640
2702
  }
2641
- start(x, y, absoluteX = 0, absoluteY = 0) {}
2642
- drag(x, y, absoluteX = 0, absoluteY = 0) {}
2643
- end(x, y) {}
2644
- getActiveMarkupEntity(entityName) {
2645
- return this.subject.addMarkupEntity(entityName);
2703
+ set reverseZoomWheel(value) {
2704
+ this._data.reverseZoomWheel = !!value;
2705
+ this.notifierChangeEvent();
2646
2706
  }
2647
- syncOverlayView() {
2648
- return this.subject.syncOverlay();
2707
+ get enableZoomWheel() {
2708
+ return this._data.enableZoomWheel;
2649
2709
  }
2650
- deleteAll(objects) {
2651
- var _a;
2652
- for (const obj of objects) {
2653
- (_a = obj === null || obj === void 0 ? void 0 : obj.delete) === null || _a === void 0 ? void 0 : _a.call(obj);
2654
- }
2710
+ set enableZoomWheel(value) {
2711
+ this._data.enableZoomWheel = !!value;
2712
+ this.notifierChangeEvent();
2655
2713
  }
2656
- updatePreview() {}
2657
- static set isGestureActive(value) {
2658
- if (OdBaseDragger._isGestureActive === value) {
2659
- return;
2660
- }
2661
- OdBaseDragger._isGestureActive = value;
2662
- if (OdBaseDragger._isGestureActive) {
2663
- OdBaseDragger.needSkipPointerUp = true;
2664
- }
2714
+ get enableGestures() {
2715
+ return this._data.enableGestures;
2665
2716
  }
2666
- static get isGestureActive() {
2667
- return OdBaseDragger._isGestureActive;
2717
+ set enableGestures(value) {
2718
+ this._data.enableGestures = !!value;
2719
+ this.notifierChangeEvent();
2668
2720
  }
2669
- static get needSkipPointerUp() {
2670
- if (OdBaseDragger._needSkipPointerUp) {
2671
- OdBaseDragger.needSkipPointerUp = false;
2672
- return true;
2673
- }
2674
- return false;
2721
+ get geometryType() {
2722
+ return this._data.geometryType;
2675
2723
  }
2676
- static set needSkipPointerUp(value) {
2677
- OdBaseDragger._needSkipPointerUp = value;
2724
+ set geometryType(value) {
2725
+ this._data.geometryType = value;
2726
+ this.notifierChangeEvent();
2678
2727
  }
2679
2728
  }
2680
2729
 
2681
- OdBaseDragger._isGestureActive = false;
2682
-
2683
- OdBaseDragger._needSkipPointerUp = false;
2684
-
2685
2730
  function createHtmlElementIfNeed(element, targetElement, dataTestId) {
2686
2731
  if (!element) {
2687
2732
  element = document.createElement("div");
@@ -6593,7 +6638,6 @@ class Viewer extends EventEmitter2 {
6593
6638
  this.configure(params);
6594
6639
  this._options = new Options(this);
6595
6640
  this.client = client;
6596
- this.clientoptionschange = event => this._options.data = event.data.data;
6597
6641
  this._activeDragger = null;
6598
6642
  this._renderTime = 0;
6599
6643
  this.markup = MarkupFactory.createMarkup((_a = params.markupType) !== null && _a !== void 0 ? _a : MarkupType.Konva);
@@ -6631,10 +6675,6 @@ class Viewer extends EventEmitter2 {
6631
6675
  return this;
6632
6676
  }
6633
6677
  async initialize(canvas, onProgress) {
6634
- if (this.client) {
6635
- this.client.addEventListener("optionschange", this.clientoptionschange);
6636
- this.options.data = this.client.options.data;
6637
- }
6638
6678
  this.addEventListener("optionschange", (event => this.syncOptions(event.data)));
6639
6679
  if (canvas.style.width === "" && canvas.style.height === "") {
6640
6680
  canvas.style.width = "100%";
@@ -6676,7 +6716,7 @@ class Viewer extends EventEmitter2 {
6676
6716
  return this;
6677
6717
  }
6678
6718
  dispose() {
6679
- var _a, _b, _c, _d, _e;
6719
+ var _a, _b, _c, _d;
6680
6720
  this.cancel();
6681
6721
  this.emitEvent({
6682
6722
  type: "dispose"
@@ -6697,7 +6737,6 @@ class Viewer extends EventEmitter2 {
6697
6737
  this.canvas = undefined;
6698
6738
  (_d = this.visualizeJs) === null || _d === void 0 ? void 0 : _d.getViewer().clear();
6699
6739
  this.visualizeJs = undefined;
6700
- (_e = this.client) === null || _e === void 0 ? void 0 : _e.removeEventListener("optionschange", this.clientoptionschange);
6701
6740
  return this;
6702
6741
  }
6703
6742
  isInitialized() {
@@ -7612,7 +7651,7 @@ function zoomToSelected(viewer) {
7612
7651
 
7613
7652
  commands("VisualizeJS").registerCommand("zoomToSelected", zoomToSelected);
7614
7653
 
7615
- const version = "25.3.9";
7654
+ const version = "25.3.10";
7616
7655
 
7617
7656
  export { Assembly, CANVAS_EVENTS, ClashTest, Client, EventEmitter2, File$1 as File, Job, Member, Model, OdBaseDragger, Options, Permission, Project, Role, User, Viewer, Viewer as VisualizejsViewer, commands, version };
7618
7657
  //# sourceMappingURL=client.module.js.map