3dviewer-sdk 1.0.12 → 1.0.13
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 +58 -18
- package/dist/index.d.ts +58 -18
- package/dist/index.js +192 -63
- package/dist/index.mjs +192 -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.js
CHANGED
|
@@ -147,6 +147,8 @@ var NodeModule = class {
|
|
|
147
147
|
// src/modules/files.module.ts
|
|
148
148
|
var DEFAULT_API_BASE_URL = "https://dev.3dviewer.anybim.vn";
|
|
149
149
|
var DEFAULT_VIEWER_ORIGIN = "http://localhost:3000";
|
|
150
|
+
var SDK_VIEWER_PATH = "/mainviewer-sdk";
|
|
151
|
+
var LEGACY_VIEWER_PATH = "/mainviewer";
|
|
150
152
|
var FilesModule = class {
|
|
151
153
|
constructor(viewer) {
|
|
152
154
|
this.viewer = viewer;
|
|
@@ -296,12 +298,7 @@ var FilesModule = class {
|
|
|
296
298
|
const raw = this.config.baseUrl || this.viewer.getOptions().baseUrl || DEFAULT_API_BASE_URL;
|
|
297
299
|
return this.normalizeBaseUrl(raw);
|
|
298
300
|
}
|
|
299
|
-
// Resolve
|
|
300
|
-
resolveConversionBaseUrl() {
|
|
301
|
-
const raw = this.config.conversionBaseUrl || this.viewer.getOptions().conversionBaseUrl;
|
|
302
|
-
return (raw == null ? void 0 : raw.trim()) ? this.normalizeBaseUrl(raw) : this.resolveBaseUrl();
|
|
303
|
-
}
|
|
304
|
-
// Resolve viewer route path (e.g. /mainviewer).
|
|
301
|
+
// Resolve viewer route path for all SDK flows.
|
|
305
302
|
resolveViewerPath() {
|
|
306
303
|
const configuredPath = this.config.viewerPath || this.viewer.getOptions().viewerPath;
|
|
307
304
|
if (!configuredPath) {
|
|
@@ -309,36 +306,46 @@ var FilesModule = class {
|
|
|
309
306
|
if (viewerUrl) {
|
|
310
307
|
try {
|
|
311
308
|
const pathname = new URL(viewerUrl, window.location.href).pathname;
|
|
312
|
-
if (pathname && pathname !== "/") return pathname;
|
|
309
|
+
if (pathname && pathname !== "/") return this.normalizeSdkViewerPath(pathname);
|
|
313
310
|
} catch {
|
|
314
311
|
}
|
|
315
312
|
}
|
|
316
313
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
314
|
+
return this.normalizeSdkViewerPath(configuredPath || SDK_VIEWER_PATH);
|
|
315
|
+
}
|
|
316
|
+
normalizeSdkViewerPath(path) {
|
|
317
|
+
const p = path.trim();
|
|
318
|
+
if (!p || p === LEGACY_VIEWER_PATH) return SDK_VIEWER_PATH;
|
|
319
|
+
const normalized = p.startsWith("/") ? p : `/${p}`;
|
|
320
|
+
return normalized === LEGACY_VIEWER_PATH ? SDK_VIEWER_PATH : normalized;
|
|
320
321
|
}
|
|
321
322
|
// Viewer host used to open iframe after conversion completes.
|
|
322
323
|
resolveViewerOrigin() {
|
|
323
|
-
const
|
|
324
|
-
if (
|
|
324
|
+
const viewerUrl = this.viewer.getOptions().url;
|
|
325
|
+
if (viewerUrl) {
|
|
325
326
|
try {
|
|
326
|
-
return this.normalizeBaseUrl(new URL(
|
|
327
|
+
return this.normalizeBaseUrl(new URL(viewerUrl, window.location.href).origin);
|
|
327
328
|
} catch {
|
|
328
329
|
}
|
|
329
330
|
}
|
|
330
|
-
const
|
|
331
|
-
if (
|
|
331
|
+
const configuredBaseUrl = this.config.baseUrl || this.viewer.getOptions().baseUrl;
|
|
332
|
+
if (configuredBaseUrl) {
|
|
332
333
|
try {
|
|
333
|
-
return this.normalizeBaseUrl(new URL(
|
|
334
|
+
return this.normalizeBaseUrl(new URL(configuredBaseUrl, window.location.href).origin);
|
|
334
335
|
} catch {
|
|
335
336
|
}
|
|
336
337
|
}
|
|
337
338
|
return this.normalizeBaseUrl(DEFAULT_VIEWER_ORIGIN);
|
|
338
339
|
}
|
|
339
|
-
//
|
|
340
|
+
// Build conversion service root from API base URL.
|
|
340
341
|
resolveHostConversion() {
|
|
341
|
-
|
|
342
|
+
const baseUrl = this.resolveBaseUrl();
|
|
343
|
+
try {
|
|
344
|
+
const parsed = new URL(baseUrl, window.location.href);
|
|
345
|
+
if (parsed.hostname.includes("conversion")) return baseUrl;
|
|
346
|
+
} catch {
|
|
347
|
+
}
|
|
348
|
+
return baseUrl.endsWith("/service/conversion") ? baseUrl : `${baseUrl}/service/conversion`;
|
|
342
349
|
}
|
|
343
350
|
// Resolve upload path sent to conversion APIs.
|
|
344
351
|
getUploadPath() {
|
|
@@ -490,16 +497,16 @@ var FilesModule = class {
|
|
|
490
497
|
}
|
|
491
498
|
// Submit conversion request to the newer downloadUrl-based endpoint.
|
|
492
499
|
async cacheFileV2(options) {
|
|
500
|
+
var _a;
|
|
493
501
|
const hostConversion = await this.resolveHostConversion();
|
|
494
502
|
const params = new URLSearchParams();
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
}
|
|
503
|
+
params.set("overwrite", String((_a = options.overwrite) != null ? _a : true));
|
|
504
|
+
params.set("ignore_line_weight", "1");
|
|
498
505
|
if (options.project) {
|
|
499
506
|
params.set("project", options.project);
|
|
500
507
|
}
|
|
501
508
|
const query = params.toString();
|
|
502
|
-
const url = `${hostConversion}/api/StreamFile
|
|
509
|
+
const url = `${hostConversion}/api/StreamFile${query ? `?${query}` : ""}`;
|
|
503
510
|
const payload = this.buildConvertV2Payload(options);
|
|
504
511
|
const response = await fetch(url, {
|
|
505
512
|
method: "POST",
|
|
@@ -587,8 +594,8 @@ var FilesModule = class {
|
|
|
587
594
|
};
|
|
588
595
|
|
|
589
596
|
// src/modules/toolbar.module.ts
|
|
590
|
-
function createRequestId() {
|
|
591
|
-
return
|
|
597
|
+
function createRequestId(prefix) {
|
|
598
|
+
return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
|
|
592
599
|
}
|
|
593
600
|
var ALL_3D_TOOLBAR_OPERATORS = [
|
|
594
601
|
"home",
|
|
@@ -674,90 +681,78 @@ var ToolbarModule = class {
|
|
|
674
681
|
enableAllPdf() {
|
|
675
682
|
this.clearDisabledPdf();
|
|
676
683
|
}
|
|
677
|
-
|
|
678
|
-
this.
|
|
679
|
-
}
|
|
680
|
-
showToolbar() {
|
|
681
|
-
this.setToolbarVisible(true);
|
|
682
|
-
}
|
|
683
|
-
setToolbarVisible(visible, target = "all") {
|
|
684
|
-
this.postToolbarVisibility({ visible, target });
|
|
685
|
-
}
|
|
686
|
-
hideLeftToolbar() {
|
|
687
|
-
this.setToolbarVisible(false, "left");
|
|
684
|
+
useToolbar(target = "all") {
|
|
685
|
+
this.postToolbarUse({ target });
|
|
688
686
|
}
|
|
689
|
-
|
|
690
|
-
this.
|
|
687
|
+
useLeftToolbar() {
|
|
688
|
+
this.useToolbar("left");
|
|
691
689
|
}
|
|
692
|
-
|
|
693
|
-
this.
|
|
690
|
+
useCenterToolbar() {
|
|
691
|
+
this.useToolbar("center");
|
|
694
692
|
}
|
|
695
|
-
|
|
696
|
-
this.
|
|
693
|
+
useRightToolbar() {
|
|
694
|
+
this.useToolbar("right");
|
|
697
695
|
}
|
|
698
|
-
|
|
699
|
-
this.
|
|
700
|
-
}
|
|
701
|
-
showRightToolbar() {
|
|
702
|
-
this.setToolbarVisible(true, "right");
|
|
696
|
+
usePanel(panel, format) {
|
|
697
|
+
this.postPanelOpen({ panel, format });
|
|
703
698
|
}
|
|
704
699
|
openClippingPlanes() {
|
|
705
|
-
this.
|
|
700
|
+
this.usePanel("clipping-commands", "3d");
|
|
706
701
|
}
|
|
707
702
|
closeClippingPlanes() {
|
|
708
703
|
this.postPanelClose({ panel: "clipping-commands", format: "3d" });
|
|
709
704
|
}
|
|
710
705
|
openSetting() {
|
|
711
|
-
this.
|
|
706
|
+
this.usePanel("setting");
|
|
712
707
|
}
|
|
713
708
|
closeSetting() {
|
|
714
709
|
this.postPanelClose({ panel: "setting" });
|
|
715
710
|
}
|
|
716
711
|
openSetting3D() {
|
|
717
|
-
this.
|
|
712
|
+
this.usePanel("setting", "3d");
|
|
718
713
|
}
|
|
719
714
|
closeSetting3D() {
|
|
720
715
|
this.postPanelClose({ panel: "setting", format: "3d" });
|
|
721
716
|
}
|
|
722
717
|
openSettingPdf() {
|
|
723
|
-
this.
|
|
718
|
+
this.usePanel("setting", "pdf");
|
|
724
719
|
}
|
|
725
720
|
closeSettingPdf() {
|
|
726
721
|
this.postPanelClose({ panel: "setting", format: "pdf" });
|
|
727
722
|
}
|
|
728
723
|
openStatesObjects() {
|
|
729
|
-
this.
|
|
724
|
+
this.usePanel("statesObjects", "3d");
|
|
730
725
|
}
|
|
731
726
|
closeStatesObjects() {
|
|
732
727
|
this.postPanelClose({ panel: "statesObjects", format: "3d" });
|
|
733
728
|
}
|
|
734
729
|
openLinkedObjects() {
|
|
735
|
-
this.
|
|
730
|
+
this.usePanel("linkedObjects", "3d");
|
|
736
731
|
}
|
|
737
732
|
closeLinkedObjects() {
|
|
738
733
|
this.postPanelClose({ panel: "linkedObjects", format: "3d" });
|
|
739
734
|
}
|
|
740
735
|
openModelTree() {
|
|
741
|
-
this.
|
|
736
|
+
this.usePanel("model-tree", "3d");
|
|
742
737
|
}
|
|
743
738
|
closeModelTree() {
|
|
744
739
|
this.postPanelClose({ panel: "model-tree", format: "3d" });
|
|
745
740
|
}
|
|
746
741
|
openObjectProperties() {
|
|
747
|
-
this.
|
|
742
|
+
this.usePanel("object-properties", "3d");
|
|
748
743
|
}
|
|
749
744
|
closeObjectProperties() {
|
|
750
745
|
this.postPanelClose({ panel: "object-properties", format: "3d" });
|
|
751
746
|
}
|
|
752
747
|
openSheets() {
|
|
753
|
-
this.
|
|
748
|
+
this.usePanel("sheets", "3d");
|
|
754
749
|
}
|
|
755
750
|
closeSheets() {
|
|
756
751
|
this.postPanelClose({ panel: "sheets", format: "3d" });
|
|
757
752
|
}
|
|
758
753
|
getSheets(options) {
|
|
759
754
|
var _a;
|
|
760
|
-
const requestId = createRequestId();
|
|
755
|
+
const requestId = createRequestId("sheets");
|
|
761
756
|
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
762
757
|
return new Promise((resolve, reject) => {
|
|
763
758
|
const timer = setTimeout(() => {
|
|
@@ -773,6 +768,60 @@ var ToolbarModule = class {
|
|
|
773
768
|
this.postSheetsGetList({ requestId });
|
|
774
769
|
});
|
|
775
770
|
}
|
|
771
|
+
getObjectProperties(options) {
|
|
772
|
+
var _a;
|
|
773
|
+
const requestId = createRequestId("object_properties");
|
|
774
|
+
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
775
|
+
return new Promise((resolve, reject) => {
|
|
776
|
+
const timer = setTimeout(() => {
|
|
777
|
+
off();
|
|
778
|
+
reject(new Error("Timeout while getting object properties list from viewer"));
|
|
779
|
+
}, timeoutMs);
|
|
780
|
+
const off = this.viewer._on("object-properties:list", (payload) => {
|
|
781
|
+
if (payload.requestId !== requestId) return;
|
|
782
|
+
clearTimeout(timer);
|
|
783
|
+
off();
|
|
784
|
+
resolve(payload.properties);
|
|
785
|
+
});
|
|
786
|
+
this.postObjectPropertiesGetList({ requestId });
|
|
787
|
+
});
|
|
788
|
+
}
|
|
789
|
+
getLinkedObjects(options) {
|
|
790
|
+
var _a;
|
|
791
|
+
const requestId = createRequestId("linked_objects");
|
|
792
|
+
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
793
|
+
return new Promise((resolve, reject) => {
|
|
794
|
+
const timer = setTimeout(() => {
|
|
795
|
+
off();
|
|
796
|
+
reject(new Error("Timeout while getting linked objects list from viewer"));
|
|
797
|
+
}, timeoutMs);
|
|
798
|
+
const off = this.viewer._on("linked-objects:list", (payload) => {
|
|
799
|
+
if (payload.requestId !== requestId) return;
|
|
800
|
+
clearTimeout(timer);
|
|
801
|
+
off();
|
|
802
|
+
resolve(payload.linkedObjects);
|
|
803
|
+
});
|
|
804
|
+
this.postLinkedObjectsGetList({ requestId });
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
getStatesObjects(options) {
|
|
808
|
+
var _a;
|
|
809
|
+
const requestId = createRequestId("states_objects");
|
|
810
|
+
const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
|
|
811
|
+
return new Promise((resolve, reject) => {
|
|
812
|
+
const timer = setTimeout(() => {
|
|
813
|
+
off();
|
|
814
|
+
reject(new Error("Timeout while getting states objects list from viewer"));
|
|
815
|
+
}, timeoutMs);
|
|
816
|
+
const off = this.viewer._on("states-objects:list", (payload) => {
|
|
817
|
+
if (payload.requestId !== requestId) return;
|
|
818
|
+
clearTimeout(timer);
|
|
819
|
+
off();
|
|
820
|
+
resolve(payload.statesObjects);
|
|
821
|
+
});
|
|
822
|
+
this.postStatesObjectsGetList({ requestId });
|
|
823
|
+
});
|
|
824
|
+
}
|
|
776
825
|
applySheet(sheetId) {
|
|
777
826
|
this.postSheetsApply({ sheetId });
|
|
778
827
|
}
|
|
@@ -815,8 +864,8 @@ var ToolbarModule = class {
|
|
|
815
864
|
postConfig(payload) {
|
|
816
865
|
this.viewer.postToViewer("viewer-toolbar-config" /* TOOLBAR_CONFIG */, payload);
|
|
817
866
|
}
|
|
818
|
-
|
|
819
|
-
this.viewer.postToViewer("viewer-toolbar-
|
|
867
|
+
postToolbarUse(payload) {
|
|
868
|
+
this.viewer.postToViewer("viewer-toolbar-use" /* TOOLBAR_USE */, payload);
|
|
820
869
|
}
|
|
821
870
|
postPanelOpen(payload) {
|
|
822
871
|
this.viewer.postToViewer("viewer-panel-open" /* PANEL_OPEN */, payload);
|
|
@@ -833,6 +882,15 @@ var ToolbarModule = class {
|
|
|
833
882
|
postSheetsApply(payload) {
|
|
834
883
|
this.viewer.postToViewer("viewer-sheets-apply" /* SHEETS_APPLY */, payload);
|
|
835
884
|
}
|
|
885
|
+
postObjectPropertiesGetList(payload) {
|
|
886
|
+
this.viewer.postToViewer("viewer-object-properties-get-list" /* OBJECT_PROPERTIES_GET_LIST */, payload);
|
|
887
|
+
}
|
|
888
|
+
postLinkedObjectsGetList(payload) {
|
|
889
|
+
this.viewer.postToViewer("viewer-linked-objects-get-list" /* LINKED_OBJECTS_GET_LIST */, payload);
|
|
890
|
+
}
|
|
891
|
+
postStatesObjectsGetList(payload) {
|
|
892
|
+
this.viewer.postToViewer("viewer-states-objects-get-list" /* STATES_OBJECTS_GET_LIST */, payload);
|
|
893
|
+
}
|
|
836
894
|
};
|
|
837
895
|
|
|
838
896
|
// src/modules/model-tree.module.ts
|
|
@@ -989,6 +1047,8 @@ var LanguageModule = class {
|
|
|
989
1047
|
};
|
|
990
1048
|
|
|
991
1049
|
// src/viewer.ts
|
|
1050
|
+
var SDK_VIEWER_PATH2 = "/mainviewer-sdk";
|
|
1051
|
+
var LEGACY_VIEWER_PATH2 = "/mainviewer";
|
|
992
1052
|
var Viewer3D = class {
|
|
993
1053
|
constructor(options) {
|
|
994
1054
|
this.options = options;
|
|
@@ -1093,6 +1153,54 @@ var Viewer3D = class {
|
|
|
1093
1153
|
});
|
|
1094
1154
|
break;
|
|
1095
1155
|
}
|
|
1156
|
+
case "viewer-object-properties-list" /* OBJECT_PROPERTIES_LIST */: {
|
|
1157
|
+
const payload = data.payload;
|
|
1158
|
+
if (!payload || !payload.requestId || !Array.isArray(payload.properties)) break;
|
|
1159
|
+
this._emit("object-properties:list", {
|
|
1160
|
+
requestId: String(payload.requestId),
|
|
1161
|
+
properties: payload.properties.filter((item) => item && typeof item === "object").map((item) => ({ ...item })),
|
|
1162
|
+
timestamp: Number(payload.timestamp) || Date.now()
|
|
1163
|
+
});
|
|
1164
|
+
break;
|
|
1165
|
+
}
|
|
1166
|
+
case "viewer-linked-objects-list" /* LINKED_OBJECTS_LIST */: {
|
|
1167
|
+
const payload = data.payload;
|
|
1168
|
+
if (!payload || !payload.requestId || !Array.isArray(payload.linkedObjects)) break;
|
|
1169
|
+
this._emit("linked-objects:list", {
|
|
1170
|
+
requestId: String(payload.requestId),
|
|
1171
|
+
linkedObjects: payload.linkedObjects.filter((item) => item && typeof item === "object").map((item) => ({ ...item })),
|
|
1172
|
+
timestamp: Number(payload.timestamp) || Date.now()
|
|
1173
|
+
});
|
|
1174
|
+
break;
|
|
1175
|
+
}
|
|
1176
|
+
case "viewer-states-objects-list" /* STATES_OBJECTS_LIST */: {
|
|
1177
|
+
const payload = data.payload;
|
|
1178
|
+
if (!payload || !payload.requestId || !Array.isArray(payload.statesObjects)) break;
|
|
1179
|
+
this._emit("states-objects:list", {
|
|
1180
|
+
requestId: String(payload.requestId),
|
|
1181
|
+
statesObjects: payload.statesObjects.map((item) => {
|
|
1182
|
+
var _a2, _b2, _c2, _d2, _e, _f, _g;
|
|
1183
|
+
return {
|
|
1184
|
+
id: String((_a2 = item.id) != null ? _a2 : ""),
|
|
1185
|
+
name: String((_b2 = item.name) != null ? _b2 : ""),
|
|
1186
|
+
char: String((_c2 = item.char) != null ? _c2 : ""),
|
|
1187
|
+
object: Array.isArray(item.object) ? item.object.map((objectItem) => {
|
|
1188
|
+
var _a3;
|
|
1189
|
+
return {
|
|
1190
|
+
name: String((_a3 = objectItem == null ? void 0 : objectItem.name) != null ? _a3 : ""),
|
|
1191
|
+
id: Number(objectItem == null ? void 0 : objectItem.id) || 0
|
|
1192
|
+
};
|
|
1193
|
+
}) : [],
|
|
1194
|
+
states: {
|
|
1195
|
+
color: String((_e = (_d2 = item.states) == null ? void 0 : _d2.color) != null ? _e : ""),
|
|
1196
|
+
type: String((_g = (_f = item.states) == null ? void 0 : _f.type) != null ? _g : "")
|
|
1197
|
+
}
|
|
1198
|
+
};
|
|
1199
|
+
}),
|
|
1200
|
+
timestamp: Number(payload.timestamp) || Date.now()
|
|
1201
|
+
});
|
|
1202
|
+
break;
|
|
1203
|
+
}
|
|
1096
1204
|
case "viewer-markup-list" /* MARKUP_LIST */: {
|
|
1097
1205
|
const payload = data.payload;
|
|
1098
1206
|
if (!payload || !payload.requestId || !Array.isArray(payload.markups)) break;
|
|
@@ -1212,18 +1320,39 @@ var Viewer3D = class {
|
|
|
1212
1320
|
if (!this.initialized) throw new Error("Call viewer.init() before using viewer");
|
|
1213
1321
|
}
|
|
1214
1322
|
withInitialOptions(url) {
|
|
1215
|
-
if (!this.options.initialToolbarVisibility) return url;
|
|
1216
1323
|
try {
|
|
1217
1324
|
const parsedUrl = new URL(url, window.location.href);
|
|
1218
|
-
parsedUrl.
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
);
|
|
1325
|
+
if (parsedUrl.pathname === LEGACY_VIEWER_PATH2) {
|
|
1326
|
+
parsedUrl.pathname = SDK_VIEWER_PATH2;
|
|
1327
|
+
}
|
|
1328
|
+
const initialToolbar = this.normalizeInitialToolbar();
|
|
1329
|
+
if (initialToolbar) {
|
|
1330
|
+
parsedUrl.searchParams.set("useToolbar", JSON.stringify(initialToolbar));
|
|
1331
|
+
}
|
|
1222
1332
|
return parsedUrl.toString();
|
|
1223
1333
|
} catch {
|
|
1224
1334
|
return url;
|
|
1225
1335
|
}
|
|
1226
1336
|
}
|
|
1337
|
+
normalizeInitialToolbar() {
|
|
1338
|
+
const initialToolbar = this.options.initialToolbar;
|
|
1339
|
+
if (!initialToolbar) return null;
|
|
1340
|
+
if (typeof initialToolbar === "string") {
|
|
1341
|
+
return { [initialToolbar]: true };
|
|
1342
|
+
}
|
|
1343
|
+
if (Array.isArray(initialToolbar)) {
|
|
1344
|
+
return initialToolbar.reduce((result, target) => {
|
|
1345
|
+
result[target] = true;
|
|
1346
|
+
return result;
|
|
1347
|
+
}, {});
|
|
1348
|
+
}
|
|
1349
|
+
const entries = Object.entries(initialToolbar).filter(([, enabled]) => enabled === true);
|
|
1350
|
+
if (entries.length === 0) return null;
|
|
1351
|
+
return entries.reduce((result, [target]) => {
|
|
1352
|
+
result[target] = true;
|
|
1353
|
+
return result;
|
|
1354
|
+
}, {});
|
|
1355
|
+
}
|
|
1227
1356
|
// ===== typed internal events used by modules =====
|
|
1228
1357
|
_on(event, cb) {
|
|
1229
1358
|
return this.emitter.on(event, cb);
|