PageSourceSearch

https://www.getepic.com/default-src_app_core_services_canvas_drawb…es_story-sketch--c22f3f.c0ca17765bea94ec.js

js getepic.com collected 2026-09-24 08:39:49 UTC 386,734 bytes, 1 lines download raw bytes

1(self.webpackChunkng_up=self.webpackChunkng_up||[]).push([["default-src_app_core_services_canvas_drawboard_service_ts-src_app_core_services_story-sketch--c22f3f"],{60747:(ht,P,k)=>{"use strict";k.d(P,{k:()=>f});var f=(()=>{return(T=f||(f={})).DRAWING_START="drawing:start",T.DRAWING_END="drawing:end",T.DRAWING_CANCEL="drawing:cancel",T.STROKE_START="stroke:start",T.STROKE_UPDATE="stroke:update",T.STROKE_END="stroke:end",T.STROKE_ADDED="stroke:added",T.STROKE_REMOVED="stroke:removed",T.OBJECT_ADDED="object:added",T.OBJECT_REMOVED="object:removed",T.OBJECT_SELECTED="object:selected",T.OBJECT_DESELECTED="object:deselected",T.OBJECT_MODIFIED="object:modified",T.CANVAS_CLEARED="canvas:cleared",T.CANVAS_RESIZED="canvas:resized",T.ZOOM_CHANGED="zoom:changed",T.PAN_CHANGED="pan:changed",T.TOOL_CHANGED="tool:changed",T.BRUSH_SETTINGS_CHANGED="brush:settings:changed",T.TEXT_SETTINGS_CHANGED="text:settings:changed",f;var T})()},92199:(ht,P,k)=>{"use strict";k.d(P,{n:()=>T,s:()=>D});const f=["#B66AD0","#02613B","#2BFDFD","#4BE65C","#FDB9C4","#701C71","#F73CF6","#E6D02C","#FC982E","#9A2A29","#B7B7B7","#737373","#19711D","#F91D19"];var T=(()=>{return(I=T||(T={})).BRUSH="brush",I.RECTANGLE="rectangle",I.ELLIPSE="ellipse",I.LINE="line",I.ERASER="eraser",I.SELECTION="selection",I.TEXT="text",I.ZOOM="zoom",I.COLOR="color",I.SHAPES="shapes",I.SIZE="size",I.UNDO="undo",I.REDO="redo",I.CLEAR="clear",I.ZOOM_IN="zoom-in",I.ZOOM_OUT="zoom-out",T;var I})();const D={CANVAS_WIDTH:800,CANVAS_HEIGHT:600,DEFAULT_WIDTH:800,DEFAULT_HEIGHT:600,DEFAULT_BACKGROUND_COLOR:"#f9fafd",DEFAULT_BRUSH_COLOR:f[0],DEFAULT_BRUSH_WIDTH:3,DEFAULT_BRUSH_OPACITY:1,DEFAULT_ZOOM:1,MIN_SCALE:.1,MAX_SCALE:5,MAINTAIN_ASPECT_RATIO:!0,DEFAULT_MAX_HISTORY_SIZE:50,DEFAULT_SMOOTHING:.7,MIN_BRUSH_WIDTH:1,MAX_BRUSH_WIDTH:100,DEFAULT_ERASER_WIDTH:10,MIN_ERASER_WIDTH:5,MAX_ERASER_WIDTH:50,DEFAULT_TEXT_CONTENT:"",DEFAULT_FONT_SIZE:26,DEFAULT_FONT_FAMILY:"Nanum Pen",DEFAULT_FONT_WEIGHT:"normal",DEFAULT_FONT_STYLE:"normal",DEFAULT_TEXT_ALIGN:"left",DEFAULT_LINE_HEIGHT:1.2,DEFAULT_LETTER_SPACING:0,DEFAULT_TEXT_COLOR:"#000000",EXPORT_FORMATS:{PNG:"png",JSON:"json"},DATA_VERSION:"1.0.0",PRESET_COLORS:f,DRAWING_MODE:T}},1409:(ht,P,k)=>{"use strict";k.r(P),k.d(P,{DrawboardDialogMode:()=>g,DrawboardService:()=>v,ExportFormat:()=>d});var f=k(34929),T=k(92199),D=k(60747),I=k(87065),j=k(50253),N=k(3184);let c=(()=>{class p{constructor(){this.currentTool=T.n.BRUSH,this.brushColor=T.s.DEFAULT_BRUSH_COLOR,this.brushWidth=T.s.DEFAULT_BRUSH_WIDTH,this.brushOpacity=T.s.DEFAULT_BRUSH_OPACITY,this.canvasConfig=null,this.eventSubject=new j.x}onCanvasEvent(m){return this.eventSubject.asObservable()}emitEvent(m){this.eventSubject.next(m)}getCurrentTool(){return this.currentTool}getCurrentBrushColor(){return this.brushColor}getCurrentBrushWidth(){return this.brushWidth}getCurrentBrushOpacity(){return this.brushOpacity}getCanvasConfig(){return this.canvasConfig}generateId(){return"stroke_"+Date.now()+"_"+Math.random().toString(36).substr(2,9)}getCurrentTimestamp(){return Date.now()}validatePoint(m){return m.length>=2&&"number"==typeof m[0]&&"number"==typeof m[1]}validateColor(m){return/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(m)||/^rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)$/.test(m)||/^rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*[\d.]+\s*\)$/.test(m)}validateWidth(m){return m>0&&m<=T.s.MAX_BRUSH_WIDTH}validateOpacity(m){return m>=0&&m<=1}}return p.\u0275fac=function(m){return new(m||p)},p.\u0275prov=N.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})();var r=(()=>{return(p=r||(r={})).BRUSH_STROKE="brush-stroke",p.ERASER_STROKE="eraser-stroke",p.RECTANGLE="rectangle",p.ELLIPSE="ellipse",p.LINE="line",p.TEXT="text",p.IMAGE="image",r;var p})();let o=(()=>{class p extends c{constructor(){super(),this.canvas=null,this.currentStrokeId=null,this.objectWrappers=new Map,this.fabricObjects=new Map,this.isDrawing=!1,this.isDrawingShape=!1,this.shapeStartPoint=null,this.currentShapePreview=null,this.container=null,this.currentZoom=1,this.originalCanvasHeight=0,this.originalContainerHeight=0,this.isDrawingModeTemporarilyDisabled=!1,this.history=[],this.isDrawingModeEnabledByUndo=!1,this.defaultTextStyle={fontSize:T.s.DEFAULT_FONT_SIZE,fontFamily:T.s.DEFAULT_FONT_FAMILY,fontWeight:T.s.DEFAULT_FONT_WEIGHT,fontStyle:T.s.DEFAULT_FONT_STYLE,textAlign:T.s.DEFAULT_TEXT_ALIGN,fill:T.s.DEFAULT_TEXT_COLOR}}initCanvas(m,_){try{if(this.container=document.getElementById(m+"-container"),!this.container)throw new Error(`Container element with id '${m}-container' not found`);const b=this.container.clientWidth,A=this.container.clientHeight;this.originalCanvasHeight=A,this.originalContainerHeight=A,this.createCanvasElement(m),this.canvas=new I.fabric.Canvas(m,{width:b,height:A,backgroundColor:_.backgroundColor,isDrawingMode:!1,preserveObjectStacking:!0}),this.canvas.setViewportTransform([this.currentZoom,0,0,this.currentZoom,(b-p.DESIGN_WIDTH*this.currentZoom)/2,(A-p.DESIGN_HEIGHT*this.currentZoom)/2]),this.canvasConfig=_,this.setupCanvasEvents(),this.configureDrawingBrush()}catch(b){throw console.error("Failed to initialize canvas:",b),b}}createCanvasElement(m){if(!this.container)throw new Error(`Container element with id '${m}-container' not found`);this.container.innerHTML="";const _=this.container.clientWidth,b=this.container.clientHeight,A=document.createElement("canvas");A.id=m,A.width=p.DESIGN_WIDTH,A.height=p.DESIGN_HEIGHT,A.style.width="100%",A.style.height="100%",A.style.display="block";const W=Math.min(_/p.DESIGN_WIDTH,b/p.DESIGN_HEIGHT);this.container.appendChild(A),this.currentZoom=W}destroyCanvas(){this.canvas&&(this.canvas.dispose(),this.canvas=null),this.objectWrappers.clear(),this.fabricObjects.clear(),this.canvasConfig=null,this.isDrawingShape=!1,this.shapeStartPoint=null,this.currentShapePreview=null}undo(){var m;this.history.length>0&&(this.isDrawingModeEnabledByUndo=!0,null===(m=this.canvas)||void 0===m||m.loadFromJSON(this.history.pop(),()=>{var _;null===(_=this.canvas)||void 0===_||_.renderAll(),this.clearBrush()}))}clearBrush(){var m;(null===(m=this.canvas)||void 0===m?void 0:m.freeDrawingBrush)&&(this.canvas.freeDrawingBrush._points=[],this.canvas.freeDrawingBrush._path=null)}setBrushColor(m){this.validateColor(m)?(this.brushColor=m,this.canvas&&this.canvas.freeDrawingBrush&&(this.canvas.freeDrawingBrush.color=m),this.emitEvent({type:D.k.BRUSH_SETTINGS_CHANGED,data:{color:m},timestamp:this.getCurrentTimestamp()})):console.warn("Invalid color:",m)}setBrushWidth(m){this.validateWidth(m)?(this.brushWidth=m,this.canvas&&this.canvas.freeDrawingBrush&&(this.canvas.freeDrawingBrush.width=m),this.emitEvent({type:D.k.BRUSH_SETTINGS_CHANGED,data:{width:m},timestamp:this.getCurrentTimestamp()})):console.warn("Invalid brush width:",m)}enableEraser(){var m;!this.canvas||(this.canvas.isDrawingMode=!0,this.canvas.freeDrawingBrush=new I.fabric.PencilBrush(this.canvas),this.canvas.freeDrawingBrush.color=(null===(m=this.canvasConfig)||void 0===m?void 0:m.backgroundColor)||"#ffffff",this.canvas.freeDrawingBrush.width=T.s.DEFAULT_ERASER_WIDTH)}addStroke(m){this.objectWrappers.set(m.id,m),this.emitEvent({type:D.k.STROKE_ADDED,data:{stroke:m},timestamp:this.getCurrentTimestamp()})}removeStroke(m){if(this.objectWrappers.has(m)){const _=this.objectWrappers.get(m);this.objectWrappers.delete(m),this.emitEvent({type:D.k.STROKE_REMOVED,data:{strokeId:m,stroke:_},timestamp:this.getCurrentTimestamp()})}}getStroke(m){return this.objectWrappers.get(m)||null}startStroke(m){const _=this.generateId();return this.currentStrokeId=_,this.isDrawing=!0,this.emitEvent({type:D.k.STROKE_START,data:{strokeId:_,point:m},timestamp:this.getCurrentTimestamp()}),_}endStroke(m){m===this.currentStrokeId&&(this.isDrawing=!1,this.currentStrokeId=null,this.emitEvent({type:D.k.STROKE_END,data:{strokeId:m},timestamp:this.getCurrentTimestamp()}))}setEraserWidth(m){this.canvas&&this.canvas.freeDrawingBrush&&(this.canvas.freeDrawingBrush.width=m)}
1updateBackgroundColor(m){this.canvas&&(this.canvas.backgroundColor=m,this.canvas.renderAll(),this.canvas.freeDrawingBrush&&(this.canvas.freeDrawingBrush.color=m))}restoreFromState(m,_){this.restoreCanvasState(m,_)}getCurrentState(){return this.canvas?{fabricCanvas:this.canvas.toJSON(),objects:Array.from(this.objectWrappers.values())}:null}createObjectWrapper(m,_){const b=this.generateId();m.drawboardId=b;const A={id:b,type:_,version:T.s.DATA_VERSION,fabricData:m.toObject(),metadata:{createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()}};return this.objectWrappers.set(b,A),this.fabricObjects.set(b,m),A}updateObjectWrapper(m,_){const b=this.objectWrappers.get(m);b&&(b.fabricData=_.toObject(),b.metadata.updatedAt=(new Date).toISOString(),this.fabricObjects.set(m,_))}removeObjectWrapper(m){this.objectWrappers.delete(m),this.fabricObjects.delete(m)}generateId(){return"obj_"+Date.now()+"_"+Math.random().toString(36).substr(2,9)}getAllObjects(){return Array.from(this.objectWrappers.values())}isCanvasEmpty(){return 0===this.getAllObjects().length}fitToScreen(){if(!this.canvas||!this.container)return;const F=Math.min(this.container.clientWidth/p.DESIGN_WIDTH,this.container.clientHeight/p.DESIGN_HEIGHT);this.setZoom(F)}clear(){var m;!this.canvas||(this.canvas.clear(),this.objectWrappers.clear(),this.fabricObjects.clear(),(null===(m=this.canvasConfig)||void 0===m?void 0:m.backgroundColor)&&(this.canvas.backgroundColor=this.canvasConfig.backgroundColor,this.canvas.renderAll()),this.emitEvent({type:D.k.CANVAS_CLEARED,data:{},timestamp:this.getCurrentTimestamp()}))}exportAsImage(m="png"){return this.canvas?this.canvas.toDataURL({format:m,multiplier:1}):""}exportAsJSON(){return this.canvas?JSON.stringify(this.canvas.toJSON()):"{}"}loadFromJSON(m,_){if(!this.canvas)return void console.error("Canvas not initialized");console.log("Loading JSON data into Fabric canvas:",m);const b=!this.canvas.selection;this.canvas.loadFromJSON(m,()=>{var A;null===(A=this.canvas)||void 0===A||A.renderAll(),console.log("Fabric canvas loaded from JSON successfully"),b&&this.setAllObjectsSelectable(!1),_&&_()})}configureDrawingBrush(){!this.canvas||(this.canvas.freeDrawingBrush=new I.fabric.PencilBrush(this.canvas),this.canvas.freeDrawingBrush.color=this.brushColor,this.canvas.freeDrawingBrush.width=this.brushWidth)}handlePathCreated(m){if(this.currentStrokeId){m.drawboardId=this.currentStrokeId;const _={id:this.currentStrokeId,type:r.BRUSH_STROKE,version:T.s.DATA_VERSION,fabricData:m.toObject(),metadata:{createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()}};this.objectWrappers.set(this.currentStrokeId,_),this.fabricObjects.set(this.currentStrokeId,m),this.addStroke(_)}}restoreCanvasState(m,_){!this.canvas||!m||(m.fabricCanvas?(this.canvas.loadFromJSON(m.fabricCanvas,()=>{var b;null===(b=this.canvas)||void 0===b||b.renderAll(),_&&_()}),m.objects&&(this.objectWrappers.clear(),this.fabricObjects.clear(),m.objects.forEach(b=>{this.objectWrappers.set(b.id,b)}))):m.canvas&&this.canvas.loadFromJSON(m.canvas,()=>{var b;null===(b=this.canvas)||void 0===b||b.renderAll(),_&&_()}))}getZoom(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform[0]:this.currentZoom}setZoom(m){this.canvas&&this.container&&(this.currentZoom=m,this.canvas.setViewportTransform([m,0,0,m,(this.container.clientWidth-p.DESIGN_WIDTH*m)/2,(this.container.clientHeight-p.DESIGN_HEIGHT*m)/2]),this.canvas.renderAll(),this.emitEvent({type:D.k.ZOOM_CHANGED,data:{scale:m},timestamp:this.getCurrentTimestamp()}))}addRectangle(m,_,b){if(!this.canvas)throw new Error("Canvas not initialized");const A=this.generateShapeId(),F=Math.abs(_.x-m.x),L=Math.abs(_.y-m.y),W=Math.min(m.x,_.x),X=Math.min(m.y,_.y),tt=new I.fabric.Rect({left:W,top:X,width:F,height:L,fill:(null==b?void 0:b.fill)||"transparent",stroke:(null==b?void 0:b.stroke)||this.brushColor,strokeWidth:(null==b?void 0:b.strokeWidth)||this.brushWidth,rx:(null==b?void 0:b.cornerRadius)||0,ry:(null==b?void 0:b.cornerRadius)||0,selectable:!0,evented:!0});tt.shapeId=A,this.canvas.add(tt);const q=this.createObjectWrapper(tt,r.RECTANGLE);return this.setupShapeEvents(tt,q.id),this.emitEvent({type:D.k.OBJECT_ADDED,data:{shapeId:q.id,shapeObject:q},timestamp:this.getCurrentTimestamp()}),q.id}addEllipse(m,_,b,A){if(!this.canvas)throw new Error("Canvas not initialized");const F=this.generateShapeId(),L=new I.fabric.Ellipse({left:m.x-_,top:m.y-b,rx:_,ry:b,fill:(null==A?void 0:A.fill)||"transparent",stroke:(null==A?void 0:A.stroke)||this.brushColor,strokeWidth:(null==A?void 0:A.strokeWidth)||this.brushWidth,selectable:!0,evented:!0});L.shapeId=F,this.canvas.add(L);const W=this.createObjectWrapper(L,r.ELLIPSE);return this.setupShapeEvents(L,W.id),this.emitEvent({type:D.k.OBJECT_ADDED,data:{shapeId:W.id,shapeObject:W},timestamp:this.getCurrentTimestamp()}),W.id}addLine(m,_,b){if(!this.canvas)throw new Error("Canvas not initialized");const A=this.generateShapeId(),F=new I.fabric.Line([m.x,m.y,_.x,_.y],{stroke:(null==b?void 0:b.stroke)||this.brushColor,strokeWidth:(null==b?void 0:b.strokeWidth)||this.brushWidth,strokeLineCap:(null==b?void 0:b.lineCap)||"round",selectable:!0,evented:!0});F.shapeId=A,this.canvas.add(F);const L=this.createObjectWrapper(F,r.LINE);return this.setupShapeEvents(F,L.id),this.emitEvent({type:D.k.OBJECT_ADDED,data:{shapeId:L.id,shapeObject:L},timestamp:this.getCurrentTimestamp()}),L.id}getShape(m){return this.objectWrappers.get(m)||null}getAllShapes(){return this.getAllObjects().filter(m=>m.type===r.RECTANGLE||m.type===r.ELLIPSE||m.type===r.LINE)}removeShape(m){var _;const b=this.fabricObjects.get(m),A=this.objectWrappers.get(m);b&&A&&(null===(_=this.canvas)||void 0===_||_.remove(b),this.removeObjectWrapper(m),this.emitEvent({type:D.k.OBJECT_REMOVED,data:{shapeId:m,shapeObject:A},timestamp:this.getCurrentTimestamp()}))}addText(m,_){if(!this.canvas)throw new Error("Canvas not initialized");const A=new I.fabric.Textbox(_||T.s.DEFAULT_TEXT_CONTENT,{left:m.x,top:m.y,width:this.canvas.getWidth()-m.x-300,fontSize:this.defaultTextStyle.fontSize,fontFamily:this.defaultTextStyle.fontFamily,fontWeight:this.defaultTextStyle.fontWeight,fontStyle:this.defaultTextStyle.fontStyle,textAlign:this.defaultTextStyle.textAlign,fill:this.brushColor,editable:!0,selectable:!0,borderColor:"transparent",hasBorders:!1,hasControls:!1,lockMovementX:!0,lockMovementY:!0,hoverCurs
1or:"text",splitByGrapheme:!0});this.canvas.add(A),this.canvas.setActiveObject(A),A.enterEditing();const F=this.createObjectWrapper(A,r.TEXT);return this.setupTextEvents(A,F.id),this.emitEvent({type:D.k.OBJECT_ADDED,data:{textId:F.id,textObject:F},timestamp:this.getCurrentTimestamp()}),setTimeout(()=>{this.enterTextEditMode(F.id)},100),F.id}updateText(m,_){var b;const A=this.fabricObjects.get(m);A&&"i-text"===A.type&&(A.set("text",_),this.updateObjectWrapper(m,A),null===(b=this.canvas)||void 0===b||b.renderAll(),this.emitEvent({type:D.k.OBJECT_MODIFIED,data:{textId:m,content:_},timestamp:this.getCurrentTimestamp()}))}enterTextEditMode(m){const _=this.fabricObjects.get(m);_&&"i-text"===_.type&&(_.enterEditing(),_.selectAll())}generateShapeId(){return"shape_"+Date.now()+"_"+Math.random().toString(36).substr(2,9)}setupShapeEvents(m,_){m.on("moved",()=>{this.updateObjectWrapper(_,m)}),m.on("scaled",()=>{this.updateObjectWrapper(_,m)}),m.on("rotated",()=>{this.updateObjectWrapper(_,m)}),m.on("selected",()=>{this.emitEvent({type:D.k.OBJECT_SELECTED,data:{shapeId:_,type:"shape"},timestamp:this.getCurrentTimestamp()})}),m.on("deselected",()=>{this.emitEvent({type:D.k.OBJECT_DESELECTED,data:{shapeId:_,type:"shape"},timestamp:this.getCurrentTimestamp()})}),m.on("modified",()=>{this.emitEvent({type:D.k.OBJECT_MODIFIED,data:{shapeId:_,type:"shape"},timestamp:this.getCurrentTimestamp()})})}setupTextEvents(m,_){m.on("editing:exited",()=>{this.updateObjectWrapper(_,m),this.emitEvent({type:D.k.OBJECT_MODIFIED,data:{textId:_,type:"text"},timestamp:this.getCurrentTimestamp()})}),m.on("moved",()=>{this.updateObjectWrapper(_,m)}),m.on("selected",()=>{this.emitEvent({type:D.k.OBJECT_SELECTED,data:{textId:_,type:"text"},timestamp:this.getCurrentTimestamp()})}),m.on("deselected",()=>{this.emitEvent({type:D.k.OBJECT_DESELECTED,data:{textId:_,type:"text"},timestamp:this.getCurrentTimestamp()})}),m.on("modified",()=>{this.emitEvent({type:D.k.OBJECT_MODIFIED,data:{textId:_,type:"text"},timestamp:this.getCurrentTimestamp()})})}setDrawingTool(m){if(this.canvas){switch(this.currentTool=m,this.isDrawingModeTemporarilyDisabled=!1,this.currentShapePreview&&(this.canvas.remove(this.currentShapePreview),this.currentShapePreview=null),this.isDrawingShape=!1,this.shapeStartPoint=null,this.adjustCanvasForDrawingTool(m),m){case T.n.BRUSH:this.canvas.isDrawingMode=!0,this.canvas.selection=!1,this.canvas.defaultCursor="default",this.configureDrawingBrush(),this.setAllObjectsSelectable(!1);break;case T.n.ERASER:this.enableEraser(),this.canvas.selection=!1,this.setAllObjectsSelectable(!1);break;case T.n.SELECTION:this.canvas.isDrawingMode=!1,this.canvas.selection=!0,this.canvas.defaultCursor="default",this.setAllObjectsSelectable(!0);break;case T.n.TEXT:this.canvas.isDrawingMode=!1,this.canvas.selection=!1,this.canvas.defaultCursor="text",this.setAllObjectsSelectable(!1);break;case T.n.RECTANGLE:case T.n.ELLIPSE:case T.n.LINE:this.canvas.isDrawingMode=!1,this.canvas.selection=!1,this.canvas.defaultCursor="crosshair",this.setAllObjectsSelectable(!1);break;default:this.canvas.isDrawingMode=!1,this.canvas.selection=!1,this.canvas.defaultCursor="default",this.setAllObjectsSelectable(!1)}this.emitEvent({type:D.k.TOOL_CHANGED,data:{tool:m},timestamp:this.getCurrentTimestamp()})}}setupCanvasEvents(){!this.canvas||(this.setupDrawingRestrictions(),this.canvas.on("path:created",m=>{const _=m.path;_&&this.isDrawing&&this.handlePathCreated(_)}),this.canvas.on("mouse:down",m=>{var _;if(!m.e)return;const b=this.canvas.getPointer(m.e);if(this.currentTool===T.n.BRUSH&&!this.isPointerWithinCanvasBounds(b))return m.e.preventDefault(),m.e.stopPropagation(),!1;this.currentTool===T.n.TEXT?this.addText({x:b.x,y:b.y}):this.isShapeTool(this.currentTool)?this.startShapeDrawing(b):(null===(_=this.canvas)||void 0===_?void 0:_.isDrawingMode)&&this.startStroke([m.e.offsetX||0,m.e.offsetY||0])}),this.canvas.on("mouse:move",m=>{var _;if(!m.e)return;const b=this.canvas.getPointer(m.e);if((null===(_=this.canvas)||void 0===_?void 0:_.isDrawingMode)&&this.currentStrokeId&&(this.checkStrokeInRestrictedArea(b),!this.isPointerWithinCanvasBounds(b)))return m.e.preventDefault(),m.e.stopPropagation(),!1;this.isDrawingShape&&this.shapeStartPoint&&this.updateShapePreview(this.shapeStartPoint,b)}),this.canvas.on("mouse:up",m=>
1{if(this.currentStrokeId)this.endStroke(this.currentStrokeId);else if(this.isDrawingShape&&this.shapeStartPoint&&m.e){const _=this.canvas.getPointer(m.e);this.finishShapeDrawing(this.shapeStartPoint,_)}}))}isShapeTool(m){return[T.n.RECTANGLE,T.n.ELLIPSE,T.n.LINE].includes(m)}setAllObjectsSelectable(m){!this.canvas||(this.canvas.forEachObject(_=>{_.selectable=m,_.evented=m}),this.canvas.renderAll())}setObjectsSelectable(m){this.setAllObjectsSelectable(m)}getCanvas(){return this.canvas}startShapeDrawing(m){this.isDrawingShape=!0,this.shapeStartPoint=m}updateShapePreview(m,_){if(!this.canvas)return;this.currentShapePreview&&(this.canvas.remove(this.currentShapePreview),this.currentShapePreview=null);let b=null;switch(this.currentTool){case T.n.RECTANGLE:const A=Math.abs(_.x-m.x),F=Math.abs(_.y-m.y),L=Math.min(m.x,_.x),W=Math.min(m.y,_.y);b=new I.fabric.Rect({left:L,top:W,width:A,height:F,fill:"transparent",stroke:this.brushColor,strokeWidth:this.brushWidth,opacity:.6,selectable:!1,evented:!1});break;case T.n.ELLIPSE:const q=Math.abs(_.x-m.x)/2,rt=Math.abs(_.y-m.y)/2,C=Math.min(m.x,_.x),O=Math.min(m.y,_.y);b=new I.fabric.Ellipse({left:C,top:O,rx:q,ry:rt,fill:"transparent",stroke:this.brushColor,strokeWidth:this.brushWidth,opacity:.6,selectable:!1,evented:!1});break;case T.n.LINE:b=new I.fabric.Line([m.x,m.y,_.x,_.y],{stroke:this.brushColor,strokeWidth:this.brushWidth,opacity:.6,selectable:!1,evented:!1})}b&&(this.currentShapePreview=b,this.canvas.add(b),this.canvas.renderAll())}finishShapeDrawing(m,_){if(this.canvas){if(this.currentShapePreview&&(this.canvas.remove(this.currentShapePreview),this.currentShapePreview=null),Math.sqrt(Math.pow(_.x-m.x,2)+Math.pow(_.y-m.y,2))<5)return this.isDrawingShape=!1,void(this.shapeStartPoint=null);switch(this.currentTool){case T.n.RECTANGLE:this.addRectangle(m,_);break;case T.n.ELLIPSE:const W=Math.abs(_.x-m.x)/2,X=Math.abs(_.y-m.y)/2,tt=Math.min(m.x,_.x),q=Math.min(m.y,_.y);this.addEllipse({x:tt+W,y:q+X},W,X);break;case T.n.LINE:this.addLine(m,_)}this.isDrawingShape=!1,this.shapeStartPoint=null}}checkStrokeInRestrictedArea(m){if(!this.canvas)return;const _=this.canvas.height||0,b=.5*_;m.y>b&&console.log("Drawing attempted in restricted area (bottom 40%)",{pointerY:m.y,allowedThreshold:b,canvasHeight:_,restrictedArea:"Bottom 40%",allowedArea:"Top 60%",strokeId:this.currentStrokeId})}adjustCanvasForDrawingTool(m){!this.canvas||!this.container||console.log("Drawing tool changed",{tool:m,drawingRestricted:m===T.n.BRUSH,allowedArea:m===T.n.BRUSH?"Top 60%":"Full canvas"})}isPointerWithinCanvasBounds(m){if(!this.canvas)return!1;const _=this.canvas.getWidth(),b=this.canvas.getHeight();return m.x>=0&&m.x<=_&&m.y>=0&&m.y<=(this.currentTool===T.n.BRUSH?.5*b:b)}setupDrawingRestrictions(){if(!this.canvas)return;const m=this.canvas._onMouseDown,_=this.canvas._onMouseMove,b=this.canvas._onMouseUp;this.canvas._onMouseDown=A=>{var F;if(this.isDrawingModeEnabledByUndo=!1,this.currentTool===T.n.BRUSH&&(null===(F=this.canvas)||void 0===F?void 0:F.isDrawingMode)){if(!this.canvas)return;const L=this.canvas.getPointer(A);if(!this.isPointerWithinCanvasBounds(L))return console.log("Drawing blocked - outside allowed area",{pointer:L,allowedArea:"Top 60%"}),this.isDrawingModeTemporarilyDisabled=!0,void(this.canvas.isDrawingMode=!1)}return m.call(this.canvas,A)},this.canvas._onMouseMove=A=>{var F,L;if(this.currentTool===T.n.BRUSH&&this.canvas){const W=this.canvas.getPointer(A);if(this.isDrawingModeTemporarilyDisabled)return void(this.isPointerWithinCanvasBounds(W)&&(this.canvas.isDrawingMode=!0,this.isDrawingModeTemporarilyDisabled=!1,console.log("Drawing re-enabled - back in allowed area")));if(this.canvas.isDrawingMode&&!this.isPointerWithinCanvasBounds(W)&&!this.isDrawingModeEnabledByUndo)return console.log("Drawing stopped - moved outside allowed area"),this.canvas.freeDrawingBrush&&(null===(F=this.canvas.freeDrawingBrush._points)||void 0===F?void 0:F.length)>0&&this.canvas.freeDrawingBrush._finalizeAndAddPath&&(null===(L=this.canvas.freeDrawingBrush)||void 0===L||L._finalizeAndAddPath()),this.isDrawingModeTemporarilyDisabled=!0,void(this.canvas.isDrawingMode=!1)}return _.call(this.canvas,A)},this.canvas._onMouseUp=A=>{const F=b.call(this.canvas,A);if(this.currentTool===T.n.BRUSH&&this.isDrawingModeTemporarilyDisabled&&this.canvas){const L=this.canvas.getPointer(A);L&&this.isPointerWithinCanvasBounds(L)&&(this.canvas.isDrawingMode=!0,this.isDrawingModeTemporarilyDisabled=!1,console.log("Drawing re-enabled on mouse up"))}return F}}}return p.DESIGN_WIDTH=800,p.DESIGN_HEIGHT=600,p.\u0275fac=function(m){return new(m||p)},p.\u0275prov=N.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})();
1var h=k(24364),e=k(44821),i=k(35646);class t{constructor(y){this.states=[],this.currentIndex=-1,this.maxSize=50,y&&(this.maxSize=y)}addState(y){this.states=this.states.slice(0,this.currentIndex+1),this.states.push(y),this.currentIndex++,this.states.length>this.maxSize&&(this.states.shift(),this.currentIndex--)}undo(){return this.canUndo()?(this.currentIndex--,this.states[this.currentIndex]):null}redo(){return this.canRedo()?(this.currentIndex++,this.states[this.currentIndex]):null}canUndo(){return this.currentIndex>0}canRedo(){return this.currentIndex<this.states.length-1}getCurrentState(){return this.currentIndex>=0&&this.currentIndex<this.states.length?this.states[this.currentIndex]:null}clear(){this.states=[],this.currentIndex=-1}setMaxSize(y){if(this.maxSize=y,this.states.length>this.maxSize){const m=this.states.length-this.maxSize;this.states.splice(0,m),this.currentIndex=Math.max(0,this.currentIndex-m)}}getHistoryState(){return{states:[...this.states],currentIndex:this.currentIndex,maxSize:this.maxSize}}}let s=(()=>{class p{constructor(){this.historyManager=new t(T.s.DEFAULT_MAX_HISTORY_SIZE)}saveState(m,_="unknown",b){const A={id:this.generateId(),timestamp:Date.now(),action:_,data:JSON.parse(JSON.stringify(m)),metadata:{description:b,objectsCount:Array.isArray(null==m?void 0:m.objects)?m.objects.length:0}};this.historyManager.addState(A)}undo(){const m=this.historyManager.undo();return m?m.data:null}redo(){const m=this.historyManager.redo();return m?m.data:null}canUndo(){return this.historyManager.canUndo()}canRedo(){return this.historyManager.canRedo()}getCurrentState(){return this.historyManager.getCurrentState()}clearHistory(){this.historyManager.clear()}setMaxSize(m){this.historyManager.setMaxSize(m)}getHistoryStats(){const m=this.historyManager.getHistoryState();return{totalStates:m.states.length,currentIndex:m.currentIndex,canUndo:this.canUndo(),canRedo:this.canRedo(),maxSize:m.maxSize}}getHistoryList(){return this.historyManager.getHistoryState().states.map(_=>Object.assign(Object.assign({},_),{data:void 0}))}generateId(){return"history_"+Date.now()+"_"+Math.random().toString(36).substr(2,9)}}return p.\u0275fac=function(m){return new(m||p)},p.\u0275prov=N.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})();var a=k(68893),n=k(65925),l=k(41752),u=k(1146),d=(()=>{return(p=d||(d={})).PNG="png",p.JSON="json",d;var p})(),g=(()=>{return(p=g||(g={})).STUDENT_EDIT="student_edit",p.STUDENT_PREVIEW="student_preview",p.TEACHER_EDIT="teacher_edit",p.TEACHER_PREVIEW="teacher_preview",p.PARENT_EDIT="parent_edit",p.PARENT_PREVIEW="parent_preview",p.STUDENT_PREVIEW_FROM_PARENT_ACCOUNT="student_preview_from_parent_account",g;var p})();let v=(()=>{class p{constructor(m,_,b,A,F,L){this.fabricCanvasService=m,this.historyService=_,this._coreDialogService=b,this.dataService=A,this._env=F,this._accountService=L,this.config=null,this.drawboardConfig={backgroundColor:T.s.DEFAULT_BACKGROUND_COLOR,maxHistorySize:T.s.DEFAULT_MAX_HISTORY_SIZE,defaultBrushColor:T.s.DEFAULT_BRUSH_COLOR,defaultBrushWidth:T.s.DEFAULT_BRUSH_WIDTH,enableZoom:!0},this.drawingExistsForCurrenBook=!1,this.existingDrawingDataForCurrenBook=null,this.canvasService=this.fabricCanvasService}initializeDrawboard(m,_){this.config=Object.assign(Object.assign({},{backgroundColor:T.s.DEFAULT_BACKGROUND_COLOR,maxHistorySize:T.s.DEFAULT_MAX_HISTORY_SIZE,defaultBrushColor:T.s.DEFAULT_BRUSH_COLOR,defaultBrushWidth:T.s.DEFAULT_BRUSH_WIDTH,enableZoom:!0,maintainAspectRatio:T.s.MAINTAIN_ASPECT_RATIO,minScale:T.s.MIN_SCALE,maxScale:T.s.MAX_SCALE}),_),this.canvasService.initCanvas(m,this.config),this.historyService.setMaxSize(this.config.maxHistorySize),this.saveCurrentState("canvas_initialized")}destroyDrawboard(){this.canvasService.destroyCanvas(),this.historyService.clearHistory(),this.config=null}selectTool(m){this.canvasService.setDrawingTool(m)}isCanvasEmpty(){return this.canvasService.isCanvasEmpty()}setColor(m){this.canvasService.setBrushColor(m)}setBrushSize(m){const _=Math.max(T.s.MIN_BRUSH_WIDTH,Math.min(m,T.s.MAX_BRUSH_WIDTH));this.canvasService.setBrushWidth(_)}undoLastAction(){const m=this.historyService.undo();m&&this.canvasService.restoreFromState(m,()=>{this.canvasService.clearBrush()})}redoLastAction(){const m=this.historyService.redo();m&&this.canvasService.restoreFromState(m)}clearBrush(){this.canvasService instanceof o&&this.canvasService.clearBrush()}canUndo(){return this.historyService.canUndo()}canRedo(){return this.historyService.canRedo()}clearCanvas(){this.canvasService.clear(),this.saveCurrentState("canvas_cleared")}zoomIn(){const m=this.getCurrentZoom();this.canvasService.setZoom(m+.1)}zoomOut(){const m=this.getCurrentZoom();m<=.1||this.canvasService.setZoom(m-.1)}resetZoom(){this.canvasService.setZoom(1)}fitCanvasToScreen(){this.canvasService.fitToScreen()}exportCanvas(m){return m===d.PNG?this.canvasService.exportAsImage():this.canvasService.exportAsJSON()}importFromJSON(m){const _=JSON.parse(m);this.canvasService.loadFromJSON(_,()=>{this.saveCurrentState("import")})}updateConfig(m){this.config&&(this.config=Object.assign(Object.assign({},this.config),m))}onCanvasEvent(){return this.canvasService.onCanvasEvent(D.k.STROKE_ADDED)}getCurrentTool(){return this.canvasService.getCurrentTool()||T.n.BRUSH}getCurrentColor(){return this.canvasService.getCurrentBrushColor()||T.s.DEFAULT_BRUSH_COLOR}getCurrentBrushSize(){return this.canvasService.getCurrentBrushWidth()||T.s.DEFAULT_BRUSH_WIDTH}getCurrentZoom(){return this.canvasService.getZoom()||1}saveCurrentState(m){const _=this.canvasService.getCurrentState();_&&this.historyService.saveState(_,m)}getCanvasStats(){return{canUndo:this.canUndo(),canRedo:this.canRedo(),currentTool:this.getCurrentTool(),currentColor:this.getCurrentColor(),currentBrushSize:this.getCurrentBrushSize(),currentZoom:this.getCurrentZoom()}}getConfig(){return this.config}enableDrawing(){if(this.canvasService instanceof o){const m=this.canvasService.getCanvas();m&&(m.isDrawingMode=!0,m.selection=!0,this.canvasService.setObjectsSelectable(!0))}}disableDrawing(){if(this.canvasService instanceof o){const m=this.canvasService.getCanvas();m&&(m.isDrawingMode=!1,m.selection=!1,this.canvasService.setObjectsSelectable(!1))}}fetchDrawboardData(m){return(0,f.mG)(this,void 0,void 0,function*(){try{return yield this.dataService.getDataFromStaticUrl(m)}catch(_){throw new Error(_)}})}getBookImageUrl(m,{width:_=120,height:b=150}={}){return m?`${(0,h.oe)(`${this._env.resizeBase}?width=${_}&height=${b}&quality=100&url=${this._env.secureCdnBase}`,".php",".webp")}${m.toString().slice(-1)}/${m}/cover.webp`:""}loadDrawboardDialog({mode:m,bookId:_,name:b,jsonFileUrl:A,thumbnailUrl:F,studentName:L,studentId:W,token:X,sketchId:tt,isFirstTimeSketchOpening:q,sourceMode:rt,onClosed:C}){return(0,f.mG)(this,void 0,void 0,function*(){return new Promise(O=>(0,f.mG)(this,void 0,void 0,function*(){yield k.e("common").then(k.bind(k,84198)),yield Promise.all([k.e("default-node_modules_lottie-web_build_player_lottie_js"),k.e("default-node_modules_angular_material_fesm2015_tooltip_mjs"),k.e("default-src_app_core_services_grpc_service_ts"),k.e("default-src_app_core_services_content-gating_service_ts"),k.e("default-src_app_core_services_impressions-logger_service_ts"),k.e("default-src_app_web-app_services_daily-read-time_service_ts"),k.e("default-node_modules_animejs_lib_anime_es_js"),k.e("default-src_app_web-app_services_epic-toast-custom_service_ts"),k.e("default-node_modules_angular_material_fesm2015_slider_mjs"),k.e("default-src_app_web-app_components_dialogs_drawboard-dialog_drawboard-dialog_component_ts"),k.e("common"),k.e("src_app_web-app_components_dialogs_drawboard-dialog_drawboard-dialog_module_ts-node_modules_a-8257be")]).then(k.bind(k,8803));const{DrawboardDialogComponent:E}=yield Promise.all([k.e("default-node_modules_lottie-web_build_player_lottie_js"),k.e("default-src_app_core_services_grpc_service_ts"),k.e("default-src_app_core_services_content-gating_service_ts"),k.e("default-src_app_core_services_impressions-logger_service_ts"),k.e("default-src_app_web-app_services_daily-read-time_service_ts"),k.e("default-node_modules_animejs_lib_anime_es_js"),k.e("default-src_app_web-app_services_epic-toast-custom_service_ts"),k.e("default-src_app_web-app_components_dialogs_drawboard-dialog_drawboard-dialog_component_ts")]).then(k.bind(k,34650));let x=null;if(A)try{x=yield this.fetchDrawboardData(A)}catch(M){throw new Error(M)}console.log("sak getBookImageUrl",this.getBookImageUrl(_));const U=this.getBookImageUrl(_),w={mode:m,config:this.drawboardConfig,isEditing:!!x,existingData:x,bookId:_,name:b,bookImageUrl:U,thumbnailUrl:F,studentName:L,studentId:W,token:X,sketchId:tt,isFirstTimeSketchOpening:q,sourceMode:rt},S=this._coreDialogService.openDialog(E,Object.assign(Object.assign({},this._coreDialogService.fullScreenDialogConfig),{data:w,id:e.v0.DRAWBOARD_DIALOG,disableClose:!0}));S.afterClosed().subscribe(M=>{console.log("sak dialogRef closed",M),C&&C(M)}),O(S)}))})}checkIfDrawingExistsForBook(m,_){return(0,f.mG)(this,void 0,void 0,function*(){return m?new Promise(b=>(0,f.mG)(this,void 0,void 0,function*(){var A;let F={bookId:m};_&&(F=Object.assign(Object.assign({},F),{userId:_}));try{const L=yield this.dataService.get("WebStorySketch","getDetailByBo
1okId",F);console.log("sak response",L),1===L.success&&(null===(A=null==L?void 0:L.result)||void 0===A?void 0:A.jsonFile)?(this.existingDrawingDataForCurrenBook=L.result,b(null==L?void 0:L.result)):b(!1)}catch(L){console.error("Failed to check if drawing exists:",L),b(!1)}})):Promise.resolve(!1)})}generateQRCode(m){return(0,f.mG)(this,void 0,void 0,function*(){try{return yield i.hz(m,{width:80,margin:1,color:{dark:"#000000",light:"#FFFFFF"}})}catch(_){return console.error("Error generating QR code:",_),""}})}printStorySketch(m,_,b,A,F){if(console.log("Print story sketch:",m),console.log("Print story sketch name:",_,this._env.hostname),console.log("data mode ",F,b),!m)return void console.warn("No thumbnail available for printing");const L=A&&F!==g.PARENT_PREVIEW;if(!A&&F!==g.PARENT_PREVIEW)return void console.warn("No token available for printing");let W=null;A&&(W=`https://${this._env.hostname}/sketch-flyer/?token=${(0,h.XI)(A)}&classcode=${this._accountService.getClassCode()}&flow=sketch-flyer`,console.log("sak qrCodeUrl",W));const X=document.createElement("iframe");X.style.position="fixed",X.style.width="0",X.style.height="0",X.style.border="none",document.body.appendChild(X);const tt=X.contentWindow;if(tt){const q=tt.document,rt=q.createElement("style");rt.textContent="\n               body {\n                    margin: 0;\n                    padding: 20px;\n                    display: flex;\n                    flex-direction: column;\n                    align-items: center;\n                    min-height: 100vh;\n                    font-family: Roboto, sans-serif;\n                    }\n                    .logo {\n                    width: 221px;\n                    height: 108px;\n                    }\n                    .student-title {\n                    font-size: 36px;\n                    line-height: 40px;\n                    font-weight: bold;\n                    color: #000000;\n                    text-align: center;\n                    margin-bottom: 20px;\n                    margin-top: 30px;\n                    }\n                    .sketch-image {\n                    max-width: 100%;\n\n                    object-fit: contain;\n                    }\n                    .sketch-image-container {\n                    border: 2px solid #000000;\n                    border-top: none;\n                    margin-top: 18px;\n                    }\n                    .img-heading {\n                    background: #000000;\n                    color: #ffffff;\n                    height: 30px;\n                    width: 100%;\n                    text-align: center;\n                    display: flex;\n                    align-items: center;\n                    justify-content: center;\n                    }\n                    .footer {\n                    margin-top: 80px;\n                    font-size: 20px;\n                    line-height: 20px;\n                    font-weight: bold;\n                    color: #000000;\n                    text-align: center;\n                    position: relative;\n                    display: flex;\n                    justify-content: center;\n                    align-items: center;\n                    gap: 20px;\n                    }\n                    .footer-text {\n                    text-align: center;\n                    width: 500px;\n                    }\n                    .footer-img {\n                    position: absolute;\n                    right: 10px;\n                    top: 40px;\n                    }\n                    .footer-qr-code {\n                    width: 120px;\n                    height: 120px;\n                    }\n                    @media print {\n                    @page {\n                        size: A4;\n                        margin: 0.5in;\n                    }\n                    \n                    body {\n                        padding: 0;\n                        margin: 0;\n                        display: flex;\n                        flex-direction: column;\n                        align-items: center;\n                        page-break-inside: avoid;\n                        max-height: 10.5in; /* A4 height minus margins */\n                        overflow: hidden;\n                    }\n                    \n                    .logo {\n                        width: 221p
1x;\n                        height: 108px;\n                        page-break-inside: avoid;\n                        flex-shrink: 0;\n                    }\n                    \n                    .student-title {\n                        font-size: 36px;\n                        line-height: 40px;\n                        font-weight: bold;\n                        color: #000000;\n                        text-align: center;\n                        margin-bottom: 20px;\n                        margin-top: 30px;\n                        page-break-inside: avoid;\n                        flex-shrink: 0;\n                    }\n                    \n                    .subtitle {\n                        page-break-inside: avoid;\n                        flex-shrink: 0;\n                        margin-bottom: 10px;\n                    }\n                    \n                    .sketch-image-container {\n                        border: 2px solid #000000;\n                        margin-top: 28px;\n                        border-top: none;\n                        page-break-inside: avoid;\n                        flex: 1;\n                        display: flex;\n                        flex-direction: column;\n                        min-height: 0;\n                        max-height: 5in; /* Reserve space for other elements */\n                    }\n                    \n                    .img-heading {\n                        background: #000000 !important;\n                        color: #ffffff;\n                        height: 30px;\n                        width: 100%;\n                        text-align: center;\n                        display: flex;\n                        align-items: center;\n                        justify-content: center;\n                        -webkit-print-color-adjust: exact;\n                        print-color-adjust: exact;\n                        flex-shrink: 0;\n                    }\n                    \n                    .sketch-image {\n                        max-width: 100%;\n                        height: auto;\n                        max-height: calc(5in - 30px);\n                        object-fit: contain;\n                        page-break-inside: avoid;\n                        flex: 1;\n                        min-height: 0;\n                    }\n                    \n                    .footer {\n                        margin-top: 40px;\n                        font-size: 20px;\n                        line-height: 20px;\n                        font-weight: bold;\n                        color: #000000;\n                        text-align: center;\n                        position: relative;\n                        display: flex;\n                        justify-content: center;\n                        align-items: center;\n                        gap: 20px;\n                        page-break-inside: avoid;\n                        flex-shrink: 0;\n                        max-height: 2in; /* Limit footer height */\n                    }\n                    \n                    .footer-text {\n                        text-align: center;\n                        width: 500px;\n                    }\n                    \n                    .footer-img {\n                        position: absolute;\n                        right: 180px;\n                        top: 80px;\n                    }\n                    \n                    .footer-qr-code {\n                        width: 120px;\n                        height: 120px;\n                    }\n                    \n                    /* Safari-specific adjustments */\n                    @supports (-webkit-appearance: none) {\n                        body {\n                            -webkit-print-color-adjust: exact;\n                            max-height: 10in !important; /* Slightly smaller for Safari */\n                        }\n                        \n                        .sketch-image-container {\n                            max-height: 4.5in !important;\n                        }\n                        \n                        .sketch-image {\n                            max-height: calc(4.5in - 30px) !important;\n                        }\n                        \n                        .footer {\n                            margin-top: 30px !important;\n                            page-break-before: avoid;\n                        }\n                    }\n                    }\n\n            ",q.head.appendChild(rt);let C=0;const O=L?3:2,E=()=>{C++,C===O&&setTimeout(()=>{tt.focus(),tt.print(),document.body.removeChild(X)},100)},x=q.createElement("img");x.src="/assets/epic-logos/epic-logo-solid-blue.svg",x.alt="Epic Logo",x.className="logo",x.onload=E,x.onerror=()=>{console.warn("Logo failed to load, proceeding with print"),E()},q.body.appendChild(x);const U=q.createElement("div");U.className="student-title",U.textContent=`Check Out ${b}'s Story Sketch!`,q.body.appendChild(U);const w=q.createElement("div");w.className="subtitle",w.textContent="Epic is the largest digital reading platform for kids, with over 40,000 popular books and learning videos.\nYour 
1child read a book on Epic in class, then created this Story Sketch! ",q.body.appendChild(w);const S=q.createElement("div");S.className="sketch-image-container";const M=q.createElement("img");M.src=m,M.alt=_,M.className="sketch-image",M.onload=E,M.onerror=()=>{console.warn("Sketch image failed to load"),E()};const B=q.createElement("div");if(B.className="img-heading",B.textContent=`I read ${_}`,S.appendChild(B),S.appendChild(M),q.body.appendChild(S),L){const Y=q.createElement("div");Y.className="footer";const H=q.createElement("div");H.className="footer-text",H.textContent="See your kid's reading milestones, view their Story Sketches and learn more about Epic by scanning the QR code.",Y.appendChild(H);const V=q.createElement("img");V.src="/assets/drawboard/preview-tool-bar/print-art.svg",V.alt="Print Art",V.className="footer-img",Y.appendChild(V),W?this.generateQRCode(W).then(Q=>{if(Q){const et=q.createElement("img");et.src=Q,et.alt="QR Code",et.className="footer-qr-code",Y.appendChild(et)}E()}).catch(Q=>{console.error("QR code generation error:",Q),E()}):E(),q.body.appendChild(Y)}}}printSelectedStorySketches(m){if(0===m.length)return void console.warn("No story sketches selected for printing");console.log("sak selectedItems",m);const _=document.createElement("iframe");_.style.position="fixed",_.style.width="0",_.style.height="0",_.style.border="none",document.body.appendChild(_);const b=_.contentWindow;if(b){const A=b.document,F=A.createElement("style");F.textContent="\n                body { \n                    margin: 0; \n                    font-family: Roboto, sans-serif; \n                }\n                .page { \n                    page-break-after: always; \n                    padding: 20px; \n                    display: flex; \n                    flex-direction: column; \n                    align-items: center; \n                    min-height: 95vh;\n                    max-height: 100vh;\n                    overflow: hidden;\n                    box-sizing: border-box;\n                }\n                .page:last-child { \n                    page-break-after: auto; \n                }\n                .logo { \n                    width: 221px; \n                    height: 108px; \n                    flex-shrink: 0;\n                }\n                .student-title { \n                    font-size: 36px; \n                    line-height: 40px; \n                    font-weight: bold; \n                    color: #000; \n                    text-align: center; \n                    margin: 30px 0 20px;\n                    flex-shrink: 0;\n                }\n                .img-heading { \n                    background: #000; \n                    color: #fff; \n                    height: 30px; \n                    width: 100%; \n                    text-align: center; \n                    display: flex; \n                    align-items: center; \n                    justify-content: center;\n                    flex-shrink: 0;\n                }\n                .sketch-image-container { \n                    border: 2px solid #000; \n                    border-top: none; \n                    margin-top: 18px; \n                    width: 100%; \n                    display: flex; \n                    flex-direction: column; \n                    align-items: center;\n                    flex: 1;\n                    min-height: 0;\n                    max-height: 50vh;\n                    overflow: hidden;\n                }\n                .sketch-image { \n                    max-width: 100%; \n                    height: auto;\n                    max-height: calc(50vh - 30px);\n                    object-fit: contain; \n                    page-break-inside: avoid;\n                    flex: 1;\n                    min-height: 0;\n                }\n                .footer {\n                    margin-top: 40px;\n                    font-size: 20px;\n                    line-height: 20px;\n                    font-weight: bold;\n                    color: #000000;\n                    text-align: center;\n                    position: relative;\n                    display: flex;\n                    justify-content: center;\n                    align-items: center;\n                    gap: 20px;\n                    flex-shrink: 0;\n                    max-height: 25vh;\n                }\n                .footer-text { \n                    width: 500px; \n                }\n                .footer-img {\n                    position: absolute;\n                    right: 180px;\n                    top: 80px;\n                }
1\n                .footer-qr-code { \n                    width: 120px; \n                    height: 120px; \n                }\n                @media print {\n                    @page {\n                        size: A4;\n                        margin: 0.5in;\n                    }\n                    \n                    body {\n                        margin: 0;\n                        padding: 0;\n                    }\n                    \n                    .page { \n                        padding: 0;\n                        max-height: 10.5in;\n                        overflow: hidden;\n                        page-break-inside: avoid;\n                    }\n                    \n                    .logo {\n                        flex-shrink: 0;\n                    }\n                    \n                    .student-title {\n                        flex-shrink: 0;\n                    }\n                    \n                    .sketch-image-container { \n                        margin-top: 28px;\n                        max-height: 5in;\n                        flex: 1;\n                        min-height: 0;\n                    }\n                    \n                    .sketch-image {\n                        max-height: calc(5in - 30px);\n                    }\n                    \n                    .img-heading { \n                        background: #000000 !important; \n                        -webkit-print-color-adjust: exact; \n                        print-color-adjust: exact;\n                        flex-shrink: 0;\n                    }\n                    \n                    .footer {\n                        margin-top: 40px;\n                        flex-shrink: 0;\n                        max-height: 2in;\n                    }\n                    \n                    /* Safari-specific adjustments */\n                    @supports (-webkit-appearance: none) {\n                        .page {\n                            max-height: 10in !important;\n                        }\n                        \n                        .sketch-image-container {\n                            max-height: 4.5in !important;\n                        }\n                        \n                        .sketch-image {\n                            max-height: calc(4.5in - 30px) !important;\n                        }\n                        \n                        .footer {\n                            margin-top: 30px !important;\n                        }\n                    }\n                }\n            ",A.head.appendChild(F);const L=m.map(W=>(0,f.mG)(this,void 0,void 0,function*(){var X;const tt=(null===(X=W.studentName)||void 0===X?void 0:X.split(" ")[0])||"",q=(0,h.XI)(W.token||""),rt=this._accountService.getClassCode(),C=`https://${this._env.hostname}/sketch-flyer/?token=${q}&classcode=${rt}&flow=sketch-flyer`,O=yield this.generateQRCode(C);return`\n                    <div class="page">\n                        <img src="/assets/epic-logos/epic-logo-solid-blue.svg" class="logo" />\n                        <div class="student-title">Check Out ${tt}'s Story Sketch!</div>\n                        <div class="sketch-image-container">\n                            <div class="img-heading">I read ${W.bookTitle||W.name}</div>\n                            <img src="${W.thumbnail}" class="sketch-image" />\n                        </div>\n                        <div class="footer">\n                            <div class="footer-text">\n                                See your kid\u2019s reading milestones, view their Story Sketches and learn more about Epic by scanning the QR code.\n                            </div>\n                            <img src="/assets/drawboard/preview-tool-bar/print-art.svg" class="footer-img" />\n                            <img src="${O}" class="footer-qr-code" />\n                        </div>\n                    </div>\n                `}));Promise.all(L).then(W=>{A.body.innerHTML=W.join("");const X=Array.from(A.images);Promise.all(X.map(q=>q.complete?Promise.resolve():new Promise(rt=>{q.onload=q.onerror=rt}))).then(()=>{setTimeout(()=>{b.focus(),b.print(),document.body.removeChild(_)},100)})})}}getDataFromToken(m){return(0,f.mG)(this,void 0,void 0,function*(){try{const _=yield this.dataService.get("WebStorySketch","noAuthGetDetailBySSToken",{token:m});return 1===_.success&&_.result?_.result:null}catch(_){return console.error("Failed to get data from token:",_),null}})}}
1return p.\u0275fac=function(m){return new(m||p)(N.LFG(o),N.LFG(s),N.LFG(a.CoreDialogService),N.LFG(n.D),N.LFG(l.DJ),N.LFG(u.B))},p.\u0275prov=N.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})()},94343:(ht,P,k)=>{"use strict";k.r(P),k.d(P,{StorySketchEnabledTeachersService:()=>a});var f=k(67274),T=k(10745),D=k(60116),I=k(59295),j=k(50635),N=k(32779),c=k(38102),r=k(3184),o=k(14045),h=k(1146),e=k(98476),i=k(11105),t=k(64617),s=k(30877);let a=(()=>{class n{constructor(u,d,g,v,p,y){this._store=u,this._accountService=d,this._loggingService=g,this._bigqueryService=v,this._experienceService=p,this._localStorageService=y,this._teacherLists=[],this._teacherListLoaded=!1}set teacherLists(u){this._teacherLists=u}get teacherLists(){return this._teacherLists}init(){return this._teacherListLoaded&&this._teacherLists.length>0?(0,T.of)(this._teacherLists):this._store.select(f.Yi).pipe((0,D.h)(u=>(null==u?void 0:u.userBucketingMode)===N.Pn.DEVICE_ID),(0,I.q)(1),(0,j.U)(u=>{var d;try{const g=null===(d=null==u?void 0:u.flagsmithData)||void 0===d?void 0:d[c.H.STORY_SKETCH_ENABLED_TEACHERS];if(!g)return[];if(!(null==g?void 0:g.enabled))return[];if((null==g?void 0:g.enabled)&&(null==g?void 0:g.value)){const v="string"==typeof g.value?JSON.parse(g.value):g.value;return this.teacherLists=v,this._teacherListLoaded=!0,v}return[]}catch(g){return console.warn("Failed to parse flagsmith value",g),[]}}))}checkIfCurrentUserIsStudentOrTeacher(){return this._experienceService.isStudent()||this._experienceService.isTeacher()}checkIfTeacherIsEnabled(){const u=String(this._accountService.id);return!!u&&this.teacherLists.includes(u)}checkIfStudentIsEligible(){const u=this._accountService.isSchoolPlus,g=this._experienceService.isStudent()&&!u,v=this.checkIfTeacherIsEnabled();return!(!g||!v)}logBothAnalytics(u,d){this.logBigQueryEvent(u,d),this.logLoggingServiceEvent(u,d)}logBigQueryEvent(u,d){this._bigqueryService.log(u,d)}logLoggingServiceEvent(u,d){this._loggingService.logAnalyticsEvent(u,"init",{attributes:d})}getClassCode(){return{class_code:this._accountService.getClassCode()}}getCommonEventParams(){const u=this._localStorageService.get("userId"),d=Date.now();return Object.assign(Object.assign({user_id:u},this.getClassCode()),{event_time:d})}getAccountId(){return{account_id:this._accountService.id}}}return n.\u0275fac=function(u){return new(u||n)(r.LFG(o.yh),r.LFG(h.B),r.LFG(s.LoggingService),r.LFG(e.p),r.LFG(i.DT),r.LFG(t.n))},n.\u0275prov=r.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})()},26348:ht=>{"use strict";var P={single_source_shortest_paths:function(k,f,T){var D={},I={};I[f]=0;var N,c,r,o,h,i,j=P.PriorityQueue.make();for(j.push(f,0);!j.empty();)for(r in o=(N=j.pop()).cost,h=k[c=N.value]||{})h.hasOwnProperty(r)&&(i=o+h[r],(void 0===I[r]||I[r]>i)&&(I[r]=i,j.push(r,i),D[r]=c));if(void 0!==T&&void 0===I[T]){var a=["Could not find a path from ",f," to ",T,"."].join("");throw new Error(a)}return D},extract_shortest_path_from_predecessor_list:function(k,f){for(var T=[],D=f;D;)T.push(D),D=k[D];return T.reverse(),T},find_path:function(k,f,T){var D=P.single_source_shortest_paths(k,f,T);return P.extract_shortest_path_from_predecessor_list(D,T)},PriorityQueue:{make:function(k){var D,f=P.PriorityQueue,T={};for(D in k=k||{},f)f.hasOwnProperty(D)&&(T[D]=f[D]);return T.queue=[],T.sorter=k.sorter||f.default_sorter,T},default_sorter:function(k,f){return k.cost-f.cost},push:function(k,f){this.queue.push({value:k,cost:f}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};ht.exports=P},87065:(ht,P,k)=>{var c,r,o,h,e,i,f=f||{version:"5.5.2"};if(P.fabric=f,"undefined"!=typeof document&&"undefined"!=typeof window)f.document=document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?document:document.implementation.createHTMLDocument(""),f.window=window;else{var D=new(k(24960).JSDOM)(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;f.document=D.document,f.jsdomImplForWrapper=k(26759).implForWrapper,f.nodeCanvas=k(56272).Canvas,f.window=D,DOMParser=f.window.DOMParser}function j(c,r){var o=c.canvas,h=r.targetCanvas,e=h.getContext("2d");e.translate(0,h.height),e.scale(1,-1),e.drawImage(o,0,o.height-h.height,h.width,h.height,0,0,h.width,h.height)}function N(c,r){var h=r.targetCanvas.getContext("2d"),e=r.destinationWidth,i=r.destinationHeight,t=e*i*4,s=new Uint8Array(this.imageBuffer,0,t),a=new Uint8ClampedArray(this.imageBuffer,0,t);c.readPixels(0,0,e,i,c.RGBA,c.UNSIGNED_BYTE,s);var n=new ImageData(a,e,i);h.putImageData(n,0,0)}f.isTouchSupported="ontouchstart"in f.window||"ontouchstart"in f.document||f.window&&f.window.navigator&&f.window.navigator.maxTouchPoints>0,f.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,f.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","i
1d","paint-order","vector-effect","instantiated_by_use","clip-path"],f.DPI=96,f.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",f.commaWsp="(?:\\s+,?\\s*|,\\s*)",f.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,f.reNonWord=/[ \n\.,;!\?\-]/,f.fontPaths={},f.iMatrix=[1,0,0,1,0,0],f.svgNS="http://www.w3.org/2000/svg",f.perfLimitSizeTotal=2097152,f.maxCacheSideLimit=4096,f.minCacheSideLimit=256,f.charWidthsCache={},f.textureSize=2048,f.disableStyleCopyPaste=!1,f.enableGLFiltering=!0,f.devicePixelRatio=f.window.devicePixelRatio||f.window.webkitDevicePixelRatio||f.window.mozDevicePixelRatio||1,f.browserShadowBlurConstant=1,f.arcToSegmentsCache={},f.boundsOfCurveCache={},f.cachesBoundsOfCurve=!0,f.forceGLPutImageData=!1,f.initFilterBackend=function(){return f.enableGLFiltering&&f.isWebglSupported&&f.isWebglSupported(f.textureSize)?(console.log("max texture size: "+f.maxTextureSize),new f.WebglFilterBackend({tileSize:f.textureSize})):f.Canvas2dFilterBackend?new f.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=f),function(){function c(t,s){if(this.__eventListeners[t]){var a=this.__eventListeners[t];s?a[a.indexOf(s)]=!1:f.util.array.fill(a,!1)}}function o(t,s){var a=function(){s.apply(this,arguments),this.off(t,a)}.bind(this);this.on(t,a)}f.Observable={fire:function i(t,s){if(!this.__eventListeners)return this;var a=this.__eventListeners[t];if(!a)return this;for(var n=0,l=a.length;n<l;n++)a[n]&&a[n].call(this,s||{});return this.__eventListeners[t]=a.filter(function(u){return!1!==u}),this},on:function r(t,s){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var a in t)this.on(a,t[a]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(s);return this},once:function h(t,s){if(1===arguments.length)for(var a in t)o.call(this,a,t[a]);else o.call(this,t,s);return this},off:function e(t,s){if(!this.__eventListeners)return this;if(0===arguments.length)for(t in this.__eventListeners)c.call(this,t);else if(1===arguments.length&&"object"==typeof arguments[0])for(var a in t)c.call(this,a,t[a]);else c.call(this,t,s);return this}}}(),f.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var c=0,r=arguments.length;c<r;c++)this._onObjectAdded(arguments[c]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(c,r,o){var h=this._objects;return o?h[r]=c:h.splice(r,0,c),this._onObjectAdded&&this._onObjectAdded(c),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var r,c=this._objects,o=!1,h=0,e=arguments.length;h<e;h++)-1!==(r=c.indexOf(arguments[h]))&&(o=!0,c.splice(r,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[h]));return this.renderOnAddRemove&&o&&this.requestRenderAll(),this},forEachObject:function(c,r){for(var o=this.getObjects(),h=0,e=o.length;h<e;h++)c.call(r,o[h],h,o);return this},getObjects:function(c){return void 0===c?this._objects.concat():this._objects.filter(function(r){return r.type===c})},item:function(c){return this._objects[c]},isEmpty:function(){return 0===this._objects.length},size:function(){return this._objects.length},contains:function(c,r){return this._objects.indexOf(c)>-1||!!r&&this._objects.some(function(o){return"function"==typeof o.contains&&o.contains(c,!0)})},complexity:function(){return this._objects.reduce(function(c,r){return c+(r.complexity?r.complexity():0)},0)}},f.CommonMethods={_setOptions:function(c){for(var r in c)this.set(r,c[r])},_initGradient:function(c,r){c&&c.colorStops&&!(c instanceof f.Gradient)&&this.set(r,new f.Gradient(c))},_initPattern:function(c,r,o){!c||!c.source||c instanceof f.Pattern?o&&o():this.set(r,new f.Pattern(c,o))},_setObject:function(c){for(var r in c)this._set(r,c[r])},set:function(c,r){return"object"==typeof c?this._setObject(c):this._set(c,r),this},_set:function(c,r){this[c]=r},toggle:function(c){var r=this.get(c);return"boolean"==typeof r&&this.set(c,!r),this},get:function(c){return this[c]}},c=P,r=Math.sqrt,o=Math.atan2,h=Math.pow,e=Math.PI/180,i=Math.PI/2,f.util={cos:function(t){if(0===t)return 1;switch(t<0&&(t=-t),t/i){case 1:case 3:return 0;case 2:return-1}return Math.cos(t)},sin:function(t){if(0===t)return 0;var a=1;switch(t<0&&(a=-1),t/i){case 1:return a;case 2:return 0;case 3:return-a}return Math.sin(t)},removeFromArray:function(t,s){var a=t.indexOf(s);return-1!==a&&t.splice(a,1),t},getRandomInt:function(t,s){return Math.floor(Math.random()*(s-t+1))+t},degreesToRadians:function(t){return t*e},radiansToDegrees:function(t){return t/e},rotatePoint:function(t,s,a){var n=new f.Point(t.x-s.x,t.y-s.y),l=f.util.rotateVector(n,a);return new f.Point(l.x,l.y).addEquals(s)},rotateVector:function(t,s){var a=f.util.sin(s),n=f.util.cos(s);return{x:t.x*n-t.y*a,y:t.x*a+t.y*n}},createVector:function(t,s){return new f.Point(s.x-t.x,s.y-t.y)},calcAngleBetweenVectors:function(t,s){return Math.acos((t.x*s.x+t.y*s.y)/(Math.hypot(t.x,t.y)*Math.hypot(s.x,s.y)))},getHatVector:function(t){return new f.Point(t.x,t.y).multiply(1/Math.hypot(t.x,t.y))},getBisector:function(t,s,a){var n=f.util.createVector(t,s),l=f.util.createVector(t,a),u=f.util.calcAngleBetweenVectors(n,l),d=f.util.calcAngleBetweenVectors(f.util.rotateVector(n,u),l);return{vector:f.util.getHatVector(f.util.rotateVector(n,u*(0===d?1:-1)/2)),angle:u}},projectStrokeOnPoints:function(t,s,a){var n=[],l=s.strokeWidth/2,u=s.strokeUniform?new f.Point(1/s.scaleX,1/s.scaleY):new f.Point(1,1),d=function(g){var v=l/Math.hypot(g.x,g.y);return new f.Point(g.x*v*u.x,g.y*v*u.y)};return t.length<=1||t.forEach(function(g,v){var y,m,p=new f.Point(g.x,g.y);0===v?(m=t[v+1],y=a?d(f.util.createVector(m,p)).addEquals(p):t[t.length-1]):v===t.length-1?(y=t[v-1],m=a?d(f.util.createVector(y,p)).addEquals(p):t[0]):(y=t[v-1],m=t[v+1]);var F,L,_=f.util.getBisector(p,y,m),b=_.vector;if("miter"===s.strokeLineJoin&&(F=-l/Math.sin(_.angle/2),L=new f.Point(b.x*F*u.x,b.y*F*u.y),Math.hypot(L.x,L.y)/l<=s.strokeMiterLimit))return n.push(p.add(L)),void n.push(p.subtract(L));F=-l*Math.SQRT2,L=new f.Point(b.x*F*u.x,b.y*F*u.y),n.push(p.add(L)),n.push(p.subtract(L))}),n},transformPoint:function(t,s,a){return a?new f.Point(s[0]*t.x+s[2]*t.y,s[1]*t.x+s[3]*t.y):new f.Point(s[0]*t.x+s[2]*t.y+s[4],s[1]*t.x+s[3]*t.y+s[5])},makeBoundingBoxFromPoints:function(t,s){if(s)for(var a=0;a<t.length;a++)t[a]=f.util.transformPoint(t[a],s);var n=[t[0].x,t[1].x,t[2].x,t[3].x],l=f.util.array.min(n),d=f.util.array.max(n)-l,g=[t[0].y,t[1].y,t[2].y,t[3].y],v=f.util.array.min(g);return{left:l,top:v,width:d,height:f.util.array.max(g)-v}},invertTransform:function(t){var s=1/(t[0]*t[3]-t[1]*t[2]),a=[s*t[3],-s*t[1],-s*t[2],s*t[0]],n=f.util.transformPoint({x:t[4],y:t[5]},a,!0);return a[4]=-n.x,a[5]=-n.y,a},toFixed:function(t,s){return parseFloat(Number(t).toFixed(s))},parseUnit:function(t,s){var a=/\D{0,2}$/.exec(t),n=parseFloat(t);switch(s||(s=f.Text.DEFAULT_SVG_FONT_SIZE),a[0]){case"mm":return n*f.DPI/25.4;case"cm":return n*f.DPI/2.54;case"in":return n*f.DPI;case"pt":return n*f.DPI/72;case"pc":return n*f.DPI/72*12;case"em":return n*s;default:return n}},falseFunction:function(){return!1},getKlass:function(t,s){return t=f.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),f.util.resolveNamespace(s)[t]},getSvgAttributes:function(t){var s=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":s=s.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":s=s.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":s=s.concat(["offset","stop-color","stop-opacity"])}return s},resolveNamespace:function(t){if(!t)return f;var n,s=t.split("."),a=s.length,l=c||f.window;for(n=0;n<a;++n)l=l[s[n]];return l}
1,loadImage:function(t,s,a,n){if(t){var l=f.util.createImage(),u=function(){s&&s.call(a,l,!1),l=l.onload=l.onerror=null};l.onload=u,l.onerror=function(){f.log("Error loading "+l.src),s&&s.call(a,null,!0),l=l.onload=l.onerror=null},0!==t.indexOf("data")&&null!=n&&(l.crossOrigin=n),"data:image/svg"===t.substring(0,14)&&(l.onload=null,f.util.loadImageInDom(l,u)),l.src=t}else s&&s.call(a,t)},loadImageInDom:function(t,s){var a=f.document.createElement("div");a.style.width=a.style.height="1px",a.style.left=a.style.top="-100%",a.style.position="absolute",a.appendChild(t),f.document.querySelector("body").appendChild(a),t.onload=function(){s(),a.parentNode.removeChild(a),a=null}},enlivenObjects:function(t,s,a,n){var l=[],u=0,d=(t=t||[]).length;function g(){++u===d&&s&&s(l.filter(function(v){return v}))}d?t.forEach(function(v,p){v&&v.type?f.util.getKlass(v.type,a).fromObject(v,function(m,_){_||(l[p]=m),n&&n(v,m,_),g()}):g()}):s&&s(l)},enlivenObjectEnlivables:function(t,s,a){var n=f.Object.ENLIVEN_PROPS.filter(function(l){return!!t[l]});f.util.enlivenObjects(n.map(function(l){return t[l]}),function(l){var u={};n.forEach(function(d,g){u[d]=l[g],s&&(s[d]=l[g])}),a&&a(u)})},enlivenPatterns:function(t,s){function a(){++l===u&&s&&s(n)}var n=[],l=0,u=(t=t||[]).length;u?t.forEach(function(d,g){d&&d.source?new f.Pattern(d,function(v){n[g]=v,a()}):(n[g]=d,a())}):s&&s(n)},groupSVGElements:function(t,s,a){var n;return t&&1===t.length?(void 0!==a&&(t[0].sourcePath=a),t[0]):(s&&(s.width&&s.height?s.centerPoint={x:s.width/2,y:s.height/2}:(delete s.width,delete s.height)),n=new f.Group(t,s),void 0!==a&&(n.sourcePath=a),n)},populateWithProperties:function(t,s,a){if(a&&Array.isArray(a))for(var n=0,l=a.length;n<l;n++)a[n]in t&&(s[a[n]]=t[a[n]])},createCanvasElement:function(){return f.document.createElement("canvas")},copyCanvasElement:function(t){var s=f.util.createCanvasElement();return s.width=t.width,s.height=t.height,s.getContext("2d").drawImage(t,0,0),s},toDataURL:function(t,s,a){return t.toDataURL("image/"+s,a)},createImage:function(){return f.document.createElement("img")},multiplyTransformMatrices:function(t,s,a){return[t[0]*s[0]+t[2]*s[1],t[1]*s[0]+t[3]*s[1],t[0]*s[2]+t[2]*s[3],t[1]*s[2]+t[3]*s[3],a?0:t[0]*s[4]+t[2]*s[5]+t[4],a?0:t[1]*s[4]+t[3]*s[5]+t[5]]},qrDecompose:function(t){var s=o(t[1],t[0]),a=h(t[0],2)+h(t[1],2),n=r(a),l=(t[0]*t[3]-t[2]*t[1])/n,u=o(t[0]*t[2]+t[1]*t[3],a);return{angle:s/e,scaleX:n,scaleY:l,skewX:u/e,skewY:0,translateX:t[4],translateY:t[5]}},calcRotateMatrix:function(t){if(!t.angle)return f.iMatrix.concat();var s=f.util.degreesToRadians(t.angle),a=f.util.cos(s),n=f.util.sin(s);return[a,n,-n,a,0,0]},calcDimensionsMatrix:function(t){var s=void 0===t.scaleX?1:t.scaleX,a=void 0===t.scaleY?1:t.scaleY,n=[t.flipX?-s:s,0,0,t.flipY?-a:a,0,0],l=f.util.multiplyTransformMatrices,u=f.util.degreesToRadians;return t.skewX&&(n=l(n,[1,0,Math.tan(u(t.skewX)),1],!0)),t.skewY&&(n=l(n,[1,Math.tan(u(t.skewY)),0,1],!0)),n},composeMatrix:function(t){var s=[1,0,0,1,t.translateX||0,t.translateY||0],a=f.util.multiplyTransformMatrices;return t.angle&&(s=a(s,f.util.calcRotateMatrix(t))),(1!==t.scaleX||1!==t.scaleY||t.skewX||t.skewY||t.flipX||t.flipY)&&(s=a(s,f.util.calcDimensionsMatrix(t))),s},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},saveObjectTransform:function(t){return{scaleX:t.scaleX,scaleY:t.scaleY,skewX:t.skewX,skewY:t.skewY,angle:t.angle,left:t.left,flipX:t.flipX,flipY:t.flipY,top:t.top}},isTransparent:function(t,s,a,n){n>0&&(s>n?s-=n:s=0,a>n?a-=n:a=0);var u,l=!0,g=t.getImageData(s,a,2*n||1,2*n||1),v=g.data.length;for(u=3;u<v&&0!=(l=g.data[u]<=0);u+=4);return g=null,l},parsePreserveAspectRatioAttribute:function(t){var u,s="meet",l=t.split(" ");return l&&l.length&&("meet"!==(s=l.pop())&&"slice"!==s?(u=s,s="meet"):l.length&&(u=l.pop())),{meetOrSlice:s,alignX:"none"!==u?u.slice(1,4):"none",alignY:"none"!==u?u.slice(5,8):"none"}},clearFabricFontCache:function(t){(t=(t||"").toLowerCase())?f.charWidthsCache[t]&&delete f.charWidthsCache[t]:f.charWidthsCache={}},limitDimsByArea:function(t,s){var a=Math.sqrt(s*t),n=Math.floor(s/a);return{x:Math.floor(a),y:n}},capValue:function(t,s,a){return Math.max(t,Math.min(s,a))},findScaleToFit:function(t,s){return Math.min(s.width/t.width,s.height/t.height)},findScaleToCover:function(t,s){return Math.max(s.width/t.width,s.height/t.height)},matrixToSVG:function(t){return"matrix("+t.map(function(s){return f.util.toFixed(s,f.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"},removeTransformFromObject:function(t,s){var a=f.util.invertTransform(s),n=f.util.multiplyTransformMatrices(a,t.calcOwnMatrix());f.util.applyTransformToObject(t,n)},addTransformToObject:function(t,s){f.util.applyTransformToObject(t,f.util.multiplyTransformMatrices(s,t.calcOwnMatrix()))},applyTransformToObject:function(t,s){var a=f.util.qrDecompose(s),n=new f.Point(a.translateX,a.translateY);t.flipX=!1,t.flipY=!1,t.set("scaleX",a.scaleX),t.set("scaleY",a.scaleY),t.skewX=a.skewX,t.skewY=a.skewY,t.angle=a.angle,t.setPositionByOrigin(n,"center","center")},sizeAfterTransform:function(t,s,a){var n=t/2,l=s/2,u=[{x:-n,y:-l},{x:n,y:-l},{x:-n,y:l},{x:n,y:l}],d=f.util.calcDimensionsMatrix(a),g=f.util.makeBoundingBoxFromPoints(u,d);return{x:g.width,y:g.height}},mergeClipPaths:function(t,s){var a=t,n=s;a.inverted&&!n.inverted&&(a=s,n=t),f.util.applyTransformToObject(n,f.util.multiplyTransformMatrices(f.util.invertTransform(a.calcTransformMatrix()),n.calcTransformMatrix()));var l=a.inverted&&n.inverted;return l&&(a.inverted=n.inverted=!1),new f.Group([a],{clipPath:n,inverted:l})},hasStyleChanged:function(t,s,a){return a=a||!1,t.fill!==s.fill||t.stroke!==s.stroke||t.strokeWidth!==s.strokeWidth||t.fontSize!==s.fontSize||t.fontFamily!==s.fontFamily||t.fontWeight!==s.fontWeight||t.fontStyle!==s.fontStyle||t.textBackgroun
1dColor!==s.textBackgroundColor||t.deltaY!==s.deltaY||a&&(t.overline!==s.overline||t.underline!==s.underline||t.linethrough!==s.linethrough)},stylesToArray:function(a,s){a=f.util.object.clone(a,!0);for(var n=s.split("\n"),l=-1,u={},d=[],g=0;g<n.length;g++)if(a[g])for(var v=0;v<n[g].length;v++){l++;var p=a[g][v];p&&Object.keys(p).length>0&&(f.util.hasStyleChanged(u,p,!0)?d.push({start:l,end:l+1,style:p}):d[d.length-1].end++),u=p||{}}else l+=n[g].length;return d},stylesFromArray:function(t,s){if(!Array.isArray(t))return t;for(var a=s.split("\n"),n=-1,l=0,u={},d=0;d<a.length;d++)for(var g=0;g<a[d].length;g++)n++,t[l]&&t[l].start<=n&&n<t[l].end&&(u[d]=u[d]||{},u[d][g]=Object.assign({},t[l].style),n===t[l].end-1&&l++);return u}},function(){var c=Array.prototype.join,r={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},o={m:"l",M:"L"};function h(C,O,E,x,U,w,S,M,B,Y,H){var V=f.util.cos(C),Q=f.util.sin(C),et=f.util.cos(O),z=f.util.sin(O),R=E*U*et-x*w*z+S,J=x*U*et+E*w*z+M;return["C",Y+B*(-E*U*Q-x*w*V),H+B*(-x*U*Q+E*w*V),R+B*(E*U*z+x*w*et),J+B*(x*U*z-E*w*et),R,J]}function i(C,O,E,x){var U=Math.atan2(O,C),w=Math.atan2(x,E);return w>=U?w-U:2*Math.PI-(U-w)}function s(C,O,E){for(var H=function e(C,O,E,x,U,w,S){var M=Math.PI,B=S*M/180,Y=f.util.sin(B),H=f.util.cos(B),V=0,Q=0,et=-H*C*.5-Y*O*.5,z=-H*O*.5+Y*C*.5,R=(E=Math.abs(E))*E,J=(x=Math.abs(x))*x,Z=z*z,G=et*et,$=R*J-R*Z-J*G,it=0;if($<0){var at=Math.sqrt(1-$/(R*J));E*=at,x*=at}else it=(U===w?-1:1)*Math.sqrt($/(R*Z+J*G));var nt=it*E*z/x,K=-it*x*et/E,st=H*nt-Y*K+.5*C,ot=Y*nt+H*K+.5*O,lt=i(1,0,(et-nt)/E,(z-K)/x),ut=i((et-nt)/E,(z-K)/x,(-et-nt)/E,(-z-K)/x);0===w&&ut>0?ut-=2*M:1===w&&ut<0&&(ut+=2*M);for(var ct=Math.ceil(Math.abs(ut/M*2)),dt=[],ft=ut/ct,mt=8/3*Math.sin(ft/4)*Math.sin(ft/4)/Math.sin(ft/2),vt=lt+ft,gt=0;gt<ct;gt++)dt[gt]=h(lt,vt,H,Y,E,x,st,ot,mt,V,Q),V=dt[gt][5],Q=dt[gt][6],lt=vt,vt+=ft;return dt}(E[6]-C,E[7]-O,E[1],E[2],E[4],E[5],E[3]),V=0,Q=H.length;V<Q;V++)H[V][1]+=C,H[V][2]+=O,H[V][3]+=C,H[V][4]+=O,H[V][5]+=C,H[V][6]+=O;return H}function n(C,O,E,x){return Math.sqrt((E-C)*(E-C)+(x-O)*(x-O))}function v(C,O,E,x,U,w,S,M){return function(B){var Y=function l(C){return C*C*C}(B),H=function u(C){return 3*C*C*(1-C)}(B),V=function d(C){return 3*C*(1-C)*(1-C)}(B),Q=function g(C){return(1-C)*(1-C)*(1-C)}(B);return{x:S*Y+U*H+E*V+C*Q,y:M*Y+w*H+x*V+O*Q}}}function p(C,O,E,x,U,w,S,M){return function(B){var Y=1-B;return Math.atan2(3*Y*Y*(x-O)+6*Y*B*(w-x)+3*B*B*(M-w),3*Y*Y*(E-C)+6*Y*B*(U-E)+3*B*B*(S-U))}}function b(C,O,E,x,U,w){return function(S){var M=function y(C){return C*C}(S),B=function m(C){return 2*C*(1-C)}(S),Y=function _(C){return(1-C)*(1-C)}(S);return{x:U*M+E*B+C*Y,y:w*M+x*B+O*Y}}}function A(C,O,E,x,U,w){return function(S){var M=1-S;return Math.atan2(2*M*(x-O)+2*S*(w-x),2*M*(E-C)+2*S*(U-E))}}function F(C,O,E){var U,S,x={x:O,y:E},w=0;for(S=1;S<=100;S+=1)U=C(S/100),w+=n(x.x,x.y,U.x,U.y),x=U;return w}function W(C){for(var x,Y,H,V,O=0,E=C.length,U=0,w=0,S=0,M=0,B=[],Q=0;Q<E;Q++){switch(H={x:U,y:w,command:(x=C[Q])[0]},x[0]){case"M":H.length=0,S=U=x[1],M=w=x[2];break;case"L":H.length=n(U,w,x[1],x[2]),U=x[1],w=x[2];break;case"C":Y=v(U,w,x[1],x[2],x[3],x[4],x[5],x[6]),V=p(U,w,x[1],x[2],x[3],x[4],x[5],x[6]),H.iterator=Y,H.angleFinder=V,H.length=F(Y,U,w),U=x[5],w=x[6];break;case"Q":Y=b(U,w,x[1],x[2],x[3],x[4]),V=A(U,w,x[1],x[2],x[3],x[4]),H.iterator=Y,H.angleFinder=V,H.length=F(Y,U,w),U=x[3],w=x[4];break;case"Z":case"z":H.destX=S,H.destY=M,H.length=n(U,w,S,M),U=S,w=M}O+=H.length,B.push(H)}return B.push({length:O,x:U,y:w}),B}f.util.joinPath=function(C){return C.map(function(O){return O.join(" ")}).join(" ")},f.util.parsePath=function tt(C){var x,U,V,Q,et,O=[],E=[],w=f.rePathCommand,S="[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",M="("+S+")"+f.commaWsp,B="([01])"+f.commaWsp+"?",H=new RegExp(M+"?"+M+"?"+M+B+B+M+"?("+S+")","g");if(!C||!C.match)return O;for(var R,z=0,J=(et=C.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi)).length;z<J;z++){Q=(x=et[z]).slice(1).trim(),E.length=0;var Z=x.charAt(0);if(R=[Z],"a"===Z.toLowerCase())for(var G;G=H.exec(Q);)for(var $=1;$<G.length;$++)E.push(G[$]);else for(;V=w.exec(Q);)E.push(V[0]);$=0;for(var it=E.length;$<it;$++)U=parseFloat(E[$]),isNaN(U)||R.push(U);var at=r[Z.toLowerCase()],nt=o[Z]||Z;if(R.length-1>at)for(var K=1,st=R.length;K<st;K+=at)O.push([Z].concat(R.slice(K,K+at))),Z=nt;else O.push(R)}return O},f.util.makePathSimpler=function a(C){var S,M,B,H,V,Q,O=0,E=0,x=C.length,U=0,w=0,Y=[];for(M=0;M<x;++M){switch(B=!1,(S=C[M].slice(0))[0]){case"l":S[0]="L",S[1]+=O,S[2]+=E;case"L":O=S[1],E=S[2];break;case"h":S[1]+=O;case"H":S[0]="L",S[2]=E,O=S[1];break;case"v":S[1]+=E;case"V":S[0]="L",E=S[1],S[1]=O,S[2]=E;break;case"m":S[0]="M",S[1]+=O,S[2]+=E;case"M":O=S[1],E=S[2],U=S[1],w=S[2];break;case"c":S[0]="C",S[1]+=O,S[2]+=E,S[3]+=O,S[4]+=E,S[5]+=O,S[6]+=E;case"C":V=S[3],Q=S[4],O=S[5],E=S[6];break;case"s":S[0]="S",S[1]+=O,S[2]+=E,S[3]+=O,S[4]+=E;case"S":"C"===H?(V=2*O-V,Q=2*E-Q):(V=O,Q=E),O=S[3],E=S[4],S[0]="C",S[5]=S[3],S[6]=S[4],S[3]=S[1],S[4]=S[2],S[1]=V,S[2]=Q,V=S[3],Q=S[4];break;case"q":S[0]="Q",S[1]+=O,S[2]+=E,S[3]+=O,S[4]+=E;case"Q":V=S[1],Q=S[2],O=S[3],E=S[4];break;case"t":S[0]="T",S[1]+=O,S[2]+=E;case"T":"Q"===H?(V=2*O-V,Q=2*E-Q):(V=O,Q=E),S[0]="Q",O=S[1],E=S[2],S[1]=V,S[2]=Q,S[3]=O,S[4]=E;break;case"a":S[0]="A",S[6]+=O,S[7]+=E;case"A":B=!0,Y=Y.concat(s(O,E,S)),O=S[6],E=S[7];break;case"z":case"Z":O=U,E=w}B||Y.push(S),H=S[0]}return Y},f.util.getSmoothPathFromPoints=function q(C,O){var x,E=[],U=new f.Point(C[0].x,C[0].y),w=new f.Point(C[1].x,C[1].y),S=C.length,M=1,B=0,Y=S>2;for(Y&&(M=C[2].x<w.x?-1:C[2].x===w.x?0:1,B=C[2].y<w.y?-1:C[2].y===w.y?0:1),E.push(["M",U.x-M*(O=O||0),U.y-B*O]),x=1;x<S;x++){if(!U.eq(w)){var H=U.midPointFrom(w);E.push(["Q",U.x,U.y,H.x,H.y])}U=C[x],x+1<C.length&&(w=C[x+1])}return Y&&(M=U.x>C[x-2].x?1:U.x===C[x-2].x?0:-1,B=U.y>C[x-2].y?1:U.y===C[x-2].y?0:-1),E.push(["L",U.x+M*O,U.y+B*O]),E},f.util.getPathSegmentsInfo=W,f.util.getBoundsOfCurve=function t(C,O,E,x,U,w,S,M){var B;
1if(f.cachesBoundsOfCurve&&(B=c.call(arguments),f.boundsOfCurveCache[B]))return f.boundsOfCurveCache[B];var R,J,Z,G,$,it,at,nt,Y=Math.sqrt,H=Math.min,V=Math.max,Q=Math.abs,et=[],z=[[],[]];J=6*C-12*E+6*U,R=-3*C+9*E-9*U+3*S,Z=3*E-3*C;for(var K=0;K<2;++K)if(K>0&&(J=6*O-12*x+6*w,R=-3*O+9*x-9*w+3*M,Z=3*x-3*O),Q(R)<1e-12){if(Q(J)<1e-12)continue;0<(G=-Z/J)&&G<1&&et.push(G)}else!((at=J*J-4*Z*R)<0)&&(0<($=(-J+(nt=Y(at)))/(2*R))&&$<1&&et.push($),0<(it=(-J-nt)/(2*R))&&it<1&&et.push(it));for(var ct,lt=et.length,ut=lt;lt--;)z[0][lt]=(ct=1-(G=et[lt]))*ct*ct*C+3*ct*ct*G*E+3*ct*G*G*U+G*G*G*S,z[1][lt]=ct*ct*ct*O+3*ct*ct*G*x+3*ct*G*G*w+G*G*G*M;z[0][ut]=C,z[1][ut]=O,z[0][ut+1]=S,z[1][ut+1]=M;var dt=[{x:H.apply(null,z[0]),y:H.apply(null,z[1])},{x:V.apply(null,z[0]),y:V.apply(null,z[1])}];return f.cachesBoundsOfCurve&&(f.boundsOfCurveCache[B]=dt),dt},f.util.getPointOnPath=function X(C,O,E){E||(E=W(C));for(var x=0;O-E[x].length>0&&x<E.length-2;)O-=E[x].length,x++;var B,U=E[x],w=O/U.length,M=C[x];switch(U.command){case"M":return{x:U.x,y:U.y,angle:0};case"Z":case"z":return(B=new f.Point(U.x,U.y).lerp(new f.Point(U.destX,U.destY),w)).angle=Math.atan2(U.destY-U.y,U.destX-U.x),B;case"L":return(B=new f.Point(U.x,U.y).lerp(new f.Point(M[1],M[2]),w)).angle=Math.atan2(M[2]-U.y,M[1]-U.x),B;case"C":case"Q":return function L(C,O){for(var S,M,H,E=0,x=0,U=C.iterator,w={x:C.x,y:C.y},B=.01,Y=C.angleFinder;x<O&&B>1e-4;)S=U(E),H=E,(M=n(w.x,w.y,S.x,S.y))+x>O?(E-=B,B/=2):(w=S,E+=B,x+=M);return S.angle=Y(H),S}(U,O)}},f.util.transformPath=function rt(C,O,E){return E&&(O=f.util.multiplyTransformMatrices(O,[1,0,0,1,-E.x,-E.y])),C.map(function(x){for(var U=x.slice(0),w={},S=1;S<x.length-1;S+=2)w.x=x[S],w.y=x[S+1],w=f.util.transformPoint(w,O),U[S]=w.x,U[S+1]=w.y;return U})}}(),function(){var c=Array.prototype.slice;function i(t,s,a){if(t&&0!==t.length){var n=t.length-1,l=s?t[n][s]:t[n];if(s)for(;n--;)a(t[n][s],l)&&(l=t[n][s]);else for(;n--;)a(t[n],l)&&(l=t[n]);return l}}f.util.array={fill:function e(t,s){for(var a=t.length;a--;)t[a]=s;return t},invoke:function r(t,s){for(var a=c.call(arguments,2),n=[],l=0,u=t.length;l<u;l++)n[l]=a.length?t[l][s].apply(t[l],a):t[l][s].call(t[l]);return n},min:function h(t,s){return i(t,s,function(a,n){return a<n})},max:function o(t,s){return i(t,s,function(a,n){return a>=n})}}}(),function(){function c(o,h,e){if(e)if(!f.isLikelyNode&&h instanceof Element)o=h;else if(h instanceof Array){o=[];for(var i=0,t=h.length;i<t;i++)o[i]=c({},h[i],e)}else if(h&&"object"==typeof h)for(var s in h)"canvas"===s||"group"===s?o[s]=null:h.hasOwnProperty(s)&&(o[s]=c({},h[s],e));else o=h;else for(var s in h)o[s]=h[s];return o}f.util.object={extend:c,clone:function r(o,h){return c({},o,h)}},f.util.object.extend(f.util,f.Observable)}(),function(){function e(i,t){var s=i.charCodeAt(t);if(isNaN(s))return"";if(s<55296||s>57343)return i.charAt(t);if(55296<=s&&s<=56319){if(i.length<=t+1)throw"High surrogate without following low surrogate";var a=i.charCodeAt(t+1);if(56320>a||a>57343)throw"High surrogate without following low surrogate";return i.charAt(t)+i.charAt(t+1)}if(0===t)throw"Low surrogate without preceding high surrogate";var n=i.charCodeAt(t-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}f.util.string={camelize:function c(i){return i.replace(/-+(.)?/g,function(t,s){return s?s.toUpperCase():""})},capitalize:function r(i,t){return i.charAt(0).toUpperCase()+(t?i.slice(1):i.slice(1).toLowerCase())},escapeXml:function o(i){return i.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},graphemeSplit:function h(i){var s,t=0,a=[];for(t=0;t<i.length;t++)!1!==(s=e(i,t))&&a.push(s);return a}}}(),function(){var c=Array.prototype.slice,r=function(){},o=function(){for(var s in{toString:1})if("toString"===s)return!1;return!0}(),h=function(s,a,n){for(var l in a)s.prototype[l]=l in s.prototype&&"function"==typeof s.prototype[l]&&(a[l]+"").indexOf("callSuper")>-1?function(u){return function(){var d=this.constructor.superclass;this.constructor.superclass=n;var g=a[u].apply(this,arguments);if(this.constructor.superclass=d,"initialize"!==u)return g}}(l):a[l],o&&(a.toString!==Object.prototype.toString&&(s.prototype.toString=a.toString),a.valueOf!==Object.prototype.valueOf&&(s.prototype.valueOf=a.valueOf))};function e(){}function i(s){for(var a=null,n=this;n.constructor.superclass;){var l=n.constructor.superclass.prototype[s];if(n[s]!==l){a=l;break}n=n.constructor.superclass.prototype}return a?arguments.length>
11?a.apply(this,c.call(arguments,1)):a.call(this):console.log("tried to callSuper "+s+", method not found in prototype chain",this)}f.util.createClass=function t(){var s=null,a=c.call(arguments,0);function n(){this.initialize.apply(this,arguments)}"function"==typeof a[0]&&(s=a.shift()),n.superclass=s,n.subclasses=[],s&&(e.prototype=s.prototype,n.prototype=new e,s.subclasses.push(n));for(var l=0,u=a.length;l<u;l++)h(n,a[l],s);return n.prototype.initialize||(n.prototype.initialize=r),n.prototype.constructor=n,n.prototype.callSuper=i,n}}(),function(){var c=!!f.document.createElement("div").attachEvent,r=["touchstart","touchmove","touchend"];f.util.addListener=function(h,e,i,t){h&&h.addEventListener(e,i,!c&&t)},f.util.removeListener=function(h,e,i,t){h&&h.removeEventListener(e,i,!c&&t)},f.util.getPointer=function(h){var i=f.util.getScrollLeftTop(h.target),t=function o(h){var e=h.changedTouches;return e&&e[0]?e[0]:h}(h);return{x:t.clientX+i.left,y:t.clientY+i.top}},f.util.isTouchEvent=function(h){return r.indexOf(h.type)>-1||"touch"===h.pointerType}}(),function(){var r=f.document.createElement("div"),e=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,i=function(t){return t};"string"==typeof r.style.opacity?i=function(t,s){return t.style.opacity=s,t}:"string"==typeof r.style.filter&&(i=function(t,s){var a=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(a.zoom=1),e.test(a.filter)?a.filter=a.filter.replace(e,s=s>=.9999?"":"alpha(opacity="+100*s+")"):a.filter+=" alpha(opacity="+100*s+")",t}),f.util.setStyle=function c(t,s){var a=t.style;if(!a)return t;if("string"==typeof s)return t.style.cssText+=";"+s,s.indexOf("opacity")>-1?i(t,s.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;
1for(var n in s)"opacity"===n?i(t,s[n]):a.setProperty("float"===n||"cssFloat"===n?void 0===a.styleFloat?"cssFloat":"styleFloat":n,s[n]);return t}}(),function(){var o,n,g,v,c=Array.prototype.slice,h=function(g){return c.call(g,0)};try{o=h(f.document.childNodes)instanceof Array}catch(g){}function e(g,v){var p=f.document.createElement(g);for(var y in v)"class"===y?p.className=v[y]:"for"===y?p.htmlFor=v[y]:p.setAttribute(y,v[y]);return p}function s(g){for(var v=0,p=0,y=f.document.documentElement,m=f.document.body||{scrollLeft:0,scrollTop:0};g&&(g.parentNode||g.host)&&((g=g.parentNode||g.host)===f.document?(v=m.scrollLeft||y.scrollLeft||0,p=m.scrollTop||y.scrollTop||0):(v+=g.scrollLeft||0,p+=g.scrollTop||0),1!==g.nodeType||"fixed"!==g.style.position););return{left:v,top:p}}o||(h=function(g){for(var v=new Array(g.length),p=g.length;p--;)v[p]=g[p];return v}),n=f.document.defaultView&&f.document.defaultView.getComputedStyle?function(g,v){var p=f.document.defaultView.getComputedStyle(g,null);return p?p[v]:void 0}:function(g,v){var p=g.style[v];return!p&&g.currentStyle&&(p=g.currentStyle[v]),p},v="userSelect"in(g=f.document.documentElement.style)?"userSelect":"MozUserSelect"in g?"MozUserSelect":"WebkitUserSelect"in g?"WebkitUserSelect":"KhtmlUserSelect"in g?"KhtmlUserSelect":"",f.util.makeElementUnselectable=function p(m){return void 0!==m.onselectstart&&(m.onselectstart=f.util.falseFunction),v?m.style[v]="none":"string"==typeof m.unselectable&&(m.unselectable="on"),m},f.util.makeElementSelectable=function y(m){return void 0!==m.onselectstart&&(m.onselectstart=null),v?m.style[v]="":"string"==typeof m.unselectable&&(m.unselectable=""),m},f.util.setImageSmoothing=function d(g,v){g.imageSmoothingEnabled=g.imageSmoothingEnabled||g.webkitImageSmoothingEnabled||g.mozImageSmoothingEnabled||g.msImageSmoothingEnabled||g.oImageSmoothingEnabled,g.imageSmoothingEnabled=v},f.util.getById=function r(g){return"string"==typeof g?f.document.getElementById(g):g},f.util.toArray=h,f.util.addClass=function i(g,v){g&&-1===(" "+g.className+" ").indexOf(" "+v+" ")&&(g.className+=(g.className?" ":"")+v)},f.util.makeElement=e,f.util.wrapElement=function t(g,v,p){return"string"==typeof v&&(v=e(v,p)),g.parentNode&&g.parentNode.replaceChild(v,g),v.appendChild(g),v},f.util.getScrollLeftTop=s,f.util.getElementOffset=function a(g){var v,_,p=g&&g.ownerDocument,y={left:0,top:0},m={left:0,top:0},b={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!p)return m;for(var A in b)m[b[A]]+=parseInt(n(g,A),10)||0;return v=p.documentElement,void 0!==g.getBoundingClientRect&&(y=g.getBoundingClientRect()),_=s(g),{left:y.left+_.left-(v.clientLeft||0)+m.left,top:y.top+_.top-(v.clientTop||0)+m.top}},f.util.getNodeCanvas=function l(g){var v=f.jsdomImplForWrapper(g);return v._canvas||v._image},f.util.cleanUpJsdomNode=function u(g){if(f.isLikelyNode){var v=f.jsdomImplForWrapper(g);v&&(v._image=null,v._canvas=null,v._currentSrc=null,v._attributes=null,v._classList=null)}}}(),function(){function r(){}f.util.request=function o(h,e){e||(e={});var i=e.method?e.method.toUpperCase():"GET",t=e.onComplete||function(){},s=new f.window.XMLHttpRequest,a=e.body||e.parameters;return s.onreadystatechange=function(){4===s.readyState&&(t(s),s.onreadystatechange=r)}
1,"GET"===i&&(a=null,"string"==typeof e.parameters&&(h=function c(h,e){return h+(/\?/.test(h)?"&":"?")+e}(h,e.parameters))),s.open(i,h,!0),("POST"===i||"PUT"===i)&&s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(a),s}}(),f.log=console.log,f.warn=console.warn,function(){var c=f.util.object.extend,r=f.util.object.clone,o=[];function h(){return!1}function e(l,u,d,g){return-d*Math.cos(l/g*(Math.PI/2))+d+u}f.util.object.extend(o,{cancelAll:function(){var l=this.splice(0);return l.forEach(function(u){u.cancel()}),l},cancelByCanvas:function(l){if(!l)return[];var u=this.filter(function(d){return"object"==typeof d.target&&d.target.canvas===l});return u.forEach(function(d){d.cancel()}),u},cancelByTarget:function(l){var u=this.findAnimationsByTarget(l);return u.forEach(function(d){d.cancel()}),u},findAnimationIndex:function(l){return this.indexOf(this.findAnimation(l))},findAnimation:function(l){return this.find(function(u){return u.cancel===l})},findAnimationsByTarget:function(l){return l?this.filter(function(u){return u.target===l}):[]}});var t=f.window.requestAnimationFrame||f.window.webkitRequestAnimationFrame||f.window.mozRequestAnimationFrame||f.window.oRequestAnimationFrame||f.window.msRequestAnimationFrame||function(l){return f.window.setTimeout(l,1e3/60)},s=f.window.cancelAnimationFrame||f.window.clearTimeout;function a(){return t.apply(f.window,arguments)}f.util.animate=function i(l){l||(l={});var d,u=!1,g=function(){var v=f.runningAnimations.indexOf(d);return v>-1&&f.runningAnimations.splice(v,1)[0]};return d=c(r(l),{cancel:function(){return u=!0,g()},currentValue:"startValue"in l?l.startValue:0,completionRate:0,durationRate:0}),f.runningAnimations.push(d),a(function(v){var _,p=v||+new Date,y=l.duration||500,m=p+y,b=l.onChange||h,A=l.abort||h,F=l.onComplete||h,L=l.easing||e,W="startValue"in l&&l.startValue.length>0,X="startValue"in l?l.startValue:0,tt="endValue"in l?l.endValue:100,q=l.byValue||(W?X.map(function(rt,C){return tt[C]-X[C]}):tt-X);l.onStart&&l.onStart(),function rt(C){var O=(_=C||+new Date)>m?y:_-p,E=O/y,x=W?X.map(function(w,S){return L(O,X[S],q[S],y)}):L(O,X,q,y),U=Math.abs(W?(x[0]-X[0])/q[0]:(x-X)/q);if(d.currentValue=W?x.slice():x,d.completionRate=U,d.durationRate=E,!u){if(A(x,U,E))return void g();if(_>m)return d.currentValue=W?tt.slice():tt,d.completionRate=1,d.durationRate=1,b(W?tt.slice():tt,1,1),F(tt,1,1),void g();b(x,U,E),a(rt)}}(p)}),d.cancel},f.util.requestAnimFrame=a,f.util.cancelAnimFrame=function n(){return s.apply(f.window,arguments)},f.runningAnimations=o}(),function(){function c(o,h,e){var i="rgba("+parseInt(o[0]+e*(h[0]-o[0]),10)+","+parseInt(o[1]+e*(h[1]-o[1]),10)+","+parseInt(o[2]+e*(h[2]-o[2]),10);return(i+=","+(o&&h?parseFloat(o[3]+e*(h[3]-o[3])):1))+")"}f.util.animateColor=function r(o,h,e,i){var t=new f.Color(o).getSource(),s=new f.Color(h).getSource(),a=i.onComplete,n=i.onChange;return f.util.animate(f.util.object.extend(i=i||{},{duration:e||500,startValue:t,endValue:s,byValue:s,easing:function(l,u,d,g){return c(u,d,i.colorEasing?i.colorEasing(l,g):1-Math.cos(l/g*(Math.PI/2)))},onComplete:function(l,u,d){if(a)return a(c(s,s,0),u,d)},onChange:function(l,u,d){if(n){if(Array.isArray(l))return n(c(l,l,0),u,d);n(l,u,d)}}}))}}(),function(){function c(C,O,E,x){return C<Math.abs(O)?(C=O,x=E/4):x=0===O&&0===C?E/(2*Math.PI)*Math.asin(1):E/(2*Math.PI)*Math.asin(O/C),{a:C,c:O,p:E,s:x}}function r(C,O,E){return C.a*Math.pow(2,10*(O-=1))*Math.sin((O*E-C.s)*(2*Math.PI)/C.p)}function tt(C,O,E,x){return E-q(x-C,0,E,x)+O}function q(C,O,E,x){return(C/=x)<1/2.75?E*(7.5625*C*C)+O:C<2/2.75?E*(7.5625*(C-=1.5/2.75)*C+.75)+O:C<2.5/2.75?E*(7.5625*(C-=2.25/2.75)*C+.9375)+O:E*(7.5625*(C-=2.625/2.75)*C+.984375)+O}f.util.ease={easeInQuad:function(C,O,E,x){return E*(C/=x)*C+O},easeOutQuad:function(C,O,E,x){return-E*(C/=x)*(C-2)+O},easeInOutQuad:function(C,O,E,x){return(C/=x/2)<1?E/2*C*C+O:-E/2*(--C*(C-2)-1)+O},easeInCubic:function(C,O,E,x){return E*(C/=x)*C*C+O},easeOutCubic:function o(C,O,E,x){return E*((C=C/x-1)*C*C+1)+O},easeInOutCubic:function h(C,O,E,x){return(C/=x/2)<1?E/2*C*C*C+O:E/2*((C-=2)*C*C+2)+O},easeInQuart:function e(C,O,E,x){return E*(C/=x)*C*C*C+O}
vendor: 5,979 bytes, line 1
1,easeOutQuart:function i(C,O,E,x){return-E*((C=C/x-1)*C*C*C-1)+O},easeInOutQuart:function t(C,O,E,x){return(C/=x/2)<1?E/2*C*C*C*C+O:-E/2*((C-=2)*C*C*C-2)+O},easeInQuint:function s(C,O,E,x){return E*(C/=x)*C*C*C*C+O},easeOutQuint:function a(C,O,E,x){return E*((C=C/x-1)*C*C*C*C+1)+O},easeInOutQuint:function n(C,O,E,x){return(C/=x/2)<1?E/2*C*C*C*C*C+O:E/2*((C-=2)*C*C*C*C+2)+O},easeInSine:function l(C,O,E,x){return-E*Math.cos(C/x*(Math.PI/2))+E+O},easeOutSine:function u(C,O,E,x){return E*Math.sin(C/x*(Math.PI/2))+O},easeInOutSine:function d(C,O,E,x){return-E/2*(Math.cos(Math.PI*C/x)-1)+O},easeInExpo:function g(C,O,E,x){return 0===C?O:E*Math.pow(2,10*(C/x-1))+O},easeOutExpo:function v(C,O,E,x){return C===x?O+E:E*(1-Math.pow(2,-10*C/x))+O},easeInOutExpo:function p(C,O,E,x){return 0===C?O:C===x?O+E:(C/=x/2)<1?E/2*Math.pow(2,10*(C-1))+O:E/2*(2-Math.pow(2,-10*--C))+O},easeInCirc:function y(C,O,E,x){return-E*(Math.sqrt(1-(C/=x)*C)-1)+O},easeOutCirc:function m(C,O,E,x){return E*Math.sqrt(1-(C=C/x-1)*C)+O},easeInOutCirc:function _(C,O,E,x){return(C/=x/2)<1?-E/2*(Math.sqrt(1-C*C)-1)+O:E/2*(Math.sqrt(1-(C-=2)*C)+1)+O},easeInElastic:function b(C,O,E,x){var w=0;return 0===C?O:1==(C/=x)?O+E:(w||(w=.3*x),-r(c(E,E,w,1.70158),C,x)+O)},easeOutElastic:function A(C,O,E,x){var w=0;if(0===C)return O;if(1==(C/=x))return O+E;w||(w=.3*x);var M=c(E,E,w,1.70158);return M.a*Math.pow(2,-10*C)*Math.sin((C*x-M.s)*(2*Math.PI)/M.p)+M.c+O},easeInOutElastic:function F(C,O,E,x){var w=0;if(0===C)return O;if(2==(C/=x/2))return O+E;w||(w=x*(.3*1.5));var M=c(E,E,w,1.70158);return C<1?-.5*r(M,C,x)+O:M.a*Math.pow(2,-10*(C-=1))*Math.sin((C*x-M.s)*(2*Math.PI)/M.p)*.5+M.c+O},easeInBack:function L(C,O,E,x,U){return void 0===U&&(U=1.70158),E*(C/=x)*C*((U+1)*C-U)+O},easeOutBack:function W(C,O,E,x,U){return void 0===U&&(U=1.70158),E*((C=C/x-1)*C*((U+1)*C+U)+1)+O},easeInOutBack:function X(C,O,E,x,U){return void 0===U&&(U=1.70158),(C/=x/2)<1?E/2*(C*C*((1+(U*=1.525))*C-U))+O:E/2*((C-=2)*C*((1+(U*=1.525))*C+U)+2)+O},easeInBounce:tt,easeOutBounce:q,easeInOutBounce:function rt(C,O,E,x){return C<x/2?.5*tt(2*C,0,E,x)+O:.5*q(2*C-x,0,E,x)+.5*E+O}}}(),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend,h=r.util.object.clone,e=r.util.toFixed,i=r.util.parseUnit,t=r.util.multiplyTransformMatrices,u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform","image-rendering":"imageSmoothing"},d={stroke:"strokeOpacity",fill:"fillOpacity"},g="font-size",v="clip-path";function p(w){return w in u?u[w]:w}function y(w,S,M,B){var H,Y=Array.isArray(S);if("fill"!==w&&"stroke"!==w||"none"!==S){if("strokeUniform"===w)return"non-scaling-stroke"===S;if("strokeDashArray"===w)S="none"===S?null:S.replace(/,/g," ").split(/\s+/).map(parseFloat);else if("transformMatrix"===w)S=M&&M.transformMatrix?t(M.transformMatrix,r.parseTransformAttribute(S)):r.parseTransformAttribute(S);else if("visible"===w)S="none"!==S&&"hidden"!==S,M&&!1===M.visible&&(S=!1);else if("opacity"===w)S=parseFloat(S),M&&void 0!==M.opacity&&(S*=M.opacity);else if("textAnchor"===w)S="start"===S?"left":"end"===S?"right":"center";else if("charSpacing"===w)H=i(S,B)/B*1e3;else if("paintFirst"===w){var V=S.indexOf("fill"),Q=S.indexOf("stroke");S="fill",(V>-1&&Q>-1&&Q<V||-1===V&&Q>-1)&&(S="stroke")}else{if("href"===w||"xlink:href"===w||"font"===w)return S;if("imageSmoothing"===w)return"optimizeQuality"===S;H=Y?S.map(i):i(S,B)}}else S="";return!Y&&isNaN(H)?S:H}function m(w){return new RegExp("^("+w.join("|")+")\\b","i")}function b(w,S){var Y,H,V,B=[];for(H=0,V=S.length;H<V;H++)Y=w.getElementsByTagName(S[H]),B=B.concat(Array.prototype.slice.call(Y));return B}function W(w,S){var M,B=!0;return(M=tt(w,S.pop()))&&S.length&&(B=function X(w,S){for(var M,B=!0;w.parentNode&&1===w.parentNode.nodeType&&S.length;)B&&(M=S.pop()),B=tt(w=w.parentNode,M);return 0===S.length}(w,S)),M&&B&&0===S.length}function tt(w,S){var H,V,M=w.nodeName,B=w.getAttribute("class"),Y=w.getAttribute("id");if(H=new RegExp("^"+M,"i"),S=S.replace(H,""),Y&&S.length&&(H=new RegExp("#"+Y+"(?![a-zA-Z\\-]+)","i"),S=S.replace(H,"")),B&&S.length)for(V=(B=B.split(" ")).length;V--;)H=new RegExp("\\."+B[V]+"(?![a-zA-Z\\-]+)","i"),S=S.replace(H,"");return 0===S.length}function q(w,S){var M;if(w.getElementById&&(M=w.getElementById(S)),M)return M;var B,Y,H,V=w.getElementsByTagName("*");for(Y=0,H=V.length;Y<H;Y++)if(S===(B=V[Y]).getAttribute("id"))return B}r.svgValidTagNamesRegEx=m(["path","circle","polygon","polyline","ellipse","rect","line","image","text"]),r.svgViewBoxElementsRegEx=m(["symbol","image","marker","pattern","view","svg"]),r.svgInvalidAncestorsRegEx=m(["pattern","defs","symbol","metadata","clipPath","mask","desc"]),r.svgValidParentsRegEx=m(["symbol","g","a","svg","clipPath","defs"]),r.cssRules={},r.gradientDefs={},r.clipPaths={},r.parseTransformAttribute=function(){function M(K,st,ot){K[ot]=Math.tan(r.util.degreesToRadians(st[0]))}var Y=r.iMatrix,H=r.reNum,V=r.commaWsp,G="(?:(?:(matrix)\\s*\\(\\s*("+H+")"+V+"("+H+")"+V+"("+H+")"+V+"("+H+")"+V+"("+H+")"+V+"("+H+")\\s*\\))|(?:(translate)\\s*\\(\\s*("+H+")(?:"+V+"("+H+"))?\\s*\\))|(?:(scale)\\s*\\(\\s*("+H+")(?:"+V+"("+H+"))?\\s*\\))|(?:(rotate)\\s*\\(\\s*("+H+")(?:"+V+"("+H+")"+V+"("+H+"))?\\s*\\))|(?:(skewX)\\s*\\(\\s*("+H+")\\s*\\))|(?:(skewY)\\s*\\(\\s*("+H+")\\s*\\)))",at=new RegExp("^\\s*(?:(?
1:"+G+"(?:"+V+"*"+G+")*)?)\\s*$"),nt=new RegExp(G,"g");return function(K){var st=Y.concat(),ot=[];if(!K||K&&!at.test(K))return st;K.replace(nt,function(ut){var ct=new RegExp(G).exec(ut).filter(function(mt){return!!mt}),dt=ct[1],ft=ct.slice(2).map(parseFloat);switch(dt){case"translate":!function B(K,st){K[4]=st[0],2===st.length&&(K[5]=st[1])}(st,ft);break;case"rotate":ft[0]=r.util.degreesToRadians(ft[0]),function w(K,st){var ot=r.util.cos(st[0]),lt=r.util.sin(st[0]),ut=0,ct=0;3===st.length&&(ut=st[1],ct=st[2]),K[0]=ot,K[1]=lt,K[2]=-lt,K[3]=ot,K[4]=ut-(ot*ut-lt*ct),K[5]=ct-(lt*ut+ot*ct)}(st,ft);break;case"scale":!function S(K,st){var lt=2===st.length?st[1]:st[0];K[0]=st[0],K[3]=lt}(st,ft);break;case"skewX":M(st,ft,2);break;case"skewY":M(st,ft,1);break;case"matrix":st=ft}ot.push(st.concat()),st=Y.concat()});for(var lt=ot[0];ot.length>1;)ot.shift(),lt=r.util.multiplyTransformMatrices(lt,ot[0]);return lt}}();var C=new RegExp("^\\s*("+r.reNum+"+)\\s*,?\\s*("+r.reNum+"+)\\s*,?\\s*("+r.reNum+"+)\\s*,?\\s*("+r.reNum+"+)\\s*$");function O(w){if(!r.svgViewBoxElementsRegEx.test(w.nodeName))return{};var Y,H,V,Q,et,z,S=w.getAttribute("viewBox"),M=1,B=1,R=w.getAttribute("width"),J=w.getAttribute("height"),Z=w.getAttribute("x")||0,G=w.getAttribute("y")||0,$=w.getAttribute("preserveAspectRatio")||"",it=!S||!(S=S.match(C)),at=!R||!J||"100%"===R||"100%"===J,nt=it&&at,K={},st="",ot=0,lt=0;if(K.width=0,K.height=0,K.toBeParsed=nt,it&&(Z||G)&&w.parentNode&&"#document"!==w.parentNode.nodeName&&(st=" translate("+i(Z)+" "+i(G)+") ",et=(w.getAttribute("transform")||"")+st,w.setAttribute("transform",et),w.removeAttribute("x"),w.removeAttribute("y")),nt)return K;if(it)return K.width=i(R),K.height=i(J),K;if(Y=-parseFloat(S[1]),H=-parseFloat(S[2]),V=parseFloat(S[3]),Q=parseFloat(S[4]),K.minX=Y,K.minY=H,K.viewBoxWidth=V,K.viewBoxHeight=Q,at?(K.width=V,K.height=Q):(K.width=i(R),K.height=i(J),M=K.width/V,B=K.height/Q),"none"!==($=r.util.parsePreserveAspectRatioAttribute($)).alignX&&("meet"===$.meetOrSlice&&(B=M=M>B?B:M),"slice"===$.meetOrSlice&&(B=M=M>B?M:B),ot=K.width-V*M,lt=K.height-Q*M,"Mid"===$.alignX&&(ot/=2),"Mid"===$.alignY&&(lt/=2),"Min"===$.alignX&&(ot=0),"Min"===$.alignY&&(lt=0)),1===M&&1===B&&0===Y&&0===H&&0===Z&&0===G)return K;if((Z||G)&&"#document"!==w.parentNode.nodeName&&(st=" translate("+i(Z)+" "+i(G)+") "),et=st+" matrix("+M+" 0 0 "+B+" "+(Y*M+ot)+" "+(H*B+lt)+") ","svg"===w.nodeName){for(z=w.ownerDocument.createElementNS(r.svgNS,"g");w.firstChild;)z.appendChild(w.firstChild);w.appendChild(z)}else(z=w).removeAttribute("x"),z.removeAttribute("y"),et=z.getAttribute("transform")+et;return z.setAttribute("transform",et),K}function x(w,S){var B="xlink:href",H=q(w,S.getAttribute(B).slice(1));if(H&&H.getAttribute(B)&&x(w,H),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach(function(Q){H&&!S.hasAttribute(Q)&&H.hasAttribute(Q)&&S.setAttribute(Q,H.getAttribute(Q))}),!S.children.length)for(var V=H.cloneNode(!0);V.firstChild;)S.appendChild(V.firstChild);S.removeAttribute(B)}r.parseSVGDocument=function(w,S,M,B){if(w){!function rt(w){for(var S=b(w,["use","svg:use"]),M=0;S.length&&M<S.length;){var B=S[M],Y=B.getAttribute("xlink:href")||B.getAttribute("href");if(null===Y)return;var Z,G,$,it,H=Y.slice(1),V=B.getAttribute("x")||0,Q=B.getAttribute("y")||0,et=q(w,H).cloneNode(!0),z=(et.getAttribute("transform")||"")+" translate("+V+", "+Q+")",J=S.length,at=r.svgNS;if(O(et),/^svg$/i.test(et.nodeName)){var nt=et.ownerDocument.createElementNS(at,"g");for(G=0,it=($=et.attributes).length;G<it;G++)Z=$.item(G),nt.setAttributeNS(at,Z.nodeName,Z.nodeValue);for(;et.firstChild;)nt.appendChild(et.firstChild);et=nt}for(G=0,it=($=B.attributes).length;G<it;G++)"x"!==(Z=$.item(G)).nodeName&&"y"!==Z.nodeName&&"xlink:href"!==Z.nodeName&&"href"!==Z.nodeName&&("transform"===Z.nodeName?z=Z.nodeValue+" "+z:et.setAttribute(Z.nodeName,Z.nodeValue));et.setAttribute("transform",z),et.setAttribute("instantiated_by_use","1"),et.removeAttribute("id"),B.parentNode.replaceChild(et,B),S.length===J&&M++}}(w);var H,V,Y=r.Object.__uid++,Q=O(w),et=r.util.toArray(w.getElementsByTagName("*"));if(Q.crossOrigin=B&&B.crossOrigin,Q.svgUid=Y,0===et.length&&r.isLikelyNode){var z=[];for(H=0,V=(et=w.selectNodes('//*[name(.)!="svg"]')).length;H<V;H++)z[H]=et[H];et=z}var R=et.filter(function(Z){return O(Z),r.svgValidTagNamesRegEx.test(Z.nodeName.replace("svg:",""))&&!function E(w,S){for(;w&&(w=w.parentNode);)if(w.nodeName&&S.test(w.nodeName.replace("svg:",""))&&!w.getAttribute("instantiated_by_use"))return!0;return!1}(Z,r.svgInvalidAncestorsRegEx)});if(!R||R&&!R.length)return void(S&&S([],{}));var J={};et.filter(function(Z){return"clipPath"===Z.nodeName.replace("svg:","")}
1).forEach(function(Z){var G=Z.getAttribute("id");J[G]=r.util.toArray(Z.getElementsByTagName("*")).filter(function($){return r.svgValidTagNamesRegEx.test($.nodeName.replace("svg:",""))})}),r.gradientDefs[Y]=r.getGradientDefs(w),r.cssRules[Y]=r.getCSSRules(w),r.clipPaths[Y]=J,r.parseElements(R,function(Z,G){S&&(S(Z,Q,G,et),delete r.gradientDefs[Y],delete r.cssRules[Y],delete r.clipPaths[Y])},h(Q),M,B)}};var U=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+r.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+r.reNum+"))?\\s+(.*)");o(r,{parseFontDeclaration:function(w,S){var M=w.match(U);if(M){var B=M[1],Y=M[3],H=M[4],V=M[5],Q=M[6];B&&(S.fontStyle=B),Y&&(S.fontWeight=isNaN(parseFloat(Y))?Y:parseFloat(Y)),H&&(S.fontSize=i(H)),Q&&(S.fontFamily=Q),V&&(S.lineHeight="normal"===V?1:V)}},getGradientDefs:function(w){var B,M=b(w,["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"]),Y=0,H={};for(Y=M.length;Y--;)(B=M[Y]).getAttribute("xlink:href")&&x(w,B),H[B.getAttribute("id")]=B;return H},parseAttributes:function(w,S,M){if(w){var B,H,V,Y={};void 0===M&&(M=w.getAttribute("svgUid")),w.parentNode&&r.svgValidParentsRegEx.test(w.parentNode.nodeName)&&(Y=r.parseAttributes(w.parentNode,S,M));var Q=S.reduce(function($,it){return(B=w.getAttribute(it))&&($[it]=B),$},{}),et=o(function L(w,S){var M={};for(var B in r.cssRules[S])if(W(w,B.split(" ")))for(var Y in r.cssRules[S][B])M[Y]=r.cssRules[S][B][Y];return M}(w,M),r.parseStyleAttribute(w));Q=o(Q,et),et[v]&&w.setAttribute(v,et[v]),H=V=Y.fontSize||r.Text.DEFAULT_SVG_FONT_SIZE,Q[g]&&(Q[g]=H=i(Q[g],V));var z,R,J={};for(var Z in Q)R=y(z=p(Z),Q[Z],Y,H),J[z]=R;J&&J.font&&r.parseFontDeclaration(J.font,J);var G=o(Y,J);return r.svgValidParentsRegEx.test(w.nodeName)?G:function _(w){for(var S in d)if(void 0!==w[d[S]]&&""!==w[S]){if(void 0===w[S]){if(!r.Object.prototype[S])continue;w[S]=r.Object.prototype[S]}if(0!==w[S].indexOf("url(")){var M=new r.Color(w[S]);w[S]=M.setAlpha(e(M.getAlpha()*w[d[S]],2)).toRgba()}}return w}(G)}},parseElements:function(w,S,M,B,Y){new r.ElementsParser(w,S,M,B,Y).parse()},parseStyleAttribute:function(w){var S={},M=w.getAttribute("style");return M&&("string"==typeof M?function A(w,S){var M,B;w.replace(/;\s*$/,"").split(";").forEach(function(Y){var H=Y.split(":");M=H[0].trim().toLowerCase(),B=H[1].trim(),S[M]=B})}(M,S):function F(w,S){for(var Y in w)void 0!==w[Y]&&(S[Y.toLowerCase()]=w[Y])}(M,S)),S},parsePointsAttribute:function(w){if(!w)return null;var M,B,S=[];for(M=0,B=(w=(w=w.replace(/,/g," ").trim()).split(/\s+/)).length;M<B;M+=2)S.push({x:parseFloat(w[M]),y:parseFloat(w[M+1])});return S},getCSSRules:function(w){var M,B,S=w.getElementsByTagName("style"),Y={};for(M=0,B=S.length;M<B;M++){var V=S[M].textContent;""!==(V=V.replace(/\/\*[\s\S]*?\*\//g,"")).trim()&&V.split("}").filter(function(Q){return Q.trim()}).forEach(function(Q){var et=Q.split("{"),z={},J=et[1].trim().split(";").filter(function(it){return it.trim()});for(M=0,B=J.length;M<B;M++){var Z=J[M].split(":"),G=Z[0].trim(),$=Z[1].trim();z[G]=$}(Q=et[0].trim()).split(",").forEach(function(it){""!==(it=it.replace(/^svg/i,"").trim())&&(Y[it]?r.util.object.extend(Y[it],z):Y[it]=r.util.object.clone(z))})})}return Y},loadSVGFromURL:function(w,S,M,B){w=w.replace(/^\n\s*/,"").trim(),new r.util.request(w,{method:"get",onComplete:function Y(H){var V=H.responseXML;if(!V||!V.documentElement)return S&&S(null),!1;r.parseSVGDocument(V.documentElement,function(Q,et,z,R){S&&S(Q,et,z,R)},M,B)}})},loadSVGFromString:function(w,S,M,B){var H=(new r.window.DOMParser).parseFromString(w.trim(),"text/xml");r.parseSVGDocument(H.documentElement,function(V,Q,et,z){S(V,Q,et,z)},M,B)}})}(P),f.ElementsParser=function(c,r,o,h,e,i){this.elements=c,this.callback=r,this.options=o,this.reviver=h,this.svgUid=o&&o.svgUid||0,this.parsingOptions=e,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=i},function(c){c.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},c.createObjects=function(){var r=this;
vendor: 10,168 bytes, line 1
1this.elements.forEach(function(o,h){o.setAttribute("svgUid",r.svgUid),r.createObject(o,h)})},c.findTag=function(r){return f[f.util.string.capitalize(r.tagName.replace("svg:",""))]},c.createObject=function(r,o){var h=this.findTag(r);if(h&&h.fromElement)try{h.fromElement(r,this.createCallback(o,r),this.options)}catch(e){f.log(e)}else this.checkIfDone()},c.createCallback=function(r,o){var h=this;return function(e){var i;h.resolveGradient(e,o,"fill"),h.resolveGradient(e,o,"stroke"),e instanceof f.Image&&e._originalElement&&(i=e.parsePreserveAspectRatioAttribute(o)),e._removeTransformMatrix(i),h.resolveClipPath(e,o),h.reviver&&h.reviver(o,e),h.instances[r]=e,h.checkIfDone()}},c.extractPropertyDefinition=function(r,o,h){var e=r[o],i=this.regexUrl;if(i.test(e)){i.lastIndex=0;var t=i.exec(e)[1];return i.lastIndex=0,f[h][this.svgUid][t]}},c.resolveGradient=function(r,o,h){var e=this.extractPropertyDefinition(r,h,"gradientDefs");if(e){var i=o.getAttribute(h+"-opacity"),t=f.Gradient.fromElement(e,r,i,this.options);r.set(h,t)}},c.createClipPathCallback=function(r,o){return function(h){h._removeTransformMatrix(),h.fillRule=h.clipRule,o.push(h)}},c.resolveClipPath=function(r,o){var e,t,s,a,h=this.extractPropertyDefinition(r,"clipPath","clipPaths");if(h){s=[],t=f.util.invertTransform(r.calcTransformMatrix());for(var l=h[0].parentNode,u=o;u.parentNode&&u.getAttribute("clip-path")!==r.clipPath;)u=u.parentNode;u.parentNode.appendChild(l);for(var d=0;d<h.length;d++)this.findTag(e=h[d]).fromElement(e,this.createClipPathCallback(r,s),this.options);h=1===s.length?s[0]:new f.Group(s),a=f.util.multiplyTransformMatrices(t,h.calcTransformMatrix()),h.clipPath&&this.resolveClipPath(h,u);var n=f.util.qrDecompose(a);h.flipX=!1,h.flipY=!1,h.set("scaleX",n.scaleX),h.set("scaleY",n.scaleY),h.angle=n.angle,h.skewX=n.skewX,h.skewY=0,h.setPositionByOrigin({x:n.translateX,y:n.translateY},"center","center"),r.clipPath=h}else delete r.clipPath},c.checkIfDone=function(){0==--this.numElements&&(this.instances=this.instances.filter(function(r){return null!=r}),this.callback(this.instances,this.elements))}}(f.ElementsParser.prototype),function(c){"use strict";var r=c.fabric||(c.fabric={});function o(h,e){this.x=h,this.y=e}r.Point?r.warn("fabric.Point is already defined"):(r.Point=o,o.prototype={type:"point",constructor:o,add:function(h){return new o(this.x+h.x,this.y+h.y)},addEquals:function(h){return this.x+=h.x,this.y+=h.y,this},scalarAdd:function(h){return new o(this.x+h,this.y+h)},scalarAddEquals:function(h){return this.x+=h,this.y+=h,this},subtract:function(h){return new o(this.x-h.x,this.y-h.y)},subtractEquals:function(h){return this.x-=h.x,this.y-=h.y,this},scalarSubtract:function(h){return new o(this.x-h,this.y-h)},scalarSubtractEquals:function(h){return this.x-=h,this.y-=h,this},multiply:function(h){return new o(this.x*h,this.y*h)},multiplyEquals:function(h){return this.x*=h,this.y*=h,this},divide:function(h){return new o(this.x/h,this.y/h)},divideEquals:function(h){return this.x/=h,this.y/=h,this},eq:function(h){return this.x===h.x&&this.y===h.y},lt:function(h){return this.x<h.x&&this.y<h.y},lte:function(h){return this.x<=h.x&&this.y<=h.y},gt:function(h){return this.x>h.x&&this.y>h.y},gte:function(h){return this.x>=h.x&&this.y>=h.y},lerp:function(h,e){return void 0===e&&(e=.5),e=Math.max(Math.min(1,e),0),new o(this.x+(h.x-this.x)*e,this.y+(h.y-this.y)*e)},distanceFrom:function(h){var e=this.x-h.x,i=this.y-h.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(h){return this.lerp(h)},min:function(h){return new o(Math.min(this.x,h.x),Math.min(this.y,h.y))},max:function(h){return new o(Math.max(this.x,h.x),Math.max(this.y,h.y))},toString:function(){return this.x+","+this.y},setXY:function(h,e){return this.x=h,this.y=e,this},setX:function(h){return this.x=h,this},setY:function(h){return this.y=h,this},setFromPoint:function(h){return this.x=h.x,this.y=h.y,this},swap:function(h){var e=this.x,i=this.y;this.x=h.x,this.y=h.y,h.x=e,h.y=i},clone:function(){return new o(this.x,this.y)}})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={});function o(h){this.status=h,this.points=[]}r.Intersection?r.warn("fabric.Intersection is already defined"):(r.Intersection=o,r.Intersection.prototype={constructor:o,appendPoint:function(h){return this.points.push(h),this},appendPoints:function(h){return this.points=this.points.concat(h),this}},r.Intersection.intersectLineLine=function(h,e,i,t){var s,a=(t.x-i.x)*(h.y-i.y)-(t.y-i.y)*(h.x-i.x),n=(e.x-h.x)*(h.y-i.y)-(e.y-h.y)*(h.x-i.x),l=(t.y-i.y)*(e.x-h.x)-(t.x-i.x)*(e.y-h.y);if(0!==l){var u=a/l,d=n/l;0<=u&&u<=1&&0<=d&&d<=1?(s=new o("Intersection")).appendPoint(new r.Point(h.x+u*(e.x-h.x),h.y+u*(e.y-h.y))):s=new o}else s=new o(0===a||0===n?"Coincident":"Parallel");return s},r.Intersection.intersectLinePolygon=function(h,e,i){var l,u,t=new o,s=i.length;for(u=0;u<s;u++)l=o.intersectLineLine(h,e,i[u],i[(u+1)%s]),t.appendPoints(l.points);return t.points.length>0&&(t.status="Intersection"),t},r.Intersection.intersectPolygonPolygon=function(h,e){var s,i=new o,t=h.length;for(s=0;s<t;s++){var l=o.intersectLinePolygon(h[s],h[(s+1)%t],e);i.appendPoints(l.points)}return i.points.length>0&&(i.status="Intersection"),i},r.Intersection.intersectPolygonRectangle=function(h,e,i){var t=e.min(i),s=e.max(i),a=new r.Point(s.x,t.y),n=new r.Point(t.x,s.y),l=o.intersectLinePolygon(t,a,h),u=o.intersectLinePolygon(a,s,h),d=o.intersectLinePolygon(s,n,h),g=o.intersectLinePolygon(n,t,h),v=new o;return v.appendPoints(l.points),v.appendPoints(u.points),v.appendPoints(d.points),v.appendPoints(g.points),v.points.length>0&&(v.status="Intersection"),v})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={});function o(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function h(e,i,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?e+6*(i-e)*t:t<.5?i:t<2/3?e+(i-e)*(2/3-t)*6:e}r.Color?r.warn("fabric.Color is already defined."):(r.Color=o,r.Color.prototype={_tryParsingColor:function(e){var i;e in o.colorNameMap&&(e=o.colorNameMap[e]),"transparent"===e&&(i=[255,255,255,0]),i||(i=o.sourceFromHex(e)),i||(i=o.sourceFromRgb(e)),i||(i=o.sourceFromHsl(e)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(e,i,t){var s,a,n,l=r.util.array.max([e/=255,i/=255,t/=255]),u=r.util.array.min([e,i,t]);if(n=(l+u)/2,l===u)s=a=0;else{var d=l-u;switch(a=n>.5?d/(2-l-u):d/(l+u),l){case e:s=(i-t)/d+(i<t?6:0);break;case i:s=(t-e)/d+2;break;case t:s=(e-i)/d+4}s/=6}return[Math.round(360*s),Math.round(100*a),Math.round(100*n)]},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHsl:function(){var e=this.getSource(),i=this._rgbToHsl(e[0],e[1],e[2]);return"hsl("+i[0]+","+i[1]+"%,"+i[2]+"%)"},toHsla:function(){var e=this.getSource(),i=this._rgbToHsl(e[0],e[1],e[2]);return"hsla("+i[0]+","+i[1]+"%,"+i[2]+"%,"+e[3]+")"},toHex:function(){var i,t,s,e=this.getSource();return i=1===(i=e[0].toString(16)).length?"0"+i:i,t=1===(t=e[1].toString(16)).length?"0"+t:t,s=1===(s=e[2].toString(16)).length?"0"+s:s,i.toUpperCase()+t.toUpperCase()+s.toUpperCase()},toHexa:function(){var i,e=this.getSource();return i=1===(i=(i=Math.round(255*e[3])).toString(16)).length?"0"+i:i,this.toHex()+i.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var i=this.getSource();return i[3]=e,this.setSource(i),this},toGrayscale:function(){var e=this.getSource(),i=parseInt((.3*e[0]+.59*e[1]+.11*e[2]).toFixed(0),10);return this.setSource([i,i,i,e[3]]),this},toBlackWhite:function(e){var i=this.getSource(),t=(.3*i[0]+.59*i[1]+.11*i[2]).toFixed(0),s=i[3];return e=e||127,t=Number(t)<Number(e)?0:255,this.setSource([t,t,t,s]),this},overlayWith:function(e){e instanceof o||(e=new o(e));var l,i=[],t=this.getAlpha(),a=this.getSource(),n=e.getSource();for(l=0;l<3;l++)i.push(Math.round(.5*a[l]+.5*n[l]));return i[3]=t,this.setSource(i),this}},r.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,r.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,r.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,r.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA5
15D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},r.Color.fromRgb=function(e){return o.fromSource(o.sourceFromRgb(e))},r.Color.sourceFromRgb=function(e){var i=e.match(o.reRGBa);if(i){var t=parseInt(i[1],10)/(/%$/.test(i[1])?100:1)*(/%$/.test(i[1])?255:1),s=parseInt(i[2],10)/(/%$/.test(i[2])?100:1)*(/%$/.test(i[2])?255:1),a=parseInt(i[3],10)/(/%$/.test(i[3])?100:1)*(/%$/.test(i[3])?255:1);return[parseInt(t,10),parseInt(s,10),parseInt(a,10),i[4]?parseFloat(i[4]):1]}},r.Color.fromRgba=o.fromRgb,r.Color.fromHsl=function(e){return o.fromSource(o.sourceFromHsl(e))},r.Color.sourceFromHsl=function(e){var i=e.match(o.reHSLa);if(i){var n,l,u,t=(parseFloat(i[1])%360+360)%360/360,s=parseFloat(i[2])/(/%$/.test(i[2])?100:1),a=parseFloat(i[3])/(/%$/.test(i[3])?100:1);if(0===s)n=l=u=a;else{var d=a<=.5?a*(s+1):a+s-a*s,g=2*a-d;n=h(g,d,t+1/3),l=h(g,d,t),u=h(g,d,t-1/3)}return[Math.round(255*n),Math.round(255*l),Math.round(255*u),i[4]?parseFloat(i[4]):1]}},r.Color.fromHsla=o.fromHsl,r.Color.fromHex=function(e){return o.fromSource(o.sourceFromHex(e))},r.Color.sourceFromHex=function(e){if(e.match(o.reHex)){var i=e.slice(e.indexOf("#")+1),t=3===i.length||4===i.length,s=8===i.length||4===i.length,a=t?i.charAt(0)+i.charAt(0):i.substring(0,2),n=t?i.charAt(1)+i.charAt(1):i.substring(2,4),l=t?i.charAt(2)+i.charAt(2):i.substring(4,6),u=s?t?i.charAt(3)+i.charAt(3):i.substring(6,8):"FF";return[parseInt(a,16),parseInt(n,16),parseInt(l,16),parseFloat((parseInt(u,16)/255).toFixed(2))]}},r.Color.fromSource=function(e){var i=new o;return i.setSource(e),i})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=["e","se","s","sw","w","nw","n","ne","e"],h=["ns","nesw","ew","nwse"],e={},i="left",t="top",s="right",a="bottom",n="center",l={top:a,bottom:t,left:s,right:i,center:n},u=r.util.radiansToDegrees,d=Math.sign||function(z){return(z>0)-(z<0)||+z};function g(z,R){var J=z.angle+u(Math.atan2(R.y,R.x))+360;return Math.round(J%360/45)}function v(z,R){var J=R.transform.target,Z=J.canvas,G=r.util.object.clone(R);G.target=J,Z&&Z.fire("object:"+z,G),J.fire(z,R)}function p(z,R){var J=R.canvas,G=z[J.uniScaleKey];return J.uniformScaling&&!G||!J.uniformScaling&&G}function y(z){return z.originX===n&&z.originY===n}function m(z,R,J){var Z=z.lockScalingX,G=z.lockScalingY;return!!(Z&&G||!R&&(Z||G)&&J||Z&&"x"===R||G&&"y"===R)}function W(z,R,J,Z){return{e:z,transform:R,pointer:{x:J,y:Z}}}function X(z){return function(R,J,Z,G){var $=J.target,it=$.getCenterPoint(),at=$.translateToOriginPoint(it,J.originX,J.originY),nt=z(R,J,Z,G);return $.setPositionByOrigin(at,J.originX,J.originY),nt}}function tt(z,R){return function(J,Z,G,$){var it=R(J,Z,G,$);return it&&v(z,W(J,Z,G,$)),it}}function q(z,R,J,Z,G){var $=z.target,it=$.controls[z.corner],at=$.canvas.getZoom(),nt=$.padding/at,K=$.toLocalPoint(new r.Point(Z,G),R,J);return K.x>=nt&&(K.x-=nt),K.x<=-nt&&(K.x+=nt),K.y>=nt&&(K.y-=nt),K.y<=nt&&(K.y+=nt),K.x-=it.offsetX,K.y-=it.offsetY,K}function rt(z){return z.flipX!==z.flipY}function C(z,R,J,Z,G){if(0!==z[R]){var $=z._getTransformedDimensions()[Z];z.set(J,G/$*z[J])}}function O(z,R,J,Z){var K,G=R.target,$=G._getTransformedDimensions(0,G.skewY),it=q(R,R.originX,R.originY,J,Z),at=Math.abs(2*it.x)-$.x,nt=G.skewX;
vendor: 28,660 bytes, line 1
1at<2?K=0:(K=u(Math.atan2(at/G.scaleX,$.y/G.scaleY)),R.originX===i&&R.originY===a&&(K=-K),R.originX===s&&R.originY===t&&(K=-K),rt(G)&&(K=-K));var st=nt!==K;if(st){var ot=G._getTransformedDimensions().y;G.set("skewX",K),C(G,"skewY","scaleY","y",ot)}return st}function E(z,R,J,Z){var K,G=R.target,$=G._getTransformedDimensions(G.skewX,0),it=q(R,R.originX,R.originY,J,Z),at=Math.abs(2*it.y)-$.y,nt=G.skewY;at<2?K=0:(K=u(Math.atan2(at/G.scaleY,$.x/G.scaleX)),R.originX===i&&R.originY===a&&(K=-K),R.originX===s&&R.originY===t&&(K=-K),rt(G)&&(K=-K));var st=nt!==K;if(st){var ot=G._getTransformedDimensions().x;G.set("skewY",K),C(G,"skewX","scaleX","x",ot)}return st}function S(z,R,J,Z,G){var K,st,ot,lt,dt,ft,$=R.target,it=$.lockScalingX,at=$.lockScalingY,nt=(G=G||{}).by,ut=p(z,$),ct=m($,nt,ut),mt=R.gestureScale;if(ct)return!1;if(mt)st=R.scaleX*mt,ot=R.scaleY*mt;else{if(K=q(R,R.originX,R.originY,J,Z),dt="y"!==nt?d(K.x):1,ft="x"!==nt?d(K.y):1,R.signX||(R.signX=dt),R.signY||(R.signY=ft),$.lockScalingFlip&&(R.signX!==dt||R.signY!==ft))return!1;if(lt=$._getTransformedDimensions(),ut&&!nt){var vt=Math.abs(K.x)+Math.abs(K.y),gt=R.original,pt=vt/(Math.abs(lt.x*gt.scaleX/$.scaleX)+Math.abs(lt.y*gt.scaleY/$.scaleY));st=gt.scaleX*pt,ot=gt.scaleY*pt}else st=Math.abs(K.x*$.scaleX/lt.x),ot=Math.abs(K.y*$.scaleY/lt.y);y(R)&&(st*=2,ot*=2),R.signX!==dt&&"y"!==nt&&(R.originX=l[R.originX],st*=-1,R.signX=dt),R.signY!==ft&&"x"!==nt&&(R.originY=l[R.originY],ot*=-1,R.signY=ft)}var yt=$.scaleX,Ct=$.scaleY;return nt?("x"===nt&&$.set("scaleX",st),"y"===nt&&$.set("scaleY",ot)):(!it&&$.set("scaleX",st),!at&&$.set("scaleY",ot)),yt!==$.scaleX||Ct!==$.scaleY}e.scaleCursorStyleHandler=function _(z,R,J){var G=p(z,J),$="";if(0!==R.x&&0===R.y?$="x":0===R.x&&0!==R.y&&($="y"),m(J,$,G))return"not-allowed";var it=g(J,R);return o[it]+"-resize"},e.skewCursorStyleHandler=function b(z,R,J){if(0!==R.x&&J.lockSkewingY||0!==R.y&&J.lockSkewingX)return"not-allowed";var G=g(J,R)%4;return h[G]+"-resize"},e.scaleSkewCursorStyleHandler=function A(z,R,J){return z[J.canvas.altActionKey]?e.skewCursorStyleHandler(z,R,J):e.scaleCursorStyleHandler(z,R,J)},e.rotationWithSnapping=tt("rotating",X(function w(z,R,J,Z){var G=R,$=G.target,it=$.translateToOriginPoint($.getCenterPoint(),G.originX,G.originY);if($.lockRotation)return!1;var st,at=Math.atan2(G.ey-it.y,G.ex-it.x),nt=Math.atan2(Z-it.y,J-it.x),K=u(nt-at+G.theta);if($.snapAngle>0){var ot=$.snapAngle,lt=$.snapThreshold||ot,ut=Math.ceil(K/ot)*ot,ct=Math.floor(K/ot)*ot;Math.abs(K-ct)<lt?K=ct:Math.abs(K-ut)<lt&&(K=ut)}return K<0&&(K=360+K),st=$.angle!==(K%=360),$.angle=K,st})),e.scalingEqually=tt("scaling",X(function M(z,R,J,Z){return S(z,R,J,Z)})),e.scalingX=tt("scaling",X(function B(z,R,J,Z){return S(z,R,J,Z,{by:"x"})})),e.scalingY=tt("scaling",X(function Y(z,R,J,Z){return S(z,R,J,Z,{by:"y"})})),e.scalingYOrSkewingX=function H(z,R,J,Z){return z[R.target.canvas.altActionKey]?e.skewHandlerX(z,R,J,Z):e.scalingY(z,R,J,Z)},e.scalingXOrSkewingY=function V(z,R,J,Z){return z[R.target.canvas.altActionKey]?e.skewHandlerY(z,R,J,Z):e.scalingX(z,R,J,Z)},e.changeWidth=tt("resizing",X(function Q(z,R,J,Z){var G=R.target,$=q(R,R.originX,R.originY,J,Z),it=G.strokeWidth/(G.strokeUniform?G.scaleX:1),at=y(R)?2:1,nt=G.width,K=Math.abs($.x*at/G.scaleX)-it;return G.set("width",Math.max(K,0)),nt!==K})),e.skewHandlerX=function x(z,R,J,Z){var it,G=R.target,$=G.skewX,at=R.originY;return!G.lockSkewingX&&(0===$?it=q(R,n,n,J,Z).x>0?i:s:($>0&&(it=at===t?i:s),$<0&&(it=at===t?s:i),rt(G)&&(it=it===i?s:i)),R.originX=it,tt("skewing",X(O))(z,R,J,Z))},e.skewHandlerY=function U(z,R,J,Z){var it,G=R.target,$=G.skewY,at=R.originX;return!G.lockSkewingY&&(0===$?it=q(R,n,n,J,Z).y>0?t:a:($>0&&(it=at===i?t:a),$<0&&(it=at===i?a:t),rt(G)&&(it=it===t?a:t)),R.originY=it,tt("skewing",X(E))(z,R,J,Z))},e.dragHandler=function et(z,R,J,Z){var G=R.target,$=J-R.offsetX,it=Z-R.offsetY,at=!G.get("lockMovementX")&&G.left!==$,nt=!G.get("lockMovementY")&&G.top!==it;return at&&G.set("left",$),nt&&G.set("top",it),(at||nt)&&v("moving",W(z,R,J,Z)),at||nt},e.scaleOrSkewActionName=function F(z,R,J){var Z=z[J.canvas.altActionKey];return 0===R.x?Z?"skewX":"scaleY":0===R.y?Z?"skewY":"scaleX":void 0},e.rotationStyleHandler=function L(z,R,J){return J.lockRotation?"not-allowed":R.cursorStyle},e.fireEvent=v,e.wrapWithFixedAnchor=X,e.wrapWithFireEvent=tt,e.getLocalPoint=q,r.controlsUtils=e}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.degreesToRadians,h=r.controlsUtils;h.renderCircleControl=function e(t,s,a,n,l){n=n||{};var _,u=this.sizeX||n.cornerSize||l.cornerSize,d=this.sizeY||n.cornerSize||l.cornerSize,g=void 0!==n.transparentCorners?n.transparentCorners:l.transparentCorners,v=g?"stroke":"fill",p=!g&&(n.cornerStrokeColor||l.cornerStrokeColor),y=s,m=a;t.save(),t.fillStyle=n.cornerColor||l.cornerColor,t.strokeStyle=n.cornerStrokeColor||l.cornerStrokeColor,u>d?(_=u,t.scale(1,d/u),m=a*u/d):d>u?(_=d,t.scale(u/d,1),y=s*d/u):_=u,t.lineWidth=1,t.beginPath(),t.arc(y,m,_/2,0,2*Math.PI,!1),t[v](),p&&t.stroke(),t.restore()},h.renderSquareControl=function i(t,s,a,n,l){n=n||{};var u=this.sizeX||n.cornerSize||l.cornerSize,d=this.sizeY||n.cornerSize||l.cornerSize,g=void 0!==n.transparentCorners?n.transparentCorners:l.transparentCorners,v=g?"stroke":"fill",p=!g&&(n.cornerStrokeColor||l.cornerStrokeColor),y=u/2,m=d/2;t.save(),t.fillStyle=n.cornerColor||l.cornerColor,t.strokeStyle=n.cornerStrokeColor||l.cornerStrokeColor,t.lineWidth=1,t.translate(s,a),t.rotate(o(l.angle)),t[v+"Rect"](-y,-m,u,d),p&&t.strokeRect(-y,-m,u,d),t.restore()}}(P),function(c){"use strict";var r=c.fabric||(c.fabric={});r.Control=function o(h){for(var e in h)this[e]=h[e]},r.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(h,e){return e.cursorStyle},getActionName:function(h,e){return e.actionName},getVisibility:function(h,e){var i=h._controlsVisibility;return i&&void 0!==i[e]?i[e]:this.visible},setVisibility:function(h){this.visible=h},positionHandler:function(h,e){return r.util.transformPoint({x:this.x*h.x+this.offsetX,y:this.y*h.y+this.offsetY},e)},calcCornerCoords:function(h,e,i,t,s){var a,n,l,u,d=s?this.touchSizeX:this.sizeX,g=s?this.touchSizeY:this.sizeY;if(d&&g&&d!==g){var v=Math.atan2(g,d),p=Math.sqrt(d*d+g*g)/2,y=v-r.util.degreesToRadians(h),m=Math.PI/2-v-r.util.degreesToRadians(h);a=p*r.util.cos(y),n=p*r.util.sin(y),l=p*r.util.cos(m),u=p*r.util.sin(m)}else p=.7071067812*(d&&g?d:e),y=r.util.degreesToRadians(45-h),a=l=p*r.util.cos(y),n=u=p*r.util.sin(y);return{tl:{x:i-u,y:t-l},tr:{x:i+a,y:t-n},bl:{x:i-a,y:t+n},br:{x:i+u,y:t+l}}},render:function(h,e,i,t,s){"circle"===((t=t||{}).cornerStyle||s.cornerStyle)?r.controlsUtils.renderCircleControl.call(this,h,e,i,t,s):r.controlsUtils.renderSquareControl.call(this,h,e,i,t,s)}}}(P),function(){function c(i,t){var n,l,u,d,s=i.getAttribute("style"),a=i.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,s){var g=s.split(/\s*;\s*/);for(""===g[g.length-1]&&g.pop(),d=g.length;d--;){var v=g[d].split(/\s*:\s*/),p=v[0].trim(),y=v[1].trim();"stop-color"===p?n=y:"stop-opacity"===p&&(u=y)}}return n||(n=i.getAttribute("stop-color")||"rgb(0,0,0)"),u||(u=i.getAttribute("stop-opacity")),l=(n=new f.Color(n)).getAlpha(),u=isNaN(parseFloat(u))?1:parseFloat(u),u*=l*t,{offset:a,color:n.toRgb(),opacity:u}}var h=f.util.object.clone;f.Gradient=f.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(i){i||(i={}),i.coords||(i.coords={});var t,s=this;Object.keys(i).forEach(function(a){s[a]=i[a]}),this.id?this.id+="_"+f.Object.__uid++:this.id=f.Object.__uid++,t={x1:i.coords.x1||0,y1:i.coords.y1||0,x2:i.coords.x2||0,y2:i.coords.y2||0},"radial"===this.type&&(t.r1=i.coords.r1||0,t.r2=i.coords.r2||0),this.coords=t,this.colorStops=i.colorStops.slice()},addColorStop:function(i){for(var t in i){var s=new f.Color(i[t]);this.colorStops.push({offset:parseFloat(t),color:s.toRgb(),opacity:s.getAlpha()})}return this},toObject:function(i){var t={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return f.util.populateWithProperties(this,t,i),t},toSVG:function(i,l){var a,n,u,d,s=h(this.coords,!0),g=(l=l||{},h(this.colorStops,!0)),v=s.r1>s.r2,p=this.gradientTransform?this.gradientTransform.concat():f.iMatrix.concat(),y=-this.offsetX,m=-this.offsetY,_=!!l.additionalTransform,b="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(g.sort(function(X,tt){return X.offset-tt.offset}),"objectBoundingBox"===b?(y/=i.width,m/=i.height):(y+=i.width/2,m+=i.height/2),"path"===i.type&&"percentage"!==this.gradientUnits&&(y-=i.pathOffset.x,m-=i.pathOffset.y),p[4]-=y,p[5]-=m,d='id="SVGID_'+this.id+'" gradientUnits="'+b+'"',d+=' gradientTransform="'+(_?l.additionalTransform+" ":"")+f.util.matrixToSVG(p)+'" ',"linear"===this.type?u=["<linearGradient ",d,' x1="',s.x1,'" y1="',s.y1,'" x2="',s.x2,'" y2="',s.y2,'">\n']:"radial"===this.type&&(u=["<radialGradient ",d,' cx="',v?s.x1:s.x2,'" cy="',v?s.y1:s.y2,'" r="',v?s.r1:s.r2,'" fx="',v?s.x2:s.x1,'" fy="',v?s.y2:s.y1,'">\n']),"radial"===this.type){if(v)for((g=g.concat()).reverse(),a=0,n=g.length;a<n;a++)g[a].offset=1-g[a].offset;var A=Math.min(s.r1,s.r2);if(A>0){var L=A/Math.max(s.r1,s.r2);for(a=0,n=g.length;a<n;a++)g[a].offset+=L*(1-g[a].offset)}}for(a=0,n=g.length;a<n;a++){var W=g[a];u.push("<stop ",'offset="',100*W.offset+"%",'" style="stop-color:',W.color,void 0!==W.opacity?";stop-opacity: "+W.opacity:";",'"/>\n')}return u.push("linear"===this.type?"</linearGradient>\n":"</radialGradient>\n"),u.join("")},toLive:function(i){var t,a,n,s=f.util.object.clone(this.coords);if(this.type){for("linear"===this.type?t=i.createLinearGradient(s.x1,s.y1,s.x2,s.y2):"radial"===this.type&&(t=i.createRadialGradient(s.x1,s.y1,s.r1,s.x2,s.y2,s.r2)),a=0,n=this.colorStops.length;a<n;a++){var l=this.colorStops[a].color,u=this.colorStops[a].opacity,d=this.colorStops[a].offset;void 0!==u&&(l=new f.Color(l).setAlpha(u).toRgba()),t.addColorStop(d,l)}return t}}}),f.util.object.extend(f.Gradient,{fromElement:function(i,t,s,a){var n=parseFloat(s)/(/%$/.test(s)?100:1);n=n<0?0:n>1?1:n,isNaN(n)&&(n=1);var u,p,y,b,l=i.getElementsByTagName("stop"),d="userSpaceOnUse"===i.getAttribute("gradientUnits")?"pixels":"percentage",g=i.getAttribute("gradientTransform")||"",v=[],m=0,_=0;for("linearGradient"===i.nodeName||"LINEARGRADIENT"===i.nodeName?(u="linear",p=function r(i){return{x1:i.getAttribute("x1")||0,y1:i.getAttribute("y1")||0,x2:i.getAttribute("x2")||"100%",y2:i.getAttribute("y2")||0}}(i)):(u="radial",p=function o(i){return{x1:i.getAttribute("fx")||i.getAttribute("cx")||"50%",y1:i.getAttribute("fy")||i.getAttribute("cy")||"50%",r1:0,x2:i.getAttribute("cx")||"50%",y2:i.getAttribute("cy")||"50%",r2:i.getAttribute("r")||"50%"}}(i)),y=l.length;y--;)v.push(c(l[y],n));return b=f.parseTransformAttribute(g),function e(i,t,s,a){var n,l;Object.keys(t).forEach(function(u){"Infinity"===(n=t[u])?l=1:"-Infinity"===n?l=0:(l=parseFloat(t[u],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(l*=.01,"pixels"===a&&(("x1"===u||"x2"===u||"r2"===u)&&(l*=s.viewBoxWidth||s.width),("y1"===u||"y2"===u)&&(l*=s.viewBoxHeight||s.height)))),t[u]=l})}(0,p,a,d),"pixels"===d&&(m=-t.left,_=-t.top),new f.Gradient({id:i.getAttribute("id"),type:u,coords:p,colorStops:v,gradientUnits:d,gradientTransform:b,offsetX:m,offsetY:_})}})}(),function(){"use strict";var c=f.util.toFixed;f.Pattern=f.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(r,o){if(r||(r={}),this.id=f.Object.__uid++,this.setOptions(r),!r.source||r.source&&"string"!=typeof r.source)o&&o(this);else{var h=this;this.source=f.util.createImage(),f.util.loadImage(r.source,function(e,i){h.source=e,o&&o(h,i)},null,this.crossOrigin)}},toObject:function(r){var h,e,o=f.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?h=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(h=this.source.toDataURL()),e={type:"pattern",source:h,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:c(this.offsetX,o),offsetY:c(this.offsetY,o),patternTransform:this.patternTransform?this.patternTransform.concat():null},f.util.populateWithProperties(this,e,r),e},toSVG:function(r){var o="function"==typeof this.source?this.source():this.source,h=o.width/r.width,e=o.height/r.height,i=this.offsetX/r.width,t=this.offsetY/r.height,s="";return("repeat-x"===this.repeat||"no-repeat"===this.repeat)&&(e=1,t&&(e+=Math.abs(t))),("repeat-y"===this.repeat||"no-repeat"===this.repeat)&&(h=1,i&&(h+=Math.abs(i))),o.src?s=o.src:o.toDataURL&&(s=o.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+i+'" y="'+t+'" width="'+h+'" height="'+e+'">\n<image x="0" y="0" width="'+o.width+'" height="'+o.height+'" xlink:href="'+s+'"></image>\n</pattern>\n'},setOptions:function(r){for(var o in r)this[o]=r[o]},toLive:function(r){var o=this.source;return o&&(void 0===o.src||o.complete&&0!==o.naturalWidth&&0!==o.naturalHeight)?r.createPattern(o,this.repeat):""}})}(),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.toFixed;r.Shadow?r.warn("fabric.Shadow is already defined."):(r.Shadow=r.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(h){for(var e in"string"==typeof h&&(h=this._parseShadow(h)),h)this[e]=h[e];this.id=r.Object.__uid++},_parseShadow:function(h){var e=h.trim(),i=r.Shadow.reOffsetsAndBlur.exec(e)||[];return{color:(e.replace(r.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(i[1],10)||0,offsetY:parseFloat(i[2],10)||0,blur:parseFloat(i[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(h){var e=40,i=40,t=r.Object.NUM_FRACTION_DIGITS,s=r.util.rotateVector({x:this.offsetX,y:this.offsetY},r.util.degreesToRadians(-h.angle)),n=new r.Color(this.color);return h.width&&h.height&&(e=100*o((Math.abs(s.x)+this.blur)/h.width,t)+20,i=100*o((Math.abs(s.y)+this.blur)/h.height,t)+20),h.flipX&&(s.x*=-1),h.flipY&&(s.y*=-1),'<filter id="SVGID_'+this.id+'" y="-'+i+'%" height="'+(100+2*i)+'%" x="-'+e+'%" width="'+(100+2*e)+'%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="'+o(this.blur?this.blur/2:0,t)+'"></feGaussianBlur>\n\t<feOffset dx="'+o(s.x,t)+'" dy="'+o(s.y,t)+'" result="oBlur" ></feOffset>\n\t<feFlood flood-color="'+n.toRgb()+'" flood-opacity="'+n.getAlpha()+'"/>\n\t<feComposite in2="oBlur" operator="in" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in="SourceGraphic"></feMergeNode>\n\t</feMerge>\n</filter>\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var h={},e=r.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(i){this[i]!==e[i]&&(h[i]=this[i])},this),h}}),r.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(P),function(){"use strict";if(f.StaticCanvas)f.warn("fabric.StaticCanvas is already defined.");else{var c=f.util.object.extend,r=f.util.getElementOffset,o=f.util.removeFromArray,h=f.util.toFixed,e=f.util.transformPoint,i=f.util.invertTransform,t=f.util.getNodeCanvas,s=f.util.createCanvasElement,a=new Error("Could not initialize `canvas` element");f.StaticCanvas=f.util.createClass(f.CommonMethods,{initialize:function(n,l){l||(l={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(n,l)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:f.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(n,l){var u=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(n),this._initOptions(l),this.interactive||this._initRetinaScaling(),l.overlayImage&&this.setOverlayImage(l.overlayImage,u),l.backgroundImage&&this.setBackgroundImage(l.backgroundImage,u),l.backgroundColor&&this.setBackgroundColor(l.backgroundColor,u),l.overlayColor&&this.setOverlayColor(l.overlayColor,u),this.calcOffset()},_isRetinaScaling:function(){return f.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,f.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var n=f.devicePixelRatio;this.__initRetinaScaling(n,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(n,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(n,l,u){l.setAttribute("width",this.width*n),l.setAttribute("height",this.height*n),u.scale(n,n)},calcOffset:function(){return this._offset=r(this.lowerCanvasEl),this},setOverlayImage:function(n,l,u){return this.__setBgOverlayImage("overlayImage",n,l,u)},setBackgroundImage:function(n,l,u){return this.__setBgOverlayImage("backgroundImage",n,l,u)},setOverlayColor:function(n,l){return this.__setBgOverlayColor("overlayColor",n,l)},setBackgroundColor:function(n,l){return this.__setBgOverlayColor("backgroundColor",n,l)},__setBgOverlayImage:function(n,l,u,d){return"string"==typeof l?f.util.loadImage(l,function(g,v){if(g){var p=new f.Image(g,d);this[n]=p,p.canvas=this}u&&u(g,v)},this,d&&d.crossOrigin):(d&&l.setOptions(d),this[n]=l,l&&(l.canvas=this),u&&u(l,!1)),this},__setBgOverlayColor:function(n,l,u){return this[n]=l,this._initGradient(l,n),this._initPattern(l,n,u),this},_createCanvasElement:function(){var n=s();if(!n||(n.style||(n.style={}),void 0===n.getContext))throw a;return n},_initOptions:function(n){var l=this.lowerCanvasEl;this._setOptions(n),this.width=this.width||parseInt(l.width,10)||0,this.height=this.height||parseInt(l.height,10)||0,this.lowerCanvasEl.style&&(l.width=this.width,l.height=this.height,l.style.width=this.width+"px",l.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(n){this.lowerCanvasEl=n&&n.getContext?n:f.util.getById(n)||this._createCanvasElement(),f.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(n,l){return this.setDimensions({width:n},l)},setHeight:function(n,l){return this.setDimensions({height:n},l)},setDimensions:function(n,l){var u;for(var d in l=l||{},n)u=n[d],l.cssOnly||(this._setBackstoreDimension(d,n[d]),u+="px",this.hasLostContext=!0),l.backstoreOnly||this._setCssDimension(d,u);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),l.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(n,l){return this.lowerCanvasEl[n]=l,this.upperCanvasEl&&(this.upperCanvasEl[n]=l),this.cacheCanvasEl&&(this.cacheCanvasEl[n]=l),this[n]=l,this},_setCssDimension:function(n,l){return this.lowerCanvasEl.style[n]=l,this.upperCanvasEl&&(this.upperCanvasEl.style[n]=l),this.wrapperEl&&(this.wrapperEl.style[n]=l),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(n){var g,v,p,l=this._activeObject,u=this.backgroundImage,d=this.overlayImage;for(this.viewportTransform=n,v=0,p=this._objects.length;v<p;v++)(g=this._objects[v]).group||g.setCoords(!0);return l&&l.setCoords(),u&&u.setCoords(!0),d&&d.setCoords(!0),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(n,l){var u=n,d=this.viewportTransform.slice(0);n=e(n,i(this.viewportTransform)),d[0]=l,d[3]=l;var g=e(n,d);return d[4]+=u.x-g.x,d[5]+=u.y-g.y,this.setViewportTransform(d)},setZoom:function(n){return this.zoomToPoint(new f.Point(0,0),n),this},absolutePan:function(n){var l=this.viewportTransform.slice(0);return l[4]=-n.x,l[5]=-n.y,this.setViewportTransform(l)},relativePan:function(n){return this.absolutePan(new f.Point(-n.x-this.viewportTransform[4],-n.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(n){this.stateful&&n.setupState(),n._set("canvas",this),n.setCoords(),this.fire("object:added",{target:n}),n.fire("added")},_onObjectRemoved:function(n){this.fire("object:removed",{target:n}),n.fire("removed"),delete n.canvas},clearContext:function(n){return n.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this.remove.apply(this,this.getObjects()),this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){return this.renderCanvas(this.contextContainer,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=f.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var n={},l=this.width,u=this.height,d=i(this.viewportTransform);return n.tl=e({x:0,y:0},d),n.br=e({x:l,y:u},d),n.tr=new f.Point(n.br.x,n.tl.y),n.bl=new f.Point(n.tl.x,n.br.y),this.vptCoords=n,n},cancelRequestedRender:function(){this.isRendering&&(f.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(n,l){var u=this.viewportTransform,d=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(n),f.util.setImageSmoothing(n,this.imageSmoothingEnabled),this.fire("before:render",{ctx:n}),this._renderBackground(n),n.save(),n.transform(u[0],u[1],u[2],u[3],u[4],u[5]),this._renderObjects(n,l),n.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(n),d&&(d.canvas=this,d.shouldCache(),d._transformDone=!0,d.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(n)),this._renderOverlay(n),this.controlsAboveOverlay&&this.interactive&&this.drawControls(n),this.fire("after:render",{ctx:n})},drawClipPathOnCanvas:function(n){var l=this.viewportTransform,u=this.clipPath;n.save(),n.transform(l[0],l[1],l[2],l[3],l[4],l[5]),n.globalCompositeOperation="destination-in",u.transform(n),n.scale(1/u.zoomX,1/u.zoomY),n.drawImage(u._cacheCanvas,-u.cacheTranslationX,-u.cacheTranslationY),n.restore()},_renderObjects:function(n,l){var u,d;for(u=0,d=l.length;u<d;++u)l[u]&&l[u].render(n)},_renderBackgroundOrOverlay:function(n,l){var u=this[l+"Color"],d=this[l+"Image"],g=this.viewportTransform,v=this[l+"Vpt"];if(u||d){if(u){n.save(),n.beginPath(),n.moveTo(0,0),n.lineTo(this.width,0),n.lineTo(this.width,this.height),n.lineTo(0,this.height),n.closePath(),n.fillStyle=u.toLive?u.toLive(n,this):u,v&&n.transform(g[0],g[1],g[2],g[3],g[4],g[5]),n.transform(1,0,0,1,u.offsetX||0,u.offsetY||0);var p=u.gradientTransform||u.patternTransform;p&&n.transform(p[0],p[1],p[2],p[3],p[4],p[5]),n.fill(),n.restore()}if(d){n.save();var y=this.skipOffscreen;this.skipOffscreen=v,v&&n.transform(g[0],g[1],g[2],g[3],g[4],g[5]),d.render(n),this.skipOffscreen=y,n.restore()}}},_renderBackground:function(n){this._renderBackgroundOrOverlay(n,"background")},_renderOverlay:function(n){this._renderBackgroundOrOverlay(n,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},getCenterPoint:function(){return new f.Point(this.width/2,this.height/2)},centerObjectH:function(n){return this._centerObject(n,new f.Point(this.getCenterPoint().x,n.getCenterPoint().y))},centerObjectV:function(n){return this._centerObject(n,new f.Point(n.getCenterPoint().x,this.getCenterPoint().y))},centerObject:function(n){var l=this.getCenterPoint();return this._centerObject(n,l)},viewportCenterObject:function(n){var l=this.getVpCenter();return this._centerObject(n,l)},viewportCenterObjectH:function(n){var l=this.getVpCenter();return this._centerObject(n,new f.Point(l.x,n.getCenterPoint().y)),this},viewportCenterObjectV:function(n){var l=this.getVpCenter();return this._centerObject(n,new f.Point(n.getCenterPoint().x,l.y))},getVpCenter:function(){var n=this.getCenterPoint(),l=i(this.viewportTransform);return e(n,l)},_centerObject:function(n,l){return n.setPositionByOrigin(l,"center","center"),n.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(n){return this.toDatalessObject(n)},toObject:function(n){return this._toObjectMethod("toObject",n)},toDatalessObject:function(n){return this._toObjectMethod("toDatalessObject",n)},_toObjectMethod:function(n,l){var u=this.clipPath,d={version:f.version,objects:this._toObjects(n,l)};return u&&!u.excludeFromExport&&(d.clipPath=this._toObject(this.clipPath,n,l)),c(d,this.__serializeBgOverlay(n,l)),f.util.populateWithProperties(this,d,l),d},_toObjects:function(n,l){return this._objects.filter(function(u){return!u.excludeFromExport}).map(function(u){return this._toObject(u,n,l)},this)},_toObject:function(n,l,u){var d;this.includeDefaultValues||(d=n.includeDefaultValues,n.includeDefaultValues=!1);var g=n[l](u);return this.includeDefaultValues||(n.includeDefaultValues=d),g},__serializeBgOverlay:function(n,l){var u={},d=this.backgroundImage,g=this.overlayImage,v=this.backgroundColor,p=this.overlayColor;return v&&v.toObject?v.excludeFromExport||(u.background=v.toObject(l)):v&&(u.background=v),p&&p.toObject?p.excludeFromExport||(u.overlay=p.toObject(l)):p&&(u.overlay=p),d&&!d.excludeFromExport&&(u.backgroundImage=this._toObject(d,n,l)),g&&!g.excludeFromExport&&(u.overlayImage=this._toObject(g,n,l)),u},svgViewportTransformation:!0,toSVG:function(n,l){n||(n={}),n.reviver=l;var u=[];return this._setSVGPreamble(u,n),this._setSVGHeader(u,n),this.clipPath&&u.push('<g clip-path="url(#'+this.clipPath.clipPathId+')" >\n'),this._setSVGBgOverlayColor(u,"background"),this._setSVGBgOverlayImage(u,"backgroundImage",l),this._setSVGObjects(u,l),this.clipPath&&u.push("</g>\n"),this._setSVGBgOverlayColor(u,"overlay"),this._setSVGBgOverlayImage(u,"overlayImage",l),u.push("</svg>"),u.join("")},_setSVGPreamble:function(n,l){l.suppressPreamble||n.push('<?xml version="1.0" encoding="',l.encoding||"UTF-8",'" standalone="no" ?>\n','<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ','"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n')},_setSVGHeader:function(n,l){var g,u=l.width||this.width,d=l.height||this.height,v='viewBox="0 0 '+this.width+" "+this.height+'" ',p=f.Object.NUM_FRACTION_DIGITS;l.viewBox?v='viewBox="'+l.viewBox.x+" "+l.viewBox.y+" "+l.viewBox.width+" "+l.viewBox.height+'" ':this.svgViewportTransformation&&(v='viewBox="'+h(-(g=this.viewportTransform)[4]/g[0],p)+" "+h(-g[5]/g[3],p)+" "+h(this.width/g[0],p)+" "+h(this.height/g[3],p)+'" '),n.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',u,'" ','height="',d,'" ',v,'xml:space="preserve">\n',"<desc>Created with Fabric.js ",f.version,"</desc>\n","<defs>\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(l),"</defs>\n")},createSVGClipPathMarkup:function(n){var l=this.clipPath;return l?(l.clipPathId="CLIPPATH_"+f.Object.__uid++,'<clipPath id="'+l.clipPathId+'" >\n'+this.clipPath.toClipPathSVG(n.reviver)+"</clipPath>\n"):""},createSVGRefElementsMarkup:function(){var n=this;return["background","overlay"].map(function(u){var d=n[u+"Color"];if(d&&d.toLive){var g=n[u+"Vpt"],v=n.viewportTransform;return d.toSVG({width:n.width/(g?v[0]:1),height:n.height/(g?v[3]:1)},{additionalTransform:g?f.util.matrixToSVG(v):""})}}).join("")},createSVGFontFacesMarkup:function(){var u,d,g,v,p,m,_,b,n="",l={},A=f.fontPaths,F=[];
1for(this._objects.forEach(function W(X){F.push(X),X._objects&&X._objects.forEach(W)}),_=0,b=F.length;_<b;_++)if(d=(u=F[_]).fontFamily,-1!==u.type.indexOf("text")&&!l[d]&&A[d]&&(l[d]=!0,u.styles))for(p in g=u.styles)for(m in v=g[p])!l[d=v[m].fontFamily]&&A[d]&&(l[d]=!0);for(var L in l)n+=["\t\t@font-face {\n","\t\t\tfont-family: '",L,"';\n","\t\t\tsrc: url('",A[L],"');\n","\t\t}\n"].join("");return n&&(n=['\t<style type="text/css">',"<![CDATA[\n",n,"]]>","</style>\n"].join("")),n},_setSVGObjects:function(n,l){var u,d,g,v=this._objects;for(d=0,g=v.length;d<g;d++)!(u=v[d]).excludeFromExport&&this._setSVGObject(n,u,l)},_setSVGObject:function(n,l,u){n.push(l.toSVG(u))},_setSVGBgOverlayImage:function(n,l,u){this[l]&&!this[l].excludeFromExport&&this[l].toSVG&&n.push(this[l].toSVG(u))},_setSVGBgOverlayColor:function(n,l){var u=this[l+"Color"],g=this.width,v=this.height;if(u)if(u.toLive){var p=u.repeat,y=f.util.invertTransform(this.viewportTransform),_=this[l+"Vpt"]?f.util.matrixToSVG(y):"";n.push('<rect transform="'+_+" translate(",g/2,",",v/2,')"',' x="',u.offsetX-g/2,'" y="',u.offsetY-v/2,'" ','width="',"repeat-y"===p||"no-repeat"===p?u.source.width:g,'" height="',"repeat-x"===p||"no-repeat"===p?u.source.height:v,'" fill="url(#SVGID_'+u.id+')"',"></rect>\n")}else n.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',u,'"',"></rect>\n")},sendToBack:function(n){if(!n)return this;var u,d,g,l=this._activeObject;if(n===l&&"activeSelection"===n.type)for(u=(g=l._objects).length;u--;)o(this._objects,d=g[u]),this._objects.unshift(d);else o(this._objects,n),this._objects.unshift(n);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(n){if(!n)return this;var u,d,g,l=this._activeObject;if(n===l&&"activeSelection"===n.type)for(g=l._objects,u=0;u<g.length;u++)o(this._objects,d=g[u]),this._objects.push(d);else o(this._objects,n),this._objects.push(n);return this.renderOnAddRemove&&this.requestRenderAll(),this},sendBackwards:function(n,l){if(!n)return this;var d,g,v,p,y,u=this._activeObject,m=0;if(n===u&&"activeSelection"===n.type)for(y=u._objects,d=0;d<y.length;d++)(v=this._objects.indexOf(g=y[d]))>0+m&&(p=v-1,o(this._objects,g),this._objects.splice(p,0,g)),m++;else 0!==(v=this._objects.indexOf(n))&&(p=this._findNewLowerIndex(n,v,l),o(this._objects,n),this._objects.splice(p,0,n));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(n,l,u){var d,g;if(u){for(d=l,g=l-1;g>=0;--g)if(n.intersectsWithObject(this._objects[g])||n.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(n)){d=g;break}}else d=l-1;return d},bringForward:function(n,l){if(!n)return this;var d,g,v,p,y,u=this._activeObject,m=0;if(n===u&&"activeSelection"===n.type)for(d=(y=u._objects).length;d--;)(v=this._objects.indexOf(g=y[d]))<this._objects.length-1-m&&(p=v+1,o(this._objects,g),this._objects.splice(p,0,g)),m++;else(v=this._objects.indexOf(n))!==this._objects.length-1&&(p=this._findNewUpperIndex(n,v,l),o(this._objects,n),this._objects.splice(p,0,n));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewUpperIndex:function(n,l,u){var d,g,v;if(u){for(d=l,g=l+1,v=this._objects.length;g<v;++g)if(n.intersectsWithObject(this._objects[g])||n.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(n)){d=g;break}}else d=l+1;return d},moveTo:function(n,l){return o(this._objects,n),this._objects.splice(l,0,n),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(f.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(n){n.dispose&&n.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,this.lowerCanvasEl.classList.remove("lower-canvas"),f.util.setStyle(this.lowerCanvasEl,this._originalCanvasStyle),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),f.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this._objects.length+" }>"}}),c(f.StaticCanvas.prototype,f.Observable),c(f.StaticCanvas.prototype,f.Collection),c(f.StaticCanvas.prototype,f.DataURLExporter),c(f.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}
1',supports:function(n){var l=s();if(!l||!l.getContext)return null;var u=l.getContext("2d");return u&&"setLineDash"===n?void 0!==u.setLineDash:null}}),f.StaticCanvas.prototype.toJSON=f.StaticCanvas.prototype.toObject,f.isLikelyNode&&(f.StaticCanvas.prototype.createPNGStream=function(){var n=t(this.lowerCanvasEl);return n&&n.createPNGStream()},f.StaticCanvas.prototype.createJPEGStream=function(n){var l=t(this.lowerCanvasEl);return l&&l.createJPEGStream(n)})}}(),f.BaseBrush=f.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(c){c.strokeStyle=this.color,c.lineWidth=this.width,c.lineCap=this.strokeLineCap,c.miterLimit=this.strokeMiterLimit,c.lineJoin=this.strokeLineJoin,c.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(c){var r=this.canvas.viewportTransform;c.save(),c.transform(r[0],r[1],r[2],r[3],r[4],r[5])},_setShadow:function(){if(this.shadow){var c=this.canvas,r=this.shadow,o=c.contextTop,h=c.getZoom();c&&c._isRetinaScaling()&&(h*=f.devicePixelRatio),o.shadowColor=r.color,o.shadowBlur=r.blur*h,o.shadowOffsetX=r.offsetX*h,o.shadowOffsetY=r.offsetY*h}},needsFullRender:function(){return new f.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var c=this.canvas.contextTop;c.shadowColor="",c.shadowBlur=c.shadowOffsetX=c.shadowOffsetY=0},_isOutSideCanvas:function(c){return c.x<0||c.x>this.canvas.getWidth()||c.y<0||c.y>this.canvas.getHeight()}}),f.PencilBrush=f.util.createClass(f.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(c){this.canvas=c,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(c,r,o){var h=r.midPointFrom(o);return c.quadraticCurveTo(r.x,r.y,h.x,h.y),h},onMouseDown:function(c,r){!this.canvas._isMainEvent(r.e)||(this.drawStraightLine=r.e[this.straightLineKey],this._prepareForDrawing(c),this._captureDrawingPath(c),this._render())},onMouseMove:function(c,r){if(this.canvas._isMainEvent(r.e)&&(this.drawStraightLine=r.e[this.straightLineKey],(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(c))&&this._captureDrawingPath(c)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var o=this._points,h=o.length,e=this.canvas.contextTop;this._saveAndTransform(e),this.oldEnd&&(e.beginPath(),e.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(e,o[h-2],o[h-1],!0),e.stroke(),e.restore()}},onMouseUp:function(c){return!this.canvas._isMainEvent(c.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(c){var r=new f.Point(c.x,c.y);this._reset(),this._addPoint(r),this.canvas.contextTop.moveTo(r.x,r.y)},_addPoint:function(c){return!(this._points.length>1&&c.eq(this._points[this._points.length-1])||(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(c),0))},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(c){var r=new f.Point(c.x,c.y);return this._addPoint(r)},_render:function(c){var r,o,h=this._points[0],e=this._points[1];if(this._saveAndTransform(c=c||this.canvas.contextTop),c.beginPath(),2===this._points.length&&h.x===e.x&&h.y===e.y){var i=this.width/1e3;h=new f.Point(h.x,h.y),e=new f.Point(e.x,e.y),h.x-=i,e.x+=i}for(c.moveTo(h.x,h.y),r=1,o=this._points.length;r<o;r++)this._drawSegment(c,h,e),h=this._points[r],e=this._points[r+1];c.lineTo(h.x,h.y),c.stroke(),c.restore()},convertPointsToSVGPath:function(c){return f.util.getSmoothPathFromPoints(c,this.width/1e3)},_isEmptySVGPath:function(c){return"M 0 0 Q 0 0 0 0 L 0 0"===f.util.joinPath(c)},createPath:function(c){var r=new f.Path(c,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,r.shadow=new f.Shadow(this.shadow)),r},decimatePoints:function(c,r){if(c.length<=2)return c;var e,o=this.canvas.getZoom(),h=Math.pow(r/o,2),i=c.length-1,t=c[0],s=[t];for(e=1;e<i-1;e++)Math.pow(t.x-c[e].x,2)+Math.pow(t.y-c[e].y,2)>=h&&s.push(t=c[e]);return s.push(c[i]),s},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var r=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(r))this.canvas.requestRenderAll();else{var o=this.createPath(r);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:o}),this.canvas.add(o),this.canvas.requestRenderAll(),o.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:o})}}}),f.CircleBrush=f.util.createClass(f.BaseBrush,{width:10,initialize:function(c){this.canvas=c,this.points=[]},drawDot:function(c){var r=this.addPoint(c),o=this.canvas.contextTop;
vendor: 17,423 bytes, line 1
1this._saveAndTransform(o),this.dot(o,r),o.restore()},dot:function(c,r){c.fillStyle=r.fill,c.beginPath(),c.arc(r.x,r.y,r.radius,0,2*Math.PI,!1),c.closePath(),c.fill()},onMouseDown:function(c){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(c)},_render:function(){var r,o,c=this.canvas.contextTop,h=this.points;for(this._saveAndTransform(c),r=0,o=h.length;r<o;r++)this.dot(c,h[r]);c.restore()},onMouseMove:function(c){!0===this.limitedToCanvasSize&&this._isOutSideCanvas(c)||(this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(c),this._render()):this.drawDot(c))},onMouseUp:function(){var r,o,c=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var h=[];for(r=0,o=this.points.length;r<o;r++){var e=this.points[r],i=new f.Circle({radius:e.radius,left:e.x,top:e.y,originX:"center",originY:"center",fill:e.fill});this.shadow&&(i.shadow=new f.Shadow(this.shadow)),h.push(i)}var t=new f.Group(h);t.canvas=this.canvas,this.canvas.fire("before:path:created",{path:t}),this.canvas.add(t),this.canvas.fire("path:created",{path:t}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},addPoint:function(c){var r=new f.Point(c.x,c.y),o=f.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,h=new f.Color(this.color).setAlpha(f.util.getRandomInt(0,100)/100).toRgba();return r.radius=o,r.fill=h,this.points.push(r),r}}),f.SprayBrush=f.util.createClass(f.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(c){this.canvas=c,this.sprayChunks=[]},onMouseDown:function(c){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(c),this.render(this.sprayChunkPoints)},onMouseMove:function(c){!0===this.limitedToCanvasSize&&this._isOutSideCanvas(c)||(this.addSprayChunk(c),this.render(this.sprayChunkPoints))},onMouseUp:function(){var c=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var r=[],o=0,h=this.sprayChunks.length;o<h;o++)for(var e=this.sprayChunks[o],i=0,t=e.length;i<t;i++){var s=new f.Rect({width:e[i].width,height:e[i].width,left:e[i].x+1,top:e[i].y+1,originX:"center",originY:"center",fill:this.color});r.push(s)}this.optimizeOverlapping&&(r=this._getOptimizedRects(r));var a=new f.Group(r);this.shadow&&a.set("shadow",new f.Shadow(this.shadow)),this.canvas.fire("before:path:created",{path:a}),this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},_getOptimizedRects:function(c){var o,h,e,r={};for(h=0,e=c.length;h<e;h++)r[o=c[h].left+""+c[h].top]||(r[o]=c[h]);var i=[];for(o in r)i.push(r[o]);return i},render:function(c){var o,h,r=this.canvas.contextTop;for(r.fillStyle=this.color,this._saveAndTransform(r),o=0,h=c.length;o<h;o++){var e=c[o];void 0!==e.opacity&&(r.globalAlpha=e.opacity),r.fillRect(e.x,e.y,e.width,e.width)}r.restore()},_render:function(){var r,o,c=this.canvas.contextTop;for(c.fillStyle=this.color,this._saveAndTransform(c),r=0,o=this.sprayChunks.length;r<o;r++)this.render(this.sprayChunks[r]);c.restore()},addSprayChunk:function(c){this.sprayChunkPoints=[];var r,o,h,i,e=this.width/2;for(i=0;i<this.density;i++){r=f.util.getRandomInt(c.x-e,c.x+e),o=f.util.getRandomInt(c.y-e,c.y+e),h=this.dotWidthVariance?f.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):this.dotWidth;var t=new f.Point(r,o);t.width=h,this.randomOpacity&&(t.opacity=f.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(t)}this.sprayChunks.push(this.sprayChunkPoints)}}),f.PatternBrush=f.util.createClass(f.PencilBrush,{getPatternSrc:function(){var o=f.util.createCanvasElement(),h=o.getContext("2d");return o.width=o.height=25,h.fillStyle=this.color,h.beginPath(),h.arc(10,10,10,0,2*Math.PI,!1),h.closePath(),h.fill(),o},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(c){return c.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(c){this.callSuper("_setBrushStyles",c),c.strokeStyle=this.getPattern(c)},createPath:function(c){var r=this.callSuper("createPath",c),o=r._getLeftTopCoords().scalarAdd(r.strokeWidth/2);return r.stroke=new f.Pattern({source:this.source||this.getPatternSrcFunction(),offsetX:-o.x,offsetY:-o.y}),r}}),function(){var c=f.util.getPointer,r=f.util.degreesToRadians,o=f.util.isTouchEvent;for(var h in f.Canvas=f.util.createClass(f.StaticCanvas,{initialize:function(e,i){i||(i={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(e,i),this._initInteractive(),this._createCacheCanvas()},uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",interactive:!0,selection:!0,selectionKey:"shiftKey",altSelectionKey:null,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,isDrawingMode:!1,preserveObjectStacking:!1,snapAngle:0,snapThreshold:null,stopContextMenu:!1,fireRightClick:!1,fireMiddleClick:!1,targets:[],enablePointerEvents:!1,_hoveredTarget:null,_hoveredTargets:[],_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this._initRetinaScaling(),this.freeDrawingBrush=f.PencilBrush&&new f.PencilBrush(this),this.calcOffset()},_chooseObjectsToRender:function(){var i,t,s,e=this.getActiveObjects();if(e.length>0&&!this.preserveObjectStacking){t=[],s=[];for(var a=0,n=this._objects.length;a<n;a++)-1===e.indexOf(i=this._objects[a])?t.push(i):s.push(i);e.length>1&&(this._activeObject._objects=s),t.push.apply(t,s)}else t=this._objects;return t},renderAll:function(){return this.contextTopDirty&&!this._groupSelector&&!this.isDrawingMode&&(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1),this.renderCanvas(this.contextContainer,this._chooseObjectsToRender()),this},renderTopLayer:function(e){e.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(e),this.contextTopDirty=!0),e.restore()},renderTop:function(){var e=this.contextTop;return this.clearContext(e),this.renderTopLayer(e),this.fire("after:render"),this},_normalizePointer:function(e,i){var t=e.calcTransformMatrix(),s=f.util.invertTransform(t),a=this.restorePointerVpt(i);return f.util.transformPoint(a,s)},isTargetTransparent:function(e,i,t){if(e.shouldCache()&&e._cacheCanvas&&e!==this._activeObject){var s=this._normalizePointer(e,{x:i,y:t}),a=Math.max(e.cacheTranslationX+s.x*e.zoomX,0),n=Math.max(e.cacheTranslationY+s.y*e.zoomY,0);return f.util.isTransparent(e._cacheContext,Math.round(a),Math.round(n),this.targetFindTolerance)}var l=this.contextCache,u=e.selectionBackgroundColor,d=this.viewportTransform;return e.selectionBackgroundColor="",this.clearContext(l),l.save(),l.transform(d[0],d[1],d[2],d[3],d[4],d[5]),e.render(l),l.restore(),e.selectionBackgroundColor=u,f.util.isTransparent(l,i,t,this.targetFindTolerance)},_isSelectionKeyPressed:function(e){return Array.isArray(this.selectionKey)?!!this.selectionKey.find(function(t){return!0===e[t]}):e[this.selectionKey]},_shouldClearSelection:function(e,i){var t=this.getActiveObjects(),s=this._activeObject;return!i||i&&s&&t.length>1&&-1===t.indexOf(i)&&s!==i&&!this._isSelectionKeyPressed(e)||i&&!i.evented||i&&!i.selectable&&s&&s!==i},_shouldCenterTransform:function(e,i,t){var s;if(e)return"scale"===i||"scaleX"===i||"scaleY"===i||"resizing"===i?s=this.centeredScaling||e.centeredScaling:"rotate"===i&&(s=this.centeredRotation||e.centeredRotation),s?!t:t},_getOriginFromCorner:function(e,i){var t={x:e.originX,y:e.originY};return"ml"===i||"tl"===i||"bl"===i?t.x="right":("mr"===i||"tr"===i||"br"===i)&&(t.x="left"),"tl"===i||"mt"===i||"tr"===i?t.y="bottom":("bl"===i||"mb"===i||"br"===i)&&(t.y="top"),t},_getActionFromCorner:function(e,i,t,s){if(!i||!e)return"drag";var a=s.controls[i];return a.getActionName(t,a,s)},_setupCurrentTransform:function(e,i,t){if(i){var s=this.getPointer(e),a=i.__corner,n=i.controls[a],l=t&&a?n.getActionHandler(e,i,n):f.controlsUtils.dragHandler,u=this._getActionFromCorner(t,a,e,i),d=this._getOriginFromCorner(i,a),g=e[this.centeredKey],v={target:i,action:u,actionHandler:l,corner:a,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:s.x-i.left,offsetY:s.y-i.top,originX:d.x,originY:d.y,ex:s.x,ey:s.y,lastX:s.x,lastY:s.y,theta:r(i.angle),width:i.width*i.scaleX,shiftKey:e.shiftKey,altKey:g,original:f.util.saveObjectTransform(i)};this._shouldCenterTransform(i,u,g)&&(v.originX="center",v.originY="center"),v.original.originX=d.x,v.original.originY=d.y,this._currentTransform=v,this._beforeTransform(e)}},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_drawSelection:function(e){var i=this._groupSelector,t=new f.Point(i.ex,i.ey),s=f.util.transformPoint(t,this.viewportTransform),a=new f.Point(i.ex+i.left,i.ey+i.top),n=f.util.transformPoint(a,this.viewportTransform),l=Math.min(s.x,n.x),u=Math.min(s.y,n.y),d=Math.max(s.x,n.x),g=Math.max(s.y,n.y),v=this.selectionLineWidth/2;this.selectionColor&&(e.fillStyle=this.selectionColor,e.fillRect(l,u,d-l,g-u)),this.selectionLineWidth&&this.selectionBorderColor&&(e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor,l+=v,u+=v,d-=v,g-=v,f.Object.prototype._setLineDash.call(this,e,this.selectionDashArray),e.strokeRect(l,u,d-l,g-u))},findTarget:function(e,i){if(!this.skipTargetFind){var l,u,s=this.getPointer(e,!0),a=this._activeObject,n=this.getActiveObjects(),d=o(e),g=n.length>1&&!i||1===n.length;if(this.targets=[],g&&a._findTargetCorner(s,d)||n.length>1&&!i&&a===this._searchPossibleTargets([a],s))return a;if(1===n.length&&a===this._searchPossibleTargets([a],s)){if(!this.preserveObjectStacking)return a;l=a,u=this.targets,this.targets=[]}var v=this._searchPossibleTargets(this._objects,s);return e[this.altSelectionKey]&&v&&l&&v!==l&&(v=l,this.targets=u),v}},_checkTarget:function(e,i,t){if(i&&i.visible&&i.evented&&i.containsPoint(e)){if(!this.perPixelTargetFind&&!i.perPixelTargetFind||i.isEditing)return!0;if(!this.isTargetTransparent(i,t.x,t.y))return!0}},_searchPossibleTargets:function(e,i){for(var t,a,s=e.length;s--;){var n=e[s],l=n.group?this._normalizePointer(n.group,i):i;if(this._checkTarget(l,n,i)){(t=e[s]).subTargetCheck&&t instanceof f.Group&&(a=this._searchPossibleTargets(t._objects,i))&&this.targets.push(a);break}}return t},restorePointerVpt:function(e){return f.util.transformPoint(e,f.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var u,t=c(e),s=this.upperCanvasEl,a=s.getBoundingClientRect(),n=a.width||0,l=a.height||0;(!n||!l)&&("top"in a&&"bottom"in a&&(l=Math.abs(a.top-a.bottom)),"right"in a&&"left"in a&&(n=Math.abs(a.right-a.left))),this.calcOffset(),t.x=t.x-this._offset.left,t.y=t.y-this._offset.top,i||(t=this.restorePointerVpt(t));var d=this.getRetinaScaling();return 1!==d&&(t.x/=d,t.y/=d),{x:t.x*(u=0===n||0===l?{width:1,height:1}:{width:s.width/n,height:s.height/l}).width,y:t.y*u.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),i=this.lowerCanvasEl,t=this.upperCanvasEl;t?t.className="":(t=this._createCanvasElement(),this.upperCanvasEl=t),f.util.addClass(t,"upper-canvas "+e),this.wrapperEl.appendChild(t),this._copyCanvasStyle(i,t),this._applyCanvasStyle(t),this.contextTop=t.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=f.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),f.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),f.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var i=this.width||e.width,t=this.height||e.height;f.util.setStyle(e,{position:"absolute",width:i+"px",height:t+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),e.width=i,e.height=t,f.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,i){i.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var e=this._activeObject;return e?"activeSelection"===e.type&&e._objects?e._objects.slice(0):[e]:[]},_onObjectRemoved:function(e){e===this._activeObject&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared",{target:e}),e.fire("deselected")),e===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",e)},_fireSelectionEvents:function(e,i){var t=!1,s=this.getActiveObjects(),a=[],n=[];e.forEach(function(l){-1===s.indexOf(l)&&(t=!0,l.fire("deselected",{e:i,target:l}),n.push(l))}),s.forEach(function(l){-1===e.indexOf(l)&&(t=!0,l.fire("selected",{e:i,target:l}),a.push(l))}),e.length>0&&s.length>0?t&&this.fire("selection:updated",{e:i,selected:a,deselected:n}):s.length>0?this.fire("selection:created",{e:i,selected:a}):e.length>0&&this.fire("selection:cleared",{e:i,deselected:n})},setActiveObject:function(e,i){var t=this.getActiveObjects();return this._setActiveObject(e,i),this._fireSelectionEvents(t,i),this},_setActiveObject:function(e,i){return!(this._activeObject===e||!this._discardActiveObject(i,e)||e.onSelect({e:i})||(this._activeObject=e,0))},_discardActiveObject:function(e,i){var t=this._activeObject;if(t){if(t.onDeselect({e,object:i}))return!1;this._activeObject=null}return!0},discardActiveObject:function(e){var i=this.getActiveObjects(),t=this.getActiveObject();return i.length&&this.fire("before:selection:cleared",{target:t,e}),this._discardActiveObject(e),this._fireSelectionEvents(i,e),this},dispose:function(){var e=this.wrapperEl;return this.removeListeners(),e.removeChild(this.upperCanvasEl),e.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(i){f.util.cleanUpJsdomNode(this[i]),this[i]=void 0}.bind(this)),e.parentNode&&e.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,f.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(e){var i=this._activeObject;i&&i._renderControls(e)},_toObject:function(e,i,t){var s=this._realizeGroupTransformOnObject(e),a=this.callSuper("_toObject",e,i,t);return this._unwindGroupTransformOnObject(e,s),a},_realizeGroupTransformOnObject:function(e){if(e.group&&"activeSelection"===e.group.type&&this._activeObject===e.group){var t={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach(function(s){t[s]=e[s]}),f.util.addTransformToObject(e,this._activeObject.calcOwnMatrix()),t}return null},_unwindGroupTransformOnObject:function(e,i){i&&e.set(i)},_setSVGObject:function(e,i,t){var s=this._realizeGroupTransformOnObject(i);this.callSuper("_setSVGObject",e,i,t),this._unwindGroupTransformOnObject(i,s)},setViewportTransform:function(e){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),f.StaticCanvas.prototype.setViewportTransform.call(this,e)}}),f.StaticCanvas)"prototype"!==h&&(f.Canvas[h]=f.StaticCanvas[h])}(),function(){var c=f.util.addListener,r=f.util.removeListener,i={passive:!1};function t(s,a){return s.button&&s.button===a-1}f.util.object.extend(f.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(c,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(s,a){var n=this.upperCanvasEl,l=this._getEventPrefix();s(f.window,"resize",this._onResize),s(n,l+"down",this._onMouseDown),s(n,l+"move",this._onMouseMove,i),s(n,l+"out",this._onMouseOut),s(n,l+"enter",this._onMouseEnter),s(n,"wheel",this._onMouseWheel),s(n,"contextmenu",this._onContextMenu),s(n,"dblclick",this._onDoubleClick),s(n,"dragover",this._onDragOver),s(n,"dragenter",this._onDragEnter),s(n,"dragleave",this._onDragLeave),s(n,"drop",this._onDrop),this.enablePointerEvents||s(n,"touchstart",this._onTouchStart,i
1),"undefined"!=typeof eventjs&&a in eventjs&&(eventjs[a](n,"gesture",this._onGesture),eventjs[a](n,"drag",this._onDrag),eventjs[a](n,"orientation",this._onOrientationChange),eventjs[a](n,"shake",this._onShake),eventjs[a](n,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(r,"remove");var s=this._getEventPrefix();r(f.document,s+"up",this._onMouseUp),r(f.document,"touchend",this._onTouchEnd,i),r(f.document,s+"move",this._onMouseMove,i),r(f.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(s,a){this.__onTransformGesture&&this.__onTransformGesture(s,a)},_onDrag:function(s,a){this.__onDrag&&this.__onDrag(s,a)},_onMouseWheel:function(s){this.__onMouseWheel(s)},_onMouseOut:function(s){var a=this._hoveredTarget;this.fire("mouse:out",{target:a,e:s}),this._hoveredTarget=null,a&&a.fire("mouseout",{e:s});var n=this;this._hoveredTargets.forEach(function(l){n.fire("mouse:out",{target:l,e:s}),l&&l.fire("mouseout",{e:s})}),this._hoveredTargets=[]},_onMouseEnter:function(s){!this._currentTransform&&!this.findTarget(s)&&(this.fire("mouse:over",{target:null,e:s}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(s,a){this.__onOrientationChange&&this.__onOrientationChange(s,a)},_onShake:function(s,a){this.__onShake&&this.__onShake(s,a)},_onLongPress:function(s,a){this.__onLongPress&&this.__onLongPress(s,a)},_onDragOver:function(s){s.preventDefault();var a=this._simpleEventHandler("dragover",s);this._fireEnterLeaveEvents(a,s)},_onDrop:function(s){return this._simpleEventHandler("drop:before",s),this._simpleEventHandler("drop",s)},_onContextMenu:function(s){return this.stopContextMenu&&(s.stopPropagation(),s.preventDefault()),!1},_onDoubleClick:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"dblclick"),this._resetTransformEventData(s)},getPointerId:function(s){var a=s.changedTouches;return a?a[0]&&a[0].identifier:this.enablePointerEvents?s.pointerId:-1},_isMainEvent:function(s){return!0===s.isPrimary||!1!==s.isPrimary&&("touchend"===s.type&&0===s.touches.length||!s.changedTouches||s.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(s){s.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(s)),this.__onMouseDown(s),this._resetTransformEventData();var a=this.upperCanvasEl,n=this._getEventPrefix();c(f.document,"touchend",this._onTouchEnd,i),c(f.document,"touchmove",this._onMouseMove,i),r(a,n+"down",this._onMouseDown)},_onMouseDown:function(s){this.__onMouseDown(s),this._resetTransformEventData();var a=this.upperCanvasEl,n=this._getEventPrefix();r(a,n+"move",this._onMouseMove,i),c(f.document,n+"up",this._onMouseUp),c(f.document,n+"move",this._onMouseMove,i)},_onTouchEnd:function(s){if(!(s.touches.length>0)){this.__onMouseUp(s),this._resetTransformEventData(),this.mainTouchId=null;var a=this._getEventPrefix();r(f.document,"touchend",this._onTouchEnd,i),r(f.document,"touchmove",this._onMouseMove,i);var n=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){c(n.up
vendor: 5,379 bytes, line 1
1perCanvasEl,a+"down",n._onMouseDown),n._willAddMouseDown=0},400)}},_onMouseUp:function(s){this.__onMouseUp(s),this._resetTransformEventData();var a=this.upperCanvasEl,n=this._getEventPrefix();this._isMainEvent(s)&&(r(f.document,n+"up",this._onMouseUp),r(f.document,n+"move",this._onMouseMove,i),c(a,n+"move",this._onMouseMove,i))},_onMouseMove:function(s){!this.allowTouchScrolling&&s.preventDefault&&s.preventDefault(),this.__onMouseMove(s)},_onResize:function(){this.calcOffset()},_shouldRender:function(s){var a=this._activeObject;return!!(!!a!=!!s||a&&s&&a!==s)},__onMouseUp:function(s){var a,n=this._currentTransform,l=this._groupSelector,u=!1,d=!l||0===l.left&&0===l.top;if(this._cacheTransformEventData(s),a=this._target,this._handleEvent(s,"up:before"),t(s,3))this.fireRightClick&&this._handleEvent(s,"up",3,d);else{if(t(s,2))return this.fireMiddleClick&&this._handleEvent(s,"up",2,d),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(s);else if(this._isMainEvent(s)){if(n&&(this._finalizeCurrentTransform(s),u=n.actionPerformed),!d){var g=a===this._activeObject;this._maybeGroupObjects(s),u||(u=this._shouldRender(a)||!g&&a===this._activeObject)}var v,p;if(a){if(v=a._findTargetCorner(this.getPointer(s,!0),f.util.isTouchEvent(s)),a.selectable&&a!==this._activeObject&&"up"===a.activeOn)this.setActiveObject(a,s),u=!0;else{var y=a.controls[v],m=y&&y.getMouseUpHandler(s,a,y);m&&m(s,n,(p=this.getPointer(s)).x,p.y)}a.isMoving=!1}if(n&&(n.target!==a||n.corner!==v)){var _=n.target&&n.target.controls[n.corner],b=_&&_.getMouseUpHandler(s,a,y);p=p||this.getPointer(s),b&&b(s,n,p.x,p.y)}this._setCursorFromEvent(s,a),this._handleEvent(s,"up",1,d),this._groupSelector=null,this._currentTransform=null,a&&(a.__corner=0),u?this.requestRenderAll():d||this.renderTop()}}},_simpleEventHandler:function(s,a){var n=this.findTarget(a),l=this.targets,u={e:a,target:n,subTargets:l};if(this.fire(s,u),n&&n.fire(s,u),!l)return n;for(var d=0;d<l.length;d++)l[d].fire(s,u);return n},_handleEvent:function(s,a,n,l){var u=this._target,d=this.targets||[],g={e:s,target:u,subTargets:d,button:n||1,isClick:l||!1,pointer:this._pointer,absolutePointer:this._absolutePointer,transform:this._currentTransform};"up"===a&&(g.currentTarget=this.findTarget(s),g.currentSubTargets=this.targets),this.fire("mouse:"+a,g),u&&u.fire("mouse"+a,g);for(var v=0;v<d.length;v++)d[v].fire("mouse"+a,g)},_finalizeCurrentTransform:function(s){var a=this._currentTransform,n=a.target,l={e:s,target:n,transform:a,action:a.action};n._scaling&&(n._scaling=!1),n.setCoords(),(a.actionPerformed||this.stateful&&n.hasStateChanged())&&this._fire("modified",l)},_onMouseDownInDrawingMode:function(s){this._isCurrentlyDrawing=!0,this.getActiveObject()&&this.discardActiveObject(s).requestRenderAll();var a=this.getPointer(s);this.freeDrawingBrush.onMouseDown(a,{e:s,pointer:a}),this._handleEvent(s,"down")},_onMouseMoveInDrawingMode:function(s){if(this._isCurrentlyDrawing){var a=this.getPointer(s);this.freeDrawingBrush.onMouseMove(a,{e:s,pointer:a})}this.setCursor(this.freeDrawingCursor),this._handleEvent(s,"move")},_onMouseUpInDrawingMode:function(s){var a=this.getPointer(s);this._isCurrentlyDrawing=this.freeDrawingBrush.onMouseUp({e:s,pointer:a}),this._handleEvent(s,"up")},__onMouseDown:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"down:before");var a=this._target;if(t(s,3))this.fireRightClick&&this._handleEvent(s,"down",3);else if(t(s,2))this.fireMiddleClick&&this._handleEvent(s,"down",2);else if(this.isDrawingMode)this._onMouseDownInDrawingMode(s);else if(this._isMainEvent(s)&&!this._currentTransform){this._previousPointer=n=this._pointer;var l=this._shouldRender(a),u=this._shouldGroup(s,a);if(this._shouldClearSelection(s,a)?this.discardActiveObject(s):u&&(this._handleGrouping(s,a),a=this._activeObject),this.selection&&(!a||!a.selectable&&!a.isEditing&&a!==this._activeObject)&&(this._groupSelector={ex:this._absolutePointer.x,ey:this._absolutePointer.y,top:0,left:0}),a){var d=a===this._activeObject;a.selectable&&"down"===a.activeOn&&this.setActiveObject(a,s);var g=a._findTargetCorner(this.getPointer(s,!0),f.util.isTouchEvent(s));if(a.__corner=g,a===this._activeObject&&(g||!u)){this._setupCurrentTransform(s,a,d);var v=a.controls[g],n=this.getPointer(s),p=v&&v.getMouseDownHandler(s,a,v);p&&p(s,this._currentTransform,n.x,n.y)}}this._handleEvent(s,"down"),(l||u)&&this.requestRenderAll()}},_resetTransformEventData:function(){this._target=null,this._pointer=null,this._absolutePointer=null},_cacheTransformEventData:function(s){this._resetTransformEventData(),this._pointer=this.getPointer(s,!0),this._absolutePointer=this.restorePointerVpt(this._pointer),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(s)||null},_beforeTransform:function(s){var a=this._currentTransform;this.stateful&&a.target.saveState(),this.fire("before:transform",{e:s,transform:a})},__onMouseMove:function(s){var a,n;if(this._handleEvent(s,"move:before"),this._cacheTransformEventData(s),this.isDrawingMode)this._onMouseMoveInDrawingMode(s);else if(this._isMainEvent(s)){var l=this._groupSelector;l?(l.left=(n=this._absolutePointer).x-l.ex,l.top=n.y-l.ey,this.renderTop()):this._currentTransform?this._transformObject(s):(a=this.findTarget(s)||null,this._setCursorFromEvent(s,a),this._fireOverOutEvents(a,s)
1),this._handleEvent(s,"move"),this._resetTransformEventData()}},_fireOverOutEvents:function(s,a){var n=this._hoveredTarget,l=this._hoveredTargets,u=this.targets,d=Math.max(l.length,u.length);this.fireSyntheticInOutEvents(s,a,{oldTarget:n,evtOut:"mouseout",canvasEvtOut:"mouse:out",evtIn:"mouseover",canvasEvtIn:"mouse:over"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(u[g],a,{oldTarget:l[g],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=s,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(s,a){var n=this._draggedoverTarget,l=this._hoveredTargets,u=this.targets,d=Math.max(l.length,u.length);this.fireSyntheticInOutEvents(s,a,{oldTarget:n,evtOut:"dragleave",evtIn:"dragenter"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(u[g],a,{oldTarget:l[g],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=s},fireSyntheticInOutEvents:function(s,a,n){var l,u,v,d=n.oldTarget,p=d!==s,y=n.canvasEvtIn,m=n.canvasEvtOut;p&&(l={e:a,target:s,previousTarget:d},u={e:a,target:d,nextTarget:s}),v=s&&p,d&&p&&(m&&this.fire(m,u),d.fire(n.evtOut,u)),v&&(y&&this.fire(y,l),s.fire(n.evtIn,l))},__onMouseWheel:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"wheel"),this._resetTransformEventData()},_transformObject:function(s){var a=this.getPointer(s),n=this._currentTransform;n.reset=!1,n.shiftKey=s.shiftKey,n.altKey=s[this.centeredKey],this._performTransformAction(s,n,a),n.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(s,a,n){var d=a.action,g=!1,v=a.actionHandler;v&&(g=v(s,a,n.x,n.y)),"drag"===d&&g&&(a.target.isMoving=!0,this.setCursor(a.target.moveCursor||this.moveCursor)),a.actionPerformed=a.actionPerformed||g},_fire:f.controlsUtils.fireEvent,_setCursorFromEvent:function(s,a){if(!a)return this.setCursor(this.defaultCursor),!1;var n=a.hoverCursor||this.hoverCursor,l=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,u=(!l||!l.contains(a))&&a._findTargetCorner(this.getPointer(s,!0));u?this.setCursor(this.getCornerCursor(u,a,s)):(a.subTargetCheck&&this.targets.concat().reverse().map(function(d){n=d.hoverCursor||n}),this.setCursor(n))},getCornerCursor:function(s,a,n){var l=a.controls[s];return l.cursorStyleHandler(n,l,a)}})}(),function(){var c=Math.min,r=Math.max;f.util.object.extend(f.Canvas.prototype,{_shouldGroup:function(o,h){var e=this._activeObject;return e&&this._isSelectionKeyPressed(o)&&h&&h.selectable&&this.selection&&(e!==h||"activeSelection"===e.type)&&!h.onSelect({e:o})},_handleGrouping:function(o,h){var e=this._activeObject;e.__corner||h===e&&(!(h=this.findTarget(o,!0))||!h.selectable)||(e&&"activeSelection"===e.type?this._updateActiveSelection(h,o):this._createActiveSelection(h,o))},_updateActiveSelection:function(o,h){var e=this._activeObject,i=e._objects.slice(0);
1e.contains(o)?(e.removeWithUpdate(o),this._hoveredTarget=o,this._hoveredTargets=this.targets.concat(),1===e.size()&&this._setActiveObject(e.item(0),h)):(e.addWithUpdate(o),this._hoveredTarget=e,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(i,h)},_createActiveSelection:function(o,h){var e=this.getActiveObjects(),i=this._createGroup(o);this._hoveredTarget=i,this._setActiveObject(i,h),this._fireSelectionEvents(e,h)},_createGroup:function(o){var h=this._objects,i=h.indexOf(this._activeObject)<h.indexOf(o)?[this._activeObject,o]:[o,this._activeObject];return this._activeObject.isEditing&&this._activeObject.exitEditing(),new f.ActiveSelection(i,{canvas:this})},_groupSelectedObjects:function(o){var e,h=this._collectObjects(o);1===h.length?this.setActiveObject(h[0],o):h.length>1&&(e=new f.ActiveSelection(h.reverse(),{canvas:this}),this.setActiveObject(e,o))},_collectObjects:function(o){for(var e,h=[],i=this._groupSelector.ex,t=this._groupSelector.ey,s=i+this._groupSelector.left,a=t+this._groupSelector.top,n=new f.Point(c(i,s),c(t,a)),l=new f.Point(r(i,s),r(t,a)),u=!this.selectionFullyContained,d=i===s&&t===a,g=this._objects.length;g--&&!((e=this._objects[g])&&e.selectable&&e.visible&&(u&&e.intersectsWithRect(n,l,!0)||e.isContainedWithinRect(n,l,!0)||u&&e.containsPoint(n,null,!0)||u&&e.containsPoint(l,null,!0))&&(h.push(e),d)););return h.length>1&&(h=h.filter(function(v){return!v.onSelect({e:o})})),h},_maybeGroupObjects:function(o){this.selection&&this._groupSelector&&this._groupSelectedObjects(o),this.setCursor(this.defaultCursor),this._groupSelector=null}})}(),f.util.object.extend(f.StaticCanvas.prototype,{toDataURL:function(c){c||(c={});var r=c.format||"png",o=c.quality||1,h=(c.multiplier||1)*(c.enableRetinaScaling?this.getRetinaScaling():1),e=this.toCanvasElement(h,c);return f.util.toDataURL(e,r,o)},toCanvasElement:function(c,r){var o=((r=r||{}).width||this.width)*(c=c||1),h=(r.height||this.height)*c,e=this.getZoom(),i=this.width,t=this.height,s=e*c,a=this.viewportTransform,u=this.interactive,d=[s,0,0,s,(a[4]-(r.left||0))*c,(a[5]-(r.top||0))*c],g=this.enableRetinaScaling,v=f.util.createCanvasElement(),p=this.contextTop;return v.width=o,v.height=h,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=o,this.height=h,this.calcViewportBoundaries(),this.renderCanvas(v.getContext("2d"),this._objects),this.viewportTransform=a,this.width=i,this.height=t,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=g,this.contextTop=p,v}}),f.util.object.extend(f.StaticCanvas.prototype,{loadFromJSON:function(c,r,o){if(c){var h="string"==typeof c?JSON.parse(c):f.util.object.clone(c),e=this,i=h.clipPath,t=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete h.clipPath,this._enlivenObjects(h.objects,function(s){e.clear(),e._setBgOverlay(h,function(){i?e._enlivenObjects([i],function(a){e.clipPath=a[0],e.__setupCanvas.call(e,h,s,t,r)}):e.__setupCanvas.call(e,h,s,t,r)})},o),this}},__setupCanvas:function(c,r,o,h){var e=this;r.forEach(function(i,t){e.insertAt(i,t)}),this.renderOnAddRemove=o,delete c.objects,delete c.backgroundImage,delete c.overlayImage,delete c.background,delete c.overlay,this._setOptions(c),this.renderAll(),h&&h()},_setBgOverlay:function(c,r){var o={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(c.backgroundImage||c.overlayImage||c.background||c.overlay){var h=function(){o.backgroundImage&&o.overlayImage&&o.backgroundColor&&o.overlayColor&&r&&r()};this.__setBgOverlay("backgroundImage",c.backgroundImage,o,h),this.__setBgOverlay("overlayImage",c.overlayImage,o,h),this.__setBgOverlay("backgroundColor",c.background,o,h),this.__setBgOverlay("overlayColor",c.overlay,o,h)}else r&&r()},__setBgOverlay:function(c,r,o,h){var e=this;if(!r)return o[c]=!0,void(h&&h());"backgroundImage"===c||"overlayImage"===c?f.util.enlivenObjects([r],function(i){e[c]=i[0],o[c]=!0,h&&h()}):this["set"+f.util.string.capitalize(c,!0)](r,function(){o[c]=!0,h&&h()})},_enlivenObjects:function(c,r,o){c&&0!==c.length?f.util.enlivenObjects(c,function(h){r&&r(h)},null,o):r&&r([])},_toDataURL:function(c,r){this.clone(function(o){r(o.toDataURL(c))})},_toDataURLWithMultiplier:function(c,r,o){this.clone(function(h){o(h.toDataURLWithMultiplier(c,r))})},clone:function(c,r){var o=JSON.stringify(this.toJSON(r));this.cloneWithoutData(function(h){h.loadFromJSON(o,function(){c&&c(h)})})},cloneWithoutData:function(c){var r=f.util.createCanvasElement();r.width=this.width,r.height=this.height;var o=new f.Canvas(r);
1this.backgroundImage?(o.setBackgroundImage(this.backgroundImage.src,function(){o.renderAll(),c&&c(o)}),o.backgroundImageOpacity=this.backgroundImageOpacity,o.backgroundImageStretch=this.backgroundImageStretch):c&&c(o)}}),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend,h=r.util.object.clone,e=r.util.toFixed,i=r.util.string.capitalize,t=r.util.degreesToRadians;r.Object||(r.Object=r.util.createClass(r.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:!r.isLikelyNode,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(n){n&&this.setOptions(n)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=r.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(n){var l=r.perfLimitSizeTotal,u=n.width,d=n.height,g=r.maxCacheSideLimit,v=r.minCacheSideLimit;if(u<=g&&d<=g&&u*d<=l)return u<v&&(n.width=v),d<v&&(n.height=v),n;var y=r.util.limitDimsByArea(u/d,l),m=r.util.capValue,_=m(v,y.x,g),b=m(v,y.y,g);return u>_&&(n.zoomX/=u/_,n.width=_,n.capped=!0),d>b&&(n.zoomY/=d/b,n.height=b,n.capped=!0),n},_getCacheCanvasDimensions:function(){var n=this.getTotalObjectScaling(),l=this._getTransformedDimensions(0,0),u=l.x*n.scaleX/this.scaleX,d=l.y*n.scaleY/this.scaleY;return{width:Math.ceil(u+2),height:Math.ceil(d+2),zoomX:n.scaleX,zoomY:n.scaleY,x:u,y:d}},_updateCacheCanvas:function(){var n=this.canvas;if(this.noScaleCache&&n&&n._currentTransform){var u=n._currentTransform.action;if(this===n._currentTransform.target&&u.slice&&"scale"===u.slice(0,5))return!1}var y,m,d=this._cacheCanvas,g=this._limitCacheSize(this._getCacheCanvasDimensions()),v=g.width,p=g.height,_=g.zoomX,b=g.zoomY,A=v!==this.cacheWidth||p!==this.cacheHeight;return!(!A&&this.zoomX===_&&this.zoomY===b||(A?(d.width=v,d.height=p):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,d.width,d.height)),y=g.x/2,m=g.y/2,this.cacheTranslationX=Math.round(d.width/2-y)+y,this.cacheTranslationY=Math.round(d.height/2-m)+m,this.cacheWidth=v,this.cacheHeight=p,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(_,b),this.zoomX=_,this.zoomY=b,0))},setOptions:function(n){this._setOptions(n),this._initGradient(n.fill,"fill"),this._initGradient(n.stroke,"stroke"),this._initPattern(n.fill,"fill"),this._initPattern(n.stroke,"stroke")},transform:function(n){var u=this.calcTransformMatrix(!(this.group&&!this.group._transformDone||this.group&&this.canvas&&n===this.canvas.contextTop));n.transform(u[0],u[1],u[2],u[3],u[4],u[5])},toObject:function(n){var l=r.Object.NUM_FRACTION_DIGITS,u={type:this.t
1ype,version:r.version,originX:this.originX,originY:this.originY,left:e(this.left,l),top:e(this.top,l),width:e(this.width,l),height:e(this.height,l),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:e(this.strokeWidth,l),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:e(this.strokeMiterLimit,l),scaleX:e(this.scaleX,l),scaleY:e(this.scaleY,l),angle:e(this.angle,l),flipX:this.flipX,flipY:this.flipY,opacity:e(this.opacity,l),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:e(this.skewX,l),skewY:e(this.skewY,l)};return this.clipPath&&!this.clipPath.excludeFromExport&&(u.clipPath=this.clipPath.toObject(n),u.clipPath.inverted=this.clipPath.inverted,u.clipPath.absolutePositioned=this.clipPath.absolutePositioned),r.util.populateWithProperties(this,u,n),this.includeDefaultValues||(u=this._removeDefaultValues(u)),u},toDatalessObject:function(n){return this.toObject(n)},_removeDefaultValues:function(n){var l=r.util.getKlass(n.type).prototype;return l.stateProperties.forEach(function(d){"left"===d||"top"===d||(n[d]===l[d]&&delete n[d],Array.isArray(n[d])&&Array.isArray(l[d])&&0===n[d].length&&0===l[d].length&&delete n[d])}),n},toString:function(){return"#<fabric."+i(this.type)+">"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var n=r.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(n.scaleX),scaleY:Math.abs(n.scaleY)}},getTotalObjectScaling:function(){var n=this.getObjectScaling(),l=n.scaleX,u=n.scaleY;if(this.canvas){var d=this.canvas.getZoom(),g=this.canvas.getRetinaScaling();l*=d*g,u*=d*g}return{scaleX:l,scaleY:u}},getObjectOpacity:function(){var n=this.opacity;return this.group&&(n*=this.group.getObjectOpacity()),n},_set:function(n,l){var d=this[n]!==l,g=!1;return("scaleX"===n||"scaleY"===n)&&(l=this._constrainScale(l)),"scaleX"===n&&l<0?(this.flipX=!this.flipX,l*=-1):"scaleY"===n&&l<0?(this.flipY=!this.flipY,l*=-1):"shadow"!==n||!l||l instanceof r.Shadow?"dirty"===n&&this.group&&this.group.set("dirty",l):l=new r.Shadow(l),this[n]=l,d&&(g=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(n)>-1?(this.dirty=!0,g&&this.group.set("dirty",!0)):g&&this.stateProperties.indexOf(n)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:r.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(n){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(n.save(),this._setupCompositeOperation(n),this.drawSelectionBackground(n),this.transform(n),this._setOpacity(n),this._setShadow(n,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(n)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(n),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),n.restore())},renderCache:function(n){n=n||{},(!this._cacheCanvas||!this._cacheContext)&&this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,n.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!!("stroke"===this.paintFirst&&this.hasFill()&&this.hasStroke()&&"object"==typeof this.shadow||this.clipPath)},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(n,l){if(n.save(),n.globalCompositeOperation=l.inverted?"destination-out":"destination-in",l.absolutePositioned){var u=r.util.invertTransform(this.calcTransformMatrix());n.transform(u[0],u[1],u[2],u[3],u[4],u[5])}l.transform(n),n.scale(1/l.zoomX,1/l.zoomY),n.drawImage(l._cacheCanvas,-l.cacheTranslationX,-l.cacheTranslationY),n.restore(
vendor: 8,534 bytes, line 1
1)},drawObject:function(n,l){var u=this.fill,d=this.stroke;l?(this.fill="black",this.stroke="",this._setClippingProperties(n)):this._renderBackground(n),this._render(n),this._drawClipPath(n,this.clipPath),this.fill=u,this.stroke=d},_drawClipPath:function(n,l){!l||(l.canvas=this.canvas,l.shouldCache(),l._transformDone=!0,l.renderCache({forClipping:!0}),this.drawClipPathOnCache(n,l))},drawCacheOnCanvas:function(n){n.scale(1/this.zoomX,1/this.zoomY),n.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(n){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!n&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!n){var l=this.cacheWidth/this.zoomX,u=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-l/2,-u/2,l,u)}return!0}return!1},_renderBackground:function(n){if(this.backgroundColor){var l=this._getNonTransformedDimensions();n.fillStyle=this.backgroundColor,n.fillRect(-l.x/2,-l.y/2,l.x,l.y),this._removeShadow(n)}},_setOpacity:function(n){this.group&&!this.group._transformDone?n.globalAlpha=this.getObjectOpacity():n.globalAlpha*=this.opacity},_setStrokeStyles:function(n,l){var u=l.stroke;u&&(n.lineWidth=l.strokeWidth,n.lineCap=l.strokeLineCap,n.lineDashOffset=l.strokeDashOffset,n.lineJoin=l.strokeLineJoin,n.miterLimit=l.strokeMiterLimit,u.toLive?"percentage"===u.gradientUnits||u.gradientTransform||u.patternTransform?this._applyPatternForTransformedGradient(n,u):(n.strokeStyle=u.toLive(n,this),this._applyPatternGradientTransform(n,u)):n.strokeStyle=l.stroke)},_setFillStyles:function(n,l){var u=l.fill;u&&(u.toLive?(n.fillStyle=u.toLive(n,this),this._applyPatternGradientTransform(n,l.fill)):n.fillStyle=u)},_setClippingProperties:function(n){n.globalAlpha=1,n.strokeStyle="transparent",n.fillStyle="#000000"},_setLineDash:function(n,l){!l||0===l.length||(1&l.length&&l.push.apply(l,l),n.setLineDash(l))},_renderControls:function(n,l){var g,v,p,u=this.getViewportTransform(),d=this.calcTransformMatrix();v=void 0!==(l=l||{}).hasBorders?l.hasBorders:this.hasBorders,p=void 0!==l.hasControls?l.hasControls:this.hasControls,d=r.util.multiplyTransformMatrices(u,d),g=r.util.qrDecompose(d),n.save(),n.translate(g.translateX,g.translateY),n.lineWidth=1*this.borderScaleFactor,this.group||(n.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(g.angle-=180),n.rotate(t(this.group?g.angle:this.angle)),l.forActiveSelection||this.group?v&&this.drawBordersInGroup(n,g,l):v&&this.drawBorders(n,l),p&&this.drawControls(n,l),n.restore()},_setShadow:function(n){if(this.shadow){var d,l=this.shadow,u=this.canvas,g=u&&u.viewportTransform[0]||1,v=u&&u.viewportTransform[3]||1;d=l.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),u&&u._isRetinaScaling()&&(g*=r.devicePixelRatio,v*=r.devicePixelRatio),n.shadowColor=l.color,n.shadowBlur=l.blur*r.browserShadowBlurConstant*(g+v)*(d.scaleX+d.scaleY)/4,n.shadowOffsetX=l.offsetX*g*d.scaleX,n.shadowOffsetY=l.offsetY*v*d.scaleY}},_removeShadow:function(n){!this.shadow||(n.shadowColor="",n.shadowBlur=n.shadowOffsetX=n.shadowOffsetY=0)},_applyPatternGradientTransform:function(n,l){if(!l||!l.toLive)return{offsetX:0,offsetY:0};var u=l.gradientTransform||l.patternTransform,d=-this.width/2+l.offsetX||0,g=-this.height/2+l.offsetY||0;return"percentage"===l.gradientUnits?n.transform(this.width,0,0,this.height,d,g):n.transform(1,0,0,1,d,g),u&&n.transform(u[0],u[1],u[2],u[3],u[4],u[5]),{offsetX:d,offsetY:g}},_renderPaintInOrder:function(n){"stroke"===this.paintFirst?(this._renderStroke(n),this._renderFill(n)):(this._renderFill(n),this._renderStroke(n))},_render:function(){},_renderFill:function(n){!this.fill||(n.save(),this._setFillStyles(n,this),"evenodd"===this.fillRule?n.fill("evenodd"):n.fill(),n.restore())},_renderStroke:function(n){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(n),n.save(),this.strokeUniform&&this.group){var l=this.getObjectScaling();n.scale(1/l.scaleX,1/l.scaleY)}else this.strokeUniform&&n.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(n,this.strokeDashArray),this._setStrokeStyles(n,this),n.stroke(),n.restore()}},_applyPatternForTransformedGradient:function(n,l){var g,u=this._limitCacheSize(this._getCacheCanvasDimensions()),d=r.util.createCanvasElement(),v=this.canvas.getRetinaScaling(),p=u.x/this.scaleX/v,y=u.y/this.scaleY/v;d.width=Math.ceil(p),d.height=Math.ceil(y),(g=d.getContext("2d")).beginPath(),g.moveTo(0,0),g.lineTo(p,0),g.lineTo(p,y),g.lineTo(0,y),g.closePath(),g.translate(p/2,y/2),g.scale(u.zoomX/this.scaleX/v,u.zoomY/this.scaleY/v),this._applyPatternGradientTransform(g,l),g.fillStyle=l.toLive(n),g.fill(),n.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),n.scale(v*this.scaleX/u.zoomX,v*this.scaleY/u.zoomY),n.strokeStyle=g.createPattern(d,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var n=r.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",n.scaleX),this.set("scaleY",n.scaleY),this.angle=n.angle,this.skewX=n.skewX,this.skewY=0}},_removeTransformMatrix:function(n){var l=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),l=r.util.transformPoint(l,this.transformMatrix)),this.transformMatrix=null,n&&(this.scaleX*=n.scaleX,this.scaleY*=n.scaleY,this.cropX=n.cropX,this.cropY=n.cropY,l.x+=n.offsetLeft,l.y+=n.offsetTop,this.width=n.width,this.height=n.height),this.setPositionByOrigin(l,"center","center")},clone:function(n,l){var u=this.toObject(l);this.constructor.fromObject?this.constructor.fromObject(u,n):r.Object._fromObject("Object",u,n)},cloneAsImage:function(n,l){var u=this.toCanvasElement(l);return n&&n(new r.Image(u)),this},toCanvasElement:function(n){n||(n={});var l=r.util,u=l.saveObjectTransform(this),d=this.group,g=this.shadow,v=Math.abs,p=(n.multiplier||1)*(n.enableRetinaScaling?r.devicePixelRatio:1);delete this.group,n.withoutTransform&&l.resetObjectTransform(this),n.withoutShadow&&(this.shadow=null);var b,F,W,y=r.util.createCanvasElement(),m=this.getBoundingRect(!0,!0),_=this.shadow,A={x:0,y:0};_&&(F=_.blur,b=_.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),A.x=2*Math.round(v(_.offsetX)+F)*v(b.scaleX),A.y=2*Math.round(v(_.offsetY)+F)*v(b.scaleY)),W=m.height+A.y,y.width=Math.ceil(m.width+A.x),y.height=Math.ceil(W);var X=new r.StaticCanvas(y,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===n.format&&(X.backgroundColor="#fff"),this.setPositionByOrigin(new r.Point(X.width/2,X.height/2),"center","center");var tt=this.canvas;X.add(this);var q=X.toCanvasElement(p||1,n);return this.shadow=g,this.set("canvas",tt),d&&(this.group=d),this.set(u).setCoords(),X._objects=[],X.dispose(),X=null,q},toDataURL:function(n){return n||(n={}),r.util.toDataURL(this.toCanvasElement(n),n.format||"png",n.quality||1)},isType:function(n){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===n},complexity:function(){return 1},toJSON:function(n){return this.toObject(n)},rotate:function(n){var l=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return l&&this._setOriginToCenter(),this.set("angle",n),l&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(n,l){l=l||this.canvas.getPointer(n);var u=new r.Point(l.x,l.y),d=this._getLeftTopCoords();return this.angle&&(u=r.util.rotatePoint(u,d,t(-this.angle))),{x:u.x-d.x,y:u.y-d.y}},_setupCompositeOperation:function(n){this.globalCompositeOperation&&(n.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){r.runningAnimations&&r.runningAnimations.cancelByTarget(this)}}),r.util.createAccessors&&r.util.createAccessors(r.Object),o(r.Object.prototype,r.Observable),r.Object.NUM_FRACTION_DIGITS=2,r.Object.ENLIVEN_PROP
1S=["clipPath"],r.Object._fromObject=function(n,l,u,d){var g=r[n];l=h(l,!0),r.util.enlivenPatterns([l.fill,l.stroke],function(v){void 0!==v[0]&&(l.fill=v[0]),void 0!==v[1]&&(l.stroke=v[1]),r.util.enlivenObjectEnlivables(l,l,function(){var p=d?new g(l[d],l):new g(l);u&&u(p)})})},r.Object.__uid=0)}(P),function(){var c=f.util.degreesToRadians,r={left:-.5,center:0,right:.5},o={top:-.5,center:0,bottom:.5};f.util.object.extend(f.Object.prototype,{translateToGivenOrigin:function(h,e,i,t,s){var l,u,d,a=h.x,n=h.y;return"string"==typeof e?e=r[e]:e-=.5,"string"==typeof t?t=r[t]:t-=.5,"string"==typeof i?i=o[i]:i-=.5,"string"==typeof s?s=o[s]:s-=.5,u=s-i,((l=t-e)||u)&&(d=this._getTransformedDimensions(),a=h.x+l*d.x,n=h.y+u*d.y),new f.Point(a,n)},translateToCenterPoint:function(h,e,i){var t=this.translateToGivenOrigin(h,e,i,"center","center");return this.angle?f.util.rotatePoint(t,h,c(this.angle)):t},translateToOriginPoint:function(h,e,i){var t=this.translateToGivenOrigin(h,"center","center",e,i);return this.angle?f.util.rotatePoint(t,h,c(this.angle)):t},getCenterPoint:function(){var h=new f.Point(this.left,this.top);return this.translateToCenterPoint(h,this.originX,this.originY)},getPointByOrigin:function(h,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,h,e)},toLocalPoint:function(h,e,i){var s,a,t=this.getCenterPoint();return s=void 0!==e&&void 0!==i?this.translateToGivenOrigin(t,"center","center",e,i):new f.Point(this.left,this.top),a=new f.Point(h.x,h.y),this.angle&&(a=f.util.rotatePoint(a,t,-c(this.angle))),a.subtractEquals(s)},setPositionByOrigin:function(h,e,i){var t=this.translateToCenterPoint(h,e,i),s=this.translateToOriginPoint(t,this.originX,this.originY);this.set("left",s.x),this.set("top",s.y)},adjustPosition:function(h){var a,n,e=c(this.angle),i=this.getScaledWidth(),t=f.util.cos(e)*i,s=f.util.sin(e)*i;this.left+=t*((n="string"==typeof h?r[h]:h-.5)-(a="string"==typeof this.originX?r[this.originX]:this.originX-.5)),this.top+=s*(n-a),this.setCoords(),this.originX=h},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var h=this.getCenterPoint();this.originX="center",this.originY="center",this.left=h.x,this.top=h.y},_resetOrigin:function(){var h=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=h.x,this.top=h.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){var r=f.util,o=r.degreesToRadians,h=r.multiplyTransformMatrices,e=r.transformPoint;r.object.extend(f.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(i,t){return t?i?this.calcACoords():this.calcLineCoords():((!this.aCoords||!this.lineCoords)&&this.setCoords(!0),i?this.aCoords:this.lineCoords)},getCoords:function(i,t){return function c(i){return[new f.Point(i.tl.x,i.tl.y),new f.Point(i.tr.x,i.tr.y),new f.Point(i.br.x,i.br.y),new f.Point(i.bl.x,i.bl.y)]}(this._getCoords(i,t))},intersectsWithRect:function(i,t,s,a){var n=this.getCoords(s,a);return"Intersection"===f.Intersection.intersectPolygonRectangle(n,i,t).status},intersectsWithObject:function(i,t,s){return"Intersection"===f.Intersection.intersectPolygonPolygon(this.getCoords(t,s),i.getCoords(t,s)).status||i.isContainedWithinObject(this,t,s)||this.isContainedWithinObject(i,t,s)},isContainedWithinObject:function(i,t,s){for(var a=this.getCoords(t,s),l=0,u=i._getImageLines(t?i.aCoords:i.lineCoords);l<4;l++)if(!i.containsPoint(a[l],u))return!1;return!0},isContainedWithinRect:function(i,t,s,a){var n=this.getBoundingRect(s,a);return n.left>=i.x&&n.left+n.width<=t.x&&n.top>=i.y&&n.top+n.height<=t.y},containsPoint:function(i,l,s,a){var n=this._getCoords(s,a),u=(l=l||this._getImageLines(n),this._findCrossPoints(i,l));return 0!==u&&u%2==1},isOnScreen:function(i){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,s=this.canvas.vptCoords.br;return!(!this.getCoords(!0,i).some(function(n){return n.x<=s.x&&n.x>=t.x&&n.y<=s.y&&n.y>=t.y})&&!this.intersectsWithRect(t,s,!0,i))||this._containsCenterOfCanvas(t,s,i)},_containsCenterOfCanvas:function(i,t,s){return!!this.containsPoint({x:(i.x+t.x)/2,y:(i.y+t.y)/2},null,!0,s)},isPartiallyOnScreen:function(i){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,s=this.canvas.vptCoords.br;return!!this.intersectsWithRect(t,s,!0,i)||this.getCoords(!0,i).every(function(n){return(n.x>=s.x||n.x<=t.x)&&(n.y>=s.y||n.y<=t.y)})&&this._containsCenterOfCanvas(t,s,i)},_getImageLines:function(i){return{topline:{o:i.tl,d:i.tr},rightline:{o:i.tr,d:i.br},bottomline:{o:i.br,d:i.bl},leftline:{o:i.bl,d:i.tl}}},_findCrossPoints:function(i,t){var a,n,l,u,g,d=0;for(var v in t)if(!((g=t[v]).o.y<i.y&&g.d.y<i.y||g.o.y>=i.y&&g.d.y>=i.y||(g.o.x===g.d.x&&g.o.x>=i.x?u=g.o.x:(a=(g.d.y-g.o.y)/(g.d.x-g.o.x),n=i.y-0*i.x,l=g.o.y-a*g.o.x,u=-(n-l)/(0-a)),u>=i.x&&(d+=1),2!==d)))break;return d},getBoundingRect:function(i,t){var s=this.getCoords(i,t);return r.makeBoundingBoxFromPoints(s)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(i){return Math.abs(i)<this.minScaleLimit?i<0?-this.minScaleLimit:this.minScaleLimit:0===i?1e-4:i},scale:function(i){return this._set("scaleX",i),this._set("scaleY",i),this.setCoords()}
vendor: 4,973 bytes, line 1
1,scaleToWidth:function(i,t){var s=this.getBoundingRect(t).width/this.getScaledWidth();return this.scale(i/this.width/s)},scaleToHeight:function(i,t){var s=this.getBoundingRect(t).height/this.getScaledHeight();return this.scale(i/this.height/s)},calcLineCoords:function(){var i=this.getViewportTransform(),t=this.padding,s=o(this.angle),l=r.cos(s)*t,u=r.sin(s)*t,d=l+u,g=l-u,v=this.calcACoords(),p={tl:e(v.tl,i),tr:e(v.tr,i),bl:e(v.bl,i),br:e(v.br,i)};return t&&(p.tl.x-=g,p.tl.y-=d,p.tr.x+=d,p.tr.y-=g,p.bl.x-=d,p.bl.y+=g,p.br.x+=g,p.br.y+=d),p},calcOCoords:function(){var i=this._calcRotateMatrix(),t=this._calcTranslateMatrix(),s=this.getViewportTransform(),a=h(s,t),n=h(a,i),l=(n=h(n,[1/s[0],0,0,1/s[3],0,0]),this._calculateCurrentDimensions()),u={};return this.forEachControl(function(d,g,v){u[g]=d.positionHandler(l,n,v)}),u},calcACoords:function(){var i=this._calcRotateMatrix(),t=this._calcTranslateMatrix(),s=h(t,i),a=this._getTransformedDimensions(),n=a.x/2,l=a.y/2;return{tl:e({x:-n,y:-l},s),tr:e({x:n,y:-l},s),bl:e({x:-n,y:l},s),br:e({x:n,y:l},s)}},setCoords:function(i){return this.aCoords=this.calcACoords(),this.lineCoords=this.group?this.aCoords:this.calcLineCoords(),i||(this.oCoords=this.calcOCoords(),this._setCornerCoords&&this._setCornerCoords()),this},_calcRotateMatrix:function(){return r.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var i=this.getCenterPoint();return[1,0,0,1,i.x,i.y]},transformMatrixKey:function(i){var t="_",s="";return!i&&this.group&&(s=this.group.transformMatrixKey(i)+t),s+this.top+t+this.left+t+this.scaleX+t+this.scaleY+t+this.skewX+t+this.skewY+t+this.angle+t+this.originX+t+this.originY+t+this.width+t+this.height+t+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(i){var t=this.calcOwnMatrix();if(i||!this.group)return t;var s=this.transformMatrixKey(i),a=this.matrixCache||(this.matrixCache={});return a.key===s?a.value:(this.group&&(t=h(this.group.calcTransformMatrix(!1),t)),a.key=s,a.value=t,t)},calcOwnMatrix:function(){var i=this.transformMatrixKey(!0),t=this.ownMatrixCache||(this.ownMatrixCache={});if(t.key===i)return t.value;var s=this._calcTranslateMatrix(),a={angle:this.angle,translateX:s[4],translateY:s[5],scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY};return t.key=i,t.value=r.composeMatrix(a),t.value},_getNonTransformedDimensions:function(){var i=this.strokeWidth;return{x:this.width+i,y:this.height+i}},_getTransformedDimensions:function(i,t){void 0===i&&(i=this.skewX),void 0===t&&(t=this.skewY);var s,a,n,l=0===i&&0===t;if(this.strokeUniform?(a=this.width,n=this.height):(a=(s=this._getNonTransformedDimensions()).x,n=s.y),l)return this._finalizeDimensions(a*this.scaleX,n*this.scaleY);var u=r.sizeAfterTransform(a,n,{scaleX:this.scaleX,scaleY:this.scaleY,skewX:i,skewY:t});return this._finalizeDimensions(u.x,u.y)},_finalizeDimensions:function(i,t){return this.strokeUniform?{x:i+this.strokeWidth,y:t+this.strokeWidth}:{x:i,y:t}},_calculateCurrentDimensions:function(){var i=this.getViewportTransform(),t=this._getTransformedDimensions();return e(t,i,!0).scalarAdd(2*this.padding)}})}(),f.util.object.extend(f.Object.prototype,{sendToBack:function(){return this.group?f.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?f.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(c){return this.group?f.StaticCanvas.prototype.sendBackwards.call(this.group,this,c):this.canvas&&this.canvas.sendBackwards(this,c),this},bringForward:function(c){return this.group?f.StaticCanvas.prototype.bringForward.call(this.group,this,c):this.canvas&&this.canvas.bringForward(this,c),this},moveTo:function(c){return this.group&&"activeSelection"!==this.group.type?f.StaticCanvas.prototype.moveTo.call(this.group,this,c):this.canvas&&this.canvas.moveTo(this,c),this}}),function(){function c(o,h){if(h){if(h.toLive)return o+": url(#SVGID_"+h.id+"); ";var e=new f.Color(h),i=o+": "+e.toRgb()+"; ",t=e.getAlpha();return 1!==t&&(i+=o+"-opacity: "+t.toString()+"; "),i}return o+": none; "}var r=f.util.toFixed;f.util.object.extend(f.Object.prototype,{getSvgStyles:function(o){var h=this.fillRule?this.fillRule:"nonzero",e=this.strokeWidth?this.strokeWidth:"0",i=this.strokeDashArray?this.strokeDashArray.join(" "):"none",t=this.strokeDashOffset?this.strokeDashOffset:"0",s=this.strokeLineCap?this.strokeLineCap:"butt",a=this.strokeLineJoin?this.strokeLineJoin:"miter",n=this.strokeMiterLimit?this.strokeMiterLimit:"4",l=void 0!==this.opacity?this.opacity:"1",u=this.visible?"":" visibility: hidden;",d=o?"":this.getSvgFilter(),g=c("fill",this.fill);return[c("stroke",this.stroke),"stroke-width: ",e,"; ","stroke-dasharray: ",i,"; ","stroke-linecap: ",s,"; ","stroke-dashoffset: ",t,"; ","stroke-linejoin: ",a,"; ","stroke-miterlimit: ",n,"; ",g,"fill-rule: ",h,";
1 ","opacity: ",l,";",d,u].join("")},getSvgSpanStyles:function(o,h){var e="; ",t=o.fontFamily?"font-family: "+(-1===o.fontFamily.indexOf("'")&&-1===o.fontFamily.indexOf('"')?"'"+o.fontFamily+"'":o.fontFamily)+e:"",i=o.strokeWidth?"stroke-width: "+o.strokeWidth+e:"",s=o.fontSize?"font-size: "+o.fontSize+"px"+e:"",a=o.fontStyle?"font-style: "+o.fontStyle+e:"",n=o.fontWeight?"font-weight: "+o.fontWeight+e:"",l=o.fill?c("fill",o.fill):"",u=o.stroke?c("stroke",o.stroke):"",d=this.getSvgTextDecoration(o);return d&&(d="text-decoration: "+d+e),[u,i,t,s,a,n,d,l,o.deltaY?"baseline-shift: "+-o.deltaY+"; ":"",h?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(o){return["overline","underline","line-through"].filter(function(h){return o[h.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(o,h){var e=o?this.calcTransformMatrix():this.calcOwnMatrix();return'transform="'+f.util.matrixToSVG(e)+(h||"")+'" '},_setSVGBg:function(o){if(this.backgroundColor){var h=f.Object.NUM_FRACTION_DIGITS;o.push("\t\t<rect ",this._getFillAttributes(this.backgroundColor),' x="',r(-this.width/2,h),'" y="',r(-this.height/2,h),'" width="',r(this.width,h),'" height="',r(this.height,h),'"></rect>\n')}},toSVG:function(o){return this._createBaseSVGMarkup(this._toSVG(o),{reviver:o})},toClipPathSVG:function(o){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(o),{reviver:o})},_createBaseClipPathSVGMarkup:function(o,h){var e=(h=h||{}).reviver,t=[this.getSvgTransform(!0,h.additionalTransform||""),this.getSvgCommons()].join(""),s=o.indexOf("COMMON_PARTS");return o[s]=t,e?e(o.join("")):o.join("")},_createBaseSVGMarkup:function(o,h){var v,y,e=(h=h||{}).noStyle,i=h.reviver,t=e?"":'style="'+this.getSvgStyles()+'" ',s=h.withShadow?'style="'+this.getSvgFilter()+'" ':"",a=this.clipPath,n=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",l=a&&a.absolutePositioned,u=this.stroke,d=this.fill,g=this.shadow,p=[],m=o.indexOf("COMMON_PARTS"),_=h.additionalTransform;return a&&(a.clipPathId="CLIPPATH_"+f.Object.__uid++,y='<clipPath id="'+a.clipPathId+'" >\n'+a.toClipPathSVG(i)+"</clipPath>\n"),l&&p.push("<g ",s,this.getSvgCommons()," >\n"),p.push("<g ",this.getSvgTransform(!1),l?"":s+this.getSvgCommons()," >\n"),v=[t,n,e?"":this.addPaintOrder()," ",_?'transform="'+_+'" ':""].join(""),o[m]=v,d&&d.toLive&&p.push(d.toSVG(this)),u&&u.toLive&&p.push(u.toSVG(this)),g&&p.push(g.toSVG(this)),a&&p.push(y),p.push(o.join("")),p.push("</g>\n"),l&&p.push("</g>\n"),i?i(p.join("")):p.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var c=f.util.object.extend,r="stateProperties";function o(e,i,t){var s={};t.forEach(function(n){s[n]=e[n]}),c(e[i],s,!0)}function h(e,i,t){if(e===i)return!0;if(Array.isArray(e)){if(!Array.isArray(i)||e.length!==i.length)return!1;for(var s=0,a=e.length;s<a;s++)if(!h(e[s],i[s]))return!1;return!0}if(e&&"object"==typeof e){var l,n=Object.keys(e);if(!i||"object"!=typeof i||!t&&n.length!==Object.keys(i).length)return!1;for(s=0,a=n.length;s<a;s++)if("canvas"!==(l=n[s])&&"group"!==l&&!h(e[l],i[l]))return!1;return!0}}f.util.object.extend(f.Object.prototype,{hasStateChanged:function(e){var i="_"+(e=e||r);return Object.keys(this[i]).length<this[e].length||!h(this[i],this,!0)},saveState:function(e){var i=e&&e.propertySet||r,t="_"+i;return this[t]?(o(this,t,this[i]),e&&e.stateProperties&&o(this,t,e.stateProperties),this):this.setupState(e)},setupState:function(e){var i=(e=e||{}).propertySet||r;return e.propertySet=i,this["_"+i]={},this.saveState(e),this}})}(),function(){var c=f.util.degreesToRadians;f.util.object.extend(f.Object.prototype,{_findTargetCorner:function(r,o){if(!this.hasControls||this.group||!this.canvas||this.canvas._activeObject!==this)return!1;var i,t,n,h=r.x,e=r.y,s=Object.keys(this.oCoords),a=s.length-1;for(this.__corner=0;a>=0;a--)if(this.isControlVisible(n=s[a])&&(t=this._getImageLines(o?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:h,y:e},t))&&i%2==1))return this.__corner=n,n;return!1}
vendor: 5,801 bytes, line 1
1,forEachControl:function(r){for(var o in this.controls)r(this.controls[o],o,this)},_setCornerCoords:function(){var r=this.oCoords;for(var o in r){var h=this.controls[o];r[o].corner=h.calcCornerCoords(this.angle,this.cornerSize,r[o].x,r[o].y,!1),r[o].touchCorner=h.calcCornerCoords(this.angle,this.touchCornerSize,r[o].x,r[o].y,!0)}},drawSelectionBackground:function(r){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;r.save();var o=this.getCenterPoint(),h=this._calculateCurrentDimensions(),e=this.canvas.viewportTransform;return r.translate(o.x,o.y),r.scale(1/e[0],1/e[3]),r.rotate(c(this.angle)),r.fillStyle=this.selectionBackgroundColor,r.fillRect(-h.x/2,-h.y/2,h.x,h.y),r.restore(),this},drawBorders:function(r,o){o=o||{};var h=this._calculateCurrentDimensions(),e=this.borderScaleFactor,i=h.x+e,t=h.y+e,s=void 0!==o.hasControls?o.hasControls:this.hasControls,a=!1;return r.save(),r.strokeStyle=o.borderColor||this.borderColor,this._setLineDash(r,o.borderDashArray||this.borderDashArray),r.strokeRect(-i/2,-t/2,i,t),s&&(r.beginPath(),this.forEachControl(function(n,l,u){n.withConnection&&n.getVisibility(u,l)&&(a=!0,r.moveTo(n.x*i,n.y*t),r.lineTo(n.x*i+n.offsetX,n.y*t+n.offsetY))}),a&&r.stroke()),r.restore(),this},drawBordersInGroup:function(r,o,h){h=h||{};var e=f.util.sizeAfterTransform(this.width,this.height,o),i=this.strokeWidth,t=this.strokeUniform,s=this.borderScaleFactor,a=e.x+i*(t?this.canvas.getZoom():o.scaleX)+s,n=e.y+i*(t?this.canvas.getZoom():o.scaleY)+s;return r.save(),this._setLineDash(r,h.borderDashArray||this.borderDashArray),r.strokeStyle=h.borderColor||this.borderColor,r.strokeRect(-a/2,-n/2,a,n),r.restore(),this},drawControls:function(r,o){o=o||{},r.save();var e,i,h=1;return this.canvas&&(h=this.canvas.getRetinaScaling()),r.setTransform(h,0,0,h,0,0),r.strokeStyle=r.fillStyle=o.cornerColor||this.cornerColor,this.transparentCorners||(r.strokeStyle=o.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(r,o.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(e=this.group.calcTransformMatrix()),this.forEachControl(function(t,s,a){i=a.oCoords[s],t.getVisibility(a,s)&&(e&&(i=f.util.transformPoint(i,e)),t.render(r,i.x,i.y,o,a))}),r.restore(),this},isControlVisible:function(r){return this.controls[r]&&this.controls[r].getVisibility(this,r)},setControlVisible:function(r,o){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[r]=o,this},setControlsVisibility:function(r){for(var o in r||(r={}),r)this.setControlVisible(o,r[o]);return this},onDeselect:function(){},onSelect:function(){}})}(),f.util.object.extend(f.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(c,r){var o=function(){},h=(r=r||{}).onComplete||o,e=r.onChange||o,i=this;return f.util.animate({target:this,startValue:c.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(t){c.set("left",t),i.requestRenderAll(),e()},onComplete:function(){c.setCoords(),h()}})},fxCenterObjectV:function(c,r){var o=function(){},h=(r=r||{}).onComplete||o,e=r.onChange||o,i=this;return f.util.animate({target:this,startValue:c.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(t){c.set("top",t),i.requestRenderAll(),e()},onComplete:function(){c.setCoords(),h()}})},fxRemove:function(c,r){var o=function(){},h=(r=r||{}).onComplete||o,e=r.onChange||o,i=this;return f.util.animate({target:this,startValue:c.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(t){c.set("opacity",t),i.requestRenderAll(),e()},onComplete:function(){i.remove(c),h()}})}}),f.util.object.extend(f.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var r,c=[],h=[];for(r in arguments[0])c.push(r);for(var e=0,i=c.length;e<i;e++)h.push(this._animate(r=c[e],arguments[0][r],arguments[1],e!==i-1));return h}return this._animate.apply(this,arguments)},_animate:function(c,r,o,h){var i,e=this;r=r.toString(),o=o?f.util.object.clone(o):{},~c.indexOf(".")&&(i=c.split("."));var t=e.colorProperties.indexOf(c)>-1||i&&e.colorProperties.indexOf(i[1])>-1,s=i?this.get(i[0])[i[1]]:this.get(c);"from"in o||(o.from=s),t||(r=~r.indexOf("=")?s+parseFloat(r.replace("=","")):parseFloat(r));var a={target:this,startValue:o.from,endValue:r,byValue:o.by,easing:o.easing,duration:o.duration,abort:o.abort&&function(n,l,u){return o.abort.call(e,n,l,u)},onChange:function(n,l,u){i?e[i[0]][i[1]]=n:e.set(c,n),!h&&o.onChange&&o.onChange(n,l,u)},onComplete:function(n,l,u){h||(e.setCoords(),o.onComplete&&o.onComplete(n,l,u))}};return t?f.util.animateColor(a.startValue,a.endValue,a.duration,a):f.util.animate(a)}}),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend,h=r.util.object.clone,e={x1:1,x2:1,y1:1,y2:1};function i(t,s){var a=t.origin,n=t.axis1,l=t.axis2,u=t.dimension,d=s.nearest,g=s.center,v=s.farthest;return function(){switch(this.get(a)){case d:return Math.min(this.get(n),this.get(l));case g:return Math.min(this.get(n),this.get(l))+.5*this.get(u);case v:return Math.max(this.get(n),this.get(l))}}}r.Line?r.warn("fabric.Line is already defined"):(r.Line=r.util.createClass(r.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:r.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,s){t||(t=[0,0,0,0]),this.callSuper("initialize",s),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(s)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,s){return this.callSuper("_set",t,s),void 0!==e[t]&&this._setWi
1dthHeight(),this},_getLeftToOriginX:i({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:i({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){t.beginPath();var s=this.calcLinePoints();t.moveTo(s.x1,s.y1),t.lineTo(s.x2,s.y2),t.lineWidth=this.strokeWidth;var a=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=a},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return o(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,s=this.y1<=this.y2?-1:1;return{x1:t*this.width*.5,x2:t*this.width*-.5,y1:s*this.height*.5,y2:s*this.height*-.5}},_toSVG:function(){var t=this.calcLinePoints();return["<line ","COMMON_PARTS",'x1="',t.x1,'" y1="',t.y1,'" x2="',t.x2,'" y2="',t.y2,'" />\n']}}),r.Line.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),r.Line.fromElement=function(t,s,a){a=a||{};var n=r.parseAttributes(t,r.Line.ATTRIBUTE_NAMES);s(new r.Line([n.x1||0,n.y1||0,n.x2||0,n.y2||0],o(n,a)))},r.Line.fromObject=function(t,s){var n=h(t,!0);n.points=[t.x1,t.y1,t.x2,t.y2],r.Object._fromObject("Line",n,function a(l){delete l.points,s&&s(l)},"points")})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.degreesToRadians;r.Circle?r.warn("fabric.Circle is already defined."):(r.Circle=r.util.createClass(r.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:r.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(e,i){return this.callSuper("_set",e,i),"radius"===e&&this.setRadius(i),this},toObject:function(e){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(e))},_toSVG:function(){var e,s=(this.endAngle-this.startAngle)%360;if(0===s)e=["<circle ","COMMON_PARTS",'cx="0" cy="0" ','r="',this.radius,'" />\n'];else{var a=o(this.startAngle),n=o(this.endAngle),l=this.radius;e=['<path d="M '+r.util.cos(a)*l+" "+r.util.sin(a)*l," A "+l+" "+l," 0 ",+(s>180?"1":"0")+" 1"," "+r.util.cos(n)*l+" "+r.util.sin(n)*l,'" ',"COMMON_PARTS"," />\n"]}return e},_render:function(e){e.beginPath(),e.arc(0,0,this.radius,o(this.startAngle),o(this.endAngle),!1),this._renderPaintInOrder(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){return this.radius=e,this.set("width",2*e).set("height",2*e)}}),r.Circle.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),r.Circle.fromElement=function(e,i){var t=r.parseAttributes(e,r.Circle.ATTRIBUTE_NAMES);if(!function h(e){return"radius"in e&&e.radius>=0}(t))throw new Error("value of `r` attribute is required and can not be negative");t.left=(t.left||0)-t.radius,t.top=(t.top||0)-t.radius,i(new r.Circle(t))},r.Circle.fromObject=function(e,i){r.Object._fromObject("Circle",e,i)})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={});r.Triangle?r.warn("fabric.Triangle is already defined"):(r.Triangle=r.util.createClass(r.Object,{type:"triangle",width:100,height:100,_render:function(o){var h=this.width/2,e=this.height/2;o.beginPath(),o.moveTo(-h,e),o.lineTo(0,-e),o.lineTo(h,e),o.closePath(),this._renderPaintInOrder(o)},_toSVG:function(){var o=this.width/2,h=this.height/2;return["<polygon ","COMMON_PARTS",'points="',[-o+" "+h,"0 "+-h,o+" "+h].join(","),'" />']}}),r.Triangle.fromObject=function(o,h){return r.Object._fromObject("Triangle",o,h)})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=2*Math.PI;r.Ellipse?r.warn("fabric.Ellipse is already defined."):(r.Ellipse=r.util.createClass(r.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:r.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(h){this.callSuper("initialize",h),this.set("rx",h&&h.rx||0),this.set("ry",h&&h.ry||0)},_set:function(h,e){switch(this.callSuper("_set",h,e),h){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(h){return this.callSuper("toObject",["rx","ry"].concat(h))},_toSVG:function(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" ','rx="',this.rx,'" ry="',this.ry,'" />\n']},_render:function(h){h.beginPath(),h.save(),h.transform(1,0,0,this.ry/this.rx,0,0),h.arc(0,0,this.rx,0,o,!1),h.restore(
vendor: 3,594 bytes, line 1
1),this._renderPaintInOrder(h)}}),r.Ellipse.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),r.Ellipse.fromElement=function(h,e){var i=r.parseAttributes(h,r.Ellipse.ATTRIBUTE_NAMES);i.left=(i.left||0)-i.rx,i.top=(i.top||0)-i.ry,e(new r.Ellipse(i))},r.Ellipse.fromObject=function(h,e){r.Object._fromObject("Ellipse",h,e)})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend;r.Rect?r.warn("fabric.Rect is already defined"):(r.Rect=r.util.createClass(r.Object,{stateProperties:r.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:r.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(h){this.callSuper("initialize",h),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(h){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,t=this.width,s=this.height,a=-this.width/2,n=-this.height/2,l=0!==e||0!==i,u=.4477152502;h.beginPath(),h.moveTo(a+e,n),h.lineTo(a+t-e,n),l&&h.bezierCurveTo(a+t-u*e,n,a+t,n+u*i,a+t,n+i),h.lineTo(a+t,n+s-i),l&&h.bezierCurveTo(a+t,n+s-u*i,a+t-u*e,n+s,a+t-e,n+s),h.lineTo(a+e,n+s),l&&h.bezierCurveTo(a+u*e,n+s,a,n+s-u*i,a,n+s-i),h.lineTo(a,n+i),l&&h.bezierCurveTo(a,n+u*i,a+u*e,n,a+e,n),h.closePath(),this._renderPaintInOrder(h)},toObject:function(h){return this.callSuper("toObject",["rx","ry"].concat(h))},_toSVG:function(){return["<rect ","COMMON_PARTS",'x="',-this.width/2,'" y="',-this.height/2,'" rx="',this.rx,'" ry="',this.ry,'" width="',this.width,'" height="',this.height,'" />\n']}}),r.Rect.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),r.Rect.fromElement=function(h,e,i){if(!h)return e(null);i=i||{};var t=r.parseAttributes(h,r.Rect.ATTRIBUTE_NAMES);t.left=t.left||0,t.top=t.top||0,t.height=t.height||0,t.width=t.width||0;var s=new r.Rect(o(i?r.util.object.clone(i):{},t));s.visible=s.visible&&s.width>0&&s.height>0,e(s)},r.Rect.fromObject=function(h,e){return r.Object._fromObject("Rect",h,e)})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend,h=r.util.array.min,e=r.util.array.max,i=r.util.toFixed,t=r.util.projectStrokeOnPoints;r.Polyline?r.warn("fabric.Polyline is already defined"):(r.Polyline=r.util.createClass(r.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:r.Object.prototype.cacheProperties.concat("points"),initialize:function(s,a){a=a||{},this.points=s||[],this.callSuper("initialize",a),this._setPositionDimensions(a)},_projectStrokeOnPoints:function(){return t(this.points,this,!0)},_setPositionDimensions:function(s){var n,a=this._calcDimensions(s),l=this.exactBoundingBox?this.strokeWidth:0;this.width=a.width-l,this.height=a.height-l,s.fromSVG||(n=this.translateToGivenOrigin({x:a.left-this.strokeWidth/2+l/2,y:a.top-this.strokeWidth/2+l/2},"left","top",this.originX,this.originY)),void 0===s.left&&(this.left=s.fromSVG?a.left:n.x),void 0===s.top&&(this.top=s.fromSVG?a.top:n.y),this.pathOffset={x:a.left+this.width/2+l/2,y:a.top+this.height/2+l/2}},_calcDimensions:function(){var s=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,a=h(s,"x")||0,n=h(s,"y")||0;return{left:a,top:n,width:(e(s,"x")||0)-a,height:(e(s,"y")||0)-n}},toObject:function(s){return o(this.callSuper("toObject",s),{points:this.points.concat()})},_toSVG:function(){for(var s=[],a=this.pathOffset.x,n=this.pathOffset.y,l=r.Object.NUM_FRACTION_DIGITS,u=0,d=this.points.length;u<d;u++)s.push(i(this.points[u].x-a,l),",",i(this.points[u].y-n,l)," ");
1return["<"+this.type+" ","COMMON_PARTS",'points="',s.join(""),'" />\n']},commonRender:function(s){var a,n=this.points.length,l=this.pathOffset.x,u=this.pathOffset.y;if(!n||isNaN(this.points[n-1].y))return!1;s.beginPath(),s.moveTo(this.points[0].x-l,this.points[0].y-u);for(var d=0;d<n;d++)s.lineTo((a=this.points[d]).x-l,a.y-u);return!0},_render:function(s){!this.commonRender(s)||this._renderPaintInOrder(s)},complexity:function(){return this.get("points").length}}),r.Polyline.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat(),r.Polyline.fromElementGenerator=function(s){return function(a,n,l){if(!a)return n(null);l||(l={});var u=r.parsePointsAttribute(a.getAttribute("points")),d=r.parseAttributes(a,r[s].ATTRIBUTE_NAMES);d.fromSVG=!0,n(new r[s](u,o(d,l)))}},r.Polyline.fromElement=r.Polyline.fromElementGenerator("Polyline"),r.Polyline.fromObject=function(s,a){return r.Object._fromObject("Polyline",s,a,"points")})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.projectStrokeOnPoints;r.Polygon?r.warn("fabric.Polygon is already defined"):(r.Polygon=r.util.createClass(r.Polyline,{type:"polygon",_projectStrokeOnPoints:function(){return o(this.points,this)},_render:function(h){!this.commonRender(h)||(h.closePath(),this._renderPaintInOrder(h))}}),r.Polygon.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat(),r.Polygon.fromElement=r.Polyline.fromElementGenerator("Polygon"),r.Polygon.fromObject=function(h,e){r.Object._fromObject("Polygon",h,e,"points")})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.array.min,h=r.util.array.max,e=r.util.object.extend,i=r.util.object.clone,t=r.util.toFixed;r.Path?r.warn("fabric.Path is already defined"):(r.Path=r.util.createClass(r.Object,{type:"path",path:null,cacheProperties:r.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:r.Object.prototype.stateProperties.concat("path"),initialize:function(s,a){delete(a=i(a||{})).path,this.callSuper("initialize",a),this._setPath(s||[],a)},_setPath:function(s,a){this.path=r.util.makePathSimpler(Array.isArray(s)?s:r.util.parsePath(s)),r.Polyline.prototype._setPositionDimensions.call(this,a||{})},_renderPathCommands:function(s){var a,n=0,l=0,u=0,d=0,p=-this.pathOffset.x,y=-this.pathOffset.y;s.beginPath();for(var m=0,_=this.path.length;m<_;++m)switch(a=this.path[m],a[0]){case"L":s.lineTo((u=a[1])+p,(d=a[2])+y);break;case"M":n=u=a[1],l=d=a[2],s.moveTo(u+p,d+y);break;case"C":s.bezierCurveTo(a[1]+p,a[2]+y,a[3]+p,a[4]+y,(u=a[5])+p,(d=a[6])+y);break;case"Q":s.quadraticCurveTo(a[1]+p,a[2]+y,a[3]+p,a[4]+y),u=a[3],d=a[4];break;case"z":case"Z":u=n,d=l,s.closePath()}},_render:function(s){this._renderPathCommands(s),this._renderPaintInOrder(s)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(s){return e(this.callSuper("toObject",s),{path:this.path.map(function(a){return a.slice()})})},toDatalessObject:function(s){var a=this.toObject(["sourcePath"].concat(s));return a.sourcePath&&delete a.path,a},_toSVG:function(){return["<path ","COMMON_PARTS",'d="',r.util.joinPath(this.path),'" stroke-linecap="round" ',"/>\n"]},_getOffsetTransform:function(){var s=r.Object.NUM_FRACTION_DIGITS;return" translate("+t(-this.pathOffset.x,s)+", "+t(-this.pathOffset.y,s)+")"},toClipPathSVG:function(s){var a=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:s,additionalTransform:a})},toSVG:function(s){var a=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:s,additionalTransform:a})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var n,v,s=[],a=[],l=0,u=0,d=0,g=0,p=0,y=this.path.length;p<y;++p){switch((n=this.path[p])[0]){case"L":d=n[1],g=n[2],v=[];break;case"M":l=d=n[1],u=g=n[2],v=[];break;case"C":v=r.util.getBoundsOfCurve(d,g,n[1],n[2],n[3],n[4],n[5],n[6]),d=n[5],g=n[6];break;case"Q":v=r.util.getBoundsOfCurve(d,g,n[1],n[2],n[1],n[2],n[3],n[4]),d=n[3],g=n[4];break;case"z":case"Z":d=l,g=u}v.forEach(function(W){s.push(W.x),a.push(W.y)}),s.push(d),a.push(g)}var m=o(s)||0,_=o(a)||0;return{left:m,top:_,width:(h(s)||0)-m,height:(h(a)||0)-_}}}),r.Path.fromObject=function(s,a){"string"==typeof s.sourcePath?r.loadSVGFromURL(s.sourcePath,function(l){var u=l[0];u.setOptions(s),s.clipPath?r.util.enlivenObjects([s.clipPath],function(d){u.clipPath=d[0],a&&a(u)}):a&&a(u)}):r.Object._fromObject("Path",s,a,"path")},r.Path.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat(["d"]),r.Path.fromElement=function(s,a,n){var l=r.parseAttributes(s,r.Path.ATTRIBUTE_NAMES);l.fromSVG=!0,a(new r.Path(l.d,e(l,n)))})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.array.min,h=r.util.array.max;r.Group||(r.Group=r.util.createClass(r.Object,r.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(e,i,t){i=i||{},this._objects=[],t&&this.callSuper("initialize",i),this._objects=e||[];for(var s=this._objects.length;s--;)this._objects[s].group=this;if(t)this._updateObjectsACoords();else{var a=i&&i.centerPoint;void 0!==i.originX&&(this.originX=i.originX),void 0!==i.originY&&(this.originY=i.originY),a||this._calcBounds(),this._updateObjectsCoords(a),delete i.centerPoint,this.callSuper("initialize",i)}this.setCoords()},_updateObjectsACoords:function(){for(var i=this._objects.length;i--;)this._objects[i].setCoords(!0)},_updateObjectsCoords:function(i){i=i||this.getCenterPoint();for(var t=this._objects.length;t--;)this._updateObjectCoords(this._objects[t],i)},_updateObjectCoords:function(e,i){e.set({left:e.left-i.x,top:e.top-i.y}),e.group=this,e.setCoords(!0)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(e){var i=!!this.group;return this._restoreObjectsState(),r.util.resetObjectTransform(this),e&&(i&&r.util.removeTransformFromObject(e,this.group.calcTransformMatrix()),this._objects.push(e),e.group=this,e._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),r.util.resetObjectTransform(this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(e){this.dirty=!0,e.group=this,e._set("canvas",this.canvas)},_onObjectRemoved:function(e){this.dirty=!0,delete e.group},_set:function(e,i){var t=this._objects.length;if(this.useSetOnGroup)for(;t--;)this._objects[t].setOnGroup(e,i);if("canvas"===e)for(;t--;)this._objects[t]._set(e,i);r.Object.prototype._set.call(this,e,i)},toObject:function(e){var i=this.includeDefaultValues,t=this._objects.filter(function(a){return!a.excludeFromExport}).map(function(a){var n=a.includeDefaultValues;a.includeDefaultValues=i;var l=a.toObject(e);return a.includeDefaultValues=n,l}),s=r.Object.prototype.toObject.call(this,e);return s.objects=t,s},toDatalessObject:function(e){var i,t=this.sourcePath;if(t)i=t;else{var s=this.includeDefaultValues;i=this._objects.map(function(n){var l=n.includeDefaultValues;n.includeDefaultValues=s;var u=n.toDatalessObject(e);return n.includeDefaultValues=l,u})}var a=r.Object.prototype.toDatalessObject.call(this,e);return a.objects=i,a},render:function(e){this._transformDone=!0,this.callSuper("render",e),this._transformDone=!1},shouldCache:function(){var e=r.Object.prototype.shouldCache.call(this);if(e)for(var i=0,t=this._objects.length;i<t;i++)if(this._objects[i].willDrawShadow())return this.ownCaching=!1,!1;return e},willDrawShadow:function(){if(r.Object.prototype.willDrawShadow.call(this))return!0;for(var e=0,i=this._objects.length;e<i;e++)if(this._objects[e].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(e){for(var i=0,t=this._objects.length;i<t;i++)this._objects[i].render(e);this._drawClipPath(e,this.clipPath)},isCacheDirty:function(e){if(this.callSuper("isCacheDirty",e))return!0;
1if(!this.statefullCache)return!1;for(var i=0,t=this._objects.length;i<t;i++)if(this._objects[i].isCacheDirty(!0)){if(this._cacheCanvas){var s=this.cacheWidth/this.zoomX,a=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-s/2,-a/2,s,a)}return!0}return!1},_restoreObjectsState:function(){var e=this.calcOwnMatrix();return this._objects.forEach(function(i){r.util.addTransformToObject(i,e),delete i.group,i.setCoords()}),this},destroy:function(){return this._objects.forEach(function(e){e.set("dirty",!0)}),this._restoreObjectsState()},dispose:function(){this.callSuper("dispose"),this.forEachObject(function(e){e.dispose&&e.dispose()}),this._objects=[]},toActiveSelection:function(){if(this.canvas){var e=this._objects,i=this.canvas;this._objects=[];var t=this.toObject();delete t.objects;var s=new r.ActiveSelection([]);return s.set(t),s.type="activeSelection",i.remove(this),e.forEach(function(a){a.group=s,a.dirty=!0,i.add(a)}),s.canvas=i,s._objects=e,i._activeObject=s,s.setCoords(),s}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){return this.forEachObject(function(i){i.setCoords(!0)}),this},_calcBounds:function(e){for(var s,a,n,g,i=[],t=[],l=["tr","br","bl","tl"],u=0,d=this._objects.length,v=l.length;u<d;++u){for(n=(s=this._objects[u]).calcACoords(),g=0;g<v;g++)i.push(n[a=l[g]].x),t.push(n[a].y);s.aCoords=n}this._getBounds(i,t,e)},_getBounds:function(e,i,t){var s=new r.Point(o(e),o(i)),a=new r.Point(h(e),h(i)),n=s.y||0,l=s.x||0,d=a.y-s.y||0;this.width=a.x-s.x||0,this.height=d,t||this.setPositionByOrigin({x:l,y:n},"left","top")},_toSVG:function(e){for(var i=["<g ","COMMON_PARTS"," >\n"],t=0,s=this._objects.length;t<s;t++)i.push("\t\t",this._objects[t].toSVG(e));return i.push("</g>\n"),i},getSvgStyles:function(){var i=this.visible?"":" visibility: hidden;";return[void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",this.getSvgFilter(),i].join("")},toClipPathSVG:function(e){for(var i=[],t=0,s=this._objects.length;t<s;t++)i.push("\t",this._objects[t].toClipPathSVG(e));return this._createBaseClipPathSVGMarkup(i,{reviver:e})}}),r.Group.fromObject=function(e,i){var t=e.objects,s=r.util.object.clone(e,!0);delete s.objects,"string"!=typeof t?r.util.enlivenObjects(t,function(a){r.util.enlivenObjectEnlivables(e,s,function(){i&&i(new r.Group(a,s,!0))})}):r.loadSVGFromURL(t,function(a){var n=r.util.groupSVGElements(a,e,t),l=s.clipPath;delete s.clipPath,n.set(s),l?r.util.enlivenObjects([l],function(u){n.clipPath=u[0],i&&i(n)}):i&&i(n)})})}(P),function(c){"use strict";var r=c.fabric||(c.fabric={});r.ActiveSelection||(r.ActiveSelection=r.util.createClass(r.Group,{type:"activeSelection",initialize:function(o,h){h=h||{},this._objects=o||[];for(var e=this._objects.length;e--;)this._objects[e].group=this;h.originX&&(this.originX=h.originX),h.originY&&(this.originY=h.originY),this._calcBounds(),this._updateObjectsCoords(),r.Object.prototype.initialize.call(this,h),this.setCoords()},toGroup:function(){var o=this._objects.concat();this._objects=[];var h=r.Object.prototype.toObject.call(this),e=new r.Group([]);if(delete h.type,e.set(h),o.forEach(function(t){t.canvas.remove(t),t.group=e}),e._objects=o,!this.canvas)return e;var i=this.canvas;return i.add(e),i._activeObject=e,e.setCoords(),e},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#<fabric.ActiveSelection: ("+this.complexity()+")>"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(o,h,e){o.save(),o.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,void 0===(e=e||{}).hasControls&&(e.hasControls=!1),e.forActiveSelection=!0;for(var i=0,t=this._objects.length;i<t;i++)this._objects[i]._renderControls(o,e);this.callSuper("_renderControls",o,h),o.restore()}}),r.ActiveSelection.fromObject=function(o,h){r.util.enlivenObjects(o.objects,function(e){delete o.objects,h&&h(new r.ActiveSelection(e,o,!0))})})}(P),function(c){"use strict";var r=f.util.object.extend;c.fabric||(c.fabric={}),c.fabric.Image?f.warn("fabric.Image is already defined."):(f.Image=f.util.createClass(f.Object,{type:"image",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:f.Object.prototype.stateProperties.concat("cropX","cropY"),cacheProperties:f.Object.prototype.cacheProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,imageSmoothing:!0,initialize:function(o,h){h||(h={}),this.filters=[],this.cacheKey="texture"+f.Object.__uid++,this.callSuper("initialize",h),this._initElement(o,h)},getElement:function(){return this._element||{}},setElement:function(o,h){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=o,this._originalElement=o,this._initConfig(h),0!==this.filters.length&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(o){var h=f.filterBackend;h&&h.evictCachesForKey&&h.evictCachesForKey(o)},dispose:function(){this.callSuper("dispose"),this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(function(o){f.util.cleanUpJsdomNode(this[o]),this[o]=void 0}.bind(this))},getCrossOrigin:function(){return this._originalElement&&(this._originalElement.crossOrigin||null)},getOriginalSize:function(){var o=this.getElement();
vendor: 9,669 bytes, line 1
1return{width:o.naturalWidth||o.width,height:o.naturalHeight||o.height}},_stroke:function(o){if(this.stroke&&0!==this.strokeWidth){var h=this.width/2,e=this.height/2;o.beginPath(),o.moveTo(-h,-e),o.lineTo(h,-e),o.lineTo(h,e),o.lineTo(-h,e),o.lineTo(-h,-e),o.closePath()}},toObject:function(o){var h=[];this.filters.forEach(function(i){i&&h.push(i.toObject())});var e=r(this.callSuper("toObject",["cropX","cropY"].concat(o)),{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:h});return this.resizeFilter&&(e.resizeFilter=this.resizeFilter.toObject()),e},hasCrop:function(){return this.cropX||this.cropY||this.width<this._element.width||this.height<this._element.height},_toSVG:function(){var e,o=[],h=[],i=this._element,t=-this.width/2,s=-this.height/2,a="",n="";if(!i)return[];if(this.hasCrop()){var l=f.Object.__uid++;o.push('<clipPath id="imageCrop_'+l+'">\n','\t<rect x="'+t+'" y="'+s+'" width="'+this.width+'" height="'+this.height+'" />\n',"</clipPath>\n"),a=' clip-path="url(#imageCrop_'+l+')" '}if(this.imageSmoothing||(n='" image-rendering="optimizeSpeed'),h.push("\t<image ","COMMON_PARTS",'xlink:href="',this.getSvgSrc(!0),'" x="',t-this.cropX,'" y="',s-this.cropY,'" width="',i.width||i.naturalWidth,'" height="',i.height||i.height,n,'"',a,"></image>\n"),this.stroke||this.strokeDashArray){var u=this.fill;this.fill=null,e=["\t<rect ",'x="',t,'" y="',s,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),'"/>\n'],this.fill=u}return"fill"!==this.paintFirst?o.concat(e,h):o.concat(h,e)},getSrc:function(o){var h=o?this._element:this._originalElement;return h?h.toDataURL?h.toDataURL():this.srcFromAttribute?h.getAttribute("src"):h.src:this.src||""},setSrc:function(o,h,e){return f.util.loadImage(o,function(i,t){this.setElement(i,e),this._setWidthHeight(),h&&h(this,t)},this,e&&e.crossOrigin),this},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},applyResizeFilters:function(){var o=this.resizeFilter,h=this.minimumScaleTrigger,e=this.getTotalObjectScaling(),i=e.scaleX,t=e.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!o||i>h&&t>h)return this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=i,void(this._lastScaleY=t);f.filterBackend||(f.filterBackend=f.initFilterBackend());var a=f.util.createCanvasElement(),n=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,l=s.width,u=s.height;a.width=l,a.height=u,this._element=a,this._lastScaleX=o.scaleX=i,this._lastScaleY=o.scaleY=t,f.filterBackend.applyFilters([o],s,l,u,this._element,n),this._filterScalingX=a.width/this._originalElement.width,this._filterScalingY=a.height/this._originalElement.height},applyFilters:function(o){if(o=(o=o||this.filters||[]).filter(function(s){return s&&!s.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===o.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var h=this._originalElement,e=h.naturalWidth||h.width,i=h.naturalHeight||h.height;if(this._element===this._originalElement){var t=f.util.createCanvasElement();t.width=e,t.height=i,this._element=t,this._filteredEl=t}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,e,i),this._lastScaleX=1,this._lastScaleY=1;return f.filterBackend||(f.filterBackend=f.initFilterBackend()),f.filterBackend.applyFilters(o,this._originalElement,e,i,this._element,this.cacheKey),(this._originalElement.width!==this._element.width||this._originalElement.height!==this._element.height)&&(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(o){f.util.setImageSmoothing(o,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(o),this._renderPaintInOrder(o)},drawCacheOnCanvas:function(o){f.util.setImageSmoothing(o,this.imageSmoothing),f.Object.prototype.drawCacheOnCanvas.call(this,o)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(o){var h=this._element;if(h){var e=this._filterScalingX,i=this._filterScalingY,t=this.width,s=this.height,a=Math.min,n=Math.max,l=n(this.cropX,0),u=n(this.cropY,0),d=h.naturalWidth||h.width,g=h.naturalHeight||h.height,v=l*e,p=u*i,y=a(t*e,d-v),m=a(s*i,g-p),_=-t/2,b=-s/2,A=a(t,d/e-l),F=a(s,g/i-u);h&&o.drawImage(h,v,p,y,m,_,b,A,F)}},_needsResize:function(){var o=this.getTotalObjectScaling();return o.scaleX!==this._lastScaleX||o.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(o,h){this.setElement(f.util.getById(o),h),f.util.addClass(this.getElement(),f.Image.CSS_CANVAS)},_initConfig:function(o){o||(o={}),this.setOptions(o),this._setWidthHeight(o)},_initFilters:function(o,h){o&&o.length?f.util.enlivenObjects(o,function(e){h&&h(e)},"fabric.Image.filters"):h&&h()},_setWidthHeight:function(o){o||(o={});var h=this.getElement();this.width=o.width||h.naturalWidth||h.width||0,this.height=o.height||h.naturalHeight||h.height||0},parsePreserveAspectRatioAttribute:function(){var u,o=f.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),h=this._element.width,e=this._element.height,i=1,t=1,s=0,a=0,n=0,l=0,d=this.width,g=this.height,v={width:d,height:g};return!o||"none"===o.alignX&&"none"===o.alignY?(i=d/h,t=g/e):("meet"===o.meetOrSlice&&(u=(d-h*(i=t=f.util.findScaleToFit(this._element,v)))/2,"Min"===o.alignX&&(s=-u),"Max"===o.alignX&&(s=u),u=(g-e*t)/2,"Min"===o.alignY&&(a=-u),"Max"===o.alignY&&(a=u)),"slice"===o.meetOrSlice&&(u=h-d/(i=t=f.util.findScaleToCover(this._element,v)),"Mid"===o.alignX&&(n=u/2),"Max"===o.alignX&&(n=u),u=e-g/t,"Mid"===o.alignY&&(l=u/2),"Max"===o.alignY&&(l=u),h=d/i,e=g/t)),{width:h,height:e,scaleX:i,scaleY:t,offsetLeft:s,offsetTop:a,cropX:n,cropY:l}}}),f.Image.CSS_CANVAS="canvas-img",f.Image.prototype.getSvgSrc=f.Image.prototype.getSrc,f.Image.fromObject=function(o,h){var e=f.util.object.clone(o);f.util.loadImage(e.src,function(i,t){t?h&&h(null,!0):f.Image.prototype._initFilters.call(e,e.filters,function(s){e.filters=s||[],f.Image.prototype._initFilters.call(e,[e.resizeFilter],function(a){e.resizeFilter=a[0],f.util.enlivenObjectEnlivables(e,e,function(){var n=new f.Image(i,e);h(n,!1)})})})},null,e.crossOrigin)},f.Image.fromURL=function(o,h,e){f.util.loadImage(o,function(i,t){h&&h(new f.Image(i,e),t)},null,e&&e.crossOrigin)},f.Image.ATTRIBUTE_NAMES=f.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),f.Image.fromElement=function(o,h,e){var i=f.parseAttributes(o,f.Image.ATTRIBUTE_NAMES);f.Image.fromURL(i["xlink:href"],h,r(e?f.util.object.clone(e):{},i))})}(P),f.util.object.extend(f.Object.prototype,{_getAngleValueForStraighten:function(){var c=this.angle%360;return c>0?90*Math.round((c-1)/90):90*Math.round(c/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(c){var r=function(){},o=(c=c||{}).onComplete||r,h=c.onChange||r,e=this;return f.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(i){e.rotate(i),h()},onComplete:function(){e.setCoords(),o()}})}}),f.util.object.extend(f.StaticCanvas.prototype,{straightenObject:function(c){return c.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(c){return c.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){"use strict";function c(o,h){var e="precision "+h+" float;\nvoid main(){}",i=o.createShader(o.FRAGMENT_SHADER);return o.shaderSource(i,e),o.compileShader(i),!!o.getShaderParameter(i,o.COMPILE_STATUS)}function r(o){o&&o.tileSize&&(this.tileSize=o.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}f.isWebglSupported=function(o){if(f.isLikelyNode)return!1;o=o||f.WebglFilterBackend.prototype.tileSize;var h=document.createElement("canvas"),e=h.getContext("webgl")||h.getContext("experimental-webgl"),i=!1;if(e){f.maxTextureSize=e.getParameter(e.MAX_TEXTURE_SIZE),i=f.maxTextureSize>=o;for(var t=["highp","mediump","lowp"],s=0;s<3;s++)if(c(e,t[s])){f.webGlPrecision=t[s];break}}return this.isSupported=i,i},f.WebglFilterBackend=r,r.prototype={tileSize:2048,resources:{},setupGLContext:function(o,h){this.dispose(),this.createWebGLCanvas(o,h),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(o,h)},chooseFastestCopyGLTo2DMethod:function(o,h){var i,e=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(v){i=!1}var t="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(e&&i&&t&&s){var a=f.util.createCanvasElement(),n=new ArrayBuffer(o*h*4);if(f.forceGLPutImageData)return this.imageBuffer=n,void(this.copyGLTo2D=N);var u,d,l={imageBuffer:n,destinationWidth:o,destinationHeight:h,targetCanvas:a};a.width=o,a.height=h,u=window.performance.now(),j.call(l,this.gl,l),d=window.performance.now()-u,u=window.performance.now(),N.call(l,this.gl,l),d>window.performance.now()-u?(this.imageBuffer=n,this.copyGLTo2D=N):this.copyGLTo2D=j}},createWebGLCanvas:function(o,h){var e=f.util.createCanvasElement();e.width=o,e.height=h;var i={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},t=e.getContext("webgl",i);t||(t=e.getContext("experimental-webgl",i)),t&&(t.clearColor(0,0,0,0),this.canvas=e,this.gl=t)},applyFilters:function(o,h,e,i,t,s){var n,a=this.gl;s&&(n=this.getCachedTexture(s,h));var l={originalWidth:h.width||h.originalWidth,originalHeight:h.height||h.originalHeight,sourceW
1idth:e,sourceHeight:i,destinationWidth:e,destinationHeight:i,context:a,sourceTexture:this.createTexture(a,e,i,!n&&h),targetTexture:this.createTexture(a,e,i),originalTexture:n||this.createTexture(a,e,i,!n&&h),passes:o.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:t},u=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,u),o.forEach(function(d){d&&d.applyTo(l)}),function I(c){var r=c.targetCanvas,e=c.destinationWidth,i=c.destinationHeight;(r.width!==e||r.height!==i)&&(r.width=e,r.height=i)}(l),this.copyGLTo2D(a,l),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(l.sourceTexture),a.deleteTexture(l.targetTexture),a.deleteFramebuffer(u),t.getContext("2d").setTransform(1,0,0,1,0,0),l},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(o,h,e,i,t){var s=o.createTexture();return o.bindTexture(o.TEXTURE_2D,s),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MAG_FILTER,t||o.NEAREST),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_MIN_FILTER,t||o.NEAREST),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(o.TEXTURE_2D,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),i?o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,i):o.texImage2D(o.TEXTURE_2D,0,o.RGBA,h,e,0,o.RGBA,o.UNSIGNED_BYTE,null),s},getCachedTexture:function(o,h){if(this.textureCache[o])return this.textureCache[o];var e=this.createTexture(this.gl,h.width,h.height,h);return this.textureCache[o]=e,e},evictCachesForKey:function(o){this.textureCache[o]&&(this.gl.deleteTexture(this.textureCache[o]),delete this.textureCache[o])},copyGLTo2D:j,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var o=this.gl,h={renderer:"",vendor:""};if(!o)return h;var e=o.getExtension("WEBGL_debug_renderer_info");if(e){var i=o.getParameter(e.UNMASKED_RENDERER_WEBGL),t=o.getParameter(e.UNMASKED_VENDOR_WEBGL);i&&(h.renderer=i.toLowerCase()),t&&(h.vendor=t.toLowerCase())}return this.gpuInfo=h,h}}}(),function(){"use strict";var c=function(){};function r(){}f.Canvas2dFilterBackend=r,r.prototype={evictCachesForKey:c,dispose:c,clearWebGLCaches:c,resources:{},applyFilters:function(o,h,e,i,t){var s=t.getContext("2d");s.drawImage(h,0,0,e,i);var l={sourceWidth:e,sourceHeight:i,imageData:s.getImageData(0,0,e,i),originalEl:h,originalImageData:s.getImageData(0,0,e,i),canvasEl:t,ctx:s,filterBackend:this};return o.forEach(function(u){u.applyTo(l)}),(l.imageData.width!==e||l.imageData.height!==i)&&(t.width=l.imageData.width,t.height=l.imageData.height),s.putImageData(l.imageData,0,0),l}}}(),f.Image=f.Image||{},f.Image.filters=f.Image.filters||{},f.Image.filters.BaseFilter=f.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(c){c&&this.setOptions(c)},setOptions:function(c){for(var r in c)this[r]=c[r]},createProgram:function(c,r,o){r=r||this.fragmentSource,o=o||this.vertexSource,"highp"!==f.webGlPrecision&&(r=r.replace(/precision highp float/g,"precision "+f.webGlPrecision+" float"));var h=c.createShader(c.VERTEX_SHADER);if(c.shaderSource(h,o),c.compileShader(h),!c.getShaderParameter(h,c.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+c.getShaderInfoLog(h));var e=c.createShader(c.FRAGMENT_SHADER);if(c.shaderSource(e,r),c.compileShader(e),!c.getShaderParameter(e,c.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+c.getShaderInfoLog(e));var i=c.createProgram();if(c.attachShader(i,h),c.attachShader(i,e),c.linkProgram(i),!c.getProgramParameter(i,c.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+c.getProgramInfoLog(i));var t=this.getAttributeLocations(c,i),s=this.getUniformLocations(c,i)||{};return s.uStepW=c.getUniformLocation(i,"uStepW"),s.uStepH=c.getUniformLocation(i,"uStepH"),{program:i,attributeLocations:t,uniformLocations:s}},getAttributeLocations:function(c,r){return{aPosition:c.getAttribLocation(r,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(c,r,o){var h=r.aPosition,e=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,e),c.enableVertexAttribArray(h),c.vertexAttribPointer(h,2,c.FLOAT,!1,0,0),c.bufferData(c.ARRAY_BUFFER,o,c.STATIC_DRAW)},_setupFrameBuffer:function(c){var o,h,r=c.context;c.passes>1?(h=c.destinationHeight,(c.sourceWidth!==(o=c.destinationWidth)||c.sourceHeight!==h)&&(r.deleteTexture(c.targetTexture),c.targetTexture=c.filterBackend.createTexture(r,o,h)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,c.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(c){c.passes--,c.pass++;var r=c.targetTexture;c.targetTexture=c.sourceTexture,c.sourceTexture=r},isNeutralState:function(){var c=this.mainParameter,r=f.Image.filters[this.type].prototype;if(c){if(Array.isArray(r[c])){for(var o=r[c].length;o--;)if(this[c][o]!==r[c][o])return!1;return!0}return r[c]===this[c]}return!1},applyTo:function(c){c.webgl?(this._setupFrameBuffer(c),this.applyToWebGL(c),this._swapTextures(c)):this.applyTo2d(c)},retrieveShader:function(c){return c.programCache.hasOwnProperty(this.type)||(c.programCache[this.type]=this.createProgram(c.context)),c.programCache[this.type]},applyToWebGL:function(c){var r=c.context,o=this.retrieveShader(c);r.bindTexture(r.TEXTURE_2D,0===c.pass&&c.originalTexture?c.originalTexture:c.sourceTexture),r.useProgram(o.program),this.sendAttributeData(r,o.attributeLocations,c.aPosition),r.uniform1f(o.uniformLocations.uStepW,1/c.sourceWidth),r.uniform1f(o.uniformLocations.uStepH,1/c.sourceHeight),this.sendUniformData(r,o.uniformLocations),r.viewport(0,0,c.destinationWidth,c.destinationHeight),r.drawArrays(r.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(c,r,o){c.activeTexture(o),c.bindTexture(c.TEXTURE_2D,r),c.activeTexture(c.TEXTURE0)}
1,unbindAdditionalTexture:function(c,r){c.activeTexture(r),c.bindTexture(c.TEXTURE_2D,null),c.activeTexture(c.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(c){this[this.mainParameter]=c},sendUniformData:function(){},createHelpLayer:function(c){if(!c.helpLayer){var r=document.createElement("canvas");r.width=c.sourceWidth,r.height=c.sourceHeight,c.helpLayer=r}},toObject:function(){var c={type:this.type},r=this.mainParameter;return r&&(c[r]=this[r]),c},toJSON:function(){return this.toObject()}}),f.Image.filters.BaseFilter.fromObject=function(c,r){var o=new f.Image.filters[c.type](c);return r&&r(o),o},function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.ColorMatrix=(0,r.util.createClass)(o.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(e){this.callSuper("initialize",e),this.matrix=this.matrix.slice(0)},applyTo2d:function(e){var n,l,u,d,g,t=e.imageData.data,s=t.length,a=this.matrix,v=this.colorsOnly;for(g=0;g<s;g+=4)n=t[g],l=t[g+1],u=t[g+2],v?(t[g]=n*a[0]+l*a[1]+u*a[2]+255*a[4],t[g+1]=n*a[5]+l*a[6]+u*a[7]+255*a[9],t[g+2]=n*a[10]+l*a[11]+u*a[12]+255*a[14]):(t[g]=n*a[0]+l*a[1]+u*a[2]+(d=t[g+3])*a[3]+255*a[4],t[g+1]=n*a[5]+l*a[6]+u*a[7]+d*a[8]+255*a[9],t[g+2]=n*a[10]+l*a[11]+u*a[12]+d*a[13]+255*a[14],t[g+3]=n*a[15]+l*a[16]+u*a[17]+d*a[18]+255*a[19])},getUniformLocations:function(e,i){return{uColorMatrix:e.getUniformLocation(i,"uColorMatrix"),uConstants:e.getUniformLocation(i,"uConstants")}},sendUniformData:function(e,i){var t=this.matrix,a=[t[4],t[9],t[14],t[19]];e.uniformMatrix4fv(i.uColorMatrix,!1,[t[0],t[1],t[2],t[3],t[5],t[6],t[7],t[8],t[10],t[11],t[12],t[13],t[15],t[16],t[17],t[18]]),e.uniform4fv(i.uConstants,a)}}),r.Image.filters.ColorMatrix.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Brightness=(0,r.util.createClass)(o.BaseFilter,{type:"Brightness",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBrightness;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += uBrightness;\ngl_FragColor = color;\n}",brightness:0,mainParameter:"brightness",applyTo2d:function(e){if(0!==this.brightness){var s,t=e.imageData.data,a=t.length,n=Math.round(255*this.brightness);for(s=0;s<a;s+=4)t[s]=t[s]+n,t[s+1]=t[s+1]+n,t[s+2]=t[s+2]+n}},getUniformLocations:function(e,i){return{uBrightness:e.getUniformLocation(i,"uBrightness")}},sendUniformData:function(e,i){e.uniform1f(i.uBrightness,this.brightness)}}),r.Image.filters.Brightness.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend,h=r.Image.filters;h.Convolute=(0,r.util.createClass)(h.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_3_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_5_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_5_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_7_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_7_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_9_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_9_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}"},retrieveShader:function(i){var t=Math.sqrt(this.matrix.length),s=this.type+"_"+t+"_"+(this.opaque?1:0),a=this.fragmentSource[s];return i.programCache.hasOwnProperty(s)||(i.programCache[s]=this.createProgram(i.context,a)),i.programCache[s]},applyTo2d:function(i){var y,m,_,b,A,F,L,W,X,tt,q,rt,C,t=i.imageData,s=t.data,a=this.matrix,n=Math.round(Math.sqrt(a.length)),l=Math.floor(n/2),u=t.width,d=t.height,g=i.ctx.createImageData(u,d),v=g.data,p=this.opaque?1:0;for(q=0;q<d;q++)for(tt=0;tt<u;tt++){for(A=4*(q*u+tt),y=0,m=0,_=0,b=0,C=0;C<n;C++)for(rt=0;rt<n;rt++)F=tt+rt-l,!((L=q+C-l)<0||L>=d||F<0||F>=u)&&(y+=s[W=4*(L*u+F)]*(X=a[C*n+rt]),m+=s[W+1]*X,_+=s[W+2]*X,p||(b+=s[W+3]*X));v[A]=y,v[A+1]=m,v[A+2]=_,v[A+3]=p?s[A+3]:b}i.imageData=g},getUniformLocations:function(i,t){return{uMatrix:i.getUniformLocation(t,"uMatrix"),uOpaque:i.getUniformLocation(t,"uOpaque"),uHalfSize:i.getUniformLocation(t,"uHalfSize"),uSize:i.getUniformLocation(t,"uSize")}},sendUniformData:function(i,t){i.uniform1fv(t.uMatrix,this.matrix
vendor: 10,759 bytes, line 1
1)},toObject:function(){return o(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),r.Image.filters.Convolute.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Grayscale=(0,r.util.createClass)(o.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(e){var s,n,t=e.imageData.data,a=t.length,l=this.mode;for(s=0;s<a;s+=4)"average"===l?n=(t[s]+t[s+1]+t[s+2])/3:"lightness"===l?n=(Math.min(t[s],t[s+1],t[s+2])+Math.max(t[s],t[s+1],t[s+2]))/2:"luminosity"===l&&(n=.21*t[s]+.72*t[s+1]+.07*t[s+2]),t[s]=n,t[s+1]=n,t[s+2]=n},retrieveShader:function(e){var i=this.type+"_"+this.mode;return e.programCache.hasOwnProperty(i)||(e.programCache[i]=this.createProgram(e.context,this.fragmentSource[this.mode])),e.programCache[i]},getUniformLocations:function(e,i){return{uMode:e.getUniformLocation(i,"uMode")}},sendUniformData:function(e,i){e.uniform1i(i.uMode,1)},isNeutralState:function(){return!1}}),r.Image.filters.Grayscale.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Invert=(0,r.util.createClass)(o.BaseFilter,{type:"Invert",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uInvert;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nif (uInvert == 1) {\ngl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n} else {\ngl_FragColor = color;\n}\n}",invert:!0,mainParameter:"invert",applyTo2d:function(e){var s,t=e.imageData.data,a=t.length;for(s=0;s<a;s+=4)t[s]=255-t[s],t[s+1]=255-t[s+1],t[s+2]=255-t[s+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(e,i){return{uInvert:e.getUniformLocation(i,"uInvert")}},sendUniformData:function(e,i){e.uniform1i(i.uInvert,this.invert)}}),r.Image.filters.Invert.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend,h=r.Image.filters;h.Noise=(0,r.util.createClass)(h.BaseFilter,{type:"Noise",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uStepH;\nuniform float uNoise;\nuniform float uSeed;\nvarying vec2 vTexCoord;\nfloat rand(vec2 co, float seed, float vScale) {\nreturn fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n}\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\ngl_FragColor = color;\n}",mainParameter:"noise",noise:0,applyTo2d:function(i){if(0!==this.noise){var a,n,u,s=i.imageData.data,l=this.noise;for(a=0,n=s.length;a<n;a+=4)u=(.5-Math.random())*l,s[a]+=u,s[a+1]+=u,s[a+2]+=u}},getUniformLocations:function(i,t){return{uNoise:i.getUniformLocation(t,"uNoise"),uSeed:i.getUniformLocation(t,"uSeed")}},sendUniformData:function(i,t){i.uniform1f(t.uNoise,this.noise/255),i.uniform1f(t.uSeed,Math.random())},toObject:function(){return o(this.callSuper("toObject"),{noise:this.noise})}}),r.Image.filters.Noise.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Pixelate=(0,r.util.createClass)(o.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBlocksize;\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nfloat blockW = uBlocksize * uStepW;\nfloat blockH = uBlocksize * uStepW;\nint posX = int(vTexCoord.x / blockW);\nint posY = int(vTexCoord.y / blockH);\nfloat fposX = float(posX);\nfloat fposY = float(posY);\nvec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\nvec4 color = texture2D(uTexture, squareCoords);\ngl_FragColor = color;\n}",applyTo2d:function(e){var n,l,u,d,g,v,p,y,m,_,b,i=e.imageData,t=i.data,s=i.height,a=i.width;for(l=0;l<s;l+=this.blocksize)for(u=0;u<a;u+=this.blocksize)for(d=t[n=4*l*a+4*u],g=t[n+1],v=t[n+2],p=t[n+3],_=Math.min(l+this.blocksize,s),b=Math.min(u+this.blocksize,a),y=l;y<_;y++)for(m=u;m<b;m++)t[n=4*y*a+4*m]=d,t[n+1]=g,t[n+2]=v,t[n+3]=p},isNeutralState:function(){return 1===this.blocksize},getUniformLocations:function(e,i){return{uBlocksize:e.getUniformLocation(i,"uBlocksize"),uStepW:e.getUniformLocation(i,"uStepW"),uStepH:e.getUniformLocation(i,"uStepH")}},sendUniformData:function(e,i){e.uniform1f(i.uBlocksize,this.blocksize)}}),r.Image.filters.Pixelate.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.extend,h=r.Image.filters;h.RemoveColor=(0,r.util.createClass)(h.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\nif(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\ngl_FragColor.a = 0.0;\n}\n}",distance:.02,useAlpha:!1,applyTo2d:function(i){var a,l,u,d,s=i.imageData.data,n=255*this.distance,g=new r.Color(this.color).getSource(),v=[g[0]-n,g[1]-n,g[2]-n],p=[g[0]+n,g[1]+n,g[2]+n];for(a=0;a<s.length;a+=4)u=s[a+1],d=s[a+2],(l=s[a])>v[0]&&u>v[1]&&d>v[2]&&l<p[0]&&u<p[1]&&d<p[2]&&(s[a+3]=0)},getUniformLocations:function(i,t){return{uLow:i.getUniformLocation(t,"uLow"),uHigh:i.getUniformLocation(t,"uHigh")}},sendUniformData:function(i,t){var s=new r.Color(this.color).getSource(),a=parseFloat(this.distance),l=[s[0]/255+a,s[1]/255+a,s[2]/255+a,1];i.uniform4fv(t.uLow,[0+s[0]/255-a,0+s[1]/255-a,0+s[2]/255-a,1]),i.uniform4fv(t.uHigh,l)},toObject:function(){return o(this.callSuper("toObject"),{color:this.color,distance:this.distance})}}),r.Image.filters.RemoveColor.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters,h=r.util.createClass,e={Brownie:[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0],Vintage:[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0],Kodachrome:[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0],Technicolor:[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0],Polaroid:[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0],Sepia:[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0],BlackWhite:[1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,0,0,0,1,0]};for(var i in e)o[i]=h(o.ColorMatrix,{type:i,matrix:e[i],mainParameter:!1,colorsOnly:!0}),r.Image.filters[i].fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric,o=r.Image.filters;o.BlendColor=(0,r.util.createClass)(o.BaseFilter,{type:"BlendColor",color:"#F95C63",mode:"multiply",alpha:1,fragmentSource:{multiply:"gl_FragColor.rgb *= uColor.rgb;\n",screen:"gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\n",add:"gl_FragColor.rgb += uColor.rgb;\n",diff:"gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\n",subtract:"gl_FragColor.rgb -= uColor.rgb;\n",lighten:"gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\n",darken:"gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\n",exclusion:"gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\n",overlay:"if (uColor.r < 0.5) {\ngl_FragColor.r *= 2.0 * uColor.r;\n} else {\ngl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n}\nif (uColor.g < 0.5) {\ngl_FragColor.g *= 2.0 * uColor.g;\n} else {\ngl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n}\nif (uColor.b < 0.5) {\ngl_FragColor.b *= 2.0 * uColor.b;\n} else {\ngl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n}\n",tint:"gl_FragColor.rgb *= (1.0 - uColor.a);\ngl_FragColor.rgb += uColor.rgb;\n"},buildSource:function(e){return"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ngl_FragColor = color;\nif (color.a > 0.0) {\n"+this.fragmentSource[e]+"}\n}"},retrieveShader:function(e){var t,i=this.type+"_"+this.mode;return e.programCache.hasOwnProperty(i)||(t=this.buildSource(this.mode),e.programCache[i]=this.createProgram(e.context,t)),e.programCache[i]},applyTo2d:function(e){var a,n,l,u,d,g,v,t=e.imageData.data,s=t.length,p=1-this.alpha;a=(v=new r.Color(this.color).getSource())[0]*this.alpha,n=v[1]*this.alpha,l=v[2]*this.alpha;for(var y=0;y<s;y+=4)switch(u=t[y],d=t[y+1],g=t[y+2],this.mode){case"multiply":t[y]=u*a/255,t[y+1]=d*n/255,t[y+2]=g*l/255;break;case"screen":t[y]=255-(255-u)*(255-a)/255,t[y+1]=255-(255-d)*(255-n)/255,t[y+2]=255-(255-g)*(255-l)/255;break;case"add":t[y]=u+a,t[y+1]=d+n,t[y+2]=g+l;break;case"diff":case"difference":t[y]=Math.abs(u-a),t[y+1]=Math.abs(d-n),t[y+2]=Math.abs(g-l);break;case"subtract":t[y]=u-a,t[y+1]=d-n,t[y+2]=g-l;break;case"darken":t[y]=Math.min(u,a),t[y+1]=Math.min(d,n),t[y+2]=Math.min(g,l);break;case"lighten":t[y]=Math.max(u,a),t[y+1]=Math.max(d,n),t[y+2]=Math.max(g,l);break;case"overlay":t[y]=a<128?2*u*a/255:255-2*(255-u)*(255-a)/255,t[y+1]=n<128?2*d*n/255:255-2*(255-d)*(255-n)/255,t[y+2]=l<128?2*g*l/255:255-2*(255-g)*(255-l)/255;break;case"exclusion":t[y]=a+u-2*a*u/255,t[y+1]=n+d-2*n*d/255,t[y+2]=l+g-2*l*g/255;break;case"tint":t[y]=a+u*p,t[y+1]=n+d*p,t[y+2]=l+g*p}},getUniformLocations:function(e,i){return{uColor:e.getUniformLocation(i,"uColor")}},sendUniformData:function(e,i){var t=new r.Color(this.color).getSource();t[0]=this.alpha*t[0]/255,t[1]=this.alpha*t[1]/255,t[2]=this.alpha*t[2]/255,t[3]=this.alpha,e.uniform4fv(i.uColor,t)}
1,toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),r.Image.filters.BlendColor.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric,o=r.Image.filters;o.BlendImage=(0,r.util.createClass)(o.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nuniform mat3 uTransformMatrix;\nvoid main() {\nvTexCoord = aPosition;\nvTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:{multiply:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.rgba *= color2.rgba;\ngl_FragColor = color;\n}",mask:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.a = color2.a;\ngl_FragColor = color;\n}"},retrieveShader:function(e){var i=this.type+"_"+this.mode,t=this.fragmentSource[this.mode];return e.programCache.hasOwnProperty(i)||(e.programCache[i]=this.createProgram(e.context,t)),e.programCache[i]},applyToWebGL:function(e){var i=e.context,t=this.createTexture(e.filterBackend,this.image);this.bindAdditionalTexture(i,t,i.TEXTURE1),this.callSuper("applyToWebGL",e),this.unbindAdditionalTexture(i,i.TEXTURE1)},createTexture:function(e,i){return e.getCachedTexture(i.cacheKey,i._element)},calculateMatrix:function(){var e=this.image;return[1/e.scaleX,0,0,0,1/e.scaleY,0,-e.left/e._element.width,-e.top/e._element.height,1]},applyTo2d:function(e){var u,d,g,v,p,y,m,_,b,A,L,i=e.imageData,t=e.filterBackend.resources,s=i.data,a=s.length,n=i.width,l=i.height,F=this.image;t.blendImage||(t.blendImage=r.util.createCanvasElement()),A=(b=t.blendImage).getContext("2d"),b.width!==n||b.height!==l?(b.width=n,b.height=l):A.clearRect(0,0,n,l),A.setTransform(F.scaleX,0,0,F.scaleY,F.left,F.top),A.drawImage(F._element,0,0,n,l),L=A.getImageData(0,0,n,l).data;for(var W=0;W<a;W+=4)switch(p=s[W],y=s[W+1],m=s[W+2],_=s[W+3],u=L[W],d=L[W+1],g=L[W+2],v=L[W+3],this.mode){case"multiply":s[W]=p*u/255,s[W+1]=y*d/255,s[W+2]=m*g/255,s[W+3]=_*v/255;break;case"mask":s[W+3]=v}},getUniformLocations:function(e,i){return{uTransformMatrix:e.getUniformLocation(i,"uTransformMatrix"),uImage:e.getUniformLocation(i,"uImage")}},sendUniformData:function(e,i){var t=this.calculateMatrix();e.uniform1i(i.uImage,1),e.uniformMatrix3fv(i.uTransformMatrix,!1,t)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),r.Image.filters.BlendImage.fromObject=function(e,i){r.Image.fromObject(e.image,function(t){var s=r.util.object.clone(e);s.image=t,i(new r.Image.filters.BlendImage(s))})}}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=Math.pow,h=Math.floor,e=Math.sqrt,i=Math.abs,t=Math.round,s=Math.sin,a=Math.ceil,n=r.Image.filters;n.Resize=(0,r.util.createClass)(n.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(u,d){return{uDelta:u.getUniformLocation(d,"uDelta"),uTaps:u.getUniformLocation(d,"uTaps")}},sendUniformData:function(u,d){u.uniform2fv(d.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),u.uniform1fv(d.uTaps,this.taps)},retrieveShader:function(u){var d=this.getFilterWindow(),g=this.type+"_"+d;if(!u.programCache.hasOwnProperty(g)){var v=this.generateShader(d);u.programCache[g]=this.createProgram(u.context,v)}return u.programCache[g]},getFilterWindow:function(){return Math.ceil(this.lanczosLobes/this.tempScale)},getTaps:function(){for(var u=this.lanczosCreate(this.lanczosLobes),d=this.tempScale,g=this.getFilterWindow(),v=new Array(g),p=1;p<=g;p++)v[p-1]=u(p*d);return v},generateShader:function(v){for(var d=new Array(v),g=this.fragmentSourceTOP,p=1;p<=v;p++)d[p-1]=p+".0 * uDelta";return g+="uniform float uTaps["+v+"];\n",g+="void main() {\n",g+="  vec4 color = texture2D(uTexture, vTexCoord);\n",g+="  float sum = 1.0;\n",d.forEach(function(y,m){g+="  color += texture2D(uTexture, vTexCoord + "+y+") * uTaps["+m+"];\n",g+="  color += texture2D(uTexture, vTexCoord - "+y+") * uTaps["+m+"];\n",g+="  sum += 2.0 * uTaps["+m+"];\n"}),g+="  gl_FragColor = color / sum;\n",g+="}"},fragmentSourceTOP:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\n",applyTo:function(u){u.webgl?(u.passes++,this.width=u.sourceW
vendor: 7,876 bytes, line 1
1idth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=u.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),u.destinationWidth=this.dW,this._setupFrameBuffer(u),this.applyToWebGL(u),this._swapTextures(u),u.sourceWidth=u.destinationWidth,this.height=u.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),u.destinationHeight=this.dH,this._setupFrameBuffer(u),this.applyToWebGL(u),this._swapTextures(u),u.sourceHeight=u.destinationHeight):this.applyTo2d(u)},isNeutralState:function(){return 1===this.scaleX&&1===this.scaleY},lanczosCreate:function(u){return function(d){if(d>=u||d<=-u)return 0;if(d<1.1920929e-7&&d>-1.1920929e-7)return 1;var g=(d*=Math.PI)/u;return s(d)/d*s(g)/g}},applyTo2d:function(u){var d=u.imageData,g=this.scaleX,v=this.scaleY;this.rcpScaleX=1/g,this.rcpScaleY=1/v;var b,p=d.width,y=d.height,m=t(p*g),_=t(y*v);"sliceHack"===this.resizeType?b=this.sliceByTwo(u,p,y,m,_):"hermite"===this.resizeType?b=this.hermiteFastResize(u,p,y,m,_):"bilinear"===this.resizeType?b=this.bilinearFiltering(u,p,y,m,_):"lanczos"===this.resizeType&&(b=this.lanczosResize(u,p,y,m,_)),u.imageData=b},sliceByTwo:function(u,d,g,v,p){var W,X,y=u.imageData,m=.5,_=!1,b=!1,A=d*m,F=g*m,L=r.filterBackend.resources,tt=0,q=0,rt=d,C=0;for(L.sliceByTwo||(L.sliceByTwo=document.createElement("canvas")),((W=L.sliceByTwo).width<1.5*d||W.height<g)&&(W.width=1.5*d,W.height=g),(X=W.getContext("2d")).clearRect(0,0,1.5*d,g),X.putImageData(y,0,0),v=h(v),p=h(p);!_||!b;)d=A,g=F,v<h(A*m)?A=h(A*m):(A=v,_=!0),p<h(F*m)?F=h(F*m):(F=p,b=!0),X.drawImage(W,tt,q,d,g,rt,C,A,F),tt=rt,q=C,C+=F;return X.getImageData(tt,q,v,p)},lanczosResize:function(u,d,g,v,p){var m=u.imageData.data,_=u.ctx.createImageData(v,p),b=_.data,A=this.lanczosCreate(this.lanczosLobes),F=this.rcpScaleX,L=this.rcpScaleY,W=2/this.rcpScaleX,X=2/this.rcpScaleY,tt=a(F*this.lanczosLobes/2),q=a(L*this.lanczosLobes/2),rt={},C={},O={};return function y(E){var x,U,w,S,M,B,Y,H,V,Q,et;for(C.x=(E+.5)*F,O.x=h(C.x),x=0;x<p;x++){for(C.y=(x+.5)*L,O.y=h(C.y),M=0,B=0,Y=0,H=0,V=0,U=O.x-tt;U<=O.x+tt;U++)if(!(U<0||U>=d)){Q=h(1e3*i(U-C.x)),rt[Q]||(rt[Q]={});for(var z=O.y-q;z<=O.y+q;z++)z<0||z>=g||(et=h(1e3*i(z-C.y)),rt[Q][et]||(rt[Q][et]=A(e(o(Q*W,2)+o(et*X,2))/1e3)),(w=rt[Q][et])>0&&(M+=w,B+=w*m[S=4*(z*d+U)],Y+=w*m[S+1],H+=w*m[S+2],V+=w*m[S+3]))}b[S=4*(x*v+E)]=B/M,b[S+1]=Y/M,b[S+2]=H/M,b[S+3]=V/M}return++E<v?y(E):_}(0)},bilinearFiltering:function(u,d,g,v,p){var A,F,L,W,X,tt,q,O,C=0,E=this.rcpScaleX,x=this.rcpScaleY,U=4*(d-1),S=u.imageData.data,M=u.ctx.createImageData(v,p),B=M.data;for(L=0;L<p;L++)for(W=0;W<v;W++)for(X=E*W-(A=h(E*W)),tt=x*L-(F=h(x*L)),O=4*(F*d+A),q=0;q<4;q++)B[C++]=S[O+q]*(1-X)*(1-tt)+S[O+4+q]*X*(1-tt)+S[O+U+q]*tt*(1-X)+S[O+U+4+q]*X*tt;return M},hermiteFastResize:function(u,d,g,v,p){for(var y=this.rcpScaleX,m=this.rcpScaleY,_=a(y/2),b=a(m/2),F=u.imageData.data,L=u.ctx.createImageData(v,p),W=L.data,X=0;X<p;X++)for(var tt=0;tt<v;tt++){for(var q=4*(tt+X*v),rt=0,C=0,O=0,E=0,x=0,U=0,w=0,S=(X+.5)*m,M=h(X*m);M<(X+1)*m;M++)for(var B=i(S-(M+.5))/b,Y=(tt+.5)*y,H=B*B,V=h(tt*y);V<(tt+1)*y;V++){var Q=i(Y-(V+.5))/_,et=e(H+Q*Q);et>1&&et<-1||(rt=2*et*et*et-3*et*et+1)>0&&(w+=rt*F[3+(Q=4*(V+M*d))],O+=rt,F[Q+3]<255&&(rt=rt*F[Q+3]/250),E+=rt*F[Q],x+=rt*F[Q+1],U+=rt*F[Q+2],C+=rt)}W[q]=E/C,W[q+1]=x/C,W[q+2]=U/C,W[q+3]=w/O}return L},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),r.Image.filters.Resize.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Contrast=(0,r.util.createClass)(o.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(e){if(0!==this.contrast){var t,s=e.imageData.data,a=s.length,n=Math.floor(255*this.contrast),l=259*(n+255)/(255*(259-n));for(t=0;t<a;t+=4)s[t]=l*(s[t]-128)+128,s[t+1]=l*(s[t+1]-128)+128,s[t+2]=l*(s[t+2]-128)+128}},getUniformLocations:function(e,i){return{uContrast:e.getUniformLocation(i,"uContrast")}},sendUniformData:function(e,i){e.uniform1f(i.uContrast,this.contrast)}}),r.Image.filters.Contrast.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Saturation=(0,r.util.createClass)(o.BaseFilter,{type:"Saturation",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uSaturation;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat rgMax = max(color.r, color.g);\nfloat rgbMax = max(rgMax, color.b);\ncolor.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\ncolor.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\ncolor.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\ngl_FragColor = color;\n}",saturation:0,mainParameter:"saturation",applyTo2d:function(e){if(0!==this.saturation){var n,l,t=e.imageData.data,s=t.length,a=-this.saturation;for(n=0;n<s;n+=4)l=Math.max(t[n],t[n+1],t[n+2]),t[n]+=l!==t[n]?(l-t[n])*a:0,t[n+1]+=l!==t[n+1]?(l-t[n+1])*a:0,t[n+2]+=l!==t[n+2]?(l-t[n+2])*a:0}},getUniformLocations:function(e,i){return{uSaturation:e.getUniformLocation(i,"uSaturation")}},sendUniformData:function(e,i){e.uniform1f(i.uSaturation,-this.saturation)}}),r.Image.filters.Saturation.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Vibrance=(0,r.util.createClass)(o.BaseFilter,{type:"Vibrance",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uVibrance;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat max = max(color.r, max(color.g, color.b));\nfloat avg = (color.r + color.g + color.b) / 3.0;\nfloat amt = (abs(max - avg) * 2.0) * uVibrance;\ncolor.r += max != color.r ? (max - color.r) * amt : 0.00;\ncolor.g += max != color.g ? (max - color.g) * amt : 0.00;\ncolor.b += max != color.b ? (max - color.b) * amt : 0.00;\ngl_FragColor = color;\n}",vibrance:0,mainParameter:"vibrance",applyTo2d:function(e){if(0!==this.vibrance){var n,l,d,t=e.imageData.data,s=t.length,a=-this.vibrance;for(n=0;n<s;n+=4)l=Math.max(t[n],t[n+1],t[n+2]),d=2*Math.abs(l-(t[n]+t[n+1]+t[n+2])/3)/255*a,t[n]+=l!==t[n]?(l-t[n])*d:0,t[n+1]+=l!==t[n+1]?(l-t[n+1])*d:0,t[n+2]+=l!==t[n+2]?(l-t[n+2])*d:0}},getUniformLocations:function(e,i){return{uVibrance:e.getUniformLocation(i,"uVibrance")}},sendUniformData:function(e,i){e.uniform1f(i.uVibrance,-this.vibrance)}}),r.Image.filters.Vibrance.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Blur=(0,r.util.createClass)(o.BaseFilter,{type:"Blur",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\nconst float nSamples = 15.0;\nvec3 v3offset = vec3(12.9898, 78.233, 151.7182);\nfloat random(vec3 scale) {\nreturn fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n}\nvoid main() {\nvec4 color = vec4(0.0);\nfloat total = 0.0;\nfloat offset = random(v3offset);\nfor (float t = -nSamples; t <= nSamples; t++) {\nfloat percent = (t + offset - 0.5) / nSamples;\nfloat weight = 1.0 - abs(percent);\ncolor += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\ntotal += weight;\n}\ngl_FragColor = color / total;\n}",blur:0,mainParameter:"blur",applyTo:function(e){e.webgl?(this.aspectRatio=e.sourceW
1idth/e.sourceHeight,e.passes++,this._setupFrameBuffer(e),this.horizontal=!0,this.applyToWebGL(e),this._swapTextures(e),this._setupFrameBuffer(e),this.horizontal=!1,this.applyToWebGL(e),this._swapTextures(e)):this.applyTo2d(e)},applyTo2d:function(e){e.imageData=this.simpleBlur(e)},simpleBlur:function(e){var t,s,i=e.filterBackend.resources,a=e.imageData.width,n=e.imageData.height;i.blurLayer1||(i.blurLayer1=r.util.createCanvasElement(),i.blurLayer2=r.util.createCanvasElement()),s=i.blurLayer2,((t=i.blurLayer1).width!==a||t.height!==n)&&(s.width=t.width=a,s.height=t.height=n);var g,v,p,y,l=t.getContext("2d"),u=s.getContext("2d"),d=15,m=.06*this.blur*.5;for(l.putImageData(e.imageData,0,0),u.clearRect(0,0,a,n),y=-d;y<=d;y++)p=m*(v=y/d)*a+(g=(Math.random()-.5)/4),u.globalAlpha=1-Math.abs(v),u.drawImage(t,p,g),l.drawImage(s,0,0),u.globalAlpha=1,u.clearRect(0,0,s.width,s.height);for(y=-d;y<=d;y++)p=m*(v=y/d)*n+(g=(Math.random()-.5)/4),u.globalAlpha=1-Math.abs(v),u.drawImage(t,g,p),l.drawImage(s,0,0),u.globalAlpha=1,u.clearRect(0,0,s.width,s.height);e.ctx.drawImage(t,0,0);var _=e.ctx.getImageData(0,0,t.width,t.height);return l.globalAlpha=1,l.clearRect(0,0,t.width,t.height),_},getUniformLocations:function(e,i){return{delta:e.getUniformLocation(i,"uDelta")}},sendUniformData:function(e,i){var t=this.chooseRightDelta();e.uniform2fv(i.delta,t)},chooseRightDelta:function(){var t,e=1,i=[0,0];return this.horizontal?this.aspectRatio>1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),o.Blur.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Gamma=(0,r.util.createClass)(o.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(e){this.gamma=[1,1,1],o.BaseFilter.prototype.initialize.call(this,e)},applyTo2d:function(e){var d,t=e.imageData.data,s=this.gamma,a=t.length,n=1/s[0],l=1/s[1],u=1/s[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),d=0,a=256;d<a;d++)this.rVals[d]=255*Math.pow(d/255,n),this.gVals[d]=255*Math.pow(d/255,l),this.bVals[d]=255*Math.pow(d/255,u);for(d=0,a=t.length;d<a;d+=4)t[d]=this.rVals[t[d]],t[d+1]=this.gVals[t[d+1]],t[d+2]=this.bVals[t[d+2]]},getUniformLocations:function(e,i){return{uGamma:e.getUniformLocation(i,"uGamma")}},sendUniformData:function(e,i){e.uniform3fv(i.uGamma,this.gamma)}}),r.Image.filters.Gamma.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.Composed=(0,r.util.createClass)(o.BaseFilter,{type:"Composed",subFilters:[],initialize:function(e){this.callSuper("initialize",e),this.subFilters=this.subFilters.slice(0)},applyTo:function(e){e.passes+=this.subFilters.length-1,this.subFilters.forEach(function(i){i.applyTo(e)})},toObject:function(){return r.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(e){return e.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(e){return!e.isNeutralState()})}}),r.Image.filters.Composed.fromObject=function(e,i){var s=(e.subFilters||[]).map(function(n){return new r.Image.filters[n.type](n)}),a=new r.Image.filters.Composed({subFilters:s});return i&&i(a),a}}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.Image.filters;o.HueRotation=(0,r.util.createClass)(o.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var e=this.rotation*Math.PI,i=r.util.cos(e),t=r.util.sin(e),s=1/3,a=Math.sqrt(s)*t,n=1-i;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=i+n/3,this.matrix[
11]=s*n-a,this.matrix[2]=s*n+a,this.matrix[5]=s*n+a,this.matrix[6]=i+s*n,this.matrix[7]=s*n-a,this.matrix[10]=s*n-a,this.matrix[11]=s*n+a,this.matrix[12]=i+s*n},isNeutralState:function(e){return this.calculateMatrix(),o.BaseFilter.prototype.isNeutralState.call(this,e)},applyTo:function(e){this.calculateMatrix(),o.BaseFilter.prototype.applyTo.call(this,e)}}),r.Image.filters.HueRotation.fromObject=r.Image.filters.BaseFilter.fromObject}(P),function(c){"use strict";var r=c.fabric||(c.fabric={}),o=r.util.object.clone;if(r.Text)r.warn("fabric.Text is already defined");else{var h="fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");r.Text=r.util.createClass(r.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stateProperties:r.Object.prototype.stateProperties.concat(h),cacheProperties:r.Object.prototype.cacheProperties.concat(h),stroke:null,shadow:null,path:null,pathStartOffset:0,pathSide:"left",pathAlign:"baseline",_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,direction:"ltr",_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(e,i){this.styles=i&&i.styles||{},this.text=e,this.__skipDimension=!0,this.callSuper("initialize",i),this.path&&this.setPathInfo(),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},setPathInfo:function(){var e=this.path;e&&(e.segmentsInfo=r.util.getPathSegmentsInfo(e.path))},getMeasuringContext:function(){return r._measuringContext||(r._measuringContext=this.canvas&&this.canvas.contextCache||r.util.createCanvasElement().getContext("2d")),r._measuringContext},_splitText:function(){var e=this._splitTextIntoLines(this.text);return this.textLines=e.lines,this._textLines=e.graphemeLines,this._unwrappedTextLines=e._unwrappedLines,this._text=e.graphemeText,e},initDimensions:function(){if(!this.__skipDimension){if(this._splitText(),this._clearCache(),this.path){var e=1.1*this.getHeightOfLine(0);this.width=this.path.width+e,this.height=this.path.height+e}else this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight();-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.saveState({propertySet:"_dimensionAffectingProps"})}},enlargeSpaces:function(){for(var e,i,s,a,n,l,u=0,d=this._textLines.length;u<d;u++)if(("justify"===this.textAlign||u!==d-1&&!this.isEndOfWrapping(u))&&(s=0,a=this._textLines[u],(i=this.getLineWidth(u))<this.width&&(l=this.textLines[u].match(this._reSpacesAndTabs)))){e=(this.width-i)/l.length;for(var g=0,v=a.length;g<=v;g++)n=this.__charBounds[u][g],this._reSpaceAndTab.test(a[g])?(n.width+=e,n.kernedWidth+=e,n.left+=s,s+=e):n.left+=s}},isEndOfWrapping:function(e){return e===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_getCacheCanvasDimensions:function(){var e=this.callSuper("_getCacheCanvasDimensions"),i=this.fontSize;return e.width+=i*e.zoomX,e.height+=i*e.zoomY,e},_render:function(e){var i=this.path;i&&!i.isNotVisible()&&i._render(e),this._setTextStyles(e),this._renderTextLinesBackground(e),this._renderTextDecoration(e,"underline"),this._renderText(e),this._renderTextDecoration(e,"overline"),this._renderTextDecoration(e,"linethrough")},_renderText:function(e){"stroke"===this.paintFirst?(this._renderTextStroke(e),this._renderTextFill(e)):(this._renderTextFill(e),this._renderTextStroke(e))},_setTextStyles:function(e,i,t){if(e.textBaseline="alphabetic",this.path)switch(this.pathAlign){case"center":e.textBaseline="middle";break;case"ascender":e.textBaseline="top";break;
vendor: 4,556 bytes, line 1
1case"descender":e.textBaseline="bottom"}e.font=this._getFontDeclaration(i,t)},calcTextWidth:function(){for(var e=this.getLineWidth(0),i=1,t=this._textLines.length;i<t;i++){var s=this.getLineWidth(i);s>e&&(e=s)}return e},_renderTextLine:function(e,i,t,s,a,n){this._renderChars(e,i,t,s,a,n)},_renderTextLinesBackground:function(e){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var i,t,a,n,v,p,m,s=e.fillStyle,l=this._getLeftOffset(),u=this._getTopOffset(),d=0,g=0,y=this.path,_=0,b=this._textLines.length;_<b;_++)if(i=this.getHeightOfLine(_),this.textBackgroundColor||this.styleHas("textBackgroundColor",_)){a=this._textLines[_],t=this._getLineLeftOffset(_),g=0,d=0,n=this.getValueOfPropertyAt(_,0,"textBackgroundColor");for(var A=0,F=a.length;A<F;A++)v=this.__charBounds[_][A],p=this.getValueOfPropertyAt(_,A,"textBackgroundColor"),y?(e.save(),e.translate(v.renderLeft,v.renderTop),e.rotate(v.angle),e.fillStyle=p,p&&e.fillRect(-v.width/2,-i/this.lineHeight*(1-this._fontSizeFraction),v.width,i/this.lineHeight),e.restore()):p!==n?(m=l+t+d,"rtl"===this.direction&&(m=this.width-m-g),e.fillStyle=n,n&&e.fillRect(m,u,g,i/this.lineHeight),d=v.left,g=v.width,n=p):g+=v.kernedWidth;p&&!y&&(m=l+t+d,"rtl"===this.direction&&(m=this.width-m-g),e.fillStyle=p,e.fillRect(m,u,g,i/this.lineHeight)),u+=i}else u+=i;e.fillStyle=s,this._removeShadow(e)}},getFontCache:function(e){var i=e.fontFamily.toLowerCase();r.charWidthsCache[i]||(r.charWidthsCache[i]={});var t=r.charWidthsCache[i],s=e.fontStyle.toLowerCase()+"_"+(e.fontWeight+"").toLowerCase();return t[s]||(t[s]={}),t[s]},_measureChar:function(e,i,t,s){var g,v,p,m,a=this.getFontCache(i),u=t+e,d=this._getFontDeclaration(i)===this._getFontDeclaration(s),y=i.fontSize/this.CACHE_FONT_SIZE;if(t&&void 0!==a[t]&&(p=a[t]),void 0!==a[e]&&(m=g=a[e]),d&&void 0!==a[u]&&(m=(v=a[u])-p),void 0===g||void 0===p||void 0===v){var _=this.getMeasuringContext();this._setTextStyles(_,i,!0)}return void 0===g&&(m=g=_.measureText(e).width,a[e]=g),void 0===p&&d&&t&&(p=_.measureText(t).width,a[t]=p),d&&void 0===v&&(v=_.measureText(u).width,a[u]=v,m=v-p),{width:g*y,kernedWidth:m*y}},getHeightOfChar:function(e,i){return this.getValueOfPropertyAt(e,i,"fontSize")},measureLine:function(e){var i=this._measureLine(e);return 0!==this.charSpacing&&(i.width-=this._getWidthOfCharSpacing()),i.width<0&&(i.width=0),i},_measureLine:function(e){var t,s,n,l,v,p,i=0,a=this._textLines[e],d=new Array(a.length),g=0,y=this.path,m="right"===this.pathSide;for(this.__charBounds[e]=d,t=0;t<a.length;t++)l=this._getGraphemeBox(s=a[t],e,t,n),d[t]=l,i+=l.kernedWidth,n=s;if(d[t]={left:l?l.left+l.width:0,width:0,kernedWidth:0,height:this.fontSize},y){switch(p=y.segmentsInfo[y.segmentsInfo.length-1].length,(v=r.util.getPointOnPath(y.path,0,y.segmentsInfo)).x+=y.pathOffset.x,v.y+=y.pathOffset.y,this.textAlign){case"left":g=m?p-i:0;break;case"center":g=(p-i)/2;break;case"right":g=m?0:p-i}for(g+=this.pathStartOffset*(m?-1:1),t=m?a.length-1:0;m?t>=0:t<a.length;m?t--:t++)g>p?g%=p:g<0&&(g+=p),this._setGraphemeOnPath(g,l=d[t],v),g+=l.kernedWidth}return{width:i,numOfSpaces:0}},_setGraphemeOnPath:function(e,i,t){var a=this.path,n=r.util.getPointOnPath(a.path,e+i.kernedWidth/2,a.segmentsInfo);i.renderLeft=n.x-t.x,i.renderTop=n.y-t.y,i.angle=n.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(e,i,t,s,a){var v,n=this.getCompleteStyleDeclaration(i,t),l=s?this.getCompleteStyleDeclaration(i,t-1):{},u=this._measureChar(e,n,s,l),d=u.kernedWidth,g=u.width;0!==this.charSpacing&&(g+=v=this._getWidthOfCharSpacing(),d+=v);var p={width:g,left:0,height:n.fontSize,kernedWidth:d,deltaY:n.deltaY};if(t>0&&!a){var y=this.__charBounds[i][t-1];p.left=y.left+y.width+u.kernedWidth-u.width}return p},getHeightOfLine:function(e){if(this.__lineHeights[e])return this.__lineHeights[e];for(var i=this._textLines[e],t=this.getHeightOfChar(e,0),s=1,a=i.length;s<a;s++)t=Math.max(this.getHeightOfChar(e,s),t);return this.__lineHeights[e]=t*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var e,i=0,t=0,s=this._textLines.length;t<s;t++)e=this.getHeightOfLine(t),i+=t===s-1?e/this.lineHeight:e;return i},_getLeftOffset:function(){return"ltr"===this.direction?-this.width/2:this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextCommon:function(e,i){e.save();for(var t=0,s=this._getLeftOffset(),a=this._getTopOffset(),n=0,l=this._textLines.length;n<l;n++){var u=this.getHeightOfLine(n),d=u/this.lineHeight,g=this._getLineLeftOffset(n);this._renderTextLine(i,e,this._textLines[n],s+g,a+t+d,n),t+=u}
1e.restore()},_renderTextFill:function(e){!this.fill&&!this.styleHas("fill")||this._renderTextCommon(e,"fillText")},_renderTextStroke:function(e){(!this.stroke||0===this.strokeWidth)&&this.isEmptyStyles()||(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e),e.save(),this._setLineDash(e,this.strokeDashArray),e.beginPath(),this._renderTextCommon(e,"strokeText"),e.closePath(),e.restore())},_renderChars:function(e,i,t,s,a,n){var d,g,p,m,l=this.getHeightOfLine(n),u=-1!==this.textAlign.indexOf("justify"),v="",y=0,_=this.path,b=!u&&0===this.charSpacing&&this.isEmptyStyles(n)&&!_,A="ltr"===this.direction,F="ltr"===this.direction?1:-1,W=i.canvas.getAttribute("dir");if(i.save(),W!==this.direction&&(i.canvas.setAttribute("dir",A?"ltr":"rtl"),i.direction=A?"ltr":"rtl",i.textAlign=A?"left":"right"),a-=l*this._fontSizeFraction/this.lineHeight,b)return this._renderChar(e,i,n,0,t.join(""),s,a,l),void i.restore();for(var X=0,tt=t.length-1;X<=tt;X++)m=X===tt||this.charSpacing||_,v+=t[X],p=this.__charBounds[n][X],0===y?(s+=F*(p.kernedWidth-p.width),y+=p.width):y+=p.kernedWidth,u&&!m&&this._reSpaceAndTab.test(t[X])&&(m=!0),m||(d=d||this.getCompleteStyleDeclaration(n,X),g=this.getCompleteStyleDeclaration(n,X+1),m=r.util.hasStyleChanged(d,g,!1)),m&&(_?(i.save(),i.translate(p.renderLeft,p.renderTop),i.rotate(p.angle),this._renderChar(e,i,n,X,v,-y/2,0,l),i.restore()):this._renderChar(e,i,n,X,v,s,a,l),v="",d=g,s+=F*y,y=0);i.restore()},_applyPatternGradientTransformText:function(e){var t,i=r.util.createCanvasElement(),s=this.width+this.strokeWidth,a=this.height+this.strokeWidth;return i.width=s,i.height=a,(t=i.getContext("2d")).beginPath(),t.moveTo(0,0),t.lineTo(s,0),t.lineTo(s,a),t.lineTo(0,a),t.closePath(),t.translate(s/2,a/2),t.fillStyle=e.toLive(t),this._applyPatternGradientTransform(t,e),t.fill(),t.createPattern(i,"no-repeat")},handleFiller:function(e,i,t){var s,a;return t.toLive?"percentage"===t.gradientUnits||t.gradientTransform||t.patternTransform?(e.translate(s=-this.width/2,a=-this.height/2),e[i]=this._applyPatternGradientTransformText(t),{offsetX:s,offsetY:a}):(e[i]=t.toLive(e,this),this._applyPatternGradientTransform(e,t)):(e[i]=t,{offsetX:0,offsetY:0})},_setStrokeStyles:function(e,i){return e.lineWidth=i.strokeWidth,e.lineCap=this.strokeLineCap,e.lineDashOffset=this.strokeDashOffset,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,this.handleFiller(e,"strokeStyle",i.stroke)},_setFillStyles:function(e,i){return this.handleFiller(e,"fillStyle",i.fill)},_renderChar:function(e,i,t,s,a,n,l){var p,y,u=this._getStyleDeclaration(t,s),d=this.getCompleteStyleDeclaration(t,s),g="fillText"===e&&d.fill,v="strokeText"===e&&d.stroke&&d.strokeWidth;!v&&!g||(i.save(),g&&(p=this._setFillStyles(i,d)),v&&(y=this._setStrokeStyles(i,d)),i.font=this._getFontDeclaration(d),u&&u.textBackgroundColor&&this._removeShadow(i),u&&u.deltaY&&(l+=u.deltaY),g&&i.fillText(a,n-p.offsetX,l-p.offsetY),v&&i.strokeText(a,n-y.offsetX,l-y.offsetY),i.restore())},setSuperscript:function(e,i){return this._setScript(e,i,this.superscript)},setSubscript:function(e,i){return this._setScript(e,i,this.subscript)},_setScript:function(e,i,t){var s=this.get2DCursorLocation(e,!0),a=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY");return this.setSelectionStyles({fontSize:a*t.size,deltaY:n+a*t.baseline},e,i),this},_getLineLeftOffset:function(e){var i=this.getLineWidth(e),t=this.width-i,s=this.textAlign,a=this.direction,n=0,l=this.isEndOfWrapping(e);return"justify"===s||"justify-center"===s&&!l||"justify-right"===s&&!l||"justify-left"===s&&!l?0:("center"===s&&(n=t/2),"right"===s&&(n=t),"justify-center"===s&&(n=t/2),"justify-right"===s&&(n=t),"rtl"===a&&(n-=t),n)},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var e=this._forceClearCache;return e||(e=this.hasStateChanged("_dimensionAffectingProps")),e&&(this.dirty=!0,this._forceClearCache=!1),e},getLineWidth:function(e){if(void 0!==this.__lineWidths[e])return this.__lineWidths[e];var t=this.measureLine(e).width;return this.__lineWidths[e]=t,t},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(e,i,t){var s=this._getStyleDeclaration(e,i);return s&&void 0!==s[t]?s[t]:this[t]},_renderTextDecoration:function(e,i){if(this[i]||this.styleHas(i)){e.save(),("overline"===i||"linethrough"===i)&&this._removeShadow(e);for(var t,s,a,n,l,u,d,g,y,m,_,b,A,F,L,W,v=this._getLeftOffset(),p=this._getTopOffset(),X=this.path,tt=this._getWidthOfCharSpacing(),q=this.offsets[i],rt=0,C=this._textLines.length;rt<C;rt++)if(t=this.getHeightOfLine(rt),this[i]||this.styleHas(i,rt)){d=this._textLines[rt],F=t/this.lineHeight,n=this._getLineLeftOffset(rt),m=0,_=0,g=this.getValueOfPropertyAt(rt,0,i),W=this.getValueOfPropertyAt(rt,0,"fill"),y=p+F*(1-this._fontSizeFraction),s=this.getHeightOfChar(rt,0),l=this.getValueOfPropertyAt(rt,0,"deltaY");for(var O=0,E=d.length;O<E;O++)if(b=this.__charBounds[rt][O],A=this.getValueOfPropertyAt(rt,O,i),L=this.getValueOfPropertyAt(rt,O,"fill"),a=this.getHeightOfChar(rt,O),u=this.getValueOfPropertyAt(rt,O,"deltaY"),X&&A&&L)e.save(),e.fillStyle=W,e.translate(b.renderLeft,b.renderTop),e.rotate(b.angle),e.fillRect(-b.kernedWidth/2,q*a+u,b.kernedWidth,this.fontSize/15),e.restore(
vendor: 12,393 bytes, line 1
1);else if((A!==g||L!==W||a!==s||u!==l)&&_>0){var x=v+n+m;"rtl"===this.direction&&(x=this.width-x-_),g&&W&&(e.fillStyle=W,e.fillRect(x,y+q*s+l,_,this.fontSize/15)),m=b.left,_=b.width,g=A,W=L,s=a,l=u}else _+=b.kernedWidth;x=v+n+m,"rtl"===this.direction&&(x=this.width-x-_),e.fillStyle=L,A&&L&&e.fillRect(x,y+q*s+l,_-tt,this.fontSize/15),p+=t}else p+=t;e.restore()}},_getFontDeclaration:function(e,i){var t=e||this,s=this.fontFamily,a=r.Text.genericFonts.indexOf(s.toLowerCase())>-1,n=void 0===s||s.indexOf("'")>-1||s.indexOf(",")>-1||s.indexOf('"')>-1||a?t.fontFamily:'"'+t.fontFamily+'"';return[r.isLikelyNode?t.fontWeight:t.fontStyle,r.isLikelyNode?t.fontStyle:t.fontWeight,i?this.CACHE_FONT_SIZE+"px":t.fontSize+"px",n].join(" ")},render:function(e){!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",e))},_splitTextIntoLines:function(e){for(var i=e.split(this._reNewline),t=new Array(i.length),s=["\n"],a=[],n=0;n<i.length;n++)t[n]=r.util.string.graphemeSplit(i[n]),a=a.concat(t[n],s);return a.pop(),{_unwrappedLines:t,lines:i,graphemeText:a,graphemeLines:t}},toObject:function(e){var i=h.concat(e),t=this.callSuper("toObject",i);return t.styles=r.util.stylesToArray(this.styles,this.text),t.path&&(t.path=this.path.toObject()),t},set:function(e,i){this.callSuper("set",e,i);var t=!1,s=!1;if("object"==typeof e)for(var a in e)"path"===a&&this.setPathInfo(),t=t||-1!==this._dimensionAffectingProps.indexOf(a),s=s||"path"===a;else t=-1!==this._dimensionAffectingProps.indexOf(e),s="path"===e;return s&&this.setPathInfo(),t&&(this.initDimensions(),this.setCoords()),this},complexity:function(){return 1}}),r.Text.ATTRIBUTE_NAMES=r.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor".split(" ")),r.Text.DEFAULT_SVG_FONT_SIZE=16,r.Text.fromElement=function(e,i,t){if(!e)return i(null);var s=r.parseAttributes(e,r.Text.ATTRIBUTE_NAMES),a=s.textAnchor||"left";if((t=r.util.object.extend(t?o(t):{},s)).top=t.top||0,t.left=t.left||0,s.textDecoration){var n=s.textDecoration;-1!==n.indexOf("underline")&&(t.underline=!0),-1!==n.indexOf("overline")&&(t.overline=!0),-1!==n.indexOf("line-through")&&(t.linethrough=!0),delete t.textDecoration}"dx"in s&&(t.left+=s.dx),"dy"in s&&(t.top+=s.dy),"fontSize"in t||(t.fontSize=r.Text.DEFAULT_SVG_FONT_SIZE);var l="";"textContent"in e?l=e.textContent:"firstChild"in e&&null!==e.firstChild&&"data"in e.firstChild&&null!==e.firstChild.data&&(l=e.firstChild.data),l=l.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var u=t.strokeWidth;t.strokeWidth=0;var d=new r.Text(l,t),g=d.getScaledHeight()/d.height,p=((d.height+d.strokeWidth)*d.lineHeight-d.height)*g,y=d.getScaledHeight()+p,m=0;"center"===a&&(m=d.getScaledWidth()/2),"right"===a&&(m=d.getScaledWidth()),d.set({left:d.left-m,top:d.top-(y-d.fontSize*(.07+d._fontSizeFraction))/d.lineHeight,strokeWidth:void 0!==u?u:1}),i(d)},r.Text.fromObject=function(e,i){var t=o(e),s=e.path;return delete t.path,r.Object._fromObject("Text",t,function(a){a.styles=r.util.stylesFromArray(e.styles,e.text),s?r.Object._fromObject("Path",s,function(n){a.set("path",n),i(a)},"path"):i(a)},"text")},r.Text.genericFonts=["sans-serif","serif","cursive","fantasy","monospace"],r.util.createAccessors&&r.util.createAccessors(r.Text)}}(P),f.util.object.extend(f.Text.prototype,{isEmptyStyles:function(c){if(!this.styles||void 0!==c&&!this.styles[c])return!0;var r=void 0===c?this.styles:{line:this.styles[c]};for(var o in r)for(var h in r[o])for(var e in r[o][h])return!1;return!0},styleHas:function(c,r){if(!this.styles||!c||""===c||void 0!==r&&!this.styles[r])return!1;var o=void 0===r?this.styles:{0:this.styles[r]};for(var h in o)for(var e in o[h])if(void 0!==o[h][e][c])return!0;return!1},cleanStyle:function(c){if(!this.styles||!c||""===c)return!1;var h,e,r=this.styles,o=0,i=!0,t=0;for(var a in r){for(var n in h=0,r[a]){var s;o++,(s=r[a][n]).hasOwnProperty(c)?(e?s[c]!==e&&(i=!1):e=s[c],s[c]===this[c]&&delete s[c]):i=!1,0!==Object.keys(s).length?h++:delete r[a][n]}0===h&&delete r[a]}for(var u=0;u<this._textLines.length;u++)t+=this._textLines[u].length;i&&o===t&&(this[c]=e,this.removeStyle(c))},removeStyle:function(c){if(this.styles&&c&&""!==c){var o,h,e,r=this.styles;for(h in r){for(e in o=r[h])delete o[e][c],0===Object.keys(o[e]).length&&delete o[e];0===Object.keys(o).length&&delete r[h]}}},_extendStyles:function(c,r){var o=this.get2DCursorLocation(c);this._getLineStyle(o.lineIndex)||this._setLineStyle(o.lineIndex),this._getStyleDeclaration(o.lineIndex,o.charIndex)||this._setStyleDeclaration(o.lineIndex,o.charIndex,{}),f.util.object.extend(this._getStyleDeclaration(o.lineIndex,o.charIndex),r)},get2DCursorLocation:function(c,r){void 0===c&&(c=this.selectionStart);for(var o=r?this._unwrappedTextLines:this._textLines,h=o.length,e=0;e<h;e++){if(c<=o[e].length)return{lineIndex:e,charIndex:c};c-=o[e].length+this.missingNewlineOffset(e,r)}return{lineIndex:e-1,charIndex:o[e-1].length<c?o[e-1].length:c}},getSelectionStyles:function(c,r,o){void 0===c&&(c=this.selectionStart||0),void 0===r&&(r=this.selectionEnd||c);for(var h=[],e=c;e<r;e++)h.push(this.getStyleAtPosition(e,o));return h},getStyleAtPosition:function(c,r){var o=this.get2DCursorLocation(c);return(r?this.getCompleteStyleDeclaration(o.lineIndex,o.charIndex):this._getStyleDeclaration(o.lineIndex,o.charIndex))||{}},setSelectionStyles:function(c,r,o){void 0===r&&(r=this.selectionStart||0),void 0===o&&(o=this.selectionEnd||r);for(var h=r;h<o;h++)this._extendStyles(h,c);return this._forceClearCache=!0,this},_getStyleDeclaration:function(c,r){var o=this.styles&&this.styles[c];return o?o[r]:null},getCompleteStyleDeclaration:function(c,r){for(var e,o=this._getStyleDeclaration(c,r)||{},h={},i=0;i<this._styleProperties.length;i++)h[e=this._styleProperties[i]]=void 0===o[e]?this[e]:o[e];return h},_setStyleDeclaration:function(c,r,o){this.styles[c][r]=o},_deleteStyleDeclaration:function(c,r){delete this.styles[c][r]},_getLineStyle:function(c){return!!this.styles[c]},_setLineStyle:function(c){this.styles[c]={}},_deleteLineStyle:function(c){delete this.styles[c]}}),function(){function c(r){r.textDecoration&&(r.textDecoration.indexOf("underline")>-1&&(r.underline=!0),r.textDecoration.indexOf("line-through")>-1&&(r.linethrough=!0),r.textDecoration.indexOf("overline")>-1&&(r.overline=!0),delete r.textDecoration)}f.IText=f.util.createClass(f.Text,f.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(r,o){this.callSuper("initialize",r,o),this.initBehavior()},setSelectionStart:function(r){r=Math.max(r,0),this._updateAndFire("selectionStart",r)},setSelectionEnd:function(r){r=Math.min(r,this.text.length),this._updateAndFire("selectionEnd",r)},_updateAndFire:function(r,o){this[r]!==o&&(this._fireSelectionChanged(),this[r]=o),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(r){this.clearContextTop(),this.callSuper("render",r),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(r){this.callSuper("_render",r)},clearContextTop:function(r){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var o=this.canvas.contextTop,h=this.canvas.viewportTransform;o.save(),o.transform(h[0],h[1],h[2],h[3],h[4],h[5]),this.transform(o),this._clearTextArea(o),r||o.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var r=this._getCursorBoundaries(),o=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(r,o):this.renderSelection(r,o),o.restore()}},_clearTextArea:function(r){var o=this.width+4,h=this.height+4;r.clearRect(-o/2,-h/2,o,h)},_getCursorBoundaries:function(r){void 0===r&&(r=this.selectionStart);var o=this._getLeftOffset(),h=this._getTopOffset(),e=this._getCursorBoundariesOffsets(r);return{left:o,top:h,leftOffset:e.left,topOffset:e.top}},_getCursorBoundariesOffsets:function(r){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var o,h,e,s,i=0,t=0,a=this.get2DCursorLocation(r);e=a.charIndex,h=a.lineIndex;for(var n=0;n<h;n++)i+=this.getHeightOfLine(n);o=this._getLineLeftOffset(h);var l=this.__charBounds[h][e];return l&&(t=l.left),0!==this.charSpacing&&e===this._textLines[h].length&&(t-=this._getWidthOfCharSpacing()),s={top:i,left:o+(t>0?t:0)},"rtl"===this.direction&&(s.left*=-1),this.cursorOffsetCache=s,this.cursorOffsetCache},renderCursor:function(r,o){var h=this.get2DCursorLocation(),e=h.lineIndex,i=h.charIndex>0?h.charIndex-1:0,t=this.getValueOfPropertyAt(e,i,"fontSize"),s=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/s,n=r.topOffset,l=this.getValueOfPropertyAt(e,i,"deltaY");n+=(1-this._fontSizeFraction)*this.getHeightOfLine(e)/this.lineHeight-t*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(r,o),o.fillStyle=this.cursorColor||this.getValueOfPropertyAt(e,i,"fill"),o.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,o.fillRect(r.left+r.leftOffset-a/2,n+r.top+l,a,t)},renderSelection:function(r,o){for(var h=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,e=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,i=-1!==this.textAlign.indexOf("justify"),t=this.get2DCursorLocation(h),s=this.get2DCursorLocation(e),a=t.lineIndex,n=s.lineIndex,l=t.charIndex<0?0:t.charIndex,u=s.charIndex<0?0:s.charIndex,d=a;d<=n;d++){var p,g=this._getLineLeftOffset(d)||0,v=this.getHeightOfLine(d),y=0,m=0;if(d===a&&(y=this.__charBounds[a][l].left),d>=a&&d<n)m=i&&!this.isEndOfWrapping(d)?this.width:this.getLineWidth(d)||5;else if(d===n)if(0===u)m=this.__charBounds[n][u].left;else{var _=this._getWidthOfCharSpacing();m=this.__charBounds[n][u-1].left+this.__charBounds[n][u-1].width-_}p=v,(this.lineHeight<1||d===n&&this.lineHeight>1)&&(v/=this.lineHeight);var b=r.left+g+y,A=m-y,F=v,L=0;this.inCompositionMode?(o.fillStyle=this.compositionColor||"black",F=1,L=v):o.fillStyle=this.selectionColor,"rtl"===this.direction&&(b=this.width-b-A),o.fillRect(b,r.top+r.topOffset+L,A,F),r.topOffset+=p}},getCurrentCharFontSize:function(){var r=this._getCurrentCharIndex();return this.getValueOfPropertyAt(r.l,r.c,"fontSize")},getCurrentCharColor:function(){var r=this._getCurrentCharIndex();return this.getValueOfPropertyAt(r.l,r.c,"fill")},_getCurrentCharIndex:function(){var r=this.get2DCursorLocation(this.selectionStart,!0);return{l:r.lineIndex,c:r.charIndex>0?r.charIndex-1:0}}}),f.IText.fromObject=function(r,o){var h=f.util.stylesFromArray(r.styles,r.text),e=Object.assign({},r,{styles:h});if(delete e.path,c(e),e.styles)for(var i in e.styles)for(var t in e.styles[i])c(e.styles[i][t]);f.Object._fromObject("IText",e,function(s){r.path?f.Object._fromObject("Path",r.path,function(a){s.set("path",a),o(s)},"path"):o(s)},"text")}}(),function(){var c=f.util.object.clone;f.util.object.extend(f.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var r=this;this.on("added",function(){var o=r.canvas;o&&(o._hasITextHandlers||(o._hasITextHandlers=!0,r._initCanvasHandlers(o)),o._iTextInstances=o._iTextInstances||[],o._iTextInstances.push(r))})},initRemovedHandler:function(){var r=this;this.on("removed",function(){var o=r.canvas;o&&(o._iTextInstances=o._iTextInstances||[],f.util.removeFromArray(o._iTextInstances,r),0===o._iTextInstances.length&&(o._hasITextHandlers=!1,r._removeCanvasHandlers(o)))})},_initCanvasHandlers:function(r){r._mouseUpITextHandler=function(){r._iTextInstances&&r._iTextInstances.forEac
1h(function(o){o.__isMousedown=!1})},r.on("mouse:up",r._mouseUpITextHandler)},_removeCanvasHandlers:function(r){r.off("mouse:up",r._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(r,o,h,e){var i;return i={isAborted:!1,abort:function(){this.isAborted=!0}},r.animate("_currentCursorOpacity",o,{duration:h,onComplete:function(){i.isAborted||r[e]()},onChange:function(){r.canvas&&r.selectionStart===r.selectionEnd&&r.renderCursorOrSelection()},abort:function(){return i.isAborted}}),i},_onTickComplete:function(){var r=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){r._currentTickCompleteState=r._animateCursor(r,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(r){var o=this,h=r?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){o._tick()},h)},abortCursorAnimation:function(){var r=this._currentTickState||this._currentTickCompleteState,o=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,r&&o&&o.clearContext(o.contextTop||o.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(r){var o=0,h=r-1;if(this._reSpace.test(this._text[h]))for(;this._reSpace.test(this._text[h]);)o++,h--;for(;/\S/.test(this._text[h])&&h>-1;)o++,h--;return r-o},findWordBoundaryRight:function(r){var o=0,h=r;if(this._reSpace.test(this._text[h]))for(;this._reSpace.test(this._text[h]);)o++,h++;for(;/\S/.test(this._text[h])&&h<this._text.length;)o++,h++;return r+o},findLineBoundaryLeft:function(r){for(var o=0,h=r-1;!/\n/.test(this._text[h])&&h>-1;)o++,h--;return r-o},findLineBoundaryRight:function(r){for(var o=0,h=r;!/\n/.test(this._text[h])&&h<this._text.length;)o++,h++;return r+o},searchWordBoundary:function(r,o){for(var h=this._text,e=this._reSpace.test(h[r])?r-1:r,i=h[e],t=f.reNonWord;!t.test(i)&&e>0&&e<h.length;)i=h[e+=o];return t.test(i)&&(e+=1===o?0:1),e},selectWord:function(r){var o=this.searchWordBoundary(r=r||this.selectionStart,-1),h=this.searchWordBoundary(r,1);this.selectionStart=o,this.selectionEnd=h,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()},selectLine:function(r){var o=this.findLineBoundaryLeft(r=r||this.selectionStart),h=this.findLineBoundaryRight(r);return this.selectionStart=o,this.selectionEnd=h,this._fireSelectionChanged(),this._updateTextarea(),this},enterEditing:function(r){if(!this.isEditing&&this.editable)return this.canvas&&(this.canvas.calcOffset(),this.exitEditingOnOthers(this.canvas)),this.isEditing=!0,this.initHiddenTextarea(r),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick(),this.fire("editing:entered"),this._fireSelectionChanged(),this.canvas?(this.canvas.fire("text:editing:entered",{target:this}),this.initMouseMoveHandler(),this.canvas.requestRenderAll(),this):this},exitEditingOnOthers:function(r){r._iTextInstances&&r._iTextInstances.forEach(function(o){o.selected=!1,o.isEditing&&o.exitEditing()})},initMouseMoveHandler:function(){this.canvas.on("mouse:move",this.mouseMoveHandler)},mouseMoveHandler:function(r){if(this.__isMousedown&&this.isEditing){document.activeElement!==this.hiddenTextarea&&this.hiddenTextarea.focus();var o=this.getSelectionStartFromPointer(r.e),h=this.selectionStart,e=this.selectionEnd;(o!==this.__selectionStartOnMouseDown||h===e)&&(h===o||e===o)||(o>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=o):(this.selectionStart=o,this.selectionEnd=this.__selectionStartOnMouseDown),(this.selectionStart!==h||this.selectionEnd!==e)&&(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}}
vendor: 20,980 bytes, line 1
1,_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(r,o,h){var e=h.slice(0,r),i=f.util.string.graphemeSplit(e).length;if(r===o)return{selectionStart:i,selectionEnd:i};var t=h.slice(r,o);return{selectionStart:i,selectionEnd:i+f.util.string.graphemeSplit(t).length}},fromGraphemeToStringSelection:function(r,o,h){var i=h.slice(0,r).join("").length;return r===o?{selectionStart:i,selectionEnd:i}:{selectionStart:i,selectionEnd:i+h.slice(r,o).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var r=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=r.selectionStart,this.hiddenTextarea.selectionEnd=r.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var r=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=r.selectionEnd,this.inCompositionMode||(this.selectionStart=r.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var r=this._calcTextareaPosition();this.hiddenTextarea.style.left=r.left,this.hiddenTextarea.style.top=r.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var r=this.inCompositionMode?this.compositionStart:this.selectionStart,o=this._getCursorBoundaries(r),h=this.get2DCursorLocation(r),t=this.getValueOfPropertyAt(h.lineIndex,h.charIndex,"fontSize")*this.lineHeight,s=o.leftOffset,a=this.calcTransformMatrix(),n={x:o.left+s,y:o.top+o.topOffset+t},l=this.canvas.getRetinaScaling(),u=this.canvas.upperCanvasEl,d=u.width/l,g=u.height/l,v=d-t,p=g-t,y=u.clientWidth/d,m=u.clientHeight/g;return n=f.util.transformPoint(n,a),(n=f.util.transformPoint(n,this.canvas.viewportTransform)).x*=y,n.y*=m,n.x<0&&(n.x=0),n.x>v&&(n.x=v),n.y<0&&(n.y=0),n.y>p&&(n.y=p),n.x+=this.canvas._offset.left,n.y+=this.canvas._offset.top,{left:n.x+"px",top:n.y+"px",fontSize:t+"px",charHeight:t}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){!this._savedProps||(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var r=this._textBeforeEdit!==this.text,o=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,o&&(o.blur&&o.blur(),o.parentNode&&o.parentNode.removeChild(o)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),r&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),r&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var r in this.styles)this._textLines[r]||delete this.styles[r]},removeStyleFromTo:function(r,o){var n,l,h=this.get2DCursorLocation(r,!0),e=this.get2DCursorLocation(o,!0),i=h.lineIndex,t=h.charIndex,s=e.lineIndex,a=e.charIndex;if(i!==s){if(this.styles[i])for(n=t;n<this._unwrappedTextLines[i].length;n++)delete this.styles[i][n];if(this.styles[s])for(n=a;n<this._unwrappedTextLines[s].length;n++)(l=this.styles[s][n])&&(this.styles[i]||(this.styles[i]={}),this.styles[i][t+n-a]=l);for(n=i+1;n<=s;n++)delete this.styles[n];this.shiftLineStyles(s,i-s)}else if(this.styles[i]){l=this.styles[i];var d,g,u=a-t;for(n=t;n<a;n++)delete l[n];for(g in this.styles[i])(d=parseInt(g,10))>=a&&(l[d-u]=l[g],delete l[g])}},shiftLineStyles:function(r,o){var h=c(this.styles);for(var e in this.styles){var i=parseInt(e,10);i>r&&(this.styles[i+o]=h[i],h[i-o]||delete this.styles[i])}},restartCursorIfNeeded:function(){(!this._currentTickState||this._currentTickState.isAborted||!this._currentTickCompleteState||this._currentTickCompleteState.isAborted)&&this.initDelayedCursor()},insertNewlineStyleObject:function(r,o,h,e){var i,t={},s=!1,a=this._unwrappedTextLines[r].length,n=a===o;for(var l in h||(h=1),this.shiftLineStyles(r,h),this.styles[r]&&(i=this.styles[r][0===o?o:o-1]),this.styles[r]){var u=parseInt(l,10);u>=o&&(s=!0,t[u-o]=this.styles[r][l],n&&0===o||delete this.styles[r][l])}var d=!1;for(s&&!n&&(this.styles[r+h]=t,d=!0),(d||a>o)&&h--;h>0;)e&&e[h-1]?this.styles[r+h]={0:c(e[h-1])}:i?this.styles[r+h]={0:c(i)}:delete this.styles[r+h],h--;this._forceClearCache=!0},insertCharStyleObject:function(r,o,h,e){this.styles||(this.styles={});var i=this.styles[r],t=i?c(i):{};for(var s in h||(h=1),t){var a=parseInt(s,10);a>=o&&(i[a+h]=t[a],t[a-h]||delete i[a])}if(this._forceClearCache=!0,e)for(;h--;)!Object.keys(e[h]).length||(this.styles[r]||(this.styles[r]={}),this.styles[r][o+h]=c(e[h]));else if(i)for(var n=i[o?o-1:1];n&&h--;)this.styles[r][o+h]=c(n)},insertNewStyleBlock:function(r,o,h){for(var e=this.get2DCursorLocation(o,!0),i=[0],t=0,s=0;s<r.length;s++)"\n"===r[s]?i[++t]=0:i[t]++;for(i[0]>0&&(this.insertCharStyleObject(e.lineIndex,e.charIndex,i[0],h),h=h&&h.slice(i[0]+1)),t&&this.insertNewlineStyleObject(e.lineIndex,e.charIndex+i[0],t),s=1;s<t;s++)i[s]>0?this.insertCharStyleObject(e.lineIndex+s,0,i[s],h):h&&this.styles[e.lineIndex+s]&&h[0]&&(this.styles[e.lineIndex+s][0]=h[0]),h=h&&h.slice(i[s]+1);i[s]>0&&this.insertCharStyleObject(e.lineIndex+s,0,i[s],h)},setSelectionStartEndWithShift:function(r,o,h){h<=r?(o===r?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=r),this.selectionStart=h):h>r&&h<o?"right"===this._selectionDirection?this.selectionEnd=h:this.selectionStart=h:(o===r?this._selectionDirection="right":"left"===this._selectionDirection&&(this._selectionDirection="right",this.selectionStart=o),this.selectionEnd=h)},setSelectionInBoundaries:function(){var r=this.text.length;this.selectionStart>r?this.selectionStart=r:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>r?this.selectionEnd=r:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),f.util.object.extend(f.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(c){if(this.canvas){this.__newClickTime=+new Date;var r=c.pointer;this.isTripleClick(r)&&(this.fire("tripleclick",c),this._stopEvent(c.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=r,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(c){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===c.x&&this.__lastPointer.y===c.y},_stopEvent:function(c){c.preventDefault&&c.preventDefault(),c.stopPropagation&&c.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(c){!this.isEditing||this.selectWord(this.getSelectionStartFromPointer(c.e))},tripleClickHandler:function(c){!this.isEditing||this.selectLine(this.getSelectionStartFromPointer(c.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(c){!this.canvas||!this.editable||c.e.button&&1!==c.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(c.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(c){!this.canvas||!this.editable||c.e.button&&1!==c.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(c){if(this.__isMousedown=!1,!(!this.editable||this.group||c.transform&&c.transform.actionPerformed||c.e.button&&1!==c.e.button)){if(this.canvas){var r=this.canvas._activeObject;if(r&&r!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(c.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(c){var r=this.getSelectionStartFromPointer(c);c.shiftKey?this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,r):(this.selectionStart=r,this.selectionEnd=r),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(c){for(var a,r=this.getLocalPointer(c),o=0,h=0,e=0,i=0,t=0,n=0,l=this._textLines.length;n<l&&e<=r.y;n++)e+=this.getHeightOfLine(n)*this.scaleY,t=n,n>0&&(i+=this._textLines[n-1].length+this.missingNewlineOffset(n-1));h=this._getLineLeftOffset(t)*this.scaleX,a=this._textLines[t],"rtl"===this.direction&&(r.x=this.width*this.scaleX-r.x+h);for(var u=0,d=a.length;u<d&&(o=h,(h+=this.__charBounds[t][u].kernedWidth*this.scaleX)<=r.x);u++)i++;return this._getNewSelectionStartFromOffset(r,o,h,i,d)},_getNewSelectionStartFromOffset:function(c,r,o,h,e){var t=o-c.x,a=h+(t>c.x-r||t<0?0:1);return this.flipX&&(a=e-a),a>this._text.length&&(a=this._text.length),a}}),f.util.object.extend(f.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=f.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var c=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+c.top+"; left: "+c.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: "+c.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):f.document.body.appendChild(this.hiddenTextarea),f.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),f.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),f.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),f.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),f.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),f.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),f.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),f.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),f.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(f.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(c){if(this.isEditing){var r="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(c.keyCode in r)this[r[c.keyCode]](c);else{if(!(c.keyCode in this.ctrlKeysMapDown)||!c.ctrlKey&&!c.metaKey)return;this[this.ctrlKeysMapDown[c.keyCode]](c)}c.stopImmediatePropagation(),c.preventDefault(),c.keyCode>=33&&c.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(c){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:c.keyCode in this.ctrlKeysMapUp&&(c.ctrlKey||c.metaKey)&&(this[this.ctrlKeysMapUp[c.keyCode]](c),c.stopImmediatePropagation(),c.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(c){var r=this.fromPaste;if(this.fromPaste=!1,c&&c.stopPropagation(),this.isEditing){var i,t,u,d,g,o=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,e=o.length,s=e-h,a=this.selectionStart,n=this.selectionEnd,l=a!==n;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var v=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),p=a>v.selectionStart;l?(i=this._text.slice(a,n),s+=n-a):e<h&&(i=p?this._text.slice(n+s,n):this._text.slice(a,a-s)),t=o.slice(v.selectionEnd-s,v.selectionEnd),i&&i.length&&(t.length&&(u=this.getSelectionStyles(a,a+1,!1),u=t.map(function(){return u[0]})),l?(d=a,g=n):p?(d=n-i.length,g=n):(d=n,g=n+i.length),this.removeStyleFromTo(d,g)),t.length&&(r&&t.join("")===f.copiedText&&!f.disableStyleCopyPaste&&(u=f.copiedTextStyle),this.insertNewStyleBlock(t,a,u)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(c){this.compositionStart=c.target.selectionStart,this.compositionEnd=c.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(f.copiedText=this.getSelectedText(),f.copiedTextStyle=f.disableStyleCopyPaste?null:this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(c){return c&&c.clipboardData||f.window.clipboardData},_getWidthBeforeCursor:function(c,r){var h,o=this._getLineLeftOffset(c);return r>0&&(o+=(h=this.__charBounds[c][r-1]).left+h.width),o},getDownCursorOffset:function(c,r){var o=this._getSelectionForOffset(c,r),h=this.get2DCursorLocation(o),e=h.lineIndex;if(e===this._textLines.length-1||c.metaKey||34===c.keyCode)return this._text.length-o;var i=h.charIndex,t=this._getWidthBeforeCursor(e,i),s=this._getIndexOnLine(e+1,t);return this._textLines[e].slice(i).length+s+1+this.missingNewlineOffset(e)},_getSelectionForOffset:function(c,r){return c.shiftKey&&this.selectionStart!==this.selectionEnd&&r?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(c,r){var o=this._getSelectionForOffset(c,r),h=this.get2DCursorLocation(o),e=h.lineIndex;if(0===e||c.metaKey||33===c.keyCode)return-o;var i=h.charIndex,t=this._getWidthBeforeCursor(e,i),s=this._getIndexOnLine(e-1,t),a=this._textLines[e].slice(0,i),n=this.missingNewlineOffset(e-1);return-this._textLines[e-1].length+s-a.length+(1-n)},_getIndexOnLine:function(c,r){for(var t,s,o=this._textLines[c],e=this._getLineLeftOffset(c),i=0,a=0,n=o.length;a<n;a++)if((e+=t=this.__charBounds[c][a].width)>r){s=!0;var u=e,d=Math.abs(e-t-r);i=Math.abs(u-r)<d?a:a-1;break}return s||(i=o.length-1),i},moveCursorDown:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",c)},moveCursorUp:function(c){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",c)},_moveCursorUpOrDown:function(c,r){var h=this["get"+c+"CursorOffset"](r,"right"===this._selectionDirection);r.shiftKey?this.moveCursorWithShift(h):this.moveCursorWithoutShift(h),0!==h&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(c){return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,"left"===this._selectionDirection?this.selectionStart+c:this.selectionEnd+c),0!==c},moveCursorWithoutShift:function(c){return c<0?(this.selectionStart+=c,this.selectionEnd=this.selectionStart):(this.selectionEnd+=c,this.selectionStart=this.selectionEnd),0!==c},moveCursorLeft:function(c){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",c)},_move:function(c,r,o){var h;if(c.altKey)h=this["findWordBoundary"+o](this[r]);else{if(!c.metaKey&&35!==c.keyCode&&36!==c.keyCode)return this[r]+="Left"===o?-1:1,!0;h=this["findLineBoundary"+o](this[r])}if(void 0!==h&&this[r]!==h)return this[r]=h,!0},_moveLeft:function(c,r){return this._move(c,r,"Left")},_moveRight:function(c,r){return this._move(c,r,"Right")},moveCursorLeftWithoutShift:function(c){var r=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(r=this._moveLeft(c,"selectionStart")),this.selectionEnd=this.selectionStart,r},moveCursorLeftWithShift:function(c){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(c,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(c,"selectionStart")):void 0},moveCursorRight:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",c)},_moveCursorLeftOrRight:function(c,r){var o="moveCursor"+c+"With";this._currentCursorOpacity=1,this[o+=r.shiftKey?"Shift":"outShift"](r)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(c){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(c,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(c,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(c){var r=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(r=this._moveRight(c,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,r},removeChars:function(c,r){void 0===r&&(r=c+1),this.removeStyleFromTo(c,r),this._text.splice(c,r-c),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(c,r,o,h){void 0===h&&(h=o),h>o&&this.removeStyleFromTo(o,h);var e=f.util.string.graphemeSplit(c);this.insertNewStyleBlock(e,o,r),this._text=[].concat(this._text.slice(0,o),e,this._text.slice(h)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var c=f.util.toFixed,r=f.util.radiansToDegrees,o=f.util.calcRotateMatrix,h=f.util.transformPoint,e=/  +/g;f.util.object.extend(f.Text.prototype,{_toSVG:function(){var i=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(t)},toSVG:function(i){var t=this._createBaseSVGMarkup(this._toSVG(),{reviver:i,noStyle:!0,withShadow:!0}),s=this.path;return s?t+s._createBaseSVGMarkup(s._toSVG(),{reviver:i,withShadow:!0}):t},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(i){var s=this.getSvgTextDecoration(this);return[i.textBgRects.join(""),'\t\t<text xml:space="preserve" ',this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",s?'text-decoration="'+s+'" ':"",'style="',this.get
1SvgStyles(!0),'"',this.addPaintOrder()," >",i.textSpans.join(""),"</text>\n"]},_getSVGTextAndBg:function(i,t){var l,s=[],a=[],n=i;this._setSVGBg(a);for(var u=0,d=this._textLines.length;u<d;u++)l=this._getLineLeftOffset(u),(this.textBackgroundColor||this.styleHas("textBackgroundColor",u))&&this._setSVGTextLineBg(a,u,t+l,n),this._setSVGTextLineText(s,u,t+l,n),n+=this.getHeightOfLine(u);return{textSpans:s,textBgRects:a}},_createTextCharSpan:function(i,t,s,a,n){var l=i!==i.trim()||i.match(e),u=this.getSvgSpanStyles(t,l),d=u?'style="'+u+'"':"",g=t.deltaY,v="",p=f.Object.NUM_FRACTION_DIGITS,y="";if(g&&(v=' dy="'+c(g,p)+'" '),void 0!==n.renderLeft){var m=n.angle;y=' rotate="'+c(r(m),f.Object.NUM_FRACTION_DIGITS)+'" ';var _=n.width/2,b=o({angle:r(m)});b[4]=n.renderLeft,b[5]=n.renderTop;var A=h({x:-_,y:0},b);s=A.x,a=A.y}return['<tspan x="',c(s,p),'" y="',c(a,p),'" ',v,d,y,">",f.util.string.escapeXml(i),"</tspan>"].join("")},_setSVGTextLineText:function(i,t,s,a){var u,d,v,p,_,n=this.getHeightOfLine(t),l=-1!==this.textAlign.indexOf("justify"),g="",y=0,m=this._textLines[t];a+=n*(1-this._fontSizeFraction)/this.lineHeight;for(var b=0,A=m.length-1;b<=A;b++)_=b===A||this.charSpacing||this.path,g+=m[b],v=this.__charBounds[t][b],0===y?(s+=v.kernedWidth-v.width,y+=v.width):y+=v.kernedWidth,l&&!_&&this._reSpaceAndTab.test(m[b])&&(_=!0),_||(u=u||this.getCompleteStyleDeclaration(t,b),d=this.getCompleteStyleDeclaration(t,b+1),_=f.util.hasStyleChanged(u,d,!0)),_&&(p=this._getStyleDeclaration(t,b)||{},i.push(this._createTextCharSpan(g,p,s,a,v)),g="",u=d,s+=y,y=0)},_pushTextBgRect:function(i,t,s,a,n,l){var u=f.Object.NUM_FRACTION_DIGITS;i.push("\t\t<rect ",this._getFillAttributes(t),' x="',c(s,u),'" y="',c(a,u),'" width="',c(n,u),'" height="',c(l,u),'"></rect>\n')},_setSVGTextLineBg:function(i,t,s,a){for(var g,v,n=this._textLines[t],l=this.getHeightOfLine(t)/this.lineHeight,u=0,d=0,p=this.getValueOfPropertyAt(t,0,"textBackgroundColor"),y=0,m=n.length;y<m;y++)g=this.__charBounds[t][y],(v=this.getValueOfPropertyAt(t,y,"textBackgroundColor"))!==p?(p&&this._pushTextBgRect(i,p,s+d,a,u,l),d=g.left,u=g.width,p=v):u+=g.kernedWidth;v&&this._pushTextBgRect(i,v,s+d,a,u,l)},_getFillAttributes:function(i){var t=i&&"string"==typeof i?new f.Color(i):"";return t&&t.getSource()&&1!==t.getAlpha()?'opacity="'+t.getAlpha()+'" fill="'+t.setAlpha(1).toRgb()+'"':'fill="'+i+'"'},_getSVGLineTopOffset:function(i){for(var s,t=0,a=0;a<i;a++)t+=this.getHeightOfLine(a);return s=this.getHeightOfLine(a),{lineTop:t,offset:(this._fontSizeMult-this._fontSizeFraction)*s/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(i){return f.Object.prototype.getSvgStyles.call(this,i)+" white-space: pre;"}})}(),function(c){"use strict";var r=c.fabric||(c.fabric={});r.Textbox=r.util.createClass(r.IText,r.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:r.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(o){for(var h=0,e=0,i=0,t={},s=0;s<o.graphemeLines.length;s++)"\n"===o.graphemeText[i]&&s>0?(e=0,i++,h++):!this.splitByGrapheme&&this._reSpaceAndTab.test(o.graphemeText[i])&&s>0&&(e++,i++),t[s]={line:h,offset:e},i+=o.graphemeLines[s].length,e+=o.graphemeLines[s].length;return t},styleHas:function(o,h){if(this._styleMap&&!this.isWrapping){var e=this._styleMap[h];e&&(h=e.line)}return r.Text.prototype.styleHas.call(this,o,h)},isEmptyStyles:function(o){if(!this.styles)return!0;var i,t,h=0,s=!1,a=this._styleMap[o],n=this._styleMap[o+1];for(var l in a&&(o=a.line,h=a.offset),n&&(s=n.line===o,i=n.offset),t=void 0===o?this.styles:{line:this.styles[o]})for(var u in t[l])if(u>
1=h&&(!s||u<i))for(var d in t[l][u])return!1;return!0},_getStyleDeclaration:function(o,h){if(this._styleMap&&!this.isWrapping){var e=this._styleMap[o];if(!e)return null;o=e.line,h=e.offset+h}return this.callSuper("_getStyleDeclaration",o,h)},_setStyleDeclaration:function(o,h,e){var i=this._styleMap[o];this.styles[o=i.line][h=i.offset+h]=e},_deleteStyleDeclaration:function(o,h){var e=this._styleMap[o];delete this.styles[o=e.line][h=e.offset+h]},_getLineStyle:function(o){return!!this.styles[this._styleMap[o].line]},_setLineStyle:function(o){this.styles[this._styleMap[o].line]={}},_wrapText:function(o,h){var i,e=[];for(this.isWrapping=!0,i=0;i<o.length;i++)e=e.concat(this._wrapLine(o[i],i,h));return this.isWrapping=!1,e},_measureWord:function(o,h,e){var t,i=0;e=e||0;for(var a=0,n=o.length;a<n;a++)i+=this._getGraphemeBox(o[a],h,a+e,t,!0).kernedWidth,t=o[a];return i},_wrapLine:function(o,h,e,b){var t=0,s=this.splitByGrapheme,a=[],n=[],l=s?r.util.string.graphemeSplit(o):o.split(this._wordJoiners),u="",d=0,g=s?"":" ",v=0,p=0,y=0,m=!0,_=this._getWidthOfCharSpacing();b=b||0,0===l.length&&l.push([]),e-=b;for(var A=0;A<l.length;A++)u=s?l[A]:r.util.string.graphemeSplit(l[A]),v=this._measureWord(u,h,d),d+=u.length,(t+=p+v-_)>e&&!m?(a.push(n),n=[],t=v,m=!0):t+=_,!m&&!s&&n.push(g),n=n.concat(u),p=s?0:this._measureWord([g],h,d),d++,m=!1,v>y&&(y=v);return A&&a.push(n),y+b>this.dynamicMinWidth&&(this.dynamicMinWidth=y-_+b),a},isEndOfWrapping:function(o){return!this._styleMap[o+1]||this._styleMap[o+1].line!==this._styleMap[o].line},missingNewlineOffset:function(o,h){return this.splitByGrapheme&&!h?this.isEndOfWrapping(o)?1:0:1},_splitTextIntoLines:function(o){for(var h=r.Text.prototype._splitTextIntoLines.call(this,o),e=this._wrapText(h.lines,this.width),i=new Array(e.length),t=0;t<e.length;t++)i[t]=e[t].join("");return h.lines=i,h.graphemeLines=e,h},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var o={};for(var h in this._styleMap)this._textLines[h]&&(o[this._styleMap[h].line]=1);for(var h in this.styles)o[h]||delete this.styles[h]},toObject:function(o){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(o))}}),r.Textbox.fromObject=function(o,h){var e=r.util.stylesFromArray(o.styles,o.text),i=Object.assign({},o,{styles:e});return delete i.path,r.Object._fromObject("Textbox",i,function(t){o.path?r.Object._fromObject("Path",o.path,function(s){t.set("path",s),h(t)},"path"):h(t)},"text")}}(P),function(){var c=f.controlsUtils,r=c.scaleSkewCursorStyleHandler,o=c.scaleCursorStyleHandler,h=c.scalingEqually,e=c.scalingYOrSkewingX,i=c.scalingXOrSkewingY,t=c.scaleOrSkewActionName,s=f.Object.prototype.controls;if(s.ml=new f.Control({x:-.5,y:0,cursorStyleHandler:r,actionHandler:i,getActionName:t}),s.mr=new f.Control({x:.5,y:0,cursorStyleHandler:r,actionHandler:i,getActionName:t}),s.mb=new f.Control({x:0,y:.5,cursorStyleHandler:r,actionHandler:e,getActionName:t}),s.mt=new f.Control({x:0,y:-.5,cursorStyleHandler:r,actionHandler:e,getActionName:t}),s.tl=new f.Control({x:-.5,y:-.5,cursorStyleHandler:o,actionHandler:h}),s.tr=new f.Control({x:.5,y:-.5,cursorStyleHandler:o,actionHandler:h}),s.bl=new f.Control({x:-.5,y:.5,cursorStyleHandler:o,actionHandler:h}),s.br=new f.Control({x:.5,y:.5,cursorStyleHandler:o,actionHandler:h}),s.mtr=new f.Control({x:0,y:-.5,actionHandler:c.rotationWithSnapping,cursorStyleHandler:c.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),f.Textbox){var a=f.Textbox.prototype.controls={};a.mtr=s.mtr,a.tr=s.tr,a.br=s.br,a.tl=s.tl,a.bl=s.bl,a.mt=s.mt,a.mb=s.mb,a.mr=new f.Control({x:.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:r,actionName:"resizing"}),a.ml=new f.Control({x:-.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:r,actionName:"resizing"})}}()},35646:(ht,P,k)=>{const T=k(25704),D=k(99102),I=k(99326),j=k(50226);function N(c,r,o,h,e){const i=[].slice.call(arguments,1),t=i.length,s="function"==typeof i[t-1];if(!s&&!T())throw new Error("Callback required as last argument");if(!s){if(t<1)throw new Error("Too few arguments provided");return 1===t?(o=r,r=h=void 0):2===t&&!r.getContext&&(h=o,o=r,r=void 0),new Promise(function(a,n){try{const l=D.create(o,h);a(c(l,r,h))}catch(l){n(l)}})}if(t<2)throw new Error("Too few arguments provided");2===t?(e=o,o=r,r=h=void 0):3===t&&(r.getContext&&void 0===e?(e=h,h=void 0):(e=h,h=o,o=r,r=void 0));try{const a=D.create(o,h);e(null,c(a,r,h))}catch(a){e(a)}}N.bind(null,I.render),P.hz=N.bind(null,I.renderToDataURL),N.bind(null,function(c,r,o){return j.render(c,o)})},25704:ht=>{ht.exports=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then}},18298:(ht,P,k)=>{const f=k(62230).getSymbolSize;P.getRowColCoords=function(D){if(1===D)return[];const I=Math.floor(D/7)+2,j=f(D),N=145===j?26:2*Math.ceil((j-13)/(2*I-2)),c=[j-7];for(let r=1;r<I-1;r++)c[r]=c[r-1]-N;return c.push(6),c.reverse()},P.getPositions=function(D){const I=[],j=P.getRowColCoords(D),N=j.length;for(let c=0;c<N;c++)for(let r=0;r<N;r++)0===c&&0===r||0===c&&r===N-1||c===N-1&&0===r||I.push([j[c],j[r]]);return I}},69321:(ht,P,k)=>{const f=k(84059),T=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function D(I){this.mode=f.ALPHANUMERIC,this.data=I}D.getBitsLength=function(j){return 11*Math.floor(j/2)+j%2*6},D.prototype.getLength=function(){return this.data.length},D.prototype.getBitsLength=function(){return D.getBitsLength(this.data.length)},D.prototype.write=function(j){let N;for(N=0;N+2<=this.data.length;N+=2){let c=45*T.indexOf(this.data[N]);c+=T.indexOf(this.data[N+1]),j.put(c,11)}
1this.data.length%2&&j.put(T.indexOf(this.data[N]),6)},ht.exports=D},17701:ht=>{function P(){this.buffer=[],this.length=0}P.prototype={get:function(k){const f=Math.floor(k/8);return 1==(this.buffer[f]>>>7-k%8&1)},put:function(k,f){for(let T=0;T<f;T++)this.putBit(1==(k>>>f-T-1&1))},getLengthInBits:function(){return this.length},putBit:function(k){const f=Math.floor(this.length/8);this.buffer.length<=f&&this.buffer.push(0),k&&(this.buffer[f]|=128>>>this.length%8),this.length++}},ht.exports=P},79088:ht=>{function P(k){if(!k||k<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=k,this.data=new Uint8Array(k*k),this.reservedBit=new Uint8Array(k*k)}P.prototype.set=function(k,f,T,D){const I=k*this.size+f;this.data[I]=T,D&&(this.reservedBit[I]=!0)},P.prototype.get=function(k,f){return this.data[k*this.size+f]},P.prototype.xor=function(k,f,T){this.data[k*this.size+f]^=T},P.prototype.isReserved=function(k,f){return this.reservedBit[k*this.size+f]},ht.exports=P},16323:(ht,P,k)=>{const f=k(84059);function T(D){this.mode=f.BYTE,this.data="string"==typeof D?(new TextEncoder).encode(D):new Uint8Array(D)}T.getBitsLength=function(I){return 8*I},T.prototype.getLength=function(){return this.data.length},T.prototype.getBitsLength=function(){return T.getBitsLength(this.data.length)},T.prototype.write=function(D){for(let I=0,j=this.data.length;I<j;I++)D.put(this.data[I],8)},ht.exports=T},91690:(ht,P,k)=>{const f=k(65448),T=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],D=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];P.getBlocksCount=function(j,N){switch(N){case f.L:return T[4*(j-1)+0];case f.M:return T[4*(j-1)+1];case f.Q:return T[4*(j-1)+2];case f.H:return T[4*(j-1)+3];default:return}},P.getTotalCodewordsCount=function(j,N){switch(N){case f.L:return D[4*(j-1)+0];case f.M:return D[4*(j-1)+1];case f.Q:return D[4*(j-1)+2];case f.H:return D[4*(j-1)+3];default:return}}},65448:(ht,P)=>{P.L={bit:1},P.M={bit:0},P.Q={bit:3},P.H={bit:2},P.isValid=function(T){return T&&void 0!==T.bit&&T.bit>=0&&T.bit<4},P.from=function(T,D){if(P.isValid(T))return T;try{return function k(f){if("string"!=typeof f)throw new Error("Param is not a string");switch(f.toLowerCase()){case"l":case"low":return P.L;case"m":case"medium":return P.M;case"q":case"quartile":return P.Q;case"h":case"high":return P.H;default:throw new Error("Unknown EC Level: "+f)}}(T)}catch(I){return D}}},62903:(ht,P,k)=>{const f=k(62230).getSymbolSize;P.getPositions=function(I){const j=f(I);return[[0,0],[j-7,0],[0,j-7]]}},26327:(ht,P,k)=>{const f=k(62230),I=f.getBCHDigit(1335);P.getEncodedBits=function(N,c){const r=N.bit<<3|c;let o=r<<10;for(;f.getBCHDigit(o)-I>=0;)o^=1335<<f.getBCHDigit(o)-I;return 21522^(r<<10|o)}},39240:(ht,P)=>{const k=new Uint8Array(512),f=new Uint8Array(256);(function(){let D=1;for(let I=0;I<255;I++)k[I]=D,f[D]=I,D<<=1,256&D&&(D^=285);for(let I=255;I<512;I++)k[I]=k[I-255]})(),P.log=function(D){if(D<1)throw new Error("log("+D+")");return f[D]},P.exp=function(D){return k[D]},P.mul=function(D,I){return 0===D||0===I?0:k[f[D]+f[I]]}},75134:(ht,P,k)=>{const f=k(84059),T=k(62230);function D(I){this.mode=f.KANJI,this.data=I}D.getBitsLength=function(j){return 13*j},D.prototype.getLength=function(){return this.data.length},D.prototype.getBitsLength=function(){return D.getBitsLength(this.data.length)},D.prototype.write=function(I){let j;for(j=0;j<this.data.length;j++){let N=T.toSJIS(this.data[j]);if(N>=33088&&N<=40956)N-=33088;else{if(!(N>=57408&&N<=60351))throw new Error("Invalid SJIS character: "+this.data[j]+"\nMake sure your charset is UTF-8");N-=49472}N=192*(N>>>8&255)+(255&N),I.put(N,13)}},ht.exports=D},56485:(ht,P)=>{P.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};function f(T,D,I){switch(T){case P.Patterns.PATTERN000:return(D+I)%2==0;case P.Patterns.PATTERN001:return D%2==0;case P.Patterns.PATTERN010:return I%3==0;case P.Patterns.PATTERN011:return(D+I)%3==0;case P.Patterns.PATTERN100:return(Math.floor(D/2)+Math.floor(I/3))%2==0;case P.Patterns.PATTERN101:return D*I%2+D*I%3==0;case P.Patterns.PATTERN110:return(D*I%2+D*I%3)%2==0;case P.Patterns.PATTERN111:return(D*I%3+(D+I)%2)%2==0;default:throw new Error("bad maskPattern:"+T)}}P.isValid=function(D){return null!=D&&""!==D&&!isNaN(D)&&D>=0&&D<=7},P.from=function(D){return P.isValid(D)?parseInt(D,10):void 0},P.getPenaltyN1=function(D){const I=D.size;let j=0,N=0,c=0,r=null,o=null;for(let h=0;h<I;h++){N=c=0,r=o=null;for(let e=0;e<I;e++){let i=D.get(h,e);i===r?N++:(N>=5&&(j+=N-5+3),r=i,N=1),i=D.get(e,h),i===o?c++:(c>
vendor: 3,428 bytes, line 1
1=5&&(j+=c-5+3),o=i,c=1)}N>=5&&(j+=N-5+3),c>=5&&(j+=c-5+3)}return j},P.getPenaltyN2=function(D){const I=D.size;let j=0;for(let N=0;N<I-1;N++)for(let c=0;c<I-1;c++){const r=D.get(N,c)+D.get(N,c+1)+D.get(N+1,c)+D.get(N+1,c+1);(4===r||0===r)&&j++}return 3*j},P.getPenaltyN3=function(D){const I=D.size;let j=0,N=0,c=0;for(let r=0;r<I;r++){N=c=0;for(let o=0;o<I;o++)N=N<<1&2047|D.get(r,o),o>=10&&(1488===N||93===N)&&j++,c=c<<1&2047|D.get(o,r),o>=10&&(1488===c||93===c)&&j++}return 40*j},P.getPenaltyN4=function(D){let I=0;const j=D.data.length;for(let c=0;c<j;c++)I+=D.data[c];return 10*Math.abs(Math.ceil(100*I/j/5)-10)},P.applyMask=function(D,I){const j=I.size;for(let N=0;N<j;N++)for(let c=0;c<j;c++)I.isReserved(c,N)||I.xor(c,N,f(D,c,N))},P.getBestMask=function(D,I){const j=Object.keys(P.Patterns).length;let N=0,c=1/0;for(let r=0;r<j;r++){I(r),P.applyMask(r,D);const o=P.getPenaltyN1(D)+P.getPenaltyN2(D)+P.getPenaltyN3(D)+P.getPenaltyN4(D);P.applyMask(r,D),o<c&&(c=o,N=r)}return N}},84059:(ht,P,k)=>{const f=k(76859),T=k(7526);P.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},P.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},P.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},P.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},P.MIXED={bit:-1},P.getCharCountIndicator=function(j,N){if(!j.ccBits)throw new Error("Invalid mode: "+j);if(!f.isValid(N))throw new Error("Invalid version: "+N);return N>=1&&N<10?j.ccBits[0]:N<27?j.ccBits[1]:j.ccBits[2]},P.getBestModeForData=function(j){return T.testNumeric(j)?P.NUMERIC:T.testAlphanumeric(j)?P.ALPHANUMERIC:T.testKanji(j)?P.KANJI:P.BYTE},P.toString=function(j){if(j&&j.id)return j.id;throw new Error("Invalid mode")},P.isValid=function(j){return j&&j.bit&&j.ccBits},P.from=function(j,N){if(P.isValid(j))return j;try{return function D(I){if("string"!=typeof I)throw new Error("Param is not a string");switch(I.toLowerCase()){case"numeric":return P.NUMERIC;case"alphanumeric":return P.ALPHANUMERIC;case"kanji":return P.KANJI;case"byte":return P.BYTE;default:throw new Error("Unknown mode: "+I)}}(j)}catch(c){return N}}},79782:(ht,P,k)=>{const f=k(84059);function T(D){this.mode=f.NUMERIC,this.data=D.toString()}T.getBitsLength=function(I){return 10*Math.floor(I/3)+(I%3?I%3*3+1:0)},T.prototype.getLength=function(){return this.data.length},T.prototype.getBitsLength=function(){return T.getBitsLength(this.data.length)},T.prototype.write=function(I){let j,N,c;for(j=0;j+3<=this.data.length;j+=3)N=this.data.substr(j,3),c=parseInt(N,10),I.put(c,10);const r=this.data.length-j;r>0&&(N=this.data.substr(j),c=parseInt(N,10),I.put(c,3*r+1))},ht.exports=T},91845:(ht,P,k)=>{const f=k(39240);P.mul=function(D,I){const j=new Uint8Array(D.length+I.length-1);for(let N=0;N<D.length;N++)for(let c=0;c<I.length;c++)j[N+c]^=f.mul(D[N],I[c]);return j},P.mod=function(D,I){let j=new Uint8Array(D);for(;j.length-I.length>=0;){const N=j[0];for(let r=0;r<I.length;r++)j[r]^=f.mul(I[r],N);let c=0;for(;c<j.length&&0===j[c];)c++;j=j.slice(c)}return j},P.generateECPolynomial=function(D){let I=new Uint8Array([1]);for(let j=0;j<D;j++)I=P.mul(I,new Uint8Array([1,f.exp(j)]));return I}},99102:(ht,P,k)=>{const f=k(62230),T=k(65448),D=k(17701),I=k(79088),j=k(18298),N=k(62903),c=k(56485),r=k(91690),o=k(23035),h=k(18421),e=k(26327),i=k(84059),t=k(12149);function u(y,m,_){const b=y.size,A=e.getEncodedBits(m,_);let F,L;for(F=0;F<15;F++)L=1==(A>>F&1),y.set(F<6?F:F<8?F+1:b-15+F,8,L,!0),y.set(8,F<8?b-F-1:F<9?15-F-1+1:1
15-F-1,L,!0);y.set(b-8,8,1,!0)}function p(y,m,_,b){let A;if(Array.isArray(y))A=t.fromArray(y);else{if("string"!=typeof y)throw new Error("Invalid data");{let tt=m;if(!tt){const q=t.rawSplit(y);tt=h.getBestVersionForData(q,_)}A=t.fromString(y,tt||40)}}const F=h.getBestVersionForData(A,_);if(!F)throw new Error("The amount of data is too big to be stored in a QR Code");if(m){if(m<F)throw new Error("\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: "+F+".\n")}else m=F;const L=function g(y,m,_){const b=new D;_.forEach(function(X){b.put(X.mode.bit,4),b.put(X.getLength(),i.getCharCountIndicator(X.mode,y)),X.write(b)});const L=8*(f.getSymbolTotalCodewords(y)-r.getTotalCodewordsCount(y,m));for(b.getLengthInBits()+4<=L&&b.put(0,4);b.getLengthInBits()%8!=0;)b.putBit(0);const W=(L-b.getLengthInBits())/8;for(let X=0;X<W;X++)b.put(X%2?17:236,8);return function v(y,m,_){const b=f.getSymbolTotalCodewords(m),F=b-r.getTotalCodewordsCount(m,_),L=r.getBlocksCount(m,_),X=L-b%L,tt=Math.floor(b/L),q=Math.floor(F/L),rt=q+1,C=tt-q,O=new o(C);let E=0;const x=new Array(L),U=new Array(L);let w=0;const S=new Uint8Array(y.buffer);for(let V=0;V<L;V++){const Q=V<X?q:rt;x[V]=S.slice(E,E+Q),U[V]=O.encode(x[V]),E+=Q,w=Math.max(w,Q)}const M=new Uint8Array(b);let Y,H,B=0;for(Y=0;Y<w;Y++)for(H=0;H<L;H++)Y<x[H].length&&(M[B++]=x[H][Y]);for(Y=0;Y<C;Y++)for(H=0;H<L;H++)M[B++]=U[H][Y];return M}(b,y,m)}(m,_,A),W=f.getSymbolSize(m),X=new I(W);return function s(y,m){const _=y.size,b=N.getPositions(m);for(let A=0;A<b.length;A++){const F=b[A][0],L=b[A][1];for(let W=-1;W<=7;W++)if(!(F+W<=-1||_<=F+W))for(let X=-1;X<=7;X++)L+X<=-1||_<=L+X||y.set(F+W,L+X,W>=0&&W<=6&&(0===X||6===X)||X>=0&&X<=6&&(0===W||6===W)||W>=2&&W<=4&&X>=2&&X<=4,!0)}}(X,m),function a(y){const m=y.size;for(let _=8;_<m-8;_++){const b=_%2==0;y.set(_,6,b,!0),y.set(6,_,b,!0)}}(X),function n(y,m){const _=j.getPositions(m);for(let b=0;b<_.length;b++){const A=_[b][0],F=_[b][1];for(let L=-2;L<=2;L++)for(let W=-2;W<=2;W++)y.set(A+L,F+W,-2===L||2===L||-2===W||2===W||0===L&&0===W,!0)}}(X,m),u(X,_,0),m>=7&&function l(y,m){const _=y.size,b=h.getEncodedBits(m);let A,F,L;for(let W=0;W<18;W++)A=Math.floor(W/3),F=W%3+_-8-3,L=1==(b>>W&1),y.set(A,F,L,!0),y.set(F,A,L,!0)}(X,m),function d(y,m){const _=y.size;let b=-1,A=_-1,F=7,L=0;for(let W=_-1;W>0;W-=2)for(6===W&&W--;;){for(let X=0;X<2;X++)if(!y.isReserved(A,W-X)){let tt=!1;L<m.length&&(tt=1==(m[L]>>>F&1)),y.set(A,W-X,tt),F--,-1===F&&(L++,F=7)}if(A+=b,A<0||_<=A){A-=b,b=-b;break}}}(X,L),isNaN(b)&&(b=c.getBestMask(X,u.bind(null,X,_))),c.applyMask(b,X),u(X,_,b),{modules:X,version:m,errorCorrectionLevel:_,maskPattern:b,segments:A}}P.create=function(m,_){if(void 0===m||""===m)throw new Error("No input text");let A,F,b=T.M;return void 0!==_&&(b=T.from(_.errorCorrectionLevel,T.M),A=h.from(_.version),F=c.from(_.maskPattern),_.toSJISFunc&&f.setToSJISFunction(_.toSJISFunc)),p(m,A,b,F)}},23035:(ht,P,k)=>{const f=k(91845);function T(D){this.genPoly=void 0,this.degree=D,this.degree&&this.initialize(this.degree)}T.prototype.initialize=function(I){this.degree=I,this.genPoly=f.generateECPolynomial(this.degree)},T.prototype.encode=function(I){if(!this.genPoly)throw new Error("Encoder not initialized");const j=new Uint8Array(I.length+this.degree);j.set(I);const N=f.mod(j,this.genPoly),c=this.degree-N.length;if(c>0){const r=new Uint8Array(this.degree);return r.set(N,c),r}return N},ht.exports=T},7526:(ht,P)=>{const k="[0-9]+";let T="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";T=T.replace(/u/g,"\\u");const D="(?:(?![A-Z0-9 $%*+\\-./:]|"+T+")(?:.|[\r\n]))+";P.KANJI=new RegExp(T,"g"),P.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),P.BYTE=new RegExp(D,"g"),P.NUMERIC=new RegExp(k,"g"),P.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");const I=new RegExp("^"+T+"$"),j=new RegExp("^"+k+"$"),N=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");P.testKanji=function(r){return I.test(r)},P.testNumeric=function(r){return j.test(r)},P.testAlphanumeric=function(r){return N.test(r)}},12149:(ht,P,k)=>{const f=k(84059),T=k(79782),D=k(69321),I=k(16323),j=k(75134),N=k(7526),c=k(62230),r=k(26348);function o(l){return unescape(encodeURIComponent(l)).length}function h(l,u,d){const g=[];let v;for(;null!==(v=l.exec(d));)g.push({data:v[0],index:v.index,mode:u,length:v[0].length});return g}function e(l){const u=h(N.NUMERIC,f.NUMERIC,l),d=h(N.ALPHANUMERIC,f.ALPHANUMERIC,l);let g,v;return c.isKanjiModeEnabled()?(g=h(N.BYTE,f.BYTE,l),v=h(N.KANJI,f.KANJI,l)):(g=h(N.BYTE_KANJI,f.BYTE,l),v=[]),u.concat(d,g,v).sort(function(y,m){return y.index-m.index}).map(function(y){return{data:y.data,mode:y.mode,length:y.length}})}function i(l,u){switch(u){case f.NUMERIC:return T.getBitsLength(l);case f.ALPHANUMERIC:return D.getBitsLength(l);case f.KANJI:return j.getBitsLength(l);case f.BYTE:return I.getBitsLength(l)}}function n(l,u){let d;const g=f.getBestModeForData(l);if(d=f.from(u,g),d!==f.BYTE&&d.bit<g.bit)throw new Error('"'+l+'" cannot be encoded with mode '+f.toString(d)+".\n Suggested mode is: "+f.toString(g));switch(d===f.KANJI&&!c.isKanjiModeEnabled()&&(d=f.BYTE),d){case f.NUMERIC:return new T(l);case f.ALPHANUMERIC:return new D(l);case f.KANJI:return new j(l);case f.BYTE:return new I(l)}}P.fromArray=function(u){return u.reduce(function(d,g){return"string"==typeof g?d.push(n(g,null)):g.data&&d.push(n(g.data,g.mode)),d},[])},P.fromString=function(u,d){const v=function s(l){const u=[];for(let d=0;d<l.length;d++){const g=l[d];switch(g.mode){case f.NUMERIC:u.push([g,{data:g.data,mode:f.ALPHANUMERIC,length:g.length},{data:g.data,mode:f.BYTE,length:g.length}]);break;case f.ALPHANUMERIC:u.push([g,{data:g.data,mode:f.BYTE,length:g.length}]);break;case f.KANJI:u.push([g,{data:g.data,mode:f.BYTE,length:o(g.data)}]);break;case f.BYTE:u.push([{data:g.data,mode:f.BYTE,length:o(g.data)}])}}return u}(e(u,c.isKanjiModeEnabled())),p=function a(l,u){const d={},g={start:{}};let v=["start"];for(let p=0;p<l.length;p++){const y=l[p],m=[];for(let _=0;_<y.length;_++){const b=y[_],A=""+p+_;m.push(A),d[A]={node:b,lastCount:0},g[A]={};for(let F=0;F<v.length;F++){const L=v[F];d[L]&&d[L].node.mode===b.mode?(g[L][A]=i(d[L].lastCount+b.length,b.mode)-i(d[L].lastCount,b.mode),d[L].lastCount+=b.length):(d[L]&&(d[L].lastCount=b.length),g[L][A]=i(b.length,b.mode)+4+f.getCharCountIndicator(b.mode,u))}}v=m}for(let p=0;p<v.length;p++)g[v[p]].end=0;return{map:g,table:d}}(v,d),y=r.find_path(p.map,"start","end"),m=[];for(let _=1;_<y.length-1;_++)m.push(p.table[y[_]].node);return P.fromArray(function t(l){return l.reduce(function(u,d){const g=u.length-1>=0?u[u.length-1]:null;return g&&g.mode===d.mode?(u[u.length-1].data+=d.data,u):(u.push(d),u)},[])}(m))},P.rawSplit=function(u){return P.fromArray(e(u,c.isKanjiModeEnabled()))}},62230:(ht,P)=>{let k;const f=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];P.getSymbolSize=function(D){if(!D)throw new Error('"version" cannot be null or undefined');if(D<1||D>40)throw new Error('"version" should be in range from 1 to 40');return 4*D+17},P.getSymbolTotalCodewords=function(D){return f[D]},P.getBCHDigit=function(T){let D=0;for(;0!==T;)D++,T>>>=1;return D},P.setToSJISFunction=function(D){if("function"!=typeof D)throw new Error('"toSJISFunc" is not a valid function.');k=D},P.isKanjiModeEnabled=function(){return void 0!==k},P.toSJIS=function(D){return k(D)}},76859:(ht,P)=>{P.isValid=function(f){return!isNaN(f)&&f>=1&&f<=40}},18421:(ht,P,k)=>{const f=k(62230),T=k(91690),D=k(65448),I=k(84059),j=k(76859),c=f.getBCHDigit
1(7973);function o(i,t){return I.getCharCountIndicator(i,t)+4}function h(i,t){let s=0;return i.forEach(function(a){s+=o(a.mode,t)+a.getBitsLength()}),s}P.from=function(t,s){return j.isValid(t)?parseInt(t,10):s},P.getCapacity=function(t,s,a){if(!j.isValid(t))throw new Error("Invalid QR Code version");void 0===a&&(a=I.BYTE);const u=8*(f.getSymbolTotalCodewords(t)-T.getTotalCodewordsCount(t,s));if(a===I.MIXED)return u;const d=u-o(a,t);switch(a){case I.NUMERIC:return Math.floor(d/10*3);case I.ALPHANUMERIC:return Math.floor(d/11*2);case I.KANJI:return Math.floor(d/13);default:return Math.floor(d/8)}},P.getBestVersionForData=function(t,s){let a;const n=D.from(s,D.M);if(Array.isArray(t)){if(t.length>1)return function e(i,t){for(let s=1;s<=40;s++)if(h(i,s)<=P.getCapacity(s,t,I.MIXED))return s}(t,n);if(0===t.length)return 1;a=t[0]}else a=t;return function r(i,t,s){for(let a=1;a<=40;a++)if(t<=P.getCapacity(a,s,i))return a}(a.mode,a.getLength(),n)},P.getEncodedBits=function(t){if(!j.isValid(t)||t<7)throw new Error("Invalid QR Code version");let s=t<<12;for(;f.getBCHDigit(s)-c>=0;)s^=7973<<f.getBCHDigit(s)-c;return t<<12|s}},99326:(ht,P,k)=>{const f=k(83239);P.render=function(j,N,c){let r=c,o=N;void 0===r&&(!N||!N.getContext)&&(r=N,N=void 0),N||(o=function D(){try{return document.createElement("canvas")}catch(I){throw new Error("You need to specify a canvas element")}}()),r=f.getOptions(r);const h=f.getImageWidth(j.modules.size,r),e=o.getContext("2d"),i=e.createImageData(h,h);return f.qrToImageData(i.data,j,r),function T(I,j,N){I.clearRect(0,0,j.width,j.height),j.style||(j.style={}),j.height=N,j.width=N,j.style.height=N+"px",j.style.width=N+"px"}(e,o,h),e.putImageData(i,0,0),o},P.renderToDataURL=function(j,N,c){let r=c;return void 0===r&&(!N||!N.getContext)&&(r=N,N=void 0),r||(r={}),P.render(j,N,r).toDataURL(r.type||"image/png",(r.rendererOpts||{}).quality)}},50226:(ht,P,k)=>{const f=k(83239);function T(j,N){const c=j.a/255,r=N+'="'+j.hex+'"';return c<1?r+" "+N+'-opacity="'+c.toFixed(2).slice(1)+'"':r}function D(j,N,c){let r=j+N;return void 0!==c&&(r+=" "+c),r}P.render=function(N,c,r){const o=f.getOptions(c),h=N.modules.size,e=N.modules.data,i=h+2*o.margin,t=o.color.light.a?"<path "+T(o.color.light,"fill")+' d="M0 0h'+i+"v"+i+'H0z"/>':"",s="<path "+T(o.color.dark,"stroke")+' d="'+function I(j,N,c){let r="",o=0,h=!1,e=0;for(let i=0;i<j.length;i++){const t=Math.floor(i%N),s=Math.floor(i/N);!t&&!h&&(h=!0),j[i]?(e++,i>0&&t>0&&j[i-1]||(r+=h?D("M",t+c,.5+s+c):D("m",o,0),o=0,h=!1),t+1<N&&j[i+1]||(r+=D("h",e),e=0)):o++}return r}(e,h,o.margin)+'"/>',l='<svg xmlns="http://www.w3.org/2000/svg" '+(o.width?'width="'+o.width+'" height="'+o.width+'" ':"")+'viewBox="0 0 '+i+" "+i+'" shape-rendering="crispEdges">'+t+s+"</svg>\n";return"function"==typeof r&&r(null,l),l}},83239:(ht,P)=>{function k(f){if("number"==typeof f&&(f=f.toString()),"string"!=typeof f)throw new Error("Color should be defined as hex string");let T=f.slice().replace("#","").split("");if(T.length<3||5===T.length||T.length>8)throw new Error("Invalid hex color: "+f);(3===T.length||4===T.length)&&(T=Array.prototype.concat.apply([],T.map(function(I){return[I,I]}))),6===T.length&&T.push("F","F");const D=parseInt(T.join(""),16);return{r:D>>24&255,g:D>>16&255,b:D>>8&255,a:255&D,hex:"#"+T.slice(0,6).join("")}}P.getOptions=function(T){T||(T={}),T.color||(T.color={});const I=T.width&&T.width>=21?T.width:void 0;return{width:I,scale:I?4:T.scale||4,margin:null==T.margin||T.margin<0?4:T.margin,color:{dark:k(T.color.dark||"#000000ff"),light:k(T.color.light||"#ffffffff")},type:T.type,rendererOpts:T.rendererOpts||{}}},P.getScale=function(T,D){return D.width&&D.width>=T+2*D.margin?D.width/(T+2*D.margin):D.scale},P.getImageWidth=function(T,D){const I=P.getScale(T,D);return Math.floor((T+2*D.margin)*I)},P.qrToImageData=function(T,D,I){const j=D.modules.size,N=D.modules.data,c=P.getScale(j,I),r=Math.floor((j+2*I.margin)*c),o=I.margin*c,h=[I.color.light,I.color.dark];for(let e=0;e<r;e++)for(let i=0;i<r;i++){let t=4*(e*r+i),s=I.color.light;e>=o&&i>=o&&e<r-o&&i<r-o&&(s=h[N[Math.floor((e-o)/c)*j+Math.floor((i-o)/c)]?1:0]),T[t++]=s.r,T[t++]=s.g,T[t++]=s.b,T[t]=s.a}}},24960:()=>{},26759:()=>{},56272:()=>{}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.