@bwp-web/canvas 0.7.1 → 0.8.1

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
@@ -17,6 +17,8 @@ export { OverlayContent } from './overlay';
17
17
  export type { OverlayContentProps } from './overlay';
18
18
  export { FixedSizeContent } from './overlay';
19
19
  export type { FixedSizeContentProps } from './overlay';
20
+ export { OverlayBadge } from './overlay';
21
+ export type { OverlayBadgeProps } from './overlay';
20
22
  export type { Point2D, ShapeStyleOptions, SnappingOptions, InteractionModeOptions, SnappableInteractionOptions, DragBounds, ModeSetup, CanvasJSON, } from './types';
21
23
  export type { ObjectDataType } from './fabricAugmentation';
22
24
  export { createRectangle, createRectangleAtPoint, editRectangle, } from './shapes';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -434,21 +434,26 @@ function setBackgroundContrast(canvas, value) {
434
434
  const contrastIdx = currentFilters.findIndex(
435
435
  (f) => f instanceof filters.Contrast
436
436
  );
437
+ let changed = false;
437
438
  if (contrast === 0) {
438
439
  if (contrastIdx >= 0) {
439
440
  bg.filters = currentFilters.filter(
440
441
  (f) => !(f instanceof filters.Contrast)
441
442
  );
442
443
  bg.applyFilters();
444
+ changed = true;
443
445
  }
444
446
  } else if (contrastIdx >= 0) {
445
447
  currentFilters[contrastIdx].contrast = contrast;
446
448
  bg.applyFilters();
449
+ changed = true;
447
450
  } else {
448
451
  bg.filters = [...currentFilters, new filters.Contrast({ contrast })];
449
452
  bg.applyFilters();
453
+ changed = true;
450
454
  }
451
455
  canvas.requestRenderAll();
456
+ if (changed) canvas.fire("background:modified");
452
457
  }
453
458
  function getBackgroundContrast(canvas) {
454
459
  const bg = getBackgroundImage(canvas);
@@ -463,14 +468,18 @@ function setBackgroundInverted(canvas, inverted) {
463
468
  if (!bg) return;
464
469
  const currentFilters = bg.filters ?? [];
465
470
  const hasInvert = currentFilters.some((f) => f instanceof filters.Invert);
471
+ let changed = false;
466
472
  if (inverted && !hasInvert) {
467
473
  bg.filters = [...currentFilters, new filters.Invert()];
468
474
  bg.applyFilters();
475
+ changed = true;
469
476
  } else if (!inverted && hasInvert) {
470
477
  bg.filters = currentFilters.filter((f) => !(f instanceof filters.Invert));
471
478
  bg.applyFilters();
479
+ changed = true;
472
480
  }
473
481
  canvas.requestRenderAll();
482
+ if (changed) canvas.fire("background:modified");
474
483
  }
475
484
  function getBackgroundInverted(canvas) {
476
485
  const bg = getBackgroundImage(canvas);
@@ -536,6 +545,7 @@ async function setBackgroundImage(canvas, url, options) {
536
545
  setBackgroundContrast(canvas, prevContrast);
537
546
  }
538
547
  canvas.requestRenderAll();
548
+ canvas.fire("background:modified");
539
549
  return img;
540
550
  }
541
551
 
@@ -2540,6 +2550,7 @@ function useEditCanvas(options) {
2540
2550
  canvas.on("object:added", () => setIsDirty(true));
2541
2551
  canvas.on("object:removed", () => setIsDirty(true));
2542
2552
  canvas.on("object:modified", () => setIsDirty(true));
2553
+ canvas.on("background:modified", () => setIsDirty(true));
2543
2554
  }
2544
2555
  if (opts?.history) {
2545
2556
  const syncHistoryState = () => {
@@ -2553,6 +2564,7 @@ function useEditCanvas(options) {
2553
2564
  canvas.on("object:added", syncHistoryState);
2554
2565
  canvas.on("object:removed", syncHistoryState);
2555
2566
  canvas.on("object:modified", syncHistoryState);
2567
+ canvas.on("background:modified", syncHistoryState);
2556
2568
  }
2557
2569
  if (opts?.vertexEdit !== false) {
2558
2570
  const vertexOpts = typeof opts?.vertexEdit === "object" ? opts.vertexEdit : void 0;
@@ -2684,6 +2696,8 @@ function useEditCanvas(options) {
2684
2696
  isDirty,
2685
2697
  /** Reset the dirty flag (e.g., after a successful save). */
2686
2698
  resetDirty: useCallback(() => setIsDirty(false), []),
2699
+ /** Manually mark the canvas as dirty (e.g., after a custom operation not tracked automatically). */
2700
+ markDirty: useCallback(() => setIsDirty(true), []),
2687
2701
  /** Undo the last change. Requires `history: true`. */
2688
2702
  undo: useCallback(async () => {
2689
2703
  const h = historyRef.current;
@@ -2743,6 +2757,7 @@ function useViewCanvas(options) {
2743
2757
  canvas.on("object:added", () => {
2744
2758
  lockCanvas(canvas);
2745
2759
  });
2760
+ canvas.hoverCursor = "pointer";
2746
2761
  canvas.on("mouse:wheel", () => {
2747
2762
  setZoom(canvas.getZoom());
2748
2763
  });
@@ -3034,7 +3049,6 @@ function ObjectOverlay({
3034
3049
  alignItems: "center",
3035
3050
  justifyContent: "center",
3036
3051
  zIndex: 1,
3037
- overflow: "hidden",
3038
3052
  ...sx
3039
3053
  },
3040
3054
  ...rest,
@@ -3175,6 +3189,7 @@ function FixedSizeContent({
3175
3189
  flexShrink: 0,
3176
3190
  width: "max-content",
3177
3191
  overflow: "hidden",
3192
+ alignItems: "center",
3178
3193
  "& > *": {
3179
3194
  maxWidth: "100%",
3180
3195
  overflow: "hidden",
@@ -3188,6 +3203,125 @@ function FixedSizeContent({
3188
3203
  );
3189
3204
  }
3190
3205
 
3206
+ // src/overlay/OverlayBadge.tsx
3207
+ import { Stack as Stack4 } from "@mui/material";
3208
+ import { useEffect as useEffect9, useRef as useRef10 } from "react";
3209
+ import { jsx as jsx5 } from "react/jsx-runtime";
3210
+ function toPx(v) {
3211
+ if (v === void 0) return void 0;
3212
+ return typeof v === "number" ? `${v}px` : v;
3213
+ }
3214
+ function deriveAngle(top, right, bottom, left) {
3215
+ const hasTop = top !== void 0;
3216
+ const hasRight = right !== void 0;
3217
+ const hasBottom = bottom !== void 0;
3218
+ const hasLeft = left !== void 0;
3219
+ if (hasTop && hasRight) return 45;
3220
+ if (hasTop && hasLeft) return 135;
3221
+ if (hasBottom && hasRight) return 315;
3222
+ if (hasBottom && hasLeft) return 225;
3223
+ if (hasTop) return 90;
3224
+ if (hasRight) return 0;
3225
+ if (hasBottom) return 270;
3226
+ if (hasLeft) return 180;
3227
+ return 45;
3228
+ }
3229
+ function ellipsePosition(angleDeg) {
3230
+ const rad = angleDeg * Math.PI / 180;
3231
+ return {
3232
+ pctX: 50 + 50 * Math.cos(rad),
3233
+ pctY: 50 - 50 * Math.sin(rad)
3234
+ };
3235
+ }
3236
+ function toNum(v) {
3237
+ return typeof v === "number" ? v : 0;
3238
+ }
3239
+ function OverlayBadge({
3240
+ children,
3241
+ maxScale = 2,
3242
+ minScale = 0.75,
3243
+ top,
3244
+ right,
3245
+ bottom,
3246
+ left,
3247
+ circular = false,
3248
+ sx,
3249
+ ...rest
3250
+ }) {
3251
+ const ref = useRef10(null);
3252
+ const baseSize = useRef10(null);
3253
+ useEffect9(() => {
3254
+ const el = ref.current;
3255
+ if (!el) return;
3256
+ const ancestor = el.parentElement;
3257
+ if (!ancestor) return;
3258
+ function update() {
3259
+ requestAnimationFrame(() => {
3260
+ if (!el || !ancestor) return;
3261
+ const containerW = ancestor.clientWidth;
3262
+ const containerH = ancestor.clientHeight;
3263
+ if (containerW <= 0 || containerH <= 0) {
3264
+ el.style.transform = "";
3265
+ return;
3266
+ }
3267
+ if (!baseSize.current) {
3268
+ baseSize.current = { w: containerW, h: containerH };
3269
+ }
3270
+ const ratio = Math.min(
3271
+ containerW / baseSize.current.w,
3272
+ containerH / baseSize.current.h
3273
+ );
3274
+ const ownScale = Math.max(minScale, Math.min(ratio, maxScale));
3275
+ const overlayScale = parseFloat(
3276
+ getComputedStyle(el).getPropertyValue("--overlay-scale")
3277
+ ) || 1;
3278
+ const scale = `scale(${ownScale / overlayScale})`;
3279
+ el.style.transform = circular ? `translate(-50%, -50%) ${scale}` : scale;
3280
+ });
3281
+ }
3282
+ const observer = new ResizeObserver(update);
3283
+ observer.observe(ancestor);
3284
+ update();
3285
+ return () => {
3286
+ observer.disconnect();
3287
+ baseSize.current = null;
3288
+ };
3289
+ }, [maxScale, minScale, circular]);
3290
+ const positionSx = circular ? (() => {
3291
+ const angle = deriveAngle(top, right, bottom, left);
3292
+ const { pctX, pctY } = ellipsePosition(angle);
3293
+ const leftOffset = toNum(left) - toNum(right);
3294
+ const topOffset = toNum(top) - toNum(bottom);
3295
+ return {
3296
+ left: `calc(${pctX}% + ${leftOffset}px)`,
3297
+ top: `calc(${pctY}% + ${topOffset}px)`
3298
+ };
3299
+ })() : {
3300
+ top: toPx(top),
3301
+ right: toPx(right),
3302
+ bottom: toPx(bottom),
3303
+ left: toPx(left)
3304
+ };
3305
+ return /* @__PURE__ */ jsx5(
3306
+ Stack4,
3307
+ {
3308
+ ref,
3309
+ sx: {
3310
+ position: "absolute",
3311
+ ...positionSx,
3312
+ transformOrigin: "center center",
3313
+ pointerEvents: "auto",
3314
+ width: "max-content",
3315
+ height: "max-content",
3316
+ flexShrink: 0,
3317
+ ...sx
3318
+ },
3319
+ ...rest,
3320
+ children
3321
+ }
3322
+ );
3323
+ }
3324
+
3191
3325
  // src/index.ts
3192
3326
  import {
3193
3327
  Canvas as Canvas2,
@@ -3211,6 +3345,7 @@ export {
3211
3345
  FabricObject5 as FabricObject,
3212
3346
  FixedSizeContent,
3213
3347
  ObjectOverlay,
3348
+ OverlayBadge,
3214
3349
  OverlayContent,
3215
3350
  Point9 as Point,
3216
3351
  Polygon5 as Polygon,