canvu-react 0.4.77 → 0.4.79

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/react.cjs CHANGED
@@ -2255,6 +2255,10 @@ var defaultLabels = {
2255
2255
  collapse: "Collapse images menu",
2256
2256
  expand: "Open images menu"
2257
2257
  };
2258
+ function getAddedItemIds(before, after) {
2259
+ const beforeIds = new Set(before.map((item) => item.id));
2260
+ return after.filter((item) => !beforeIds.has(item.id)).map((item) => item.id);
2261
+ }
2258
2262
  function ImagesMenu({
2259
2263
  items,
2260
2264
  onItemsChange,
@@ -2313,12 +2317,17 @@ function ImagesMenu({
2313
2317
  const onDragEnd = (event) => {
2314
2318
  const { active, over } = event;
2315
2319
  if (!over || active.id === over.id) return;
2316
- const oldIndex = managed.findIndex((i) => i.id === active.id);
2317
- const newIndex = managed.findIndex((i) => i.id === over.id);
2320
+ const activeId = String(active.id);
2321
+ const overId = String(over.id);
2322
+ const oldIndex = managed.findIndex((i) => i.id === activeId);
2323
+ const newIndex = managed.findIndex((i) => i.id === overId);
2318
2324
  if (oldIndex < 0 || newIndex < 0) return;
2319
2325
  const reorderedManaged = sortable.arrayMove(managed, oldIndex, newIndex);
2320
2326
  const orderedIds = reorderedManaged.map((i) => i.id);
2321
- onItemsChange(reorderManagedImages(items, orderedIds));
2327
+ onItemsChange(reorderManagedImages(items, orderedIds), {
2328
+ motive: "reorder",
2329
+ itemIds: [activeId]
2330
+ });
2322
2331
  };
2323
2332
  return /* @__PURE__ */ jsxRuntime.jsxs(
2324
2333
  "section",
@@ -2356,9 +2365,22 @@ function ImagesMenu({
2356
2365
  labels: resolvedLabels,
2357
2366
  hiddenActionSet,
2358
2367
  onFocus: onFocusItem ? () => onFocusItem(item) : void 0,
2359
- onCopy: () => onItemsChange(copyManagedImage(items, item.id)),
2360
- onRotate: () => onItemsChange(rotateManagedImage(items, item.id)),
2361
- onDelete: () => onItemsChange(deleteManagedImage(items, item.id))
2368
+ onCopy: () => {
2369
+ const next = copyManagedImage(items, item.id);
2370
+ const addedIds = getAddedItemIds(items, next);
2371
+ onItemsChange(next, {
2372
+ motive: "duplicate",
2373
+ itemIds: addedIds.length > 0 ? addedIds : [item.id]
2374
+ });
2375
+ },
2376
+ onRotate: () => onItemsChange(rotateManagedImage(items, item.id), {
2377
+ motive: "rotate",
2378
+ itemIds: [item.id]
2379
+ }),
2380
+ onDelete: () => onItemsChange(deleteManagedImage(items, item.id), {
2381
+ motive: "delete",
2382
+ itemIds: [item.id]
2383
+ })
2362
2384
  },
2363
2385
  item.id
2364
2386
  )) })
@@ -7759,6 +7781,22 @@ var SvgVectorRenderer = class {
7759
7781
  }
7760
7782
  };
7761
7783
 
7784
+ // src/scene/draw-stroke-memory.ts
7785
+ var DEFAULT_DRAW_STROKE_WIDTH = 10;
7786
+ function resolveDrawStrokeWidthMemory({
7787
+ toolId,
7788
+ previousToolId,
7789
+ currentStrokeWidth,
7790
+ lastDrawStrokeWidth
7791
+ }) {
7792
+ const leavingDrawTool = previousToolId === "draw" && toolId !== "draw";
7793
+ const nextLastDrawStrokeWidth = leavingDrawTool ? currentStrokeWidth : lastDrawStrokeWidth;
7794
+ return {
7795
+ drawStrokeWidth: nextLastDrawStrokeWidth,
7796
+ nextLastDrawStrokeWidth
7797
+ };
7798
+ }
7799
+
7762
7800
  // src/react/VectorViewport.tsx
7763
7801
  init_link_item();
7764
7802
 
@@ -9638,6 +9676,8 @@ var VectorViewport = react.forwardRef(
9638
9676
  ...DEFAULT_STROKE_STYLE,
9639
9677
  textFontSize: DEFAULT_TEXT_TOOL_FONT_SIZE
9640
9678
  });
9679
+ const lastDrawStrokeWidthRef = react.useRef(DEFAULT_DRAW_STROKE_WIDTH);
9680
+ const previousToolIdRef = react.useRef(null);
9641
9681
  const [strokeStyleState, setStrokeStyleState] = react.useState({
9642
9682
  ...DEFAULT_STROKE_STYLE,
9643
9683
  textFontSize: DEFAULT_TEXT_TOOL_FONT_SIZE
@@ -10710,6 +10750,14 @@ var VectorViewport = react.forwardRef(
10710
10750
  }, [renderFrame]);
10711
10751
  react.useEffect(() => {
10712
10752
  const current = strokeStyleRef.current;
10753
+ const { drawStrokeWidth, nextLastDrawStrokeWidth } = resolveDrawStrokeWidthMemory({
10754
+ toolId,
10755
+ previousToolId: previousToolIdRef.current,
10756
+ currentStrokeWidth: current.strokeWidth,
10757
+ lastDrawStrokeWidth: lastDrawStrokeWidthRef.current
10758
+ });
10759
+ lastDrawStrokeWidthRef.current = nextLastDrawStrokeWidth;
10760
+ previousToolIdRef.current = toolId;
10713
10761
  if (toolId === "marker") {
10714
10762
  setCurrentStrokeStyle({
10715
10763
  ...current,
@@ -10720,7 +10768,7 @@ var VectorViewport = react.forwardRef(
10720
10768
  if (isDefaultMarkerToolStyle(current)) {
10721
10769
  setCurrentStrokeStyle({
10722
10770
  stroke: DEFAULT_STROKE_STYLE.stroke,
10723
- strokeWidth: toolId === "draw" ? 10 : DEFAULT_STROKE_STYLE.strokeWidth,
10771
+ strokeWidth: toolId === "draw" ? drawStrokeWidth : DEFAULT_STROKE_STYLE.strokeWidth,
10724
10772
  strokeDash: current.strokeDash,
10725
10773
  textFontSize: current.textFontSize
10726
10774
  });
@@ -10728,7 +10776,7 @@ var VectorViewport = react.forwardRef(
10728
10776
  }
10729
10777
  setCurrentStrokeStyle({
10730
10778
  stroke: current.stroke,
10731
- strokeWidth: toolId === "draw" ? 10 : current.strokeWidth,
10779
+ strokeWidth: toolId === "draw" ? drawStrokeWidth : current.strokeWidth,
10732
10780
  strokeDash: current.strokeDash,
10733
10781
  textFontSize: current.textFontSize
10734
10782
  });