@nasser-sw/fabric 7.0.1-beta43 → 7.0.1-beta44

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.
@@ -0,0 +1,164 @@
1
+ {
2
+ "name": "@nasser-sw/fabric",
3
+ "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.",
4
+ "homepage": "http://fabricjs.com/",
5
+ "version": "7.0.1-beta44",
6
+ "author": "Juriy Zaytsev <kangax@gmail.com>",
7
+ "contributors": [
8
+ {
9
+ "name": "Andrea Bogazzi",
10
+ "email": "andreabogazzi79@gmail.com",
11
+ "url": "https://github.com/asturur"
12
+ },
13
+ {
14
+ "name": "Shachar Nencel",
15
+ "email": "shacharnen@gmail.com",
16
+ "url": "https://github.com/ShaMan123"
17
+ },
18
+ {
19
+ "name": "Steve Eberhardt",
20
+ "email": "melchiar2@gmail.com",
21
+ "url": "https://github.com/melchiar"
22
+ }
23
+ ],
24
+ "keywords": [
25
+ "canvas",
26
+ "graphic",
27
+ "graphics",
28
+ "SVG",
29
+ "node-canvas",
30
+ "parser",
31
+ "HTML5",
32
+ "object model"
33
+ ],
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/fabricjs/fabric.js"
40
+ },
41
+ "bugs": {
42
+ "url": "https://github.com/fabricjs/fabric.js/issues"
43
+ },
44
+ "license": "MIT",
45
+ "scripts": {
46
+ "docs": "typedoc",
47
+ "cli": "node ./scripts/index.mjs",
48
+ "sandboxscript": "node ./scripts/sandbox.mjs",
49
+ "build": "npm run cli -- build",
50
+ "build:fast": "npm run build -- -f",
51
+ "dev": "npm run cli -- dev",
52
+ "start": "npm run sandboxscript -- start",
53
+ "export": "npm run cli -- website export",
54
+ "test:vitest": "vitest --run --project unit-node",
55
+ "test:vitest:chromium": "vitest --run --project unit-chromium",
56
+ "test:vitest:firefox": "vitest --run --project unit-firefox",
57
+ "test:vitest:all": "vitest --run",
58
+ "test:vitest:coverage": "vitest --run --coverage --project unit-node",
59
+ "test:vitest:coverage:watch": "npm run test:vitest --coverage=true",
60
+ "coverage:merge": "nyc merge coveragefiles .nyc_output/merged-coverage.json",
61
+ "coverage:report": "nyc report --skip-full=true --reporter=lcov --reporter=text --reporter=text-summary",
62
+ "coverage:report:ci": "nyc report --reporter=text-summary",
63
+ "test:e2e": "npm run playwright:typecheck && playwright test",
64
+ "playwright:typecheck": "tsc -p ./e2e/tsconfig.json --noEmit",
65
+ "sandbox": "npm run sandboxscript -- sandbox",
66
+ "local-server": "serve ./ -l tcp://localhost:8080",
67
+ "lint": "eslint src extensions",
68
+ "prettier:check": "prettier --check .",
69
+ "prettier:write": "prettier --write ."
70
+ },
71
+ "devDependencies": {
72
+ "@babel/cli": "^7.28.3",
73
+ "@babel/core": "^7.28.3",
74
+ "@babel/preset-env": "^7.28.3",
75
+ "@babel/preset-typescript": "^7.27.1",
76
+ "@eslint/js": "^9.31.0",
77
+ "@playwright/test": "^1.55.0",
78
+ "@rollup/plugin-babel": "^6.0.4",
79
+ "@rollup/plugin-json": "^6.1.0",
80
+ "@rollup/plugin-terser": "^0.4.4",
81
+ "@rollup/plugin-typescript": "^12.1.4",
82
+ "@types/fs-extra": "^11.0.4",
83
+ "@types/jsdom": "^21.1.7",
84
+ "@types/micromatch": "^4.0.9",
85
+ "@types/node": "^24.3.0",
86
+ "@vitest/browser": "^3.2.4",
87
+ "@vitest/coverage-v8": "^3.2.4",
88
+ "@vitest/ui": "^3.2.4",
89
+ "babel-plugin-transform-imports": "git+https://git@github.com/fabricjs/babel-plugin-transform-imports.git",
90
+ "chalk": "^5.6.0",
91
+ "commander": "^14.0.0",
92
+ "es-toolkit": "1.39.7",
93
+ "eslint-config-prettier": "^10.1.8",
94
+ "fs-extra": "^11.3.1",
95
+ "inquirer": "^12.9.4",
96
+ "micromatch": "^4.0.8",
97
+ "moment": "^2.30.1",
98
+ "nyc": "^17.1.0",
99
+ "prettier": "^3.6.2",
100
+ "ps-list": "^8.1.1",
101
+ "rollup": "^4.48.0",
102
+ "semver": "^7.7.2",
103
+ "serve": "^14.2.4",
104
+ "tslib": "^2.8.1",
105
+ "typescript": "^5.9.2",
106
+ "typescript-eslint": "^8.40.0",
107
+ "v8-to-istanbul": "^9.3.0",
108
+ "vite": "^6.3.5",
109
+ "vitest": "^3.2.4"
110
+ },
111
+ "engines": {
112
+ "node": ">=18.0.0"
113
+ },
114
+ "overrides": {
115
+ "canvas": {
116
+ "canvas": "3.2.0"
117
+ }
118
+ },
119
+ "module": "./dist/index.mjs",
120
+ "types": "./dist/index.d.ts",
121
+ "typesVersions": {
122
+ ">=4.2": {
123
+ "*": [
124
+ "dist/index.d.ts"
125
+ ],
126
+ "node": [
127
+ "dist/index.node.d.ts"
128
+ ]
129
+ }
130
+ },
131
+ "sideEffects": false,
132
+ "exports": {
133
+ ".": {
134
+ "types": "./dist/index.d.ts",
135
+ "import": "./dist/index.min.mjs",
136
+ "require": "./dist/index.min.js",
137
+ "default": "./dist/index.min.js"
138
+ },
139
+ "./es": {
140
+ "types": "./dist/index.d.ts",
141
+ "import": "./dist/fabric.min.mjs",
142
+ "require": null,
143
+ "default": null
144
+ },
145
+ "./node": {
146
+ "node": "./dist/index.node.cjs",
147
+ "types": "./dist/index.node.d.ts",
148
+ "import": "./dist/index.node.mjs",
149
+ "require": "./dist/index.node.cjs",
150
+ "default": "./dist/index.node.cjs"
151
+ },
152
+ "./extensions": {
153
+ "node": "./dist-extensions/index.mjs",
154
+ "types": "./dist-extensions/extensions/index.d.ts",
155
+ "import": "./dist-extensions/index.mjs",
156
+ "require": null,
157
+ "default": "./dist-extensions/fabric-extensions.min.js"
158
+ }
159
+ },
160
+ "optionalDependencies": {
161
+ "canvas": "^3.2.0",
162
+ "jsdom": "^26.1.0"
163
+ }
164
+ }
package/dist/index.js CHANGED
@@ -360,7 +360,7 @@
360
360
  }
361
361
  const cache = new Cache();
362
362
 
363
- var version = "7.0.1-beta42";
363
+ var version = "7.0.1-beta43";
364
364
 
365
365
  // use this syntax so babel plugin see this import here
366
366
  const VERSION = version;
@@ -31328,44 +31328,33 @@
31328
31328
  const fullH = elHeight / scaleY;
31329
31329
 
31330
31330
  // Position of the full image (crop area is centered at 0,0)
31331
- // The crop window starts at (cropX, cropY) in the original image
31332
- // We want the crop window to be at (-w/2, -h/2) to (w/2, h/2)
31333
- // So the full image starts at (-w/2 - cropX, -h/2 - cropY)
31334
31331
  const fullX = -w / 2 - cropX;
31335
31332
  const fullY = -h / 2 - cropY;
31336
31333
 
31337
31334
  // Draw the FULL image dimmed (outside crop area)
31338
31335
  ctx.save();
31339
- ctx.globalAlpha = 0.3;
31340
- ctx.drawImage(elementToDraw, 0, 0, elWidth, elHeight,
31341
- // source: full image
31342
- fullX, fullY, fullW, fullH // dest: positioned so crop area is centered
31343
- );
31336
+ ctx.globalAlpha = 0.5;
31337
+ ctx.drawImage(elementToDraw, 0, 0, elWidth, elHeight, fullX, fullY, fullW, fullH);
31344
31338
  ctx.restore();
31345
31339
 
31346
- // Draw dark overlay on the dimmed parts (outside crop area)
31340
+ // Draw dark overlay covering ENTIRE canvas with crop area cut out (like Frame edit mode)
31347
31341
  ctx.save();
31342
+ ctx.beginPath();
31343
+
31344
+ // Large outer rectangle covering entire visible area
31345
+ const padding = 10000;
31346
+ ctx.rect(-padding, -padding, padding * 2, padding * 2);
31347
+
31348
+ // Cut out the crop area (counter-clockwise to create hole with evenodd)
31349
+ const cropLeft = -w / 2;
31350
+ const cropTop = -h / 2;
31351
+ ctx.moveTo(cropLeft + w, cropTop);
31352
+ ctx.lineTo(cropLeft, cropTop);
31353
+ ctx.lineTo(cropLeft, cropTop + h);
31354
+ ctx.lineTo(cropLeft + w, cropTop + h);
31355
+ ctx.closePath();
31348
31356
  ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
31349
- // Left side
31350
- if (cropX > 0) {
31351
- ctx.fillRect(fullX, fullY, cropX, fullH);
31352
- }
31353
- // Right side
31354
- const rightStart = -w / 2 + w;
31355
- const rightWidth = fullW - cropX - w;
31356
- if (rightWidth > 0) {
31357
- ctx.fillRect(rightStart, fullY, rightWidth, fullH);
31358
- }
31359
- // Top side (between left and right)
31360
- if (cropY > 0) {
31361
- ctx.fillRect(-w / 2, fullY, w, cropY);
31362
- }
31363
- // Bottom side (between left and right)
31364
- const bottomStart = -h / 2 + h;
31365
- const bottomHeight = fullH - cropY - h;
31366
- if (bottomHeight > 0) {
31367
- ctx.fillRect(-w / 2, bottomStart, w, bottomHeight);
31368
- }
31357
+ ctx.fill('evenodd');
31369
31358
  ctx.restore();
31370
31359
 
31371
31360
  // Draw the crop area at FULL opacity