med-viewer-sdk 0.1.19 → 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.
@@ -1,11 +1,12 @@
1
- import "annotorious-openseadragon-ld/dist/annotorious.min.css";
2
- import { MedViewerEngine } from "./Engine";
3
- import { BaseAnnotator } from "./BaseAnnotator";
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: "rect" | "polygon" | "line" | "point" | "circle" | "ellipse" | "freehand" | null, color?: string): void;
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 "openseadragon-filtering";
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?: "async" | "sync";
15
+ loadMode?: 'async' | 'sync';
16
16
  }
17
17
  export declare class ColorAdjustPlugin {
18
18
  private viewer;
@@ -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 | any;
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
  }
@@ -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
  /**
@@ -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;
@@ -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
- this.anno.on("createAnnotation", (anno) => {
12582
- console.log("新标注已创建:", anno);
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";
@@ -14176,8 +14194,12 @@ class MagnificationPlugin {
14176
14194
  return currentZoom * baseMag;
14177
14195
  }
14178
14196
  // 修改 setMagnification 方法
14179
- async setMagnification(mag) {
14197
+ async setMagnification(mag, target = null) {
14180
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
+ }
14181
14203
  if (this.options.type === "LD") {
14182
14204
  const tiledImage = this.viewer.world.getItemAt(0);
14183
14205
  if (!this.magnificationDisplay || !tiledImage)
@@ -14189,7 +14211,7 @@ class MagnificationPlugin {
14189
14211
  this.viewer.viewport.getZoom();
14190
14212
  const conversionFactor = 20 * 11e-4 * pixelsPerMeter / width;
14191
14213
  const targetZoom = mag / conversionFactor;
14192
- await this.viewer.viewport.zoomTo(targetZoom, this.viewer.viewport.getCenter(), false);
14214
+ await this.viewer.viewport.zoomTo(targetZoom, point, false);
14193
14215
  this.updateMagnificationDisplay();
14194
14216
  } else {
14195
14217
  const tiledImage = this.viewer.world.getItemAt(0);
@@ -14198,7 +14220,7 @@ class MagnificationPlugin {
14198
14220
  const baseMag = ((_b2 = this.viewer.source) == null ? void 0 : _b2.max_magnification) || 40;
14199
14221
  const targetImageZoom = mag / baseMag;
14200
14222
  const targetViewportZoom = this.viewer.viewport.imageToViewportZoom(targetImageZoom);
14201
- await this.viewer.viewport.zoomTo(targetViewportZoom, this.viewer.viewport.getCenter(), false);
14223
+ await this.viewer.viewport.zoomTo(targetViewportZoom, point, false);
14202
14224
  this.updateMagnificationDisplay();
14203
14225
  }
14204
14226
  }
@@ -14207,6 +14229,36 @@ class MagnificationPlugin {
14207
14229
  this.viewer.viewport.fitHorizontally(true);
14208
14230
  this.viewer.viewport.goHome();
14209
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
+ }
14210
14262
  refresh() {
14211
14263
  this.updateMagnificationDisplay();
14212
14264
  }
@@ -15232,9 +15284,11 @@ const selectionCancelRest = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAA
15232
15284
  const selectionCancelGroup = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAYAAADVhWD8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODIyQUM5QkUyMDFBMkEwRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDRjQ1MzBFODczRjMxMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDRjQ1MzBFNzczRjMxMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDg4MDExNzQwNzIwNjgxMTgyMkFGQkMyQkQyOEFDNzciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc4MDExNzQwNzIwNjgxMTgyMkFDOUJFMjAxQTJBMEYiLz4gPC9yZGY6RGVzY3Jp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";
15233
15285
  const selectionCancelHover = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAYAAADVhWD8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODIyQUM5QkUyMDFBMkEwRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMUM1QzMyODczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMUM1QzMyNzczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDY4MDExNzQwNzIwNjgxMTgyMkFGQkMyQkQyOEFDNzciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc4MDExNzQwNzIwNjgxMTgyMkFDOUJFMjAxQTJBMEYiLz4gPC9yZGY6RGVzY3Jp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";
15234
15286
  const selectionCancelDown = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAiCAYAAADVhWD8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODIyQUM5QkUyMDFBMkEwRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpERkFFQjU3NzczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpERkFFQjU3NjczRjExMUU1OEFDRDgxN0E3MzVCRjJGOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDY4MDExNzQwNzIwNjgxMTgyMkFGQkMyQkQyOEFDNzciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc4MDExNzQwNzIwNjgxMTgyMkFDOUJFMjAxQTJBMEYiLz4gPC9yZGY6RGVzY3Jp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";
15235
- OpenSeadragon.setString("Tooltips.SelectionToggle", t("selection.toggle"));
15236
- OpenSeadragon.setString("Tooltips.SelectionConfirm", t("selection.confirm"));
15237
- OpenSeadragon.setString("Tooltips.SelectionCancel", t("selection.cancel"));
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
+ }
15238
15292
  class SelectionPlugin {
15239
15293
  constructor(viewer, options = {}) {
15240
15294
  __publicField(this, "viewer");
@@ -15300,6 +15354,13 @@ class SelectionPlugin {
15300
15354
  ...options
15301
15355
  };
15302
15356
  this.init();
15357
+ updateOsdTooltips();
15358
+ }
15359
+ /**
15360
+ * 更新语言环境,刷新工具提示
15361
+ */
15362
+ updateLocale() {
15363
+ updateOsdTooltips();
15303
15364
  }
15304
15365
  init() {
15305
15366
  this.viewer.addOnceHandler("open", () => {
@@ -15717,6 +15778,30 @@ class MedToolbar {
15717
15778
  this.render();
15718
15779
  this.mount();
15719
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
+ }
15720
15805
  destroy() {
15721
15806
  this.closeDropdown(true);
15722
15807
  this.element.remove();
@@ -16382,6 +16467,23 @@ class MedViewerEngine {
16382
16467
  (_e2 = this.colorAdjust) == null ? void 0 : _e2.destroy();
16383
16468
  this.viewer.destroy();
16384
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
+ }
16385
16487
  }
16386
16488
  if (typeof window !== "undefined") {
16387
16489
  window.MedViewerSDK = {