med-viewer-sdk 0.1.13 → 0.1.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/core/Toolbar.d.ts +1 -1
- package/dist/med-viewer-sdk.mjs +89 -41
- package/dist/med-viewer-sdk.umd.js +1 -1
- package/package.json +2 -2
- package/src/core/SelectionPlugin.ts +8 -0
- package/src/core/Toolbar.ts +386 -374
- package/src/i18n/i18n.ts +4 -4
- package/src/types/type.d.ts +4 -8
package/dist/core/Toolbar.d.ts
CHANGED
package/dist/med-viewer-sdk.mjs
CHANGED
|
@@ -13556,9 +13556,9 @@ const dicts = {
|
|
|
13556
13556
|
line: "线段",
|
|
13557
13557
|
freehand: "手绘",
|
|
13558
13558
|
reset: "重置",
|
|
13559
|
-
annoSettings: "
|
|
13559
|
+
annoSettings: "标注",
|
|
13560
13560
|
colorAdjust: "颜色调整",
|
|
13561
|
-
screenshot: "
|
|
13561
|
+
screenshot: "截图",
|
|
13562
13562
|
brightness: "亮度",
|
|
13563
13563
|
contrast: "对比度",
|
|
13564
13564
|
saturation: "饱和度",
|
|
@@ -13596,9 +13596,9 @@ const dicts = {
|
|
|
13596
13596
|
line: "Line",
|
|
13597
13597
|
freehand: "Freehand",
|
|
13598
13598
|
reset: "Reset",
|
|
13599
|
-
annoSettings: "Annotation
|
|
13599
|
+
annoSettings: "Annotation",
|
|
13600
13600
|
colorAdjust: "Color Adjust",
|
|
13601
|
-
screenshot: "Screenshot
|
|
13601
|
+
screenshot: "Screenshot",
|
|
13602
13602
|
brightness: "Brightness",
|
|
13603
13603
|
contrast: "Contrast",
|
|
13604
13604
|
saturation: "Saturation",
|
|
@@ -15426,14 +15426,7 @@ const createAnnoDropdownContent = (engine, hide) => {
|
|
|
15426
15426
|
colorSection.innerHTML = `<div class="med-toolbar-section-title">${t("toolbar.annoColor")}</div>`;
|
|
15427
15427
|
const colorGrid = document.createElement("div");
|
|
15428
15428
|
colorGrid.className = "med-color-grid";
|
|
15429
|
-
const colors = [
|
|
15430
|
-
"#ff0000",
|
|
15431
|
-
"#00ff00",
|
|
15432
|
-
"#0000ff",
|
|
15433
|
-
"#ffff00",
|
|
15434
|
-
"#00ffff",
|
|
15435
|
-
"#ffffff"
|
|
15436
|
-
];
|
|
15429
|
+
const colors = ["#ff0000", "#00ff00", "#0000ff", "#ffff00", "#00ffff", "#ffffff"];
|
|
15437
15430
|
colors.forEach((c2) => {
|
|
15438
15431
|
const dot = document.createElement("div");
|
|
15439
15432
|
dot.className = "med-color-item";
|
|
@@ -15584,24 +15577,16 @@ const createColorAdjustDropdownContent = (engine, hide) => {
|
|
|
15584
15577
|
)
|
|
15585
15578
|
);
|
|
15586
15579
|
container.appendChild(
|
|
15587
|
-
createSlider(
|
|
15588
|
-
|
|
15589
|
-
|
|
15590
|
-
|
|
15591
|
-
|
|
15592
|
-
|
|
15593
|
-
|
|
15594
|
-
(
|
|
15595
|
-
|
|
15596
|
-
|
|
15597
|
-
hue: val,
|
|
15598
|
-
sepia: false,
|
|
15599
|
-
greyscale: false
|
|
15600
|
-
});
|
|
15601
|
-
container.querySelector("#sepia-checkbox").checked = false;
|
|
15602
|
-
container.querySelector("#greyscale-checkbox").checked = false;
|
|
15603
|
-
}
|
|
15604
|
-
)
|
|
15580
|
+
createSlider(t("toolbar.hue"), "hue-slider", 0, 360, 1, currentAdjustments.hue || 0, (val) => {
|
|
15581
|
+
var _a3;
|
|
15582
|
+
(_a3 = engine.colorAdjust) == null ? void 0 : _a3.setAdjustments({
|
|
15583
|
+
hue: val,
|
|
15584
|
+
sepia: false,
|
|
15585
|
+
greyscale: false
|
|
15586
|
+
});
|
|
15587
|
+
container.querySelector("#sepia-checkbox").checked = false;
|
|
15588
|
+
container.querySelector("#greyscale-checkbox").checked = false;
|
|
15589
|
+
})
|
|
15605
15590
|
);
|
|
15606
15591
|
container.appendChild(
|
|
15607
15592
|
createSlider(
|
|
@@ -15758,9 +15743,7 @@ class MedToolbar {
|
|
|
15758
15743
|
this.element.innerHTML = "";
|
|
15759
15744
|
let buttonsToRender;
|
|
15760
15745
|
if (this.options.buttons && this.options.buttons.length > 0) {
|
|
15761
|
-
const defaultButtonMap = new Map(
|
|
15762
|
-
DEFAULT_BUTTONS.map((btn) => [btn.id, btn])
|
|
15763
|
-
);
|
|
15746
|
+
const defaultButtonMap = new Map(DEFAULT_BUTTONS.map((btn) => [btn.id, btn]));
|
|
15764
15747
|
buttonsToRender = this.options.buttons.map((userBtn) => {
|
|
15765
15748
|
const defaultBtn = defaultButtonMap.get(userBtn.id);
|
|
15766
15749
|
return defaultBtn ? { ...defaultBtn, ...userBtn } : userBtn;
|
|
@@ -15795,16 +15778,19 @@ class MedToolbar {
|
|
|
15795
15778
|
}
|
|
15796
15779
|
};
|
|
15797
15780
|
wrapper.appendChild(btn);
|
|
15781
|
+
if (btnConfig.label) {
|
|
15782
|
+
const tooltip = document.createElement("div");
|
|
15783
|
+
tooltip.className = "med-tooltip";
|
|
15784
|
+
tooltip.textContent = btnConfig.label;
|
|
15785
|
+
wrapper.appendChild(tooltip);
|
|
15786
|
+
}
|
|
15798
15787
|
this.element.appendChild(wrapper);
|
|
15799
15788
|
});
|
|
15800
15789
|
}
|
|
15801
15790
|
showDropdown(parent, config) {
|
|
15802
15791
|
this.dropdownElement = document.createElement("div");
|
|
15803
15792
|
this.dropdownElement.className = "med-toolbar-dropdown";
|
|
15804
|
-
const content = config.dropdownContent(
|
|
15805
|
-
this.engine,
|
|
15806
|
-
() => this.closeDropdown()
|
|
15807
|
-
);
|
|
15793
|
+
const content = config.dropdownContent(this.engine, () => this.closeDropdown());
|
|
15808
15794
|
this.dropdownElement.appendChild(content);
|
|
15809
15795
|
parent.appendChild(this.dropdownElement);
|
|
15810
15796
|
this.adjustDropdownPosition();
|
|
@@ -15817,10 +15803,7 @@ class MedToolbar {
|
|
|
15817
15803
|
this.closeDropdown();
|
|
15818
15804
|
}
|
|
15819
15805
|
};
|
|
15820
|
-
setTimeout(
|
|
15821
|
-
() => document.addEventListener("click", this.outsideClickHandler),
|
|
15822
|
-
0
|
|
15823
|
-
);
|
|
15806
|
+
setTimeout(() => document.addEventListener("click", this.outsideClickHandler), 0);
|
|
15824
15807
|
}
|
|
15825
15808
|
adjustDropdownPosition() {
|
|
15826
15809
|
if (!this.dropdownElement)
|
|
@@ -15970,6 +15953,71 @@ class MedToolbar {
|
|
|
15970
15953
|
}
|
|
15971
15954
|
.med-toolbar--MIDDLE_RIGHT .med-toolbar-dropdown.show { transform: translateX(0) !important; }
|
|
15972
15955
|
|
|
15956
|
+
/* Tooltip styles */
|
|
15957
|
+
.med-tooltip {
|
|
15958
|
+
position: absolute;
|
|
15959
|
+
padding: 6px 10px;
|
|
15960
|
+
background: rgba(0, 0, 0, 0.75);
|
|
15961
|
+
color: #fff;
|
|
15962
|
+
border-radius: 6px;
|
|
15963
|
+
font-size: 12px;
|
|
15964
|
+
white-space: nowrap;
|
|
15965
|
+
z-index: 102;
|
|
15966
|
+
opacity: 0;
|
|
15967
|
+
pointer-events: none;
|
|
15968
|
+
transition: opacity 0.2s ease, transform 0.2s ease;
|
|
15969
|
+
}
|
|
15970
|
+
|
|
15971
|
+
.med-toolbar-item-wrapper:hover .med-tooltip {
|
|
15972
|
+
opacity: 1;
|
|
15973
|
+
pointer-events: auto;
|
|
15974
|
+
}
|
|
15975
|
+
|
|
15976
|
+
/* Tooltip directions based on toolbar position */
|
|
15977
|
+
|
|
15978
|
+
/* Default: bottom tooltip (for top toolbars) */
|
|
15979
|
+
.med-toolbar-item-wrapper .med-tooltip {
|
|
15980
|
+
top: calc(100% + 12px); /* Position below the button */
|
|
15981
|
+
left: 50%;
|
|
15982
|
+
transform: translateX(-50%) translateY(0px);
|
|
15983
|
+
}
|
|
15984
|
+
.med-toolbar-item-wrapper:hover .med-tooltip {
|
|
15985
|
+
transform: translateX(-50%) translateY(0);
|
|
15986
|
+
}
|
|
15987
|
+
|
|
15988
|
+
|
|
15989
|
+
/* Top tooltip (for bottom toolbars) */
|
|
15990
|
+
[class*="med-toolbar--BOTTOM"] .med-toolbar-item-wrapper .med-tooltip {
|
|
15991
|
+
bottom: calc(100% + 12px); /* Position above the button */
|
|
15992
|
+
top: auto;
|
|
15993
|
+
left: 50%;
|
|
15994
|
+
transform: translateX(-50%) translateY(0px);
|
|
15995
|
+
}
|
|
15996
|
+
[class*="med-toolbar--BOTTOM"] .med-toolbar-item-wrapper:hover .med-tooltip {
|
|
15997
|
+
transform: translateX(-50%) translateY(0);
|
|
15998
|
+
}
|
|
15999
|
+
|
|
16000
|
+
/* Right tooltip (for middle-left toolbars) */
|
|
16001
|
+
[class*="med-toolbar--MIDDLE_LEFT"] .med-toolbar-item-wrapper .med-tooltip {
|
|
16002
|
+
left: calc(100% + 12px); /* Position to the right of the button */
|
|
16003
|
+
top: 50%;
|
|
16004
|
+
transform: translateY(-50%) translateX(0px);
|
|
16005
|
+
}
|
|
16006
|
+
[class*="med-toolbar--MIDDLE_LEFT"] .med-toolbar-item-wrapper:hover .med-tooltip {
|
|
16007
|
+
transform: translateY(-50%) translateX(0);
|
|
16008
|
+
}
|
|
16009
|
+
|
|
16010
|
+
/* Left tooltip (for middle-right toolbars) */
|
|
16011
|
+
[class*="med-toolbar--MIDDLE_RIGHT"] .med-toolbar-item-wrapper .med-tooltip {
|
|
16012
|
+
right: calc(100% + 12px); /* Position to the left of the button */
|
|
16013
|
+
top: 50%;
|
|
16014
|
+
left: auto;
|
|
16015
|
+
transform: translateY(-50%) translateX(0px);
|
|
16016
|
+
}
|
|
16017
|
+
[class*="med-toolbar--MIDDLE_RIGHT"] .med-toolbar-item-wrapper:hover .med-tooltip {
|
|
16018
|
+
transform: translateY(-50%) translateX(0);
|
|
16019
|
+
}
|
|
16020
|
+
|
|
15973
16021
|
/* 内容样式 */
|
|
15974
16022
|
.med-toolbar-section-title { font-size: 11px; color: rgba(255,255,255,0.4); margin-bottom: 10px; letter-spacing: 1px; }
|
|
15975
16023
|
.med-color-grid { display: flex; gap: 10px; margin-bottom: 20px; }
|