@8btc/whiteboard 0.0.15 → 0.0.17
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.ts +6 -2
- package/dist/index.js +39 -6
- package/dist/index.umd.js +39 -6
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -58,9 +58,13 @@ export declare class CanvasApi extends CanvasCore {
|
|
|
58
58
|
/**
|
|
59
59
|
* 导出带有标注的图片节点为图片
|
|
60
60
|
* @param id - 图片节点 ID
|
|
61
|
-
* @returns DataURL
|
|
61
|
+
* @returns DataURL 格式的图片数据,如果节点或者 marker 不存在则返回 null
|
|
62
62
|
*/
|
|
63
|
-
exportImageWithMarker(id: string
|
|
63
|
+
exportImageWithMarker(id: string, options?: {
|
|
64
|
+
pixelRatio?: number;
|
|
65
|
+
mimeType?: string;
|
|
66
|
+
quality?: number;
|
|
67
|
+
}): string | null;
|
|
64
68
|
/**
|
|
65
69
|
* 删除当前选中的节点
|
|
66
70
|
* 如果删除的是 image 节点,会同步删除所有关联的 image-marker
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
|
|
|
9
9
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
10
10
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
11
11
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
12
|
-
var _core, _stage, _viewport, _handleWheel, _handlePointerDown, _handlePointerMove, _handlePointerUp, _handleDragStart, _handleDragMove, _handleDragEnd, _CanvasStage_instances, setupEventListeners_fn, _core2, _transformer, _handleTransformStart, _handleTransform, _handleTransformEnd, _handleDragStart2, _handleDragMove2, _handleDragEnd2, _CanvasTransformer_instances, setupEventListeners_fn2, _toolTypeChangeHandler, _RectNode_instances, setupEventHandlers_fn, _ImageNode_instances, loadImage_fn, _toolTypeChangeHandler2, setupEventHandlers_fn2, syncImageMarkers_fn, syncImageMarkersToState_fn, _rect, _markerGroup, _circle, _text, _handleViewportChange, _handleNodesSelected, _ImageMarkerNode_instances,
|
|
12
|
+
var _core, _stage, _viewport, _handleWheel, _handlePointerDown, _handlePointerMove, _handlePointerUp, _handleDragStart, _handleDragMove, _handleDragEnd, _CanvasStage_instances, setupEventListeners_fn, _core2, _transformer, _handleTransformStart, _handleTransform, _handleTransformEnd, _handleDragStart2, _handleDragMove2, _handleDragEnd2, _CanvasTransformer_instances, setupEventListeners_fn2, _toolTypeChangeHandler, _RectNode_instances, setupEventHandlers_fn, _ImageNode_instances, loadImage_fn, _toolTypeChangeHandler2, setupEventHandlers_fn2, syncImageMarkers_fn, syncImageMarkersToState_fn, _rect, _markerGroup, _circle, _text, _handleViewportChange, _handleNodesSelected, _ImageMarkerNode_instances, changeVisulStyle_fn, setupEventHandlers_fn3, _canvasStage, _mainLayer, _canvasTransformer, _draftNode, _container, _handleKeyDown, _CanvasCore_instances, setupKeyboardEvents_fn;
|
|
13
13
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
14
14
|
import { useState, useEffect, useRef } from "react";
|
|
15
15
|
import Konva from "konva";
|
|
@@ -909,7 +909,7 @@ class ImageMarkerNode extends BaseCanvasNode {
|
|
|
909
909
|
__privateSet(this, _text, __privateGet(this, _markerGroup).findOne("Text"));
|
|
910
910
|
__privateMethod(this, _ImageMarkerNode_instances, setupEventHandlers_fn3).call(this);
|
|
911
911
|
__privateSet(this, _handleViewportChange, () => {
|
|
912
|
-
__privateMethod(this, _ImageMarkerNode_instances,
|
|
912
|
+
__privateMethod(this, _ImageMarkerNode_instances, changeVisulStyle_fn).call(this);
|
|
913
913
|
});
|
|
914
914
|
this.core.on("viewport:scale:change", __privateGet(this, _handleViewportChange));
|
|
915
915
|
__privateSet(this, _handleNodesSelected, (selectedIds) => {
|
|
@@ -1065,7 +1065,7 @@ _ImageMarkerNode_instances = new WeakSet();
|
|
|
1065
1065
|
/**
|
|
1066
1066
|
* 更新标记点的缩放以保持视觉大小不变
|
|
1067
1067
|
*/
|
|
1068
|
-
|
|
1068
|
+
changeVisulStyle_fn = function() {
|
|
1069
1069
|
const stageScale = this.core.getStageScale();
|
|
1070
1070
|
const radius = 14 / stageScale;
|
|
1071
1071
|
const strokeWidth = 3 / stageScale;
|
|
@@ -1101,6 +1101,9 @@ setupEventHandlers_fn3 = function() {
|
|
|
1101
1101
|
__privateGet(this, _markerGroup).on("pointerdown", () => {
|
|
1102
1102
|
this.core.selectNode(this.node.id);
|
|
1103
1103
|
});
|
|
1104
|
+
__privateGet(this, _markerGroup).on("transform", () => {
|
|
1105
|
+
console.log("image marker group on transform called");
|
|
1106
|
+
});
|
|
1104
1107
|
};
|
|
1105
1108
|
function createCanvasNodeByType(core, type, config, isDraft = false) {
|
|
1106
1109
|
switch (type) {
|
|
@@ -1801,9 +1804,9 @@ class CanvasApi extends CanvasCore {
|
|
|
1801
1804
|
/**
|
|
1802
1805
|
* 导出带有标注的图片节点为图片
|
|
1803
1806
|
* @param id - 图片节点 ID
|
|
1804
|
-
* @returns DataURL
|
|
1807
|
+
* @returns DataURL 格式的图片数据,如果节点或者 marker 不存在则返回 null
|
|
1805
1808
|
*/
|
|
1806
|
-
exportImageWithMarker(id) {
|
|
1809
|
+
exportImageWithMarker(id, options) {
|
|
1807
1810
|
const imageShape = this.getStage().findOne(`#${id}`);
|
|
1808
1811
|
if (!imageShape) {
|
|
1809
1812
|
console.warn("Image shape not found on stage");
|
|
@@ -1813,6 +1816,10 @@ class CanvasApi extends CanvasCore {
|
|
|
1813
1816
|
const markerNodes = nodes.filter(
|
|
1814
1817
|
(n) => n.type === "image-marker" && n.meta.parent === id
|
|
1815
1818
|
);
|
|
1819
|
+
if (markerNodes.length === 0) {
|
|
1820
|
+
console.warn("No image-marker nodes found for the given image ID");
|
|
1821
|
+
return null;
|
|
1822
|
+
}
|
|
1816
1823
|
const tempGroup = new Konva.Group();
|
|
1817
1824
|
const imageClone = imageShape.clone();
|
|
1818
1825
|
tempGroup.add(imageClone);
|
|
@@ -1820,16 +1827,42 @@ class CanvasApi extends CanvasCore {
|
|
|
1820
1827
|
const markerShape = this.getStage().findOne(`#${markerNode.id}`);
|
|
1821
1828
|
if (markerShape) {
|
|
1822
1829
|
const markerClone = markerShape.clone();
|
|
1830
|
+
const rect = markerClone.findOne(".rect");
|
|
1831
|
+
const markerGroup = markerClone.findOne(".marker-group");
|
|
1832
|
+
if (rect) {
|
|
1833
|
+
rect.strokeWidth(3);
|
|
1834
|
+
rect.dash([5, 5]);
|
|
1835
|
+
rect.cornerRadius(6);
|
|
1836
|
+
}
|
|
1837
|
+
if (markerGroup) {
|
|
1838
|
+
const circle = markerGroup.findOne("Circle");
|
|
1839
|
+
const text = markerGroup.findOne("Text");
|
|
1840
|
+
if (circle) {
|
|
1841
|
+
circle.radius(14);
|
|
1842
|
+
circle.strokeWidth(3);
|
|
1843
|
+
}
|
|
1844
|
+
if (text) {
|
|
1845
|
+
const radius = 14;
|
|
1846
|
+
text.x(-radius);
|
|
1847
|
+
text.y(-radius);
|
|
1848
|
+
text.width(radius * 2);
|
|
1849
|
+
text.height(radius * 2);
|
|
1850
|
+
text.fontSize(16);
|
|
1851
|
+
}
|
|
1852
|
+
}
|
|
1823
1853
|
tempGroup.add(markerClone);
|
|
1824
1854
|
}
|
|
1825
1855
|
});
|
|
1826
1856
|
const box = tempGroup.getClientRect();
|
|
1857
|
+
console.log("Exporting image with markers, bounding box:", box);
|
|
1827
1858
|
const dataURL = tempGroup.toDataURL({
|
|
1828
1859
|
x: box.x,
|
|
1829
1860
|
y: box.y,
|
|
1830
1861
|
width: box.width,
|
|
1831
1862
|
height: box.height,
|
|
1832
|
-
pixelRatio: 2
|
|
1863
|
+
pixelRatio: options?.pixelRatio ?? 2,
|
|
1864
|
+
mimeType: options?.mimeType ?? "image/png",
|
|
1865
|
+
quality: options?.quality ?? 1
|
|
1833
1866
|
});
|
|
1834
1867
|
tempGroup.destroy();
|
|
1835
1868
|
return dataURL;
|
package/dist/index.umd.js
CHANGED
|
@@ -13,7 +13,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
13
13
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
14
14
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
15
15
|
|
|
16
|
-
var _core, _stage, _viewport, _handleWheel, _handlePointerDown, _handlePointerMove, _handlePointerUp, _handleDragStart, _handleDragMove, _handleDragEnd, _CanvasStage_instances, setupEventListeners_fn, _core2, _transformer, _handleTransformStart, _handleTransform, _handleTransformEnd, _handleDragStart2, _handleDragMove2, _handleDragEnd2, _CanvasTransformer_instances, setupEventListeners_fn2, _toolTypeChangeHandler, _RectNode_instances, setupEventHandlers_fn, _ImageNode_instances, loadImage_fn, _toolTypeChangeHandler2, setupEventHandlers_fn2, syncImageMarkers_fn, syncImageMarkersToState_fn, _rect, _markerGroup, _circle, _text, _handleViewportChange, _handleNodesSelected, _ImageMarkerNode_instances,
|
|
16
|
+
var _core, _stage, _viewport, _handleWheel, _handlePointerDown, _handlePointerMove, _handlePointerUp, _handleDragStart, _handleDragMove, _handleDragEnd, _CanvasStage_instances, setupEventListeners_fn, _core2, _transformer, _handleTransformStart, _handleTransform, _handleTransformEnd, _handleDragStart2, _handleDragMove2, _handleDragEnd2, _CanvasTransformer_instances, setupEventListeners_fn2, _toolTypeChangeHandler, _RectNode_instances, setupEventHandlers_fn, _ImageNode_instances, loadImage_fn, _toolTypeChangeHandler2, setupEventHandlers_fn2, syncImageMarkers_fn, syncImageMarkersToState_fn, _rect, _markerGroup, _circle, _text, _handleViewportChange, _handleNodesSelected, _ImageMarkerNode_instances, changeVisulStyle_fn, setupEventHandlers_fn3, _canvasStage, _mainLayer, _canvasTransformer, _draftNode, _container, _handleKeyDown, _CanvasCore_instances, setupKeyboardEvents_fn;
|
|
17
17
|
var __vite_style__ = document.createElement("style");
|
|
18
18
|
__vite_style__.textContent = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
19
19
|
@layer properties {
|
|
@@ -2226,7 +2226,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
2226
2226
|
__privateSet(this, _text, __privateGet(this, _markerGroup).findOne("Text"));
|
|
2227
2227
|
__privateMethod(this, _ImageMarkerNode_instances, setupEventHandlers_fn3).call(this);
|
|
2228
2228
|
__privateSet(this, _handleViewportChange, () => {
|
|
2229
|
-
__privateMethod(this, _ImageMarkerNode_instances,
|
|
2229
|
+
__privateMethod(this, _ImageMarkerNode_instances, changeVisulStyle_fn).call(this);
|
|
2230
2230
|
});
|
|
2231
2231
|
this.core.on("viewport:scale:change", __privateGet(this, _handleViewportChange));
|
|
2232
2232
|
__privateSet(this, _handleNodesSelected, (selectedIds) => {
|
|
@@ -2382,7 +2382,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
2382
2382
|
/**
|
|
2383
2383
|
* 更新标记点的缩放以保持视觉大小不变
|
|
2384
2384
|
*/
|
|
2385
|
-
|
|
2385
|
+
changeVisulStyle_fn = function() {
|
|
2386
2386
|
const stageScale = this.core.getStageScale();
|
|
2387
2387
|
const radius = 14 / stageScale;
|
|
2388
2388
|
const strokeWidth = 3 / stageScale;
|
|
@@ -2418,6 +2418,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
2418
2418
|
__privateGet(this, _markerGroup).on("pointerdown", () => {
|
|
2419
2419
|
this.core.selectNode(this.node.id);
|
|
2420
2420
|
});
|
|
2421
|
+
__privateGet(this, _markerGroup).on("transform", () => {
|
|
2422
|
+
console.log("image marker group on transform called");
|
|
2423
|
+
});
|
|
2421
2424
|
};
|
|
2422
2425
|
function createCanvasNodeByType(core, type, config, isDraft = false) {
|
|
2423
2426
|
switch (type) {
|
|
@@ -3118,9 +3121,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
3118
3121
|
/**
|
|
3119
3122
|
* 导出带有标注的图片节点为图片
|
|
3120
3123
|
* @param id - 图片节点 ID
|
|
3121
|
-
* @returns DataURL
|
|
3124
|
+
* @returns DataURL 格式的图片数据,如果节点或者 marker 不存在则返回 null
|
|
3122
3125
|
*/
|
|
3123
|
-
exportImageWithMarker(id) {
|
|
3126
|
+
exportImageWithMarker(id, options) {
|
|
3124
3127
|
const imageShape = this.getStage().findOne(`#${id}`);
|
|
3125
3128
|
if (!imageShape) {
|
|
3126
3129
|
console.warn("Image shape not found on stage");
|
|
@@ -3130,6 +3133,10 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
3130
3133
|
const markerNodes = nodes.filter(
|
|
3131
3134
|
(n) => n.type === "image-marker" && n.meta.parent === id
|
|
3132
3135
|
);
|
|
3136
|
+
if (markerNodes.length === 0) {
|
|
3137
|
+
console.warn("No image-marker nodes found for the given image ID");
|
|
3138
|
+
return null;
|
|
3139
|
+
}
|
|
3133
3140
|
const tempGroup = new Konva.Group();
|
|
3134
3141
|
const imageClone = imageShape.clone();
|
|
3135
3142
|
tempGroup.add(imageClone);
|
|
@@ -3137,16 +3144,42 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
|
|
|
3137
3144
|
const markerShape = this.getStage().findOne(`#${markerNode.id}`);
|
|
3138
3145
|
if (markerShape) {
|
|
3139
3146
|
const markerClone = markerShape.clone();
|
|
3147
|
+
const rect = markerClone.findOne(".rect");
|
|
3148
|
+
const markerGroup = markerClone.findOne(".marker-group");
|
|
3149
|
+
if (rect) {
|
|
3150
|
+
rect.strokeWidth(3);
|
|
3151
|
+
rect.dash([5, 5]);
|
|
3152
|
+
rect.cornerRadius(6);
|
|
3153
|
+
}
|
|
3154
|
+
if (markerGroup) {
|
|
3155
|
+
const circle = markerGroup.findOne("Circle");
|
|
3156
|
+
const text = markerGroup.findOne("Text");
|
|
3157
|
+
if (circle) {
|
|
3158
|
+
circle.radius(14);
|
|
3159
|
+
circle.strokeWidth(3);
|
|
3160
|
+
}
|
|
3161
|
+
if (text) {
|
|
3162
|
+
const radius = 14;
|
|
3163
|
+
text.x(-radius);
|
|
3164
|
+
text.y(-radius);
|
|
3165
|
+
text.width(radius * 2);
|
|
3166
|
+
text.height(radius * 2);
|
|
3167
|
+
text.fontSize(16);
|
|
3168
|
+
}
|
|
3169
|
+
}
|
|
3140
3170
|
tempGroup.add(markerClone);
|
|
3141
3171
|
}
|
|
3142
3172
|
});
|
|
3143
3173
|
const box = tempGroup.getClientRect();
|
|
3174
|
+
console.log("Exporting image with markers, bounding box:", box);
|
|
3144
3175
|
const dataURL = tempGroup.toDataURL({
|
|
3145
3176
|
x: box.x,
|
|
3146
3177
|
y: box.y,
|
|
3147
3178
|
width: box.width,
|
|
3148
3179
|
height: box.height,
|
|
3149
|
-
pixelRatio: 2
|
|
3180
|
+
pixelRatio: options?.pixelRatio ?? 2,
|
|
3181
|
+
mimeType: options?.mimeType ?? "image/png",
|
|
3182
|
+
quality: options?.quality ?? 1
|
|
3150
3183
|
});
|
|
3151
3184
|
tempGroup.destroy();
|
|
3152
3185
|
return dataURL;
|