@nasser-sw/fabric 7.0.1-beta6 → 7.0.1-beta8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Line.mjs","sources":["../../../src/shapes/Line.ts"],"sourcesContent":["import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { Control } from '../controls/Control';\nimport type { TPointerEvent, Transform } from '../EventTypeDefs';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineCoords {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineCoords {}\n\nexport class Line< \n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueLineCoords\n{\n declare x1: number;\n declare y1: number;\n declare x2: number;\n declare y2: number;\n\n hitStrokeWidth: number | 'auto' = 'auto';\n\n private _updatingEndpoints = false;\n private _useEndpointCoords = true;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor([x1, y1, x2, y2] = [0, 0, 100, 0], options: Partial<Props & {hitStrokeWidth?: number | 'auto'}> = {}) {\n super();\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n\n if (options.hitStrokeWidth !== undefined) {\n this.hitStrokeWidth = options.hitStrokeWidth;\n }\n\n this.hasBorders = false;\n this.hasControls = true;\n this.selectable = true;\n this.hoverCursor = 'move';\n this.perPixelTargetFind = false;\n this.strokeLineCap = 'butt';\n\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n this._setupLineControls();\n }\n\n _setupLineControls() {\n this.controls = {\n p1: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p1PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n p2: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p2PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n };\n }\n\n _p1PositionHandler() {\n return new Point(this.x1, this.y1).transform(this.getViewportTransform());\n }\n\n _p2PositionHandler() {\n return new Point(this.x2, this.y2).transform(this.getViewportTransform());\n }\n\n _renderEndpointControl(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number\n ) {\n const size = 12;\n ctx.save();\n ctx.fillStyle = '#007bff';\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.arc(left, top, size / 2, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n ctx.restore();\n }\n\n drawBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n if (this._useEndpointCoords) {\n this._drawLineBorders(ctx, styleOverride);\n return this;\n }\n return super.drawBorders(ctx, styleOverride, {});\n }\n\n _drawLineBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.save();\n ctx.setTransform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.strokeStyle =\n styleOverride.borderColor || this.borderColor || 'rgba(100, 200, 200, 0.5)';\n ctx.lineWidth = (this.strokeWidth || 1) + 5;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _renderControls(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n getBoundingRect() {\n if (this._useEndpointCoords) {\n const { x1, y1, x2, y2 } = this;\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const padding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n return {\n left: Math.min(x1, x2) - padding,\n top: Math.min(y1, y2) - padding,\n width: Math.abs(x2 - x1) + padding * 2 || padding * 2,\n height: Math.abs(y2 - y1) + padding * 2 || padding * 2,\n };\n }\n return super.getBoundingRect();\n }\n\n setCoords() {\n if (this._useEndpointCoords) {\n // Set the object's center to the geometric center of the line\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n \n // Set width and height for hit detection and bounding box\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth;\n const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;\n this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;\n }\n super.setCoords();\n }\n\n getCoords(): [Point, Point, Point, Point] {\n if (this._useEndpointCoords) {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n \n if (length === 0) {\n return super.getCoords() as [Point, Point, Point, Point];\n }\n \n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth;\n const halfWidth = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n \n // Unit vector perpendicular to line\n const perpX = -deltaY / length;\n const perpY = deltaX / length;\n \n // Four corners of oriented rectangle\n return [\n new Point(this.x1 + perpX * halfWidth, this.y1 + perpY * halfWidth),\n new Point(this.x2 + perpX * halfWidth, this.y2 + perpY * halfWidth),\n new Point(this.x2 - perpX * halfWidth, this.y2 - perpY * halfWidth),\n new Point(this.x1 - perpX * halfWidth, this.y1 - perpY * halfWidth),\n ];\n }\n return super.getCoords() as [Point, Point, Point, Point];\n }\n\n containsPoint(point: Point): boolean {\n if (this._useEndpointCoords) {\n if (this.canvas?.getActiveObject() === this) {\n return super.containsPoint(point);\n }\n const distance = this._distanceToLineSegment(point.x, point.y);\n const effectiveStrokeWidth = this.hitStrokeWidth === 'auto' \n ? this.strokeWidth \n : this.hitStrokeWidth || 1;\n \n const tolerance = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n return distance <= tolerance;\n }\n return super.containsPoint(point);\n }\n\n _distanceToLineSegment(px: number, py: number): number {\n const x1 = this.x1, y1 = this.y1, x2 = this.x2, y2 = this.y2;\n \n const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n if (pd2 === 0) {\n return Math.sqrt((px - x1) * (px - x1) + (py - y1) * (py - y1));\n }\n \n const u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;\n \n let closestX: number, closestY: number;\n if (u < 0) {\n closestX = x1;\n closestY = y1;\n } else if (u > 1) {\n closestX = x2;\n closestY = y2;\n } else {\n closestX = x1 + u * (x2 - x1);\n closestY = y1 + u * (y2 - y1);\n }\n \n return Math.sqrt((px - closestX) * (px - closestX) + (py - closestY) * (py - closestY));\n }\n\n _endpointActionHandler(\n eventData: TPointerEvent,\n transformData: Transform,\n x: number,\n y: number\n ) {\n const controlKey = transformData.corner;\n const pointer = new Point(x, y);\n let newX = pointer.x;\n let newY = pointer.y;\n\n if (eventData.shiftKey) {\n const otherControl = controlKey === 'p1' ? 'p2' : 'p1';\n const otherX = this[otherControl === 'p1' ? 'x1' : 'x2'];\n const otherY = this[otherControl === 'p1' ? 'y1' : 'y2'];\n const snapped = this._snapToAngle(otherX, otherY, newX, newY);\n newX = snapped.x;\n newY = snapped.y;\n }\n\n if (this._useEndpointCoords) {\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this.dirty = true;\n this.setCoords();\n this.canvas?.requestRenderAll();\n return true;\n }\n\n // Fallback for old system\n this._updatingEndpoints = true;\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this._setWidthHeight();\n this.dirty = true;\n this._updatingEndpoints = false;\n this.canvas?.requestRenderAll();\n this.fire('modified', { transform: transformData, target: this, e: eventData });\n return true;\n }\n\n _snapToAngle(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number\n ): { x: number; y: number } {\n const deltaX = toX - fromX;\n const deltaY = toY - fromY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (distance === 0) return { x: toX, y: toY };\n let angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\n const snapIncrement = 15;\n const snappedAngle = Math.round(angle / snapIncrement) * snapIncrement;\n const snappedRadians = snappedAngle * (Math.PI / 180);\n return {\n x: fromX + Math.cos(snappedRadians) * distance,\n y: fromY + Math.sin(snappedRadians) * distance,\n };\n }\n\n _setWidthHeight(skipReposition = false) {\n this.width = Math.abs(this.x2 - this.x1) || 1;\n this.height = Math.abs(this.y2 - this.y1) || 1;\n if (!skipReposition && !this._updatingEndpoints) {\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: this.x1, y: this.y1 },\n { x: this.x2, y: this.y2 },\n ]);\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER\n );\n }\n }\n\n _set(key: string, value: any) {\n const oldLeft = this.left;\n const oldTop = this.top;\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineCoords)) {\n this._setWidthHeight();\n this.dirty = true;\n }\n if ((key === 'left' || key === 'top') && this.canvas && !this._updatingEndpoints) {\n const deltaX = this.left - oldLeft;\n const deltaY = this.top - oldTop;\n if (deltaX !== 0 || deltaY !== 0) {\n this._updatingEndpoints = true;\n this.x1 += deltaX;\n this.y1 += deltaY;\n this.x2 += deltaX;\n this.y2 += deltaY;\n this._updatingEndpoints = false;\n }\n }\n return this;\n }\n\n render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) {\n this._renderDirectly(ctx);\n return;\n }\n super.render(ctx);\n }\n\n _renderDirectly(ctx: CanvasRenderingContext2D) {\n if (!this.visible) return;\n ctx.save();\n ctx.globalAlpha = this.opacity;\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n ctx.lineWidth = this.strokeWidth;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) return;\n ctx.beginPath();\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n ctx.lineWidth = this.strokeWidth;\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n toObject< \n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'round') {\n dim.x += this.strokeWidth;\n dim.y += this.strokeWidth;\n }\n return dim;\n }\n\n calcLinePoints(): UniqueLineCoords {\n if (this._updatingEndpoints) {\n const centerX = (this.x1 + this.x2) / 2;\n const centerY = (this.y1 + this.y2) / 2;\n return {\n x1: this.x1 - centerX,\n y1: this.y1 - centerY,\n x2: this.x2 - centerX,\n y2: this.y2 - centerY,\n };\n }\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1;\n const yMult = _y1 <= _y2 ? -1 : 1;\n return {\n x1: (xMult * width) / 2,\n y1: (yMult * height) / 2,\n x2: (xMult * -width) / 2,\n y2: (yMult * -height) / 2,\n };\n }\n\n _toSVG() {\n if (this._useEndpointCoords) {\n // Use absolute coordinates to bypass all Fabric.js transforms\n return [\n `<line stroke=\"${this.stroke}\" stroke-width=\"${this.strokeWidth}\" stroke-linecap=\"${this.strokeLineCap}\" `,\n `x1=\"${this.x1}\" y1=\"${this.y1}\" x2=\"${this.x2}\" y2=\"${this.y2}\" />\\n`,\n ];\n } else {\n // Use standard calcLinePoints for legacy mode\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '<line ',\n 'COMMON_PARTS',\n `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\n`,\n ];\n }\n }\n\n toSVG(reviver?: (markup: string) => string): string {\n if (this._useEndpointCoords) {\n // Override toSVG to prevent Fabric.js from adding transform wrapper\n const markup = this._toSVG().join('');\n return reviver ? reviver(markup) : markup;\n }\n // Use default behavior for legacy mode\n return super.toSVG(reviver);\n }\n\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n static async fromElement(\n element: HTMLElement,\n options?: Abortable,\n cssRules?: CSSRules\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n static fromObject<T extends TOptions<SerializedLineProps>>({ \n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject<Line>(\n { ...object, points: [x1, y1, x2, y2] },\n { extraParam: 'points' }\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);"],"names":["coordProps","Line","FabricObject","constructor","x1","y1","x2","y2","arguments","length","undefined","options","_defineProperty","setOptions","hitStrokeWidth","hasBorders","hasControls","selectable","hoverCursor","perPixelTargetFind","strokeLineCap","_setWidthHeight","left","top","set","LEFT","TOP","_setupLineControls","controls","p1","Control","x","y","cursorStyle","actionHandler","_endpointActionHandler","bind","positionHandler","_p1PositionHandler","render","_renderEndpointControl","sizeX","sizeY","p2","_p2PositionHandler","Point","transform","getViewportTransform","ctx","size","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas","vpt","canvas","viewportTransform","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","center","_findCenterFromElement","hitPadding","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas2","getActiveObject","distance","_distanceToLineSegment","tolerance","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas4","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas3","dirty","requestRenderAll","_updatingEndpoints","fire","target","e","fromX","fromY","toX","toY","angle","atan2","snapIncrement","snappedAngle","round","snappedRadians","cos","sin","skipReposition","makeBoundingBoxFromPoints","setPositionByOrigin","CENTER","_set","key","value","oldLeft","oldTop","includes","_renderDirectly","_this$stroke","visible","opacity","toString","_render","p","calcLinePoints","origStrokeStyle","isFiller","toLive","_renderStroke","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","toSVG","reviver","markup","join","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","_ref","object","_fromObject","points","extraParam","cacheProperties","SHARED_ATTRIBUTES","concat","classRegistry","setClass","setSVGClass"],"mappings":"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"}
1
+ {"version":3,"file":"Line.mjs","sources":["../../../src/shapes/Line.ts"],"sourcesContent":["import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { Control } from '../controls/Control';\nimport type { TPointerEvent, Transform } from '../EventTypeDefs';\nimport { Gradient } from '../gradient/Gradient';\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineCoords {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineCoords {}\n\nexport class Line<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueLineCoords\n{\n declare x1: number;\n declare y1: number;\n declare x2: number;\n declare y2: number;\n\n hitStrokeWidth: number | 'auto' = 'auto';\n\n private _updatingEndpoints = false;\n private _useEndpointCoords = true;\n private _exportingSVG = false;\n\n static type = 'Line';\n static cacheProperties = [...cacheProperties, ...coordProps];\n\n constructor(\n [x1, y1, x2, y2] = [0, 0, 100, 0],\n options: Partial<Props & { hitStrokeWidth?: number | 'auto' }> = {},\n ) {\n super();\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n\n if (options.hitStrokeWidth !== undefined) {\n this.hitStrokeWidth = options.hitStrokeWidth;\n }\n\n this.hasBorders = false;\n this.hasControls = true;\n this.selectable = true;\n this.hoverCursor = 'move';\n this.perPixelTargetFind = false;\n this.strokeLineCap = 'butt';\n\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n this._setupLineControls();\n }\n\n _setupLineControls() {\n this.controls = {\n p1: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p1PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n p2: new Control({\n x: 0,\n y: 0,\n cursorStyle: 'move',\n actionHandler: this._endpointActionHandler.bind(this),\n positionHandler: this._p2PositionHandler.bind(this),\n render: this._renderEndpointControl.bind(this),\n sizeX: 12,\n sizeY: 12,\n }),\n };\n }\n\n _p1PositionHandler() {\n return new Point(this.x1, this.y1).transform(this.getViewportTransform());\n }\n\n _p2PositionHandler() {\n return new Point(this.x2, this.y2).transform(this.getViewportTransform());\n }\n\n _renderEndpointControl(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n ) {\n const size = 12;\n ctx.save();\n ctx.fillStyle = '#007bff';\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.arc(left, top, size / 2, 0, 2 * Math.PI);\n ctx.fill();\n ctx.stroke();\n ctx.restore();\n }\n\n drawBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n if (this._useEndpointCoords) {\n this._drawLineBorders(ctx, styleOverride);\n return this;\n }\n return super.drawBorders(ctx, styleOverride, {});\n }\n\n _drawLineBorders(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n const vpt = this.canvas?.viewportTransform || [1, 0, 0, 1, 0, 0];\n ctx.save();\n ctx.setTransform(vpt[0], vpt[1], vpt[2], vpt[3], vpt[4], vpt[5]);\n ctx.strokeStyle =\n styleOverride.borderColor ||\n this.borderColor ||\n 'rgba(100, 200, 200, 0.5)';\n ctx.lineWidth = (this.strokeWidth || 1) + 5;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n ctx.stroke();\n ctx.restore();\n }\n\n _renderControls(ctx: CanvasRenderingContext2D, styleOverride: any = {}) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n getBoundingRect() {\n if (this._useEndpointCoords) {\n const { x1, y1, x2, y2 } = this;\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto' ? this.strokeWidth : this.hitStrokeWidth;\n const padding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n return {\n left: Math.min(x1, x2) - padding,\n top: Math.min(y1, y2) - padding,\n width: Math.abs(x2 - x1) + padding * 2 || padding * 2,\n height: Math.abs(y2 - y1) + padding * 2 || padding * 2,\n };\n }\n return super.getBoundingRect();\n }\n\n setCoords() {\n if (this._useEndpointCoords) {\n // Set width and height for hit detection and bounding box\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto' ? this.strokeWidth : this.hitStrokeWidth;\n const hitPadding = Math.max(effectiveStrokeWidth / 2 + 5, 10);\n this.width = Math.abs(this.x2 - this.x1) + hitPadding * 2;\n this.height = Math.abs(this.y2 - this.y1) + hitPadding * 2;\n\n // Only update left/top if they haven't been explicitly set (e.g., during loading)\n if (this.left === 0 && this.top === 0) {\n const center = this._findCenterFromElement();\n this.left = center.x;\n this.top = center.y;\n }\n }\n super.setCoords();\n }\n\n getCoords(): [Point, Point, Point, Point] {\n if (this._useEndpointCoords) {\n const deltaX = this.x2 - this.x1;\n const deltaY = this.y2 - this.y1;\n const length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n if (length === 0) {\n return super.getCoords() as [Point, Point, Point, Point];\n }\n\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto' ? this.strokeWidth : this.hitStrokeWidth;\n const halfWidth = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n\n // Unit vector perpendicular to line\n const perpX = -deltaY / length;\n const perpY = deltaX / length;\n\n // Four corners of oriented rectangle\n return [\n new Point(this.x1 + perpX * halfWidth, this.y1 + perpY * halfWidth),\n new Point(this.x2 + perpX * halfWidth, this.y2 + perpY * halfWidth),\n new Point(this.x2 - perpX * halfWidth, this.y2 - perpY * halfWidth),\n new Point(this.x1 - perpX * halfWidth, this.y1 - perpY * halfWidth),\n ];\n }\n return super.getCoords() as [Point, Point, Point, Point];\n }\n\n containsPoint(point: Point): boolean {\n if (this._useEndpointCoords) {\n if (this.canvas?.getActiveObject() === this) {\n return super.containsPoint(point);\n }\n const distance = this._distanceToLineSegment(point.x, point.y);\n const effectiveStrokeWidth =\n this.hitStrokeWidth === 'auto'\n ? this.strokeWidth\n : this.hitStrokeWidth || 1;\n\n const tolerance = Math.max(effectiveStrokeWidth / 2 + 2, 5);\n return distance <= tolerance;\n }\n return super.containsPoint(point);\n }\n\n _distanceToLineSegment(px: number, py: number): number {\n const x1 = this.x1,\n y1 = this.y1,\n x2 = this.x2,\n y2 = this.y2;\n\n const pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);\n if (pd2 === 0) {\n return Math.sqrt((px - x1) * (px - x1) + (py - y1) * (py - y1));\n }\n\n const u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2;\n\n let closestX: number, closestY: number;\n if (u < 0) {\n closestX = x1;\n closestY = y1;\n } else if (u > 1) {\n closestX = x2;\n closestY = y2;\n } else {\n closestX = x1 + u * (x2 - x1);\n closestY = y1 + u * (y2 - y1);\n }\n\n return Math.sqrt(\n (px - closestX) * (px - closestX) + (py - closestY) * (py - closestY),\n );\n }\n\n _endpointActionHandler(\n eventData: TPointerEvent,\n transformData: Transform,\n x: number,\n y: number,\n ) {\n const controlKey = transformData.corner;\n const pointer = new Point(x, y);\n let newX = pointer.x;\n let newY = pointer.y;\n\n if (eventData.shiftKey) {\n const otherControl = controlKey === 'p1' ? 'p2' : 'p1';\n const otherX = this[otherControl === 'p1' ? 'x1' : 'x2'];\n const otherY = this[otherControl === 'p1' ? 'y1' : 'y2'];\n const snapped = this._snapToAngle(otherX, otherY, newX, newY);\n newX = snapped.x;\n newY = snapped.y;\n }\n\n if (this._useEndpointCoords) {\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n\n // Update gradient coordinates if stroke is a gradient (but not during SVG export)\n if (this.stroke instanceof Gradient && !this._exportingSVG) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\n\n this.dirty = true;\n this.setCoords();\n this.canvas?.requestRenderAll();\n return true;\n }\n\n // Fallback for old system\n this._updatingEndpoints = true;\n if (controlKey === 'p1') {\n this.x1 = newX;\n this.y1 = newY;\n } else if (controlKey === 'p2') {\n this.x2 = newX;\n this.y2 = newY;\n }\n this._setWidthHeight();\n this.dirty = true;\n this._updatingEndpoints = false;\n this.canvas?.requestRenderAll();\n this.fire('modified', {\n transform: transformData,\n target: this,\n e: eventData,\n });\n return true;\n }\n\n _snapToAngle(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number,\n ): { x: number; y: number } {\n const deltaX = toX - fromX;\n const deltaY = toY - fromY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (distance === 0) return { x: toX, y: toY };\n let angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\n const snapIncrement = 15;\n const snappedAngle = Math.round(angle / snapIncrement) * snapIncrement;\n const snappedRadians = snappedAngle * (Math.PI / 180);\n return {\n x: fromX + Math.cos(snappedRadians) * distance,\n y: fromY + Math.sin(snappedRadians) * distance,\n };\n }\n\n _setWidthHeight(skipReposition = false) {\n this.width = Math.abs(this.x2 - this.x1) || 1;\n this.height = Math.abs(this.y2 - this.y1) || 1;\n if (!skipReposition && !this._updatingEndpoints) {\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: this.x1, y: this.y1 },\n { x: this.x2, y: this.y2 },\n ]);\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n }\n\n _set(key: string, value: any) {\n const oldLeft = this.left;\n const oldTop = this.top;\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineCoords)) {\n this._setWidthHeight();\n this.dirty = true;\n\n // Update gradient coordinates if stroke is a gradient (but not during SVG export)\n if (this.stroke instanceof Gradient && !this._exportingSVG) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\n }\n if (\n (key === 'left' || key === 'top') &&\n this.canvas &&\n !this._updatingEndpoints\n ) {\n const deltaX = this.left - oldLeft;\n const deltaY = this.top - oldTop;\n if (deltaX !== 0 || deltaY !== 0) {\n this._updatingEndpoints = true;\n this.x1 += deltaX;\n this.y1 += deltaY;\n this.x2 += deltaX;\n this.y2 += deltaY;\n\n // Update gradient coordinates if stroke is a gradient\n if (this.stroke instanceof Gradient) {\n this.stroke.coords.x1 = this.x1;\n this.stroke.coords.y1 = this.y1;\n this.stroke.coords.x2 = this.x2;\n this.stroke.coords.y2 = this.y2;\n }\n\n this._updatingEndpoints = false;\n }\n }\n return this;\n }\n\n render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) {\n this._renderDirectly(ctx);\n return;\n }\n super.render(ctx);\n }\n\n _renderDirectly(ctx: CanvasRenderingContext2D) {\n if (!this.visible) return;\n ctx.save();\n ctx.globalAlpha = this.opacity;\n ctx.lineWidth = this.strokeWidth;\n ctx.lineCap = this.strokeLineCap || 'butt';\n ctx.beginPath();\n ctx.moveTo(this.x1, this.y1);\n ctx.lineTo(this.x2, this.y2);\n\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke?.toString() || '#000';\n }\n\n ctx.stroke();\n ctx.strokeStyle = origStrokeStyle;\n ctx.restore();\n }\n\n _render(ctx: CanvasRenderingContext2D) {\n if (this._useEndpointCoords) return;\n ctx.beginPath();\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n ctx.lineWidth = this.strokeWidth;\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n if (this._useEndpointCoords) {\n return {\n ...super.toObject(propertiesToInclude),\n x1: this.x1,\n y1: this.y1,\n x2: this.x2,\n y2: this.y2,\n };\n }\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'round') {\n dim.x += this.strokeWidth;\n dim.y += this.strokeWidth;\n }\n return dim;\n }\n\n calcLinePoints(): UniqueLineCoords {\n if (this._updatingEndpoints) {\n const centerX = (this.x1 + this.x2) / 2;\n const centerY = (this.y1 + this.y2) / 2;\n return {\n x1: this.x1 - centerX,\n y1: this.y1 - centerY,\n x2: this.x2 - centerX,\n y2: this.y2 - centerY,\n };\n }\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1;\n const yMult = _y1 <= _y2 ? -1 : 1;\n return {\n x1: (xMult * width) / 2,\n y1: (yMult * height) / 2,\n x2: (xMult * -width) / 2,\n y2: (yMult * -height) / 2,\n };\n }\n\n _toSVG() {\n if (this._useEndpointCoords) {\n // Use absolute coordinates to bypass all Fabric.js transforms\n // Handle gradients manually for proper SVG export\n let strokeAttr = '';\n if (this.stroke instanceof Gradient) {\n // Let Fabric.js handle gradient definition, but we'll use the reference\n strokeAttr = `stroke=\"url(#${this.stroke.id})\"`;\n } else {\n strokeAttr = `stroke=\"${this.stroke || 'none'}\"`;\n }\n\n return [\n `<line ${strokeAttr} stroke-width=\"${this.strokeWidth}\" stroke-linecap=\"${this.strokeLineCap}\" `,\n `stroke-dasharray=\"${this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none'}\" `,\n `stroke-dashoffset=\"${this.strokeDashOffset}\" stroke-linejoin=\"${this.strokeLineJoin}\" `,\n `stroke-miterlimit=\"${this.strokeMiterLimit}\" fill=\"${this.fill || 'none'}\" `,\n `fill-rule=\"${this.fillRule}\" opacity=\"${this.opacity}\" `,\n `x1=\"${this.x1}\" y1=\"${this.y1}\" x2=\"${this.x2}\" y2=\"${this.y2}\" />\\n`,\n ];\n } else {\n // Use standard calcLinePoints for legacy mode\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '<line ',\n 'COMMON_PARTS',\n `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\n`,\n ];\n }\n }\n\n toSVG(reviver?: (markup: string) => string): string {\n if (this._useEndpointCoords) {\n // For endpoint coords, we need to bypass transforms but still allow gradients\n // Let's temporarily disable transforms during SVG generation\n const originalLeft = this.left;\n const originalTop = this.top;\n\n // Set position to center of line for gradient calculation\n this.left = (this.x1 + this.x2) / 2;\n this.top = (this.y1 + this.y2) / 2;\n\n // Get the SVG with standard system (for gradient handling)\n const standardSVG = super.toSVG(reviver);\n\n // Restore original position\n this.left = originalLeft;\n this.top = originalTop;\n\n // Extract gradient definition and clean up the line element\n // Remove the transform wrapper and update coordinates\n const cleanSVG = standardSVG\n .replace(/<g transform=\"[^\"]*\"[^>]*>/g, '')\n .replace(/<\\/g>/g, '')\n .replace(/x1=\"[^\"]*\"/g, `x1=\"${this.x1}\"`)\n .replace(/y1=\"[^\"]*\"/g, `y1=\"${this.y1}\"`)\n .replace(/x2=\"[^\"]*\"/g, `x2=\"${this.x2}\"`)\n .replace(/y2=\"[^\"]*\"/g, `y2=\"${this.y2}\"`);\n\n return cleanSVG;\n }\n // Use default behavior for legacy mode\n return super.toSVG(reviver);\n }\n\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n static async fromElement(\n element: HTMLElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n static fromObject<T extends TOptions<SerializedLineProps>>({\n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject<Line>(\n { ...object, points: [x1, y1, x2, y2] },\n { extraParam: 'points' },\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);\n"],"names":["coordProps","Line","FabricObject","constructor","x1","y1","x2","y2","arguments","length","undefined","options","_defineProperty","setOptions","hitStrokeWidth","hasBorders","hasControls","selectable","hoverCursor","perPixelTargetFind","strokeLineCap","_setWidthHeight","left","top","set","LEFT","TOP","_setupLineControls","controls","p1","Control","x","y","cursorStyle","actionHandler","_endpointActionHandler","bind","positionHandler","_p1PositionHandler","render","_renderEndpointControl","sizeX","sizeY","p2","_p2PositionHandler","Point","transform","getViewportTransform","ctx","size","save","fillStyle","strokeStyle","lineWidth","beginPath","arc","Math","PI","fill","stroke","restore","drawBorders","styleOverride","_useEndpointCoords","_drawLineBorders","_this$canvas","vpt","canvas","viewportTransform","setTransform","borderColor","strokeWidth","lineCap","globalAlpha","isMoving","borderOpacityWhenMoving","moveTo","lineTo","_renderControls","drawControls","getBoundingRect","effectiveStrokeWidth","padding","max","min","width","abs","height","setCoords","hitPadding","center","_findCenterFromElement","getCoords","deltaX","deltaY","sqrt","halfWidth","perpX","perpY","containsPoint","point","_this$canvas2","getActiveObject","distance","_distanceToLineSegment","tolerance","px","py","pd2","u","closestX","closestY","eventData","transformData","_this$canvas4","controlKey","corner","pointer","newX","newY","shiftKey","otherControl","otherX","otherY","snapped","_snapToAngle","_this$canvas3","Gradient","_exportingSVG","coords","dirty","requestRenderAll","_updatingEndpoints","fire","target","e","fromX","fromY","toX","toY","angle","atan2","snapIncrement","snappedAngle","round","snappedRadians","cos","sin","skipReposition","makeBoundingBoxFromPoints","setPositionByOrigin","CENTER","_set","key","value","oldLeft","oldTop","includes","_renderDirectly","visible","opacity","origStrokeStyle","isFiller","toLive","_this$stroke","toString","_render","p","calcLinePoints","_renderStroke","toObject","propertiesToInclude","_getNonTransformedDimensions","dim","centerX","centerY","_x1","_x2","_y1","_y2","xMult","yMult","_toSVG","strokeAttr","id","strokeDashArray","join","strokeDashOffset","strokeLineJoin","strokeMiterLimit","fillRule","toSVG","reviver","originalLeft","originalTop","standardSVG","cleanSVG","replace","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","_ref","object","_fromObject","points","extraParam","cacheProperties","SHARED_ATTRIBUTES","concat","classRegistry","setClass","setSVGClass"],"mappings":"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"}
@@ -21,6 +21,7 @@ export declare class Line<Props extends TOptions<FabricObjectProps> = Partial<Fa
21
21
  hitStrokeWidth: number | 'auto';
22
22
  private _updatingEndpoints;
23
23
  private _useEndpointCoords;
24
+ private _exportingSVG;
24
25
  static type: string;
25
26
  static cacheProperties: string[];
26
27
  constructor([x1, y1, x2, y2]?: [number, number, number, number], options?: Partial<Props & {
@@ -1 +1 @@
1
- {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../src/shapes/Line.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../src/shapes/Line.ts"],"names":[],"mappings":"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"}
package/fabric-test2.html CHANGED
@@ -50,10 +50,14 @@
50
50
 
51
51
  <div class="controls">
52
52
  <button id="addLineBtn">Add Line</button>
53
+ <button id="addGradientLineBtn">Add Gradient Line</button>
53
54
  <button id="clearCanvasBtn">Clear Canvas</button>
54
55
  <button id="toggleDebugBtn">Toggle Debug</button>
55
56
  <button id="exportPngBtn">Export as PNG</button>
56
57
  <button id="exportSvgBtn">Export as SVG</button>
58
+ <button id="saveJsonBtn">Save JSON</button>
59
+ <button id="loadJsonBtn">Load JSON</button>
60
+ <input type="file" id="loadJsonFile" accept=".json" style="display: none;">
57
61
  </div>
58
62
 
59
63
  <div style="display: flex; gap: 20px;">
@@ -113,6 +117,48 @@
113
117
  lineCounter++;
114
118
  });
115
119
 
120
+ // Add Gradient Line button
121
+ document.getElementById('addGradientLineBtn').addEventListener('click', () => {
122
+ // Line coordinates
123
+ const x1 = 150, y1 = 120, x2 = 450, y2 = 280;
124
+
125
+ // Create a linear gradient that follows the line direction using absolute coordinates
126
+ const gradient = new fabric.Gradient({
127
+ type: 'linear',
128
+ gradientUnits: 'pixels',
129
+ coords: {
130
+ x1: x1,
131
+ y1: y1,
132
+ x2: x2,
133
+ y2: y2
134
+ },
135
+ colorStops: [
136
+ { offset: 0, color: '#ff0000' },
137
+ { offset: 0.5, color: '#00ff00' },
138
+ { offset: 1, color: '#0000ff' }
139
+ ]
140
+ });
141
+
142
+ // Create a line with gradient stroke
143
+ const line = new fabric.Line([x1, y1, x2, y2], {
144
+ stroke: gradient,
145
+ strokeWidth: 8,
146
+ strokeLineCap: 'round',
147
+ selectable: true,
148
+ evented: true
149
+ });
150
+
151
+ canvas.add(line);
152
+ canvas.setActiveObject(line);
153
+ canvas.renderAll();
154
+
155
+ console.log('Added gradient line:', line);
156
+ console.log('Gradient object:', gradient);
157
+ console.log('Line coordinates:', { x1, y1, x2, y2 });
158
+ console.log('Gradient coordinates:', gradient.coords);
159
+ lineCounter++;
160
+ });
161
+
116
162
  // Clear Canvas button
117
163
  document.getElementById('clearCanvasBtn').addEventListener('click', () => {
118
164
  canvas.clear();
@@ -243,6 +289,94 @@
243
289
  });
244
290
  });
245
291
 
292
+ // Save JSON functionality
293
+ document.getElementById('saveJsonBtn').addEventListener('click', () => {
294
+ try {
295
+ // Get the canvas as JSON
296
+ const canvasJson = canvas.toJSON();
297
+
298
+ // Create a beautiful formatted JSON string
299
+ const jsonString = JSON.stringify(canvasJson, null, 2);
300
+
301
+ // Create a blob and download link
302
+ const blob = new Blob([jsonString], { type: 'application/json' });
303
+ const url = URL.createObjectURL(blob);
304
+
305
+ const link = document.createElement('a');
306
+ link.download = `fabric-canvas-${Date.now()}.json`;
307
+ link.href = url;
308
+
309
+ // Trigger download
310
+ document.body.appendChild(link);
311
+ link.click();
312
+ document.body.removeChild(link);
313
+
314
+ // Clean up
315
+ URL.revokeObjectURL(url);
316
+
317
+ console.log('Canvas saved as JSON:', canvasJson);
318
+ console.log('JSON string length:', jsonString.length);
319
+ } catch (error) {
320
+ console.error('Save JSON failed:', error);
321
+ alert('Save failed: ' + error.message);
322
+ }
323
+ });
324
+
325
+ // Load JSON functionality
326
+ document.getElementById('loadJsonBtn').addEventListener('click', () => {
327
+ document.getElementById('loadJsonFile').click();
328
+ });
329
+
330
+ document.getElementById('loadJsonFile').addEventListener('change', (e) => {
331
+ const file = e.target.files[0];
332
+ if (!file) return;
333
+
334
+ const reader = new FileReader();
335
+ reader.onload = function(e) {
336
+ try {
337
+ const jsonData = JSON.parse(e.target.result);
338
+
339
+ console.log('Loading JSON data:', jsonData);
340
+
341
+ // Clear existing canvas
342
+ canvas.clear();
343
+
344
+ // Load the JSON data into the canvas
345
+ canvas.loadFromJSON(jsonData, () => {
346
+ // This callback is called after loading is complete
347
+ canvas.renderAll();
348
+ console.log('Canvas loaded from JSON successfully');
349
+ console.log('Loaded objects:', canvas.getObjects());
350
+
351
+ // Log details about loaded lines
352
+ const lines = canvas.getObjects('line');
353
+ lines.forEach((line, index) => {
354
+ console.log(`Line ${index + 1}:`, {
355
+ type: line.type,
356
+ left: line.left,
357
+ top: line.top,
358
+ x1: line.x1,
359
+ y1: line.y1,
360
+ x2: line.x2,
361
+ y2: line.y2,
362
+ stroke: line.stroke,
363
+ strokeWidth: line.strokeWidth
364
+ });
365
+ });
366
+ });
367
+
368
+ // Clear the file input for next use
369
+ e.target.value = '';
370
+
371
+ } catch (error) {
372
+ console.error('Load JSON failed:', error);
373
+ alert('Load failed: ' + error.message);
374
+ }
375
+ };
376
+
377
+ reader.readAsText(file);
378
+ });
379
+
246
380
  // Add initial line for testing
247
381
  const initialLine = new fabric.Line([150, 150, 350, 250], {
248
382
  stroke: '#2196F3',
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@nasser-sw/fabric",
3
3
  "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.",
4
4
  "homepage": "http://fabricjs.com/",
5
- "version": "7.0.1-beta6",
5
+ "version": "7.0.1-beta8",
6
6
  "author": "Juriy Zaytsev <kangax@gmail.com>",
7
7
  "contributors": [
8
8
  {