@8btc/whiteboard 0.0.15 → 0.0.16

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 CHANGED
@@ -60,7 +60,11 @@ export declare class CanvasApi extends CanvasCore {
60
60
  * @param id - 图片节点 ID
61
61
  * @returns DataURL 格式的图片数据,如果节点不存在则返回 null
62
62
  */
63
- exportImageWithMarker(id: string): string | null;
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, updateMarkerScale_fn, setupEventHandlers_fn3, _canvasStage, _mainLayer, _canvasTransformer, _draftNode, _container, _handleKeyDown, _CanvasCore_instances, setupKeyboardEvents_fn;
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, updateMarkerScale_fn).call(this);
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
- updateMarkerScale_fn = function() {
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) {
@@ -1803,7 +1806,7 @@ class CanvasApi extends CanvasCore {
1803
1806
  * @param id - 图片节点 ID
1804
1807
  * @returns DataURL 格式的图片数据,如果节点不存在则返回 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");
@@ -1820,16 +1823,42 @@ class CanvasApi extends CanvasCore {
1820
1823
  const markerShape = this.getStage().findOne(`#${markerNode.id}`);
1821
1824
  if (markerShape) {
1822
1825
  const markerClone = markerShape.clone();
1826
+ const rect = markerClone.findOne(".rect");
1827
+ const markerGroup = markerClone.findOne(".marker-group");
1828
+ if (rect) {
1829
+ rect.strokeWidth(3);
1830
+ rect.dash([5, 5]);
1831
+ rect.cornerRadius(6);
1832
+ }
1833
+ if (markerGroup) {
1834
+ const circle = markerGroup.findOne("Circle");
1835
+ const text = markerGroup.findOne("Text");
1836
+ if (circle) {
1837
+ circle.radius(14);
1838
+ circle.strokeWidth(3);
1839
+ }
1840
+ if (text) {
1841
+ const radius = 14;
1842
+ text.x(-radius);
1843
+ text.y(-radius);
1844
+ text.width(radius * 2);
1845
+ text.height(radius * 2);
1846
+ text.fontSize(16);
1847
+ }
1848
+ }
1823
1849
  tempGroup.add(markerClone);
1824
1850
  }
1825
1851
  });
1826
1852
  const box = tempGroup.getClientRect();
1853
+ console.log("Exporting image with markers, bounding box:", box);
1827
1854
  const dataURL = tempGroup.toDataURL({
1828
1855
  x: box.x,
1829
1856
  y: box.y,
1830
1857
  width: box.width,
1831
1858
  height: box.height,
1832
- pixelRatio: 2
1859
+ pixelRatio: options?.pixelRatio ?? 2,
1860
+ mimeType: options?.mimeType ?? "image/png",
1861
+ quality: options?.quality ?? 1
1833
1862
  });
1834
1863
  tempGroup.destroy();
1835
1864
  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, updateMarkerScale_fn, setupEventHandlers_fn3, _canvasStage, _mainLayer, _canvasTransformer, _draftNode, _container, _handleKeyDown, _CanvasCore_instances, setupKeyboardEvents_fn;
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, updateMarkerScale_fn).call(this);
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
- updateMarkerScale_fn = function() {
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) {
@@ -3120,7 +3123,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3120
3123
  * @param id - 图片节点 ID
3121
3124
  * @returns DataURL 格式的图片数据,如果节点不存在则返回 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");
@@ -3137,16 +3140,42 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3137
3140
  const markerShape = this.getStage().findOne(`#${markerNode.id}`);
3138
3141
  if (markerShape) {
3139
3142
  const markerClone = markerShape.clone();
3143
+ const rect = markerClone.findOne(".rect");
3144
+ const markerGroup = markerClone.findOne(".marker-group");
3145
+ if (rect) {
3146
+ rect.strokeWidth(3);
3147
+ rect.dash([5, 5]);
3148
+ rect.cornerRadius(6);
3149
+ }
3150
+ if (markerGroup) {
3151
+ const circle = markerGroup.findOne("Circle");
3152
+ const text = markerGroup.findOne("Text");
3153
+ if (circle) {
3154
+ circle.radius(14);
3155
+ circle.strokeWidth(3);
3156
+ }
3157
+ if (text) {
3158
+ const radius = 14;
3159
+ text.x(-radius);
3160
+ text.y(-radius);
3161
+ text.width(radius * 2);
3162
+ text.height(radius * 2);
3163
+ text.fontSize(16);
3164
+ }
3165
+ }
3140
3166
  tempGroup.add(markerClone);
3141
3167
  }
3142
3168
  });
3143
3169
  const box = tempGroup.getClientRect();
3170
+ console.log("Exporting image with markers, bounding box:", box);
3144
3171
  const dataURL = tempGroup.toDataURL({
3145
3172
  x: box.x,
3146
3173
  y: box.y,
3147
3174
  width: box.width,
3148
3175
  height: box.height,
3149
- pixelRatio: 2
3176
+ pixelRatio: options?.pixelRatio ?? 2,
3177
+ mimeType: options?.mimeType ?? "image/png",
3178
+ quality: options?.quality ?? 1
3150
3179
  });
3151
3180
  tempGroup.destroy();
3152
3181
  return dataURL;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@8btc/whiteboard",
3
3
  "private": false,
4
- "version": "0.0.15",
4
+ "version": "0.0.16",
5
5
  "type": "module",
6
6
  "main": "./dist/index.umd.js",
7
7
  "module": "./dist/index.js",