med-viewer-sdk 0.1.17 → 0.1.20
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/core/AnnoAnnotator.d.ts +5 -4
- package/dist/core/ColorAdjustPlugin.d.ts +2 -2
- package/dist/core/Engine.d.ts +12 -1
- package/dist/core/Magnification.d.ts +17 -1
- package/dist/core/SelectionPlugin.d.ts +4 -0
- package/dist/core/Toolbar.d.ts +16 -0
- package/dist/med-viewer-sdk.mjs +118 -33
- package/dist/med-viewer-sdk.umd.js +1 -1
- package/package.json +2 -3
- package/src/adapters/vue/MedViewer.ts +0 -38
- package/src/adapters/vue/index.ts +0 -4
- package/src/assets/icons/button_grouphover.png +0 -0
- package/src/assets/icons/button_hover.png +0 -0
- package/src/assets/icons/button_pressed.png +0 -0
- package/src/assets/icons/button_rest.png +0 -0
- package/src/assets/icons/flip_grouphover.png +0 -0
- package/src/assets/icons/flip_hover.png +0 -0
- package/src/assets/icons/flip_pressed.png +0 -0
- package/src/assets/icons/flip_rest.png +0 -0
- package/src/assets/icons/fullpage_grouphover.png +0 -0
- package/src/assets/icons/fullpage_hover.png +0 -0
- package/src/assets/icons/fullpage_pressed.png +0 -0
- package/src/assets/icons/fullpage_rest.png +0 -0
- package/src/assets/icons/home_grouphover.png +0 -0
- package/src/assets/icons/home_hover.png +0 -0
- package/src/assets/icons/home_pressed.png +0 -0
- package/src/assets/icons/home_rest.png +0 -0
- package/src/assets/icons/next_grouphover.png +0 -0
- package/src/assets/icons/next_hover.png +0 -0
- package/src/assets/icons/next_pressed.png +0 -0
- package/src/assets/icons/next_rest.png +0 -0
- package/src/assets/icons/previous_grouphover.png +0 -0
- package/src/assets/icons/previous_hover.png +0 -0
- package/src/assets/icons/previous_pressed.png +0 -0
- package/src/assets/icons/previous_rest.png +0 -0
- package/src/assets/icons/rotateleft_grouphover.png +0 -0
- package/src/assets/icons/rotateleft_hover.png +0 -0
- package/src/assets/icons/rotateleft_pressed.png +0 -0
- package/src/assets/icons/rotateleft_rest.png +0 -0
- package/src/assets/icons/rotateright_grouphover.png +0 -0
- package/src/assets/icons/rotateright_hover.png +0 -0
- package/src/assets/icons/rotateright_pressed.png +0 -0
- package/src/assets/icons/rotateright_rest.png +0 -0
- package/src/assets/icons/selection_cancel_grouphover.png +0 -0
- package/src/assets/icons/selection_cancel_hover.png +0 -0
- package/src/assets/icons/selection_cancel_pressed.png +0 -0
- package/src/assets/icons/selection_cancel_rest.png +0 -0
- package/src/assets/icons/selection_confirm_grouphover.png +0 -0
- package/src/assets/icons/selection_confirm_hover.png +0 -0
- package/src/assets/icons/selection_confirm_pressed.png +0 -0
- package/src/assets/icons/selection_confirm_rest.png +0 -0
- package/src/assets/icons/selection_grouphover.png +0 -0
- package/src/assets/icons/selection_hover.png +0 -0
- package/src/assets/icons/selection_pressed.png +0 -0
- package/src/assets/icons/selection_rest.png +0 -0
- package/src/assets/icons/tool_anno.png +0 -0
- package/src/assets/icons/tool_color.png +0 -0
- package/src/assets/icons/tool_reset.png +0 -0
- package/src/assets/icons/tool_selection.png +0 -0
- package/src/assets/icons/zoomin_grouphover.png +0 -0
- package/src/assets/icons/zoomin_hover.png +0 -0
- package/src/assets/icons/zoomin_pressed.png +0 -0
- package/src/assets/icons/zoomin_rest.png +0 -0
- package/src/assets/icons/zoomout_grouphover.png +0 -0
- package/src/assets/icons/zoomout_hover.png +0 -0
- package/src/assets/icons/zoomout_pressed.png +0 -0
- package/src/assets/icons/zoomout_rest.png +0 -0
- package/src/core/AnnoAnnotator.ts +0 -94
- package/src/core/BaseAnnotator.ts +0 -43
- package/src/core/ColorAdjustPlugin.ts +0 -183
- package/src/core/Coords.ts +0 -9
- package/src/core/Engine.ts +0 -405
- package/src/core/Magnification.ts +0 -301
- package/src/core/Scalebar.ts +0 -88
- package/src/core/SelectionPlugin.ts +0 -251
- package/src/core/Toolbar.ts +0 -854
- package/src/i18n/i18n.ts +0 -104
- package/src/index.ts +0 -45
- package/src/plugins/ShapeLabelsFormatter.js +0 -512
- package/src/plugins/openseadragon-filtering.js +0 -211
- package/src/plugins/openseadragon-scalebar.js +0 -592
- package/src/plugins/openseadragon-selection.js +0 -657
- package/src/types/ShapeLabelsFormatter.d.ts +0 -12
- package/src/types/type.d.ts +0 -7
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MedViewerEngine } from
|
|
3
|
-
import { BaseAnnotator } from
|
|
1
|
+
import 'annotorious-openseadragon-ld/dist/annotorious.min.css';
|
|
2
|
+
import { MedViewerEngine } from './Engine';
|
|
3
|
+
import { BaseAnnotator } from './BaseAnnotator';
|
|
4
4
|
export declare class AnnoAnnotator extends BaseAnnotator {
|
|
5
5
|
anno: any;
|
|
6
6
|
constructor(engine: MedViewerEngine, config?: any);
|
|
7
7
|
setEnabled(enabled: boolean): void;
|
|
8
|
-
setTool(tool:
|
|
8
|
+
setTool(tool: 'rect' | 'polygon' | 'line' | 'point' | 'circle' | 'ellipse' | 'freehand' | null, color?: string): void;
|
|
9
|
+
setLocale(locale: string): void;
|
|
9
10
|
getAnnotations(): any[];
|
|
10
11
|
setAnnotations(data: any[]): void;
|
|
11
12
|
clear(): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import 'openseadragon-filtering';
|
|
2
2
|
export interface ColorAdjustments {
|
|
3
3
|
brightness?: number;
|
|
4
4
|
contrast?: number;
|
|
@@ -12,7 +12,7 @@ export interface ColorAdjustments {
|
|
|
12
12
|
export interface ColorAdjustOptions {
|
|
13
13
|
adjustments?: ColorAdjustments;
|
|
14
14
|
debounceMs?: number;
|
|
15
|
-
loadMode?:
|
|
15
|
+
loadMode?: 'async' | 'sync';
|
|
16
16
|
}
|
|
17
17
|
export declare class ColorAdjustPlugin {
|
|
18
18
|
private viewer;
|
package/dist/core/Engine.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ import { ScalebarPlugin, type ScalebarOptions } from './Scalebar';
|
|
|
7
7
|
import { SelectionPlugin, type SelectionOptions } from './SelectionPlugin';
|
|
8
8
|
import { MedToolbar, type ToolbarOptions } from './Toolbar';
|
|
9
9
|
import { Locale } from '../i18n/i18n';
|
|
10
|
+
export interface AnnotoriousOptions {
|
|
11
|
+
onCreateAnnotation?: (annotation: any) => void;
|
|
12
|
+
onUpdateAnnotation?: (annotation: any, previous: any) => void;
|
|
13
|
+
onDeleteAnnotation?: (annotation: any) => void;
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
10
16
|
/**
|
|
11
17
|
* 引擎配置接口
|
|
12
18
|
*/
|
|
@@ -14,7 +20,7 @@ export interface MedEngineOptions {
|
|
|
14
20
|
osdOptions: OpenSeadragonType.Options;
|
|
15
21
|
locale?: Locale;
|
|
16
22
|
plugins?: {
|
|
17
|
-
annotorious?: boolean |
|
|
23
|
+
annotorious?: boolean | AnnotoriousOptions;
|
|
18
24
|
toolbar?: boolean | ToolbarOptions;
|
|
19
25
|
colorAdjust?: boolean | ColorAdjustOptions;
|
|
20
26
|
selection?: boolean | SelectionOptions;
|
|
@@ -90,4 +96,9 @@ export declare class MedViewerEngine {
|
|
|
90
96
|
* 销毁引擎与所有插件
|
|
91
97
|
*/
|
|
92
98
|
destroy(): void;
|
|
99
|
+
/**
|
|
100
|
+
* 动态设置语言
|
|
101
|
+
* @param locale 语言标识,如 'en' 或 'zh-CN'
|
|
102
|
+
*/
|
|
103
|
+
setLocale(locale: Locale): void;
|
|
93
104
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import OpenSeadragon from
|
|
1
|
+
import OpenSeadragon from 'openseadragon';
|
|
2
2
|
export declare enum MagnificationPosition {
|
|
3
3
|
TOP_LEFT = "TOP_LEFT",
|
|
4
4
|
TOP_CENTER = "TOP_CENTER",
|
|
@@ -32,6 +32,22 @@ export declare class MagnificationPlugin {
|
|
|
32
32
|
getMagnification(): number;
|
|
33
33
|
private setMagnification;
|
|
34
34
|
private fitToScreen;
|
|
35
|
+
/**
|
|
36
|
+
* 显示放大镜控件
|
|
37
|
+
*/
|
|
38
|
+
show(): void;
|
|
39
|
+
/**
|
|
40
|
+
* 隐藏放大镜控件
|
|
41
|
+
*/
|
|
42
|
+
hide(): void;
|
|
43
|
+
/**
|
|
44
|
+
* 切换放大镜控件的可见性
|
|
45
|
+
*/
|
|
46
|
+
toggle(): void;
|
|
47
|
+
/**
|
|
48
|
+
* 检查放大镜控件是否可见
|
|
49
|
+
*/
|
|
50
|
+
isVisible(): boolean;
|
|
35
51
|
refresh(): void;
|
|
36
52
|
destroy(): void;
|
|
37
53
|
private injectStyles;
|
|
@@ -65,6 +65,10 @@ export declare class SelectionPlugin {
|
|
|
65
65
|
private selection;
|
|
66
66
|
private options;
|
|
67
67
|
constructor(viewer: OpenSeadragon.Viewer, options?: SelectionOptions);
|
|
68
|
+
/**
|
|
69
|
+
* 更新语言环境,刷新工具提示
|
|
70
|
+
*/
|
|
71
|
+
updateLocale(): void;
|
|
68
72
|
private init;
|
|
69
73
|
private setupSelection;
|
|
70
74
|
/**
|
package/dist/core/Toolbar.d.ts
CHANGED
|
@@ -30,6 +30,22 @@ export declare class MedToolbar {
|
|
|
30
30
|
private dropdownElement;
|
|
31
31
|
private outsideClickHandler;
|
|
32
32
|
constructor(engine: MedViewerEngine, options?: ToolbarOptions);
|
|
33
|
+
/**
|
|
34
|
+
* 显示工具栏
|
|
35
|
+
*/
|
|
36
|
+
show(): void;
|
|
37
|
+
/**
|
|
38
|
+
* 隐藏工具栏
|
|
39
|
+
*/
|
|
40
|
+
hide(): void;
|
|
41
|
+
/**
|
|
42
|
+
* 切换工具栏的可见性
|
|
43
|
+
*/
|
|
44
|
+
toggle(): void;
|
|
45
|
+
/**
|
|
46
|
+
* 检查工具栏是否可见
|
|
47
|
+
*/
|
|
48
|
+
isVisible(): boolean;
|
|
33
49
|
destroy(): void;
|
|
34
50
|
private render;
|
|
35
51
|
private showDropdown;
|
package/dist/med-viewer-sdk.mjs
CHANGED
|
@@ -12552,7 +12552,7 @@ class AnnoAnnotator extends BaseAnnotator {
|
|
|
12552
12552
|
// 可以在此配置样式、偏好等
|
|
12553
12553
|
});
|
|
12554
12554
|
this.injectStyles();
|
|
12555
|
-
this.initEvents();
|
|
12555
|
+
this.initEvents(config);
|
|
12556
12556
|
}
|
|
12557
12557
|
setEnabled(enabled) {
|
|
12558
12558
|
this.anno.setDrawingEnabled(enabled);
|
|
@@ -12565,6 +12565,12 @@ class AnnoAnnotator extends BaseAnnotator {
|
|
|
12565
12565
|
this.setEnabled(true);
|
|
12566
12566
|
}
|
|
12567
12567
|
}
|
|
12568
|
+
setLocale(locale) {
|
|
12569
|
+
var _a2;
|
|
12570
|
+
if ((_a2 = this.anno) == null ? void 0 : _a2.setLocale) {
|
|
12571
|
+
this.anno.setLocale(locale);
|
|
12572
|
+
}
|
|
12573
|
+
}
|
|
12568
12574
|
getAnnotations() {
|
|
12569
12575
|
return this.anno.getAnnotations();
|
|
12570
12576
|
}
|
|
@@ -12577,10 +12583,22 @@ class AnnoAnnotator extends BaseAnnotator {
|
|
|
12577
12583
|
destroy() {
|
|
12578
12584
|
this.anno.destroy();
|
|
12579
12585
|
}
|
|
12580
|
-
initEvents() {
|
|
12581
|
-
|
|
12582
|
-
|
|
12583
|
-
|
|
12586
|
+
initEvents(config) {
|
|
12587
|
+
if (config.onCreateAnnotation) {
|
|
12588
|
+
this.anno.on("createAnnotation", (annotation) => {
|
|
12589
|
+
config.onCreateAnnotation(annotation);
|
|
12590
|
+
});
|
|
12591
|
+
}
|
|
12592
|
+
if (config.onUpdateAnnotation) {
|
|
12593
|
+
this.anno.on("updateAnnotation", (annotation, previous) => {
|
|
12594
|
+
config.onUpdateAnnotation(annotation, previous);
|
|
12595
|
+
});
|
|
12596
|
+
}
|
|
12597
|
+
if (config.onDeleteAnnotation) {
|
|
12598
|
+
this.anno.on("deleteAnnotation", (annotation) => {
|
|
12599
|
+
config.onDeleteAnnotation(annotation);
|
|
12600
|
+
});
|
|
12601
|
+
}
|
|
12584
12602
|
}
|
|
12585
12603
|
injectStyles() {
|
|
12586
12604
|
const styleId = "med-anno-v2-7-17-overrides";
|
|
@@ -14117,9 +14135,7 @@ class MagnificationPlugin {
|
|
|
14117
14135
|
const tiledImage = this.viewer.world.getItemAt(0);
|
|
14118
14136
|
if (!this.magnificationDisplay || !tiledImage)
|
|
14119
14137
|
return;
|
|
14120
|
-
const currentZoom = this.viewer.viewport.viewportToImageZoom(
|
|
14121
|
-
this.viewer.viewport.getZoom()
|
|
14122
|
-
);
|
|
14138
|
+
const currentZoom = this.viewer.viewport.viewportToImageZoom(this.viewer.viewport.getZoom());
|
|
14123
14139
|
const baseMag = ((_b2 = this.viewer.source) == null ? void 0 : _b2.max_magnification) || 40;
|
|
14124
14140
|
const magnification = currentZoom * baseMag;
|
|
14125
14141
|
this.magnificationDisplay.innerHTML = `<span>${magnification.toFixed(2)}X</span>`;
|
|
@@ -14142,10 +14158,7 @@ class MagnificationPlugin {
|
|
|
14142
14158
|
this.magnificationElement.appendChild(buttonsContainer);
|
|
14143
14159
|
const magnifications = [40, 20, 10, 4];
|
|
14144
14160
|
magnifications.forEach((mag) => {
|
|
14145
|
-
const btn = this.createButton(
|
|
14146
|
-
`${mag}X`,
|
|
14147
|
-
() => this.setMagnification(mag)
|
|
14148
|
-
);
|
|
14161
|
+
const btn = this.createButton(`${mag}X`, () => this.setMagnification(mag));
|
|
14149
14162
|
buttonsContainer.appendChild(btn);
|
|
14150
14163
|
});
|
|
14151
14164
|
const fitBtn = this.createButton("Fit", () => this.fitToScreen());
|
|
@@ -14176,15 +14189,17 @@ class MagnificationPlugin {
|
|
|
14176
14189
|
const conversionFactor = 20 * 11e-4 * pixelsPerMeter / width;
|
|
14177
14190
|
return conversionFactor * currentZoom2;
|
|
14178
14191
|
}
|
|
14179
|
-
const currentZoom = this.viewer.viewport.viewportToImageZoom(
|
|
14180
|
-
this.viewer.viewport.getZoom()
|
|
14181
|
-
);
|
|
14192
|
+
const currentZoom = this.viewer.viewport.viewportToImageZoom(this.viewer.viewport.getZoom());
|
|
14182
14193
|
const baseMag = ((_b2 = this.viewer.source) == null ? void 0 : _b2.max_magnification) || 40;
|
|
14183
14194
|
return currentZoom * baseMag;
|
|
14184
14195
|
}
|
|
14185
14196
|
// 修改 setMagnification 方法
|
|
14186
|
-
setMagnification(mag) {
|
|
14197
|
+
async setMagnification(mag, target = null) {
|
|
14187
14198
|
var _a2, _b2;
|
|
14199
|
+
let point = this.viewer.viewport.getCenter();
|
|
14200
|
+
if (target) {
|
|
14201
|
+
point = this.viewer.viewport.imageToViewportCoordinates(target.x, target.y);
|
|
14202
|
+
}
|
|
14188
14203
|
if (this.options.type === "LD") {
|
|
14189
14204
|
const tiledImage = this.viewer.world.getItemAt(0);
|
|
14190
14205
|
if (!this.magnificationDisplay || !tiledImage)
|
|
@@ -14196,11 +14211,7 @@ class MagnificationPlugin {
|
|
|
14196
14211
|
this.viewer.viewport.getZoom();
|
|
14197
14212
|
const conversionFactor = 20 * 11e-4 * pixelsPerMeter / width;
|
|
14198
14213
|
const targetZoom = mag / conversionFactor;
|
|
14199
|
-
this.viewer.viewport.zoomTo(
|
|
14200
|
-
targetZoom,
|
|
14201
|
-
this.viewer.viewport.getCenter(),
|
|
14202
|
-
false
|
|
14203
|
-
);
|
|
14214
|
+
await this.viewer.viewport.zoomTo(targetZoom, point, false);
|
|
14204
14215
|
this.updateMagnificationDisplay();
|
|
14205
14216
|
} else {
|
|
14206
14217
|
const tiledImage = this.viewer.world.getItemAt(0);
|
|
@@ -14209,11 +14220,8 @@ class MagnificationPlugin {
|
|
|
14209
14220
|
const baseMag = ((_b2 = this.viewer.source) == null ? void 0 : _b2.max_magnification) || 40;
|
|
14210
14221
|
const targetImageZoom = mag / baseMag;
|
|
14211
14222
|
const targetViewportZoom = this.viewer.viewport.imageToViewportZoom(targetImageZoom);
|
|
14212
|
-
this.viewer.viewport.zoomTo(
|
|
14213
|
-
|
|
14214
|
-
this.viewer.viewport.getCenter(),
|
|
14215
|
-
false
|
|
14216
|
-
);
|
|
14223
|
+
await this.viewer.viewport.zoomTo(targetViewportZoom, point, false);
|
|
14224
|
+
this.updateMagnificationDisplay();
|
|
14217
14225
|
}
|
|
14218
14226
|
}
|
|
14219
14227
|
fitToScreen() {
|
|
@@ -14221,6 +14229,36 @@ class MagnificationPlugin {
|
|
|
14221
14229
|
this.viewer.viewport.fitHorizontally(true);
|
|
14222
14230
|
this.viewer.viewport.goHome();
|
|
14223
14231
|
}
|
|
14232
|
+
/**
|
|
14233
|
+
* 显示放大镜控件
|
|
14234
|
+
*/
|
|
14235
|
+
show() {
|
|
14236
|
+
if (this.magnificationElement) {
|
|
14237
|
+
this.magnificationElement.style.display = "flex";
|
|
14238
|
+
}
|
|
14239
|
+
}
|
|
14240
|
+
/**
|
|
14241
|
+
* 隐藏放大镜控件
|
|
14242
|
+
*/
|
|
14243
|
+
hide() {
|
|
14244
|
+
if (this.magnificationElement) {
|
|
14245
|
+
this.magnificationElement.style.display = "none";
|
|
14246
|
+
}
|
|
14247
|
+
}
|
|
14248
|
+
/**
|
|
14249
|
+
* 切换放大镜控件的可见性
|
|
14250
|
+
*/
|
|
14251
|
+
toggle() {
|
|
14252
|
+
if (this.magnificationElement) {
|
|
14253
|
+
this.magnificationElement.style.display = this.magnificationElement.style.display === "none" ? "flex" : "none";
|
|
14254
|
+
}
|
|
14255
|
+
}
|
|
14256
|
+
/**
|
|
14257
|
+
* 检查放大镜控件是否可见
|
|
14258
|
+
*/
|
|
14259
|
+
isVisible() {
|
|
14260
|
+
return this.magnificationElement ? this.magnificationElement.style.display !== "none" : false;
|
|
14261
|
+
}
|
|
14224
14262
|
refresh() {
|
|
14225
14263
|
this.updateMagnificationDisplay();
|
|
14226
14264
|
}
|
|
@@ -14233,10 +14271,7 @@ class MagnificationPlugin {
|
|
|
14233
14271
|
this.magnificationDisplay = null;
|
|
14234
14272
|
}
|
|
14235
14273
|
this.viewer.removeHandler("animation", this.updateMagnificationDisplay);
|
|
14236
|
-
this.viewer.removeHandler(
|
|
14237
|
-
"animation-finish",
|
|
14238
|
-
this.updateMagnificationDisplay
|
|
14239
|
-
);
|
|
14274
|
+
this.viewer.removeHandler("animation-finish", this.updateMagnificationDisplay);
|
|
14240
14275
|
this.viewer.removeHandler("open", this.updateMagnificationDisplay);
|
|
14241
14276
|
this.viewer = null;
|
|
14242
14277
|
}
|
|
@@ -15249,9 +15284,11 @@ const selectionCancelRest = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAA
|
|
|
15249
15284
|
const selectionCancelGroup = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAYAAADVhWD8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODIyQUM5QkUyMDFBMkEwRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDRjQ1MzBFODczRjMxMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDRjQ1MzBFNzczRjMxMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDg4MDExNzQwNzIwNjgxMTgyMkFGQkMyQkQyOEFDNzciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc4MDExNzQwNzIwNjgxMTgyMkFDOUJFMjAxQTJBMEYiLz4gPC9yZGY6RGVzY3Jp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";
|
|
15250
15285
|
const selectionCancelHover = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAYAAADVhWD8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODIyQUM5QkUyMDFBMkEwRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMUM1QzMyODczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMUM1QzMyNzczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDY4MDExNzQwNzIwNjgxMTgyMkFGQkMyQkQyOEFDNzciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc4MDExNzQwNzIwNjgxMTgyMkFDOUJFMjAxQTJBMEYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6dcS+tAAAJKElEQVR42qyYW2xUxxmA53LmnD27vq6x167BpmAwEAgJIWr6EFAQlVJUXFHaB/rUKi0VCBXy1ko89C1V2wAPTVOo0r5QeuOimFYFbARGDREhmECCQTbBeI3v613v7dxnpjPL2eV4vVC16ZF+zc7MP//5zj+3/1/IOQdf5IHiKW/jTzEqm4PCGCuV4XAYKP/Di4svhwEp1rmvx/3fRSjuOA4vByiWUuSj/JcQUpAQ7JfF3zAAI0Vap8FSVdVCXzqd5kWAoPxHmAoQii9Eys6dO2u2b9++WHw1opTCCxcuTJ85c2bOB/CEuL54vrDa2toC1NjYGC+HgU9bMwGQIIR24MCB5r1793Y1NTW9ElJYGzCmYMnlWgNPG3RieHj4o8OHD//z9OnT02KMHZASlAQaHBwsAa1Zs6YyTAAE+xDq/v37Y/v27dvVuijyLTh2GcH4XQQSGc5clXOKOEQUItWFrD4C3dYV3Ih+1ft0MH7u6NGjfz916tSYsGEIsYQ4PpD0Hu/v7y8Abdy48QlMcYVjjMtBtKtXr76+7rnVP0HD/1Dg7Y+wlax2LRh13FAVZURlAGEGqAeR62DFzmOdJVUtmlFyy1ezVHSTe+5C7zHh0V5hK+9D2UGgvr4+vnnz5idrxnXd4twFp0a7du3azo725n386qGQfddgGd5murVRB+g6BYrCIEa8sGTFKI8yant10DDrPTIzq9ZMD2oNHQ+0Ta907T5y5Ei1ADob2H2guNjz+XzBI6jYatu2sK8XFWU7OXny5Mttrc0/Vq4cihjX8yDBF1tWbdQVW0P6EwlXYu5RhVOmyLJQ5wxThXCrpt6dAYst75YLlgydqHph3erv7tmz5yvCbpUQ3d8E0vtg27ZtcN5ukjCB6ZGK2rJly76p3DwWNj51QUpvcUFIAwq2VKwYmDGNcVsIh7z0kQIRERtDYovdBT0vFOIps8mrGxhR2uDZ8Nq1a7cKxYHAQg5uf17yjGVZIOiV7u7u7fXGg9fAzWE15dZ6FCkcYVN11IeLft13eVWa323GIKlz21CZZRJum6qCUuE0G4i9c6VvlauOLIIwTzwxjSmnxqu6N6l1RjIvCu98TdivFhLyPxoFX1x4lixZEjzQ1MbGxm/ot85WZ6aqgItUBByXEJgJH78Wb36UhOQ3PY+asujzRgLmwsg2QoTPhTPofuO7F8djsv/49dEWFeYiwHKJgwjKTEbosqmPq5YuXfqqsB/xp0oNHKAQle9qOXUHDx5cqeVGV6KRWdWkGECxS6BrE+jZ6ve2aE5LUwRwHIG//zAXNapGG8J1iWqjOt7whw/zUYYiUPZLPUgtFTgWgY6DDYpRZCKnNqHMYrGNOwIwSnFRozKQwi5avnz5y9rELd2cxJg6DEFhkGfSxBo1eHUCW292mW6sIQQoDMPjN2jNsPeo7vgNViPrsl32Sz173AbQMlUoptBzKDInAWw2H+rCO2v9aSrCVPRMYZrE82U0OqBaowlO02mMXFuTwrMeyQ0RGhpVzR9tnaXVYnfnbAT/0h8JyVLWZbvsl3pSX47D1FZ5Lo/tiQyKpOIqIeRLcoP4IMVpWnA3Fbwjzpw6kkoQlkxhmHYYS4yUFFwEWGYI2fWbQmh9w/3wrp/2lz7oT29tYJF79WbqimW7KcY4840qCKOUAyHN40hWIZ7XXFUGAp8GA7PZLEe2hXQ7r2DoQQXjeb5TdIIePDKU/e/dmefZ/b/4DHW/8ZyyxKKqZ7gM+DBAgcAzPRDiNs7bKs3lcqDCjQ9QpUtybm4ua4mYRKMG0ewcUfNZpSBmTgmFbDLa6oa6fncnNJ1yQFNUBX878lKhlHXZLvulntQvjMtlC3akvSwTs5fNmpXeWw5TuN5nZmZGpnGNo4dMTLgp/GoURA07JN4OQ11/va9Npx+D9L79IuuqU6ksYw0akO2yX+pJ/cJYJ1+wI+0NW9hJJpPTwcOuGIRVgmEDAwM3b4OWnN5sYaLYCkYmUVWThJq58ua1aWU67T4G+dV63jmS4fRiHHQ+zPCeXz7PYw3CQ6Jf6uktXFE1k8jx0o6015fSc5OTk5/7cU7xBK4IIzu8S5cuPfgkTQYetdZaRHcw11zMiSMOHBv/8Y02/uoLdaD35+vAysFZ4P4rjui9KeR+EEey3vPWOiD7pR4HNuaKGK+6WBV2BuuJdXXcGRWeiQdCiWJ8Mw8mGC7aIyMjPSfg+vHwCgphGEBWK4RasGk6BXu/3wJWjswA7/4k5NCCoIYVSlmX7bJf6kl9OU6O1zsofHu8YSKRSNwMxDZ20DtKhWkqhIsXxQO3bt2waXWs4SU2E817ENCQGDeTACA7B6BDAVeFakMp5hY3nQ288SnAE2KTWB6guogAxUYJ13HQU60nuz9wbwmY60I55wMVQ9L507Rjx46gZ6QLrXg8fu5nA52j8Q49rwuDTJyZnkYBwzZgERdwCdIISiLrsl32ewJc6ofrGXjQjozdvdWjmUxGgqR9mGLUt9AzIsAJrhupZIoY9RNRvvdDc8UPDr02tHSdZdQYNgJUXHNQHOTQPyVKOYoYKQ86bkOAxXeHmxj4GOLMrhNVD2dSmR7TND+TJ4cPY/qeYQu2tg/DA5G9nE9DAJ0ffDj1znf+HDv/20z9mNLOaFhkHZhDwEWozIiYPvVxyREstEdCor+N0kMTZPzrx7ThsZnc+wKkT9ib9T2T9+27ge39JAbesGEDEOkGuH37djD+lZdZWMYfiqI0RqPRby+qRVt2b8kuer3Dru2s9cLMgQVvSC+JkAfcmMG5nkGUefc8np1I0hue510W75DnStL3SjawgL2KMKtWrSrEwENDQ8EUhfgXmu6Hi9XiEm0S4ekWhNDzYmyss9XT6sIcJ7Oc3okDW3zQhGgfFmW/0J/2X57xy+L02GUg82Ha29tLCdX4+Hh5hkB8IN33VFFCAqpZBkvCjsxfZwNTbPseKIpZKVUJpMBPYGKx2Lx0U9xP5eks8eMPLSBqILCGgTXn+i8NJnBOhVN3XtJWghFp54KkXMTFldLbIhgJZJrlubZXlt7SYCZZCWQejLhm54EEpewfB1Qh+UdlVworS/6fCbEARizMUgL+rP8CnvGXyILbP/iXyLMgFvyB83944Bc18G8BBgA793uw1NiJ3wAAAABJRU5ErkJggg==";
|
|
15251
15286
|
const selectionCancelDown = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAYAAADVhWD8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODIyQUM5QkUyMDFBMkEwRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpERkFFQjU3NzczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpERkFFQjU3NjczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDY4MDExNzQwNzIwNjgxMTgyMkFGQkMyQkQyOEFDNzciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc4MDExNzQwNzIwNjgxMTgyMkFDOUJFMjAxQTJBMEYiLz4gPC9yZGY6RGVzY3Jp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";
|
|
15252
|
-
|
|
15253
|
-
OpenSeadragon.setString("Tooltips.
|
|
15254
|
-
OpenSeadragon.setString("Tooltips.
|
|
15287
|
+
function updateOsdTooltips() {
|
|
15288
|
+
OpenSeadragon.setString("Tooltips.SelectionToggle", t("selection.toggle"));
|
|
15289
|
+
OpenSeadragon.setString("Tooltips.SelectionConfirm", t("selection.confirm"));
|
|
15290
|
+
OpenSeadragon.setString("Tooltips.SelectionCancel", t("selection.cancel"));
|
|
15291
|
+
}
|
|
15255
15292
|
class SelectionPlugin {
|
|
15256
15293
|
constructor(viewer, options = {}) {
|
|
15257
15294
|
__publicField(this, "viewer");
|
|
@@ -15317,6 +15354,13 @@ class SelectionPlugin {
|
|
|
15317
15354
|
...options
|
|
15318
15355
|
};
|
|
15319
15356
|
this.init();
|
|
15357
|
+
updateOsdTooltips();
|
|
15358
|
+
}
|
|
15359
|
+
/**
|
|
15360
|
+
* 更新语言环境,刷新工具提示
|
|
15361
|
+
*/
|
|
15362
|
+
updateLocale() {
|
|
15363
|
+
updateOsdTooltips();
|
|
15320
15364
|
}
|
|
15321
15365
|
init() {
|
|
15322
15366
|
this.viewer.addOnceHandler("open", () => {
|
|
@@ -15734,6 +15778,30 @@ class MedToolbar {
|
|
|
15734
15778
|
this.render();
|
|
15735
15779
|
this.mount();
|
|
15736
15780
|
}
|
|
15781
|
+
/**
|
|
15782
|
+
* 显示工具栏
|
|
15783
|
+
*/
|
|
15784
|
+
show() {
|
|
15785
|
+
this.element.style.display = "flex";
|
|
15786
|
+
}
|
|
15787
|
+
/**
|
|
15788
|
+
* 隐藏工具栏
|
|
15789
|
+
*/
|
|
15790
|
+
hide() {
|
|
15791
|
+
this.element.style.display = "none";
|
|
15792
|
+
}
|
|
15793
|
+
/**
|
|
15794
|
+
* 切换工具栏的可见性
|
|
15795
|
+
*/
|
|
15796
|
+
toggle() {
|
|
15797
|
+
this.element.style.display = this.element.style.display === "none" ? "flex" : "none";
|
|
15798
|
+
}
|
|
15799
|
+
/**
|
|
15800
|
+
* 检查工具栏是否可见
|
|
15801
|
+
*/
|
|
15802
|
+
isVisible() {
|
|
15803
|
+
return this.element.style.display !== "none";
|
|
15804
|
+
}
|
|
15737
15805
|
destroy() {
|
|
15738
15806
|
this.closeDropdown(true);
|
|
15739
15807
|
this.element.remove();
|
|
@@ -16399,6 +16467,23 @@ class MedViewerEngine {
|
|
|
16399
16467
|
(_e2 = this.colorAdjust) == null ? void 0 : _e2.destroy();
|
|
16400
16468
|
this.viewer.destroy();
|
|
16401
16469
|
}
|
|
16470
|
+
/**
|
|
16471
|
+
* 动态设置语言
|
|
16472
|
+
* @param locale 语言标识,如 'en' 或 'zh-CN'
|
|
16473
|
+
*/
|
|
16474
|
+
setLocale(locale) {
|
|
16475
|
+
setLocale(locale);
|
|
16476
|
+
this.options.locale = locale;
|
|
16477
|
+
if (this.anno) {
|
|
16478
|
+
this.anno.setLocale(locale);
|
|
16479
|
+
}
|
|
16480
|
+
if (this.selection) {
|
|
16481
|
+
this.selection.updateLocale();
|
|
16482
|
+
}
|
|
16483
|
+
if (this.toolbar)
|
|
16484
|
+
;
|
|
16485
|
+
console.log(`[MedEngine] Locale changed to ${locale}`);
|
|
16486
|
+
}
|
|
16402
16487
|
}
|
|
16403
16488
|
if (typeof window !== "undefined") {
|
|
16404
16489
|
window.MedViewerSDK = {
|