3dviewer-sdk 1.0.1 → 1.0.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.
@@ -0,0 +1,97 @@
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];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,153 @@
1
+ export declare enum ViewerMessageType {
2
+ LANGUAGE_CHANGE = "viewer-language-change",
3
+ ZOOM = "viewer-zoom",
4
+ DRAW_MODE = "viewer-draw-mode",
5
+ EXPLODE = "viewer-explode",
6
+ MARKUP_ACTION = "viewer-markup-action",
7
+ MARKUP_SAVE = "viewer-markup-save",
8
+ MARKUP_CANCEL = "viewer-markup-cancel",
9
+ MARKUP_GET_LIST = "viewer-markup-get-list",
10
+ MARKUP_SAVE_RESULT = "viewer-markup-save-result",
11
+ MARKUP_CANCEL_RESULT = "viewer-markup-cancel-result",
12
+ MARKUP_LIST = "viewer-markup-list",
13
+ HOME = "viewer-home",
14
+ PAN_TOGGLE = "viewer-pan-toggle",
15
+ SELECT = "viewer-select",
16
+ AREA_SELECT = "viewer-area-select",
17
+ ORBIT = "viewer-orbit",
18
+ ROTATE_Z = "viewer-rotate-z",
19
+ WALK_THROUGH = "viewer-walk-through",
20
+ ZOOM_WINDOW = "viewer-zoom-window",
21
+ ZOOM_FIT = "viewer-zoom-fit",
22
+ TOOLBAR_CONFIG = "viewer-toolbar-config",
23
+ PANEL_OPEN = "viewer-panel-open",
24
+ PANEL_CLOSE = "viewer-panel-close",
25
+ CUTTING_PLANE_ACTION = "viewer-cutting-plane-action",
26
+ SHEETS_GET_LIST = "viewer-sheets-get-list",
27
+ SHEETS_LIST = "viewer-sheets-list",
28
+ SHEETS_APPLY = "viewer-sheets-apply",
29
+ TREE_SELECT_NODE = "viewer-tree-select-node",
30
+ TREE_GET_NODE_IDS = "viewer-tree-get-node-ids",
31
+ TREE_NODE_IDS = "viewer-tree-node-ids",
32
+ PDF_PLAN_MODE = "viewer-pdf-plan-mode",
33
+ PDF_DOCUMENT_MODE = "viewer-pdf-document-mode",
34
+ PDF_FIRST_PAGE = "viewer-pdf-first-page",
35
+ PDF_PREVIOUS_PAGE = "viewer-pdf-previous-page",
36
+ PDF_NEXT_PAGE = "viewer-pdf-next-page",
37
+ PDF_LAST_PAGE = "viewer-pdf-last-page",
38
+ PDF_CURRENT_PAGE = "viewer-pdf-current-page",
39
+ HOME_CLICK = "viewer-home-click",
40
+ NODE_SELECT = "viewer-node-select",
41
+ PAN_CHANGE = "viewer-pan-change"
42
+ }
43
+ export declare enum ViewerMessageSource {
44
+ SDK = "HC_SDK",
45
+ VIEWER = "HC_VIEWER"
46
+ }
47
+ export declare type OutgoingMessage<T = unknown> = {
48
+ source: ViewerMessageSource.SDK;
49
+ type: ViewerMessageType;
50
+ payload?: T;
51
+ };
52
+ export declare type IncomingMessage<T = any> = {
53
+ source?: ViewerMessageSource | string;
54
+ type: ViewerMessageType;
55
+ payload?: T;
56
+ };
57
+ export declare type LanguageCode = "en" | "vn";
58
+ export declare type LanguageChangePayload = {
59
+ language: LanguageCode;
60
+ timestamp?: number;
61
+ };
62
+ export declare type DrawModeValue = "shaded" | "wireframe" | "hidden-line" | "shaded-wire" | "xray" | "ghosting";
63
+ export declare type DrawModePayload = {
64
+ mode: DrawModeValue;
65
+ };
66
+ export declare type ExplodePayload = {
67
+ magnitude: number;
68
+ };
69
+ export declare type MarkupAction = "line" | "arrow" | "circle" | "ellipse" | "rectangle" | "polygon" | "polyline" | "textbox" | "note" | "callout" | "cloud" | "freehand";
70
+ export declare type MarkupActionPayload = {
71
+ action: MarkupAction;
72
+ };
73
+ export declare type MarkupRequestPayload = {
74
+ requestId: string;
75
+ };
76
+ export declare type MarkupOperationResultPayload = {
77
+ requestId: string;
78
+ success: boolean;
79
+ timestamp: number;
80
+ error?: string;
81
+ };
82
+ export declare type MarkupListItem = {
83
+ id: string;
84
+ viewId: string;
85
+ viewName?: string;
86
+ title: string;
87
+ type: string;
88
+ shapeName?: string;
89
+ createdDate?: string;
90
+ modifiedDate?: string;
91
+ createdBy?: string;
92
+ lastModifiedBy?: string;
93
+ };
94
+ export declare type MarkupListPayload = {
95
+ requestId: string;
96
+ markups: MarkupListItem[];
97
+ timestamp: number;
98
+ };
99
+ export declare type PanelTarget = "clipping-commands" | "setting" | "statesObjects" | "linkedObjects" | "model-tree" | "sheets" | "object-properties";
100
+ export declare type PanelOpenPayload = {
101
+ panel: PanelTarget;
102
+ format?: "3d" | "pdf";
103
+ };
104
+ export declare type PanelClosePayload = {
105
+ panel: PanelTarget;
106
+ format?: "3d" | "pdf";
107
+ };
108
+ export declare type CuttingPlaneAction = "close" | "multi" | "toggle-section" | "toggle-plane" | "plane-x" | "plane-y" | "plane-z" | "plane-box" | "rotate-box" | "reverse-plane-x" | "reverse-plane-y" | "reverse-plane-z";
109
+ export declare type CuttingPlaneActionPayload = {
110
+ action: CuttingPlaneAction;
111
+ };
112
+ export declare type SheetsGetListPayload = {
113
+ requestId: string;
114
+ };
115
+ export declare type SheetListItem = {
116
+ id: string | number;
117
+ name: string;
118
+ is3D?: boolean;
119
+ viewId?: string;
120
+ };
121
+ export declare type SheetsListPayload = {
122
+ requestId: string;
123
+ sheets: SheetListItem[];
124
+ activeSheetId?: string | number | null;
125
+ timestamp: number;
126
+ };
127
+ export declare type SheetsApplyPayload = {
128
+ sheetId: string | number;
129
+ };
130
+ export declare type TreeSelectNodePayload = {
131
+ nodeId: string;
132
+ };
133
+ export declare type TreeGetNodeIdsPayload = {
134
+ requestId: string;
135
+ onlyRealNodes?: boolean;
136
+ };
137
+ export declare type TreeNodeIdsPayload = {
138
+ requestId: string;
139
+ nodeIds: string[];
140
+ timestamp: number;
141
+ };
142
+ export declare type PdfModeEventPayload = {
143
+ mode: "plan" | "document";
144
+ timestamp: number;
145
+ };
146
+ export declare type PdfToolbarActionEventPayload = {
147
+ timestamp: number;
148
+ };
149
+ export declare type PdfCurrentPagePayload = {
150
+ pageIndex: number;
151
+ pageNumber: number;
152
+ timestamp: number;
153
+ };
@@ -0,0 +1,49 @@
1
+ // sdk/src/contracts/messages.ts
2
+ export var ViewerMessageType;
3
+ (function (ViewerMessageType) {
4
+ ViewerMessageType["LANGUAGE_CHANGE"] = "viewer-language-change";
5
+ ViewerMessageType["ZOOM"] = "viewer-zoom";
6
+ ViewerMessageType["DRAW_MODE"] = "viewer-draw-mode";
7
+ ViewerMessageType["EXPLODE"] = "viewer-explode";
8
+ ViewerMessageType["MARKUP_ACTION"] = "viewer-markup-action";
9
+ ViewerMessageType["MARKUP_SAVE"] = "viewer-markup-save";
10
+ ViewerMessageType["MARKUP_CANCEL"] = "viewer-markup-cancel";
11
+ ViewerMessageType["MARKUP_GET_LIST"] = "viewer-markup-get-list";
12
+ ViewerMessageType["MARKUP_SAVE_RESULT"] = "viewer-markup-save-result";
13
+ ViewerMessageType["MARKUP_CANCEL_RESULT"] = "viewer-markup-cancel-result";
14
+ ViewerMessageType["MARKUP_LIST"] = "viewer-markup-list";
15
+ ViewerMessageType["HOME"] = "viewer-home";
16
+ ViewerMessageType["PAN_TOGGLE"] = "viewer-pan-toggle";
17
+ ViewerMessageType["SELECT"] = "viewer-select";
18
+ ViewerMessageType["AREA_SELECT"] = "viewer-area-select";
19
+ ViewerMessageType["ORBIT"] = "viewer-orbit";
20
+ ViewerMessageType["ROTATE_Z"] = "viewer-rotate-z";
21
+ ViewerMessageType["WALK_THROUGH"] = "viewer-walk-through";
22
+ ViewerMessageType["ZOOM_WINDOW"] = "viewer-zoom-window";
23
+ ViewerMessageType["ZOOM_FIT"] = "viewer-zoom-fit";
24
+ ViewerMessageType["TOOLBAR_CONFIG"] = "viewer-toolbar-config";
25
+ ViewerMessageType["PANEL_OPEN"] = "viewer-panel-open";
26
+ ViewerMessageType["PANEL_CLOSE"] = "viewer-panel-close";
27
+ ViewerMessageType["CUTTING_PLANE_ACTION"] = "viewer-cutting-plane-action";
28
+ ViewerMessageType["SHEETS_GET_LIST"] = "viewer-sheets-get-list";
29
+ ViewerMessageType["SHEETS_LIST"] = "viewer-sheets-list";
30
+ ViewerMessageType["SHEETS_APPLY"] = "viewer-sheets-apply";
31
+ ViewerMessageType["TREE_SELECT_NODE"] = "viewer-tree-select-node";
32
+ ViewerMessageType["TREE_GET_NODE_IDS"] = "viewer-tree-get-node-ids";
33
+ ViewerMessageType["TREE_NODE_IDS"] = "viewer-tree-node-ids";
34
+ ViewerMessageType["PDF_PLAN_MODE"] = "viewer-pdf-plan-mode";
35
+ ViewerMessageType["PDF_DOCUMENT_MODE"] = "viewer-pdf-document-mode";
36
+ ViewerMessageType["PDF_FIRST_PAGE"] = "viewer-pdf-first-page";
37
+ ViewerMessageType["PDF_PREVIOUS_PAGE"] = "viewer-pdf-previous-page";
38
+ ViewerMessageType["PDF_NEXT_PAGE"] = "viewer-pdf-next-page";
39
+ ViewerMessageType["PDF_LAST_PAGE"] = "viewer-pdf-last-page";
40
+ ViewerMessageType["PDF_CURRENT_PAGE"] = "viewer-pdf-current-page";
41
+ ViewerMessageType["HOME_CLICK"] = "viewer-home-click";
42
+ ViewerMessageType["NODE_SELECT"] = "viewer-node-select";
43
+ ViewerMessageType["PAN_CHANGE"] = "viewer-pan-change";
44
+ })(ViewerMessageType || (ViewerMessageType = {}));
45
+ export var ViewerMessageSource;
46
+ (function (ViewerMessageSource) {
47
+ ViewerMessageSource["SDK"] = "HC_SDK";
48
+ ViewerMessageSource["VIEWER"] = "HC_VIEWER";
49
+ })(ViewerMessageSource || (ViewerMessageSource = {}));
@@ -0,0 +1,7 @@
1
+ export declare class Emitter<EventMap extends Record<string, any>> {
2
+ private listeners;
3
+ on<K extends keyof EventMap>(event: K, cb: (payload: EventMap[K]) => void): () => void;
4
+ off<K extends keyof EventMap>(event: K, cb: (payload: EventMap[K]) => void): void;
5
+ emit<K extends keyof EventMap>(event: K, payload: EventMap[K]): void;
6
+ clear(): void;
7
+ }
@@ -0,0 +1,31 @@
1
+ // sdk/src/core/emitter.ts
2
+ export class Emitter {
3
+ constructor() {
4
+ this.listeners = {};
5
+ }
6
+ on(event, cb) {
7
+ if (!this.listeners[event]) {
8
+ this.listeners[event] = [];
9
+ }
10
+ const arr = this.listeners[event];
11
+ arr.push(cb);
12
+ return () => this.off(event, cb);
13
+ }
14
+ off(event, cb) {
15
+ const arr = this.listeners[event];
16
+ if (!arr)
17
+ return;
18
+ const idx = arr.indexOf(cb);
19
+ if (idx >= 0)
20
+ arr.splice(idx, 1);
21
+ if (arr.length === 0)
22
+ delete this.listeners[event];
23
+ }
24
+ emit(event, payload) {
25
+ var _a;
26
+ (_a = this.listeners[event]) === null || _a === void 0 ? void 0 : _a.forEach((cb) => cb(payload));
27
+ }
28
+ clear() {
29
+ this.listeners = {};
30
+ }
31
+ }
package/dist/index.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  declare enum ViewerMessageType {
2
+ LANGUAGE_CHANGE = "viewer-language-change",
2
3
  ZOOM = "viewer-zoom",
3
4
  DRAW_MODE = "viewer-draw-mode",
4
5
  EXPLODE = "viewer-explode",
@@ -28,10 +29,18 @@ declare enum ViewerMessageType {
28
29
  TREE_SELECT_NODE = "viewer-tree-select-node",
29
30
  TREE_GET_NODE_IDS = "viewer-tree-get-node-ids",
30
31
  TREE_NODE_IDS = "viewer-tree-node-ids",
32
+ PDF_PLAN_MODE = "viewer-pdf-plan-mode",
33
+ PDF_DOCUMENT_MODE = "viewer-pdf-document-mode",
34
+ PDF_FIRST_PAGE = "viewer-pdf-first-page",
35
+ PDF_PREVIOUS_PAGE = "viewer-pdf-previous-page",
36
+ PDF_NEXT_PAGE = "viewer-pdf-next-page",
37
+ PDF_LAST_PAGE = "viewer-pdf-last-page",
38
+ PDF_CURRENT_PAGE = "viewer-pdf-current-page",
31
39
  HOME_CLICK = "viewer-home-click",
32
40
  NODE_SELECT = "viewer-node-select",
33
41
  PAN_CHANGE = "viewer-pan-change"
34
42
  }
43
+ type LanguageCode = "en" | "vn";
35
44
  type MarkupAction = "line" | "arrow" | "circle" | "ellipse" | "rectangle" | "polygon" | "polyline" | "textbox" | "note" | "callout" | "cloud" | "freehand";
36
45
  type MarkupOperationResultPayload = {
37
46
  requestId: string;
@@ -57,6 +66,18 @@ type SheetListItem = {
57
66
  is3D?: boolean;
58
67
  viewId?: string;
59
68
  };
69
+ type PdfModeEventPayload = {
70
+ mode: "plan" | "document";
71
+ timestamp: number;
72
+ };
73
+ type PdfToolbarActionEventPayload = {
74
+ timestamp: number;
75
+ };
76
+ type PdfCurrentPagePayload = {
77
+ pageIndex: number;
78
+ pageNumber: number;
79
+ timestamp: number;
80
+ };
60
81
 
61
82
  type ViewerEventMap = {
62
83
  "camera:home": {
@@ -69,6 +90,13 @@ type ViewerEventMap = {
69
90
  "interaction:pan-change": {
70
91
  enabled: boolean;
71
92
  };
93
+ "toolbar:pdf-plan-mode": PdfModeEventPayload;
94
+ "toolbar:pdf-document-mode": PdfModeEventPayload;
95
+ "toolbar:pdf-first-page": PdfToolbarActionEventPayload;
96
+ "toolbar:pdf-previous-page": PdfToolbarActionEventPayload;
97
+ "toolbar:pdf-next-page": PdfToolbarActionEventPayload;
98
+ "toolbar:pdf-last-page": PdfToolbarActionEventPayload;
99
+ "toolbar:pdf-current-page": PdfCurrentPagePayload;
72
100
  "modelTree:node-ids": {
73
101
  requestId: string;
74
102
  nodeIds: string[];
@@ -205,6 +233,9 @@ type FilesConfig = {
205
233
  viewerPath?: string;
206
234
  uploadPath?: string;
207
235
  };
236
+ type ConvertOptions = {
237
+ downloadUrl?: string;
238
+ };
208
239
  declare class FilesModule {
209
240
  private viewer;
210
241
  on: {
@@ -254,12 +285,12 @@ declare class FilesModule {
254
285
  fileName: string;
255
286
  baseFileId: string;
256
287
  }>;
257
- convert(file?: File): Promise<PreparedViewerData>;
258
- prepare(file?: File): Promise<PreparedViewerData>;
288
+ convert(file?: File, options?: ConvertOptions): Promise<PreparedViewerData>;
289
+ prepare(file?: File, options?: ConvertOptions): Promise<PreparedViewerData>;
259
290
  open(input: PreparedViewerData | {
260
291
  url: string;
261
292
  }): void;
262
- render(file?: File): Promise<PreparedViewerData>;
293
+ render(file?: File, options?: ConvertOptions): Promise<PreparedViewerData>;
263
294
  private resolveFile;
264
295
  private normalizeBaseUrl;
265
296
  private resolveBaseUrl;
@@ -285,6 +316,33 @@ type GetSheetsOptions = {
285
316
  };
286
317
  declare class ToolbarModule {
287
318
  private viewer;
319
+ on: {
320
+ planMode: (cb: (payload: {
321
+ mode: "plan" | "document";
322
+ timestamp: number;
323
+ }) => void) => () => void;
324
+ documentMode: (cb: (payload: {
325
+ mode: "plan" | "document";
326
+ timestamp: number;
327
+ }) => void) => () => void;
328
+ firstPage: (cb: (payload: {
329
+ timestamp: number;
330
+ }) => void) => () => void;
331
+ previousPage: (cb: (payload: {
332
+ timestamp: number;
333
+ }) => void) => () => void;
334
+ nextPage: (cb: (payload: {
335
+ timestamp: number;
336
+ }) => void) => () => void;
337
+ lastPage: (cb: (payload: {
338
+ timestamp: number;
339
+ }) => void) => () => void;
340
+ currentPage: (cb: (payload: {
341
+ pageIndex: number;
342
+ pageNumber: number;
343
+ timestamp: number;
344
+ }) => void) => () => void;
345
+ };
288
346
  constructor(viewer: Viewer3D);
289
347
  setDisabled3D(operators: string[]): void;
290
348
  setDisabledPdf(operators: string[]): void;
@@ -371,6 +429,13 @@ declare class MarkupModule {
371
429
  private runRequest;
372
430
  }
373
431
 
432
+ declare class LanguageModule {
433
+ private viewer;
434
+ constructor(viewer: Viewer3D);
435
+ change(language: LanguageCode): void;
436
+ set(language: LanguageCode): void;
437
+ }
438
+
374
439
  type Viewer3DOptions = {
375
440
  container: HTMLElement | string;
376
441
  url?: string;
@@ -396,6 +461,7 @@ declare class Viewer3D {
396
461
  toolbar: ToolbarModule;
397
462
  modelTree: ModelTreeModule;
398
463
  markup: MarkupModule;
464
+ language: LanguageModule;
399
465
  constructor(options: Viewer3DOptions);
400
466
  getOptions(): Viewer3DOptions;
401
467
  patchOptions(next: Partial<Viewer3DOptions>): void;
@@ -412,4 +478,4 @@ declare class Viewer3D {
412
478
  private handleMessage;
413
479
  }
414
480
 
415
- export { type FilesConfig, type LoadStage, type LoadStatePayload, type MarkupAction, type MarkupListItem, type MarkupOperationResultPayload, type PreparedViewerData, Viewer3D };
481
+ export { type ConvertOptions, type FilesConfig, type LanguageCode, type LoadStage, type LoadStatePayload, type MarkupAction, type MarkupListItem, type MarkupOperationResultPayload, type PreparedViewerData, Viewer3D };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  declare enum ViewerMessageType {
2
+ LANGUAGE_CHANGE = "viewer-language-change",
2
3
  ZOOM = "viewer-zoom",
3
4
  DRAW_MODE = "viewer-draw-mode",
4
5
  EXPLODE = "viewer-explode",
@@ -28,10 +29,18 @@ declare enum ViewerMessageType {
28
29
  TREE_SELECT_NODE = "viewer-tree-select-node",
29
30
  TREE_GET_NODE_IDS = "viewer-tree-get-node-ids",
30
31
  TREE_NODE_IDS = "viewer-tree-node-ids",
32
+ PDF_PLAN_MODE = "viewer-pdf-plan-mode",
33
+ PDF_DOCUMENT_MODE = "viewer-pdf-document-mode",
34
+ PDF_FIRST_PAGE = "viewer-pdf-first-page",
35
+ PDF_PREVIOUS_PAGE = "viewer-pdf-previous-page",
36
+ PDF_NEXT_PAGE = "viewer-pdf-next-page",
37
+ PDF_LAST_PAGE = "viewer-pdf-last-page",
38
+ PDF_CURRENT_PAGE = "viewer-pdf-current-page",
31
39
  HOME_CLICK = "viewer-home-click",
32
40
  NODE_SELECT = "viewer-node-select",
33
41
  PAN_CHANGE = "viewer-pan-change"
34
42
  }
43
+ type LanguageCode = "en" | "vn";
35
44
  type MarkupAction = "line" | "arrow" | "circle" | "ellipse" | "rectangle" | "polygon" | "polyline" | "textbox" | "note" | "callout" | "cloud" | "freehand";
36
45
  type MarkupOperationResultPayload = {
37
46
  requestId: string;
@@ -57,6 +66,18 @@ type SheetListItem = {
57
66
  is3D?: boolean;
58
67
  viewId?: string;
59
68
  };
69
+ type PdfModeEventPayload = {
70
+ mode: "plan" | "document";
71
+ timestamp: number;
72
+ };
73
+ type PdfToolbarActionEventPayload = {
74
+ timestamp: number;
75
+ };
76
+ type PdfCurrentPagePayload = {
77
+ pageIndex: number;
78
+ pageNumber: number;
79
+ timestamp: number;
80
+ };
60
81
 
61
82
  type ViewerEventMap = {
62
83
  "camera:home": {
@@ -69,6 +90,13 @@ type ViewerEventMap = {
69
90
  "interaction:pan-change": {
70
91
  enabled: boolean;
71
92
  };
93
+ "toolbar:pdf-plan-mode": PdfModeEventPayload;
94
+ "toolbar:pdf-document-mode": PdfModeEventPayload;
95
+ "toolbar:pdf-first-page": PdfToolbarActionEventPayload;
96
+ "toolbar:pdf-previous-page": PdfToolbarActionEventPayload;
97
+ "toolbar:pdf-next-page": PdfToolbarActionEventPayload;
98
+ "toolbar:pdf-last-page": PdfToolbarActionEventPayload;
99
+ "toolbar:pdf-current-page": PdfCurrentPagePayload;
72
100
  "modelTree:node-ids": {
73
101
  requestId: string;
74
102
  nodeIds: string[];
@@ -205,6 +233,9 @@ type FilesConfig = {
205
233
  viewerPath?: string;
206
234
  uploadPath?: string;
207
235
  };
236
+ type ConvertOptions = {
237
+ downloadUrl?: string;
238
+ };
208
239
  declare class FilesModule {
209
240
  private viewer;
210
241
  on: {
@@ -254,12 +285,12 @@ declare class FilesModule {
254
285
  fileName: string;
255
286
  baseFileId: string;
256
287
  }>;
257
- convert(file?: File): Promise<PreparedViewerData>;
258
- prepare(file?: File): Promise<PreparedViewerData>;
288
+ convert(file?: File, options?: ConvertOptions): Promise<PreparedViewerData>;
289
+ prepare(file?: File, options?: ConvertOptions): Promise<PreparedViewerData>;
259
290
  open(input: PreparedViewerData | {
260
291
  url: string;
261
292
  }): void;
262
- render(file?: File): Promise<PreparedViewerData>;
293
+ render(file?: File, options?: ConvertOptions): Promise<PreparedViewerData>;
263
294
  private resolveFile;
264
295
  private normalizeBaseUrl;
265
296
  private resolveBaseUrl;
@@ -285,6 +316,33 @@ type GetSheetsOptions = {
285
316
  };
286
317
  declare class ToolbarModule {
287
318
  private viewer;
319
+ on: {
320
+ planMode: (cb: (payload: {
321
+ mode: "plan" | "document";
322
+ timestamp: number;
323
+ }) => void) => () => void;
324
+ documentMode: (cb: (payload: {
325
+ mode: "plan" | "document";
326
+ timestamp: number;
327
+ }) => void) => () => void;
328
+ firstPage: (cb: (payload: {
329
+ timestamp: number;
330
+ }) => void) => () => void;
331
+ previousPage: (cb: (payload: {
332
+ timestamp: number;
333
+ }) => void) => () => void;
334
+ nextPage: (cb: (payload: {
335
+ timestamp: number;
336
+ }) => void) => () => void;
337
+ lastPage: (cb: (payload: {
338
+ timestamp: number;
339
+ }) => void) => () => void;
340
+ currentPage: (cb: (payload: {
341
+ pageIndex: number;
342
+ pageNumber: number;
343
+ timestamp: number;
344
+ }) => void) => () => void;
345
+ };
288
346
  constructor(viewer: Viewer3D);
289
347
  setDisabled3D(operators: string[]): void;
290
348
  setDisabledPdf(operators: string[]): void;
@@ -371,6 +429,13 @@ declare class MarkupModule {
371
429
  private runRequest;
372
430
  }
373
431
 
432
+ declare class LanguageModule {
433
+ private viewer;
434
+ constructor(viewer: Viewer3D);
435
+ change(language: LanguageCode): void;
436
+ set(language: LanguageCode): void;
437
+ }
438
+
374
439
  type Viewer3DOptions = {
375
440
  container: HTMLElement | string;
376
441
  url?: string;
@@ -396,6 +461,7 @@ declare class Viewer3D {
396
461
  toolbar: ToolbarModule;
397
462
  modelTree: ModelTreeModule;
398
463
  markup: MarkupModule;
464
+ language: LanguageModule;
399
465
  constructor(options: Viewer3DOptions);
400
466
  getOptions(): Viewer3DOptions;
401
467
  patchOptions(next: Partial<Viewer3DOptions>): void;
@@ -412,4 +478,4 @@ declare class Viewer3D {
412
478
  private handleMessage;
413
479
  }
414
480
 
415
- export { type FilesConfig, type LoadStage, type LoadStatePayload, type MarkupAction, type MarkupListItem, type MarkupOperationResultPayload, type PreparedViewerData, Viewer3D };
481
+ export { type ConvertOptions, type FilesConfig, type LanguageCode, type LoadStage, type LoadStatePayload, type MarkupAction, type MarkupListItem, type MarkupOperationResultPayload, type PreparedViewerData, Viewer3D };