3dviewer-sdk 1.0.12 → 1.0.14
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/dist/index.d.mts +60 -18
- package/dist/index.d.ts +60 -18
- package/dist/index.js +189 -63
- package/dist/index.mjs +189 -63
- package/package.json +8 -3
- package/dist/contracts/events.d.ts +0 -97
- package/dist/contracts/events.js +0 -1
- package/dist/contracts/messages.d.ts +0 -159
- package/dist/contracts/messages.js +0 -50
- package/dist/core/emitter.d.ts +0 -7
- package/dist/core/emitter.js +0 -31
- package/dist/modules/camera.module.d.ts +0 -13
- package/dist/modules/camera.module.js +0 -18
- package/dist/modules/files.module.d.ts +0 -112
- package/dist/modules/files.module.js +0 -461
- package/dist/modules/interaction.module.d.ts +0 -28
- package/dist/modules/interaction.module.js +0 -63
- package/dist/modules/language.module.d.ts +0 -8
- package/dist/modules/language.module.js +0 -15
- package/dist/modules/markup.module.d.ts +0 -26
- package/dist/modules/markup.module.js +0 -96
- package/dist/modules/model-tree.module.d.ts +0 -12
- package/dist/modules/model-tree.module.js +0 -42
- package/dist/modules/node.module.d.ts +0 -11
- package/dist/modules/node.module.js +0 -6
- package/dist/modules/toolbar.module.d.ts +0 -93
- package/dist/modules/toolbar.module.js +0 -249
- package/dist/viewer.d.ts +0 -54
- package/dist/viewer.js +0 -290
package/dist/index.mjs
CHANGED
|
@@ -119,8 +119,10 @@ var NodeModule = class {
|
|
|
119
119
|
};
|
|
120
120
|
|
|
121
121
|
// src/modules/files.module.ts
|
|
122
|
-
var DEFAULT_API_BASE_URL = "https://dev.3dviewer.anybim.vn";
|
|
122
|
+
var DEFAULT_API_BASE_URL = "https://dev.3dviewer.anybim.vn/service/conversion";
|
|
123
123
|
var DEFAULT_VIEWER_ORIGIN = "http://localhost:3000";
|
|
124
|
+
var SDK_VIEWER_PATH = "/mainviewer-sdk";
|
|
125
|
+
var LEGACY_VIEWER_PATH = "/mainviewer";
|
|
124
126
|
var FilesModule = class {
|
|
125
127
|
constructor(viewer) {
|
|
126
128
|
this.viewer = viewer;
|
|
@@ -270,12 +272,7 @@ var FilesModule = class {
|
|
|
270
272
|
const raw = this.config.baseUrl || this.viewer.getOptions().baseUrl || DEFAULT_API_BASE_URL;
|
|
271
273
|
return this.normalizeBaseUrl(raw);
|
|
272
274
|
}
|
|
273
|
-
// Resolve
|
|
274
|
-
resolveConversionBaseUrl() {
|
|
275
|
-
const raw = this.config.conversionBaseUrl || this.viewer.getOptions().conversionBaseUrl;
|
|
276
|
-
return (raw == null ? void 0 : raw.trim()) ? this.normalizeBaseUrl(raw) : this.resolveBaseUrl();
|
|
277
|
-
}
|
|
278
|
-
// Resolve viewer route path (e.g. /mainviewer).
|
|
275
|
+
// Resolve viewer route path for all SDK flows.
|
|
279
276
|
resolveViewerPath() {
|
|
280
277
|
const configuredPath = this.config.viewerPath || this.viewer.getOptions().viewerPath;
|
|
281
278
|
if (!configuredPath) {
|
|
@@ -283,36 +280,41 @@ var FilesModule = class {
|
|
|
283
280
|
if (viewerUrl) {
|
|
284
281
|
try {
|
|
285
282
|
const pathname = new URL(viewerUrl, window.location.href).pathname;
|
|
286
|
-
if (pathname && pathname !== "/") return pathname;
|
|
283
|
+
if (pathname && pathname !== "/") return this.normalizeSdkViewerPath(pathname);
|
|
287
284
|
} catch {
|
|
288
285
|
}
|
|
289
286
|
}
|
|
290
287
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
288
|
+
return this.normalizeSdkViewerPath(configuredPath || SDK_VIEWER_PATH);
|
|
289
|
+
}
|
|
290
|
+
normalizeSdkViewerPath(path) {
|
|
291
|
+
const p = path.trim();
|
|
292
|
+
if (!p || p === LEGACY_VIEWER_PATH) return SDK_VIEWER_PATH;
|
|
293
|
+
const normalized = p.startsWith("/") ? p : `/${p}`;
|
|
294
|
+
return normalized === LEGACY_VIEWER_PATH ? SDK_VIEWER_PATH : normalized;
|
|
294
295
|
}
|
|
295
296
|
// Viewer host used to open iframe after conversion completes.
|
|
296
297
|
resolveViewerOrigin() {
|
|
297
|
-
const
|
|
298
|
-
if (
|
|
298
|
+
const viewerUrl = this.viewer.getOptions().url;
|
|
299
|
+
if (viewerUrl) {
|
|
299
300
|
try {
|
|
300
|
-
return this.normalizeBaseUrl(new URL(
|
|
301
|
+
return this.normalizeBaseUrl(new URL(viewerUrl, window.location.href).origin);
|
|
301
302
|
} catch {
|
|
302
303
|
}
|
|
303
304
|
}
|
|
304
|
-
const
|
|
305
|
-
if (
|
|
305
|
+
const configuredBaseUrl = this.config.baseUrl || this.viewer.getOptions().baseUrl;
|
|
306
|
+
if (configuredBaseUrl) {
|
|
306
307
|
try {
|
|
307
|
-
return this.normalizeBaseUrl(new URL(
|
|
308
|
+
return this.normalizeBaseUrl(new URL(configuredBaseUrl, window.location.href).origin);
|
|
308
309
|
} catch {
|
|
309
310
|
}
|
|
310
311
|
}
|
|
311
312
|
return this.normalizeBaseUrl(DEFAULT_VIEWER_ORIGIN);
|
|
312
313
|
}
|
|
313
|
-
//
|
|
314
|
+
// Resolve conversion service root from configured API base URL.
|
|
315
|
+
// Do not auto-append path segments (e.g. "/service/conversion").
|
|
314
316
|
resolveHostConversion() {
|
|
315
|
-
return this.
|
|
317
|
+
return this.resolveBaseUrl();
|
|
316
318
|
}
|
|
317
319
|
// Resolve upload path sent to conversion APIs.
|
|
318
320
|
getUploadPath() {
|
|
@@ -430,6 +432,8 @@ var FilesModule = class {
|
|
|
430
432
|
originalFilePath: options.originalFilePath,
|
|
431
433
|
convertOptions,
|
|
432
434
|
downloadUrl: options.downloadUrl,
|
|
435
|
+
workflowId: options.workflowId,
|
|
436
|
+
taskId: options.taskId,
|
|
433
437
|
baseFileId: options.baseFileId,
|
|
434
438
|
baseMajorRev: (_a = options.baseMajorRev) != null ? _a : 0,
|
|
435
439
|
baseMinorRev: (_b = options.baseMinorRev) != null ? _b : 0
|
|
@@ -464,11 +468,11 @@ var FilesModule = class {
|
|
|
464
468
|
}
|
|
465
469
|
// Submit conversion request to the newer downloadUrl-based endpoint.
|
|
466
470
|
async cacheFileV2(options) {
|
|
471
|
+
var _a;
|
|
467
472
|
const hostConversion = await this.resolveHostConversion();
|
|
468
473
|
const params = new URLSearchParams();
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
}
|
|
474
|
+
params.set("overwrite", String((_a = options.overwrite) != null ? _a : true));
|
|
475
|
+
params.set("ignore_line_weight", "1");
|
|
472
476
|
if (options.project) {
|
|
473
477
|
params.set("project", options.project);
|
|
474
478
|
}
|
|
@@ -561,8 +565,8 @@ var FilesModule = class {
|
|
|
561
565
|
};
|
|
562
566
|
|
|
563
567
|
// src/modules/toolbar.module.ts
|
|
564
|
-
function createRequestId() {
|
|
565
|
-
return
|
|
568
|
+
function createRequestId(prefix) {
|
|
569
|
+
return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
|
|
566
570
|
}
|
|
567
571
|
var ALL_3D_TOOLBAR_OPERATORS = [
|
|
568
572
|
"home",
|
|
@@ -648,90 +652,78 @@ var ToolbarModule = class {
|
|
|
648
652
|
enableAllPdf() {
|
|
649
653
|
this.clearDisabledPdf();
|
|
650
654
|
}
|
|
651
|
-
|
|
652
|
-
this.
|
|
655
|
+
useToolbar(target = "all") {
|
|
656
|
+
this.postToolbarUse({ target });
|
|
653
657
|
}
|
|
654
|
-
|
|
655
|
-
this.
|
|
658
|
+
useLeftToolbar() {
|
|
659
|
+
this.useToolbar("left");
|
|
656
660
|
}
|
|
657
|
-
|
|
658
|
-
this.
|
|
661
|
+
useCenterToolbar() {
|
|
662
|
+
this.useToolbar("center");
|
|
659
663
|
}
|
|
660
|
-
|
|
661
|
-
this.
|
|
664
|
+
useRightToolbar() {
|
|
665
|
+
this.useToolbar("right");
|
|
662
666
|
}
|
|
663
|
-
|
|
664
|
-
this.
|
|
665
|
-
}
|
|
666
|
-
hideCenterToolbar() {
|
|
667
|
-
this.setToolbarVisible(false, "center");
|
|
668
|
-
}
|
|
669
|
-
showCenterToolbar() {
|
|
670
|
-
this.setToolbarVisible(true, "center");
|
|
671
|
-
}
|
|
672
|
-
hideRightToolbar() {
|
|
673
|
-
this.setToolbarVisible(false, "right");
|
|
674
|
-
}
|
|
675
|
-
showRightToolbar() {
|
|
676
|
-
this.setToolbarVisible(true, "right");
|
|
667
|
+
usePanel(panel, format) {
|
|
668
|
+
this.postPanelOpen({ panel, format });
|
|
677
669
|
}
|
|
678
670
|
openClippingPlanes() {
|
|
679
|
-
this.
|
|
671
|
+
this.usePanel("clipping-commands", "3d");
|
|
680
672
|
}
|
|
681
673
|
closeClippingPlanes() {
|
|
682
674
|
this.postPanelClose({ panel: "clipping-commands", format: "3d" });
|
|
683
675
|
}
|
|
684
676
|
openSetting() {
|
|
685
|
-
this.
|
|
677
|
+
this.usePanel("setting");
|
|
686
678
|
}
|
|
687
679
|
closeSetting() {
|
|
688
680
|
this.postPanelClose({ panel: "setting" });
|
|
689
681
|
}
|
|
690
682
|
openSetting3D() {
|
|
691
|
-
this.
|
|
683
|
+
this.usePanel("setting", "3d");
|
|
692
684
|
}
|
|
693
685
|
closeSetting3D() {
|
|
694
686
|
this.postPanelClose({ panel: "setting", format: "3d" });
|
|
695
687
|
}
|
|
696
688
|
openSettingPdf() {
|
|
697
|
-
this.
|
|
689
|
+
this.usePanel("setting", "pdf");
|
|
698
690
|
}
|
|
699
691
|
closeSettingPdf() {
|
|
700
692
|
this.postPanelClose({ panel: "setting", format: "pdf" });
|
|
701
693
|
}
|
|
702
694
|
openStatesObjects() {
|
|
703
|
-
this.
|
|
695
|
+
this.usePanel("statesObjects", "3d");
|
|
704
696
|
}
|
|
705
697
|
closeStatesObjects() {
|
|
706
698
|
this.postPanelClose({ panel: "statesObjects", format: "3d" });
|
|
707
699
|
}
|
|
708
700
|
openLinkedObjects() {
|
|
709
|
-
this.
|
|
701
|
+
this.usePanel("linkedObjects", "3d");
|
|
710
702
|
}
|
|
711
703
|
closeLinkedObjects() {
|
|
712
704
|
this.postPanelClose({ panel: "linkedObjects", format: "3d" });
|
|
713
705
|
}
|
|
714
706
|
openModelTree() {
|
|
715
|
-
this.
|
|
707
|
+
this.usePanel("model-tree", "3d");
|
|
716
708
|
}
|
|
717
709
|
closeModelTree() {
|
|
718
710
|
this.postPanelClose({ panel: "model-tree", format: "3d" });
|
|
719
711
|
}
|
|
720
712
|
openObjectProperties() {
|
|
721
|
-
this.
|
|
713
|
+
this.usePanel("object-properties", "3d");
|
|
722
714
|
}
|
|
723
715
|
closeObjectProperties() {
|
|
724
716
|
this.postPanelClose({ panel: "object-properties", format: "3d" });
|
|
725
717
|
}
|
|
726
718
|
openSheets() {
|
|
727
|
-
this.
|
|
719
|
+
this.usePanel("sheets", "3d");
|
|
728
720
|
}
|
|
729
721
|
closeSheets() {
|
|
730
722
|
this.postPanelClose({ panel: "sheets", format: "3d" });
|
|
731
723
|
}
|
|
732
724
|
getSheets(options) {
|
|
733
725
|
var _a;
|
|
734
|
-
const requestId = createRequestId();
|
|
726
|
+
const requestId = createRequestId("sheets");
|
|
735
727
|
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
736
728
|
return new Promise((resolve, reject) => {
|
|
737
729
|
const timer = setTimeout(() => {
|
|
@@ -747,6 +739,60 @@ var ToolbarModule = class {
|
|
|
747
739
|
this.postSheetsGetList({ requestId });
|
|
748
740
|
});
|
|
749
741
|
}
|
|
742
|
+
getObjectProperties(options) {
|
|
743
|
+
var _a;
|
|
744
|
+
const requestId = createRequestId("object_properties");
|
|
745
|
+
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
746
|
+
return new Promise((resolve, reject) => {
|
|
747
|
+
const timer = setTimeout(() => {
|
|
748
|
+
off();
|
|
749
|
+
reject(new Error("Timeout while getting object properties list from viewer"));
|
|
750
|
+
}, timeoutMs);
|
|
751
|
+
const off = this.viewer._on("object-properties:list", (payload) => {
|
|
752
|
+
if (payload.requestId !== requestId) return;
|
|
753
|
+
clearTimeout(timer);
|
|
754
|
+
off();
|
|
755
|
+
resolve(payload.properties);
|
|
756
|
+
});
|
|
757
|
+
this.postObjectPropertiesGetList({ requestId });
|
|
758
|
+
});
|
|
759
|
+
}
|
|
760
|
+
getLinkedObjects(options) {
|
|
761
|
+
var _a;
|
|
762
|
+
const requestId = createRequestId("linked_objects");
|
|
763
|
+
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
764
|
+
return new Promise((resolve, reject) => {
|
|
765
|
+
const timer = setTimeout(() => {
|
|
766
|
+
off();
|
|
767
|
+
reject(new Error("Timeout while getting linked objects list from viewer"));
|
|
768
|
+
}, timeoutMs);
|
|
769
|
+
const off = this.viewer._on("linked-objects:list", (payload) => {
|
|
770
|
+
if (payload.requestId !== requestId) return;
|
|
771
|
+
clearTimeout(timer);
|
|
772
|
+
off();
|
|
773
|
+
resolve(payload.linkedObjects);
|
|
774
|
+
});
|
|
775
|
+
this.postLinkedObjectsGetList({ requestId });
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
getStatesObjects(options) {
|
|
779
|
+
var _a;
|
|
780
|
+
const requestId = createRequestId("states_objects");
|
|
781
|
+
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
782
|
+
return new Promise((resolve, reject) => {
|
|
783
|
+
const timer = setTimeout(() => {
|
|
784
|
+
off();
|
|
785
|
+
reject(new Error("Timeout while getting states objects list from viewer"));
|
|
786
|
+
}, timeoutMs);
|
|
787
|
+
const off = this.viewer._on("states-objects:list", (payload) => {
|
|
788
|
+
if (payload.requestId !== requestId) return;
|
|
789
|
+
clearTimeout(timer);
|
|
790
|
+
off();
|
|
791
|
+
resolve(payload.statesObjects);
|
|
792
|
+
});
|
|
793
|
+
this.postStatesObjectsGetList({ requestId });
|
|
794
|
+
});
|
|
795
|
+
}
|
|
750
796
|
applySheet(sheetId) {
|
|
751
797
|
this.postSheetsApply({ sheetId });
|
|
752
798
|
}
|
|
@@ -789,8 +835,8 @@ var ToolbarModule = class {
|
|
|
789
835
|
postConfig(payload) {
|
|
790
836
|
this.viewer.postToViewer("viewer-toolbar-config" /* TOOLBAR_CONFIG */, payload);
|
|
791
837
|
}
|
|
792
|
-
|
|
793
|
-
this.viewer.postToViewer("viewer-toolbar-
|
|
838
|
+
postToolbarUse(payload) {
|
|
839
|
+
this.viewer.postToViewer("viewer-toolbar-use" /* TOOLBAR_USE */, payload);
|
|
794
840
|
}
|
|
795
841
|
postPanelOpen(payload) {
|
|
796
842
|
this.viewer.postToViewer("viewer-panel-open" /* PANEL_OPEN */, payload);
|
|
@@ -807,6 +853,15 @@ var ToolbarModule = class {
|
|
|
807
853
|
postSheetsApply(payload) {
|
|
808
854
|
this.viewer.postToViewer("viewer-sheets-apply" /* SHEETS_APPLY */, payload);
|
|
809
855
|
}
|
|
856
|
+
postObjectPropertiesGetList(payload) {
|
|
857
|
+
this.viewer.postToViewer("viewer-object-properties-get-list" /* OBJECT_PROPERTIES_GET_LIST */, payload);
|
|
858
|
+
}
|
|
859
|
+
postLinkedObjectsGetList(payload) {
|
|
860
|
+
this.viewer.postToViewer("viewer-linked-objects-get-list" /* LINKED_OBJECTS_GET_LIST */, payload);
|
|
861
|
+
}
|
|
862
|
+
postStatesObjectsGetList(payload) {
|
|
863
|
+
this.viewer.postToViewer("viewer-states-objects-get-list" /* STATES_OBJECTS_GET_LIST */, payload);
|
|
864
|
+
}
|
|
810
865
|
};
|
|
811
866
|
|
|
812
867
|
// src/modules/model-tree.module.ts
|
|
@@ -963,6 +1018,8 @@ var LanguageModule = class {
|
|
|
963
1018
|
};
|
|
964
1019
|
|
|
965
1020
|
// src/viewer.ts
|
|
1021
|
+
var SDK_VIEWER_PATH2 = "/mainviewer-sdk";
|
|
1022
|
+
var LEGACY_VIEWER_PATH2 = "/mainviewer";
|
|
966
1023
|
var Viewer3D = class {
|
|
967
1024
|
constructor(options) {
|
|
968
1025
|
this.options = options;
|
|
@@ -1067,6 +1124,54 @@ var Viewer3D = class {
|
|
|
1067
1124
|
});
|
|
1068
1125
|
break;
|
|
1069
1126
|
}
|
|
1127
|
+
case "viewer-object-properties-list" /* OBJECT_PROPERTIES_LIST */: {
|
|
1128
|
+
const payload = data.payload;
|
|
1129
|
+
if (!payload || !payload.requestId || !Array.isArray(payload.properties)) break;
|
|
1130
|
+
this._emit("object-properties:list", {
|
|
1131
|
+
requestId: String(payload.requestId),
|
|
1132
|
+
properties: payload.properties.filter((item) => item && typeof item === "object").map((item) => ({ ...item })),
|
|
1133
|
+
timestamp: Number(payload.timestamp) || Date.now()
|
|
1134
|
+
});
|
|
1135
|
+
break;
|
|
1136
|
+
}
|
|
1137
|
+
case "viewer-linked-objects-list" /* LINKED_OBJECTS_LIST */: {
|
|
1138
|
+
const payload = data.payload;
|
|
1139
|
+
if (!payload || !payload.requestId || !Array.isArray(payload.linkedObjects)) break;
|
|
1140
|
+
this._emit("linked-objects:list", {
|
|
1141
|
+
requestId: String(payload.requestId),
|
|
1142
|
+
linkedObjects: payload.linkedObjects.filter((item) => item && typeof item === "object").map((item) => ({ ...item })),
|
|
1143
|
+
timestamp: Number(payload.timestamp) || Date.now()
|
|
1144
|
+
});
|
|
1145
|
+
break;
|
|
1146
|
+
}
|
|
1147
|
+
case "viewer-states-objects-list" /* STATES_OBJECTS_LIST */: {
|
|
1148
|
+
const payload = data.payload;
|
|
1149
|
+
if (!payload || !payload.requestId || !Array.isArray(payload.statesObjects)) break;
|
|
1150
|
+
this._emit("states-objects:list", {
|
|
1151
|
+
requestId: String(payload.requestId),
|
|
1152
|
+
statesObjects: payload.statesObjects.map((item) => {
|
|
1153
|
+
var _a2, _b2, _c2, _d2, _e, _f, _g;
|
|
1154
|
+
return {
|
|
1155
|
+
id: String((_a2 = item.id) != null ? _a2 : ""),
|
|
1156
|
+
name: String((_b2 = item.name) != null ? _b2 : ""),
|
|
1157
|
+
char: String((_c2 = item.char) != null ? _c2 : ""),
|
|
1158
|
+
object: Array.isArray(item.object) ? item.object.map((objectItem) => {
|
|
1159
|
+
var _a3;
|
|
1160
|
+
return {
|
|
1161
|
+
name: String((_a3 = objectItem == null ? void 0 : objectItem.name) != null ? _a3 : ""),
|
|
1162
|
+
id: Number(objectItem == null ? void 0 : objectItem.id) || 0
|
|
1163
|
+
};
|
|
1164
|
+
}) : [],
|
|
1165
|
+
states: {
|
|
1166
|
+
color: String((_e = (_d2 = item.states) == null ? void 0 : _d2.color) != null ? _e : ""),
|
|
1167
|
+
type: String((_g = (_f = item.states) == null ? void 0 : _f.type) != null ? _g : "")
|
|
1168
|
+
}
|
|
1169
|
+
};
|
|
1170
|
+
}),
|
|
1171
|
+
timestamp: Number(payload.timestamp) || Date.now()
|
|
1172
|
+
});
|
|
1173
|
+
break;
|
|
1174
|
+
}
|
|
1070
1175
|
case "viewer-markup-list" /* MARKUP_LIST */: {
|
|
1071
1176
|
const payload = data.payload;
|
|
1072
1177
|
if (!payload || !payload.requestId || !Array.isArray(payload.markups)) break;
|
|
@@ -1186,18 +1291,39 @@ var Viewer3D = class {
|
|
|
1186
1291
|
if (!this.initialized) throw new Error("Call viewer.init() before using viewer");
|
|
1187
1292
|
}
|
|
1188
1293
|
withInitialOptions(url) {
|
|
1189
|
-
if (!this.options.initialToolbarVisibility) return url;
|
|
1190
1294
|
try {
|
|
1191
1295
|
const parsedUrl = new URL(url, window.location.href);
|
|
1192
|
-
parsedUrl.
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
);
|
|
1296
|
+
if (parsedUrl.pathname === LEGACY_VIEWER_PATH2) {
|
|
1297
|
+
parsedUrl.pathname = SDK_VIEWER_PATH2;
|
|
1298
|
+
}
|
|
1299
|
+
const initialToolbar = this.normalizeInitialToolbar();
|
|
1300
|
+
if (initialToolbar) {
|
|
1301
|
+
parsedUrl.searchParams.set("useToolbar", JSON.stringify(initialToolbar));
|
|
1302
|
+
}
|
|
1196
1303
|
return parsedUrl.toString();
|
|
1197
1304
|
} catch {
|
|
1198
1305
|
return url;
|
|
1199
1306
|
}
|
|
1200
1307
|
}
|
|
1308
|
+
normalizeInitialToolbar() {
|
|
1309
|
+
const initialToolbar = this.options.initialToolbar;
|
|
1310
|
+
if (!initialToolbar) return null;
|
|
1311
|
+
if (typeof initialToolbar === "string") {
|
|
1312
|
+
return { [initialToolbar]: true };
|
|
1313
|
+
}
|
|
1314
|
+
if (Array.isArray(initialToolbar)) {
|
|
1315
|
+
return initialToolbar.reduce((result, target) => {
|
|
1316
|
+
result[target] = true;
|
|
1317
|
+
return result;
|
|
1318
|
+
}, {});
|
|
1319
|
+
}
|
|
1320
|
+
const entries = Object.entries(initialToolbar).filter(([, enabled]) => enabled === true);
|
|
1321
|
+
if (entries.length === 0) return null;
|
|
1322
|
+
return entries.reduce((result, [target]) => {
|
|
1323
|
+
result[target] = true;
|
|
1324
|
+
return result;
|
|
1325
|
+
}, {});
|
|
1326
|
+
}
|
|
1201
1327
|
// ===== typed internal events used by modules =====
|
|
1202
1328
|
_on(event, cb) {
|
|
1203
1329
|
return this.emitter.on(event, cb);
|
package/package.json
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "3dviewer-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist"
|
|
8
8
|
],
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build": "tsup src/index.ts --format cjs,esm --dts --no-splitting"
|
|
10
|
+
"build": "tsup src/index.ts --format cjs,esm --dts --no-splitting",
|
|
11
|
+
"test": "vitest run tests",
|
|
12
|
+
"test:watch": "vitest tests"
|
|
11
13
|
},
|
|
12
14
|
"devDependencies": {
|
|
15
|
+
"@vitest/coverage-v8": "^4.1.4",
|
|
16
|
+
"jsdom": "^29.0.2",
|
|
13
17
|
"tsup": "^8.5.1",
|
|
14
|
-
"typescript": "^5.9.3"
|
|
18
|
+
"typescript": "^5.9.3",
|
|
19
|
+
"vitest": "^4.1.4"
|
|
15
20
|
}
|
|
16
21
|
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import type { MarkupListItem, MarkupOperationResultPayload, PdfCurrentPagePayload, PdfModeEventPayload, PdfToolbarActionEventPayload } from "./messages";
|
|
2
|
-
export declare type ViewerEventMap = {
|
|
3
|
-
"camera:home": {
|
|
4
|
-
timestamp: number;
|
|
5
|
-
};
|
|
6
|
-
"node:select": {
|
|
7
|
-
nodeId: string;
|
|
8
|
-
timestamp: number;
|
|
9
|
-
};
|
|
10
|
-
"interaction:pan-change": {
|
|
11
|
-
enabled: boolean;
|
|
12
|
-
};
|
|
13
|
-
"toolbar:pdf-plan-mode": PdfModeEventPayload;
|
|
14
|
-
"toolbar:pdf-document-mode": PdfModeEventPayload;
|
|
15
|
-
"toolbar:pdf-first-page": PdfToolbarActionEventPayload;
|
|
16
|
-
"toolbar:pdf-previous-page": PdfToolbarActionEventPayload;
|
|
17
|
-
"toolbar:pdf-next-page": PdfToolbarActionEventPayload;
|
|
18
|
-
"toolbar:pdf-last-page": PdfToolbarActionEventPayload;
|
|
19
|
-
"toolbar:pdf-current-page": PdfCurrentPagePayload;
|
|
20
|
-
"modelTree:node-ids": {
|
|
21
|
-
requestId: string;
|
|
22
|
-
nodeIds: string[];
|
|
23
|
-
timestamp: number;
|
|
24
|
-
};
|
|
25
|
-
"sheets:list": {
|
|
26
|
-
requestId: string;
|
|
27
|
-
sheets: {
|
|
28
|
-
id: string | number;
|
|
29
|
-
name: string;
|
|
30
|
-
is3D?: boolean;
|
|
31
|
-
viewId?: string;
|
|
32
|
-
}[];
|
|
33
|
-
activeSheetId?: string | number | null;
|
|
34
|
-
timestamp: number;
|
|
35
|
-
};
|
|
36
|
-
"markup:list": {
|
|
37
|
-
requestId: string;
|
|
38
|
-
markups: MarkupListItem[];
|
|
39
|
-
timestamp: number;
|
|
40
|
-
};
|
|
41
|
-
"markup:save": MarkupOperationResultPayload;
|
|
42
|
-
"markup:cancel": MarkupOperationResultPayload;
|
|
43
|
-
};
|
|
44
|
-
export declare type LoadStage = "idle" | "uploading" | "converting" | "rendering" | "completed" | "error";
|
|
45
|
-
export declare type LoadStatePayload = {
|
|
46
|
-
isLoading: boolean;
|
|
47
|
-
stage: LoadStage;
|
|
48
|
-
message?: string;
|
|
49
|
-
elapsedMs?: number;
|
|
50
|
-
};
|
|
51
|
-
export declare type PreparedViewerData = {
|
|
52
|
-
baseFileId: string;
|
|
53
|
-
baseMajorRev: number;
|
|
54
|
-
baseMinorRev: number;
|
|
55
|
-
fileName: string;
|
|
56
|
-
query: string;
|
|
57
|
-
url: string;
|
|
58
|
-
};
|
|
59
|
-
export declare type FilesEventMap = {
|
|
60
|
-
"files:state": LoadStatePayload;
|
|
61
|
-
"files:upload:start": {
|
|
62
|
-
fileName: string;
|
|
63
|
-
};
|
|
64
|
-
"files:upload:success": {
|
|
65
|
-
fileName: string;
|
|
66
|
-
baseFileId: string;
|
|
67
|
-
};
|
|
68
|
-
"files:upload:error": {
|
|
69
|
-
fileName: string;
|
|
70
|
-
error: string;
|
|
71
|
-
};
|
|
72
|
-
"files:conversion:start": {
|
|
73
|
-
fileName: string;
|
|
74
|
-
};
|
|
75
|
-
"files:conversion:success": PreparedViewerData;
|
|
76
|
-
"files:conversion:error": {
|
|
77
|
-
fileName: string;
|
|
78
|
-
error: string;
|
|
79
|
-
};
|
|
80
|
-
"files:render:start": {
|
|
81
|
-
url: string;
|
|
82
|
-
};
|
|
83
|
-
"files:render:success": {
|
|
84
|
-
url: string;
|
|
85
|
-
};
|
|
86
|
-
"files:render:error": {
|
|
87
|
-
url?: string;
|
|
88
|
-
error: string;
|
|
89
|
-
};
|
|
90
|
-
"files:load:success": PreparedViewerData;
|
|
91
|
-
"files:load:error": {
|
|
92
|
-
error: string;
|
|
93
|
-
};
|
|
94
|
-
};
|
|
95
|
-
export declare type SdkEventMap = ViewerEventMap & FilesEventMap;
|
|
96
|
-
export declare type SdkEventKey = keyof SdkEventMap;
|
|
97
|
-
export declare type SdkEventPayload<K extends SdkEventKey> = SdkEventMap[K];
|
package/dist/contracts/events.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|