@bwp-web/canvas 0.4.3 → 0.5.0
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/background.d.ts +16 -8
- package/dist/background.d.ts.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/hooks/useEditCanvas.d.ts +2 -2
- package/dist/hooks/useEditCanvas.d.ts.map +1 -1
- package/dist/index.cjs +52 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -16
- package/dist/index.js.map +1 -1
- package/dist/serialization.d.ts.map +1 -1
- package/dist/viewport.d.ts +6 -6
- package/dist/viewport.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export type { CursorSnapResult, CursorSnapOptions, GuidelineStyle, } from './ali
|
|
|
40
40
|
export { deleteObjects, enableKeyboardShortcuts } from './keyboard';
|
|
41
41
|
export { enableScaledStrokes, serializeCanvas, loadCanvas, getBaseStrokeWidth, } from './serialization';
|
|
42
42
|
export type { SerializeOptions, LoadCanvasOptions } from './serialization';
|
|
43
|
-
export { fitViewportToBackground, getBackgroundSrc,
|
|
43
|
+
export { fitViewportToBackground, getBackgroundSrc, setBackgroundContrast, getBackgroundContrast, setBackgroundInverted, getBackgroundInverted, resizeImageUrl, setBackgroundImage, } from './background';
|
|
44
44
|
export type { FitViewportOptions, ResizeResult, ResizeImageOptions, SetBackgroundImageOptions, } from './background';
|
|
45
45
|
export { DEFAULT_CONTROL_STYLE, DEFAULT_SHAPE_STYLE, DEFAULT_CIRCLE_STYLE, DEFAULT_DRAG_SHAPE_STYLE, DEFAULT_GUIDELINE_SHAPE_STYLE, DEFAULT_ALIGNMENT_STYLE, } from './styles';
|
|
46
46
|
export { Canvas as FabricCanvas, FabricObject, FabricImage, Rect, Polygon, Point, util, } from 'fabric';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
@@ -94,7 +94,7 @@ import {
|
|
|
94
94
|
var DEFAULT_MIN_ZOOM = 0.2;
|
|
95
95
|
var DEFAULT_MAX_ZOOM = 10;
|
|
96
96
|
var DEFAULT_ZOOM_FACTOR = 1.03;
|
|
97
|
-
var DEFAULT_ZOOM_STEP =
|
|
97
|
+
var DEFAULT_ZOOM_STEP = 1.2;
|
|
98
98
|
var DEFAULT_VIEWPORT_PADDING = 0.05;
|
|
99
99
|
var BASE_CANVAS_SIZE = 1e3;
|
|
100
100
|
var DEFAULT_SNAP_MARGIN = 6;
|
|
@@ -276,15 +276,15 @@ function enablePanAndZoom(canvas, options) {
|
|
|
276
276
|
setEnabled(value) {
|
|
277
277
|
enabled = value;
|
|
278
278
|
},
|
|
279
|
-
zoomIn(
|
|
280
|
-
const z = Math.min(canvas.getZoom()
|
|
279
|
+
zoomIn(factor = DEFAULT_ZOOM_STEP) {
|
|
280
|
+
const z = Math.min(canvas.getZoom() * factor, bounds.maxZoom);
|
|
281
281
|
canvas.zoomToPoint(
|
|
282
282
|
new Point(canvas.getWidth() / 2, canvas.getHeight() / 2),
|
|
283
283
|
z
|
|
284
284
|
);
|
|
285
285
|
},
|
|
286
|
-
zoomOut(
|
|
287
|
-
const z = Math.max(canvas.getZoom()
|
|
286
|
+
zoomOut(factor = DEFAULT_ZOOM_STEP) {
|
|
287
|
+
const z = Math.max(canvas.getZoom() / factor, bounds.minZoom);
|
|
288
288
|
canvas.zoomToPoint(
|
|
289
289
|
new Point(canvas.getWidth() / 2, canvas.getHeight() / 2),
|
|
290
290
|
z
|
|
@@ -383,15 +383,37 @@ function fitViewportToBackground(canvas, options) {
|
|
|
383
383
|
canvas.setViewportTransform([scale, 0, 0, scale, offsetX, offsetY]);
|
|
384
384
|
canvas.requestRenderAll();
|
|
385
385
|
}
|
|
386
|
-
function
|
|
386
|
+
function setBackgroundContrast(canvas, value) {
|
|
387
387
|
const bg = getBackgroundImage(canvas);
|
|
388
388
|
if (!bg) return;
|
|
389
|
-
|
|
389
|
+
const contrast = Math.min(Math.max(value, 0), 2) - 1;
|
|
390
|
+
const currentFilters = bg.filters ?? [];
|
|
391
|
+
const contrastIdx = currentFilters.findIndex(
|
|
392
|
+
(f) => f instanceof filters.Contrast
|
|
393
|
+
);
|
|
394
|
+
if (contrast === 0) {
|
|
395
|
+
if (contrastIdx >= 0) {
|
|
396
|
+
bg.filters = currentFilters.filter(
|
|
397
|
+
(f) => !(f instanceof filters.Contrast)
|
|
398
|
+
);
|
|
399
|
+
bg.applyFilters();
|
|
400
|
+
}
|
|
401
|
+
} else if (contrastIdx >= 0) {
|
|
402
|
+
currentFilters[contrastIdx].contrast = contrast;
|
|
403
|
+
bg.applyFilters();
|
|
404
|
+
} else {
|
|
405
|
+
bg.filters = [...currentFilters, new filters.Contrast({ contrast })];
|
|
406
|
+
bg.applyFilters();
|
|
407
|
+
}
|
|
390
408
|
canvas.requestRenderAll();
|
|
391
409
|
}
|
|
392
|
-
function
|
|
410
|
+
function getBackgroundContrast(canvas) {
|
|
393
411
|
const bg = getBackgroundImage(canvas);
|
|
394
|
-
|
|
412
|
+
if (!bg) return 1;
|
|
413
|
+
const contrastFilter = bg.filters?.find(
|
|
414
|
+
(f) => f instanceof filters.Contrast
|
|
415
|
+
);
|
|
416
|
+
return 1 + (contrastFilter?.contrast ?? 0);
|
|
395
417
|
}
|
|
396
418
|
function setBackgroundInverted(canvas, inverted) {
|
|
397
419
|
const bg = getBackgroundImage(canvas);
|
|
@@ -457,7 +479,7 @@ function resizeImageUrl(url, options) {
|
|
|
457
479
|
});
|
|
458
480
|
}
|
|
459
481
|
async function setBackgroundImage(canvas, url, options) {
|
|
460
|
-
const
|
|
482
|
+
const prevContrast = options?.preserveContrast ? getBackgroundContrast(canvas) : void 0;
|
|
461
483
|
let imageUrl = url;
|
|
462
484
|
if (options !== void 0) {
|
|
463
485
|
const result = await resizeImageUrl(url, options);
|
|
@@ -465,8 +487,8 @@ async function setBackgroundImage(canvas, url, options) {
|
|
|
465
487
|
}
|
|
466
488
|
const img = await FabricImage.fromURL(imageUrl, { crossOrigin: "anonymous" });
|
|
467
489
|
canvas.backgroundImage = img;
|
|
468
|
-
if (
|
|
469
|
-
|
|
490
|
+
if (prevContrast !== void 0 && prevContrast !== 1) {
|
|
491
|
+
setBackgroundContrast(canvas, prevContrast);
|
|
470
492
|
}
|
|
471
493
|
canvas.requestRenderAll();
|
|
472
494
|
return img;
|
|
@@ -2083,6 +2105,7 @@ function serializeCanvas(canvas, options) {
|
|
|
2083
2105
|
}
|
|
2084
2106
|
});
|
|
2085
2107
|
const json = canvas.toObject(properties);
|
|
2108
|
+
delete json.backgroundColor;
|
|
2086
2109
|
scaledWidths.forEach((scaled, obj) => {
|
|
2087
2110
|
obj.strokeWidth = scaled;
|
|
2088
2111
|
});
|
|
@@ -2097,6 +2120,17 @@ async function loadCanvas(canvas, json, options) {
|
|
|
2097
2120
|
});
|
|
2098
2121
|
for (const obj of toRemove) canvas.remove(obj);
|
|
2099
2122
|
}
|
|
2123
|
+
canvas.forEachObject((obj) => {
|
|
2124
|
+
if (obj.originX === "center" && obj.originY === "center") return;
|
|
2125
|
+
const center = obj.getCenterPoint();
|
|
2126
|
+
obj.set({
|
|
2127
|
+
originX: "center",
|
|
2128
|
+
originY: "center",
|
|
2129
|
+
left: center.x,
|
|
2130
|
+
top: center.y
|
|
2131
|
+
});
|
|
2132
|
+
obj.setCoords();
|
|
2133
|
+
});
|
|
2100
2134
|
canvas.forEachObject((obj) => {
|
|
2101
2135
|
obj.set(DEFAULT_CONTROL_STYLE);
|
|
2102
2136
|
if (obj.shapeType === "circle" && obj instanceof Rect5) {
|
|
@@ -2259,7 +2293,7 @@ function useEditCanvas(options) {
|
|
|
2259
2293
|
async (url, bgOpts) => {
|
|
2260
2294
|
const canvas = canvasRef.current;
|
|
2261
2295
|
if (!canvas) throw new Error("Canvas not ready");
|
|
2262
|
-
const resizeOpts = options?.backgroundResize !== false ? typeof options?.backgroundResize === "object" ? { ...options.backgroundResize, ...bgOpts } : { ...bgOpts } : bgOpts?.
|
|
2296
|
+
const resizeOpts = options?.backgroundResize !== false ? typeof options?.backgroundResize === "object" ? { ...options.backgroundResize, ...bgOpts } : { ...bgOpts } : bgOpts?.preserveContrast ? { preserveContrast: true } : void 0;
|
|
2263
2297
|
const img = await setBackgroundImage(canvas, url, resizeOpts);
|
|
2264
2298
|
if (options?.autoFitToBackground !== false) {
|
|
2265
2299
|
fitViewportToBackground(canvas);
|
|
@@ -2317,7 +2351,7 @@ function useEditCanvas(options) {
|
|
|
2317
2351
|
* exceeds the configured limits (opt out via `backgroundResize: false`),
|
|
2318
2352
|
* and fits the viewport after setting if `autoFitToBackground` is enabled.
|
|
2319
2353
|
*
|
|
2320
|
-
* Pass `{
|
|
2354
|
+
* Pass `{ preserveContrast: true }` to keep the current background contrast
|
|
2321
2355
|
* when replacing the image.
|
|
2322
2356
|
*/
|
|
2323
2357
|
setBackground,
|
|
@@ -2707,8 +2741,8 @@ export {
|
|
|
2707
2741
|
enableScaledStrokes,
|
|
2708
2742
|
enableVertexEdit,
|
|
2709
2743
|
fitViewportToBackground,
|
|
2744
|
+
getBackgroundContrast,
|
|
2710
2745
|
getBackgroundInverted,
|
|
2711
|
-
getBackgroundOpacity,
|
|
2712
2746
|
getBackgroundSrc,
|
|
2713
2747
|
getBaseStrokeWidth,
|
|
2714
2748
|
getSnapPoints,
|
|
@@ -2717,9 +2751,9 @@ export {
|
|
|
2717
2751
|
resetViewport,
|
|
2718
2752
|
resizeImageUrl,
|
|
2719
2753
|
serializeCanvas,
|
|
2754
|
+
setBackgroundContrast,
|
|
2720
2755
|
setBackgroundImage,
|
|
2721
2756
|
setBackgroundInverted,
|
|
2722
|
-
setBackgroundOpacity,
|
|
2723
2757
|
snapCursorPoint,
|
|
2724
2758
|
useCanvasClick,
|
|
2725
2759
|
useCanvasEvents,
|