{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/react/index.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/fabric/dist/fabric.js","webpack:///./node_modules/react-tooltip/dist/index.es.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/react-dom/index.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./app/javascript/Components/Logos/wwl-logo.svg","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/react/cjs/react.production.min.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.min.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./app/javascript/Components/fonts/LobsterTwo.ttf","webpack:///./app/javascript/Components/fonts/Bitteritalic.ttf","webpack:///./app/javascript/Components/fonts/OleoScript.ttf","webpack:///./app/javascript/Components/fonts/boldLobsterTwoitalic.ttf","webpack:///./app/javascript/Components/fonts/Kameron.ttf","webpack:///./app/javascript/Components/fonts/Niconne.ttf","webpack:///./app/javascript/Components/fonts/VastShadow.ttf","webpack:///./app/javascript/Components/fonts/RobotoSlab.ttf","webpack:///./app/javascript/Components/fonts/boldPlayfairDisplayitalic.ttf","webpack:///./app/javascript/Components/fonts/LobsterTwoitalic.ttf","webpack:///./app/javascript/Components/fonts/Play.ttf","webpack:///./app/javascript/Components/fonts/Graduate.ttf","webpack:///./app/javascript/Components/fonts/boldCinzel.ttf","webpack:///./app/javascript/Components/fonts/boldPlayfairDisplay.ttf","webpack:///./app/javascript/Components/fonts/boldRaleway.ttf","webpack:///./app/javascript/Components/fonts/boldBitter.ttf","webpack:///./app/javascript/Components/fonts/boldPTSans.ttf","webpack:///./app/javascript/Components/fonts/boldPlay.ttf","webpack:///./app/javascript/Components/fonts/boldPTSansitalic.ttf","webpack:///./app/javascript/Components/fonts/Ralewayitalic.ttf","webpack:///./app/javascript/Components/fonts/PTSansitalic.ttf","webpack:///./app/javascript/Components/fonts/Teko.ttf","webpack:///./app/javascript/Components/fonts/boldLobsterTwo.ttf","webpack:///./app/javascript/Components/fonts/boldKameron.ttf","webpack:///./app/javascript/Components/fonts/boldOleoScript.ttf","webpack:///./app/javascript/Components/fonts/GreatVibes.ttf","webpack:///./app/javascript/Components/fonts/PTSans.ttf","webpack:///./app/javascript/Components/fonts/boldRobotoSlab.ttf","webpack:///./app/javascript/Components/fonts/Michroma.ttf","webpack:///./app/javascript/Components/fonts/Bitter.ttf","webpack:///./app/javascript/Components/fonts/Abel.ttf","webpack:///./app/javascript/Components/fonts/Monda.ttf","webpack:///./app/javascript/Components/fonts/Cinzel.ttf","webpack:///./app/javascript/Components/fonts/boldMonda.ttf","webpack:///./app/javascript/Components/fonts/boldRalewayitalic.ttf","webpack:///./app/javascript/Components/fonts/PlayfairDisplayitalic.ttf","webpack:///./app/javascript/Components/fonts/Raleway.ttf","webpack:///./app/javascript/Components/fonts/CarterOne.ttf","webpack:///./app/javascript/Components/fonts/PlayfairDisplay.ttf","webpack:///./app/javascript/Components/fonts/Audiowide.ttf","webpack:///./app/javascript/Components/fonts/lato.ttf","webpack:///./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./app/javascript/Components/ChildComponents/Fonts.jsx","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/buffer/index.js","webpack:///./app/javascript/Components/Logos/icon-image.svg","webpack:///./app/javascript/Components/Logos/icon-text.svg","webpack:///./app/javascript/Components/Logos/icon-gallery.svg","webpack:///./app/javascript/Components/Logos/icon-tool-duplicate.svg","webpack:///./app/javascript/Components/Logos/icon-tool-delete.svg","webpack:///./app/javascript/Components/Logos/icon-tool-centerhorizontal.svg","webpack:///./app/javascript/Components/Logos/icon-tool-centervertical.svg","webpack:///./app/javascript/Components/Logos/icon-tool-redo.svg","webpack:///./app/javascript/Components/Logos/icon-tool-undo.svg","webpack:///./app/javascript/Components/Logos/icon-tool-totop.svg","webpack:///./app/javascript/Components/Logos/icon-tool-tobottom.svg","webpack:///./app/javascript/Components/Logos/icon-tool-toright.svg","webpack:///./app/javascript/Components/Logos/icon-tool-toleft.svg","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack:///./node_modules/content-type/index.js","webpack:///./node_modules/react-dom/server.browser.js","webpack:///./node_modules/react-redux/node_modules/react-is/index.js","webpack:///./app/javascript/Components/Logos/icon-text-italic.svg","webpack:///./app/javascript/Components/Logos/icon-text-bold.svg","webpack:///./app/javascript/Components/Logos/icon-text-underline.svg","webpack:///./app/javascript/Components/Logos/icon-text-center.svg","webpack:///./app/javascript/Components/Logos/icon-text-left.svg","webpack:///./app/javascript/Components/Logos/icon-text-right.svg","webpack:///./app/javascript/Components/Logos/upload.svg","webpack:///./app/javascript/Components/ChildComponents/AddToChart.jsx","webpack:///./app/javascript/Components/fonts/boldTeko.ttf","webpack:///./app/javascript/Components/Logos/WeLoveLaser_Logo.svg","webpack:///./app/javascript/packs/index.css?266a","webpack:///./app/javascript/packs/index.css","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-is/index.js","webpack:///./node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","webpack:///./app/javascript/Components/style/tools.css?436a","webpack:///./app/javascript/Components/style/tools.css","webpack:///./app/javascript/Components/style/content.css?584d","webpack:///./app/javascript/Components/style/content.css","webpack:///./node_modules/fontfaceobserver/fontfaceobserver.standalone.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./app/javascript/Components/style/fonts.css?bead","webpack:///./app/javascript/Components/style/fonts.css","webpack:///./node_modules/css-loader/dist/runtime/getUrl.js","webpack:///./app/javascript/Components/fonts/Lato-Regular.ttf","webpack:///./app/javascript/Components/fonts/Lato-Black.ttf","webpack:///./app/javascript/Components/fonts/Lato-Bold.ttf","webpack:///./app/javascript/Components/fonts/fontello.ttf","webpack:///./node_modules/@tanem/svg-injector/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/@tanem/svg-injector/dist/svg-injector.esm.js","webpack:///./node_modules/react-svg/dist/react-svg.esm.js","webpack:///./app/javascript/Components/actions.jsx","webpack:///./node_modules/react-redux/es/components/Context.js","webpack:///./node_modules/react-redux/es/utils/batch.js","webpack:///./node_modules/react-redux/es/utils/Subscription.js","webpack:///./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack:///./node_modules/react-redux/es/components/Provider.js","webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/react-redux/es/components/connectAdvanced.js","webpack:///./node_modules/react-redux/es/utils/shallowEqual.js","webpack:///./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack:///./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack:///./node_modules/react-redux/es/utils/bindActionCreators.js","webpack:///./node_modules/react-redux/es/connect/mapStateToProps.js","webpack:///./node_modules/react-redux/es/connect/mergeProps.js","webpack:///./node_modules/react-redux/es/connect/selectorFactory.js","webpack:///./node_modules/react-redux/es/connect/connect.js","webpack:///./node_modules/react-redux/es/hooks/useSelector.js","webpack:///./node_modules/react-redux/es/index.js","webpack:///./app/javascript/Components/ChildComponents/Tools.jsx","webpack:///./app/javascript/Components/ChildComponents/TextOptions.jsx","webpack:///./app/javascript/Components/ChildComponents/ImageOptions.jsx","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./node_modules/redux/es/redux.js","webpack:///./node_modules/redux-thunk/es/index.js","webpack:///./app/javascript/Components/reducers.jsx","webpack:///./app/javascript/Components/store.jsx","webpack:///./app/javascript/Components/ChildComponents/GalleryOptions.jsx","webpack:///./app/javascript/Components/ChildComponents/Content.jsx","webpack:///./node_modules/reactjs-popup/reactjs-popup.es.js","webpack:///./app/javascript/Components/ChildComponents/SVGFilter.jsx","webpack:///./app/javascript/Components/ChildComponents/FrontSide.jsx","webpack:///./app/javascript/Components/ChildComponents/BackSide.jsx","webpack:///./app/javascript/Components/ChildComponents/Engraving.jsx","webpack:///./app/javascript/Components/ErrorBoundary.jsx","webpack:///./app/javascript/Components/ChildComponents/PopUp.jsx","webpack:///./app/javascript/Components/App.jsx","webpack:///./app/javascript/packs/index.jsx","webpack:///./node_modules/react-tooltip/node_modules/uuid/dist/esm-browser/rng.js","webpack:///./node_modules/react-tooltip/node_modules/uuid/dist/esm-browser/bytesToUuid.js","webpack:///./node_modules/react-tooltip/node_modules/uuid/dist/esm-browser/v4.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","toString","isArray","val","isUndefined","isObject","isFunction","forEach","fn","length","isArrayBuffer","isBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","arguments","deepMerge","extend","a","b","thisArg","trim","str","replace","global","sqrt","atan2","pow","PiBy180","PiBy2","couldUseAttachEvent","parseEl","supportsOpacity","supportsFilters","reOpacity","setOpacity","proto","min","max","degreesToRadians","originXOffset","originYOffset","clone","toFixed","multipleSpacesRegex","fabric","version","HTMLDocument","Document","implementation","createHTMLDocument","virtualWindow","JSDOM","decodeURIComponent","features","FetchExternalResources","resources","jsdomImplForWrapper","implForWrapper","nodeCanvas","Canvas","DOMParser","copyGLTo2DDrawImage","gl","pipelineState","glCanvas","canvas","targetCanvas","ctx","getContext","translate","height","scale","sourceY","drawImage","width","copyGLTo2DPutImageData","dWidth","destinationWidth","dHeight","destinationHeight","numBytes","u8","Uint8Array","this","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","RGBA","UNSIGNED_BYTE","imgData","ImageData","putImageData","isTouchSupported","maxTouchPoints","isLikelyNode","Buffer","SHARED_ATTRIBUTES","DPI","reNum","rePathCommand","reNonWord","fontPaths","iMatrix","svgNS","perfLimitSizeTotal","maxCacheSideLimit","minCacheSideLimit","charWidthsCache","textureSize","disableStyleCopyPaste","enableGLFiltering","devicePixelRatio","webkitDevicePixelRatio","mozDevicePixelRatio","browserShadowBlurConstant","arcToSegmentsCache","boundsOfCurveCache","cachesBoundsOfCurve","forceGLPutImageData","initFilterBackend","isWebglSupported","console","log","maxTextureSize","WebglFilterBackend","tileSize","Canvas2dFilterBackend","_removeEventListener","eventName","handler","__eventListeners","eventListener","indexOf","util","array","fill","observe","prop","on","push","stopObserving","fire","options","listenersForEvent","len","filter","Observable","off","trigger","Collection","_objects","add","apply","_onObjectAdded","renderOnAddRemove","requestRenderAll","insertAt","index","nonSplicing","objects","splice","remove","somethingRemoved","_onObjectRemoved","forEachObject","callback","context","getObjects","type","concat","item","isEmpty","size","contains","complexity","reduce","memo","current","CommonMethods","_setOptions","set","_initGradient","filler","colorStops","Gradient","_initPattern","source","Pattern","_initClipping","clipTo","functionBody","getFunctionBody","Function","_setObject","_set","toggle","Math","PI","cos","angle","sin","sign","removeFromArray","idx","getRandomInt","floor","random","degrees","radiansToDegrees","radians","rotatePoint","point","origin","subtractEquals","v","rotateVector","Point","x","y","addEquals","vector","transformPoint","ignoreOffset","makeBoundingBoxFromPoints","points","transform","xPoints","minX","yPoints","minY","left","top","invertTransform","number","fractionDigits","parseFloat","Number","parseUnit","fontSize","unit","exec","Text","DEFAULT_SVG_FONT_SIZE","falseFunction","getKlass","namespace","string","camelize","charAt","toUpperCase","slice","resolveNamespace","getSvgAttributes","attributes","parts","split","loadImage","url","crossOrigin","img","createImage","onLoadCallback","onload","onerror","src","substring","loadImageInDom","div","createElement","style","position","appendChild","querySelector","parentNode","removeChild","enlivenObjects","reviver","enlivenedObjects","numLoadedObjects","numTotalObjects","onLoaded","fromObject","error","enlivenPatterns","patterns","numLoadedPatterns","numPatterns","enlivenedPatterns","pattern","groupSVGElements","elements","path","centerPoint","Group","sourcePath","populateWithProperties","destination","properties","drawDashedLine","x2","y2","da","dx","dy","rot","dc","di","draw","save","moveTo","rotate","restore","createCanvasElement","copyCanvasElement","newCanvas","toDataURL","canvasEl","format","quality","clipContext","receiver","beginPath","clip","multiplyTransformMatrices","is2x2","qrDecompose","denom","scaleX","scaleY","skewX","skewY","translateX","translateY","calcRotateMatrix","theta","calcDimensionsMatrix","scaleMatrix","flipX","flipY","multiply","tan","composeMatrix","matrix","customTransformMatrix","resetObjectTransform","target","saveObjectTransform","String","match","isTransparent","tolerance","_isTransparent","imageData","getImageData","data","parsePreserveAspectRatioAttribute","attribute","align","meetOrSlice","aspectRatioAttrs","pop","alignX","alignY","clearFabricFontCache","fontFamily","toLowerCase","limitDimsByArea","ar","maximumArea","roughWidth","perfLimitSizeY","capValue","findScaleToFit","findScaleToCover","matrixToSVG","map","NUM_FRACTION_DIGITS","join","_join","Array","arcToSegments","toX","toY","rx","ry","large","sweep","rotateX","argsString","th","sinTh","cosTh","fromX","fromY","px","py","rx2","abs","ry2","py2","px2","pl","root","cx","cy","cx1","cy1","mTheta","calcVectorAngle","dtheta","segments","ceil","mDelta","mT","th3","segmentToBezier","th2","costh2","sinth2","costh3","sinth3","ux","uy","vx","vy","ta","tb","getBoundsOfCurve","x0","y0","x1","y1","x3","y3","t1","t2","b2ac","sqrtb2ac","tvalues","bounds","mt","j","jlen","drawArc","fx","fy","coords","segs","segsNorm","bezierCurveTo","getBoundsOfArc","tx","ty","bound","find","byProperty","condition","k","invoke","method","args","value1","value2","deep","Element","getWholeChar","code","charCodeAt","isNaN","next","prev","character","capitalize","firstLetterOnly","escapeXml","graphemeSplit","textstring","chr","graphemes","emptyFunction","IS_DONTENUM_BUGGY","addMethods","klass","parent","superclass","returnValue","valueOf","Subclass","callSuper","methodName","parentMethod","_this","superClassMethod","createClass","initialize","shift","subclasses","attachEvent","addListener","element","addEventListener","removeListener","removeEventListener","getPointer","event","scroll","getScrollLeftTop","_evt","touchProp","changedTouches","getTouchInfo","clientX","clientY","opacity","es","currentStyle","hasLayout","zoom","test","setStyle","styles","elementStyle","cssText","styleFloat","_slice","sliceCanConvertNodelists","getElementStyle","selectProp","toArray","arrayLike","childNodes","err","makeElement","tagName","el","className","htmlFor","setAttribute","docElement","documentElement","body","scrollLeft","scrollTop","host","nodeType","arr","defaultView","getComputedStyle","attr","undefined","makeElementUnselectable","onselectstart","unselectable","makeElementSelectable","getScript","headEl","getElementsByTagName","scriptEl","loading","onreadystatechange","e","readyState","getById","id","getElementById","addClass","wrapElement","wrapper","replaceChild","getElementOffset","docElem","scrollLeftTop","doc","ownerDocument","box","offset","offsetAttributes","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","parseInt","getBoundingClientRect","clientLeft","clientTop","getNodeCanvas","impl","_canvas","_image","cleanUpJsdomNode","_currentSrc","_attributes","_classList","emptyFn","request","onComplete","xhr","XMLHttpRequest","parameters","param","addParamToUrl","open","setRequestHeader","send","warn","noop","defaultEasing","_requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","_cancelAnimFrame","cancelAnimationFrame","clearTimeout","requestAnimFrame","animate","timestamp","time","start","Date","duration","finish","onChange","abort","easing","startValue","endValue","byValue","onStart","tick","ticktime","currentTime","timePerc","valuePerc","cancelAnimFrame","animateColor","fromColor","toColor","startColor","Color","getSource","endColor","begin","end","pos","color","posValue","colorEasing","normalize","asin","elastic","opts","easeInBounce","easeOutBounce","ease","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInOutBounce","attributesMap","display","visibility","colorAttributes","stroke","fSize","cPath","normalizeAttr","normalizeValue","parentAttributes","parsed","transformMatrix","parseTransformAttribute","visible","fillIndex","strokeIndex","getSvgRegex","RegExp","_getMultipleNodes","nodeNames","nodeName","nodeList","nodeArray","elementMatchesRule","selectors","firstMatching","parentMatching","selectorMatches","selector","doesSomeParentMatch","matcher","classNames","getAttribute","elementById","node","nodelist","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgInvalidAncestorsRegEx","svgValidParentsRegEx","cssRules","gradientDefs","clipPaths","skewMatrix","commaWsp","reTransformList","reTransform","attributeValue","matrices","operation","translateMatrix","rotateMatrix","multiplierX","multiplierY","combinedMatrix","reViewBoxAttrValue","applyViewboxTransform","viewBoxWidth","viewBoxHeight","viewBoxAttr","widthAttr","heightAttr","preserveAspectRatio","missingViewBox","missingDimAttr","toBeParsed","parsedDim","widthDiff","heightDiff","viewboxTransform","createElementNS","firstChild","recursivelyParseGradientsXlink","gradient","xlinkAttr","referencedGradient","substr","hasAttribute","children","referenceClone","cloneNode","removeAttribute","parseSVGDocument","parsingOptions","attrs","xlink","el2","currentTrans","oldLength","el3","setAttributeNS","nodeValue","parseUseDirectives","svgUid","__uid","descendants","selectNodes","hasAncestorWithNodeName","getGradientDefs","getCSSRules","parseElements","instances","reFontDeclaration","parseFontDeclaration","oStyle","fontStyle","fontWeight","lineHeight","elList","parseAttributes","parentFontSize","ownAttributes","cssAttrs","rule","getGlobalStylesForElement","parseStyleAttribute","normalizedAttr","normalizedValue","normalizedStyle","font","mergedAttrs","setAlpha","getAlpha","toRgba","_setStrokeFillOpacity","ElementsParser","parse","chunk","pair","parseStyleString","parseStyleObject","parsePointsAttribute","parsedPoints","allRules","styleContents","textContent","ruleObj","propertyValuePairs","_rule","loadSVGFromURL","xml","responseXML","ActiveXObject","responseText","async","loadXML","results","_options","allElements","loadSVGFromString","parser","parseFromString","regexUrl","numElements","createObjects","createObject","findTag","fromElement","createCallback","checkIfDone","resolveGradient","Image","_originalElement","_removeTransformMatrix","resolveClipPath","extractPropertyDefinition","storage","regex","lastIndex","gradientDef","opacityAttr","createClipPathCallback","container","_newObj","fillRule","clipRule","usingElement","objTransformInv","gTransform","clipPath","calcTransformMatrix","clipPathTag","clipPathOwner","setPositionByOrigin","that","scalarAdd","scalar","scalarAddEquals","subtract","scalarSubtract","scalarSubtractEquals","multiplyEquals","divide","divideEquals","eq","lt","lte","gt","gte","lerp","distanceFrom","midPointFrom","setXY","setX","setY","setFromPoint","swap","Intersection","status","appendPoint","appendPoints","intersectLineLine","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","intersectLinePolygon","inter","intersectPolygonPolygon","points1","points2","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","_tryParsingColor","setSource","hue2rgb","q","colorNameMap","sourceFromHex","sourceFromRgb","sourceFromHsl","_rgbToHsl","g","h","round","_source","toRgb","toHsl","hsl","toHsla","toHex","toHexa","alpha","toGrayscale","average","currentAlpha","toBlackWhite","threshold","overlayWith","otherColor","otherSource","reRGBa","reHSLa","reHex","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","fromRgb","fromSource","fromRgba","fromHsl","fromHsla","fromHex","isShortNotation","isRGBa","oColor","getColorStop","multiplier","colorAlpha","keyValuePairs","__convertPercentUnitsToValues","instance","svgOptions","gradientUnits","propValue","finalValue","keys","offsetX","offsetY","gradientTransform","option","addColorStop","toObject","propertiesToInclude","toSVG","markup","commonAttributes","needsSwap","withViewport","additionalTransform","sort","pathOffset","reverse","minRadius","percentageShift","colorStop","toLive","stops","createLinearGradient","createRadialGradient","colorStopEls","getLinearCoords","getRadialCoords","forObject","repeat","patternTransform","setOptions","patternSource","patternWidth","patternHeight","patternOffsetX","patternOffsetY","patternImgSrc","complete","naturalWidth","naturalHeight","createPattern","Shadow","blur","affectStroke","includeDefaultValues","nonScaling","_parseShadow","shadow","shadowStr","offsetsAndBlur","reOffsetsAndBlur","fBoxX","fBoxY","StaticCanvas","CANVAS_INIT_ERROR","Error","renderAndResetBound","renderAndReset","requestRenderAllBound","_initStatic","backgroundColor","backgroundImage","overlayColor","overlayImage","stateful","controlsAboveOverlay","allowTouchScrolling","imageSmoothingEnabled","viewportTransform","backgroundVpt","overlayVpt","onBeforeScaleRotate","enableRetinaScaling","vptCoords","skipOffscreen","cb","_createLowerCanvas","_initOptions","_setImageSmoothing","interactive","_initRetinaScaling","setOverlayImage","setBackgroundImage","setBackgroundColor","setOverlayColor","calcOffset","_isRetinaScaling","getRetinaScaling","scaleRatio","__initRetinaScaling","lowerCanvasEl","contextContainer","upperCanvasEl","contextTop","_offset","image","__setBgOverlayImage","__setBgOverlayColor","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","msImageSmoothingEnabled","oImageSmoothingEnabled","_createCanvasElement","_applyCanvasStyle","getWidth","getHeight","setWidth","setDimensions","setHeight","dimensions","cssValue","cssOnly","_setBackstoreDimension","hasLostContext","backstoreOnly","_setCssDimension","_isCurrentlyDrawing","freeDrawingBrush","_setBrushStyles","cacheCanvasEl","wrapperEl","getZoom","setViewportTransform","vpt","activeObject","_activeObject","group","setCoords","calcViewportBoundaries","zoomToPoint","before","after","setZoom","absolutePan","relativePan","getElement","setupState","clearContext","clearRect","clear","_hasITextHandlers","_mouseUpITextHandler","_iTextInstances","renderAll","canvasToDrawOn","renderCanvas","isRendering","iVpt","tl","br","tr","bl","cancelRequestedRender","_renderBackground","_renderObjects","drawControls","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","render","_renderBackgroundOrOverlay","needsVpt","lineTo","closePath","fillStyle","getCenter","centerObjectH","_centerObject","getCenterPoint","centerObjectV","centerObject","center","viewportCenterObject","vpCenter","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","toDatalessJSON","toDatalessObject","_toObjectMethod","_toObjects","_toObject","__serializeBgOverlay","excludeFromExport","originalValue","bgImage","overlay","background","svgViewportTransformation","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","viewBox","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","row","rowIndex","charIndex","fontList","_setSVGObject","finalWidth","finalHeight","sendToBack","objs","activeSelection","unshift","bringToFront","sendBackwards","intersecting","newIdx","objsMoved","_findNewLowerIndex","intersectsWithObject","isContainedWithinObject","bringForward","_findNewUpperIndex","dispose","DataURLExporter","EMPTY_JSON","supports","setLineDash","toJSON","createPNGStream","createJPEGStream","BaseBrush","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeDashArray","setShadow","strokeStyle","lineWidth","lineCap","miterLimit","lineJoin","_saveAndTransform","_setShadow","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","needsFullRender","_resetShadow","PencilBrush","decimate","_points","_drawSegment","p1","p2","midPoint","quadraticCurveTo","onMouseDown","pointer","_isMainEvent","_prepareForDrawing","_captureDrawingPath","_render","onMouseMove","oldEnd","onMouseUp","_finalizeAndAddPath","_reset","_addPoint","pointerPoint","convertPointsToSVGPath","multSignX","multSignY","manyPoints","createPath","pathData","Path","strokeWidth","decimatePoints","distance","adjustedDistance","lastPoint","newPoints","CircleBrush","drawDot","addPoint","dot","arc","radius","originalRenderOnAddRemove","circles","circle","Circle","originX","originY","circleRadius","circleColor","SprayBrush","density","dotWidth","dotWidthVariance","randomOpacity","optimizeOverlapping","sprayChunks","addSprayChunk","sprayChunkPoints","rects","ilen","sprayChunk","rect","Rect","_getOptimizedRects","uniqueRects","uniqueRectsArray","globalAlpha","fillRect","PatternBrush","getPatternSrc","patternCanvas","patternCtx","getPatternSrcFunction","getPattern","topLeft","_getLeftTopCoords","_getPointer","supportLineDash","STROKE_OFFSET","_initInteractive","_createCacheCanvas","uniScaleTransform","uniScaleKey","centeredScaling","centeredRotation","centeredKey","altActionKey","selection","selectionKey","altSelectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","hoverCursor","moveCursor","defaultCursor","freeDrawingCursor","rotationCursor","notAllowedCursor","containerClass","perPixelTargetFind","targetFindTolerance","skipTargetFind","isDrawingMode","preserveObjectStacking","snapAngle","snapThreshold","stopContextMenu","fireRightClick","fireMiddleClick","targets","_hoveredTarget","_hoveredTargets","_currentTransform","_groupSelector","_initWrapperElement","_createUpperCanvas","_initEventListeners","_chooseObjectsToRender","objsToRender","activeGroupObjects","activeObjects","getActiveObjects","contextTopDirty","renderTopLayer","_drawSelection","renderTop","_resetCurrentTransform","original","_shouldCenterTransform","mouseXSign","mouseYSign","containsPoint","xy","_normalizePointer","_findTargetCorner","invertedM","vptPointer","restorePointerVpt","isTargetTransparent","normalizedPointer","targetRelativeX","targetRelativeY","_cacheContext","contextCache","originalColor","selectionBackgroundColor","_renderControls","hasBorders","transparentCorners","_isSelectionKeyPressed","_shouldClearSelection","evented","selectable","centerTransform","action","altKey","_getOriginFromCorner","corner","_getActionFromCorner","alreadySelected","_setupCurrentTransform","ex","ey","lastX","lastY","shiftKey","_beforeTransform","_translateObject","newLeft","newTop","moveX","moveY","_changeSkewTransformOrigin","mouseMove","by","origins","skew","originA","originB","flipSign","skewSign","_skewObject","skewed","lockSkewingX","lockSkewingY","actualMouseByOrigin","constraintPosition","actualMouseByCenter","toLocalPoint","lastMouseByCenter","dim","_getTransformedDimensions","translateToOriginPoint","_setObjectSkew","localMouse","_dim","newValue","newDim","dimNoSkew","otherBy","_otherBy","_by","newDimMouse","atan","_scaleObject","lockScalingX","lockScalingY","lockScalingFlip","scaled","_setLocalMouse","_setObjectScale","forbidScalingX","forbidScalingY","changeX","changeY","newScaleX","newScaleY","Textbox","w","getMinWidth","_scaleObjectEqually","_flipObject","dist","lastDist","signX","signY","padding","_rotateObject","lockRotation","lastAngle","curAngle","hasRotated","rightAngleLocked","leftAngleLocked","setCursor","cursor","groupSelector","aleft","atop","_setLineDash","strokeRect","findTarget","skipGroup","activeTarget","activeTargetSubs","aObjects","_searchPossibleTargets","_checkTarget","globalPointer","isEditing","subTarget","objToCheck","pointerToUse","subTargetCheck","ignoreZoom","_absolutePointer","_pointer","cssScale","boundsWidth","boundsHeight","bottom","right","retinaScaling","lowerCanvasClass","_copyCanvasStyle","fromEl","toEl","getSelectionContext","getSelectionElement","getActiveObject","active","_discardActiveObject","_fireSelectionEvents","oldObjects","somethingChanged","added","removed","opt","oldObject","selected","deselected","updated","setActiveObject","currentActives","_setActiveObject","onSelect","onDeselect","discardActiveObject","removeListeners","originalProperties","_realizeGroupTransformOnObject","_unwindGroupTransformOnObject","originalValues","realizeTransform","clearContextTop","cursorOffset","mr","mb","ml","addEventOptions","passive","checkClick","button","cursorMap","mainTouchId","_bindEvents","addOrRemove","_getEventPrefix","enablePointerEvents","functor","eventjsFunctor","canvasElement","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","eventjs","_onGesture","_onDrag","_onOrientationChange","_onShake","_onLongPress","_onMouseUp","_onTouchEnd","eventsBound","_simpleEventHandler","self","__onTransformGesture","__onDrag","__onMouseWheel","_target","hiddenTextarea","focus","currentTransform","__onOrientationChange","__onShake","__onLongPress","preventDefault","_fireEnterLeaveEvents","stopPropagation","_cacheTransformEventData","_handleEvent","_resetTransformEventData","getPointerId","evt","identifier","pointerId","isPrimary","touches","__onMouseDown","__onMouseUp","_willAddMouseDown","__onMouseMove","_shouldRender","shouldRender","isClick","_onMouseUpInDrawingMode","_finalizeCurrentTransform","actionPerformed","_maybeGroupObjects","isMoving","_setCursorFromEvent","__corner","eventType","subTargets","absolutePointer","_scaling","hasStateChanged","_addEventOptions","_fire","_onMouseDownInDrawingMode","_onMouseMoveInDrawingMode","_previousPointer","shouldGroup","_shouldGroup","_handleGrouping","saveState","_transformObject","_fireOverOutEvents","fireSyntheticInOutEvents","oldTarget","evtOut","canvasEvtOut","evtIn","canvasEvtIn","_draggedoverTarget","config","inOpt","outOpt","inFires","targetChanged","previousTarget","nextTarget","reset","_beforeScaleTransform","_performTransformAction","_onScale","_isUniscalePossible","currentAction","getCornerCursor","actionIsDisabled","_getRotatedCornerCursor","hasRotatingPoint","_updateActiveSelection","_createActiveSelection","currentActiveObjects","removeWithUpdate","addWithUpdate","_createGroup","groupObjects","exitEditing","ActiveSelection","_groupSelectedObjects","aGroup","_collectObjects","currentObject","selectionX1Y1","selectionX2Y2","allowIntersect","intersectsWithRect","isContainedWithinRect","toCanvasElement","cropping","scaledWidth","scaledHeight","originalWidth","originalHeight","newZoom","vp","originalInteractive","newVp","originalRetina","originalContextTop","loadFromDatalessJSON","json","loadFromJSON","serialized","JSON","_enlivenObjects","_setBgOverlay","enlivenedCanvasClip","__setupCanvas","loaded","cbIfLoaded","__setBgOverlay","enlivedObject","_toDataURL","_toDataURLWithMultiplier","toDataURLWithMultiplier","stringify","cloneWithoutData","backgroundImageOpacity","backgroundImageStretch","supportsLineDash","objectCaching","cornerSize","borderColor","borderDashArray","cornerColor","cornerStrokeColor","cornerStyle","cornerDashArray","strokeDashOffset","borderOpacityWhenMoving","borderScaleFactor","minScaleLimit","hasControls","rotatingPointOffset","lockMovementX","lockMovementY","lockUniScaling","statefullCache","noScaleCache","strokeUniform","dirty","paintFirst","stateProperties","cacheProperties","inverted","absolutePositioned","_cacheProperties","_updateCacheCanvas","_limitCacheSize","dims","limitedDims","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","drawingWidth","drawingHeight","minCacheSize","dimensionsChanged","cacheWidth","cacheHeight","zoomChanged","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","setTransform","calcOwnMatrix","_removeDefaultValues","getObjectScaling","retina","getObjectOpacity","shouldConstrainValue","isChanged","groupNeedsUpdate","_constrainScale","isOnACache","setOnGroup","getViewportTransform","isNotVisible","isOnScreen","_setupCompositeOperation","drawSelectionBackground","_setOpacity","drawCacheOnCanvas","_removeCacheCanvas","drawObject","propertySet","isCacheDirty","hasStroke","hasFill","needsItsOwnCache","ownCaching","willDrawShadow","drawClipPathOnCache","originalFill","originalStroke","_setClippingProperties","_setStrokeStyles","_setFillStyles","_drawClipPath","skipCanvas","_getNonTransformedDimensions","_removeShadow","decl","lineDashOffset","dashArray","alternative","styleOverride","drawBorders","forActiveSelection","drawBordersInGroup","scaling","multX","multY","_applyPatternGradientTransform","_renderPaintInOrder","_renderStroke","_renderFill","_renderDashedStroke","_applyPatternForTransformedGradient","pCtx","pCanvas","_findCenterFromElement","_assignTransformMatrixProps","preserveAspectRatioOptions","cropX","cropY","offsetLeft","offsetTop","objectForm","_fromObject","cloneAsImage","utils","origParams","originalGroup","originalShadow","withoutTransform","withoutShadow","boundingRect","getBoundingRect","shadowOffset","originalCanvas","isType","setGradient","setPatternFill","setColor","shouldCenterOrigin","_setOriginToCenter","_resetOrigin","centerH","viewportCenterH","centerV","viewportCenterV","viewportCenter","getLocalPointer","pClicked","objectLeftTop","createAccessors","extraParam","enlivedProps","translateToGivenOrigin","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","leftTop","getPointByOrigin","adjustPosition","to","offsetFrom","offsetTo","hypotFull","getScaledWidth","xFull","yFull","_originalOriginX","_originalOriginY","originPoint","multiplyMatrices","oCoords","aCoords","ownMatrixCache","matrixCache","getCoords","absolute","calculate","_getCoords","calcCoords","pointTL","pointBR","other","lines","_getImageLines","_findCrossPoints","_containsCenterOfCanvas","isPartiallyOnScreen","topline","rightline","bottomline","leftline","xi","iLine","xcount","lineKey","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","_calcRotateMatrix","_calcTranslateMatrix","startMatrix","finalMatrix","cosP","sinP","cosPSinP","cosPMinusSinP","mtr","skipAbsolute","_setCornerCoords","transformMatrixKey","sep","prefix","cache","tMatrix","_calcDimensionsTransformMatrix","flipping","dimX","dimY","noSkew","_finalizeDimensions","bbox","_calculateCurrentDimensions","getSvgColorString","getSvgStyles","skipShadow","getSvgFilter","getSvgSpanStyles","useWhiteSpace","term","textDecoration","getSvgTextDecoration","deltaY","decoration","getSvgCommons","getSvgTransform","full","getSvgTransformMatrix","_setSVGBg","textBgRects","_getFillAttributes","_createBaseSVGMarkup","_toSVG","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","clipPathMarkup","noStyle","styleInfo","shadowInfo","withShadow","vectorEffect","absoluteClipPath","addPaintOrder","originalSet","saveProps","props","tmpObj","_isEqual","origValue","currentValue","firstPass","dashedPropertySet","_controlsVisibility","isControlVisible","newTheta","cornerHypotenuse","cosHalfOffset","sinHalfOffset","wh","drawRotatingPoint","rotateHeight","scaleOffset","_drawControl","control","controlName","_getControlsVisibility","setControlVisible","setControlsVisibility","FX_DURATION","fxCenterObjectH","callbacks","empty","_onComplete","_onChange","fxCenterObjectV","_onComplete2","_onChange2","fxRemove","_onComplete3","_onChange3","skipCallbacks","propsToAnimate","_animate","propPair","from","valueProgress","timeProgress","coordProps","makeEdgeToOriginGetter","propertyNames","originValues","axis1","axis2","dimension","nearest","farthest","Line","_setWidthHeight","_getLeftToOriginX","_getTopToOriginY","calcLinePoints","origStrokeStyle","xMult","yMult","ATTRIBUTE_NAMES","parsedAttributes","pi","startAngle","endAngle","setRadius","svgString","startX","startY","endX","endY","largeFlag","getRadiusX","getRadiusY","Triangle","widthBy2","heightBy2","piBy2","Ellipse","getRx","getRy","_initRxRy","isRounded","Polyline","_setPositionDimensions","correctLeftTop","calcDim","_calcDimensions","fromSVG","diffX","diffY","commonRender","fromElementGenerator","_class","Polygon","_toString","commandLengths","repeatedCommands","M","fromArray","_parsePath","_renderPathCommands","tempX","tempY","previous","subpathStartX","subpathStartY","controlX","controlY","_getOffsetTransform","digits","currentPath","coordsStr","coordsParsed","re","command","commandLength","repeatedCommand","klen","aX","aY","pathUrl","useSetOnGroup","isAlreadyGrouped","_updateObjectsACoords","_calcBounds","_updateObjectsCoords","_updateObjectCoords","objectLeft","objectTop","_restoreObjectsState","_includeDefaultValues","objsToObject","originalDefaults","_obj","ownCache","_restoreObjectState","destroy","toActiveSelection","ungroupOnCanvas","setObjectsCoords","onlyWidthHeight","iLen","jLen","_getBounds","minXY","maxXY","enlivedClipPath","toGroup","newGroup","childrenOverride","srcFromAttribute","_lastScaleX","_lastScaleY","_filterScalingX","_filterScalingY","minimumScaleTrigger","cacheKey","filters","_initElement","_element","setElement","removeTexture","_initConfig","applyFilters","resizeFilter","applyResizeFilters","backend","filterBackend","evictCachesForKey","setCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","hasCrop","strokeSvg","imageMarkup","getSvgSrc","origFill","filtered","setSrc","minimumScale","elementToFilter","_filteredEl","sourceWidth","sourceHeight","isNeutralState","imgElement","_needsResize","elementToDraw","sW","sH","sX","sY","_resetWidthHeight","CSS_CANVAS","_initFilters","pAR","rWidth","rHeight","pWidth","pHeight","_object","resizeFilters","fromURL","imgOptions","_getAngleValueForStraighten","straighten","fxStraighten","_onComplete4","_onChange4","straightenObject","fxStraightenObject","testPrecision","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","setupGLContext","captureGPUInfo","isSupported","getParameter","MAX_TEXTURE_SIZE","precisions","webGlPrecision","createWebGLCanvas","aPosition","Float32Array","chooseFastestCopyGLTo2DMethod","canUseImageData","canMeasurePerf","performance","canUseArrayBuffer","canUseUint8Clamped","copyGLTo2D","startTime","drawImageTime","testContext","now","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","applyTo","resizeCanvasIfNeeded","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","texture","texParameteri","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","uniqueId","gpuInfo","renderer","vendor","ext","getExtension","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","sourceElement","originalEl","originalImageData","BaseFilter","vertexSource","createProgram","vertexShader","VERTEX_SHADER","getShaderInfoLog","program","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","attributeLocations","getAttributeLocations","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","getAttribLocation","sendAttributeData","aPositionData","attributeLocation","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","_swapTextures","temp","main","mainParameter","applyToWebGL","applyTo2d","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","getMainParameter","setMainParameter","createHelpLayer","helpLayer","mainP","ColorMatrix","colorsOnly","uColorMatrix","uConstants","constants","uniformMatrix4fv","uniform4fv","Brightness","brightness","uBrightness","Convolute","opaque","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","dstOff","scx","scy","srcOff","wt","weights","side","halfSide","sw","sh","output","createImageData","dst","alphaFac","uMatrix","uOpaque","uHalfSize","uSize","uniform1fv","Grayscale","lightness","luminosity","uMode","uniform1i","Invert","invert","uInvert","Noise","noise","rand","uNoise","uSeed","Pixelate","blocksize","_i","_j","_iLen","_jLen","uBlocksize","RemoveColor","useAlpha","lowC","highC","uLow","uHigh","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","BlendColor","screen","diff","lighten","darken","exclusion","tint","buildSource","tg","alpha1","uColor","BlendImage","mask","TEXTURE1","calculateMatrix","canvas1","blendData","blendImage","uTransformMatrix","uImage","uniformMatrix3fv","Resize","resizeType","lanczosLobes","uDelta","uTaps","uniform2fv","horizontal","taps","filterWindow","getFilterWindow","generateShader","tempScale","getTaps","lobeFunction","lanczosCreate","offsets","fragmentSourceTOP","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","newData","oW","oH","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","tmpCanvas","mult","doneW","doneH","stepW","stepH","dX","dY","srcData","destImg","destData","lanczos","ratioX","ratioY","rcpRatioX","rcpRatioY","range2X","range2Y","cacheLanc","icenter","process","u","weight","fX","fY","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","centerY","yy","centerX","w0","Contrast","contrast","contrastF","uContrast","Saturation","saturation","adjust","uSaturation","Blur","aspectRatio","simpleBlur","canvas2","blurLayer1","blurLayer2","percent","ctx1","ctx2","nSamples","newImageData","delta","chooseRightDelta","blurScale","Gamma","gamma","rInv","gInv","bInv","rVals","gVals","bVals","uGamma","uniform3fv","Composed","subFilters","some","HueRotation","rotation","rad","aThird","aThirdSqtSin","OneMinusCos","_dimensionAffectingProps","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","underline","overline","linethrough","textAlign","superscript","baseline","subscript","textBackgroundColor","_fontSizeFraction","_fontSizeMult","charSpacing","_measuringContext","_styleProperties","__charBounds","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","text","__skipDimension","initDimensions","getMeasuringContext","_splitText","newLines","_splitTextIntoLines","textLines","_textLines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","cursorWidth","enlargeSpaces","calcTextHeight","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","line","charBound","spaces","isEndOfWrapping","getLineWidth","kernedWidth","lineIndex","missingNewlineOffset","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","maxWidth","_renderTextLine","_renderChars","styleHas","heightOfLine","lineLeftOffset","lastColor","charBox","currentColor","lineTopOffset","leftOffset","_getLeftOffset","topOffset","_getTopOffset","boxStart","boxWidth","getHeightOfLine","_getLineLeftOffset","getValueOfPropertyAt","getFontCache","cacheProp","_applyCharStyles","styleDeclaration","_measureChar","_char","previousChar","prevCharStyle","coupleWidth","previousWidth","fontCache","couple","stylesAreEqual","fontMultiplier","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","grapheme","prevGrapheme","graphemeInfo","lineBounds","_getGraphemeBox","numOfSpaces","skipLeft","getCompleteStyleDeclaration","prevStyle","info","previousBox","__lineHeights","maxHeight","_renderTextCommon","lineHeights","isEmptyStyles","actualStyle","nextStyle","timeToRender","isJustify","charsToRender","shortCut","_renderChar","_hasStyleChanged","_getStyleDeclaration","fullDecl","shouldFill","shouldStroke","fillText","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","get2DCursorLocation","setSelectionStyles","thisStyle","_hasStyleChangedForSvg","__lineWidths","_shouldClearDimensionCache","shouldClear","_forceClearCache","_size","_dy","lastDecoration","currentDecoration","currentFill","lastFill","styleObject","family","fontIsGeneric","genericFonts","newLine","newText","additionalProperties","needsDims","_key","parsedAnchor","textAnchor","originalStrokeWidth","textHeightScaleFactor","scaledDiff","textHeight","offX","p3","cleanStyle","letterCount","stylePropertyValue","stylesCount","allStyleObjectPropertiesMatch","graphemeCount","removeStyle","lineNum","charNum","_extendStyles","_getLineStyle","_setLineStyle","_setStyleDeclaration","selectionStart","skipWrapping","getSelectionStyles","startIndex","endIndex","selectionEnd","getStyleAtPosition","lineStyle","_deleteStyleDeclaration","_deleteLineStyle","parseDecoration","IText","editable","editingBorderColor","cursorColor","cursorDelay","cursorDuration","caching","_reSpace","_currentCursorOpacity","_selectionDirection","_abortCursorAnimation","__widthOfSpace","inCompositionMode","initBehavior","setSelectionStart","_updateAndFire","setSelectionEnd","_fireSelectionChanged","_updateTextarea","initDelayedCursor","cursorOffsetCache","renderCursorOrSelection","skipRestore","_clearTextArea","boundaries","_getCursorBoundaries","renderCursor","renderSelection","_getCursorBoundariesOffsets","cursorPosition","cursorLocation","charHeight","__isMousedown","startLine","endLine","startChar","endChar","realLineHeight","lineOffset","boxEnd","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","initAddedHandler","initRemovedHandler","initCursorSelectionHandlers","initDoubleClickSimulation","mouseMoveHandler","_initCanvasHandlers","_removeCanvasHandlers","_tick","_currentTickState","_animateCursor","targetOpacity","completeMethod","tickState","isAborted","_onTickComplete","_cursorTimeout1","_currentTickCompleteState","restart","delay","abortCursorAnimation","_cursorTimeout2","selectAll","getSelectedText","findWordBoundaryLeft","startFrom","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","direction","selectWord","newSelectionStart","newSelectionEnd","selectLine","enterEditing","exitEditingOnOthers","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","initMouseMoveHandler","getSelectionStartFromPointer","currentStart","currentEnd","__selectionStartOnMouseDown","restartCursorIfNeeded","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","fromGraphemeToStringSelection","newSelection","updateTextareaPosition","updateFromTextArea","_calcTextareaPosition","desiredPosition","compositionStart","upperCanvas","upperCanvasWidth","upperCanvasHeight","clientWidth","clientHeight","_savedProps","_restoreEditingProps","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","styleObj","cursorStart","cursorEnd","lineStart","charStart","lineEnd","charEnd","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","qty","copiedStyle","currentCharStyle","newLineStyles","somethingAdded","numIndex","insertCharStyleObject","quantity","currentLineStyles","currentLineStylesCloned","numericIndex","newStyle","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","setSelectionInBoundaries","__lastClickTime","__lastLastClickTime","__lastPointer","__newClickTime","newPointer","isTripleClick","_stopEvent","__lastIsEditing","__lastSelected","initMousedownHandler","initMouseupHandler","initClicks","doubleClickHandler","tripleClickHandler","_mouseDownHandler","setCursorByClick","_mouseDownHandlerBefore","mouseUpHandler","currentActive","mouseOffset","prevWidth","_getNewSelectionStartFromOffset","distanceBtwLastCharAndCursor","distanceBtwNextCharAndCursor","onKeyDown","onKeyUp","onInput","copy","paste","onCompositionStart","onCompositionUpdate","onCompositionEnd","_clickHandlerInitialized","onClick","keysMap","ctrlKeysMapUp","ctrlKeysMapDown","keyCode","ctrlKey","metaKey","stopImmediatePropagation","_copyDone","fromPaste","removedText","nextText","charCount","nextCharCount","charDiff","textareaSelection","backDelete","copiedText","copiedTextStyle","compositionEnd","_getClipboardData","clipboardData","_getWidthBeforeCursor","widthBeforeCursor","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","getUpCursorOffset","textBeforeCursor","charWidth","foundMatch","widthOfCharsOnLine","indexOnLine","leftEdge","rightEdge","offsetFromLeftEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","actionName","moveCursorRightWithShift","moveCursorRightWithoutShift","changed","removeChars","insertChars","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textSpans","textTopOffset","textLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","styleDecl","shouldUseWhitespace","styleProps","fillStyles","dySpan","_pushTextBgRect","fillColor","_getSVGLineTopOffset","lastHeight","minWidth","dynamicMinWidth","__cachedLines","_wordJoiners","splitByGrapheme","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextOffset","shouldLimit","mapNextLine","_wrapText","desiredWidth","wrapped","_wrapLine","_measureWord","word","charOffset","_line","reservedSpace","words","infix","wordWidth","infixWidth","largestWordWidth","lineJustStarted","additionalSpace","linesToKeep","_defineProperties","descriptor","configurable","writable","_createClass","Constructor","protoProps","staticProps","_defineProperty","_extends","assign","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","getOwnPropertyDescriptors","defineProperties","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","CONSTANT","HIDE","REBUILD","SHOW","dispatchGlobalEvent","CustomEvent","detail","createEvent","initEvent","dispatchEvent","checkStatus","dataEventOff","show","state","isCapture","currentTarget","currentItem","hideTooltip","setUntargetItems","getTargetArray","showTooltip","targetArray","customListeners","listener","bodyListener","_options$respectEffec","respectEffect","_options$customEvent","customEvent","tip","forId","isCustomEvent","isTargetBelongsToTooltip","getEffect","proxy","makeProxy","findCustomEvents","dataAttribute","events","getBody","getPosition","place","desiredPlace","effect","_getDimensions","getDimensions","tipWidth","tipHeight","_getDimensions2","targetWidth","targetHeight","_getCurrentOffset","getCurrentOffset","mouseX","mouseY","defaultOffset","getDefaultPosition","_calculateOffset","calculateOffset","extraOffsetX","extraOffsetY","windowWidth","innerWidth","windowHeight","innerHeight","_getParent","getParent","parentTop","parentLeft","getTipOffsetLeft","getTipOffsetTop","outsideRight","getTipOffsetRight","outsideBottom","getTipOffsetBottom","outside","outsideLeft","outsideTop","inside","placesList","insideList","newPlace","isNewState","shouldUpdatePlace","newState","_node$getBoundingClie","boundingClientRect","targetTop","targetLeft","_getDimensions3","disToMouse","currentParent","computedStyle","getPropertyValue","parentElement","getTipContent","getContent","multiline","regexp","parseAria","ariaObj","nodeListToArray","defaultColors","dark","border","arrow","success","warning","light","generateTooltipStyle","uuid","customColors","hasBorder","colors","textColor","arrowColor","generateStyle","getDefaultPopupColors","getPopupColors","commonjsGlobal","globalThis","createCommonjsModule","check","it","global_1","fails","descriptors","$propertyIsEnumerable","propertyIsEnumerable","objectPropertyIsEnumerable","f","V","createPropertyDescriptor","bitmap","classofRaw","indexedObject","requireObjectCoercible","TypeError","toIndexedObject","toPrimitive","input","PREFERRED_STRING","argument","has","document$1","EXISTS","documentCreateElement","ie8DomDefine","$getOwnPropertyDescriptor","objectGetOwnPropertyDescriptor","O","P","anObject","$defineProperty","objectDefineProperty","Attributes","createNonEnumerableProperty","setGlobal","SHARED","sharedStore","functionToString","inspectSource","has$1","WeakMap","nativeWeakMap","shared","copyright","postfix","uid","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap$1","store$1","wmget","wmhas","wmset","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","redefine","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","noTargetGet","aFunction","variable","getBuiltIn","toInteger","toLength","min$1","createMethod","IS_INCLUDES","$this","fromIndex","integer","toAbsoluteIndex","includes","objectKeysInternal","names","enumBugKeys","hiddenKeys$1","objectGetOwnPropertyNames","getOwnPropertyNames","objectGetOwnPropertySymbols","ownKeys$1","copyConstructorProperties","replacement","isForced","feature","detection","POLYFILL","NATIVE","isForced_1","getOwnPropertyDescriptor$1","functionBindContext","aFunction$1","arg","engineUserAgent","versions","v8","activeXDocument","engineV8Version","nativeSymbol","sham","useSymbolAsUid","WellKnownSymbolsStore","Symbol$1","createWellKnownSymbol","withoutSetter","wellKnownSymbol","SPECIES","arraySpeciesCreate","originalArray","C","createMethod$1","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","callbackfn","specificCreate","boundFunction","arrayIteration","every","findIndex","filterOut","objectKeys","objectDefineProperties","Properties","html","IE_PROTO","EmptyConstructor","scriptTag","content","LT","_NullProtoObject","domain","iframeDocument","iframe","write","close","parentWindow","NullProtoObjectViaActiveX","contentWindow","F","objectCreate","UNSCOPABLES","ArrayPrototype","_class2","_temp","$find","FIND","SKIPS_HOLES","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","_export","ReactTooltip","hide","rebuild","globalRebuild","mount","unbindListener","bindListener","globalShow","hasTarget","globalHide","staticMethods","bindWindowEvents","resizeHide","onWindowResize","unbindWindowEvents","windowListener","ele","customBindListener","_this$state","eventOff","dataEvent","customListener","customUnbindListener","_this$state2","isBodyMode","bodyMode","bindBodyListener","possibleCustomEvents","possibleCustomEventsOff","customEvents","customEventsOff","unbindBodyListener","listeners","bodyModeListeners","_event","mouseover","mousemove","updateTooltip","mouseout","targetEventOff","_event2","_event3","_React$Component","_classCallCheck","extraClass","delayHide","delayShow","currentEvent","ariaProps","isEmptyTip","disable","originTooltip","isMultiline","delayShowLoop","delayHideLoop","delayReshow","intervalUpdateContent","subClass","superClass","_inherits","any","bool","insecure","delayUpdate","globalEventOff","afterShow","func","afterHide","overridePosition","scrollHide","clickable","methodArray","_this2","_this$props","injectStyles","clearTimer","removeScrollListener","tooltipRef","domRoot","head","matches","msMatchesSelector","mozMatchesSelector","escaped","shadowRoot","querySelectorAll","_this3","_this$props2","unbindBasicListener","isCaptureMode","bindRemovalTracker","_this4","_this$props3","unbindRemovalTracker","_this$props4","placeholder","isGlobalCall","_this$props5","switchToSolid","FocusEvent","reshowDelay","updateState","setState","addScrollListener","setInterval","_getContent","updatePosition","_this5","getTooltipContent","eventTarget","mouseOnToolTip","delayTime","isInvisible","_this6","isScroll","isMyElement","resetState","isVisible","listenForTooltipExit","removeListenerForTooltipExit","hideTooltipOnScroll","_this7","clearInterval","_this8","Boolean","_this9","_this$state3","tooltipClass","hasCustomColors","Wrapper","supportedWrappers","defaultProps","wrapperClassName","htmlContent","ref","_ref","dangerouslySetInnerHTML","__html","_ref2","nextProps","prevState","newAriaProps","Component","MutationObserver","WebKitMutationObserver","MozMutationObserver","observer","mutations","m1","mutation","m2","removedNodes","childList","subtree","removalTracker","disconnect","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","webpackPolyfill","deprecate","paths","propIsEnumerable","test1","test2","fromCharCode","test3","letter","shouldUseNative","isOldIE","all","atob","getTarget","styleTarget","HTMLIFrameElement","contentDocument","stylesInDom","getIndexByIdentifier","modulesToDom","list","idCountMap","identifiers","base","count","css","media","sourceMap","references","updater","addStyle","insertStyleElement","nonce","insert","textStore","replaceText","applyToSingletonTag","styleSheet","cssNode","createTextNode","insertBefore","applyToTag","btoa","unescape","encodeURIComponent","singleton","singletonCounter","update","styleIndex","removeStyleElement","newObj","lastIdentifiers","newList","newLastIdentifiers","_index","useSourceMap","cssMapping","sourceMapping","base64","sourceURLs","sources","sourceRoot","cssWithMappingToString","mediaQuery","dedupe","alreadyImportedModules","encode","params","paramsSerializer","serializedParams","toISOString","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","headers","adapter","defaults","transformRequest","transformResponse","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","common","settle","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","Promise","resolve","reject","requestData","requestHeaders","auth","username","password","Authorization","fullPath","baseURL","responseURL","responseHeaders","getAllResponseHeaders","response","responseType","statusText","onabort","ontimeout","timeoutErrorMessage","cookies","xsrfValue","withCredentials","read","onDownloadProgress","onUploadProgress","upload","cancelToken","promise","then","cancel","enhanceError","message","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","axiosKeys","otherKeys","Cancel","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","done","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","iter","skipTempReset","stop","rootRecord","rval","exception","handle","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","for","z","A","B","D","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","E","refs","G","H","isReactComponent","forceUpdate","I","isPureReactComponent","J","K","L","__self","__source","$$typeof","_owner","Q","R","keyPrefix","S","T","U","escape","W","aa","X","N","Y","Z","ba","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","Children","only","Fragment","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","cloneElement","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createFactory","createRef","forwardRef","isValidElement","lazy","_ctor","_status","_result","compare","useCallback","useContext","useDebugValue","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","onError","ea","fa","ha","ia","ja","la","ma","na","oa","ka","pa","qa","ra","sa","extractEvents","eventTypes","phasedRegistrationNames","registrationName","va","wa","dependencies","xa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ta","acceptsBooleans","Sa","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","Ua","Va","xlinkHref","Wa","Xa","Ra","Ya","Za","$a","ab","bb","db","eb","fb","gb","hb","ib","jb","kb","lb","nb","pb","qb","tag","_debugOwner","_debugSource","fileName","lineNumber","return","rb","sb","xb","_valueTracker","getValue","setValue","stopTracking","yb","checked","zb","defaultChecked","defaultValue","_wrapperState","initialChecked","Ab","initialValue","controlled","Bb","Cb","Db","Eb","activeElement","Gb","Fb","Hb","defaultSelected","disabled","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","namespaceURI","innerHTML","MSApp","execUnsafeLocalFunction","Rb","lastChild","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","animation","transition","Xb","Yb","Zb","$b","ac","bc","Map","cc","alternate","effectTag","ec","memoizedState","dehydrated","fc","hc","child","sibling","gc","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","release","mc","nc","srcElement","correspondingUseElement","oc","pc","qc","topLevelType","nativeEvent","targetInst","ancestors","rc","eventSystemFlags","sc","containerInfo","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","delete","Mc","Nc","Pc","unstable_runWithPriority","priority","hydrate","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","Oc","jd","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","order","orphans","tabSize","widows","zIndex","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","kd","ld","md","setProperty","nd","menuitem","area","col","embed","hr","keygen","link","meta","track","wbr","od","pd","is","qd","rd","sd","td","ud","vd","nextSibling","wd","compareDocumentPosition","xd","location","href","yd","contentEditable","Bd","Cd","Dd","Ed","Fd","autoFocus","Gd","Hd","Id","Jd","Kd","previousSibling","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","isDefaultPrevented","defaultPrevented","ee","eventPool","fe","destructor","de","getPooled","cancelBubble","persist","eventPhase","bubbles","cancelable","timeStamp","isTrusted","ge","he","ie","je","ke","documentMode","le","me","ne","oe","beforeInput","compositionUpdate","pe","qe","se","ve","locale","which","te","char","ue","we","date","datetime","email","month","range","search","tel","week","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","detachEvent","He","Ie","Je","Ke","Le","Me","_isInputEventSupported","Ne","view","Oe","Alt","Control","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","pageX","pageY","buttons","relatedTarget","toElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","$e","af","bf","cf","df","select","ef","ff","gf","hf","jf","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","kf","lf","animationName","elapsedTime","pseudoElement","mf","nf","of","charCode","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","qf","rf","sf","dataTransfer","tf","targetTouches","uf","vf","deltaX","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","Af","Bf","Cf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","childContextTypes","Df","Ef","Ff","getChildContext","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","observedBits","responders","ug","updateQueue","baseState","baseQueue","pending","effects","vg","wg","suspenseConfig","payload","xg","yg","zg","ca","Ag","Bg","Cg","Dg","Eg","Fg","Jg","_reactInternalFiber","Gg","Hg","Ig","Kg","shouldComponentUpdate","Lg","contextType","Mg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ng","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Og","Pg","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","elementType","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","memoizedProps","revealOrder","ih","responder","jh","kh","lh","mh","nh","oh","ph","qh","rh","queue","uh","vh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","xh","yh","zh","Ah","deps","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","ei","fi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","gi","getDerivedStateFromError","hi","pendingContext","ni","qi","ii","retryTime","ji","fallback","unstable_avoidThisFallback","ki","li","isBackwards","rendering","renderingStartTime","last","tail","tailExpiration","tailMode","mi","ri","si","wasMultiple","multiple","onclick","ti","ui","vi","wi","yi","zi","Ai","stack","Bi","WeakSet","Set","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","Ki","Li","componentWillUnmount","Di","Mi","Ni","Oi","Pi","Qi","Ri","_reactRootContainer","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","fj","gj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","Pj","Xc","Qj","Sj","firstSuspendedTime","rangeCount","wb","activeElementDetached","focusedElem","selectionRange","Tj","createRange","setStart","removeAllRanges","addRange","setEnd","vb","Uj","Vj","Wj","hidden","default","ob","Xj","unstable_observedBits","Zj","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hk","jk","kk","unmount","form","Lj","lk","Events","findFiberByHostInstance","isDisabled","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","rendererPackageName","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","_f","MessageChannel","unstable_forceFrameRate","port2","port1","onmessage","postMessage","sortIndex","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","Axios","mergeConfig","createInstance","defaultConfig","axios","instanceConfig","CancelToken","isCancel","promises","spread","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","getUri","handlers","use","eject","transformData","throwIfCancellationRequested","throwIfRequested","reason","fns","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","nextTick","title","browser","env","argv","once","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","normalizedName","isAxiosError","description","columnNumber","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","originURL","msie","userAgent","urlParsingNode","resolveURL","protocol","hash","hostname","port","pathname","requestURL","expires","secure","cookie","toGMTString","executor","resolvePromise","token","reactIs","REACT_STATICS","getDefaultProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","Fonts","LobsterTwo","Bitteritalic","OleoScript","boldLobsterTwoitalic","Kameron","Niconne","VastShadow","RobotoSlab","boldPlayfairDisplayitalic","LobsterTwoitalic","Play","Graduate","boldCinzel","boldPlayfairDisplay","boldRaleway","boldBitter","boldPTSans","boldPlay","boldPTSansitalic","Ralewayitalic","PTSansitalic","Teko","boldLobsterTwo","boldKameron","boldOleoScript","GreatVibes","PTSans","boldRobotoSlab","Michroma","Bitter","Abel","Monda","Cinzel","boldMonda","boldTeko","boldRalewayitalic","PlayfairDisplayitalic","Raleway","CarterOne","PlayfairDisplay","Audiowide","lato","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","RangeError","encodingOrOffset","allocUnsafe","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","isEncoding","actual","fromString","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","lo","utf16leToBytes","fromByteArray","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","isFinite","_arr","ret","out","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","excluded","sourceKeys","PARAM_REGEXP","TEXT_REGEXP","TOKEN_REGEXP","QESC_REGEXP","QUOTE_REGEXP","TYPE_REGEXP","qstring","ContentType","header","getHeader","getcontenttype","getBase64","getSvgStyle","fontFamiliy","base64Font","callBackend","frontSideSVG","backSideSVG","totalPrice","woo_id","userImages","orginalPics","svg","append","imageFilter","alert","redirect","catch","AddToChart","canvasFonts","setSide","frontCurrent","handleCanvas","workArea","front","fontName","base64font","downloadedFonts","rawStyle","addBorder","hasBackside","checkBackSide","backCurrent","back","selectedCanvas","allFonts","out_frame","allObjectOnCanvas","collect","file","api","locals","___CSS_LOADER_API_IMPORT___","Uint16Array","listing","pre","textarea","suppressContentEditableWarning","suppressHydrationWarning","domNamespace","childIndex","footer","threadID","exhausted","currentSelectValue","previousWasTextNode","makeStaticMarkup","suspenseDepth","contextIndex","contextStack","contextValueStack","clearProviders","pushProvider","popProvider","fallbackFrame","renderDOM","renderToString","renderToStaticMarkup","renderToNodeStream","renderToStaticNodeStream","ReactPropTypesSecret","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","symbol","arrayOf","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","offsetWidth","scrollWidth","stretch","fonts","load","getTime","race","FontFaceObserver","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","num","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","___CSS_LOADER_GET_URL_IMPORT___","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_IMPORT_2___","___CSS_LOADER_URL_IMPORT_3___","___CSS_LOADER_URL_IMPORT_4___","___CSS_LOADER_URL_IMPORT_5___","___CSS_LOADER_URL_IMPORT_6___","___CSS_LOADER_URL_IMPORT_7___","___CSS_LOADER_URL_IMPORT_8___","___CSS_LOADER_URL_IMPORT_9___","___CSS_LOADER_URL_IMPORT_10___","___CSS_LOADER_URL_IMPORT_11___","___CSS_LOADER_URL_IMPORT_12___","___CSS_LOADER_URL_IMPORT_13___","___CSS_LOADER_URL_IMPORT_14___","___CSS_LOADER_URL_IMPORT_15___","___CSS_LOADER_URL_IMPORT_16___","___CSS_LOADER_URL_IMPORT_17___","___CSS_LOADER_URL_IMPORT_18___","___CSS_LOADER_URL_IMPORT_19___","___CSS_LOADER_URL_IMPORT_20___","___CSS_LOADER_URL_IMPORT_21___","___CSS_LOADER_URL_IMPORT_22___","___CSS_LOADER_URL_IMPORT_23___","___CSS_LOADER_URL_IMPORT_24___","___CSS_LOADER_URL_IMPORT_25___","___CSS_LOADER_URL_IMPORT_26___","___CSS_LOADER_URL_IMPORT_27___","___CSS_LOADER_URL_IMPORT_28___","___CSS_LOADER_URL_IMPORT_29___","___CSS_LOADER_URL_IMPORT_30___","___CSS_LOADER_URL_IMPORT_31___","___CSS_LOADER_URL_IMPORT_32___","___CSS_LOADER_URL_IMPORT_33___","___CSS_LOADER_URL_IMPORT_34___","___CSS_LOADER_URL_IMPORT_35___","___CSS_LOADER_URL_IMPORT_36___","___CSS_LOADER_URL_IMPORT_37___","___CSS_LOADER_URL_IMPORT_38___","___CSS_LOADER_URL_IMPORT_39___","___CSS_LOADER_URL_IMPORT_40___","___CSS_LOADER_URL_IMPORT_41___","___CSS_LOADER_URL_IMPORT_42___","___CSS_LOADER_URL_IMPORT_43___","___CSS_LOADER_URL_IMPORT_44___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","___CSS_LOADER_URL_REPLACEMENT_5___","___CSS_LOADER_URL_REPLACEMENT_6___","___CSS_LOADER_URL_REPLACEMENT_7___","___CSS_LOADER_URL_REPLACEMENT_8___","___CSS_LOADER_URL_REPLACEMENT_9___","___CSS_LOADER_URL_REPLACEMENT_10___","___CSS_LOADER_URL_REPLACEMENT_11___","___CSS_LOADER_URL_REPLACEMENT_12___","___CSS_LOADER_URL_REPLACEMENT_13___","___CSS_LOADER_URL_REPLACEMENT_14___","___CSS_LOADER_URL_REPLACEMENT_15___","___CSS_LOADER_URL_REPLACEMENT_16___","___CSS_LOADER_URL_REPLACEMENT_17___","___CSS_LOADER_URL_REPLACEMENT_18___","___CSS_LOADER_URL_REPLACEMENT_19___","___CSS_LOADER_URL_REPLACEMENT_20___","___CSS_LOADER_URL_REPLACEMENT_21___","___CSS_LOADER_URL_REPLACEMENT_22___","___CSS_LOADER_URL_REPLACEMENT_23___","___CSS_LOADER_URL_REPLACEMENT_24___","___CSS_LOADER_URL_REPLACEMENT_25___","___CSS_LOADER_URL_REPLACEMENT_26___","___CSS_LOADER_URL_REPLACEMENT_27___","___CSS_LOADER_URL_REPLACEMENT_28___","___CSS_LOADER_URL_REPLACEMENT_29___","___CSS_LOADER_URL_REPLACEMENT_30___","___CSS_LOADER_URL_REPLACEMENT_31___","___CSS_LOADER_URL_REPLACEMENT_32___","___CSS_LOADER_URL_REPLACEMENT_33___","___CSS_LOADER_URL_REPLACEMENT_34___","___CSS_LOADER_URL_REPLACEMENT_35___","___CSS_LOADER_URL_REPLACEMENT_36___","___CSS_LOADER_URL_REPLACEMENT_37___","___CSS_LOADER_URL_REPLACEMENT_38___","___CSS_LOADER_URL_REPLACEMENT_39___","___CSS_LOADER_URL_REPLACEMENT_40___","___CSS_LOADER_URL_REPLACEMENT_41___","___CSS_LOADER_URL_REPLACEMENT_42___","___CSS_LOADER_URL_REPLACEMENT_43___","___CSS_LOADER_URL_REPLACEMENT_44___","needQuotes","cloneSvg","sourceSvg","isLocal","httpRequest","contentType","getResponseHeader","overrideMimeType","svgCache","requestQueue","queueRequest","loadSvgCached","cacheValue","SVGElement","_loop_1","processRequestQueue","loadSvgUncached","idCounter","injectedElements","ranScripts","xlinkNamespace","evalScripts","renumerateIRIElements","cacheRequests","beforeEach","imgUrl","imgId","imgTitle","imgWidth","imgHeight","mergedClasses","il","jl","__spreadArrays","imgStyle","at","dataAttr","element_1","elements_1","properties_1","currentId_1","newId_1","iriElementsAndProperties_1","linearGradient","radialGradient","elementsLen","referencingElements","referencingElementLen","attrValue","allLinks","links","allLinksLen","getAttributeNS","linksLen","script","scriptType","scripts","scriptsToEval","scriptsLen","innerText","scriptsToEvalLen","styleTags","styleTag","ReactSVG","initialState","hasError","isLoading","_isMounted","refCallback","_proto","renderSVG","Node","beforeInjection","useRequestCache","afterInjection","svgWrapper","_a","_b","_c","afterAll","_d","afterEach","_e","_g","_h","elementsLoaded_1","SVGInjector","removeSVG","prevProps","shallowDiffers","Fallback","Loading","rest","SET_CONTENT","FRONT_CANVAS","BACK_CANVAS","SET_STYLE","SET_SIDE","FRONT_ADD_FIGURE","BACK_ADD_FIGURE","UNDO_FRONT_CANVAS","UNDO_BACK_CANVAS","REDO_BACK_CANVAS","REDO_FRONT_CANVAS","HIDE_CANVAS_BORDER","ORGINAL_PICS","ACCEPT_TERMS","objectFS","objectBS","UNSELECT_GALLERY_CATEGORY","LOAD_GALLERY_CATEGORIES","LOAD_GALLERY_CATEGORY_IMAGES","SET_GALLERY_SEARCH","fetchGalleryCategories","getState","imageOrtext","addEngraving","selectCurrent","ReactReduxContext","createListenerCollection","batch","first","notify","subscribe","isSubscribed","nullListeners","createSubscription","store","parentSub","unsubscribe","handleChangeWrapper","subscription","onStateChange","trySubscribe","addNestedSub","notifyNestedSubs","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","contextValue","previousState","_objectWithoutPropertiesLoose","_excluded","_excluded2","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","updateCount","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","actualChildProps","childPropsFromStoreUpdate","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","forceComponentUpdateDispatch","didUnsubscribe","lastThrownError","checkForUpdates","newChildProps","latestStoreState","initStateUpdates","connectAdvanced","selectorFactory","_ref2$getDisplayName","getDisplayName","_ref2$methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","_ref2$storeKey","storeKey","_ref2$forwardRef","withRef","_ref2$context","connectOptions","WrappedComponent","wrappedComponentName","selectorFactoryOptions","pure","usePureOnlyMemo","ConnectFunction","_useMemo","reactReduxForwardedRef","propsContext","ContextToUse","didStoreComeFromProps","createChildSelector","_useMemo2","overriddenContextValue","_useReducer","previousStateUpdateResult","renderedWrappedComponent","Connect","forwarded","shallowEqual","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","stateOrDispatch","ownProps","mapDispatchToProps","actionCreators","boundActionCreators","_loop","actionCreator","bindActionCreators","mapStateToProps","defaultMergeProps","stateProps","dispatchProps","mergeProps","mergedProps","areMergedPropsEqual","hasRunOnce","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextState","nextOwnProps","nextStateProps","statePropsChanged","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","createConnect","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","_ref$selectorFactory","_ref3","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","newBatch","isMobile","connect","currentFigureReducer","optionsReducer","contentIs","sideIs","undoFront","undoredoReducer","undoBack","redoBack","redoFront","productReducer","showPortraitOverlay","wwlLogo","iconText","iconImage","iconGallery","iconDelete","iconDuplicate","iconToLeft","iconCenterVe","iconToRight","iconToTop","iconCenterHo","iconToButtom","iconRedo","iconUndo","require","withoutBold","withoutItalic","TextOptions","findFontfamilyvalue","nextprops","addFigure","step","textCenter","textRight","textItalic","italic","newfont","textBold","bold","textUnderline","styleReducer","fs","ImageOptions","checkImage","files","URL","createObjectURL","showCanvas","invertColor","userSVG","reader","FileReader","invertedImageUrl","addoriginalPics","readAsText","reInverColor","engColor","React","userAccept","uploadIcon","checkColor","acceptTerms","yes","pics","formatProdErrorMessage","$$observable","observable","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","compose","_len","funcs","createThunkMiddleware","extraArgument","thunk","withExtraArgument","initCurrent","initFrontside","frontEngraving","countFS","initBackside","backEngraving","countBS","initUndoRedo","initOptions","gallery","images","categories","initStyle","rootReducer","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","reducer","assertReducerShape","hasChanged","previousStateForKey","nextStateForKey","combineReducers","canvasBorder","frontsideReducer","backsideReducer","lastAction","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","replaceReducer","nextReducer","outerSubscribe","observeState","createStore","middlewares","_dispatch","middlewareAPI","middleware","applyMiddleware","thunkMiddleware","GalleryOptions","addSVGToProduct","fetch","blob","showPreview","previewContainer","classList","hidePreview","renderImages","tested","keywords","alt","onMouseEnter","onMouseLeave","shouldRenderImages","shouldRenderCategories","setGallerySearch","unselectGalleryCategory","category","categoryId","query","Content","arr2","getCoordinatesForPosition","triggerBounding","ContentBounding","margin","CenterTop","CenterLeft","arrowTop","arrowLeft","popupContent","tooltip","boxShadow","modal","popupArrow","POSITION_TYPES","_React$PureComponent","Popup","setPosition","closePopup","lockScroll","overflow","isOpen","openPopup","onOpen","onClose","resetScroll","timeOut","mouseEnterDelay","mouseLeaveDelay","keepTooltipInside","boundingBox","arrowStyle","helper","HelperEl","TriggerEl","ContentEl","getTooltipBoundary","positions","cords","wrapperBox","bestCoords","contentBox","calculatePosition","ArrowEl","contentStyle","popupContentStyle","childrenElementProps","setContentRef","triggerProps","setTriggerRef","onAsArray","togglePopup","onFocus","addWarperAction","setArrowRef","setHelperRef","_modal","defaultOpen","_trigger","_this$props6","closeOnEscape","repositionOnResize","onEscape","_this$props7","_this$props8","_this$props9","overlayStyle","closeOnDocumentClick","ovStyle","renderTrigger","renderContent","SVGFilter","hex","hexToRgb","rgbExtract","FrontSide","updateTextOptions","frontcanvas","updateHistory","canvasHistory","undoStatus","redoStatus","jsonData","canvasAsJson","currentStateIndex","indexToBeInserted","elementsToKeep","undo","undoFinishedStatus","outFrameIndex","redo","redoFinishedStatus","addEng","objecttype","myImg","frontImage","countObjectFS","undoFrontSide","redoFrontSide","front_image","undoFun","BackSide","backcanvas","back_image","countObjectBS","undoBackSide","redoBackSide","Spinner","logo","Engraving","price","front_side_price","back_side_price","euro","Intl","NumberFormat","currency","workAreaWidth","workAreaHeight","colSpan","rel","authtoken","hideCanvasBoeder","ErrorBoundary","WeLoveLaser_Logo","PopUp","App","showPopup","toggleOffPopup","json_data","engraving_color","work_area","ReactDOM","getRandomValues","crypto","msCrypto","rnds8","rng","byteToHex","bth","rnds"],"mappings":"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","file":"js/index-241b45eb3f5d23b5110f.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 126);\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is'); // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n\n\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}","'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar bind = require('./helpers/bind');\n/*global toString:true*/\n// utils is a library of generic helper functions non-specific to axios\n\n\nvar toString = Object.prototype.toString;\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\n\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\n\n\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\n\n\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\n\n\nfunction isFormData(val) {\n return typeof FormData !== 'undefined' && val instanceof FormData;\n}\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBufferView(val) {\n var result;\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && val.buffer instanceof ArrayBuffer;\n }\n\n return result;\n}\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\n\n\nfunction isString(val) {\n return typeof val === 'string';\n}\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\n\n\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\n\n\nfunction isObject(val) {\n return val !== null && _typeof(val) === 'object';\n}\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\n\n\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\n\n\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\n\n\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\n\n\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\n\n\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\n\n\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\n\n\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\n\n\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\n\n\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n } // Force an array if not already something iterable\n\n\n if (_typeof(obj) !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction\n /* obj1, obj2, obj3, ... */\nmerge() {\n var result = {};\n\n function assignValue(val, key) {\n if (_typeof(result[key]) === 'object' && _typeof(val) === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction\n /* obj1, obj2, obj3, ... */\ndeepMerge() {\n var result = {};\n\n function assignValue(val, key) {\n if (_typeof(result[key]) === 'object' && _typeof(val) === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (_typeof(val) === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\n\n\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/* build: `node build.js modules=ALL exclude=gestures,accessors requirejs minifier=uglifyjs` */\n\n/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */\nvar fabric = fabric || {\n version: '3.6.3'\n};\n\nif (typeof exports !== 'undefined') {\n exports.fabric = fabric;\n}\n/* _AMD_START_ */\nelse if (typeof define === 'function' && define.amd) {\n define([], function () {\n return fabric;\n });\n}\n/* _AMD_END_ */\n\n\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n if (document instanceof (typeof HTMLDocument !== 'undefined' ? HTMLDocument : Document)) {\n fabric.document = document;\n } else {\n fabric.document = document.implementation.createHTMLDocument('');\n }\n\n fabric.window = window;\n} else {\n // assume we're running under node.js when document/window are not present\n var jsdom = require('jsdom');\n\n var virtualWindow = new jsdom.JSDOM(decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'), {\n features: {\n FetchExternalResources: ['img']\n },\n resources: 'usable'\n }).window;\n fabric.document = virtualWindow.document;\n fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;\n fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;\n fabric.window = virtualWindow;\n DOMParser = fabric.window.DOMParser;\n}\n/**\n * True when in environment that supports touch events\n * @type boolean\n */\n\n\nfabric.isTouchSupported = 'ontouchstart' in fabric.window || 'ontouchstart' in fabric.document || fabric.window && fabric.window.navigator && fabric.window.navigator.maxTouchPoints > 0;\n/**\n * True when in environment that's probably Node.js\n * @type boolean\n */\n\nfabric.isLikelyNode = typeof Buffer !== 'undefined' && typeof window === 'undefined';\n/* _FROM_SVG_START_ */\n\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\n\nfabric.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', 'id', 'paint-order', 'vector-effect', 'instantiated_by_use', 'clip-path'];\n/* _FROM_SVG_END_ */\n\n/**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\n\nfabric.DPI = 96;\nfabric.reNum = '(?:[-+]?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[eE][-+]?\\\\d+)?)';\nfabric.rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/ig;\nfabric.reNonWord = /[ \\n\\.,;!\\?\\-]/;\nfabric.fontPaths = {};\nfabric.iMatrix = [1, 0, 0, 1, 0, 0];\nfabric.svgNS = 'http://www.w3.org/2000/svg';\n/**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\n\nfabric.perfLimitSizeTotal = 2097152;\n/**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\n\nfabric.maxCacheSideLimit = 4096;\n/**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\n\nfabric.minCacheSideLimit = 256;\n/**\n * Cache Object for widths of chars in text rendering.\n */\n\nfabric.charWidthsCache = {};\n/**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n * @since 2.0.0\n * @type Number\n * @default\n */\n\nfabric.textureSize = 2048;\n/**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n */\n\nfabric.disableStyleCopyPaste = false;\n/**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\n\nfabric.enableGLFiltering = true;\n/**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\n\nfabric.devicePixelRatio = fabric.window.devicePixelRatio || fabric.window.webkitDevicePixelRatio || fabric.window.mozDevicePixelRatio || 1;\n/**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\n\nfabric.browserShadowBlurConstant = 1;\n/**\n * This object contains the result of arc to beizer conversion for faster retrieving if the same arc needs to be converted again.\n * It was an internal variable, is accessible since version 2.3.4\n */\n\nfabric.arcToSegmentsCache = {};\n/**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\n\nfabric.boundsOfCurveCache = {};\n/**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * @default true\n */\n\nfabric.cachesBoundsOfCurve = true;\n/**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\n\nfabric.forceGLPutImageData = false;\n\nfabric.initFilterBackend = function () {\n if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) {\n console.log('max texture size: ' + fabric.maxTextureSize);\n return new fabric.WebglFilterBackend({\n tileSize: fabric.textureSize\n });\n } else if (fabric.Canvas2dFilterBackend) {\n return new fabric.Canvas2dFilterBackend();\n }\n};\n\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // ensure globality even if entire library were function wrapped (as in Meteor.js packaging system)\n window.fabric = fabric;\n}\n\n(function () {\n /**\n * @private\n * @param {String} eventName\n * @param {Function} handler\n */\n function _removeEventListener(eventName, handler) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n\n var eventListener = this.__eventListeners[eventName];\n\n if (handler) {\n eventListener[eventListener.indexOf(handler)] = false;\n } else {\n fabric.util.array.fill(eventListener, false);\n }\n }\n /**\n * Observes specified event\n * @deprecated `observe` deprecated since 0.8.34 (use `on` instead)\n * @memberOf fabric.Observable\n * @alias on\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Self} thisArg\n * @chainable\n */\n\n\n function observe(eventName, handler) {\n if (!this.__eventListeners) {\n this.__eventListeners = {};\n } // one object with key/value pairs was passed\n\n\n if (arguments.length === 1) {\n for (var prop in eventName) {\n this.on(prop, eventName[prop]);\n }\n } else {\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n\n this.__eventListeners[eventName].push(handler);\n }\n\n return this;\n }\n /**\n * Stops event observing for a particular event handler. Calling this method\n * without arguments removes all handlers for all events\n * @deprecated `stopObserving` deprecated since 0.8.34 (use `off` instead)\n * @memberOf fabric.Observable\n * @alias off\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function to be deleted from EventListeners\n * @return {Self} thisArg\n * @chainable\n */\n\n\n function stopObserving(eventName, handler) {\n if (!this.__eventListeners) {\n return this;\n } // remove all key/value pairs (event name -> event handler)\n\n\n if (arguments.length === 0) {\n for (eventName in this.__eventListeners) {\n _removeEventListener.call(this, eventName);\n }\n } // one object with key/value pairs was passed\n else if (arguments.length === 1 && _typeof(arguments[0]) === 'object') {\n for (var prop in eventName) {\n _removeEventListener.call(this, prop, eventName[prop]);\n }\n } else {\n _removeEventListener.call(this, eventName, handler);\n }\n\n return this;\n }\n /**\n * Fires event with an optional options object\n * @deprecated `fire` deprecated since 1.0.7 (use `trigger` instead)\n * @memberOf fabric.Observable\n * @alias trigger\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n * @return {Self} thisArg\n * @chainable\n */\n\n\n function fire(eventName, options) {\n if (!this.__eventListeners) {\n return this;\n }\n\n var listenersForEvent = this.__eventListeners[eventName];\n\n if (!listenersForEvent) {\n return this;\n }\n\n for (var i = 0, len = listenersForEvent.length; i < len; i++) {\n listenersForEvent[i] && listenersForEvent[i].call(this, options || {});\n }\n\n this.__eventListeners[eventName] = listenersForEvent.filter(function (value) {\n return value !== false;\n });\n return this;\n }\n /**\n * @namespace fabric.Observable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\n\n\n fabric.Observable = {\n observe: observe,\n stopObserving: stopObserving,\n fire: fire,\n on: observe,\n off: stopObserving,\n trigger: fire\n };\n})();\n/**\n * @namespace fabric.Collection\n */\n\n\nfabric.Collection = {\n _objects: [],\n\n /**\n * Adds objects to collection, Canvas or Group, then renders canvas\n * (if `renderOnAddRemove` is not `false`).\n * in case of Group no changes to bounding box are made.\n * Objects should be instances of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the add method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n add: function add() {\n this._objects.push.apply(this._objects, arguments);\n\n if (this._onObjectAdded) {\n for (var i = 0, length = arguments.length; i < length; i++) {\n this._onObjectAdded(arguments[i]);\n }\n }\n\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Inserts an object into collection at specified index, then renders canvas (if `renderOnAddRemove` is not `false`)\n * An object should be an instance of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the insertAt method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {Object} object Object to insert\n * @param {Number} index Index to insert object at\n * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs\n * @return {Self} thisArg\n * @chainable\n */\n insertAt: function insertAt(object, index, nonSplicing) {\n var objects = this._objects;\n\n if (nonSplicing) {\n objects[index] = object;\n } else {\n objects.splice(index, 0, object);\n }\n\n this._onObjectAdded && this._onObjectAdded(object);\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n remove: function remove() {\n var objects = this._objects,\n index,\n somethingRemoved = false;\n\n for (var i = 0, length = arguments.length; i < length; i++) {\n index = objects.indexOf(arguments[i]); // only call onObjectRemoved if an object was actually removed\n\n if (index !== -1) {\n somethingRemoved = true;\n objects.splice(index, 1);\n this._onObjectRemoved && this._onObjectRemoved(arguments[i]);\n }\n }\n\n this.renderOnAddRemove && somethingRemoved && this.requestRenderAll();\n return this;\n },\n\n /**\n * Executes given function for each object in this group\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n * Callback is invoked in a context of Global Object (e.g. `window`)\n * when no `context` argument is given\n *\n * @param {Object} context Context (aka thisObject)\n * @return {Self} thisArg\n * @chainable\n */\n forEachObject: function forEachObject(callback, context) {\n var objects = this.getObjects();\n\n for (var i = 0, len = objects.length; i < len; i++) {\n callback.call(context, objects[i], i, objects);\n }\n\n return this;\n },\n\n /**\n * Returns an array of children objects of this instance\n * Type parameter introduced in 1.3.10\n * since 2.3.5 this method return always a COPY of the array;\n * @param {String} [type] When specified, only objects of this type are returned\n * @return {Array}\n */\n getObjects: function getObjects(type) {\n if (typeof type === 'undefined') {\n return this._objects.concat();\n }\n\n return this._objects.filter(function (o) {\n return o.type === type;\n });\n },\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Self} thisArg\n */\n item: function item(index) {\n return this._objects[index];\n },\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty: function isEmpty() {\n return this._objects.length === 0;\n },\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size: function size() {\n return this._objects.length;\n },\n\n /**\n * Returns true if collection contains an object\n * @param {Object} object Object to check against\n * @return {Boolean} `true` if collection contains an object\n */\n contains: function contains(object) {\n return this._objects.indexOf(object) > -1;\n },\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity: function complexity() {\n return this._objects.reduce(function (memo, current) {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n};\n/**\n * @namespace fabric.CommonMethods\n */\n\nfabric.CommonMethods = {\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n _setOptions: function _setOptions(options) {\n for (var prop in options) {\n this.set(prop, options[prop]);\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Gradient to\n */\n _initGradient: function _initGradient(filler, property) {\n if (filler && filler.colorStops && !(filler instanceof fabric.Gradient)) {\n this.set(property, new fabric.Gradient(filler));\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Pattern to\n * @param {Function} [callback] callback to invoke after pattern load\n */\n _initPattern: function _initPattern(filler, property, callback) {\n if (filler && filler.source && !(filler instanceof fabric.Pattern)) {\n this.set(property, new fabric.Pattern(filler, callback));\n } else {\n callback && callback();\n }\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initClipping: function _initClipping(options) {\n if (!options.clipTo || typeof options.clipTo !== 'string') {\n return;\n }\n\n var functionBody = fabric.util.getFunctionBody(options.clipTo);\n\n if (typeof functionBody !== 'undefined') {\n this.clipTo = new Function('ctx', functionBody);\n }\n },\n\n /**\n * @private\n */\n _setObject: function _setObject(obj) {\n for (var prop in obj) {\n this._set(prop, obj[prop]);\n }\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function set(key, value) {\n if (_typeof(key) === 'object') {\n this._setObject(key);\n } else {\n if (typeof value === 'function' && key !== 'clipTo') {\n this._set(key, value(this.get(key)));\n } else {\n this._set(key, value);\n }\n }\n\n return this;\n },\n _set: function _set(key, value) {\n this[key] = value;\n },\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n * @return {fabric.Object} thisArg\n * @chainable\n */\n toggle: function toggle(property) {\n var value = this.get(property);\n\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n\n return this;\n },\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get: function get(property) {\n return this[property];\n }\n};\n\n(function (global) {\n var sqrt = Math.sqrt,\n atan2 = Math.atan2,\n pow = Math.pow,\n PiBy180 = Math.PI / 180,\n PiBy2 = Math.PI / 2;\n /**\n * @namespace fabric.util\n */\n\n fabric.util = {\n /**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n cos: function cos(angle) {\n if (angle === 0) {\n return 1;\n }\n\n if (angle < 0) {\n // cos(a) = cos(-a)\n angle = -angle;\n }\n\n var angleSlice = angle / PiBy2;\n\n switch (angleSlice) {\n case 1:\n case 3:\n return 0;\n\n case 2:\n return -1;\n }\n\n return Math.cos(angle);\n },\n\n /**\n * Calculate the sin of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n sin: function sin(angle) {\n if (angle === 0) {\n return 0;\n }\n\n var angleSlice = angle / PiBy2,\n sign = 1;\n\n if (angle < 0) {\n // sin(-a) = -sin(a)\n sign = -1;\n }\n\n switch (angleSlice) {\n case 1:\n return sign;\n\n case 2:\n return 0;\n\n case 3:\n return -sign;\n }\n\n return Math.sin(angle);\n },\n\n /**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @static\n * @memberOf fabric.util\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\n removeFromArray: function removeFromArray(array, value) {\n var idx = array.indexOf(value);\n\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n\n return array;\n },\n\n /**\n * Returns random number between 2 specified ones.\n * @static\n * @memberOf fabric.util\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\n getRandomInt: function getRandomInt(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n /**\n * Transforms degrees to radians.\n * @static\n * @memberOf fabric.util\n * @param {Number} degrees value in degrees\n * @return {Number} value in radians\n */\n degreesToRadians: function degreesToRadians(degrees) {\n return degrees * PiBy180;\n },\n\n /**\n * Transforms radians to degrees.\n * @static\n * @memberOf fabric.util\n * @param {Number} radians value in radians\n * @return {Number} value in degrees\n */\n radiansToDegrees: function radiansToDegrees(radians) {\n return radians / PiBy180;\n },\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} point The point to rotate\n * @param {fabric.Point} origin The origin of the rotation\n * @param {Number} radians The radians of the angle for the rotation\n * @return {fabric.Point} The new rotated point\n */\n rotatePoint: function rotatePoint(point, origin, radians) {\n point.subtractEquals(origin);\n var v = fabric.util.rotateVector(point, radians);\n return new fabric.Point(v.x, v.y).addEquals(origin);\n },\n\n /**\n * Rotates `vector` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {Object} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Object} The new rotated point\n */\n rotateVector: function rotateVector(vector, radians) {\n var sin = fabric.util.sin(radians),\n cos = fabric.util.cos(radians),\n rx = vector.x * cos - vector.y * sin,\n ry = vector.x * sin + vector.y * cos;\n return {\n x: rx,\n y: ry\n };\n },\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {fabric.Point} The transformed point\n */\n transformPoint: function transformPoint(p, t, ignoreOffset) {\n if (ignoreOffset) {\n return new fabric.Point(t[0] * p.x + t[2] * p.y, t[1] * p.x + t[3] * p.y);\n }\n\n return new fabric.Point(t[0] * p.x + t[2] * p.y + t[4], t[1] * p.x + t[3] * p.y + t[5]);\n },\n\n /**\n * Returns coordinates of points's bounding rectangle (left, top, width, height)\n * @param {Array} points 4 points array\n * @param {Array} [transform] an array of 6 numbers representing a 2x3 transform matrix\n * @return {Object} Object with left, top, width, height properties\n */\n makeBoundingBoxFromPoints: function makeBoundingBoxFromPoints(points, transform) {\n if (transform) {\n for (var i = 0; i < points.length; i++) {\n points[i] = fabric.util.transformPoint(points[i], transform);\n }\n }\n\n var xPoints = [points[0].x, points[1].x, points[2].x, points[3].x],\n minX = fabric.util.array.min(xPoints),\n maxX = fabric.util.array.max(xPoints),\n width = maxX - minX,\n yPoints = [points[0].y, points[1].y, points[2].y, points[3].y],\n minY = fabric.util.array.min(yPoints),\n maxY = fabric.util.array.max(yPoints),\n height = maxY - minY;\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Invert transformation t\n * @static\n * @memberOf fabric.util\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\n invertTransform: function invertTransform(t) {\n var a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0]],\n o = fabric.util.transformPoint({\n x: t[4],\n y: t[5]\n }, r, true);\n r[4] = -o.x;\n r[5] = -o.y;\n return r;\n },\n\n /**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @static\n * @memberOf fabric.util\n * @param {Number|String} number number to operate on\n * @param {Number} fractionDigits number of fraction digits to \"leave\"\n * @return {Number}\n */\n toFixed: function toFixed(number, fractionDigits) {\n return parseFloat(Number(number).toFixed(fractionDigits));\n },\n\n /**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {Number|String} value number to operate on\n * @param {Number} fontSize\n * @return {Number|String}\n */\n parseUnit: function parseUnit(value, fontSize) {\n var unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n\n if (!fontSize) {\n fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n\n switch (unit[0]) {\n case 'mm':\n return number * fabric.DPI / 25.4;\n\n case 'cm':\n return number * fabric.DPI / 2.54;\n\n case 'in':\n return number * fabric.DPI;\n\n case 'pt':\n return number * fabric.DPI / 72;\n // or * 4 / 3\n\n case 'pc':\n return number * fabric.DPI / 72 * 12;\n // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n },\n\n /**\n * Function which always returns `false`.\n * @static\n * @memberOf fabric.util\n * @return {Boolean}\n */\n falseFunction: function falseFunction() {\n return false;\n },\n\n /**\n * Returns klass \"Class\" object of given namespace\n * @memberOf fabric.util\n * @param {String} type Type of object (eg. 'circle')\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @return {Object} klass \"Class\"\n */\n getKlass: function getKlass(type, namespace) {\n // capitalize first letter only\n type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1));\n return fabric.util.resolveNamespace(namespace)[type];\n },\n\n /**\n * Returns array of attributes for given svg that fabric parses\n * @memberOf fabric.util\n * @param {String} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\n getSvgAttributes: function getSvgAttributes(type) {\n var attributes = ['instantiated_by_use', 'style', 'id', 'class'];\n\n switch (type) {\n case 'linearGradient':\n attributes = attributes.concat(['x1', 'y1', 'x2', 'y2', 'gradientUnits', 'gradientTransform']);\n break;\n\n case 'radialGradient':\n attributes = attributes.concat(['gradientUnits', 'gradientTransform', 'cx', 'cy', 'r', 'fx', 'fy', 'fr']);\n break;\n\n case 'stop':\n attributes = attributes.concat(['offset', 'stop-color', 'stop-opacity']);\n break;\n }\n\n return attributes;\n },\n\n /**\n * Returns object of given namespace\n * @memberOf fabric.util\n * @param {String} namespace Namespace string e.g. 'fabric.Image.filter' or 'fabric'\n * @return {Object} Object for given namespace (default fabric)\n */\n resolveNamespace: function resolveNamespace(namespace) {\n if (!namespace) {\n return fabric;\n }\n\n var parts = namespace.split('.'),\n len = parts.length,\n i,\n obj = global || fabric.window;\n\n for (i = 0; i < len; ++i) {\n obj = obj[parts[i]];\n }\n\n return obj;\n },\n\n /**\n * Loads image element from given url and passes it to a callback\n * @memberOf fabric.util\n * @param {String} url URL representing an image\n * @param {Function} callback Callback; invoked with loaded image\n * @param {*} [context] Context to invoke callback in\n * @param {Object} [crossOrigin] crossOrigin value to set image element to\n */\n loadImage: function loadImage(url, callback, context, crossOrigin) {\n if (!url) {\n callback && callback.call(context, url);\n return;\n }\n\n var img = fabric.util.createImage();\n /** @ignore */\n\n var onLoadCallback = function onLoadCallback() {\n callback && callback.call(context, img);\n img = img.onload = img.onerror = null;\n };\n\n img.onload = onLoadCallback;\n /** @ignore */\n\n img.onerror = function () {\n fabric.log('Error loading ' + img.src);\n callback && callback.call(context, null, true);\n img = img.onload = img.onerror = null;\n }; // data-urls appear to be buggy with crossOrigin\n // https://github.com/kangax/fabric.js/commit/d0abb90f1cd5c5ef9d2a94d3fb21a22330da3e0a#commitcomment-4513767\n // see https://code.google.com/p/chromium/issues/detail?id=315152\n // https://bugzilla.mozilla.org/show_bug.cgi?id=935069\n\n\n if (url.indexOf('data') !== 0 && crossOrigin) {\n img.crossOrigin = crossOrigin;\n } // IE10 / IE11-Fix: SVG contents from data: URI\n // will only be available if the IMG is present\n // in the DOM (and visible)\n\n\n if (url.substring(0, 14) === 'data:image/svg') {\n img.onload = null;\n fabric.util.loadImageInDom(img, onLoadCallback);\n }\n\n img.src = url;\n },\n\n /**\n * Attaches SVG image with data: URL to the dom\n * @memberOf fabric.util\n * @param {Object} img Image object with data:image/svg src\n * @param {Function} callback Callback; invoked with loaded image\n * @return {Object} DOM element (div containing the SVG image)\n */\n loadImageInDom: function loadImageInDom(img, onLoadCallback) {\n var div = fabric.document.createElement('div');\n div.style.width = div.style.height = '1px';\n div.style.left = div.style.top = '-100%';\n div.style.position = 'absolute';\n div.appendChild(img);\n fabric.document.querySelector('body').appendChild(div);\n /**\n * Wrap in function to:\n * 1. Call existing callback\n * 2. Cleanup DOM\n */\n\n img.onload = function () {\n onLoadCallback();\n div.parentNode.removeChild(div);\n div = null;\n };\n },\n\n /**\n * Creates corresponding fabric instances from their object representations\n * @static\n * @memberOf fabric.util\n * @param {Array} objects Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @param {Function} reviver Method for further parsing of object elements,\n * called after each fabric object created.\n */\n enlivenObjects: function enlivenObjects(objects, callback, namespace, reviver) {\n objects = objects || [];\n var enlivenedObjects = [],\n numLoadedObjects = 0,\n numTotalObjects = objects.length;\n\n function onLoaded() {\n if (++numLoadedObjects === numTotalObjects) {\n callback && callback(enlivenedObjects.filter(function (obj) {\n // filter out undefined objects (objects that gave error)\n return obj;\n }));\n }\n }\n\n if (!numTotalObjects) {\n callback && callback(enlivenedObjects);\n return;\n }\n\n objects.forEach(function (o, index) {\n // if sparse array\n if (!o || !o.type) {\n onLoaded();\n return;\n }\n\n var klass = fabric.util.getKlass(o.type, namespace);\n klass.fromObject(o, function (obj, error) {\n error || (enlivenedObjects[index] = obj);\n reviver && reviver(o, obj, error);\n onLoaded();\n });\n });\n },\n\n /**\n * Create and wait for loading of patterns\n * @static\n * @memberOf fabric.util\n * @param {Array} patterns Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * called after each fabric object created.\n */\n enlivenPatterns: function enlivenPatterns(patterns, callback) {\n patterns = patterns || [];\n\n function onLoaded() {\n if (++numLoadedPatterns === numPatterns) {\n callback && callback(enlivenedPatterns);\n }\n }\n\n var enlivenedPatterns = [],\n numLoadedPatterns = 0,\n numPatterns = patterns.length;\n\n if (!numPatterns) {\n callback && callback(enlivenedPatterns);\n return;\n }\n\n patterns.forEach(function (p, index) {\n if (p && p.source) {\n new fabric.Pattern(p, function (pattern) {\n enlivenedPatterns[index] = pattern;\n onLoaded();\n });\n } else {\n enlivenedPatterns[index] = p;\n onLoaded();\n }\n });\n },\n\n /**\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @memberOf fabric.util\n * @param {Array} elements SVG elements to group\n * @param {Object} [options] Options object\n * @param {String} path Value to set sourcePath to\n * @return {fabric.Object|fabric.Group}\n */\n groupSVGElements: function groupSVGElements(elements, options, path) {\n var object;\n\n if (elements && elements.length === 1) {\n return elements[0];\n }\n\n if (options) {\n if (options.width && options.height) {\n options.centerPoint = {\n x: options.width / 2,\n y: options.height / 2\n };\n } else {\n delete options.width;\n delete options.height;\n }\n }\n\n object = new fabric.Group(elements, options);\n\n if (typeof path !== 'undefined') {\n object.sourcePath = path;\n }\n\n return object;\n },\n\n /**\n * Populates an object with properties of another object\n * @static\n * @memberOf fabric.util\n * @param {Object} source Source object\n * @param {Object} destination Destination object\n * @return {Array} properties Properties names to include\n */\n populateWithProperties: function populateWithProperties(source, destination, properties) {\n if (properties && Object.prototype.toString.call(properties) === '[object Array]') {\n for (var i = 0, len = properties.length; i < len; i++) {\n if (properties[i] in source) {\n destination[properties[i]] = source[properties[i]];\n }\n }\n }\n },\n\n /**\n * Draws a dashed line between two points\n *\n * This method is used to draw dashed line around selection area.\n * See dotted stroke in canvas\n *\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x start x coordinate\n * @param {Number} y start y coordinate\n * @param {Number} x2 end x coordinate\n * @param {Number} y2 end y coordinate\n * @param {Array} da dash array pattern\n */\n drawDashedLine: function drawDashedLine(ctx, x, y, x2, y2, da) {\n var dx = x2 - x,\n dy = y2 - y,\n len = sqrt(dx * dx + dy * dy),\n rot = atan2(dy, dx),\n dc = da.length,\n di = 0,\n draw = true;\n ctx.save();\n ctx.translate(x, y);\n ctx.moveTo(0, 0);\n ctx.rotate(rot);\n x = 0;\n\n while (len > x) {\n x += da[di++ % dc];\n\n if (x > len) {\n x = len;\n }\n\n ctx[draw ? 'lineTo' : 'moveTo'](x, 0);\n draw = !draw;\n }\n\n ctx.restore();\n },\n\n /**\n * Creates canvas element\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n createCanvasElement: function createCanvasElement() {\n return fabric.document.createElement('canvas');\n },\n\n /**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n copyCanvasElement: function copyCanvasElement(canvas) {\n var newCanvas = fabric.util.createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n newCanvas.getContext('2d').drawImage(canvas, 0, 0);\n return newCanvas;\n },\n\n /**\n * since 2.6.0 moved from canvas instance to utility.\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @static\n * @memberOf fabric.util\n * @return {String} data url\n */\n toDataURL: function toDataURL(canvasEl, format, quality) {\n return canvasEl.toDataURL('image/' + format, quality);\n },\n\n /**\n * Creates image element (works on client and node)\n * @static\n * @memberOf fabric.util\n * @return {HTMLImageElement} HTML image element\n */\n createImage: function createImage() {\n return fabric.document.createElement('img');\n },\n\n /**\n * @static\n * @memberOf fabric.util\n * @deprecated since 2.0.0\n * @param {fabric.Object} receiver Object implementing `clipTo` method\n * @param {CanvasRenderingContext2D} ctx Context to clip\n */\n clipContext: function clipContext(receiver, ctx) {\n ctx.save();\n ctx.beginPath();\n receiver.clipTo(ctx);\n ctx.clip();\n },\n\n /**\n * Multiply matrix A by matrix B to nest transformations\n * @static\n * @memberOf fabric.util\n * @param {Array} a First transformMatrix\n * @param {Array} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {Array} The product of the two transform matrices\n */\n multiplyTransformMatrices: function multiplyTransformMatrices(a, b, is2x2) {\n // Matrix multiply a * b\n return [a[0] * b[0] + a[2] * b[1], a[1] * b[0] + a[3] * b[1], a[0] * b[2] + a[2] * b[3], a[1] * b[2] + a[3] * b[3], is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4], is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5]];\n },\n\n /**\n * Decomposes standard 2x3 matrix into transform components\n * @static\n * @memberOf fabric.util\n * @param {Array} a transformMatrix\n * @return {Object} Components of transform\n */\n qrDecompose: function qrDecompose(a) {\n var angle = atan2(a[1], a[0]),\n denom = pow(a[0], 2) + pow(a[1], 2),\n scaleX = sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = atan2(a[0] * a[2] + a[1] * a[3], denom);\n return {\n angle: angle / PiBy180,\n scaleX: scaleX,\n scaleY: scaleY,\n skewX: skewX / PiBy180,\n skewY: 0,\n translateX: a[4],\n translateY: a[5]\n };\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle] angle in degrees\n * @return {Number[]} transform matrix\n */\n calcRotateMatrix: function calcRotateMatrix(options) {\n if (!options.angle) {\n return fabric.iMatrix.concat();\n }\n\n var theta = fabric.util.degreesToRadians(options.angle),\n cos = fabric.util.cos(theta),\n sin = fabric.util.sin(theta);\n return [cos, sin, -sin, cos, 0, 0];\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @return {Number[]} transform matrix\n */\n calcDimensionsMatrix: function calcDimensionsMatrix(options) {\n var scaleX = typeof options.scaleX === 'undefined' ? 1 : options.scaleX,\n scaleY = typeof options.scaleY === 'undefined' ? 1 : options.scaleY,\n scaleMatrix = [options.flipX ? -scaleX : scaleX, 0, 0, options.flipY ? -scaleY : scaleY, 0, 0],\n multiply = fabric.util.multiplyTransformMatrices,\n degreesToRadians = fabric.util.degreesToRadians;\n\n if (options.skewX) {\n scaleMatrix = multiply(scaleMatrix, [1, 0, Math.tan(degreesToRadians(options.skewX)), 1], true);\n }\n\n if (options.skewY) {\n scaleMatrix = multiply(scaleMatrix, [1, Math.tan(degreesToRadians(options.skewY)), 0, 1], true);\n }\n\n return scaleMatrix;\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\n composeMatrix: function composeMatrix(options) {\n var matrix = [1, 0, 0, 1, options.translateX || 0, options.translateY || 0],\n multiply = fabric.util.multiplyTransformMatrices;\n\n if (options.angle) {\n matrix = multiply(matrix, fabric.util.calcRotateMatrix(options));\n }\n\n if (options.scaleX || options.scaleY || options.skewX || options.skewY || options.flipX || options.flipY) {\n matrix = multiply(matrix, fabric.util.calcDimensionsMatrix(options));\n }\n\n return matrix;\n },\n\n /**\n * Returns a transform matrix that has the same effect of scaleX, scaleY and skewX.\n * Is deprecated for composeMatrix. Please do not use it.\n * @static\n * @deprecated since 3.4.0\n * @memberOf fabric.util\n * @param {Number} scaleX\n * @param {Number} scaleY\n * @param {Number} skewX\n * @return {Number[]} transform matrix\n */\n customTransformMatrix: function customTransformMatrix(scaleX, scaleY, skewX) {\n return fabric.util.composeMatrix({\n scaleX: scaleX,\n scaleY: scaleY,\n skewX: skewX\n });\n },\n\n /**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to transform\n */\n resetObjectTransform: function resetObjectTransform(target) {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n },\n\n /**\n * Extract Object transform values\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to read from\n * @return {Object} Components of transform\n */\n saveObjectTransform: function saveObjectTransform(target) {\n return {\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top\n };\n },\n\n /**\n * Returns string representation of function body\n * @param {Function} fn Function to get body of\n * @return {String} Function body\n */\n getFunctionBody: function getFunctionBody(fn) {\n return (String(fn).match(/function[^{]*\\{([\\s\\S]*)\\}/) || {})[1];\n },\n\n /**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate\n * @param {Number} y y coordinate\n * @param {Number} tolerance Tolerance\n */\n isTransparent: function isTransparent(ctx, x, y, tolerance) {\n // If tolerance is > 0 adjust start coords to take into account.\n // If moves off Canvas fix to 0\n if (tolerance > 0) {\n if (x > tolerance) {\n x -= tolerance;\n } else {\n x = 0;\n }\n\n if (y > tolerance) {\n y -= tolerance;\n } else {\n y = 0;\n }\n }\n\n var _isTransparent = true,\n i,\n temp,\n imageData = ctx.getImageData(x, y, tolerance * 2 || 1, tolerance * 2 || 1),\n l = imageData.data.length; // Split image data - for tolerance > 1, pixelDataSize = 4;\n\n for (i = 3; i < l; i += 4) {\n temp = imageData.data[i];\n _isTransparent = temp <= 0;\n\n if (_isTransparent === false) {\n break; // Stop if colour found\n }\n }\n\n imageData = null;\n return _isTransparent;\n },\n\n /**\n * Parse preserveAspectRatio attribute from element\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\n parsePreserveAspectRatioAttribute: function parsePreserveAspectRatioAttribute(attribute) {\n var meetOrSlice = 'meet',\n alignX = 'Mid',\n alignY = 'Mid',\n aspectRatioAttrs = attribute.split(' '),\n align;\n\n if (aspectRatioAttrs && aspectRatioAttrs.length) {\n meetOrSlice = aspectRatioAttrs.pop();\n\n if (meetOrSlice !== 'meet' && meetOrSlice !== 'slice') {\n align = meetOrSlice;\n meetOrSlice = 'meet';\n } else if (aspectRatioAttrs.length) {\n align = aspectRatioAttrs.pop();\n }\n } //divide align in alignX and alignY\n\n\n alignX = align !== 'none' ? align.slice(1, 4) : 'none';\n alignY = align !== 'none' ? align.slice(5, 8) : 'none';\n return {\n meetOrSlice: meetOrSlice,\n alignX: alignX,\n alignY: alignY\n };\n },\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @memberOf fabric.util\n * @param {String} [fontFamily] font family to clear\n */\n clearFabricFontCache: function clearFabricFontCache(fontFamily) {\n fontFamily = (fontFamily || '').toLowerCase();\n\n if (!fontFamily) {\n fabric.charWidthsCache = {};\n } else if (fabric.charWidthsCache[fontFamily]) {\n delete fabric.charWidthsCache[fontFamily];\n }\n },\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Number} ar aspect ratio\n * @param {Number} maximumArea Maximum area you want to achieve\n * @return {Object.x} Limited dimensions by X\n * @return {Object.y} Limited dimensions by Y\n */\n limitDimsByArea: function limitDimsByArea(ar, maximumArea) {\n var roughWidth = Math.sqrt(maximumArea * ar),\n perfLimitSizeY = Math.floor(maximumArea / roughWidth);\n return {\n x: Math.floor(roughWidth),\n y: perfLimitSizeY\n };\n },\n capValue: function capValue(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\n findScaleToFit: function findScaleToFit(source, destination) {\n return Math.min(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\n findScaleToCover: function findScaleToCover(source, destination) {\n return Math.max(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @memberOf fabric.util\n * @param {Array} trasnform an array with 6 numbers\n * @return {String} transform matrix for svg\n * @return {Object.y} Limited dimensions by Y\n */\n matrixToSVG: function matrixToSVG(transform) {\n return 'matrix(' + transform.map(function (value) {\n return fabric.util.toFixed(value, fabric.Object.NUM_FRACTION_DIGITS);\n }).join(' ') + ')';\n }\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function () {\n var _join = Array.prototype.join;\n /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n */\n\n function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {\n var argsString = _join.call(arguments);\n\n if (fabric.arcToSegmentsCache[argsString]) {\n return fabric.arcToSegmentsCache[argsString];\n }\n\n var PI = Math.PI,\n th = rotateX * PI / 180,\n sinTh = fabric.util.sin(th),\n cosTh = fabric.util.cos(th),\n fromX = 0,\n fromY = 0;\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,\n py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,\n rx2 = rx * rx,\n ry2 = ry * ry,\n py2 = py * py,\n px2 = px * px,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,\n root = 0;\n\n if (pl < 0) {\n var s = Math.sqrt(1 - pl / (rx2 * ry2));\n rx *= s;\n ry *= s;\n } else {\n root = (large === sweep ? -1.0 : 1.0) * Math.sqrt(pl / (rx2 * py2 + ry2 * px2));\n }\n\n var cx = root * rx * py / ry,\n cy = -root * ry * px / rx,\n cx1 = cosTh * cx - sinTh * cy + toX * 0.5,\n cy1 = sinTh * cx + cosTh * cy + toY * 0.5,\n mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),\n dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n } else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n } // Convert into cubic bezier segments <= 90deg\n\n\n var segments = Math.ceil(Math.abs(dtheta / PI * 2)),\n result = [],\n mDelta = dtheta / segments,\n mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),\n th3 = mTheta + mDelta;\n\n for (var i = 0; i < segments; i++) {\n result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);\n fromX = result[i][4];\n fromY = result[i][5];\n mTheta = th3;\n th3 += mDelta;\n }\n\n fabric.arcToSegmentsCache[argsString] = result;\n return result;\n }\n\n function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {\n var costh2 = fabric.util.cos(th2),\n sinth2 = fabric.util.sin(th2),\n costh3 = fabric.util.cos(th3),\n sinth3 = fabric.util.sin(th3),\n toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,\n toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,\n cp1X = fromX + mT * (-cosTh * rx * sinth2 - sinTh * ry * costh2),\n cp1Y = fromY + mT * (-sinTh * rx * sinth2 + cosTh * ry * costh2),\n cp2X = toX + mT * (cosTh * rx * sinth3 + sinTh * ry * costh3),\n cp2Y = toY + mT * (sinTh * rx * sinth3 - cosTh * ry * costh3);\n return [cp1X, cp1Y, cp2X, cp2Y, toX, toY];\n }\n /*\n * Private\n */\n\n\n function calcVectorAngle(ux, uy, vx, vy) {\n var ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n\n if (tb >= ta) {\n return tb - ta;\n } else {\n return 2 * Math.PI - (ta - tb);\n }\n }\n /**\n * Draws arc\n * @param {CanvasRenderingContext2D} ctx\n * @param {Number} fx\n * @param {Number} fy\n * @param {Array} coords\n */\n\n\n fabric.util.drawArc = function (ctx, fx, fy, coords) {\n var rx = coords[0],\n ry = coords[1],\n rot = coords[2],\n large = coords[3],\n sweep = coords[4],\n tx = coords[5],\n ty = coords[6],\n segs = [[], [], [], []],\n segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segsNorm.length; i < len; i++) {\n segs[i][0] = segsNorm[i][0] + fx;\n segs[i][1] = segsNorm[i][1] + fy;\n segs[i][2] = segsNorm[i][2] + fx;\n segs[i][3] = segsNorm[i][3] + fy;\n segs[i][4] = segsNorm[i][4] + fx;\n segs[i][5] = segsNorm[i][5] + fy;\n ctx.bezierCurveTo.apply(ctx, segs[i]);\n }\n };\n /**\n * Calculate bounding box of a elliptic-arc\n * @param {Number} fx start point of arc\n * @param {Number} fy\n * @param {Number} rx horizontal radius\n * @param {Number} ry vertical radius\n * @param {Number} rot angle of horizontal axe\n * @param {Number} large 1 or 0, whatever the arc is the big or the small on the 2 points\n * @param {Number} sweep 1 or 0, 1 clockwise or counterclockwise direction\n * @param {Number} tx end point of arc\n * @param {Number} ty\n */\n\n\n fabric.util.getBoundsOfArc = function (fx, fy, rx, ry, rot, large, sweep, tx, ty) {\n var fromX = 0,\n fromY = 0,\n bound,\n bounds = [],\n segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segs.length; i < len; i++) {\n bound = getBoundsOfCurve(fromX, fromY, segs[i][0], segs[i][1], segs[i][2], segs[i][3], segs[i][4], segs[i][5]);\n bounds.push({\n x: bound[0].x + fx,\n y: bound[0].y + fy\n });\n bounds.push({\n x: bound[1].x + fx,\n y: bound[1].y + fy\n });\n fromX = segs[i][4];\n fromY = segs[i][5];\n }\n\n return bounds;\n };\n /**\n * Calculate bounding box of a beziercurve\n * @param {Number} x0 starting point\n * @param {Number} y0\n * @param {Number} x1 first control point\n * @param {Number} y1\n * @param {Number} x2 secondo control point\n * @param {Number} y2\n * @param {Number} x3 end of beizer\n * @param {Number} y3\n */\n // taken from http://jsbin.com/ivomiq/56/edit no credits available for that.\n\n\n function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {\n var argsString;\n\n if (fabric.cachesBoundsOfCurve) {\n argsString = _join.call(arguments);\n\n if (fabric.boundsOfCurveCache[argsString]) {\n return fabric.boundsOfCurveCache[argsString];\n }\n }\n\n var sqrt = Math.sqrt,\n min = Math.min,\n max = Math.max,\n abs = Math.abs,\n tvalues = [],\n bounds = [[], []],\n a,\n b,\n c,\n t,\n t1,\n t2,\n b2ac,\n sqrtb2ac;\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n\n for (var i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n\n t = -c / b;\n\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n\n continue;\n }\n\n b2ac = b * b - 4 * c * a;\n\n if (b2ac < 0) {\n continue;\n }\n\n sqrtb2ac = sqrt(b2ac);\n t1 = (-b + sqrtb2ac) / (2 * a);\n\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n\n t2 = (-b - sqrtb2ac) / (2 * a);\n\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x,\n y,\n j = tvalues.length,\n jlen = j,\n mt;\n\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n x = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n bounds[0][j] = x;\n y = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n var result = [{\n x: min.apply(null, bounds[0]),\n y: min.apply(null, bounds[1])\n }, {\n x: max.apply(null, bounds[0]),\n y: max.apply(null, bounds[1])\n }];\n\n if (fabric.cachesBoundsOfCurve) {\n fabric.boundsOfCurveCache[argsString] = result;\n }\n\n return result;\n }\n\n fabric.util.getBoundsOfCurve = getBoundsOfCurve;\n})();\n\n(function () {\n var slice = Array.prototype.slice;\n /**\n * Invokes method on all items in a given array\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} method Name of a method to invoke\n * @return {Array}\n */\n\n function invoke(array, method) {\n var args = slice.call(arguments, 2),\n result = [];\n\n for (var i = 0, len = array.length; i < len; i++) {\n result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);\n }\n\n return result;\n }\n /**\n * Finds maximum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n\n\n function max(array, byProperty) {\n return find(array, byProperty, function (value1, value2) {\n return value1 >= value2;\n });\n }\n /**\n * Finds minimum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n\n\n function min(array, byProperty) {\n return find(array, byProperty, function (value1, value2) {\n return value1 < value2;\n });\n }\n /**\n * @private\n */\n\n\n function fill(array, value) {\n var k = array.length;\n\n while (k--) {\n array[k] = value;\n }\n\n return array;\n }\n /**\n * @private\n */\n\n\n function find(array, byProperty, condition) {\n if (!array || array.length === 0) {\n return;\n }\n\n var i = array.length - 1,\n result = byProperty ? array[i][byProperty] : array[i];\n\n if (byProperty) {\n while (i--) {\n if (condition(array[i][byProperty], result)) {\n result = array[i][byProperty];\n }\n }\n } else {\n while (i--) {\n if (condition(array[i], result)) {\n result = array[i];\n }\n }\n }\n\n return result;\n }\n /**\n * @namespace fabric.util.array\n */\n\n\n fabric.util.array = {\n fill: fill,\n invoke: invoke,\n min: min,\n max: max\n };\n})();\n\n(function () {\n /**\n * Copies all enumerable properties of one js object to another\n * this does not and cannot compete with generic utils.\n * Does not clone or extend fabric.Object subclasses.\n * This is mostly for internal use and has extra handling for fabricJS objects\n * it skips the canvas property in deep cloning.\n * @memberOf fabric.util.object\n * @param {Object} destination Where to copy to\n * @param {Object} source Where to copy from\n * @return {Object}\n */\n function extend(destination, source, deep) {\n // JScript DontEnum bug is not taken care of\n // the deep clone is for internal use, is not meant to avoid\n // javascript traps or cloning html element or self referenced objects.\n if (deep) {\n if (!fabric.isLikelyNode && source instanceof Element) {\n // avoid cloning deep images, canvases,\n destination = source;\n } else if (source instanceof Array) {\n destination = [];\n\n for (var i = 0, len = source.length; i < len; i++) {\n destination[i] = extend({}, source[i], deep);\n }\n } else if (source && _typeof(source) === 'object') {\n for (var property in source) {\n if (property === 'canvas') {\n destination[property] = extend({}, source[property]);\n } else if (source.hasOwnProperty(property)) {\n destination[property] = extend({}, source[property], deep);\n }\n }\n } else {\n // this sounds odd for an extend but is ok for recursive use\n destination = source;\n }\n } else {\n for (var property in source) {\n destination[property] = source[property];\n }\n }\n\n return destination;\n }\n /**\n * Creates an empty object and copies all enumerable properties of another object to it\n * @memberOf fabric.util.object\n * TODO: this function return an empty object if you try to clone null\n * @param {Object} object Object to clone\n * @return {Object}\n */\n\n\n function clone(object, deep) {\n return extend({}, object, deep);\n }\n /** @namespace fabric.util.object */\n\n\n fabric.util.object = {\n extend: extend,\n clone: clone\n };\n fabric.util.object.extend(fabric.util, fabric.Observable);\n})();\n\n(function () {\n /**\n * Camelizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to camelize\n * @return {String} Camelized version of a string\n */\n function camelize(string) {\n return string.replace(/-+(.)?/g, function (match, character) {\n return character ? character.toUpperCase() : '';\n });\n }\n /**\n * Capitalizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\n\n\n function capitalize(string, firstLetterOnly) {\n return string.charAt(0).toUpperCase() + (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase());\n }\n /**\n * Escapes XML in a string\n * @memberOf fabric.util.string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\n\n\n function escapeXml(string) {\n return string.replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n }\n /**\n * Divide a string in the user perceived single units\n * @memberOf fabric.util.string\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\n\n\n function graphemeSplit(textstring) {\n var i = 0,\n chr,\n graphemes = [];\n\n for (i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n\n graphemes.push(chr);\n }\n\n return graphemes;\n } // taken from mdn in the charAt doc page.\n\n\n function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n\n if (isNaN(code)) {\n return ''; // Position not found\n }\n\n if (code < 0xD800 || code > 0xDFFF) {\n return str.charAt(i);\n } // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n\n\n if (0xD800 <= code && code <= 0xDBFF) {\n if (str.length <= i + 1) {\n throw 'High surrogate without following low surrogate';\n }\n\n var next = str.charCodeAt(i + 1);\n\n if (0xDC00 > next || next > 0xDFFF) {\n throw 'High surrogate without following low surrogate';\n }\n\n return str.charAt(i) + str.charAt(i + 1);\n } // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n\n\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n\n var prev = str.charCodeAt(i - 1); // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n\n if (0xD800 > prev || prev > 0xDBFF) {\n throw 'Low surrogate without preceding high surrogate';\n } // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n\n\n return false;\n }\n /**\n * String utilities\n * @namespace fabric.util.string\n */\n\n\n fabric.util.string = {\n camelize: camelize,\n capitalize: capitalize,\n escapeXml: escapeXml,\n graphemeSplit: graphemeSplit\n };\n})();\n\n(function () {\n var slice = Array.prototype.slice,\n emptyFunction = function emptyFunction() {},\n IS_DONTENUM_BUGGY = function () {\n for (var p in {\n toString: 1\n }) {\n if (p === 'toString') {\n return false;\n }\n }\n\n return true;\n }(),\n\n /** @ignore */\n addMethods = function addMethods(klass, source, parent) {\n for (var property in source) {\n if (property in klass.prototype && typeof klass.prototype[property] === 'function' && (source[property] + '').indexOf('callSuper') > -1) {\n klass.prototype[property] = function (property) {\n return function () {\n var superclass = this.constructor.superclass;\n this.constructor.superclass = parent;\n var returnValue = source[property].apply(this, arguments);\n this.constructor.superclass = superclass;\n\n if (property !== 'initialize') {\n return returnValue;\n }\n };\n }(property);\n } else {\n klass.prototype[property] = source[property];\n }\n\n if (IS_DONTENUM_BUGGY) {\n if (source.toString !== Object.prototype.toString) {\n klass.prototype.toString = source.toString;\n }\n\n if (source.valueOf !== Object.prototype.valueOf) {\n klass.prototype.valueOf = source.valueOf;\n }\n }\n }\n };\n\n function Subclass() {}\n\n function callSuper(methodName) {\n var parentMethod = null,\n _this = this; // climb prototype chain to find method not equal to callee's method\n\n\n while (_this.constructor.superclass) {\n var superClassMethod = _this.constructor.superclass.prototype[methodName];\n\n if (_this[methodName] !== superClassMethod) {\n parentMethod = superClassMethod;\n break;\n } // eslint-disable-next-line\n\n\n _this = _this.constructor.superclass.prototype;\n }\n\n if (!parentMethod) {\n return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this);\n }\n\n return arguments.length > 1 ? parentMethod.apply(this, slice.call(arguments, 1)) : parentMethod.call(this);\n }\n /**\n * Helper for creation of \"classes\".\n * @memberOf fabric.util\n * @param {Function} [parent] optional \"Class\" to inherit from\n * @param {Object} [properties] Properties shared by all instances of this class\n * (be careful modifying objects defined here as this would affect all instances)\n */\n\n\n function createClass() {\n var parent = null,\n properties = slice.call(arguments, 0);\n\n if (typeof properties[0] === 'function') {\n parent = properties.shift();\n }\n\n function klass() {\n this.initialize.apply(this, arguments);\n }\n\n klass.superclass = parent;\n klass.subclasses = [];\n\n if (parent) {\n Subclass.prototype = parent.prototype;\n klass.prototype = new Subclass();\n parent.subclasses.push(klass);\n }\n\n for (var i = 0, length = properties.length; i < length; i++) {\n addMethods(klass, properties[i], parent);\n }\n\n if (!klass.prototype.initialize) {\n klass.prototype.initialize = emptyFunction;\n }\n\n klass.prototype.constructor = klass;\n klass.prototype.callSuper = callSuper;\n return klass;\n }\n\n fabric.util.createClass = createClass;\n})();\n\n(function () {\n // since ie10 or ie9 can use addEventListener but they do not support options, i need to check\n var couldUseAttachEvent = !!fabric.document.createElement('div').attachEvent;\n /**\n * Adds an event listener to an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n\n fabric.util.addListener = function (element, eventName, handler, options) {\n element && element.addEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n /**\n * Removes an event listener from an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n\n\n fabric.util.removeListener = function (element, eventName, handler, options) {\n element && element.removeEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n function getTouchInfo(event) {\n var touchProp = event.changedTouches;\n\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n\n return event;\n }\n\n fabric.util.getPointer = function (event) {\n var element = event.target,\n scroll = fabric.util.getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n\n return {\n x: _evt.clientX + scroll.left,\n y: _evt.clientY + scroll.top\n };\n };\n})();\n\n(function () {\n /**\n * Cross-browser wrapper for setting element's style\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {Object} styles\n * @return {HTMLElement} Element that was passed as a first argument\n */\n function setStyle(element, styles) {\n var elementStyle = element.style;\n\n if (!elementStyle) {\n return element;\n }\n\n if (typeof styles === 'string') {\n element.style.cssText += ';' + styles;\n return styles.indexOf('opacity') > -1 ? setOpacity(element, styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1]) : element;\n }\n\n for (var property in styles) {\n if (property === 'opacity') {\n setOpacity(element, styles[property]);\n } else {\n var normalizedProperty = property === 'float' || property === 'cssFloat' ? typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat' : property;\n elementStyle[normalizedProperty] = styles[property];\n }\n }\n\n return element;\n }\n\n var parseEl = fabric.document.createElement('div'),\n supportsOpacity = typeof parseEl.style.opacity === 'string',\n supportsFilters = typeof parseEl.style.filter === 'string',\n reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/,\n\n /** @ignore */\n setOpacity = function setOpacity(element) {\n return element;\n };\n\n if (supportsOpacity) {\n /** @ignore */\n setOpacity = function setOpacity(element, value) {\n element.style.opacity = value;\n return element;\n };\n } else if (supportsFilters) {\n /** @ignore */\n setOpacity = function setOpacity(element, value) {\n var es = element.style;\n\n if (element.currentStyle && !element.currentStyle.hasLayout) {\n es.zoom = 1;\n }\n\n if (reOpacity.test(es.filter)) {\n value = value >= 0.9999 ? '' : 'alpha(opacity=' + value * 100 + ')';\n es.filter = es.filter.replace(reOpacity, value);\n } else {\n es.filter += ' alpha(opacity=' + value * 100 + ')';\n }\n\n return element;\n };\n }\n\n fabric.util.setStyle = setStyle;\n})();\n\n(function () {\n var _slice = Array.prototype.slice;\n /**\n * Takes id and returns an element with that id (if one exists in a document)\n * @memberOf fabric.util\n * @param {String|HTMLElement} id\n * @return {HTMLElement|null}\n */\n\n function getById(id) {\n return typeof id === 'string' ? fabric.document.getElementById(id) : id;\n }\n\n var sliceCanConvertNodelists,\n\n /**\n * Converts an array-like object (e.g. arguments or NodeList) to an array\n * @memberOf fabric.util\n * @param {Object} arrayLike\n * @return {Array}\n */\n toArray = function toArray(arrayLike) {\n return _slice.call(arrayLike, 0);\n };\n\n try {\n sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array;\n } catch (err) {}\n\n if (!sliceCanConvertNodelists) {\n toArray = function toArray(arrayLike) {\n var arr = new Array(arrayLike.length),\n i = arrayLike.length;\n\n while (i--) {\n arr[i] = arrayLike[i];\n }\n\n return arr;\n };\n }\n /**\n * Creates specified element with specified attributes\n * @memberOf fabric.util\n * @param {String} tagName Type of an element to create\n * @param {Object} [attributes] Attributes to set on an element\n * @return {HTMLElement} Newly created element\n */\n\n\n function makeElement(tagName, attributes) {\n var el = fabric.document.createElement(tagName);\n\n for (var prop in attributes) {\n if (prop === 'class') {\n el.className = attributes[prop];\n } else if (prop === 'for') {\n el.htmlFor = attributes[prop];\n } else {\n el.setAttribute(prop, attributes[prop]);\n }\n }\n\n return el;\n }\n /**\n * Adds class to an element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to add class to\n * @param {String} className Class to add to an element\n */\n\n\n function addClass(element, className) {\n if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) {\n element.className += (element.className ? ' ' : '') + className;\n }\n }\n /**\n * Wraps element with another element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to wrap\n * @param {HTMLElement|String} wrapper Element to wrap with\n * @param {Object} [attributes] Attributes to set on a wrapper\n * @return {HTMLElement} wrapper\n */\n\n\n function wrapElement(element, wrapper, attributes) {\n if (typeof wrapper === 'string') {\n wrapper = makeElement(wrapper, attributes);\n }\n\n if (element.parentNode) {\n element.parentNode.replaceChild(wrapper, element);\n }\n\n wrapper.appendChild(element);\n return wrapper;\n }\n /**\n * Returns element scroll offsets\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\n\n\n function getScrollLeftTop(element) {\n var left = 0,\n top = 0,\n docElement = fabric.document.documentElement,\n body = fabric.document.body || {\n scrollLeft: 0,\n scrollTop: 0\n }; // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n\n while (element && (element.parentNode || element.host)) {\n // Set element to element parent, or 'host' in case of ShadowDOM\n element = element.parentNode || element.host;\n\n if (element === fabric.document) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n } else {\n left += element.scrollLeft || 0;\n top += element.scrollTop || 0;\n }\n\n if (element.nodeType === 1 && element.style.position === 'fixed') {\n break;\n }\n }\n\n return {\n left: left,\n top: top\n };\n }\n /**\n * Returns offset for a given element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\n\n\n function getElementOffset(element) {\n var docElem,\n doc = element && element.ownerDocument,\n box = {\n left: 0,\n top: 0\n },\n offset = {\n left: 0,\n top: 0\n },\n scrollLeftTop,\n offsetAttributes = {\n borderLeftWidth: 'left',\n borderTopWidth: 'top',\n paddingLeft: 'left',\n paddingTop: 'top'\n };\n\n if (!doc) {\n return offset;\n }\n\n for (var attr in offsetAttributes) {\n offset[offsetAttributes[attr]] += parseInt(getElementStyle(element, attr), 10) || 0;\n }\n\n docElem = doc.documentElement;\n\n if (typeof element.getBoundingClientRect !== 'undefined') {\n box = element.getBoundingClientRect();\n }\n\n scrollLeftTop = getScrollLeftTop(element);\n return {\n left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top\n };\n }\n /**\n * Returns style attribute value of a given element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get style attribute for\n * @param {String} attr Style attribute to get for element\n * @return {String} Style attribute value of the given element.\n */\n\n\n var getElementStyle;\n\n if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) {\n getElementStyle = function getElementStyle(element, attr) {\n var style = fabric.document.defaultView.getComputedStyle(element, null);\n return style ? style[attr] : undefined;\n };\n } else {\n getElementStyle = function getElementStyle(element, attr) {\n var value = element.style[attr];\n\n if (!value && element.currentStyle) {\n value = element.currentStyle[attr];\n }\n\n return value;\n };\n }\n\n (function () {\n var style = fabric.document.documentElement.style,\n selectProp = 'userSelect' in style ? 'userSelect' : 'MozUserSelect' in style ? 'MozUserSelect' : 'WebkitUserSelect' in style ? 'WebkitUserSelect' : 'KhtmlUserSelect' in style ? 'KhtmlUserSelect' : '';\n /**\n * Makes element unselectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\n\n function makeElementUnselectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = fabric.util.falseFunction;\n }\n\n if (selectProp) {\n element.style[selectProp] = 'none';\n } else if (typeof element.unselectable === 'string') {\n element.unselectable = 'on';\n }\n\n return element;\n }\n /**\n * Makes element selectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make selectable\n * @return {HTMLElement} Element that was passed in\n */\n\n\n function makeElementSelectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = null;\n }\n\n if (selectProp) {\n element.style[selectProp] = '';\n } else if (typeof element.unselectable === 'string') {\n element.unselectable = '';\n }\n\n return element;\n }\n\n fabric.util.makeElementUnselectable = makeElementUnselectable;\n fabric.util.makeElementSelectable = makeElementSelectable;\n })();\n\n (function () {\n /**\n * Inserts a script element with a given url into a document; invokes callback, when that script is finished loading\n * @memberOf fabric.util\n * @param {String} url URL of a script to load\n * @param {Function} callback Callback to execute when script is finished loading\n */\n function getScript(url, callback) {\n var headEl = fabric.document.getElementsByTagName('head')[0],\n scriptEl = fabric.document.createElement('script'),\n loading = true;\n /** @ignore */\n\n scriptEl.onload =\n /** @ignore */\n scriptEl.onreadystatechange = function (e) {\n if (loading) {\n if (typeof this.readyState === 'string' && this.readyState !== 'loaded' && this.readyState !== 'complete') {\n return;\n }\n\n loading = false;\n callback(e || fabric.window.event);\n scriptEl = scriptEl.onload = scriptEl.onreadystatechange = null;\n }\n };\n\n scriptEl.src = url;\n headEl.appendChild(scriptEl); // causes issue in Opera\n // headEl.removeChild(scriptEl);\n }\n\n fabric.util.getScript = getScript;\n })();\n\n function getNodeCanvas(element) {\n var impl = fabric.jsdomImplForWrapper(element);\n return impl._canvas || impl._image;\n }\n\n ;\n\n function cleanUpJsdomNode(element) {\n if (!fabric.isLikelyNode) {\n return;\n }\n\n var impl = fabric.jsdomImplForWrapper(element);\n\n if (impl) {\n impl._image = null;\n impl._canvas = null; // unsure if necessary\n\n impl._currentSrc = null;\n impl._attributes = null;\n impl._classList = null;\n }\n }\n\n fabric.util.getById = getById;\n fabric.util.toArray = toArray;\n fabric.util.makeElement = makeElement;\n fabric.util.addClass = addClass;\n fabric.util.wrapElement = wrapElement;\n fabric.util.getScrollLeftTop = getScrollLeftTop;\n fabric.util.getElementOffset = getElementOffset;\n fabric.util.getElementStyle = getElementStyle;\n fabric.util.getNodeCanvas = getNodeCanvas;\n fabric.util.cleanUpJsdomNode = cleanUpJsdomNode;\n})();\n\n(function () {\n function addParamToUrl(url, param) {\n return url + (/\\?/.test(url) ? '&' : '?') + param;\n }\n\n function emptyFn() {}\n /**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @memberOf fabric.util\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {String} [options.method=\"GET\"]\n * @param {String} [options.parameters] parameters to append to url in GET or in body\n * @param {String} [options.body] body to send with POST or PUT request\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n\n\n function request(url, options) {\n options || (options = {});\n\n var method = options.method ? options.method.toUpperCase() : 'GET',\n onComplete = options.onComplete || function () {},\n xhr = new fabric.window.XMLHttpRequest(),\n body = options.body || options.parameters;\n /** @ignore */\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n onComplete(xhr);\n xhr.onreadystatechange = emptyFn;\n }\n };\n\n if (method === 'GET') {\n body = null;\n\n if (typeof options.parameters === 'string') {\n url = addParamToUrl(url, options.parameters);\n }\n }\n\n xhr.open(method, url, true);\n\n if (method === 'POST' || method === 'PUT') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n xhr.send(body);\n return xhr;\n }\n\n fabric.util.request = request;\n})();\n/**\n * Wrapper around `console.log` (when available)\n * @param {*} [values] Values to log\n */\n\n\nfabric.log = console.log;\n/**\n * Wrapper around `console.warn` (when available)\n * @param {*} [values] Values to log as a warning\n */\n\nfabric.warn = console.warn;\n\n(function () {\n function noop() {\n return false;\n }\n\n function defaultEasing(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n /**\n * Changes value from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Number} [options.startValue=0] Starting value\n * @param {Number} [options.endValue=100] Ending value\n * @param {Number} [options.byValue=100] Value to modify the property by\n * @param {Function} [options.easing] Easing function\n * @param {Number} [options.duration=500] Duration of change (in ms)\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n */\n\n\n function animate(options) {\n requestAnimFrame(function (timestamp) {\n options || (options = {});\n var start = timestamp || +new Date(),\n duration = options.duration || 500,\n finish = start + duration,\n time,\n onChange = options.onChange || noop,\n abort = options.abort || noop,\n onComplete = options.onComplete || noop,\n easing = options.easing || defaultEasing,\n startValue = 'startValue' in options ? options.startValue : 0,\n endValue = 'endValue' in options ? options.endValue : 100,\n byValue = options.byValue || endValue - startValue;\n options.onStart && options.onStart();\n\n (function tick(ticktime) {\n // TODO: move abort call after calculation\n // and pass (current,valuePerc, timePerc) as arguments\n time = ticktime || +new Date();\n var currentTime = time > finish ? duration : time - start,\n timePerc = currentTime / duration,\n current = easing(currentTime, startValue, byValue, duration),\n valuePerc = Math.abs((current - startValue) / byValue);\n\n if (abort()) {\n onComplete(endValue, 1, 1);\n return;\n }\n\n if (time > finish) {\n onChange(endValue, 1, 1);\n onComplete(endValue, 1, 1);\n return;\n } else {\n onChange(current, valuePerc, timePerc);\n requestAnimFrame(tick);\n }\n })(start);\n });\n }\n\n var _requestAnimFrame = fabric.window.requestAnimationFrame || fabric.window.webkitRequestAnimationFrame || fabric.window.mozRequestAnimationFrame || fabric.window.oRequestAnimationFrame || fabric.window.msRequestAnimationFrame || function (callback) {\n return fabric.window.setTimeout(callback, 1000 / 60);\n };\n\n var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout;\n /**\n * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method\n * @memberOf fabric.util\n * @param {Function} callback Callback to invoke\n * @param {DOMElement} element optional Element to associate with animation\n */\n\n\n function requestAnimFrame() {\n return _requestAnimFrame.apply(fabric.window, arguments);\n }\n\n function cancelAnimFrame() {\n return _cancelAnimFrame.apply(fabric.window, arguments);\n }\n\n fabric.util.animate = animate;\n fabric.util.requestAnimFrame = requestAnimFrame;\n fabric.util.cancelAnimFrame = cancelAnimFrame;\n})();\n\n(function () {\n // Calculate an in-between color. Returns a \"rgba()\" string.\n // Credit: Edwin Martin \n // http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js\n function calculateColor(begin, end, pos) {\n var color = 'rgba(' + parseInt(begin[0] + pos * (end[0] - begin[0]), 10) + ',' + parseInt(begin[1] + pos * (end[1] - begin[1]), 10) + ',' + parseInt(begin[2] + pos * (end[2] - begin[2]), 10);\n color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1);\n color += ')';\n return color;\n }\n /**\n * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {String} fromColor The starting color in hex or rgb(a) format.\n * @param {String} toColor The starting color in hex or rgb(a) format.\n * @param {Number} [duration] Duration of change (in ms).\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used.\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n */\n\n\n function animateColor(fromColor, toColor, duration, options) {\n var startColor = new fabric.Color(fromColor).getSource(),\n endColor = new fabric.Color(toColor).getSource();\n options = options || {};\n fabric.util.animate(fabric.util.object.extend(options, {\n duration: duration || 500,\n startValue: startColor,\n endValue: endColor,\n byValue: endColor,\n easing: function easing(currentTime, startValue, byValue, duration) {\n var posValue = options.colorEasing ? options.colorEasing(currentTime, duration) : 1 - Math.cos(currentTime / duration * (Math.PI / 2));\n return calculateColor(startValue, byValue, posValue);\n }\n }));\n }\n\n fabric.util.animateColor = animateColor;\n})();\n\n(function () {\n function normalize(a, c, p, s) {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = p / (2 * Math.PI) * Math.asin(1);\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n }\n\n return {\n a: a,\n c: c,\n p: p,\n s: s\n };\n }\n\n function elastic(opts, t, d) {\n return opts.a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p);\n }\n /**\n * Cubic easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n }\n /**\n * Cubic easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutCubic(t, b, c, d) {\n t /= d / 2;\n\n if (t < 1) {\n return c / 2 * t * t * t + b;\n }\n\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n /**\n * Quartic easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n }\n /**\n * Quartic easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n }\n /**\n * Quartic easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutQuart(t, b, c, d) {\n t /= d / 2;\n\n if (t < 1) {\n return c / 2 * t * t * t * t + b;\n }\n\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n /**\n * Quintic easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n }\n /**\n * Quintic easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n }\n /**\n * Quintic easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutQuint(t, b, c, d) {\n t /= d / 2;\n\n if (t < 1) {\n return c / 2 * t * t * t * t * t + b;\n }\n\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n /**\n * Sinusoidal easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n /**\n * Sinusoidal easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n }\n /**\n * Sinusoidal easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n }\n /**\n * Exponential easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInExpo(t, b, c, d) {\n return t === 0 ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n /**\n * Exponential easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutExpo(t, b, c, d) {\n return t === d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n /**\n * Exponential easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutExpo(t, b, c, d) {\n if (t === 0) {\n return b;\n }\n\n if (t === d) {\n return b + c;\n }\n\n t /= d / 2;\n\n if (t < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n }\n\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n /**\n * Circular easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n }\n /**\n * Circular easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n }\n /**\n * Circular easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutCirc(t, b, c, d) {\n t /= d / 2;\n\n if (t < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n }\n\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n /**\n * Elastic easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInElastic(t, b, c, d) {\n var s = 1.70158,\n p = 0,\n a = c;\n\n if (t === 0) {\n return b;\n }\n\n t /= d;\n\n if (t === 1) {\n return b + c;\n }\n\n if (!p) {\n p = d * 0.3;\n }\n\n var opts = normalize(a, c, p, s);\n return -elastic(opts, t, d) + b;\n }\n /**\n * Elastic easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutElastic(t, b, c, d) {\n var s = 1.70158,\n p = 0,\n a = c;\n\n if (t === 0) {\n return b;\n }\n\n t /= d;\n\n if (t === 1) {\n return b + c;\n }\n\n if (!p) {\n p = d * 0.3;\n }\n\n var opts = normalize(a, c, p, s);\n return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p) + opts.c + b;\n }\n /**\n * Elastic easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutElastic(t, b, c, d) {\n var s = 1.70158,\n p = 0,\n a = c;\n\n if (t === 0) {\n return b;\n }\n\n t /= d / 2;\n\n if (t === 2) {\n return b + c;\n }\n\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n\n var opts = normalize(a, c, p, s);\n\n if (t < 1) {\n return -0.5 * elastic(opts, t, d) + b;\n }\n\n return opts.a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p) * 0.5 + opts.c + b;\n }\n /**\n * Backwards easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n }\n /**\n * Backwards easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n /**\n * Backwards easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n\n t /= d / 2;\n\n if (t < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n }\n\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n /**\n * Bouncing easing in\n * @memberOf fabric.util.ease\n */\n\n\n function easeInBounce(t, b, c, d) {\n return c - easeOutBounce(d - t, 0, c, d) + b;\n }\n /**\n * Bouncing easing out\n * @memberOf fabric.util.ease\n */\n\n\n function easeOutBounce(t, b, c, d) {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n }\n /**\n * Bouncing easing in and out\n * @memberOf fabric.util.ease\n */\n\n\n function easeInOutBounce(t, b, c, d) {\n if (t < d / 2) {\n return easeInBounce(t * 2, 0, c, d) * 0.5 + b;\n }\n\n return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n /**\n * Easing functions\n * See Easing Equations by Robert Penner\n * @namespace fabric.util.ease\n */\n\n\n fabric.util.ease = {\n /**\n * Quadratic easing in\n * @memberOf fabric.util.ease\n */\n easeInQuad: function easeInQuad(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n /**\n * Quadratic easing out\n * @memberOf fabric.util.ease\n */\n easeOutQuad: function easeOutQuad(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n /**\n * Quadratic easing in and out\n * @memberOf fabric.util.ease\n */\n easeInOutQuad: function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n\n if (t < 1) {\n return c / 2 * t * t + b;\n }\n\n return -c / 2 * (--t * (t - 2) - 1) + b;\n },\n\n /**\n * Cubic easing in\n * @memberOf fabric.util.ease\n */\n easeInCubic: function easeInCubic(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: easeOutCubic,\n easeInOutCubic: easeInOutCubic,\n easeInQuart: easeInQuart,\n easeOutQuart: easeOutQuart,\n easeInOutQuart: easeInOutQuart,\n easeInQuint: easeInQuint,\n easeOutQuint: easeOutQuint,\n easeInOutQuint: easeInOutQuint,\n easeInSine: easeInSine,\n easeOutSine: easeOutSine,\n easeInOutSine: easeInOutSine,\n easeInExpo: easeInExpo,\n easeOutExpo: easeOutExpo,\n easeInOutExpo: easeInOutExpo,\n easeInCirc: easeInCirc,\n easeOutCirc: easeOutCirc,\n easeInOutCirc: easeInOutCirc,\n easeInElastic: easeInElastic,\n easeOutElastic: easeOutElastic,\n easeInOutElastic: easeInOutElastic,\n easeInBack: easeInBack,\n easeOutBack: easeOutBack,\n easeInOutBack: easeInOutBack,\n easeInBounce: easeInBounce,\n easeOutBounce: easeOutBounce,\n easeInOutBounce: easeInOutBounce\n };\n})();\n\n(function (global) {\n 'use strict';\n /**\n * @name fabric\n * @namespace\n */\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n parseUnit = fabric.util.parseUnit,\n multiplyTransformMatrices = fabric.util.multiplyTransformMatrices,\n svgValidTagNames = ['path', 'circle', 'polygon', 'polyline', 'ellipse', 'rect', 'line', 'image', 'text'],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = ['pattern', 'defs', 'symbol', 'metadata', 'clipPath', 'mask', 'desc'],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n attributesMap = {\n cx: 'left',\n x: 'left',\n r: 'radius',\n cy: 'top',\n y: 'top',\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform'\n },\n colorAttributes = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity'\n },\n fSize = 'font-size',\n cPath = 'clip-path';\n fabric.svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n fabric.svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n fabric.svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n fabric.svgValidParentsRegEx = getSvgRegex(svgValidParents);\n fabric.cssRules = {};\n fabric.gradientDefs = {};\n fabric.clipPaths = {};\n\n function normalizeAttr(attr) {\n // transform attribute names\n if (attr in attributesMap) {\n return attributesMap[attr];\n }\n\n return attr;\n }\n\n function normalizeValue(attr, value, parentAttributes, fontSize) {\n var isArray = Object.prototype.toString.call(value) === '[object Array]',\n parsed;\n\n if ((attr === 'fill' || attr === 'stroke') && value === 'none') {\n value = '';\n } else if (attr === 'vector-effect') {\n value = value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === 'none') {\n value = null;\n } else {\n value = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n value = multiplyTransformMatrices(parentAttributes.transformMatrix, fabric.parseTransformAttribute(value));\n } else {\n value = fabric.parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n value = value !== 'none' && value !== 'hidden'; // display=none on parent element always takes precedence over child element\n\n if (parentAttributes && parentAttributes.visible === false) {\n value = false;\n }\n } else if (attr === 'opacity') {\n value = parseFloat(value);\n\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n value *= parentAttributes.opacity;\n }\n } else if (attr === 'textAnchor'\n /* text-anchor */\n ) {\n value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center';\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = parseUnit(value, fontSize) / fontSize * 1000;\n } else if (attr === 'paintFirst') {\n var fillIndex = value.indexOf('fill');\n var strokeIndex = value.indexOf('stroke');\n var value = 'fill';\n\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n value = 'stroke';\n } else if (fillIndex === -1 && strokeIndex > -1) {\n value = 'stroke';\n }\n } else if (attr === 'href' || attr === 'xlink:href') {\n return value;\n } else {\n parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed) ? value : parsed;\n }\n /**\n * @private\n */\n\n\n function getSvgRegex(arr) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n }\n /**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n\n\n function _setStrokeFillOpacity(attributes) {\n for (var attr in colorAttributes) {\n if (typeof attributes[colorAttributes[attr]] === 'undefined' || attributes[attr] === '') {\n continue;\n }\n\n if (typeof attributes[attr] === 'undefined') {\n if (!fabric.Object.prototype[attr]) {\n continue;\n }\n\n attributes[attr] = fabric.Object.prototype[attr];\n }\n\n if (attributes[attr].indexOf('url(') === 0) {\n continue;\n }\n\n var color = new fabric.Color(attributes[attr]);\n attributes[attr] = color.setAlpha(toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)).toRgba();\n }\n\n return attributes;\n }\n /**\n * @private\n */\n\n\n function _getMultipleNodes(doc, nodeNames) {\n var nodeName,\n nodeArray = [],\n nodeList,\n i,\n len;\n\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagName(nodeName);\n nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList));\n }\n\n return nodeArray;\n }\n /**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {Array} Array of 6 elements representing transformation matrix\n */\n\n\n fabric.parseTransformAttribute = function () {\n function rotateMatrix(matrix, args) {\n var cos = fabric.util.cos(args[0]),\n sin = fabric.util.sin(args[0]),\n x = 0,\n y = 0;\n\n if (args.length === 3) {\n x = args[1];\n y = args[2];\n }\n\n matrix[0] = cos;\n matrix[1] = sin;\n matrix[2] = -sin;\n matrix[3] = cos;\n matrix[4] = x - (cos * x - sin * y);\n matrix[5] = y - (sin * x + cos * y);\n }\n\n function scaleMatrix(matrix, args) {\n var multiplierX = args[0],\n multiplierY = args.length === 2 ? args[1] : args[0];\n matrix[0] = multiplierX;\n matrix[3] = multiplierY;\n }\n\n function skewMatrix(matrix, args, pos) {\n matrix[pos] = Math.tan(fabric.util.degreesToRadians(args[0]));\n }\n\n function translateMatrix(matrix, args) {\n matrix[4] = args[0];\n\n if (args.length === 2) {\n matrix[5] = args[1];\n }\n } // identity matrix\n\n\n var iMatrix = fabric.iMatrix,\n // == begin transform regexp\n number = fabric.reNum,\n commaWsp = '(?:\\\\s+,?\\\\s*|,\\\\s*)',\n skewX = '(?:(skewX)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n skewY = '(?:(skewY)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n rotate = '(?:(rotate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' + commaWsp + '(' + number + ')' + commaWsp + '(' + number + '))?\\\\s*\\\\))',\n scale = '(?:(scale)\\\\s*\\\\(\\\\s*(' + number + ')(?:' + commaWsp + '(' + number + '))?\\\\s*\\\\))',\n translate = '(?:(translate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' + commaWsp + '(' + number + '))?\\\\s*\\\\))',\n matrix = '(?:(matrix)\\\\s*\\\\(\\\\s*' + '(' + number + ')' + commaWsp + '(' + number + ')' + commaWsp + '(' + number + ')' + commaWsp + '(' + number + ')' + commaWsp + '(' + number + ')' + commaWsp + '(' + number + ')' + '\\\\s*\\\\))',\n transform = '(?:' + matrix + '|' + translate + '|' + scale + '|' + rotate + '|' + skewX + '|' + skewY + ')',\n transforms = '(?:' + transform + '(?:' + commaWsp + '*' + transform + ')*' + ')',\n transformList = '^\\\\s*(?:' + transforms + '?)\\\\s*$',\n // http://www.w3.org/TR/SVG/coords.html#TransformAttribute\n reTransformList = new RegExp(transformList),\n // == end transform regexp\n reTransform = new RegExp(transform, 'g');\n return function (attributeValue) {\n // start with identity matrix\n var matrix = iMatrix.concat(),\n matrices = []; // return if no argument was given or\n // an argument does not match transform attribute regexp\n\n if (!attributeValue || attributeValue && !reTransformList.test(attributeValue)) {\n return matrix;\n }\n\n attributeValue.replace(reTransform, function (match) {\n var m = new RegExp(transform).exec(match).filter(function (match) {\n // match !== '' && match != null\n return !!match;\n }),\n operation = m[1],\n args = m.slice(2).map(parseFloat);\n\n switch (operation) {\n case 'translate':\n translateMatrix(matrix, args);\n break;\n\n case 'rotate':\n args[0] = fabric.util.degreesToRadians(args[0]);\n rotateMatrix(matrix, args);\n break;\n\n case 'scale':\n scaleMatrix(matrix, args);\n break;\n\n case 'skewX':\n skewMatrix(matrix, args, 2);\n break;\n\n case 'skewY':\n skewMatrix(matrix, args, 1);\n break;\n\n case 'matrix':\n matrix = args;\n break;\n } // snapshot current matrix into matrices array\n\n\n matrices.push(matrix.concat()); // reset\n\n matrix = iMatrix.concat();\n });\n var combinedMatrix = matrices[0];\n\n while (matrices.length > 1) {\n matrices.shift();\n combinedMatrix = fabric.util.multiplyTransformMatrices(combinedMatrix, matrices[0]);\n }\n\n return combinedMatrix;\n };\n }();\n /**\n * @private\n */\n\n\n function parseStyleString(style, oStyle) {\n var attr, value;\n style.replace(/;\\s*$/, '').split(';').forEach(function (chunk) {\n var pair = chunk.split(':');\n attr = pair[0].trim().toLowerCase();\n value = pair[1].trim();\n oStyle[attr] = value;\n });\n }\n /**\n * @private\n */\n\n\n function parseStyleObject(style, oStyle) {\n var attr, value;\n\n for (var prop in style) {\n if (typeof style[prop] === 'undefined') {\n continue;\n }\n\n attr = prop.toLowerCase();\n value = style[prop];\n oStyle[attr] = value;\n }\n }\n /**\n * @private\n */\n\n\n function getGlobalStylesForElement(element, svgUid) {\n var styles = {};\n\n for (var rule in fabric.cssRules[svgUid]) {\n if (elementMatchesRule(element, rule.split(' '))) {\n for (var property in fabric.cssRules[svgUid][rule]) {\n styles[property] = fabric.cssRules[svgUid][rule][property];\n }\n }\n }\n\n return styles;\n }\n /**\n * @private\n */\n\n\n function elementMatchesRule(element, selectors) {\n var firstMatching,\n parentMatching = true; //start from rightmost selector.\n\n firstMatching = selectorMatches(element, selectors.pop());\n\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n\n return firstMatching && parentMatching && selectors.length === 0;\n }\n\n function doesSomeParentMatch(element, selectors) {\n var selector,\n parentMatching = true;\n\n while (element.parentNode && element.parentNode.nodeType === 1 && selectors.length) {\n if (parentMatching) {\n selector = selectors.pop();\n }\n\n element = element.parentNode;\n parentMatching = selectorMatches(element, selector);\n }\n\n return selectors.length === 0;\n }\n /**\n * @private\n */\n\n\n function selectorMatches(element, selector) {\n var nodeName = element.nodeName,\n classNames = element.getAttribute('class'),\n id = element.getAttribute('id'),\n matcher,\n i; // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n\n if (id && selector.length) {\n matcher = new RegExp('#' + id + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n\n if (classNames && selector.length) {\n classNames = classNames.split(' ');\n\n for (i = classNames.length; i--;) {\n matcher = new RegExp('\\\\.' + classNames[i] + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n }\n\n return selector.length === 0;\n }\n /**\n * @private\n * to support IE8 missing getElementById on SVGdocument and on node xmlDOM\n */\n\n\n function elementById(doc, id) {\n var el;\n doc.getElementById && (el = doc.getElementById(id));\n\n if (el) {\n return el;\n }\n\n var node,\n i,\n len,\n nodelist = doc.getElementsByTagName('*');\n\n for (i = 0, len = nodelist.length; i < len; i++) {\n node = nodelist[i];\n\n if (id === node.getAttribute('id')) {\n return node;\n }\n }\n }\n /**\n * @private\n */\n\n\n function parseUseDirectives(doc) {\n var nodelist = _getMultipleNodes(doc, ['use', 'svg:use']),\n i = 0;\n\n while (nodelist.length && i < nodelist.length) {\n var el = nodelist[i],\n xlink = (el.getAttribute('xlink:href') || el.getAttribute('href')).substr(1),\n x = el.getAttribute('x') || 0,\n y = el.getAttribute('y') || 0,\n el2 = elementById(doc, xlink).cloneNode(true),\n currentTrans = (el2.getAttribute('transform') || '') + ' translate(' + x + ', ' + y + ')',\n parentNode,\n oldLength = nodelist.length,\n attr,\n j,\n attrs,\n len,\n namespace = fabric.svgNS;\n applyViewboxTransform(el2);\n\n if (/^svg$/i.test(el2.nodeName)) {\n var el3 = el2.ownerDocument.createElementNS(namespace, 'g');\n\n for (j = 0, attrs = el2.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n el3.setAttributeNS(namespace, attr.nodeName, attr.nodeValue);\n } // el2.firstChild != null\n\n\n while (el2.firstChild) {\n el3.appendChild(el2.firstChild);\n }\n\n el2 = el3;\n }\n\n for (j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n\n if (attr.nodeName === 'x' || attr.nodeName === 'y' || attr.nodeName === 'xlink:href' || attr.nodeName === 'href') {\n continue;\n }\n\n if (attr.nodeName === 'transform') {\n currentTrans = attr.nodeValue + ' ' + currentTrans;\n } else {\n el2.setAttribute(attr.nodeName, attr.nodeValue);\n }\n }\n\n el2.setAttribute('transform', currentTrans);\n el2.setAttribute('instantiated_by_use', '1');\n el2.removeAttribute('id');\n parentNode = el.parentNode;\n parentNode.replaceChild(el2, el); // some browsers do not shorten nodelist after replaceChild (IE8)\n\n if (nodelist.length === oldLength) {\n i++;\n }\n }\n } // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n // matches, e.g.: +14.56e-12, etc.\n\n\n var reViewBoxAttrValue = new RegExp('^' + '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' + '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' + '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' + '\\\\s*(' + fabric.reNum + '+)\\\\s*' + '$');\n /**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\n\n function applyViewboxTransform(element) {\n var viewBoxAttr = element.getAttribute('viewBox'),\n scaleX = 1,\n scaleY = 1,\n minX = 0,\n minY = 0,\n viewBoxWidth,\n viewBoxHeight,\n matrix,\n el,\n widthAttr = element.getAttribute('width'),\n heightAttr = element.getAttribute('height'),\n x = element.getAttribute('x') || 0,\n y = element.getAttribute('y') || 0,\n preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '',\n missingViewBox = !viewBoxAttr || !fabric.svgViewBoxElementsRegEx.test(element.nodeName) || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue)),\n missingDimAttr = !widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%',\n toBeParsed = missingViewBox && missingDimAttr,\n parsedDim = {},\n translateMatrix = '',\n widthDiff = 0,\n heightDiff = 0;\n parsedDim.width = 0;\n parsedDim.height = 0;\n parsedDim.toBeParsed = toBeParsed;\n\n if (toBeParsed) {\n return parsedDim;\n }\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n return parsedDim;\n }\n\n minX = -parseFloat(viewBoxAttr[1]);\n minY = -parseFloat(viewBoxAttr[2]);\n viewBoxWidth = parseFloat(viewBoxAttr[3]);\n viewBoxHeight = parseFloat(viewBoxAttr[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n } else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n } // default is to preserve aspect ratio\n\n\n preserveAspectRatio = fabric.util.parsePreserveAspectRatioAttribute(preserveAspectRatio);\n\n if (preserveAspectRatio.alignX !== 'none') {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = scaleX > scaleY ? scaleY : scaleX; // calculate additional translation to move the viewbox\n }\n\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = scaleX > scaleY ? scaleX : scaleY; // calculate additional translation to move the viewbox\n }\n\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (scaleX === 1 && scaleY === 1 && minX === 0 && minY === 0 && x === 0 && y === 0) {\n return parsedDim;\n }\n\n if (x || y) {\n translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n }\n\n matrix = translateMatrix + ' matrix(' + scaleX + ' 0' + ' 0 ' + scaleY + ' ' + (minX * scaleX + widthDiff) + ' ' + (minY * scaleY + heightDiff) + ') ';\n parsedDim.viewboxTransform = fabric.parseTransformAttribute(matrix);\n\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(fabric.svgNS, 'g'); // element.firstChild != null\n\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n\n element.appendChild(el);\n } else {\n el = element;\n matrix = el.getAttribute('transform') + matrix;\n }\n\n el.setAttribute('transform', matrix);\n return parsedDim;\n }\n\n function hasAncestorWithNodeName(element, nodeName) {\n while (element && (element = element.parentNode)) {\n if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', '')) && !element.getAttribute('instantiated_by_use')) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @param {Function} callback Callback to call when parsing is finished;\n * It's being passed an array of elements (parsed from a document).\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [parsingOptions] options for parsing document\n * @param {String} [parsingOptions.crossOrigin] crossOrigin settings\n */\n\n\n fabric.parseSVGDocument = function (doc, callback, reviver, parsingOptions) {\n if (!doc) {\n return;\n }\n\n parseUseDirectives(doc);\n var svgUid = fabric.Object.__uid++,\n i,\n len,\n options = applyViewboxTransform(doc),\n descendants = fabric.util.toArray(doc.getElementsByTagName('*'));\n options.crossOrigin = parsingOptions && parsingOptions.crossOrigin;\n options.svgUid = svgUid;\n\n if (descendants.length === 0 && fabric.isLikelyNode) {\n // we're likely in node, where \"o3-xml\" library fails to gEBTN(\"*\")\n // https://github.com/ajaxorg/node-o3-xml/issues/21\n descendants = doc.selectNodes('//*[name(.)!=\"svg\"]');\n var arr = [];\n\n for (i = 0, len = descendants.length; i < len; i++) {\n arr[i] = descendants[i];\n }\n\n descendants = arr;\n }\n\n var elements = descendants.filter(function (el) {\n applyViewboxTransform(el);\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', '')) && !hasAncestorWithNodeName(el, fabric.svgInvalidAncestorsRegEx); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n\n if (!elements || elements && !elements.length) {\n callback && callback([], {});\n return;\n }\n\n var clipPaths = {};\n descendants.filter(function (el) {\n return el.nodeName.replace('svg:', '') === 'clipPath';\n }).forEach(function (el) {\n var id = el.getAttribute('id');\n clipPaths[id] = fabric.util.toArray(el.getElementsByTagName('*')).filter(function (el) {\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', ''));\n });\n });\n fabric.gradientDefs[svgUid] = fabric.getGradientDefs(doc);\n fabric.cssRules[svgUid] = fabric.getCSSRules(doc);\n fabric.clipPaths[svgUid] = clipPaths; // Precedence of rules: style > class > attribute\n\n fabric.parseElements(elements, function (instances, elements) {\n if (callback) {\n callback(instances, options, elements, descendants);\n delete fabric.gradientDefs[svgUid];\n delete fabric.cssRules[svgUid];\n delete fabric.clipPaths[svgUid];\n }\n }, clone(options), reviver, parsingOptions);\n };\n\n function recursivelyParseGradientsXlink(doc, gradient) {\n var gradientsAttrs = ['gradientTransform', 'x1', 'x2', 'y1', 'y2', 'gradientUnits', 'cx', 'cy', 'r', 'fx', 'fy'],\n xlinkAttr = 'xlink:href',\n xLink = gradient.getAttribute(xlinkAttr).substr(1),\n referencedGradient = elementById(doc, xLink);\n\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient);\n }\n\n gradientsAttrs.forEach(function (attr) {\n if (referencedGradient && !gradient.hasAttribute(attr) && referencedGradient.hasAttribute(attr)) {\n gradient.setAttribute(attr, referencedGradient.getAttribute(attr));\n }\n });\n\n if (!gradient.children.length) {\n var referenceClone = referencedGradient.cloneNode(true);\n\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n\n gradient.removeAttribute(xlinkAttr);\n }\n\n var reFontDeclaration = new RegExp('(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' + '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' + fabric.reNum + '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' + fabric.reNum + '))?\\\\s+(.*)');\n extend(fabric, {\n /**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\n parseFontDeclaration: function parseFontDeclaration(value, oStyle) {\n var match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n\n var fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight);\n }\n\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n },\n\n /**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\n getGradientDefs: function getGradientDefs(doc) {\n var tagArray = ['linearGradient', 'radialGradient', 'svg:linearGradient', 'svg:radialGradient'],\n elList = _getMultipleNodes(doc, tagArray),\n el,\n j = 0,\n gradientDefs = {};\n\n j = elList.length;\n\n while (j--) {\n el = elList[j];\n\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n\n gradientDefs[el.getAttribute('id')] = el;\n }\n\n return gradientDefs;\n },\n\n /**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @static\n * @memberOf fabric\n * @param {DOMElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\n parseAttributes: function parseAttributes(element, attributes, svgUid) {\n if (!element) {\n return;\n }\n\n var value,\n parentAttributes = {},\n fontSize,\n parentFontSize;\n\n if (typeof svgUid === 'undefined') {\n svgUid = element.getAttribute('svgUid');\n } // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n\n\n if (element.parentNode && fabric.svgValidParentsRegEx.test(element.parentNode.nodeName)) {\n parentAttributes = fabric.parseAttributes(element.parentNode, attributes, svgUid);\n }\n\n var ownAttributes = attributes.reduce(function (memo, attr) {\n value = element.getAttribute(attr);\n\n if (value) {\n // eslint-disable-line\n memo[attr] = value;\n }\n\n return memo;\n }, {}); // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n\n var cssAttrs = extend(getGlobalStylesForElement(element, svgUid), fabric.parseStyleAttribute(element));\n ownAttributes = extend(ownAttributes, cssAttrs);\n\n if (cssAttrs[cPath]) {\n element.setAttribute(cPath, cssAttrs[cPath]);\n }\n\n fontSize = parentFontSize = parentAttributes.fontSize || fabric.Text.DEFAULT_SVG_FONT_SIZE;\n\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n ownAttributes[fSize] = fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n }\n\n var normalizedAttr,\n normalizedValue,\n normalizedStyle = {};\n\n for (var attr in ownAttributes) {\n normalizedAttr = normalizeAttr(attr);\n normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize);\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n\n if (normalizedStyle && normalizedStyle.font) {\n fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle);\n }\n\n var mergedAttrs = extend(parentAttributes, normalizedStyle);\n return fabric.svgValidParentsRegEx.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs);\n },\n\n /**\n * Transforms an array of svg elements to corresponding fabric.* instances\n * @static\n * @memberOf fabric\n * @param {Array} elements Array of elements to parse\n * @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)\n * @param {Object} [options] Options object\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n */\n parseElements: function parseElements(elements, callback, options, reviver, parsingOptions) {\n new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse();\n },\n\n /**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\n parseStyleAttribute: function parseStyleAttribute(element) {\n var oStyle = {},\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n } else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n },\n\n /**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\n parsePointsAttribute: function parsePointsAttribute(points) {\n // points attribute is required and must not be empty\n if (!points) {\n return null;\n } // replace commas with whitespace and remove bookending whitespace\n\n\n points = points.replace(/,/g, ' ').trim();\n points = points.split(/\\s+/);\n var parsedPoints = [],\n i,\n len;\n\n for (i = 0, len = points.length; i < len; i += 2) {\n parsedPoints.push({\n x: parseFloat(points[i]),\n y: parseFloat(points[i + 1])\n });\n } // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n\n\n return parsedPoints;\n },\n\n /**\n * Returns CSS rules for a given SVG document\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\n getCSSRules: function getCSSRules(doc) {\n var styles = doc.getElementsByTagName('style'),\n i,\n len,\n allRules = {},\n rules; // very crude parsing of style contents\n\n for (i = 0, len = styles.length; i < len; i++) {\n // \\n'].join('');\n }\n\n return markup;\n },\n\n /**\n * @private\n */\n _setSVGObjects: function _setSVGObjects(markup, reviver) {\n var instance,\n i,\n len,\n objects = this._objects;\n\n for (i = 0, len = objects.length; i < len; i++) {\n instance = objects[i];\n\n if (instance.excludeFromExport) {\n continue;\n }\n\n this._setSVGObject(markup, instance, reviver);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function _setSVGObject(markup, instance, reviver) {\n markup.push(instance.toSVG(reviver));\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayImage: function _setSVGBgOverlayImage(markup, property, reviver) {\n if (this[property] && !this[property].excludeFromExport && this[property].toSVG) {\n markup.push(this[property].toSVG(reviver));\n }\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayColor: function _setSVGBgOverlayColor(markup, property) {\n var filler = this[property + 'Color'],\n vpt = this.viewportTransform,\n finalWidth = this.width,\n finalHeight = this.height;\n\n if (!filler) {\n return;\n }\n\n if (filler.toLive) {\n var repeat = filler.repeat,\n iVpt = fabric.util.invertTransform(vpt),\n shouldInvert = this[property + 'Vpt'],\n additionalTransform = shouldInvert ? fabric.util.matrixToSVG(iVpt) : '';\n markup.push('\\n');\n } else {\n markup.push('\\n');\n }\n },\n\n /* _TO_SVG_END_ */\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendToBack: function sendToBack(object) {\n if (!object) {\n return this;\n }\n\n var activeSelection = this._activeObject,\n i,\n obj,\n objs;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n\n for (i = objs.length; i--;) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n\n this._objects.unshift(obj);\n }\n } else {\n removeFromArray(this._objects, object);\n\n this._objects.unshift(object);\n }\n\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringToFront: function bringToFront(object) {\n if (!object) {\n return this;\n }\n\n var activeSelection = this._activeObject,\n i,\n obj,\n objs;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n\n this._objects.push(obj);\n }\n } else {\n removeFromArray(this._objects, object);\n\n this._objects.push(object);\n }\n\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional paramter, intersecting allowes to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendBackwards: function sendBackwards(object, intersecting) {\n if (!object) {\n return this;\n }\n\n var activeSelection = this._activeObject,\n i,\n obj,\n idx,\n newIdx,\n objs,\n objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n\n if (idx > 0 + objsMoved) {\n newIdx = idx - 1;\n removeFromArray(this._objects, obj);\n\n this._objects.splice(newIdx, 0, obj);\n }\n\n objsMoved++;\n }\n } else {\n idx = this._objects.indexOf(object);\n\n if (idx !== 0) {\n // if object is not on the bottom of stack\n newIdx = this._findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n\n this._objects.splice(newIdx, 0, object);\n }\n }\n\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewLowerIndex: function _findNewLowerIndex(object, idx, intersecting) {\n var newIdx, i;\n\n if (intersecting) {\n newIdx = idx; // traverse down the stack looking for the nearest intersecting object\n\n for (i = idx - 1; i >= 0; --i) {\n var isIntersecting = object.intersectsWithObject(this._objects[i]) || object.isContainedWithinObject(this._objects[i]) || this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional paramter, intersecting allowes to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringForward: function bringForward(object, intersecting) {\n if (!object) {\n return this;\n }\n\n var activeSelection = this._activeObject,\n i,\n obj,\n idx,\n newIdx,\n objs,\n objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n\n for (i = objs.length; i--;) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n\n if (idx < this._objects.length - 1 - objsMoved) {\n newIdx = idx + 1;\n removeFromArray(this._objects, obj);\n\n this._objects.splice(newIdx, 0, obj);\n }\n\n objsMoved++;\n }\n } else {\n idx = this._objects.indexOf(object);\n\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n newIdx = this._findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n\n this._objects.splice(newIdx, 0, object);\n }\n }\n\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewUpperIndex: function _findNewUpperIndex(object, idx, intersecting) {\n var newIdx, i, len;\n\n if (intersecting) {\n newIdx = idx; // traverse up the stack looking for the nearest intersecting object\n\n for (i = idx + 1, len = this._objects.length; i < len; ++i) {\n var isIntersecting = object.intersectsWithObject(this._objects[i]) || object.isContainedWithinObject(this._objects[i]) || this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {Number} index Position to move to\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n moveTo: function moveTo(object, index) {\n removeFromArray(this._objects, object);\n\n this._objects.splice(index, 0, object);\n\n return this.renderOnAddRemove && this.requestRenderAll();\n },\n\n /**\n * Clears a canvas element and dispose objects\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function dispose() {\n // cancel eventually ongoing renders\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n\n this.forEachObject(function (object) {\n object.dispose && object.dispose();\n });\n this._objects = [];\n\n if (this.backgroundImage && this.backgroundImage.dispose) {\n this.backgroundImage.dispose();\n }\n\n this.backgroundImage = null;\n\n if (this.overlayImage && this.overlayImage.dispose) {\n this.overlayImage.dispose();\n }\n\n this.overlayImage = null;\n this._iTextInstances = null;\n this.contextContainer = null;\n fabric.util.cleanUpJsdomNode(this.lowerCanvasEl);\n this.lowerCanvasEl = undefined;\n return this;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function toString() {\n return '#';\n }\n });\n extend(fabric.StaticCanvas.prototype, fabric.Observable);\n extend(fabric.StaticCanvas.prototype, fabric.Collection);\n extend(fabric.StaticCanvas.prototype, fabric.DataURLExporter);\n extend(fabric.StaticCanvas,\n /** @lends fabric.StaticCanvas */\n {\n /**\n * @static\n * @type String\n * @default\n */\n EMPTY_JSON: '{\"objects\": [], \"background\": \"white\"}',\n\n /**\n * Provides a way to check support of some of the canvas methods\n * (either those of HTMLCanvasElement itself, or rendering context)\n *\n * @param {String} methodName Method to check support for;\n * Could be one of \"setLineDash\"\n * @return {Boolean | null} `true` if method is supported (or at least exists),\n * `null` if canvas element or context can not be initialized\n */\n supports: function supports(methodName) {\n var el = createCanvasElement();\n\n if (!el || !el.getContext) {\n return null;\n }\n\n var ctx = el.getContext('2d');\n\n if (!ctx) {\n return null;\n }\n\n switch (methodName) {\n case 'setLineDash':\n return typeof ctx.setLineDash !== 'undefined';\n\n default:\n return null;\n }\n }\n });\n /**\n * Returns JSON representation of canvas\n * @function\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} JSON string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY', 'lockUniScaling']);\n * @example JSON without default values\n * canvas.includeDefaultValues = false;\n * var json = canvas.toJSON();\n */\n\n fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject;\n\n if (fabric.isLikelyNode) {\n fabric.StaticCanvas.prototype.createPNGStream = function () {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createPNGStream();\n };\n\n fabric.StaticCanvas.prototype.createJPEGStream = function (opts) {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createJPEGStream(opts);\n };\n }\n})();\n/**\n * BaseBrush class\n * @class fabric.BaseBrush\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\n\n\nfabric.BaseBrush = fabric.util.createClass(\n/** @lends fabric.BaseBrush.prototype */\n{\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color: 'rgb(0, 0, 0)',\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width: 1,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'round',\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'round',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit: 10,\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: null,\n\n /**\n * Sets shadow of an object\n * @param {Object|String} [options] Options object or string (e.g. \"2px 2px 10px rgba(0,0,0,0.2)\")\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setShadow: function setShadow(options) {\n this.shadow = new fabric.Shadow(options);\n return this;\n },\n\n /**\n * Sets brush styles\n * @private\n */\n _setBrushStyles: function _setBrushStyles() {\n var ctx = this.canvas.contextTop;\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n\n if (fabric.StaticCanvas.supports('setLineDash')) {\n ctx.setLineDash(this.strokeDashArray || []);\n }\n },\n\n /**\n * Sets the transformation on given context\n * @param {RenderingContext2d} ctx context to render on\n * @private\n */\n _saveAndTransform: function _saveAndTransform(ctx) {\n var v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n },\n\n /**\n * Sets brush shadow styles\n * @private\n */\n _setShadow: function _setShadow() {\n if (!this.shadow) {\n return;\n }\n\n var canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom();\n\n if (canvas && canvas._isRetinaScaling()) {\n zoom *= fabric.devicePixelRatio;\n }\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n },\n needsFullRender: function needsFullRender() {\n var color = new fabric.Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n },\n\n /**\n * Removes brush shadow styles\n * @private\n */\n _resetShadow: function _resetShadow() {\n var ctx = this.canvas.contextTop;\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n});\n\n(function () {\n /**\n * PencilBrush class\n * @class fabric.PencilBrush\n * @extends fabric.BaseBrush\n */\n fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush,\n /** @lends fabric.PencilBrush.prototype */\n {\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate: 0.4,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.PencilBrush} Instance of a pencil brush\n */\n initialize: function initialize(canvas) {\n this.canvas = canvas;\n this._points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n _drawSegment: function _drawSegment(ctx, p1, p2) {\n var midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n },\n\n /**\n * Inovoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function onMouseDown(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n\n this._prepareForDrawing(pointer); // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n\n\n this._captureDrawingPath(pointer);\n\n this._render();\n },\n\n /**\n * Inovoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function onMouseMove(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n\n if (this._captureDrawingPath(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n\n this._render();\n } else {\n var points = this._points,\n length = points.length,\n ctx = this.canvas.contextTop; // draw the curve update\n\n this._saveAndTransform(ctx);\n\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n\n this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);\n ctx.stroke();\n ctx.restore();\n }\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function onMouseUp(options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return true;\n }\n\n this.oldEnd = undefined;\n\n this._finalizeAndAddPath();\n\n return false;\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing: function _prepareForDrawing(pointer) {\n var p = new fabric.Point(pointer.x, pointer.y);\n\n this._reset();\n\n this._addPoint(p);\n\n this.canvas.contextTop.moveTo(p.x, p.y);\n },\n\n /**\n * @private\n * @param {fabric.Point} point Point to be added to points array\n */\n _addPoint: function _addPoint(point) {\n if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {\n return false;\n }\n\n this._points.push(point);\n\n return true;\n },\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset: function _reset() {\n this._points = [];\n\n this._setBrushStyles();\n\n this._setShadow();\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _captureDrawingPath: function _captureDrawingPath(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y);\n return this._addPoint(pointerPoint);\n },\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n */\n _render: function _render() {\n var ctx = this.canvas.contextTop,\n i,\n len,\n p1 = this._points[0],\n p2 = this._points[1];\n\n this._saveAndTransform(ctx);\n\n ctx.beginPath(); //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n var width = this.width / 1000;\n p1 = new fabric.Point(p1.x, p1.y);\n p2 = new fabric.Point(p2.x, p2.y);\n p1.x -= width;\n p2.x += width;\n }\n\n ctx.moveTo(p1.x, p1.y);\n\n for (i = 1, len = this._points.length; i < len; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n this._drawSegment(ctx, p1, p2);\n\n p1 = this._points[i];\n p2 = this._points[i + 1];\n } // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n\n\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * Converts points to SVG path\n * @param {Array} points Array of points\n * @return {String} SVG path\n */\n convertPointsToSVGPath: function convertPointsToSVGPath(points) {\n var path = [],\n i,\n width = this.width / 1000,\n p1 = new fabric.Point(points[0].x, points[0].y),\n p2 = new fabric.Point(points[1].x, points[1].y),\n len = points.length,\n multSignX = 1,\n multSignY = 0,\n manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n\n path.push('M ', p1.x - multSignX * width, ' ', p1.y - multSignY * width, ' ');\n\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n var midPoint = p1.midPointFrom(p2); // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n\n path.push('Q ', p1.x, ' ', p1.y, ' ', midPoint.x, ' ', midPoint.y, ' ');\n }\n\n p1 = points[i];\n\n if (i + 1 < points.length) {\n p2 = points[i + 1];\n }\n }\n\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n\n path.push('L ', p1.x + multSignX * width, ' ', p1.y + multSignY * width);\n return path;\n },\n\n /**\n * Creates fabric.Path object to add on canvas\n * @param {String} pathData Path data\n * @return {fabric.Path} Path to add on canvas\n */\n createPath: function createPath(pathData) {\n var path = new fabric.Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray\n });\n\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.setShadow(this.shadow);\n }\n\n return path;\n },\n\n /**\n * Decimate poins array with the decimate value\n */\n decimatePoints: function decimatePoints(points, distance) {\n if (points.length <= 2) {\n return points;\n }\n\n var zoom = this.canvas.getZoom(),\n adjustedDistance = Math.pow(distance / zoom, 2),\n i,\n l = points.length - 1,\n lastPoint = points[0],\n newPoints = [lastPoint],\n cDistance;\n\n for (i = 1; i < l; i++) {\n cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);\n\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n\n if (newPoints.length === 1) {\n newPoints.push(new fabric.Point(newPoints[0].x, newPoints[0].y));\n }\n\n return newPoints;\n },\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new fabric path object\n * and add it to the fabric canvas.\n */\n _finalizeAndAddPath: function _finalizeAndAddPath() {\n var ctx = this.canvas.contextTop;\n ctx.closePath();\n\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n\n var pathData = this.convertPointsToSVGPath(this._points).join('');\n\n if (pathData === 'M 0 0 Q 0 0 0 0 L 0 0') {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n var path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n\n this._resetShadow(); // fire event 'path' created\n\n\n this.canvas.fire('path:created', {\n path: path\n });\n }\n });\n})();\n/**\n * CircleBrush class\n * @class fabric.CircleBrush\n */\n\n\nfabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush,\n/** @lends fabric.CircleBrush.prototype */\n{\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.CircleBrush} Instance of a circle brush\n */\n initialize: function initialize(canvas) {\n this.canvas = canvas;\n this.points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n drawDot: function drawDot(pointer) {\n var point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n\n this._saveAndTransform(ctx);\n\n this.dot(ctx, point);\n ctx.restore();\n },\n dot: function dot(ctx, point) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n },\n\n /**\n * Invoked on mouse down\n */\n onMouseDown: function onMouseDown(pointer) {\n this.points.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n\n this._setShadow();\n\n this.drawDot(pointer);\n },\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render: function _render() {\n var ctx = this.canvas.contextTop,\n i,\n len,\n points = this.points;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, len = points.length; i < len; i++) {\n this.dot(ctx, points[i]);\n }\n\n ctx.restore();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function onMouseMove(pointer) {\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n\n this._render();\n } else {\n this.drawDot(pointer);\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function onMouseUp() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove,\n i,\n len;\n this.canvas.renderOnAddRemove = false;\n var circles = [];\n\n for (i = 0, len = this.points.length; i < len; i++) {\n var point = this.points[i],\n circle = new fabric.Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: point.fill\n });\n this.shadow && circle.setShadow(this.shadow);\n circles.push(circle);\n }\n\n var group = new fabric.Group(circles);\n group.canvas = this.canvas;\n this.canvas.add(group);\n this.canvas.fire('path:created', {\n path: group\n });\n this.canvas.clearContext(this.canvas.contextTop);\n\n this._resetShadow();\n\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @param {Object} pointer\n * @return {fabric.Point} Just added pointer point\n */\n addPoint: function addPoint(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y),\n circleRadius = fabric.util.getRandomInt(Math.max(0, this.width - 20), this.width + 20) / 2,\n circleColor = new fabric.Color(this.color).setAlpha(fabric.util.getRandomInt(0, 100) / 100).toRgba();\n pointerPoint.radius = circleRadius;\n pointerPoint.fill = circleColor;\n this.points.push(pointerPoint);\n return pointerPoint;\n }\n});\n/**\n * SprayBrush class\n * @class fabric.SprayBrush\n */\n\nfabric.SprayBrush = fabric.util.createClass(fabric.BaseBrush,\n/** @lends fabric.SprayBrush.prototype */\n{\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density: 20,\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth: 1,\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance: 1,\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity: false,\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping: true,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.SprayBrush} Instance of a spray brush\n */\n initialize: function initialize(canvas) {\n this.canvas = canvas;\n this.sprayChunks = [];\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function onMouseDown(pointer) {\n this.sprayChunks.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function onMouseMove(pointer) {\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function onMouseUp() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n var rects = [];\n\n for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n var sprayChunk = this.sprayChunks[i];\n\n for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) {\n var rect = new fabric.Rect({\n width: sprayChunk[j].width,\n height: sprayChunk[j].width,\n left: sprayChunk[j].x + 1,\n top: sprayChunk[j].y + 1,\n originX: 'center',\n originY: 'center',\n fill: this.color\n });\n rects.push(rect);\n }\n }\n\n if (this.optimizeOverlapping) {\n rects = this._getOptimizedRects(rects);\n }\n\n var group = new fabric.Group(rects);\n this.shadow && group.setShadow(this.shadow);\n this.canvas.add(group);\n this.canvas.fire('path:created', {\n path: group\n });\n this.canvas.clearContext(this.canvas.contextTop);\n\n this._resetShadow();\n\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @private\n * @param {Array} rects\n */\n _getOptimizedRects: function _getOptimizedRects(rects) {\n // avoid creating duplicate rects at the same coordinates\n var uniqueRects = {},\n key,\n i,\n len;\n\n for (i = 0, len = rects.length; i < len; i++) {\n key = rects[i].left + '' + rects[i].top;\n\n if (!uniqueRects[key]) {\n uniqueRects[key] = rects[i];\n }\n }\n\n var uniqueRectsArray = [];\n\n for (key in uniqueRects) {\n uniqueRectsArray.push(uniqueRects[key]);\n }\n\n return uniqueRectsArray;\n },\n\n /**\n * Render new chunk of spray brush\n */\n render: function render(sprayChunk) {\n var ctx = this.canvas.contextTop,\n i,\n len;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, len = sprayChunk.length; i < len; i++) {\n var point = sprayChunk[i];\n\n if (typeof point.opacity !== 'undefined') {\n ctx.globalAlpha = point.opacity;\n }\n\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n\n ctx.restore();\n },\n\n /**\n * Render all spray chunks\n */\n _render: function _render() {\n var ctx = this.canvas.contextTop,\n i,\n ilen;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n this.render(this.sprayChunks[i]);\n }\n\n ctx.restore();\n },\n\n /**\n * @param {Object} pointer\n */\n addSprayChunk: function addSprayChunk(pointer) {\n this.sprayChunkPoints = [];\n var x,\n y,\n width,\n radius = this.width / 2,\n i;\n\n for (i = 0; i < this.density; i++) {\n x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius);\n y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius);\n\n if (this.dotWidthVariance) {\n width = fabric.util.getRandomInt( // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance), this.dotWidth + this.dotWidthVariance);\n } else {\n width = this.dotWidth;\n }\n\n var point = new fabric.Point(x, y);\n point.width = width;\n\n if (this.randomOpacity) {\n point.opacity = fabric.util.getRandomInt(0, 100) / 100;\n }\n\n this.sprayChunkPoints.push(point);\n }\n\n this.sprayChunks.push(this.sprayChunkPoints);\n }\n});\n/**\n * PatternBrush class\n * @class fabric.PatternBrush\n * @extends fabric.BaseBrush\n */\n\nfabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush,\n/** @lends fabric.PatternBrush.prototype */\n{\n getPatternSrc: function getPatternSrc() {\n var dotWidth = 20,\n dotDistance = 5,\n patternCanvas = fabric.util.createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);\n patternCtx.closePath();\n patternCtx.fill();\n return patternCanvas;\n },\n getPatternSrcFunction: function getPatternSrcFunction() {\n return String(this.getPatternSrc).replace('this.color', '\"' + this.color + '\"');\n },\n\n /**\n * Creates \"pattern\" instance property\n */\n getPattern: function getPattern() {\n return this.canvas.contextTop.createPattern(this.source || this.getPatternSrc(), 'repeat');\n },\n\n /**\n * Sets brush styles\n */\n _setBrushStyles: function _setBrushStyles() {\n this.callSuper('_setBrushStyles');\n this.canvas.contextTop.strokeStyle = this.getPattern();\n },\n\n /**\n * Creates path\n */\n createPath: function createPath(pathData) {\n var path = this.callSuper('createPath', pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new fabric.Pattern({\n source: this.source || this.getPatternSrcFunction(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y\n });\n return path;\n }\n});\n\n(function () {\n var _getPointer = fabric.util.getPointer,\n degreesToRadians = fabric.util.degreesToRadians,\n radiansToDegrees = fabric.util.radiansToDegrees,\n atan2 = Math.atan2,\n abs = Math.abs,\n supportLineDash = fabric.StaticCanvas.supports('setLineDash'),\n STROKE_OFFSET = 0.5;\n /**\n * Canvas class\n * @class fabric.Canvas\n * @extends fabric.StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n * @see {@link fabric.Canvas#initialize} for constructor definition\n *\n * @fires object:modified at the end of a transform or any change when statefull is true\n * @fires object:rotated at the end of a rotation transform\n * @fires object:scaled at the end of a scale transform\n * @fires object:moved at the end of translation transform\n * @fires object:skewed at the end of a skew transform\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n * @fires object:selected this event is deprecated. use selection:created\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n */\n\n fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas,\n /** @lends fabric.Canvas.prototype */\n {\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function initialize(el, options) {\n options || (options = {});\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n\n this._initStatic(el, options);\n\n this._initInteractive();\n\n this._createCacheCanvas();\n },\n\n /**\n * When true, objects can be transformed by one side (unproportionally)\n * @type Boolean\n * @default\n */\n uniScaleTransform: false,\n\n /**\n * Indicates which key enable unproportional scaling\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n uniScaleKey: 'shiftKey',\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: false,\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n centeredKey: 'altKey',\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n altActionKey: 'shiftKey',\n\n /**\n * Indicates that canvas is interactive. This property should not be changed.\n * @type Boolean\n * @default\n */\n interactive: true,\n\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: true,\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type String|Array\n * @default\n */\n selectionKey: 'shiftKey',\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|String\n * @default\n */\n altSelectionKey: null,\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(100, 100, 255, 0.3)',\n // blue\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: [],\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: 1,\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: false,\n\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type String\n * @default\n */\n hoverCursor: 'move',\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type String\n * @default\n */\n moveCursor: 'move',\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default\n */\n defaultCursor: 'default',\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default\n */\n freeDrawingCursor: 'crosshair',\n\n /**\n * Cursor value used for rotation point\n * @type String\n * @default\n */\n rotationCursor: 'crosshair',\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default\n */\n notAllowedCursor: 'not-allowed',\n\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n */\n containerClass: 'canvas-container',\n\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: 0,\n\n /**\n * When true, target detection is skipped when hovering over canvas. This can be used to improve performance.\n * @type Boolean\n * @default\n */\n skipTargetFind: false,\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n isDrawingMode: false,\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: false,\n\n /**\n * Indicates the angle that an object will lock to while rotating.\n * @type Number\n * @since 1.6.7\n * @default\n */\n snapAngle: 0,\n\n /**\n * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.\n * When `null`, the snapThreshold will default to the snapAngle.\n * @type null|Number\n * @since 1.6.7\n * @default\n */\n snapThreshold: null,\n\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: false,\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: false,\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: false,\n\n /**\n * Keep track of the subTargets for Mouse Events\n * @type fabric.Object[]\n */\n targets: [],\n\n /**\n * Keep track of the hovered target\n * @type fabric.Object\n * @private\n */\n _hoveredTarget: null,\n\n /**\n * hold the list of nested targets hovered\n * @type fabric.Object[]\n * @private\n */\n _hoveredTargets: [],\n\n /**\n * @private\n */\n _initInteractive: function _initInteractive() {\n this._currentTransform = null;\n this._groupSelector = null;\n\n this._initWrapperElement();\n\n this._createUpperCanvas();\n\n this._initEventListeners();\n\n this._initRetinaScaling();\n\n this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);\n this.calcOffset();\n },\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender: function _chooseObjectsToRender() {\n var activeObjects = this.getActiveObjects(),\n object,\n objsToRender,\n activeGroupObjects;\n\n if (activeObjects.length > 0 && !this.preserveObjectStacking) {\n objsToRender = [];\n activeGroupObjects = [];\n\n for (var i = 0, length = this._objects.length; i < length; i++) {\n object = this._objects[i];\n\n if (activeObjects.indexOf(object) === -1) {\n objsToRender.push(object);\n } else {\n activeGroupObjects.push(object);\n }\n }\n\n if (activeObjects.length > 1) {\n this._activeObject._objects = activeGroupObjects;\n }\n\n objsToRender.push.apply(objsToRender, activeGroupObjects);\n } else {\n objsToRender = this._objects;\n }\n\n return objsToRender;\n },\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function renderAll() {\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n }\n\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());\n return this;\n },\n renderTopLayer: function renderTopLayer(ctx) {\n ctx.save();\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n } // we render the top context - last object\n\n\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n\n this.contextTopDirty = true;\n }\n\n ctx.restore();\n },\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n renderTop: function renderTop() {\n var ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n this.fire('after:render');\n return this;\n },\n\n /**\n * Resets the current transform to its original values and chooses the type of resizing based on the event\n * @private\n */\n _resetCurrentTransform: function _resetCurrentTransform() {\n var t = this._currentTransform;\n t.target.set({\n scaleX: t.original.scaleX,\n scaleY: t.original.scaleY,\n skewX: t.original.skewX,\n skewY: t.original.skewY,\n left: t.original.left,\n top: t.original.top\n });\n\n if (this._shouldCenterTransform(t.target)) {\n if (t.originX !== 'center') {\n if (t.originX === 'right') {\n t.mouseXSign = -1;\n } else {\n t.mouseXSign = 1;\n }\n }\n\n if (t.originY !== 'center') {\n if (t.originY === 'bottom') {\n t.mouseYSign = -1;\n } else {\n t.mouseYSign = 1;\n }\n }\n\n t.originX = 'center';\n t.originY = 'center';\n } else {\n t.originX = t.original.originX;\n t.originY = t.original.originY;\n }\n },\n\n /**\n * Checks if point is contained within an area of given object\n * @param {Event} e Event object\n * @param {fabric.Object} target Object to test against\n * @param {Object} [point] x,y object of point coordinates we want to check.\n * @return {Boolean} true if point is contained within an area of given object\n */\n containsPoint: function containsPoint(e, target, point) {\n var ignoreZoom = true,\n pointer = point || this.getPointer(e, ignoreZoom),\n xy;\n\n if (target.group && target.group === this._activeObject && target.group.type === 'activeSelection') {\n xy = this._normalizePointer(target.group, pointer);\n } else {\n xy = {\n x: pointer.x,\n y: pointer.y\n };\n } // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\n // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\n\n\n return target.containsPoint(xy) || target._findTargetCorner(pointer);\n },\n\n /**\n * @private\n */\n _normalizePointer: function _normalizePointer(object, pointer) {\n var m = object.calcTransformMatrix(),\n invertedM = fabric.util.invertTransform(m),\n vptPointer = this.restorePointerVpt(pointer);\n return fabric.util.transformPoint(vptPointer, invertedM);\n },\n\n /**\n * Returns true if object is transparent at a certain location\n * @param {fabric.Object} target Object to check\n * @param {Number} x Left coordinate\n * @param {Number} y Top coordinate\n * @return {Boolean}\n */\n isTargetTransparent: function isTargetTransparent(target, x, y) {\n // in case the target is the activeObject, we cannot execute this optimization\n // because we need to draw controls too.\n if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {\n var normalizedPointer = this._normalizePointer(target, {\n x: x,\n y: y\n }),\n targetRelativeX = Math.max(target.cacheTranslationX + normalizedPointer.x * target.zoomX, 0),\n targetRelativeY = Math.max(target.cacheTranslationY + normalizedPointer.y * target.zoomY, 0);\n\n var isTransparent = fabric.util.isTransparent(target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);\n return isTransparent;\n }\n\n var ctx = this.contextCache,\n originalColor = target.selectionBackgroundColor,\n v = this.viewportTransform;\n target.selectionBackgroundColor = '';\n this.clearContext(ctx);\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n target.render(ctx);\n ctx.restore();\n target === this._activeObject && target._renderControls(ctx, {\n hasBorders: false,\n transparentCorners: false\n }, {\n hasBorders: false\n });\n target.selectionBackgroundColor = originalColor;\n var isTransparent = fabric.util.isTransparent(ctx, x, y, this.targetFindTolerance);\n return isTransparent;\n },\n\n /**\n * takes an event and determins if selection key has been pressed\n * @private\n * @param {Event} e Event object\n */\n _isSelectionKeyPressed: function _isSelectionKeyPressed(e) {\n var selectionKeyPressed = false;\n\n if (Object.prototype.toString.call(this.selectionKey) === '[object Array]') {\n selectionKeyPressed = !!this.selectionKey.find(function (key) {\n return e[key] === true;\n });\n } else {\n selectionKeyPressed = e[this.selectionKey];\n }\n\n return selectionKeyPressed;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _shouldClearSelection: function _shouldClearSelection(e, target) {\n var activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n return !target || target && activeObject && activeObjects.length > 1 && activeObjects.indexOf(target) === -1 && activeObject !== target && !this._isSelectionKeyPressed(e) || target && !target.evented || target && !target.selectable && activeObject && activeObject !== target;\n },\n\n /**\n * centeredScaling from object can't override centeredScaling from canvas.\n * this should be fixed, since object setting should take precedence over canvas.\n * @private\n * @param {fabric.Object} target\n */\n _shouldCenterTransform: function _shouldCenterTransform(target) {\n if (!target) {\n return;\n }\n\n var t = this._currentTransform,\n centerTransform;\n\n if (t.action === 'scale' || t.action === 'scaleX' || t.action === 'scaleY') {\n centerTransform = this.centeredScaling || target.centeredScaling;\n } else if (t.action === 'rotate') {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !t.altKey : t.altKey;\n },\n\n /**\n * @private\n */\n _getOriginFromCorner: function _getOriginFromCorner(target, corner) {\n var origin = {\n x: target.originX,\n y: target.originY\n };\n\n if (corner === 'ml' || corner === 'tl' || corner === 'bl') {\n origin.x = 'right';\n } else if (corner === 'mr' || corner === 'tr' || corner === 'br') {\n origin.x = 'left';\n }\n\n if (corner === 'tl' || corner === 'mt' || corner === 'tr') {\n origin.y = 'bottom';\n } else if (corner === 'bl' || corner === 'mb' || corner === 'br') {\n origin.y = 'top';\n }\n\n return origin;\n },\n\n /**\n * @private\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {fabric.Object} [target] inserted back to help overriding. Unused\n */\n _getActionFromCorner: function _getActionFromCorner(alreadySelected, corner, e\n /* target */\n ) {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n\n switch (corner) {\n case 'mtr':\n return 'rotate';\n\n case 'ml':\n case 'mr':\n return e[this.altActionKey] ? 'skewY' : 'scaleX';\n\n case 'mt':\n case 'mb':\n return e[this.altActionKey] ? 'skewX' : 'scaleY';\n\n default:\n return 'scale';\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _setupCurrentTransform: function _setupCurrentTransform(e, target, alreadySelected) {\n if (!target) {\n return;\n }\n\n var pointer = this.getPointer(e),\n corner = target._findTargetCorner(this.getPointer(e, true)),\n action = this._getActionFromCorner(alreadySelected, corner, e, target),\n origin = this._getOriginFromCorner(target, corner);\n\n this._currentTransform = {\n target: target,\n action: action,\n corner: corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n // used by transation\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n // unsure they are usefull anymore.\n // left: target.left,\n // top: target.top,\n theta: degreesToRadians(target.angle),\n // end of unsure\n width: target.width * target.scaleX,\n mouseXSign: 1,\n mouseYSign: 1,\n shiftKey: e.shiftKey,\n altKey: e[this.centeredKey],\n original: fabric.util.saveObjectTransform(target)\n };\n this._currentTransform.original.originX = origin.x;\n this._currentTransform.original.originY = origin.y;\n\n this._resetCurrentTransform();\n\n this._beforeTransform(e);\n },\n\n /**\n * Translates object by \"setting\" its left/top\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @return {Boolean} true if the translation occurred\n */\n _translateObject: function _translateObject(x, y) {\n var transform = this._currentTransform,\n target = transform.target,\n newLeft = x - transform.offsetX,\n newTop = y - transform.offsetY,\n moveX = !target.get('lockMovementX') && target.left !== newLeft,\n moveY = !target.get('lockMovementY') && target.top !== newTop;\n moveX && target.set('left', newLeft);\n moveY && target.set('top', newTop);\n return moveX || moveY;\n },\n\n /**\n * Check if we are increasing a positive skew or lower it,\n * checking mouse direction and pressed corner.\n * @private\n */\n _changeSkewTransformOrigin: function _changeSkewTransformOrigin(mouseMove, t, by) {\n var property = 'originX',\n origins = {\n 0: 'center'\n },\n skew = t.target.skewX,\n originA = 'left',\n originB = 'right',\n corner = t.corner === 'mt' || t.corner === 'ml' ? 1 : -1,\n flipSign = 1;\n mouseMove = mouseMove > 0 ? 1 : -1;\n\n if (by === 'y') {\n skew = t.target.skewY;\n originA = 'top';\n originB = 'bottom';\n property = 'originY';\n }\n\n origins[-1] = originA;\n origins[1] = originB;\n t.target.flipX && (flipSign *= -1);\n t.target.flipY && (flipSign *= -1);\n\n if (skew === 0) {\n t.skewSign = -corner * mouseMove * flipSign;\n t[property] = origins[-mouseMove];\n } else {\n skew = skew > 0 ? 1 : -1;\n t.skewSign = skew;\n t[property] = origins[skew * corner * flipSign];\n }\n },\n\n /**\n * Skew object by mouse events\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @param {String} by Either 'x' or 'y'\n * @return {Boolean} true if the skewing occurred\n */\n _skewObject: function _skewObject(x, y, by) {\n var t = this._currentTransform,\n target = t.target,\n skewed = false,\n lockSkewingX = target.get('lockSkewingX'),\n lockSkewingY = target.get('lockSkewingY');\n\n if (lockSkewingX && by === 'x' || lockSkewingY && by === 'y') {\n return false;\n } // Get the constraint point\n\n\n var center = target.getCenterPoint(),\n actualMouseByCenter = target.toLocalPoint(new fabric.Point(x, y), 'center', 'center')[by],\n lastMouseByCenter = target.toLocalPoint(new fabric.Point(t.lastX, t.lastY), 'center', 'center')[by],\n actualMouseByOrigin,\n constraintPosition,\n dim = target._getTransformedDimensions();\n\n this._changeSkewTransformOrigin(actualMouseByCenter - lastMouseByCenter, t, by);\n\n actualMouseByOrigin = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY)[by];\n constraintPosition = target.translateToOriginPoint(center, t.originX, t.originY); // Actually skew the object\n\n skewed = this._setObjectSkew(actualMouseByOrigin, t, by, dim);\n t.lastX = x;\n t.lastY = y; // Make sure the constraints apply\n\n target.setPositionByOrigin(constraintPosition, t.originX, t.originY);\n return skewed;\n },\n\n /**\n * Set object skew\n * @private\n * @return {Boolean} true if the skewing occurred\n */\n _setObjectSkew: function _setObjectSkew(localMouse, transform, by, _dim) {\n var target = transform.target,\n newValue,\n skewed = false,\n skewSign = transform.skewSign,\n newDim,\n dimNoSkew,\n otherBy,\n _otherBy,\n _by,\n newDimMouse,\n skewX,\n skewY;\n\n if (by === 'x') {\n otherBy = 'y';\n _otherBy = 'Y';\n _by = 'X';\n skewX = 0;\n skewY = target.skewY;\n } else {\n otherBy = 'x';\n _otherBy = 'X';\n _by = 'Y';\n skewX = target.skewX;\n skewY = 0;\n }\n\n dimNoSkew = target._getTransformedDimensions(skewX, skewY);\n newDimMouse = 2 * Math.abs(localMouse) - dimNoSkew[by];\n\n if (newDimMouse <= 2) {\n newValue = 0;\n } else {\n newValue = skewSign * Math.atan(newDimMouse / target['scale' + _by] / (dimNoSkew[otherBy] / target['scale' + _otherBy]));\n newValue = fabric.util.radiansToDegrees(newValue);\n }\n\n skewed = target['skew' + _by] !== newValue;\n target.set('skew' + _by, newValue);\n\n if (target['skew' + _otherBy] !== 0) {\n newDim = target._getTransformedDimensions();\n newValue = _dim[otherBy] / newDim[otherBy] * target['scale' + _otherBy];\n target.set('scale' + _otherBy, newValue);\n }\n\n return skewed;\n },\n\n /**\n * Scales object by invoking its scaleX/scaleY methods\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @param {String} by Either 'x' or 'y' - specifies dimension constraint by which to scale an object.\n * When not provided, an object is scaled by both dimensions equally\n * @return {Boolean} true if the scaling occurred\n */\n _scaleObject: function _scaleObject(x, y, by) {\n var t = this._currentTransform,\n target = t.target,\n lockScalingX = target.lockScalingX,\n lockScalingY = target.lockScalingY,\n lockScalingFlip = target.lockScalingFlip;\n\n if (lockScalingX && lockScalingY) {\n return false;\n } // Get the constraint point\n\n\n var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY),\n localMouse = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY),\n dim = target._getTransformedDimensions(),\n scaled = false;\n\n this._setLocalMouse(localMouse, t); // Actually scale the object\n\n\n scaled = this._setObjectScale(localMouse, t, lockScalingX, lockScalingY, by, lockScalingFlip, dim); // Make sure the constraints apply\n\n target.setPositionByOrigin(constraintPosition, t.originX, t.originY);\n return scaled;\n },\n\n /**\n * @private\n * @return {Boolean} true if the scaling occurred\n */\n _setObjectScale: function _setObjectScale(localMouse, transform, lockScalingX, lockScalingY, by, lockScalingFlip, _dim) {\n var target = transform.target,\n forbidScalingX = false,\n forbidScalingY = false,\n scaled = false,\n scaleX = localMouse.x * target.scaleX / _dim.x,\n scaleY = localMouse.y * target.scaleY / _dim.y,\n changeX = target.scaleX !== scaleX,\n changeY = target.scaleY !== scaleY;\n transform.newScaleX = scaleX;\n transform.newScaleY = scaleY;\n\n if (fabric.Textbox && by === 'x' && target instanceof fabric.Textbox) {\n var w = target.width * (localMouse.x / _dim.x);\n\n if (w >= target.getMinWidth()) {\n scaled = w !== target.width;\n target.set('width', w);\n return scaled;\n }\n\n return false;\n }\n\n if (lockScalingFlip && scaleX <= 0 && scaleX < target.scaleX) {\n forbidScalingX = true;\n localMouse.x = 0;\n }\n\n if (lockScalingFlip && scaleY <= 0 && scaleY < target.scaleY) {\n forbidScalingY = true;\n localMouse.y = 0;\n }\n\n if (by === 'equally' && !lockScalingX && !lockScalingY) {\n scaled = this._scaleObjectEqually(localMouse, target, transform, _dim);\n } else if (!by) {\n forbidScalingX || lockScalingX || target.set('scaleX', scaleX) && (scaled = scaled || changeX);\n forbidScalingY || lockScalingY || target.set('scaleY', scaleY) && (scaled = scaled || changeY);\n } else if (by === 'x' && !target.get('lockUniScaling')) {\n forbidScalingX || lockScalingX || target.set('scaleX', scaleX) && (scaled = changeX);\n } else if (by === 'y' && !target.get('lockUniScaling')) {\n forbidScalingY || lockScalingY || target.set('scaleY', scaleY) && (scaled = changeY);\n }\n\n forbidScalingX || forbidScalingY || this._flipObject(transform, by);\n return scaled;\n },\n\n /**\n * @private\n * @return {Boolean} true if the scaling occurred\n */\n _scaleObjectEqually: function _scaleObjectEqually(localMouse, target, transform, _dim) {\n var dist = localMouse.y + localMouse.x,\n lastDist = _dim.y * transform.original.scaleY / target.scaleY + _dim.x * transform.original.scaleX / target.scaleX,\n scaled,\n signX = localMouse.x < 0 ? -1 : 1,\n signY = localMouse.y < 0 ? -1 : 1,\n newScaleX,\n newScaleY; // We use transform.scaleX/Y instead of target.scaleX/Y\n // because the object may have a min scale and we'll loose the proportions\n\n newScaleX = signX * Math.abs(transform.original.scaleX * dist / lastDist);\n newScaleY = signY * Math.abs(transform.original.scaleY * dist / lastDist);\n scaled = newScaleX !== target.scaleX || newScaleY !== target.scaleY;\n target.set('scaleX', newScaleX);\n target.set('scaleY', newScaleY);\n return scaled;\n },\n\n /**\n * @private\n */\n _flipObject: function _flipObject(transform, by) {\n if (transform.newScaleX < 0 && by !== 'y') {\n if (transform.originX === 'left') {\n transform.originX = 'right';\n } else if (transform.originX === 'right') {\n transform.originX = 'left';\n }\n }\n\n if (transform.newScaleY < 0 && by !== 'x') {\n if (transform.originY === 'top') {\n transform.originY = 'bottom';\n } else if (transform.originY === 'bottom') {\n transform.originY = 'top';\n }\n }\n },\n\n /**\n * @private\n */\n _setLocalMouse: function _setLocalMouse(localMouse, t) {\n var target = t.target,\n zoom = this.getZoom(),\n padding = target.padding / zoom;\n\n if (t.originX === 'right') {\n localMouse.x *= -1;\n } else if (t.originX === 'center') {\n localMouse.x *= t.mouseXSign * 2;\n\n if (localMouse.x < 0) {\n t.mouseXSign = -t.mouseXSign;\n }\n }\n\n if (t.originY === 'bottom') {\n localMouse.y *= -1;\n } else if (t.originY === 'center') {\n localMouse.y *= t.mouseYSign * 2;\n\n if (localMouse.y < 0) {\n t.mouseYSign = -t.mouseYSign;\n }\n } // adjust the mouse coordinates when dealing with padding\n\n\n if (abs(localMouse.x) > padding) {\n if (localMouse.x < 0) {\n localMouse.x += padding;\n } else {\n localMouse.x -= padding;\n }\n } else {\n // mouse is within the padding, set to 0\n localMouse.x = 0;\n }\n\n if (abs(localMouse.y) > padding) {\n if (localMouse.y < 0) {\n localMouse.y += padding;\n } else {\n localMouse.y -= padding;\n }\n } else {\n localMouse.y = 0;\n }\n },\n\n /**\n * Rotates object by invoking its rotate method\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @return {Boolean} true if the rotation occurred\n */\n _rotateObject: function _rotateObject(x, y) {\n var t = this._currentTransform,\n target = t.target,\n constraintPosition,\n constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);\n\n if (target.lockRotation) {\n return false;\n }\n\n var lastAngle = atan2(t.ey - constraintPosition.y, t.ex - constraintPosition.x),\n curAngle = atan2(y - constraintPosition.y, x - constraintPosition.x),\n angle = radiansToDegrees(curAngle - lastAngle + t.theta),\n hasRotated = true;\n\n if (target.snapAngle > 0) {\n var snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n } // normalize angle to positive value\n\n\n if (angle < 0) {\n angle = 360 + angle;\n }\n\n angle %= 360;\n\n if (target.angle === angle) {\n hasRotated = false;\n } else {\n // rotation only happen here\n target.angle = angle; // Make sure the constraints apply\n\n target.setPositionByOrigin(constraintPosition, t.originX, t.originY);\n }\n\n return hasRotated;\n },\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor: function setCursor(value) {\n this.upperCanvasEl.style.cursor = value;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection: function _drawSelection(ctx) {\n var groupSelector = this._groupSelector,\n left = groupSelector.left,\n top = groupSelector.top,\n aleft = abs(left),\n atop = abs(top);\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(groupSelector.ex - (left > 0 ? 0 : -left), groupSelector.ey - (top > 0 ? 0 : -top), aleft, atop);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor; // selection border\n\n if (this.selectionDashArray.length > 1 && !supportLineDash) {\n var px = groupSelector.ex + STROKE_OFFSET - (left > 0 ? 0 : aleft),\n py = groupSelector.ey + STROKE_OFFSET - (top > 0 ? 0 : atop);\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, px, py, px + aleft, py, this.selectionDashArray);\n fabric.util.drawDashedLine(ctx, px, py + atop - 1, px + aleft, py + atop - 1, this.selectionDashArray);\n fabric.util.drawDashedLine(ctx, px, py, px, py + atop, this.selectionDashArray);\n fabric.util.drawDashedLine(ctx, px + aleft - 1, py, px + aleft - 1, py + atop, this.selectionDashArray);\n ctx.closePath();\n ctx.stroke();\n } else {\n fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);\n\n ctx.strokeRect(groupSelector.ex + STROKE_OFFSET - (left > 0 ? 0 : aleft), groupSelector.ey + STROKE_OFFSET - (top > 0 ? 0 : atop), aleft, atop);\n }\n },\n\n /**\n * Method that determines what object we are clicking on\n * the skipGroup parameter is for internal use, is needed for shift+click action\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through\n * @return {fabric.Object} the target found\n */\n findTarget: function findTarget(e, skipGroup) {\n if (this.skipTargetFind) {\n return;\n }\n\n var ignoreZoom = true,\n pointer = this.getPointer(e, ignoreZoom),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects(),\n activeTarget,\n activeTargetSubs; // first check current group (if one exists)\n // active group does not check sub targets like normal groups.\n // if active group just exits.\n\n this.targets = [];\n\n if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n return activeObject;\n } // if we hit the corner of an activeObject, let's return that.\n\n\n if (aObjects.length === 1 && activeObject._findTargetCorner(pointer)) {\n return activeObject;\n }\n\n if (aObjects.length === 1 && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n if (!this.preserveObjectStacking) {\n return activeObject;\n } else {\n activeTarget = activeObject;\n activeTargetSubs = this.targets;\n this.targets = [];\n }\n }\n\n var target = this._searchPossibleTargets(this._objects, pointer);\n\n if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {\n target = activeTarget;\n this.targets = activeTargetSubs;\n }\n\n return target;\n },\n\n /**\n * Checks point is inside the object.\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @param {fabric.Object} obj Object to test against\n * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget: function _checkTarget(pointer, obj, globalPointer) {\n if (obj && obj.visible && obj.evented && this.containsPoint(null, obj, pointer)) {\n if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {\n var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);\n\n if (!isTransparent) {\n return true;\n }\n } else {\n return true;\n }\n }\n },\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {fabric.Object} object that contains pointer\n * @private\n */\n _searchPossibleTargets: function _searchPossibleTargets(objects, pointer) {\n // Cache all targets where their bounding box contains point.\n var target,\n i = objects.length,\n subTarget; // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n\n while (i--) {\n var objToCheck = objects[i];\n var pointerToUse = objToCheck.group && objToCheck.group.type !== 'activeSelection' ? this._normalizePointer(objToCheck.group, pointer) : pointer;\n\n if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\n target = objects[i];\n\n if (target.subTargetCheck && target instanceof fabric.Group) {\n subTarget = this._searchPossibleTargets(target._objects, pointer);\n subTarget && this.targets.push(subTarget);\n }\n\n break;\n }\n }\n\n return target;\n },\n\n /**\n * Returns pointer coordinates without the effect of the viewport\n * @param {Object} pointer with \"x\" and \"y\" number values\n * @return {Object} object with \"x\" and \"y\" number values\n */\n restorePointerVpt: function restorePointerVpt(pointer) {\n return fabric.util.transformPoint(pointer, fabric.util.invertTransform(this.viewportTransform));\n },\n\n /**\n * Returns pointer coordinates relative to canvas.\n * Can return coordinates with or without viewportTransform.\n * ignoreZoom false gives back coordinates that represent\n * the point clicked on canvas element.\n * ignoreZoom true gives back coordinates after being processed\n * by the viewportTransform ( sort of coordinates of what is displayed\n * on the canvas where you are clicking.\n * ignoreZoom true = HTMLElement coordinates relative to top,left\n * ignoreZoom false, default = fabric space coordinates, the same used for shape position\n * To interact with your shapes top and left you want to use ignoreZoom true\n * most of the time, while ignoreZoom false will give you coordinates\n * compatible with the object.oCoords system.\n * of the time.\n * @param {Event} e\n * @param {Boolean} ignoreZoom\n * @return {Object} object with \"x\" and \"y\" number values\n */\n getPointer: function getPointer(e, ignoreZoom) {\n // return cached values if we are in the event processing chain\n if (this._absolutePointer && !ignoreZoom) {\n return this._absolutePointer;\n }\n\n if (this._pointer && ignoreZoom) {\n return this._pointer;\n }\n\n var pointer = _getPointer(e),\n upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect(),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0,\n cssScale;\n\n if (!boundsWidth || !boundsHeight) {\n if ('top' in bounds && 'bottom' in bounds) {\n boundsHeight = Math.abs(bounds.top - bounds.bottom);\n }\n\n if ('right' in bounds && 'left' in bounds) {\n boundsWidth = Math.abs(bounds.right - bounds.left);\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n\n if (!ignoreZoom) {\n pointer = this.restorePointerVpt(pointer);\n }\n\n var retinaScaling = this.getRetinaScaling();\n\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n if (boundsWidth === 0 || boundsHeight === 0) {\n // If bounds are not available (i.e. not visible), do not apply scale.\n cssScale = {\n width: 1,\n height: 1\n };\n } else {\n cssScale = {\n width: upperCanvasEl.width / boundsWidth,\n height: upperCanvasEl.height / boundsHeight\n };\n }\n\n return {\n x: pointer.x * cssScale.width,\n y: pointer.y * cssScale.height\n };\n },\n\n /**\n * @private\n * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\n */\n _createUpperCanvas: function _createUpperCanvas() {\n var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\\s*lower-canvas\\s*/, ''),\n lowerCanvasEl = this.lowerCanvasEl,\n upperCanvasEl = this.upperCanvasEl; // there is no need to create a new upperCanvas element if we have already one.\n\n if (upperCanvasEl) {\n upperCanvasEl.className = '';\n } else {\n upperCanvasEl = this._createCanvasElement();\n this.upperCanvasEl = upperCanvasEl;\n }\n\n fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);\n this.wrapperEl.appendChild(upperCanvasEl);\n\n this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);\n\n this._applyCanvasStyle(upperCanvasEl);\n\n this.contextTop = upperCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _createCacheCanvas: function _createCacheCanvas() {\n this.cacheCanvasEl = this._createCanvasElement();\n this.cacheCanvasEl.setAttribute('width', this.width);\n this.cacheCanvasEl.setAttribute('height', this.height);\n this.contextCache = this.cacheCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _initWrapperElement: function _initWrapperElement() {\n this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {\n 'class': this.containerClass\n });\n fabric.util.setStyle(this.wrapperEl, {\n width: this.width + 'px',\n height: this.height + 'px',\n position: 'relative'\n });\n fabric.util.makeElementUnselectable(this.wrapperEl);\n },\n\n /**\n * @private\n * @param {HTMLElement} element canvas element to apply styles on\n */\n _applyCanvasStyle: function _applyCanvasStyle(element) {\n var width = this.width || element.width,\n height = this.height || element.height;\n fabric.util.setStyle(element, {\n position: 'absolute',\n width: width + 'px',\n height: height + 'px',\n left: 0,\n top: 0,\n 'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'\n });\n element.width = width;\n element.height = height;\n fabric.util.makeElementUnselectable(element);\n },\n\n /**\n * Copy the entire inline style from one element (fromEl) to another (toEl)\n * @private\n * @param {Element} fromEl Element style is copied from\n * @param {Element} toEl Element copied style is applied to\n */\n _copyCanvasStyle: function _copyCanvasStyle(fromEl, toEl) {\n toEl.style.cssText = fromEl.style.cssText;\n },\n\n /**\n * Returns context of canvas where object selection is drawn\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext: function getSelectionContext() {\n return this.contextTop;\n },\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement: function getSelectionElement() {\n return this.upperCanvasEl;\n },\n\n /**\n * Returns currently active object\n * @return {fabric.Object} active object\n */\n getActiveObject: function getActiveObject() {\n return this._activeObject;\n },\n\n /**\n * Returns an array with the current selected objects\n * @return {fabric.Object} active object\n */\n getActiveObjects: function getActiveObjects() {\n var active = this._activeObject;\n\n if (active) {\n if (active.type === 'activeSelection' && active._objects) {\n return active._objects.slice(0);\n } else {\n return [active];\n }\n }\n\n return [];\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function _onObjectRemoved(obj) {\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', {\n target: obj\n });\n\n this._discardActiveObject();\n\n this.fire('selection:cleared', {\n target: obj\n });\n obj.fire('deselected');\n }\n\n if (obj === this._hoveredTarget) {\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n\n this.callSuper('_onObjectRemoved', obj);\n },\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {fabric.Object} obj old activeObject\n */\n _fireSelectionEvents: function _fireSelectionEvents(oldObjects, e) {\n var somethingChanged = false,\n objects = this.getActiveObjects(),\n added = [],\n removed = [],\n opt = {\n e: e\n };\n oldObjects.forEach(function (oldObject) {\n if (objects.indexOf(oldObject) === -1) {\n somethingChanged = true;\n oldObject.fire('deselected', opt);\n removed.push(oldObject);\n }\n });\n objects.forEach(function (object) {\n if (oldObjects.indexOf(object) === -1) {\n somethingChanged = true;\n object.fire('selected', opt);\n added.push(object);\n }\n });\n\n if (oldObjects.length > 0 && objects.length > 0) {\n opt.selected = added;\n opt.deselected = removed; // added for backward compatibility\n\n opt.updated = added[0] || removed[0];\n opt.target = this._activeObject;\n somethingChanged && this.fire('selection:updated', opt);\n } else if (objects.length > 0) {\n // deprecated event\n if (objects.length === 1) {\n opt.target = added[0];\n this.fire('object:selected', opt);\n }\n\n opt.selected = added; // added for backward compatibility\n\n opt.target = this._activeObject;\n this.fire('selection:created', opt);\n } else if (oldObjects.length > 0) {\n opt.deselected = removed;\n this.fire('selection:cleared', opt);\n }\n },\n\n /**\n * Sets given object as the only active object on canvas\n * @param {fabric.Object} object Object to set as an active one\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setActiveObject: function setActiveObject(object, e) {\n var currentActives = this.getActiveObjects();\n\n this._setActiveObject(object, e);\n\n this._fireSelectionEvents(currentActives, e);\n\n return this;\n },\n\n /**\n * @private\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the selection happened\n */\n _setActiveObject: function _setActiveObject(object, e) {\n if (this._activeObject === object) {\n return false;\n }\n\n if (!this._discardActiveObject(e, object)) {\n return false;\n }\n\n if (object.onSelect({\n e: e\n })) {\n return false;\n }\n\n this._activeObject = object;\n return true;\n },\n\n /**\n * @private\n */\n _discardActiveObject: function _discardActiveObject(e, object) {\n var obj = this._activeObject;\n\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({\n e: e,\n object: object\n })) {\n return false;\n }\n\n this._activeObject = null;\n }\n\n return true;\n },\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n discardActiveObject: function discardActiveObject(e) {\n var currentActives = this.getActiveObjects(),\n activeObject = this.getActiveObject();\n\n if (currentActives.length) {\n this.fire('before:selection:cleared', {\n target: activeObject,\n e: e\n });\n }\n\n this._discardActiveObject(e);\n\n this._fireSelectionEvents(currentActives, e);\n\n return this;\n },\n\n /**\n * Clears a canvas element and removes all event listeners\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function dispose() {\n var wrapper = this.wrapperEl;\n this.removeListeners();\n wrapper.removeChild(this.upperCanvasEl);\n wrapper.removeChild(this.lowerCanvasEl);\n this.contextCache = null;\n this.contextTop = null;\n ['upperCanvasEl', 'cacheCanvasEl'].forEach(function (element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }.bind(this));\n\n if (wrapper.parentNode) {\n wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);\n }\n\n delete this.wrapperEl;\n fabric.StaticCanvas.prototype.dispose.call(this);\n return this;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function clear() {\n // this.discardActiveGroup();\n this.discardActiveObject();\n this.clearContext(this.contextTop);\n return this.callSuper('clear');\n },\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls: function drawControls(ctx) {\n var activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n },\n\n /**\n * @private\n */\n _toObject: function _toObject(instance, methodName, propertiesToInclude) {\n //If the object is part of the current selection group, it should\n //be transformed appropriately\n //i.e. it should be serialised as it would appear if the selection group\n //were to be destroyed.\n var originalProperties = this._realizeGroupTransformOnObject(instance),\n object = this.callSuper('_toObject', instance, methodName, propertiesToInclude); //Undo the damage we did by changing all of its properties\n\n\n this._unwindGroupTransformOnObject(instance, originalProperties);\n\n return object;\n },\n\n /**\n * Realises an object's group transformation on it\n * @private\n * @param {fabric.Object} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n _realizeGroupTransformOnObject: function _realizeGroupTransformOnObject(instance) {\n if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {\n var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top']; //Copy all the positionally relevant properties across now\n\n var originalValues = {};\n layoutProps.forEach(function (prop) {\n originalValues[prop] = instance[prop];\n });\n\n this._activeObject.realizeTransform(instance);\n\n return originalValues;\n } else {\n return null;\n }\n },\n\n /**\n * Restores the changed properties of instance\n * @private\n * @param {fabric.Object} [instance] the object to un-transform (gets mutated)\n * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject\n */\n _unwindGroupTransformOnObject: function _unwindGroupTransformOnObject(instance, originalValues) {\n if (originalValues) {\n instance.set(originalValues);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function _setSVGObject(markup, instance, reviver) {\n //If the object is in a selection group, simulate what would happen to that\n //object when the group is deselected\n var originalProperties = this._realizeGroupTransformOnObject(instance);\n\n this.callSuper('_setSVGObject', markup, instance, reviver);\n\n this._unwindGroupTransformOnObject(instance, originalProperties);\n },\n setViewportTransform: function setViewportTransform(vpt) {\n if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {\n this._activeObject.clearContextTop();\n }\n\n fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);\n }\n }); // copying static properties manually to work around Opera's bug,\n // where \"prototype\" property is enumerable and overrides existing prototype\n\n for (var prop in fabric.StaticCanvas) {\n if (prop !== 'prototype') {\n fabric.Canvas[prop] = fabric.StaticCanvas[prop];\n }\n }\n})();\n\n(function () {\n var cursorOffset = {\n mt: 0,\n // n\n tr: 1,\n // ne\n mr: 2,\n // e\n br: 3,\n // se\n mb: 4,\n // s\n bl: 5,\n // sw\n ml: 6,\n // w\n tl: 7 // nw\n\n },\n addListener = fabric.util.addListener,\n removeListener = fabric.util.removeListener,\n RIGHT_CLICK = 3,\n MIDDLE_CLICK = 2,\n LEFT_CLICK = 1,\n addEventOptions = {\n passive: false\n };\n\n function checkClick(e, value) {\n return e.button && e.button === value - 1;\n }\n\n fabric.util.object.extend(fabric.Canvas.prototype,\n /** @lends fabric.Canvas.prototype */\n {\n /**\n * Map of cursor style values for each of the object controls\n * @private\n */\n cursorMap: ['n-resize', 'ne-resize', 'e-resize', 'se-resize', 's-resize', 'sw-resize', 'w-resize', 'nw-resize'],\n\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n mainTouchId: null,\n\n /**\n * Adds mouse listeners to canvas\n * @private\n */\n _initEventListeners: function _initEventListeners() {\n // in case we initialized the class twice. This should not happen normally\n // but in some kind of applications where the canvas element may be changed\n // this is a workaround to having double listeners.\n this.removeListeners();\n\n this._bindEvents();\n\n this.addOrRemove(addListener, 'add');\n },\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n _getEventPrefix: function _getEventPrefix() {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n },\n addOrRemove: function addOrRemove(functor, eventjsFunctor) {\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n\n functor(fabric.window, 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);\n functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n\n if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);\n eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n }\n },\n\n /**\n * Removes all event listeners\n */\n removeListeners: function removeListeners() {\n this.addOrRemove(removeListener, 'remove'); // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n\n var eventTypePrefix = this._getEventPrefix();\n\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n */\n _bindEvents: function _bindEvents() {\n if (this.eventsBound) {\n // for any reason we pass here twice we do not want to bind events twice.\n return;\n }\n\n this._onMouseDown = this._onMouseDown.bind(this);\n this._onTouchStart = this._onTouchStart.bind(this);\n this._onMouseMove = this._onMouseMove.bind(this);\n this._onMouseUp = this._onMouseUp.bind(this);\n this._onTouchEnd = this._onTouchEnd.bind(this);\n this._onResize = this._onResize.bind(this);\n this._onGesture = this._onGesture.bind(this);\n this._onDrag = this._onDrag.bind(this);\n this._onShake = this._onShake.bind(this);\n this._onLongPress = this._onLongPress.bind(this);\n this._onOrientationChange = this._onOrientationChange.bind(this);\n this._onMouseWheel = this._onMouseWheel.bind(this);\n this._onMouseOut = this._onMouseOut.bind(this);\n this._onMouseEnter = this._onMouseEnter.bind(this);\n this._onContextMenu = this._onContextMenu.bind(this);\n this._onDoubleClick = this._onDoubleClick.bind(this);\n this._onDragOver = this._onDragOver.bind(this);\n this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');\n this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');\n this._onDrop = this._simpleEventHandler.bind(this, 'drop');\n this.eventsBound = true;\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js gesture\n * @param {Event} [self] Inner Event object\n */\n _onGesture: function _onGesture(e, self) {\n this.__onTransformGesture && this.__onTransformGesture(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js drag\n * @param {Event} [self] Inner Event object\n */\n _onDrag: function _onDrag(e, self) {\n this.__onDrag && this.__onDrag(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n _onMouseWheel: function _onMouseWheel(e) {\n this.__onMouseWheel(e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseOut: function _onMouseOut(e) {\n var target = this._hoveredTarget;\n this.fire('mouse:out', {\n target: target,\n e: e\n });\n this._hoveredTarget = null;\n target && target.fire('mouseout', {\n e: e\n });\n\n var _this = this;\n\n this._hoveredTargets.forEach(function (_target) {\n _this.fire('mouse:out', {\n target: target,\n e: e\n });\n\n _target && target.fire('mouseout', {\n e: e\n });\n });\n\n this._hoveredTargets = [];\n\n if (this._iTextInstances) {\n this._iTextInstances.forEach(function (obj) {\n if (obj.isEditing) {\n obj.hiddenTextarea.focus();\n }\n });\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n _onMouseEnter: function _onMouseEnter(e) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this.currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', {\n target: null,\n e: e\n });\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js orientation change\n * @param {Event} [self] Inner Event object\n */\n _onOrientationChange: function _onOrientationChange(e, self) {\n this.__onOrientationChange && this.__onOrientationChange(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onShake: function _onShake(e, self) {\n this.__onShake && this.__onShake(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onLongPress: function _onLongPress(e, self) {\n this.__onLongPress && this.__onLongPress(e, self);\n },\n\n /**\n * prevent default to allow drop event to be fired\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n _onDragOver: function _onDragOver(e) {\n e.preventDefault();\n\n var target = this._simpleEventHandler('dragover', e);\n\n this._fireEnterLeaveEvents(target, e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onContextMenu: function _onContextMenu(e) {\n if (this.stopContextMenu) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n return false;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onDoubleClick: function _onDoubleClick(e) {\n this._cacheTransformEventData(e);\n\n this._handleEvent(e, 'dblclick');\n\n this._resetTransformEventData(e);\n },\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId: function getPointerId(evt) {\n var changedTouches = evt.changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return evt.pointerId;\n }\n\n return -1;\n },\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent: function _isMainEvent(evt) {\n if (evt.isPrimary === true) {\n return true;\n }\n\n if (evt.isPrimary === false) {\n return false;\n }\n\n if (evt.type === 'touchend' && evt.touches.length === 0) {\n return true;\n }\n\n if (evt.changedTouches) {\n return evt.changedTouches[0].identifier === this.mainTouchId;\n }\n\n return true;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart: function _onTouchStart(e) {\n e.preventDefault();\n\n if (this.mainTouchId === null) {\n this.mainTouchId = this.getPointerId(e);\n }\n\n this.__onMouseDown(e);\n\n this._resetTransformEventData();\n\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n\n addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions); // Unbind mousedown to prevent double triggers from touch devices\n\n removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown: function _onMouseDown(e) {\n this.__onMouseDown(e);\n\n this._resetTransformEventData();\n\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n\n removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd: function _onTouchEnd(e) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n\n this.__onMouseUp(e);\n\n this._resetTransformEventData();\n\n this.mainTouchId = null;\n\n var eventTypePrefix = this._getEventPrefix();\n\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n\n var _this = this;\n\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n\n this._willAddMouseDown = setTimeout(function () {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);\n _this._willAddMouseDown = 0;\n }, 400);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp: function _onMouseUp(e) {\n this.__onMouseUp(e);\n\n this._resetTransformEventData();\n\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n\n if (this._isMainEvent(e)) {\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove: function _onMouseMove(e) {\n !this.allowTouchScrolling && e.preventDefault && e.preventDefault();\n\n this.__onMouseMove(e);\n },\n\n /**\n * @private\n */\n _onResize: function _onResize() {\n this.calcOffset();\n },\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender: function _shouldRender(target) {\n var activeObject = this._activeObject;\n\n if (!!activeObject !== !!target || activeObject && target && activeObject !== target) {\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return true;\n } else if (activeObject && activeObject.isEditing) {\n // if we mouse up/down over a editing textbox a cursor change,\n // there is no need to re render\n return false;\n }\n\n return false;\n },\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp: function __onMouseUp(e) {\n var target,\n transform = this._currentTransform,\n groupSelector = this._groupSelector,\n shouldRender = false,\n isClick = !groupSelector || groupSelector.left === 0 && groupSelector.top === 0;\n\n this._cacheTransformEventData(e);\n\n target = this._target;\n\n this._handleEvent(e, 'up:before'); // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n\n\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\n }\n\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\n }\n\n this._resetTransformEventData();\n\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n if (transform) {\n this._finalizeCurrentTransform(e);\n\n shouldRender = transform.actionPerformed;\n }\n\n if (!isClick) {\n this._maybeGroupObjects(e);\n\n shouldRender || (shouldRender = this._shouldRender(target));\n }\n\n if (target) {\n target.isMoving = false;\n }\n\n this._setCursorFromEvent(e, target);\n\n this._handleEvent(e, 'up', LEFT_CLICK, isClick);\n\n this._groupSelector = null;\n this._currentTransform = null; // reset the target information about which corner is selected\n\n target && (target.__corner = 0);\n\n if (shouldRender) {\n this.requestRenderAll();\n } else if (!isClick) {\n this.renderTop();\n }\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @return {Fabric.Object} target return the the target found, for internal reasons.\n */\n _simpleEventHandler: function _simpleEventHandler(eventType, e) {\n var target = this.findTarget(e),\n targets = this.targets,\n options = {\n e: e,\n target: target,\n subTargets: targets\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n\n if (!targets) {\n return target;\n }\n\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire(eventType, options);\n }\n\n return target;\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @param {fabric.Object} targetObj receiving event\n * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\n * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\n */\n _handleEvent: function _handleEvent(e, eventType, button, isClick) {\n var target = this._target,\n targets = this.targets || [],\n options = {\n e: e,\n target: target,\n subTargets: targets,\n button: button || LEFT_CLICK,\n isClick: isClick || false,\n pointer: this._pointer,\n absolutePointer: this._absolutePointer,\n transform: this._currentTransform\n };\n this.fire('mouse:' + eventType, options);\n target && target.fire('mouse' + eventType, options);\n\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire('mouse' + eventType, options);\n }\n },\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform: function _finalizeCurrentTransform(e) {\n var transform = this._currentTransform,\n target = transform.target,\n eventName,\n options = {\n e: e,\n target: target,\n transform: transform\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed || this.stateful && target.hasStateChanged()) {\n if (transform.actionPerformed) {\n eventName = this._addEventOptions(options, transform);\n\n this._fire(eventName, options);\n }\n\n this._fire('modified', options);\n }\n },\n\n /**\n * Mutate option object in order to add by property and give back the event name.\n * @private\n * @param {Object} options to mutate\n * @param {Object} transform to inspect action from\n */\n _addEventOptions: function _addEventOptions(options, transform) {\n // we can probably add more details at low cost\n // scale change, rotation changes, translation changes\n var eventName, by;\n\n switch (transform.action) {\n case 'scaleX':\n eventName = 'scaled';\n by = 'x';\n break;\n\n case 'scaleY':\n eventName = 'scaled';\n by = 'y';\n break;\n\n case 'skewX':\n eventName = 'skewed';\n by = 'x';\n break;\n\n case 'skewY':\n eventName = 'skewed';\n by = 'y';\n break;\n\n case 'scale':\n eventName = 'scaled';\n by = 'equally';\n break;\n\n case 'rotate':\n eventName = 'rotated';\n break;\n\n case 'drag':\n eventName = 'moved';\n break;\n }\n\n options.by = by;\n return eventName;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode: function _onMouseDownInDrawingMode(e) {\n this._isCurrentlyDrawing = true;\n\n if (this.getActiveObject()) {\n this.discardActiveObject(e).requestRenderAll();\n }\n\n if (this.clipTo) {\n fabric.util.clipContext(this, this.contextTop);\n }\n\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseDown(pointer, {\n e: e,\n pointer: pointer\n });\n\n this._handleEvent(e, 'down');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode: function _onMouseMoveInDrawingMode(e) {\n if (this._isCurrentlyDrawing) {\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseMove(pointer, {\n e: e,\n pointer: pointer\n });\n }\n\n this.setCursor(this.freeDrawingCursor);\n\n this._handleEvent(e, 'move');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode: function _onMouseUpInDrawingMode(e) {\n if (this.clipTo) {\n this.contextTop.restore();\n }\n\n var pointer = this.getPointer(e);\n this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({\n e: e,\n pointer: pointer\n });\n\n this._handleEvent(e, 'up');\n },\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown: function __onMouseDown(e) {\n this._cacheTransformEventData(e);\n\n this._handleEvent(e, 'down:before');\n\n var target = this._target; // if right click just fire events\n\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'down', RIGHT_CLICK);\n }\n\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'down', MIDDLE_CLICK);\n }\n\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n } // ignore if some object is being transformed at this moment\n\n\n if (this._currentTransform) {\n return;\n }\n\n var pointer = this._pointer; // save pointer for check in __onMouseUp event\n\n this._previousPointer = pointer;\n\n var shouldRender = this._shouldRender(target),\n shouldGroup = this._shouldGroup(e, target);\n\n if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n } else if (shouldGroup) {\n this._handleGrouping(e, target);\n\n target = this._activeObject;\n }\n\n if (this.selection && (!target || !target.selectable && !target.isEditing && target !== this._activeObject)) {\n this._groupSelector = {\n ex: pointer.x,\n ey: pointer.y,\n top: 0,\n left: 0\n };\n }\n\n if (target) {\n var alreadySelected = target === this._activeObject;\n\n if (target.selectable) {\n this.setActiveObject(target, e);\n }\n\n if (target === this._activeObject && (target.__corner || !shouldGroup)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n }\n }\n\n this._handleEvent(e, 'down'); // we must renderAll so that we update the visuals\n\n\n (shouldRender || shouldGroup) && this.requestRenderAll();\n },\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData: function _resetTransformEventData() {\n this._target = null;\n this._pointer = null;\n this._absolutePointer = null;\n },\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData: function _cacheTransformEventData(e) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n\n this._pointer = this.getPointer(e, true);\n this._absolutePointer = this.restorePointerVpt(this._pointer);\n this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;\n },\n\n /**\n * @private\n */\n _beforeTransform: function _beforeTransform(e) {\n var t = this._currentTransform;\n this.stateful && t.target.saveState();\n this.fire('before:transform', {\n e: e,\n transform: t\n }); // determine if it's a drag or rotate case\n\n if (t.corner) {\n this.onBeforeScaleRotate(t.target);\n }\n },\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove: function __onMouseMove(e) {\n this._handleEvent(e, 'move:before');\n\n this._cacheTransformEventData(e);\n\n var target, pointer;\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n var groupSelector = this._groupSelector; // We initially clicked in an empty area, so we draw a box for multiple selection\n\n if (groupSelector) {\n pointer = this._pointer;\n groupSelector.left = pointer.x - groupSelector.ex;\n groupSelector.top = pointer.y - groupSelector.ey;\n this.renderTop();\n } else if (!this._currentTransform) {\n target = this.findTarget(e) || null;\n\n this._setCursorFromEvent(e, target);\n\n this._fireOverOutEvents(target, e);\n } else {\n this._transformObject(e);\n }\n\n this._handleEvent(e, 'move');\n\n this._resetTransformEventData();\n },\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents: function _fireOverOutEvents(target, e) {\n var _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _hoveredTarget,\n evtOut: 'mouseout',\n canvasEvtOut: 'mouse:out',\n evtIn: 'mouseover',\n canvasEvtIn: 'mouse:over'\n });\n\n for (var i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'mouseout',\n evtIn: 'mouseover'\n });\n }\n\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n },\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Event} e Event object fired on ondrag\n * @private\n */\n _fireEnterLeaveEvents: function _fireEnterLeaveEvents(target, e) {\n var _draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _draggedoverTarget,\n evtOut: 'dragleave',\n evtIn: 'dragenter'\n });\n\n for (var i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'dragleave',\n evtIn: 'dragenter'\n });\n }\n\n this._draggedoverTarget = target;\n },\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Event} e Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents: function fireSyntheticInOutEvents(target, e, config) {\n var inOpt,\n outOpt,\n oldTarget = config.oldTarget,\n outFires,\n inFires,\n targetChanged = oldTarget !== target,\n canvasEvtIn = config.canvasEvtIn,\n canvasEvtOut = config.canvasEvtOut;\n\n if (targetChanged) {\n inOpt = {\n e: e,\n target: target,\n previousTarget: oldTarget\n };\n outOpt = {\n e: e,\n target: oldTarget,\n nextTarget: target\n };\n }\n\n inFires = target && targetChanged;\n outFires = oldTarget && targetChanged;\n\n if (outFires) {\n canvasEvtOut && this.fire(canvasEvtOut, outOpt);\n oldTarget.fire(config.evtOut, outOpt);\n }\n\n if (inFires) {\n canvasEvtIn && this.fire(canvasEvtIn, inOpt);\n target.fire(config.evtIn, inOpt);\n }\n },\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel: function __onMouseWheel(e) {\n this._cacheTransformEventData(e);\n\n this._handleEvent(e, 'wheel');\n\n this._resetTransformEventData();\n },\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject: function _transformObject(e) {\n var pointer = this.getPointer(e),\n transform = this._currentTransform;\n transform.reset = false;\n transform.target.isMoving = true;\n transform.shiftKey = e.shiftKey;\n transform.altKey = e[this.centeredKey];\n\n this._beforeScaleTransform(e, transform);\n\n this._performTransformAction(e, transform, pointer);\n\n transform.actionPerformed && this.requestRenderAll();\n },\n\n /**\n * @private\n */\n _performTransformAction: function _performTransformAction(e, transform, pointer) {\n var x = pointer.x,\n y = pointer.y,\n action = transform.action,\n actionPerformed = false,\n options = {\n target: transform.target,\n e: e,\n transform: transform,\n pointer: pointer\n };\n\n if (action === 'rotate') {\n (actionPerformed = this._rotateObject(x, y)) && this._fire('rotating', options);\n } else if (action === 'scale') {\n (actionPerformed = this._onScale(e, transform, x, y)) && this._fire('scaling', options);\n } else if (action === 'scaleX') {\n (actionPerformed = this._scaleObject(x, y, 'x')) && this._fire('scaling', options);\n } else if (action === 'scaleY') {\n (actionPerformed = this._scaleObject(x, y, 'y')) && this._fire('scaling', options);\n } else if (action === 'skewX') {\n (actionPerformed = this._skewObject(x, y, 'x')) && this._fire('skewing', options);\n } else if (action === 'skewY') {\n (actionPerformed = this._skewObject(x, y, 'y')) && this._fire('skewing', options);\n } else {\n actionPerformed = this._translateObject(x, y);\n\n if (actionPerformed) {\n this._fire('moving', options);\n\n this.setCursor(options.target.moveCursor || this.moveCursor);\n }\n }\n\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n },\n\n /**\n * @private\n */\n _fire: function _fire(eventName, options) {\n this.fire('object:' + eventName, options);\n options.target.fire(eventName, options);\n },\n\n /**\n * @private\n */\n _beforeScaleTransform: function _beforeScaleTransform(e, transform) {\n if (transform.action === 'scale' || transform.action === 'scaleX' || transform.action === 'scaleY') {\n var centerTransform = this._shouldCenterTransform(transform.target); // Switch from a normal resize to center-based\n\n\n if (centerTransform && (transform.originX !== 'center' || transform.originY !== 'center') || // Switch from center-based resize to normal one\n !centerTransform && transform.originX === 'center' && transform.originY === 'center') {\n this._resetCurrentTransform();\n\n transform.reset = true;\n }\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {Object} transform current transform\n * @param {Number} x mouse position x from origin\n * @param {Number} y mouse position y from origin\n * @return {Boolean} true if the scaling occurred\n */\n _onScale: function _onScale(e, transform, x, y) {\n if (this._isUniscalePossible(e, transform.target)) {\n transform.currentAction = 'scale';\n return this._scaleObject(x, y);\n } else {\n // Switch from a normal resize to proportional\n if (!transform.reset && transform.currentAction === 'scale') {\n this._resetCurrentTransform();\n }\n\n transform.currentAction = 'scaleEqually';\n return this._scaleObject(x, y, 'equally');\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target current target\n * @return {Boolean} true if unproportional scaling is possible\n */\n _isUniscalePossible: function _isUniscalePossible(e, target) {\n return (e[this.uniScaleKey] || this.uniScaleTransform) && !target.get('lockUniScaling');\n },\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent: function _setCursorFromEvent(e, target) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return false;\n }\n\n var hoverCursor = target.hoverCursor || this.hoverCursor,\n activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ? this._activeObject : null,\n // only show proper corner when group selection is not active\n corner = (!activeSelection || !activeSelection.contains(target)) && target._findTargetCorner(this.getPointer(e, true));\n\n if (!corner) {\n if (target.subTargetCheck) {\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets.concat().reverse().map(function (_target) {\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n\n this.setCursor(hoverCursor);\n } else {\n this.setCursor(this.getCornerCursor(corner, target, e));\n }\n },\n\n /**\n * @private\n */\n getCornerCursor: function getCornerCursor(corner, target, e) {\n if (this.actionIsDisabled(corner, target, e)) {\n return this.notAllowedCursor;\n } else if (corner in cursorOffset) {\n return this._getRotatedCornerCursor(corner, target, e);\n } else if (corner === 'mtr' && target.hasRotatingPoint) {\n return this.rotationCursor;\n } else {\n return this.defaultCursor;\n }\n },\n actionIsDisabled: function actionIsDisabled(corner, target, e) {\n if (corner === 'mt' || corner === 'mb') {\n return e[this.altActionKey] ? target.lockSkewingX : target.lockScalingY;\n } else if (corner === 'ml' || corner === 'mr') {\n return e[this.altActionKey] ? target.lockSkewingY : target.lockScalingX;\n } else if (corner === 'mtr') {\n return target.lockRotation;\n } else {\n return this._isUniscalePossible(e, target) ? target.lockScalingX && target.lockScalingY : target.lockScalingX || target.lockScalingY;\n }\n },\n\n /**\n * @private\n */\n _getRotatedCornerCursor: function _getRotatedCornerCursor(corner, target, e) {\n var n = Math.round(target.angle % 360 / 45);\n\n if (n < 0) {\n n += 8; // full circle ahead\n }\n\n n += cursorOffset[corner];\n\n if (e[this.altActionKey] && cursorOffset[corner] % 2 === 0) {\n //if we are holding shift and we are on a mx corner...\n n += 2;\n } // normalize n to be from 0 to 7\n\n\n n %= 8;\n return this.cursorMap[n];\n }\n });\n})();\n\n(function () {\n var min = Math.min,\n max = Math.max;\n fabric.util.object.extend(fabric.Canvas.prototype,\n /** @lends fabric.Canvas.prototype */\n {\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n * @return {Boolean}\n */\n _shouldGroup: function _shouldGroup(e, target) {\n var activeObject = this._activeObject;\n return activeObject && this._isSelectionKeyPressed(e) && target && target.selectable && this.selection && (activeObject !== target || activeObject.type === 'activeSelection') && !target.onSelect({\n e: e\n });\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _handleGrouping: function _handleGrouping(e, target) {\n var activeObject = this._activeObject; // avoid multi select when shift click on a corner\n\n if (activeObject.__corner) {\n return;\n }\n\n if (target === activeObject) {\n // if it's a group, find target again, using activeGroup objects\n target = this.findTarget(e, true); // if even object is not found or we are on activeObjectCorner, bail out\n\n if (!target || !target.selectable) {\n return;\n }\n }\n\n if (activeObject && activeObject.type === 'activeSelection') {\n this._updateActiveSelection(target, e);\n } else {\n this._createActiveSelection(target, e);\n }\n },\n\n /**\n * @private\n */\n _updateActiveSelection: function _updateActiveSelection(target, e) {\n var activeSelection = this._activeObject,\n currentActiveObjects = activeSelection._objects.slice(0);\n\n if (activeSelection.contains(target)) {\n activeSelection.removeWithUpdate(target);\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n\n if (activeSelection.size() === 1) {\n // activate last remaining object\n this._setActiveObject(activeSelection.item(0), e);\n }\n } else {\n activeSelection.addWithUpdate(target);\n this._hoveredTarget = activeSelection;\n this._hoveredTargets = this.targets.concat();\n }\n\n this._fireSelectionEvents(currentActiveObjects, e);\n },\n\n /**\n * @private\n */\n _createActiveSelection: function _createActiveSelection(target, e) {\n var currentActives = this.getActiveObjects(),\n group = this._createGroup(target);\n\n this._hoveredTarget = group; // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n\n this._setActiveObject(group, e);\n\n this._fireSelectionEvents(currentActives, e);\n },\n\n /**\n * @private\n * @param {Object} target\n */\n _createGroup: function _createGroup(target) {\n var objects = this._objects,\n isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),\n groupObjects = isActiveLower ? [this._activeObject, target] : [target, this._activeObject];\n this._activeObject.isEditing && this._activeObject.exitEditing();\n return new fabric.ActiveSelection(groupObjects, {\n canvas: this\n });\n },\n\n /**\n * @private\n * @param {Event} e mouse event\n */\n _groupSelectedObjects: function _groupSelectedObjects(e) {\n var group = this._collectObjects(e),\n aGroup; // do not create group for 1 element only\n\n\n if (group.length === 1) {\n this.setActiveObject(group[0], e);\n } else if (group.length > 1) {\n aGroup = new fabric.ActiveSelection(group.reverse(), {\n canvas: this\n });\n this.setActiveObject(aGroup, e);\n }\n },\n\n /**\n * @private\n */\n _collectObjects: function _collectObjects(e) {\n var group = [],\n currentObject,\n x1 = this._groupSelector.ex,\n y1 = this._groupSelector.ey,\n x2 = x1 + this._groupSelector.left,\n y2 = y1 + this._groupSelector.top,\n selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)),\n selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)),\n allowIntersect = !this.selectionFullyContained,\n isClick = x1 === x2 && y1 === y2; // we iterate reverse order to collect top first in case of click.\n\n for (var i = this._objects.length; i--;) {\n currentObject = this._objects[i];\n\n if (!currentObject || !currentObject.selectable || !currentObject.visible) {\n continue;\n }\n\n if (allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2) || currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2) || allowIntersect && currentObject.containsPoint(selectionX1Y1) || allowIntersect && currentObject.containsPoint(selectionX2Y2)) {\n group.push(currentObject); // only add one object if it's a click\n\n if (isClick) {\n break;\n }\n }\n }\n\n if (group.length > 1) {\n group = group.filter(function (object) {\n return !object.onSelect({\n e: e\n });\n });\n }\n\n return group;\n },\n\n /**\n * @private\n */\n _maybeGroupObjects: function _maybeGroupObjects(e) {\n if (this.selection && this._groupSelector) {\n this._groupSelectedObjects(e);\n }\n\n this.setCursor(this.defaultCursor); // clear selection and current transformation\n\n this._groupSelector = null;\n }\n });\n})();\n\n(function () {\n fabric.util.object.extend(fabric.StaticCanvas.prototype,\n /** @lends fabric.StaticCanvas.prototype */\n {\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n */\n toDataURL: function toDataURL(options) {\n options || (options = {});\n var format = options.format || 'png',\n quality = options.quality || 1,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? this.getRetinaScaling() : 1),\n canvasEl = this.toCanvasElement(multiplier, options);\n return fabric.util.toDataURL(canvasEl, format, quality);\n },\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [cropping] Cropping informations\n * @param {Number} [cropping.left] Cropping left offset.\n * @param {Number} [cropping.top] Cropping top offset.\n * @param {Number} [cropping.width] Cropping width.\n * @param {Number} [cropping.height] Cropping height.\n */\n toCanvasElement: function toCanvasElement(multiplier, cropping) {\n multiplier = multiplier || 1;\n cropping = cropping || {};\n var scaledWidth = (cropping.width || this.width) * multiplier,\n scaledHeight = (cropping.height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (cropping.left || 0)) * multiplier,\n translateY = (vp[5] - (cropping.top || 0)) * multiplier,\n originalInteractive = this.interactive,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY],\n originalRetina = this.enableRetinaScaling,\n canvasEl = fabric.util.createCanvasElement(),\n originalContextTop = this.contextTop;\n canvasEl.width = scaledWidth;\n canvasEl.height = scaledHeight;\n this.contextTop = null;\n this.enableRetinaScaling = false;\n this.interactive = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d'), this._objects);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.interactive = originalInteractive;\n this.enableRetinaScaling = originalRetina;\n this.contextTop = originalContextTop;\n return canvasEl;\n }\n });\n})();\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype,\n/** @lends fabric.StaticCanvas.prototype */\n{\n /**\n * Populates canvas with data from the specified dataless JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toDatalessJSON}\n * @deprecated since 1.2.2\n * @param {String|Object} json JSON string or object\n * @param {Function} callback Callback, invoked when json is parsed\n * and corresponding objects (e.g: {@link fabric.Image})\n * are initialized\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @return {fabric.Canvas} instance\n * @chainable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n */\n loadFromDatalessJSON: function loadFromDatalessJSON(json, callback, reviver) {\n return this.loadFromJSON(json, callback, reviver);\n },\n\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n * @param {String|Object} json JSON string or object\n * @param {Function} callback Callback, invoked when json is parsed\n * and corresponding objects (e.g: {@link fabric.Image})\n * are initialized\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @return {fabric.Canvas} instance\n * @chainable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * });\n */\n loadFromJSON: function loadFromJSON(json, callback, reviver) {\n if (!json) {\n return;\n } // serialize if it wasn't already\n\n\n var serialized = typeof json === 'string' ? JSON.parse(json) : fabric.util.object.clone(json);\n\n var _this = this,\n clipPath = serialized.clipPath,\n renderOnAddRemove = this.renderOnAddRemove;\n\n this.renderOnAddRemove = false;\n delete serialized.clipPath;\n\n this._enlivenObjects(serialized.objects, function (enlivenedObjects) {\n _this.clear();\n\n _this._setBgOverlay(serialized, function () {\n if (clipPath) {\n _this._enlivenObjects([clipPath], function (enlivenedCanvasClip) {\n _this.clipPath = enlivenedCanvasClip[0];\n\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n });\n } else {\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n }\n });\n }, reviver);\n\n return this;\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Array} restored canvas objects\n * @param {Function} cached renderOnAddRemove callback\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n __setupCanvas: function __setupCanvas(serialized, enlivenedObjects, renderOnAddRemove, callback) {\n var _this = this;\n\n enlivenedObjects.forEach(function (obj, index) {\n // we splice the array just in case some custom classes restored from JSON\n // will add more object to canvas at canvas init.\n _this.insertAt(obj, index);\n });\n this.renderOnAddRemove = renderOnAddRemove; // remove parts i cannot set as options\n\n delete serialized.objects;\n delete serialized.backgroundImage;\n delete serialized.overlayImage;\n delete serialized.background;\n delete serialized.overlay; // this._initOptions does too many things to just\n // call it. Normally loading an Object from JSON\n // create the Object instance. Here the Canvas is\n // already an instance and we are just loading things over it\n\n this._setOptions(serialized);\n\n this.renderAll();\n callback && callback();\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n _setBgOverlay: function _setBgOverlay(serialized, callback) {\n var loaded = {\n backgroundColor: false,\n overlayColor: false,\n backgroundImage: false,\n overlayImage: false\n };\n\n if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) {\n callback && callback();\n return;\n }\n\n var cbIfLoaded = function cbIfLoaded() {\n if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) {\n callback && callback();\n }\n };\n\n this.__setBgOverlay('backgroundImage', serialized.backgroundImage, loaded, cbIfLoaded);\n\n this.__setBgOverlay('overlayImage', serialized.overlayImage, loaded, cbIfLoaded);\n\n this.__setBgOverlay('backgroundColor', serialized.background, loaded, cbIfLoaded);\n\n this.__setBgOverlay('overlayColor', serialized.overlay, loaded, cbIfLoaded);\n },\n\n /**\n * @private\n * @param {String} property Property to set (backgroundImage, overlayImage, backgroundColor, overlayColor)\n * @param {(Object|String)} value Value to set\n * @param {Object} loaded Set loaded property to true if property is set\n * @param {Object} callback Callback function to invoke after property is set\n */\n __setBgOverlay: function __setBgOverlay(property, value, loaded, callback) {\n var _this = this;\n\n if (!value) {\n loaded[property] = true;\n callback && callback();\n return;\n }\n\n if (property === 'backgroundImage' || property === 'overlayImage') {\n fabric.util.enlivenObjects([value], function (enlivedObject) {\n _this[property] = enlivedObject[0];\n loaded[property] = true;\n callback && callback();\n });\n } else {\n this['set' + fabric.util.string.capitalize(property, true)](value, function () {\n loaded[property] = true;\n callback && callback();\n });\n }\n },\n\n /**\n * @private\n * @param {Array} objects\n * @param {Function} callback\n * @param {Function} [reviver]\n */\n _enlivenObjects: function _enlivenObjects(objects, callback, reviver) {\n if (!objects || objects.length === 0) {\n callback && callback([]);\n return;\n }\n\n fabric.util.enlivenObjects(objects, function (enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, null, reviver);\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Function} callback\n */\n _toDataURL: function _toDataURL(format, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURL(format));\n });\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Number} multiplier\n * @param {Function} callback\n */\n _toDataURLWithMultiplier: function _toDataURLWithMultiplier(format, multiplier, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURLWithMultiplier(format, multiplier));\n });\n },\n\n /**\n * Clones canvas instance\n * @param {Object} [callback] Receives cloned instance as a first argument\n * @param {Array} [properties] Array of properties to include in the cloned canvas and children\n */\n clone: function clone(callback, properties) {\n var data = JSON.stringify(this.toJSON(properties));\n this.cloneWithoutData(function (clone) {\n clone.loadFromJSON(data, function () {\n callback && callback(clone);\n });\n });\n },\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions, clipping properties, etc.\n * but leaves data empty (so that you can populate it with your own)\n * @param {Object} [callback] Receives cloned instance as a first argument\n */\n cloneWithoutData: function cloneWithoutData(callback) {\n var el = fabric.util.createCanvasElement();\n el.width = this.width;\n el.height = this.height;\n var clone = new fabric.Canvas(el);\n clone.clipTo = this.clipTo;\n\n if (this.backgroundImage) {\n clone.setBackgroundImage(this.backgroundImage.src, function () {\n clone.renderAll();\n callback && callback(clone);\n });\n clone.backgroundImageOpacity = this.backgroundImageOpacity;\n clone.backgroundImageStretch = this.backgroundImageStretch;\n } else {\n callback && callback(clone);\n }\n }\n});\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n capitalize = fabric.util.string.capitalize,\n degreesToRadians = fabric.util.degreesToRadians,\n supportsLineDash = fabric.StaticCanvas.supports('setLineDash'),\n objectCaching = !fabric.isLikelyNode,\n ALIASING_LIMIT = 2;\n\n if (fabric.Object) {\n return;\n }\n /**\n * Root object class from which all 2d shape classes inherit from\n * @class fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n * @see {@link fabric.Object#initialize} for constructor definition\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n * @fires modified\n * @fires modified\n * @fires moved\n * @fires scaled\n * @fires rotated\n * @fires skewed\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\n\n\n fabric.Object = fabric.util.createClass(fabric.CommonMethods,\n /** @lends fabric.Object.prototype */\n {\n /**\n * Type of an object (rect, circle, path, etc.).\n * Note that this property is meant to be read-only and not meant to be modified.\n * If you modify, certain parts of Fabric (such as JSON loading) won't work correctly.\n * @type String\n * @default\n */\n type: 'object',\n\n /**\n * Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originX: 'left',\n\n /**\n * Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originY: 'top',\n\n /**\n * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n * @type Number\n * @default\n */\n top: 0,\n\n /**\n * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}\n * @type Number\n * @default\n */\n left: 0,\n\n /**\n * Object width\n * @type Number\n * @default\n */\n width: 0,\n\n /**\n * Object height\n * @type Number\n * @default\n */\n height: 0,\n\n /**\n * Object scale factor (horizontal)\n * @type Number\n * @default\n */\n scaleX: 1,\n\n /**\n * Object scale factor (vertical)\n * @type Number\n * @default\n */\n scaleY: 1,\n\n /**\n * When true, an object is rendered as flipped horizontally\n * @type Boolean\n * @default\n */\n flipX: false,\n\n /**\n * When true, an object is rendered as flipped vertically\n * @type Boolean\n * @default\n */\n flipY: false,\n\n /**\n * Opacity of an object\n * @type Number\n * @default\n */\n opacity: 1,\n\n /**\n * Angle of rotation of an object (in degrees)\n * @type Number\n * @default\n */\n angle: 0,\n\n /**\n * Angle of skew on x axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewX: 0,\n\n /**\n * Angle of skew on y axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewY: 0,\n\n /**\n * Size of object's controlling corners (in pixels)\n * @type Number\n * @default\n */\n cornerSize: 13,\n\n /**\n * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill)\n * @type Boolean\n * @default\n */\n transparentCorners: true,\n\n /**\n * Default cursor value used when hovering over this object on canvas\n * @type String\n * @default\n */\n hoverCursor: null,\n\n /**\n * Default cursor value used when moving this object on canvas\n * @type String\n * @default\n */\n moveCursor: null,\n\n /**\n * Padding between object and its controlling borders (in pixels)\n * @type Number\n * @default\n */\n padding: 0,\n\n /**\n * Color of controlling borders of an object (when it's active)\n * @type String\n * @default\n */\n borderColor: 'rgba(102,153,255,0.75)',\n\n /**\n * Array specifying dash pattern of an object's borders (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n borderDashArray: null,\n\n /**\n * Color of controlling corners of an object (when it's active)\n * @type String\n * @default\n */\n cornerColor: 'rgba(102,153,255,0.5)',\n\n /**\n * Color of controlling corners of an object (when it's active and transparentCorners false)\n * @since 1.6.2\n * @type String\n * @default\n */\n cornerStrokeColor: null,\n\n /**\n * Specify style of control, 'rect' or 'circle'\n * @since 1.6.2\n * @type String\n */\n cornerStyle: 'rect',\n\n /**\n * Array specifying dash pattern of an object's control (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n cornerDashArray: null,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being scaled via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being rotated via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: true,\n\n /**\n * Color of object's fill\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n fill: 'rgb(0,0,0)',\n\n /**\n * Fill rule used to fill an object\n * accepted values are nonzero, evenodd\n * Backwards incompatibility note: This property was used for setting globalCompositeOperation until v1.4.12 (use `fabric.Object#globalCompositeOperation` instead)\n * @type String\n * @default\n */\n fillRule: 'nonzero',\n\n /**\n * Composite rule used for canvas globalCompositeOperation\n * @type String\n * @default\n */\n globalCompositeOperation: 'source-over',\n\n /**\n * Background color of an object.\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n backgroundColor: '',\n\n /**\n * Selection Background color of an object. colored layer behind the object when it is active.\n * does not mix good with globalCompositeOperation methods.\n * @type String\n * @default\n */\n selectionBackgroundColor: '',\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Width of a stroke used to render this object\n * @type Number\n * @default\n */\n strokeWidth: 1,\n\n /**\n * Array specifying dash pattern of an object's stroke (stroke must be defined)\n * @type Array\n */\n strokeDashArray: null,\n\n /**\n * Line offset of an object's stroke\n * @type Number\n * @default\n */\n strokeDashOffset: 0,\n\n /**\n * Line endings style of an object's stroke (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'butt',\n\n /**\n * Corner style of an object's stroke (one of \"bevil\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'miter',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of an object's stroke\n * @type Number\n * @default\n */\n strokeMiterLimit: 4,\n\n /**\n * Shadow object representing shadow of this shape\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Opacity of object's controlling borders when object is active and moving\n * @type Number\n * @default\n */\n borderOpacityWhenMoving: 0.4,\n\n /**\n * Scale factor of object's controlling borders\n * bigger number will make a thicker border\n * border is 1, so this is basically a border tickness\n * since there is no way to change the border itself.\n * @type Number\n * @default\n */\n borderScaleFactor: 1,\n\n /**\n * Transform matrix (similar to SVG's transform matrix)\n * This property has been depreacted. Since caching and and qrDecompose this\n * property can be handled with the standard top,left,scaleX,scaleY,angle and skewX.\n * A documentation example on how to parse and merge a transformMatrix will be provided before\n * completely removing it in fabric 4.0\n * If you are starting a project now, DO NOT use it.\n * @deprecated since 3.2.0\n * @type Array\n */\n transformMatrix: null,\n\n /**\n * Minimum allowed scale value of an object\n * @type Number\n * @default\n */\n minScaleLimit: 0,\n\n /**\n * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection).\n * But events still fire on it.\n * @type Boolean\n * @default\n */\n selectable: true,\n\n /**\n * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4\n * @type Boolean\n * @default\n */\n evented: true,\n\n /**\n * When set to `false`, an object is not rendered on canvas\n * @type Boolean\n * @default\n */\n visible: true,\n\n /**\n * When set to `false`, object's controls are not displayed and can not be used to manipulate object\n * @type Boolean\n * @default\n */\n hasControls: true,\n\n /**\n * When set to `false`, object's controlling borders are not rendered\n * @type Boolean\n * @default\n */\n hasBorders: true,\n\n /**\n * When set to `false`, object's controlling rotating point will not be visible or selectable\n * @type Boolean\n * @default\n */\n hasRotatingPoint: true,\n\n /**\n * Offset for object's controlling rotating point (when enabled via `hasRotatingPoint`)\n * @type Number\n * @default\n */\n rotatingPointOffset: 40,\n\n /**\n * When set to `true`, objects are \"found\" on canvas on per-pixel basis rather than according to bounding box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * When `false`, default object's values are not included in its serialization\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * Function that determines clipping of an object (context is passed as a first argument).\n * If you are using code minification, ctx argument can be minified/manglied you should use\n * as a workaround `var ctx = arguments[0];` in the function;\n * Note that context origin is at the object's center point (not left/top corner)\n * @deprecated since 2.0.0\n * @type Function\n */\n clipTo: null,\n\n /**\n * When `true`, object horizontal movement is locked\n * @type Boolean\n * @default\n */\n lockMovementX: false,\n\n /**\n * When `true`, object vertical movement is locked\n * @type Boolean\n * @default\n */\n lockMovementY: false,\n\n /**\n * When `true`, object rotation is locked\n * @type Boolean\n * @default\n */\n lockRotation: false,\n\n /**\n * When `true`, object horizontal scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingX: false,\n\n /**\n * When `true`, object vertical scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingY: false,\n\n /**\n * When `true`, object non-uniform scaling is locked\n * @type Boolean\n * @default\n */\n lockUniScaling: false,\n\n /**\n * When `true`, object horizontal skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingX: false,\n\n /**\n * When `true`, object vertical skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingY: false,\n\n /**\n * When `true`, object cannot be flipped by scaling into negative values\n * @type Boolean\n * @default\n */\n lockScalingFlip: false,\n\n /**\n * When `true`, object is not exported in OBJECT/JSON\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n excludeFromExport: false,\n\n /**\n * When `true`, object is cached on an additional canvas.\n * When `false`, object is not cached unless necessary ( clipPath )\n * default to true\n * @since 1.7.0\n * @type Boolean\n * @default true\n */\n objectCaching: objectCaching,\n\n /**\n * When `true`, object properties are checked for cache invalidation. In some particular\n * situation you may want this to be disabled ( spray brush, very big, groups)\n * or if your application does not allow you to modify properties for groups child you want\n * to disable it for groups.\n * default to false\n * since 1.7.0\n * @type Boolean\n * @default false\n */\n statefullCache: false,\n\n /**\n * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled\n * too much and will be redrawn with correct details at the end of scaling.\n * this setting is performance and application dependant.\n * default to true\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n noScaleCache: true,\n\n /**\n * When `false`, the stoke width will scale with the object.\n * When `true`, the stroke will always match the exact pixel size entered for stroke width.\n * default to false\n * @since 2.6.0\n * @type Boolean\n * @default false\n * @type Boolean\n * @default false\n */\n strokeUniform: false,\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n dirty: true,\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * @type number|string|any\n * @default 0\n */\n __corner: 0,\n\n /**\n * Determines if the fill or the stroke is drawn first (one of \"fill\" or \"stroke\")\n * @type String\n * @default\n */\n paintFirst: 'fill',\n\n /**\n * List of properties to consider when checking if state\n * of an object is changed (fabric.Object#hasStateChanged)\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: ('top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' + 'stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit ' + 'angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor ' + 'skewX skewY fillRule paintFirst clipPath strokeUniform').split(' '),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n cacheProperties: ('fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform' + ' strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath').split(' '),\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the object has rendered, and the context is placed in the center\n * of the object cacheCanvas.\n * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center'\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will make the object clip to the outside of the clipPath\n * since 2.4.0\n * @type boolean\n * @default false\n */\n inverted: false,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will have its top and left relative to canvas, and will\n * not be influenced by the object transform. This will make the clipPath relative\n * to the canvas, but clipping just a particular object.\n * WARNING this is beta, this feature may change or be renamed.\n * since 2.4.0\n * @type boolean\n * @default false\n */\n absolutePositioned: false,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function initialize(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas: function _createCacheCanvas() {\n this._cacheProperties = {};\n this._cacheCanvas = fabric.util.createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n\n this._updateCacheCanvas(); // if canvas gets created, is empty, so dirty.\n\n\n this.dirty = true;\n },\n\n /**\n * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize: function _limitCacheSize(dims) {\n var perfLimitSizeTotal = fabric.perfLimitSizeTotal,\n width = dims.width,\n height = dims.height,\n max = fabric.maxCacheSideLimit,\n min = fabric.minCacheSideLimit;\n\n if (width <= max && height <= max && width * height <= perfLimitSizeTotal) {\n if (width < min) {\n dims.width = min;\n }\n\n if (height < min) {\n dims.height = min;\n }\n\n return dims;\n }\n\n var ar = width / height,\n limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal),\n capValue = fabric.util.capValue,\n x = capValue(min, limitedDims.x, max),\n y = capValue(min, limitedDims.y, max);\n\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n\n return dims;\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function _getCacheCanvasDimensions() {\n var objectScale = this.getTotalObjectScaling(),\n // caculate dimensions without skewing\n dim = this._getTransformedDimensions(0, 0),\n neededX = dim.x * objectScale.scaleX / this.scaleX,\n neededY = dim.y * objectScale.scaleY / this.scaleY;\n\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.scaleX,\n zoomY: objectScale.scaleY,\n x: neededX,\n y: neededY\n };\n },\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas: function _updateCacheCanvas() {\n var targetCanvas = this.canvas;\n\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n var target = targetCanvas._currentTransform.target,\n action = targetCanvas._currentTransform.action;\n\n if (this === target && action.slice && action.slice(0, 5) === 'scale') {\n return false;\n }\n }\n\n var canvas = this._cacheCanvas,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = fabric.minCacheSideLimit,\n width = dims.width,\n height = dims.height,\n drawingWidth,\n drawingHeight,\n zoomX = dims.zoomX,\n zoomY = dims.zoomY,\n dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0,\n additionalHeight = 0,\n shouldResizeCanvas = false;\n\n if (dimensionsChanged) {\n var canvasWidth = this._cacheCanvas.width,\n canvasHeight = this._cacheCanvas.height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) && canvasWidth > minCacheSize && canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n\n if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n } else {\n this._cacheContext.setTransform(1, 0, 0, 1, 0, 0);\n\n this._cacheContext.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n this.cacheWidth = width;\n this.cacheHeight = height;\n\n this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY);\n\n this._cacheContext.scale(zoomX, zoomY);\n\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n\n return false;\n },\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function setOptions(options) {\n this._setOptions(options);\n\n this._initGradient(options.fill, 'fill');\n\n this._initGradient(options.stroke, 'stroke');\n\n this._initClipping(options);\n\n this._initPattern(options.fill, 'fill');\n\n this._initPattern(options.stroke, 'stroke');\n },\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform: function transform(ctx) {\n var m;\n\n if (this.group && !this.group._transformDone) {\n m = this.calcTransformMatrix();\n } else {\n m = this.calcOwnMatrix();\n }\n\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n },\n\n /**\n * Returns an object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n object = {\n type: this.type,\n version: fabric.version,\n originX: this.originX,\n originY: this.originY,\n left: toFixed(this.left, NUM_FRACTION_DIGITS),\n top: toFixed(this.top, NUM_FRACTION_DIGITS),\n width: toFixed(this.width, NUM_FRACTION_DIGITS),\n height: toFixed(this.height, NUM_FRACTION_DIGITS),\n fill: this.fill && this.fill.toObject ? this.fill.toObject() : this.fill,\n stroke: this.stroke && this.stroke.toObject ? this.stroke.toObject() : this.stroke,\n strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,\n strokeLineCap: this.strokeLineCap,\n strokeDashOffset: this.strokeDashOffset,\n strokeLineJoin: this.strokeLineJoin,\n // TODO: add this before release\n // strokeUniform: this.strokeUniform,\n strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\n flipX: this.flipX,\n flipY: this.flipY,\n opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\n shadow: this.shadow && this.shadow.toObject ? this.shadow.toObject() : this.shadow,\n visible: this.visible,\n clipTo: this.clipTo && String(this.clipTo),\n backgroundColor: this.backgroundColor,\n fillRule: this.fillRule,\n paintFirst: this.paintFirst,\n globalCompositeOperation: this.globalCompositeOperation,\n transformMatrix: this.transformMatrix ? this.transformMatrix.concat() : null,\n skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\n skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS)\n };\n\n if (this.clipPath) {\n object.clipPath = this.clipPath.toObject(propertiesToInclude);\n object.clipPath.inverted = this.clipPath.inverted;\n object.clipPath.absolutePositioned = this.clipPath.absolutePositioned;\n }\n\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n\n if (!this.includeDefaultValues) {\n object = this._removeDefaultValues(object);\n }\n\n return object;\n },\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject: function toDatalessObject(propertiesToInclude) {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues: function _removeDefaultValues(object) {\n var prototype = fabric.util.getKlass(object.type).prototype,\n stateProperties = prototype.stateProperties;\n stateProperties.forEach(function (prop) {\n if (prop === 'left' || prop === 'top') {\n return;\n }\n\n if (object[prop] === prototype[prop]) {\n delete object[prop];\n }\n\n var isArray = Object.prototype.toString.call(object[prop]) === '[object Array]' && Object.prototype.toString.call(prototype[prop]) === '[object Array]'; // basically a check for [] === []\n\n if (isArray && object[prop].length === 0 && prototype[prop].length === 0) {\n delete object[prop];\n }\n });\n return object;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString: function toString() {\n return '#';\n },\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Object} object with scaleX and scaleY properties\n */\n getObjectScaling: function getObjectScaling() {\n var options = fabric.util.qrDecompose(this.calcTransformMatrix());\n return {\n scaleX: Math.abs(options.scaleX),\n scaleY: Math.abs(options.scaleY)\n };\n },\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling: function getTotalObjectScaling() {\n var scale = this.getObjectScaling(),\n scaleX = scale.scaleX,\n scaleY = scale.scaleY;\n\n if (this.canvas) {\n var zoom = this.canvas.getZoom();\n var retina = this.canvas.getRetinaScaling();\n scaleX *= zoom * retina;\n scaleY *= zoom * retina;\n }\n\n return {\n scaleX: scaleX,\n scaleY: scaleY\n };\n },\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity: function getObjectOpacity() {\n var opacity = this.opacity;\n\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n\n return opacity;\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Object} thisArg\n */\n _set: function _set(key, value) {\n var shouldConstrainValue = key === 'scaleX' || key === 'scaleY',\n isChanged = this[key] !== value,\n groupNeedsUpdate = false;\n\n if (shouldConstrainValue) {\n value = this._constrainScale(value);\n }\n\n if (key === 'scaleX' && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n } else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n } else if (key === 'shadow' && value && !(value instanceof fabric.Shadow)) {\n value = new fabric.Shadow(value);\n } else if (key === 'dirty' && this.group) {\n this.group.set('dirty', value);\n }\n\n this[key] = value;\n\n if (isChanged) {\n groupNeedsUpdate = this.group && this.group.isOnACache();\n\n if (this.cacheProperties.indexOf(key) > -1) {\n this.dirty = true;\n groupNeedsUpdate && this.group.set('dirty', true);\n } else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) {\n this.group.set('dirty', true);\n }\n }\n\n return this;\n },\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup: function setOnGroup() {// implemented by sub-classes, as needed.\n },\n\n /**\n * Retrieves viewportTransform from Object's canvas if possible\n * @method getViewportTransform\n * @memberOf fabric.Object.prototype\n * @return {Array}\n */\n getViewportTransform: function getViewportTransform() {\n if (this.canvas && this.canvas.viewportTransform) {\n return this.canvas.viewportTransform;\n }\n\n return fabric.iMatrix.concat();\n },\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf fabric.Object.prototype\n * @return {Boolean}\n */\n isNotVisible: function isNotVisible() {\n return this.opacity === 0 || this.width === 0 && this.height === 0 && this.strokeWidth === 0 || !this.visible;\n },\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function render(ctx) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n\n ctx.save();\n\n this._setupCompositeOperation(ctx);\n\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n\n this._setOpacity(ctx);\n\n this._setShadow(ctx, this);\n\n if (this.transformMatrix) {\n ctx.transform.apply(ctx, this.transformMatrix);\n }\n\n this.clipTo && fabric.util.clipContext(this, ctx);\n\n if (this.shouldCache()) {\n this.renderCache();\n this.drawCacheOnCanvas(ctx);\n } else {\n this._removeCacheCanvas();\n\n this.dirty = false;\n this.drawObject(ctx);\n\n if (this.objectCaching && this.statefullCache) {\n this.saveState({\n propertySet: 'cacheProperties'\n });\n }\n }\n\n this.clipTo && ctx.restore();\n ctx.restore();\n },\n renderCache: function renderCache(options) {\n options = options || {};\n\n if (!this._cacheCanvas) {\n this._createCacheCanvas();\n }\n\n if (this.isCacheDirty()) {\n this.statefullCache && this.saveState({\n propertySet: 'cacheProperties'\n });\n this.drawObject(this._cacheContext, options.forClipping);\n this.dirty = false;\n }\n },\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas: function _removeCacheCanvas() {\n this._cacheCanvas = null;\n this.cacheWidth = 0;\n this.cacheHeight = 0;\n },\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an aproximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke: function hasStroke() {\n return this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0;\n },\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an aproximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill: function hasFill() {\n return this.fill && this.fill !== 'transparent';\n },\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache: function needsItsOwnCache() {\n if (this.paintFirst === 'stroke' && this.hasFill() && this.hasStroke() && _typeof(this.shadow) === 'object') {\n return true;\n }\n\n if (this.clipPath) {\n return true;\n }\n\n return false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache: function shouldCache() {\n this.ownCaching = this.needsItsOwnCache() || this.objectCaching && (!this.group || !this.group.isOnACache());\n return this.ownCaching;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n */\n willDrawShadow: function willDrawShadow() {\n return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\n },\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCache: function drawClipPathOnCache(ctx) {\n var path = this.clipPath;\n ctx.save(); // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n\n if (path.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n } else {\n ctx.globalCompositeOperation = 'destination-in';\n } //ctx.scale(1 / 2, 1 / 2);\n\n\n if (path.absolutePositioned) {\n var m = fabric.util.invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n path.transform(ctx);\n ctx.scale(1 / path.zoomX, 1 / path.zoomY);\n ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function drawObject(ctx, forClipping) {\n var originalFill = this.fill,\n originalStroke = this.stroke;\n\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n\n this._setClippingProperties(ctx);\n } else {\n this._renderBackground(ctx);\n\n this._setStrokeStyles(ctx, this);\n\n this._setFillStyles(ctx, this);\n }\n\n this._render(ctx);\n\n this._drawClipPath(ctx);\n\n this.fill = originalFill;\n this.stroke = originalStroke;\n },\n _drawClipPath: function _drawClipPath(ctx) {\n var path = this.clipPath;\n\n if (!path) {\n return;\n } // needed to setup a couple of variables\n // path canvas gets overridden with this one.\n // TODO find a better solution?\n\n\n path.canvas = this.canvas;\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({\n forClipping: true\n });\n this.drawClipPathOnCache(ctx);\n },\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas: function drawCacheOnCanvas(ctx) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\n },\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty: function isCacheDirty(skipCanvas) {\n if (this.isNotVisible()) {\n return false;\n }\n\n if (this._cacheCanvas && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n } else {\n if (this.dirty || this.clipPath && this.clipPath.absolutePositioned || this.statefullCache && this.hasStateChanged('cacheProperties')) {\n if (this._cacheCanvas && !skipCanvas) {\n var width = this.cacheWidth / this.zoomX;\n var height = this.cacheHeight / this.zoomY;\n\n this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\n }\n\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function _renderBackground(ctx) {\n if (!this.backgroundColor) {\n return;\n }\n\n var dim = this._getNonTransformedDimensions();\n\n ctx.fillStyle = this.backgroundColor;\n ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y); // if there is background color no other shadows\n // should be casted\n\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity: function _setOpacity(ctx) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n } else {\n ctx.globalAlpha *= this.opacity;\n }\n },\n _setStrokeStyles: function _setStrokeStyles(ctx, decl) {\n if (decl.stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n ctx.strokeStyle = decl.stroke.toLive ? decl.stroke.toLive(ctx, this) : decl.stroke;\n }\n },\n _setFillStyles: function _setFillStyles(ctx, decl) {\n if (decl.fill) {\n ctx.fillStyle = decl.fill.toLive ? decl.fill.toLive(ctx, this) : decl.fill;\n }\n },\n _setClippingProperties: function _setClippingProperties(ctx) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n },\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n * @param {Function} alternative function to call if browser does not support lineDash\n */\n _setLineDash: function _setLineDash(ctx, dashArray, alternative) {\n if (!dashArray || dashArray.length === 0) {\n return;\n } // Spec requires the concatenation of two copies the dash list when the number of elements is odd\n\n\n if (1 & dashArray.length) {\n dashArray.push.apply(dashArray, dashArray);\n }\n\n if (supportsLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n alternative && alternative(ctx);\n }\n },\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n */\n _renderControls: function _renderControls(ctx, styleOverride) {\n var vpt = this.getViewportTransform(),\n matrix = this.calcTransformMatrix(),\n options,\n drawBorders,\n drawControls;\n styleOverride = styleOverride || {};\n drawBorders = typeof styleOverride.hasBorders !== 'undefined' ? styleOverride.hasBorders : this.hasBorders;\n drawControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls;\n matrix = fabric.util.multiplyTransformMatrices(vpt, matrix);\n options = fabric.util.qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n\n if (!this.group) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n\n if (styleOverride.forActiveSelection) {\n ctx.rotate(degreesToRadians(options.angle));\n drawBorders && this.drawBordersInGroup(ctx, options, styleOverride);\n } else {\n ctx.rotate(degreesToRadians(this.angle));\n drawBorders && this.drawBorders(ctx, styleOverride);\n }\n\n drawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow: function _setShadow(ctx) {\n if (!this.shadow) {\n return;\n }\n\n var shadow = this.shadow,\n canvas = this.canvas,\n scaling,\n multX = canvas && canvas.viewportTransform[0] || 1,\n multY = canvas && canvas.viewportTransform[3] || 1;\n\n if (shadow.nonScaling) {\n scaling = {\n scaleX: 1,\n scaleY: 1\n };\n } else {\n scaling = this.getObjectScaling();\n }\n\n if (canvas && canvas._isRetinaScaling()) {\n multX *= fabric.devicePixelRatio;\n multY *= fabric.devicePixelRatio;\n }\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * fabric.browserShadowBlurConstant * (multX + multY) * (scaling.scaleX + scaling.scaleY) / 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.scaleX;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.scaleY;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow: function _removeShadow(ctx) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} filler fabric.Pattern or fabric.Gradient\n * @return {Object} offset.offsetX offset for text rendering\n * @return {Object} offset.offsetY offset for text rendering\n */\n _applyPatternGradientTransform: function _applyPatternGradientTransform(ctx, filler) {\n if (!filler || !filler.toLive) {\n return {\n offsetX: 0,\n offsetY: 0\n };\n }\n\n var t = filler.gradientTransform || filler.patternTransform;\n var offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if (filler.gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n } else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n\n return {\n offsetX: offsetX,\n offsetY: offsetY\n };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder: function _renderPaintInOrder(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderStroke(ctx);\n\n this._renderFill(ctx);\n } else {\n this._renderFill(ctx);\n\n this._renderStroke(ctx);\n }\n },\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function\n /* ctx */\n _render() {},\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill: function _renderFill(ctx) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n\n this._applyPatternGradientTransform(ctx, this.fill);\n\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n } else {\n ctx.fill();\n }\n\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke: function _renderStroke(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n\n if (this.strokeUniform && this.group) {\n var scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.scaleX, 1 / scaling.scaleY);\n } else if (this.strokeUniform) {\n ctx.scale(1 / this.scaleX, 1 / this.scaleY);\n }\n\n this._setLineDash(ctx, this.strokeDashArray, this._renderDashedStroke);\n\n if (this.stroke.toLive && this.stroke.gradientUnits === 'percentage') {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, this.stroke);\n } else {\n this._applyPatternGradientTransform(ctx, this.stroke);\n }\n\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drwabacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {fabric.Gradient} filler a fabric gradient instance\n */\n _applyPatternForTransformedGradient: function _applyPatternForTransformedGradient(ctx, filler) {\n var dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n pCanvas = fabric.util.createCanvasElement(),\n pCtx,\n retinaScaling = this.canvas.getRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling,\n height = dims.y / this.scaleY / retinaScaling;\n\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx = pCanvas.getContext('2d');\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(dims.zoomX / this.scaleX / retinaScaling, dims.zoomY / this.scaleY / retinaScaling);\n\n this._applyPatternGradientTransform(pCtx, filler);\n\n pCtx.fillStyle = filler.toLive(ctx);\n pCtx.fill();\n ctx.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2);\n ctx.scale(retinaScaling * this.scaleX / dims.zoomX, retinaScaling * this.scaleY / dims.zoomY);\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat');\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function _findCenterFromElement() {\n return {\n x: this.left + this.width / 2,\n y: this.top + this.height / 2\n };\n },\n\n /**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n * @chainable\n */\n _assignTransformMatrixProps: function _assignTransformMatrixProps() {\n if (this.transformMatrix) {\n var options = fabric.util.qrDecompose(this.transformMatrix);\n this.flipX = false;\n this.flipY = false;\n this.set('scaleX', options.scaleX);\n this.set('scaleY', options.scaleY);\n this.angle = options.angle;\n this.skewX = options.skewX;\n this.skewY = 0;\n }\n },\n\n /**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n * @return {thisArg}\n */\n _removeTransformMatrix: function _removeTransformMatrix(preserveAspectRatioOptions) {\n var center = this._findCenterFromElement();\n\n if (this.transformMatrix) {\n this._assignTransformMatrixProps();\n\n center = fabric.util.transformPoint(center, this.transformMatrix);\n }\n\n this.transformMatrix = null;\n\n if (preserveAspectRatioOptions) {\n this.scaleX *= preserveAspectRatioOptions.scaleX;\n this.scaleY *= preserveAspectRatioOptions.scaleY;\n this.cropX = preserveAspectRatioOptions.cropX;\n this.cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n this.width = preserveAspectRatioOptions.width;\n this.height = preserveAspectRatioOptions.height;\n }\n\n this.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * Clones an instance, using a callback method will work for every object.\n * @param {Function} callback Callback is invoked with a clone as a first argument\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n */\n clone: function clone(callback, propertiesToInclude) {\n var objectForm = this.toObject(propertiesToInclude);\n\n if (this.constructor.fromObject) {\n this.constructor.fromObject(objectForm, callback);\n } else {\n fabric.Object._fromObject('Object', objectForm, callback);\n }\n },\n\n /**\n * Creates an instance of fabric.Image out of an object\n * could make use of both toDataUrl or toCanvasElement.\n * @param {Function} callback callback, invoked with an instance as a first argument\n * @param {Object} [options] for clone as image, passed to toDataURL\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {fabric.Object} thisArg\n */\n cloneAsImage: function cloneAsImage(callback, options) {\n var canvasEl = this.toCanvasElement(options);\n\n if (callback) {\n callback(new fabric.Image(canvasEl));\n }\n\n return this;\n },\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {Object} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {HTMLCanvasElement} Returns DOM element with the fabric.Object\n */\n toCanvasElement: function toCanvasElement(options) {\n options || (options = {});\n var utils = fabric.util,\n origParams = utils.saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow,\n abs = Math.abs,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? fabric.devicePixelRatio : 1);\n delete this.group;\n\n if (options.withoutTransform) {\n utils.resetObjectTransform(this);\n }\n\n if (options.withoutShadow) {\n this.shadow = null;\n }\n\n var el = fabric.util.createCanvasElement(),\n // skip canvas zoom and calculate with setCoords now.\n boundingRect = this.getBoundingRect(true, true),\n shadow = this.shadow,\n scaling,\n shadowOffset = {\n x: 0,\n y: 0\n },\n shadowBlur,\n width,\n height;\n\n if (shadow) {\n shadowBlur = shadow.blur;\n\n if (shadow.nonScaling) {\n scaling = {\n scaleX: 1,\n scaleY: 1\n };\n } else {\n scaling = this.getObjectScaling();\n } // consider non scaling shadow.\n\n\n shadowOffset.x = 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.scaleX);\n shadowOffset.y = 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.scaleY);\n }\n\n width = boundingRect.width + shadowOffset.x;\n height = boundingRect.height + shadowOffset.y; // if the current width/height is not an integer\n // we need to make it so.\n\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n var canvas = new fabric.StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false\n });\n\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n\n this.setPositionByOrigin(new fabric.Point(canvas.width / 2, canvas.height / 2), 'center', 'center');\n var originalCanvas = this.canvas;\n canvas.add(this);\n var canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.shadow = originalShadow;\n this.set('canvas', originalCanvas);\n\n if (originalGroup) {\n this.group = originalGroup;\n }\n\n this.set(origParams).setCoords(); // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n\n canvas._objects = [];\n canvas.dispose();\n canvas = null;\n return canvasEl;\n },\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL: function toDataURL(options) {\n options || (options = {});\n return fabric.util.toDataURL(this.toCanvasElement(options), options.format || 'png', options.quality || 1);\n },\n\n /**\n * Returns true if specified type is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType: function isType(type) {\n return this.type === type;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity: function complexity() {\n return 1;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} JSON\n */\n toJSON: function toJSON(propertiesToInclude) {\n // delegate, not alias\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * Sets gradient (fill or stroke) of an object\n * percentages for x1,x2,y1,y2,r1,r2 together with gradientUnits 'pixels', are not supported.\n * Backwards incompatibility note: This method was named \"setGradientFill\" until v1.1.0\n * @param {String} property Property name 'stroke' or 'fill'\n * @param {Object} [options] Options object\n * @param {String} [options.type] Type of gradient 'radial' or 'linear'\n * @param {Number} [options.x1=0] x-coordinate of start point\n * @param {Number} [options.y1=0] y-coordinate of start point\n * @param {Number} [options.x2=0] x-coordinate of end point\n * @param {Number} [options.y2=0] y-coordinate of end point\n * @param {Number} [options.r1=0] Radius of start point (only for radial gradients)\n * @param {Number} [options.r2=0] Radius of end point (only for radial gradients)\n * @param {Object} [options.colorStops] Color stops object eg. {0: 'ff0000', 1: '000000'}\n * @param {Object} [options.gradientTransform] transformMatrix for gradient\n * @return {fabric.Object} thisArg\n * @chainable\n * @deprecated since 3.4.0\n * @see {@link http://jsfiddle.net/fabricjs/58y8b/|jsFiddle demo}\n * @example Set linear gradient\n * object.setGradient('fill', {\n * type: 'linear',\n * x1: -object.width / 2,\n * y1: 0,\n * x2: object.width / 2,\n * y2: 0,\n * colorStops: {\n * 0: 'red',\n * 0.5: '#005555',\n * 1: 'rgba(0,0,255,0.5)'\n * }\n * });\n * canvas.renderAll();\n * @example Set radial gradient\n * object.setGradient('fill', {\n * type: 'radial',\n * x1: 0,\n * y1: 0,\n * x2: 0,\n * y2: 0,\n * r1: object.width / 2,\n * r2: 10,\n * colorStops: {\n * 0: 'red',\n * 0.5: '#005555',\n * 1: 'rgba(0,0,255,0.5)'\n * }\n * });\n * canvas.renderAll();\n */\n setGradient: function setGradient(property, options) {\n options || (options = {});\n var gradient = {\n colorStops: []\n };\n gradient.type = options.type || (options.r1 || options.r2 ? 'radial' : 'linear');\n gradient.coords = {\n x1: options.x1,\n y1: options.y1,\n x2: options.x2,\n y2: options.y2\n };\n gradient.gradientUnits = options.gradientUnits || 'pixels';\n\n if (options.r1 || options.r2) {\n gradient.coords.r1 = options.r1;\n gradient.coords.r2 = options.r2;\n }\n\n gradient.gradientTransform = options.gradientTransform;\n fabric.Gradient.prototype.addColorStop.call(gradient, options.colorStops);\n return this.set(property, fabric.Gradient.forObject(this, gradient));\n },\n\n /**\n * Sets pattern fill of an object\n * @param {Object} options Options object\n * @param {(String|HTMLImageElement)} options.source Pattern source\n * @param {String} [options.repeat=repeat] Repeat property of a pattern (one of repeat, repeat-x, repeat-y or no-repeat)\n * @param {Number} [options.offsetX=0] Pattern horizontal offset from object's left/top corner\n * @param {Number} [options.offsetY=0] Pattern vertical offset from object's left/top corner\n * @param {Function} [callback] Callback to invoke when image set as a pattern\n * @return {fabric.Object} thisArg\n * @chainable\n * @deprecated since 3.5.0\n * @see {@link http://jsfiddle.net/fabricjs/QT3pa/|jsFiddle demo}\n * @example Set pattern\n * object.setPatternFill({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat'\n * },canvas.renderAll.bind(canvas));\n */\n setPatternFill: function setPatternFill(options, callback) {\n return this.set('fill', new fabric.Pattern(options, callback));\n },\n\n /**\n * Sets {@link fabric.Object#shadow|shadow} of an object\n * @param {Object|String} [options] Options object or string (e.g. \"2px 2px 10px rgba(0,0,0,0.2)\")\n * @param {String} [options.color=rgb(0,0,0)] Shadow color\n * @param {Number} [options.blur=0] Shadow blur\n * @param {Number} [options.offsetX=0] Shadow horizontal offset\n * @param {Number} [options.offsetY=0] Shadow vertical offset\n * @return {fabric.Object} thisArg\n * @chainable\n * @deprecated since 3.5.0\n * @see {@link http://jsfiddle.net/fabricjs/7gvJG/|jsFiddle demo}\n * @example Set shadow with string notation\n * object.setShadow('2px 2px 10px rgba(0,0,0,0.2)');\n * canvas.renderAll();\n * @example Set shadow with object notation\n * object.setShadow({\n * color: 'red',\n * blur: 10,\n * offsetX: 20,\n * offsetY: 20\n * });\n * canvas.renderAll();\n */\n setShadow: function setShadow(options) {\n return this.set('shadow', options ? new fabric.Shadow(options) : null);\n },\n\n /**\n * Sets \"color\" of an instance (alias of `set('fill', …)`)\n * @param {String} color Color value\n * @return {fabric.Object} thisArg\n * @deprecated since 3.5.0\n * @chainable\n */\n setColor: function setColor(color) {\n this.set('fill', color);\n return this;\n },\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {Number} angle Angle value (in degrees)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n rotate: function rotate(angle) {\n var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation;\n\n if (shouldCenterOrigin) {\n this._setOriginToCenter();\n }\n\n this.set('angle', angle);\n\n if (shouldCenterOrigin) {\n this._resetOrigin();\n }\n\n return this;\n },\n\n /**\n * Centers object horizontally on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerH: function centerH() {\n this.canvas && this.canvas.centerObjectH(this);\n return this;\n },\n\n /**\n * Centers object horizontally on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterH: function viewportCenterH() {\n this.canvas && this.canvas.viewportCenterObjectH(this);\n return this;\n },\n\n /**\n * Centers object vertically on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerV: function centerV() {\n this.canvas && this.canvas.centerObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterV: function viewportCenterV() {\n this.canvas && this.canvas.viewportCenterObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically and horizontally on canvas to which is was added last\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n center: function center() {\n this.canvas && this.canvas.centerObject(this);\n return this;\n },\n\n /**\n * Centers object on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenter: function viewportCenter() {\n this.canvas && this.canvas.viewportCenterObject(this);\n return this;\n },\n\n /**\n * Returns coordinates of a pointer relative to an object\n * @param {Event} e Event to operate upon\n * @param {Object} [pointer] Pointer to operate upon (instead of event)\n * @return {Object} Coordinates of a pointer (x, y)\n */\n getLocalPointer: function getLocalPointer(e, pointer) {\n pointer = pointer || this.canvas.getPointer(e);\n\n var pClicked = new fabric.Point(pointer.x, pointer.y),\n objectLeftTop = this._getLeftTopCoords();\n\n if (this.angle) {\n pClicked = fabric.util.rotatePoint(pClicked, objectLeftTop, degreesToRadians(-this.angle));\n }\n\n return {\n x: pClicked.x - objectLeftTop.x,\n y: pClicked.y - objectLeftTop.y\n };\n },\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation: function _setupCompositeOperation(ctx) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n });\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Object);\n extend(fabric.Object.prototype, fabric.Observable);\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n * @static\n * @memberOf fabric.Object\n * @constant\n * @type Number\n */\n\n fabric.Object.NUM_FRACTION_DIGITS = 2;\n\n fabric.Object._fromObject = function (className, object, callback, extraParam) {\n var klass = fabric[className];\n object = clone(object, true);\n fabric.util.enlivenPatterns([object.fill, object.stroke], function (patterns) {\n if (typeof patterns[0] !== 'undefined') {\n object.fill = patterns[0];\n }\n\n if (typeof patterns[1] !== 'undefined') {\n object.stroke = patterns[1];\n }\n\n fabric.util.enlivenObjects([object.clipPath], function (enlivedProps) {\n object.clipPath = enlivedProps[0];\n var instance = extraParam ? new klass(object[extraParam], object) : new klass(object);\n callback && callback(instance);\n });\n });\n };\n /**\n * Unique id used internally when creating SVG elements\n * @static\n * @memberOf fabric.Object\n * @type Number\n */\n\n\n fabric.Object.__uid = 0;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function () {\n var degreesToRadians = fabric.util.degreesToRadians,\n originXOffset = {\n left: -0.5,\n center: 0,\n right: 0.5\n },\n originYOffset = {\n top: -0.5,\n center: 0,\n bottom: 0.5\n };\n fabric.util.object.extend(fabric.Object.prototype,\n /** @lends fabric.Object.prototype */\n {\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {String} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToGivenOrigin: function translateToGivenOrigin(point, fromOriginX, fromOriginY, toOriginX, toOriginY) {\n var x = point.x,\n y = point.y,\n offsetX,\n offsetY,\n dim;\n\n if (typeof fromOriginX === 'string') {\n fromOriginX = originXOffset[fromOriginX];\n } else {\n fromOriginX -= 0.5;\n }\n\n if (typeof toOriginX === 'string') {\n toOriginX = originXOffset[toOriginX];\n } else {\n toOriginX -= 0.5;\n }\n\n offsetX = toOriginX - fromOriginX;\n\n if (typeof fromOriginY === 'string') {\n fromOriginY = originYOffset[fromOriginY];\n } else {\n fromOriginY -= 0.5;\n }\n\n if (typeof toOriginY === 'string') {\n toOriginY = originYOffset[toOriginY];\n } else {\n toOriginY -= 0.5;\n }\n\n offsetY = toOriginY - fromOriginY;\n\n if (offsetX || offsetY) {\n dim = this._getTransformedDimensions();\n x = point.x + offsetX * dim.x;\n y = point.y + offsetY * dim.y;\n }\n\n return new fabric.Point(x, y);\n },\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToCenterPoint: function translateToCenterPoint(point, originX, originY) {\n var p = this.translateToGivenOrigin(point, originX, originY, 'center', 'center');\n\n if (this.angle) {\n return fabric.util.rotatePoint(p, point, degreesToRadians(this.angle));\n }\n\n return p;\n },\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {fabric.Point} center The point which corresponds to center of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToOriginPoint: function translateToOriginPoint(center, originX, originY) {\n var p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n\n if (this.angle) {\n return fabric.util.rotatePoint(p, center, degreesToRadians(this.angle));\n }\n\n return p;\n },\n\n /**\n * Returns the real center coordinates of the object\n * @return {fabric.Point}\n */\n getCenterPoint: function getCenterPoint() {\n var leftTop = new fabric.Point(this.left, this.top);\n return this.translateToCenterPoint(leftTop, this.originX, this.originY);\n },\n\n /**\n * Returns the coordinates of the object based on center coordinates\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @return {fabric.Point}\n */\n // getOriginPoint: function(center) {\n // return this.translateToOriginPoint(center, this.originX, this.originY);\n // },\n\n /**\n * Returns the coordinates of the object as if it has a different origin\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n getPointByOrigin: function getPointByOrigin(originX, originY) {\n var center = this.getCenterPoint();\n return this.translateToOriginPoint(center, originX, originY);\n },\n\n /**\n * Returns the point in local coordinates\n * @param {fabric.Point} point The point relative to the global coordinate system\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n toLocalPoint: function toLocalPoint(point, originX, originY) {\n var center = this.getCenterPoint(),\n p,\n p2;\n\n if (typeof originX !== 'undefined' && typeof originY !== 'undefined') {\n p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n } else {\n p = new fabric.Point(this.left, this.top);\n }\n\n p2 = new fabric.Point(point.x, point.y);\n\n if (this.angle) {\n p2 = fabric.util.rotatePoint(p2, center, -degreesToRadians(this.angle));\n }\n\n return p2.subtractEquals(p);\n },\n\n /**\n * Returns the point in global coordinates\n * @param {fabric.Point} The point relative to the local coordinate system\n * @return {fabric.Point}\n */\n // toGlobalPoint: function(point) {\n // return fabric.util.rotatePoint(point, this.getCenterPoint(), degreesToRadians(this.angle)).addEquals(new fabric.Point(this.left, this.top));\n // },\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {fabric.Point} pos The new position of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin: function setPositionByOrigin(pos, originX, originY) {\n var center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(center, this.originX, this.originY);\n this.set('left', position.x);\n this.set('top', position.y);\n },\n\n /**\n * @param {String} to One of 'left', 'center', 'right'\n */\n adjustPosition: function adjustPosition(to) {\n var angle = degreesToRadians(this.angle),\n hypotFull = this.getScaledWidth(),\n xFull = fabric.util.cos(angle) * hypotFull,\n yFull = fabric.util.sin(angle) * hypotFull,\n offsetFrom,\n offsetTo; //TODO: this function does not consider mixed situation like top, center.\n\n if (typeof this.originX === 'string') {\n offsetFrom = originXOffset[this.originX];\n } else {\n offsetFrom = this.originX - 0.5;\n }\n\n if (typeof to === 'string') {\n offsetTo = originXOffset[to];\n } else {\n offsetTo = to - 0.5;\n }\n\n this.left += xFull * (offsetTo - offsetFrom);\n this.top += yFull * (offsetTo - offsetFrom);\n this.setCoords();\n this.originX = to;\n },\n\n /**\n * Sets the origin/position of the object to it's center point\n * @private\n * @return {void}\n */\n _setOriginToCenter: function _setOriginToCenter() {\n this._originalOriginX = this.originX;\n this._originalOriginY = this.originY;\n var center = this.getCenterPoint();\n this.originX = 'center';\n this.originY = 'center';\n this.left = center.x;\n this.top = center.y;\n },\n\n /**\n * Resets the origin/position of the object to it's original origin\n * @private\n * @return {void}\n */\n _resetOrigin: function _resetOrigin() {\n var originPoint = this.translateToOriginPoint(this.getCenterPoint(), this._originalOriginX, this._originalOriginY);\n this.originX = this._originalOriginX;\n this.originY = this._originalOriginY;\n this.left = originPoint.x;\n this.top = originPoint.y;\n this._originalOriginX = null;\n this._originalOriginY = null;\n },\n\n /**\n * @private\n */\n _getLeftTopCoords: function _getLeftTopCoords() {\n return this.translateToOriginPoint(this.getCenterPoint(), 'left', 'top');\n }\n });\n})();\n\n(function () {\n function _getCoords(coords) {\n return [new fabric.Point(coords.tl.x, coords.tl.y), new fabric.Point(coords.tr.x, coords.tr.y), new fabric.Point(coords.br.x, coords.br.y), new fabric.Point(coords.bl.x, coords.bl.y)];\n }\n\n var degreesToRadians = fabric.util.degreesToRadians,\n multiplyMatrices = fabric.util.multiplyTransformMatrices,\n transformPoint = fabric.util.transformPoint;\n fabric.util.object.extend(fabric.Object.prototype,\n /** @lends fabric.Object.prototype */\n {\n /**\n * Describe object's corner position in canvas element coordinates.\n * properties are tl,mt,tr,ml,mr,bl,mb,br,mtr for the main controls.\n * each property is an object with x, y and corner.\n * The `corner` property contains in a similar manner the 4 points of the\n * interactive area of the corner.\n * The coordinates depends from this properties: width, height, scaleX, scaleY\n * skewX, skewY, angle, strokeWidth, viewportTransform, top, left, padding.\n * The coordinates get updated with @method setCoords.\n * You can calculate them without updating with @method calcCoords;\n * @memberOf fabric.Object.prototype\n */\n oCoords: null,\n\n /**\n * Describe object's corner position in canvas object absolute coordinates\n * properties are tl,tr,bl,br and describe the four main corner.\n * each property is an object with x, y, instance of Fabric.Point.\n * The coordinates depends from this properties: width, height, scaleX, scaleY\n * skewX, skewY, angle, strokeWidth, top, left.\n * Those coordinates are useful to understand where an object is. They get updated\n * with oCoords but they do not need to be updated when zoom or panning change.\n * The coordinates get updated with @method setCoords.\n * You can calculate them without updating with @method calcCoords(true);\n * @memberOf fabric.Object.prototype\n */\n aCoords: null,\n\n /**\n * storage for object transform matrix\n */\n ownMatrixCache: null,\n\n /**\n * storage for object full transform matrix\n */\n matrixCache: null,\n\n /**\n * return correct set of coordinates for intersection\n */\n getCoords: function getCoords(absolute, calculate) {\n if (!this.oCoords) {\n this.setCoords();\n }\n\n var coords = absolute ? this.aCoords : this.oCoords;\n return _getCoords(calculate ? this.calcCoords(absolute) : coords);\n },\n\n /**\n * Checks if object intersects with an area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with an area formed by 2 points\n */\n intersectsWithRect: function intersectsWithRect(pointTL, pointBR, absolute, calculate) {\n var coords = this.getCoords(absolute, calculate),\n intersection = fabric.Intersection.intersectPolygonRectangle(coords, pointTL, pointBR);\n return intersection.status === 'Intersection';\n },\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject: function intersectsWithObject(other, absolute, calculate) {\n var intersection = fabric.Intersection.intersectPolygonPolygon(this.getCoords(absolute, calculate), other.getCoords(absolute, calculate));\n return intersection.status === 'Intersection' || other.isContainedWithinObject(this, absolute, calculate) || this.isContainedWithinObject(other, absolute, calculate);\n },\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject: function isContainedWithinObject(other, absolute, calculate) {\n var points = this.getCoords(absolute, calculate),\n i = 0,\n lines = other._getImageLines(calculate ? other.calcCoords(absolute) : absolute ? other.aCoords : other.oCoords);\n\n for (; i < 4; i++) {\n if (!other.containsPoint(points[i], lines)) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * Checks if object is fully contained within area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area formed by 2 points\n */\n isContainedWithinRect: function isContainedWithinRect(pointTL, pointBR, absolute, calculate) {\n var boundingRect = this.getBoundingRect(absolute, calculate);\n return boundingRect.left >= pointTL.x && boundingRect.left + boundingRect.width <= pointBR.x && boundingRect.top >= pointTL.y && boundingRect.top + boundingRect.height <= pointBR.y;\n },\n\n /**\n * Checks if point is inside the object\n * @param {fabric.Point} point Point to check against\n * @param {Object} [lines] object returned from @method _getImageLines\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if point is inside the object\n */\n containsPoint: function containsPoint(point, lines, absolute, calculate) {\n var lines = lines || this._getImageLines(calculate ? this.calcCoords(absolute) : absolute ? this.aCoords : this.oCoords),\n xPoints = this._findCrossPoints(point, lines); // if xPoints is odd then point is inside the object\n\n\n return xPoints !== 0 && xPoints % 2 === 1;\n },\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @param {Boolean} [calculate] use coordinates of current position instead of .aCoords\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen: function isOnScreen(calculate) {\n if (!this.canvas) {\n return false;\n }\n\n var pointTL = this.canvas.vptCoords.tl,\n pointBR = this.canvas.vptCoords.br;\n var points = this.getCoords(true, calculate),\n point;\n\n for (var i = 0; i < 4; i++) {\n point = points[i];\n\n if (point.x <= pointBR.x && point.x >= pointTL.x && point.y <= pointBR.y && point.y >= pointTL.y) {\n return true;\n }\n } // no points on screen, check intersection with absolute coordinates\n\n\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n\n return this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Checks if the object contains the midpoint between canvas extremities\n * Does not make sense outside the context of isOnScreen and isPartiallyOnScreen\n * @private\n * @param {Fabric.Point} pointTL Top Left point\n * @param {Fabric.Point} pointBR Top Right point\n * @param {Boolean} calculate use coordinates of current position instead of .oCoords\n * @return {Boolean} true if the object contains the point\n */\n _containsCenterOfCanvas: function _containsCenterOfCanvas(pointTL, pointBR, calculate) {\n // worst case scenario the object is so big that contains the screen\n var centerPoint = {\n x: (pointTL.x + pointBR.x) / 2,\n y: (pointTL.y + pointBR.y) / 2\n };\n\n if (this.containsPoint(centerPoint, null, true, calculate)) {\n return true;\n }\n\n return false;\n },\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen: function isPartiallyOnScreen(calculate) {\n if (!this.canvas) {\n return false;\n }\n\n var pointTL = this.canvas.vptCoords.tl,\n pointBR = this.canvas.vptCoords.br;\n\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n\n return this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Method that returns an object with the object edges in it, given the coordinates of the corners\n * @private\n * @param {Object} oCoords Coordinates of the object corners\n */\n _getImageLines: function _getImageLines(oCoords) {\n return {\n topline: {\n o: oCoords.tl,\n d: oCoords.tr\n },\n rightline: {\n o: oCoords.tr,\n d: oCoords.br\n },\n bottomline: {\n o: oCoords.br,\n d: oCoords.bl\n },\n leftline: {\n o: oCoords.bl,\n d: oCoords.tl\n }\n };\n },\n\n /**\n * Helper method to determine how many cross points are between the 4 object edges\n * and the horizontal line determined by a point on canvas\n * @private\n * @param {fabric.Point} point Point to check\n * @param {Object} lines Coordinates of the object being evaluated\n */\n // remove yi, not used but left code here just in case.\n _findCrossPoints: function _findCrossPoints(point, lines) {\n var b1,\n b2,\n a1,\n a2,\n xi,\n // yi,\n xcount = 0,\n iLine;\n\n for (var lineKey in lines) {\n iLine = lines[lineKey]; // optimisation 1: line below point. no cross\n\n if (iLine.o.y < point.y && iLine.d.y < point.y) {\n continue;\n } // optimisation 2: line above point. no cross\n\n\n if (iLine.o.y >= point.y && iLine.d.y >= point.y) {\n continue;\n } // optimisation 3: vertical line case\n\n\n if (iLine.o.x === iLine.d.x && iLine.o.x >= point.x) {\n xi = iLine.o.x; // yi = point.y;\n } // calculate the intersection point\n else {\n b1 = 0;\n b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x);\n a1 = point.y - b1 * point.x;\n a2 = iLine.o.y - b2 * iLine.o.x;\n xi = -(a1 - a2) / (b1 - b2); // yi = a1 + b1 * xi;\n } // dont count xi < point.x cases\n\n\n if (xi >= point.x) {\n xcount += 1;\n } // optimisation 4: specific for square images\n\n\n if (xcount === 2) {\n break;\n }\n }\n\n return xcount;\n },\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords / .aCoords\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect: function getBoundingRect(absolute, calculate) {\n var coords = this.getCoords(absolute, calculate);\n return fabric.util.makeBoundingBoxFromPoints(coords);\n },\n\n /**\n * Returns width of an object's bounding box counting transformations\n * before 2.0 it was named getWidth();\n * @return {Number} width value\n */\n getScaledWidth: function getScaledWidth() {\n return this._getTransformedDimensions().x;\n },\n\n /**\n * Returns height of an object bounding box counting transformations\n * before 2.0 it was named getHeight();\n * @return {Number} height value\n */\n getScaledHeight: function getScaledHeight() {\n return this._getTransformedDimensions().y;\n },\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @private\n * @param {Number} value\n * @return {Number}\n */\n _constrainScale: function _constrainScale(value) {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n } else {\n return this.minScaleLimit;\n }\n } else if (value === 0) {\n return 0.0001;\n }\n\n return value;\n },\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scale: function scale(value) {\n this._set('scaleX', value);\n\n this._set('scaleY', value);\n\n return this.setCoords();\n },\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToWidth: function scaleToWidth(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n },\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToHeight: function scaleToHeight(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n },\n\n /**\n * Calculates and returns the .coords of an object.\n * @return {Object} Object with tl, tr, br, bl ....\n * @chainable\n */\n calcCoords: function calcCoords(absolute) {\n var rotateMatrix = this._calcRotateMatrix(),\n translateMatrix = this._calcTranslateMatrix(),\n startMatrix = multiplyMatrices(translateMatrix, rotateMatrix),\n vpt = this.getViewportTransform(),\n finalMatrix = absolute ? startMatrix : multiplyMatrices(vpt, startMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2,\n h = dim.y / 2,\n tl = transformPoint({\n x: -w,\n y: -h\n }, finalMatrix),\n tr = transformPoint({\n x: w,\n y: -h\n }, finalMatrix),\n bl = transformPoint({\n x: -w,\n y: h\n }, finalMatrix),\n br = transformPoint({\n x: w,\n y: h\n }, finalMatrix);\n\n if (!absolute) {\n var padding = this.padding,\n angle = degreesToRadians(this.angle),\n cos = fabric.util.cos(angle),\n sin = fabric.util.sin(angle),\n cosP = cos * padding,\n sinP = sin * padding,\n cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP;\n\n if (padding) {\n tl.x -= cosPMinusSinP;\n tl.y -= cosPSinP;\n tr.x += cosPSinP;\n tr.y -= cosPMinusSinP;\n bl.x -= cosPSinP;\n bl.y += cosPMinusSinP;\n br.x += cosPMinusSinP;\n br.y += cosPSinP;\n }\n\n var ml = new fabric.Point((tl.x + bl.x) / 2, (tl.y + bl.y) / 2),\n mt = new fabric.Point((tr.x + tl.x) / 2, (tr.y + tl.y) / 2),\n mr = new fabric.Point((br.x + tr.x) / 2, (br.y + tr.y) / 2),\n mb = new fabric.Point((br.x + bl.x) / 2, (br.y + bl.y) / 2),\n mtr = new fabric.Point(mt.x + sin * this.rotatingPointOffset, mt.y - cos * this.rotatingPointOffset);\n } // if (!absolute) {\n // var canvas = this.canvas;\n // setTimeout(function() {\n // canvas.contextTop.clearRect(0, 0, 700, 700);\n // canvas.contextTop.fillStyle = 'green';\n // canvas.contextTop.fillRect(mb.x, mb.y, 3, 3);\n // canvas.contextTop.fillRect(bl.x, bl.y, 3, 3);\n // canvas.contextTop.fillRect(br.x, br.y, 3, 3);\n // canvas.contextTop.fillRect(tl.x, tl.y, 3, 3);\n // canvas.contextTop.fillRect(tr.x, tr.y, 3, 3);\n // canvas.contextTop.fillRect(ml.x, ml.y, 3, 3);\n // canvas.contextTop.fillRect(mr.x, mr.y, 3, 3);\n // canvas.contextTop.fillRect(mt.x, mt.y, 3, 3);\n // canvas.contextTop.fillRect(mtr.x, mtr.y, 3, 3);\n // }, 50);\n // }\n\n\n var coords = {\n // corners\n tl: tl,\n tr: tr,\n br: br,\n bl: bl\n };\n\n if (!absolute) {\n // middle\n coords.ml = ml;\n coords.mt = mt;\n coords.mr = mr;\n coords.mb = mb; // rotating point\n\n coords.mtr = mtr;\n }\n\n return coords;\n },\n\n /**\n * Sets corner position coordinates based on current angle, width and height.\n * See {@link https://github.com/kangax/fabric.js/wiki/When-to-call-setCoords|When-to-call-setCoords}\n * @param {Boolean} [ignoreZoom] set oCoords with or without the viewport transform.\n * @param {Boolean} [skipAbsolute] skip calculation of aCoords, useful in setViewportTransform\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setCoords: function setCoords(ignoreZoom, skipAbsolute) {\n this.oCoords = this.calcCoords(ignoreZoom);\n\n if (!skipAbsolute) {\n this.aCoords = this.calcCoords(true);\n } // set coordinates of the draggable boxes in the corners used to scale/rotate the image\n\n\n ignoreZoom || this._setCornerCoords && this._setCornerCoords();\n return this;\n },\n\n /**\n * calculate rotation matrix of an object\n * @return {Array} rotation matrix for the object\n */\n _calcRotateMatrix: function _calcRotateMatrix() {\n return fabric.util.calcRotateMatrix(this);\n },\n\n /**\n * calculate the translation matrix for an object transform\n * @return {Array} rotation matrix for the object\n */\n _calcTranslateMatrix: function _calcTranslateMatrix() {\n var center = this.getCenterPoint();\n return [1, 0, 0, 1, center.x, center.y];\n },\n transformMatrixKey: function transformMatrixKey(skipGroup) {\n var sep = '_',\n prefix = '';\n\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup) + sep;\n }\n\n ;\n return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY + sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.originX + sep + this.originY + sep + this.width + sep + this.height + sep + this.strokeWidth + this.flipX + this.flipY;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * @return {Array} transform matrix for the object\n */\n calcTransformMatrix: function calcTransformMatrix(skipGroup) {\n if (skipGroup) {\n return this.calcOwnMatrix();\n }\n\n var key = this.transformMatrixKey(),\n cache = this.matrixCache || (this.matrixCache = {});\n\n if (cache.key === key) {\n return cache.value;\n }\n\n var matrix = this.calcOwnMatrix();\n\n if (this.group) {\n matrix = multiplyMatrices(this.group.calcTransformMatrix(), matrix);\n }\n\n cache.key = key;\n cache.value = matrix;\n return matrix;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {Array} transform matrix for the object\n */\n calcOwnMatrix: function calcOwnMatrix() {\n var key = this.transformMatrixKey(true),\n cache = this.ownMatrixCache || (this.ownMatrixCache = {});\n\n if (cache.key === key) {\n return cache.value;\n }\n\n var tMatrix = this._calcTranslateMatrix();\n\n this.translateX = tMatrix[4];\n this.translateY = tMatrix[5];\n cache.key = key;\n cache.value = fabric.util.composeMatrix(this);\n return cache.value;\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n * @deprecated since 3.4.0, please use fabric.util._calcDimensionsTransformMatrix\n * not including or including flipX, flipY to emulate the flipping boolean\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _calcDimensionsTransformMatrix: function _calcDimensionsTransformMatrix(skewX, skewY, flipping) {\n return fabric.util.calcDimensionsMatrix({\n skewX: skewX,\n skewY: skewY,\n scaleX: this.scaleX * (flipping && this.flipX ? -1 : 1),\n scaleY: this.scaleY * (flipping && this.flipY ? -1 : 1)\n });\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getNonTransformedDimensions: function _getNonTransformedDimensions() {\n var strokeWidth = this.strokeWidth,\n w = this.width + strokeWidth,\n h = this.height + strokeWidth;\n return {\n x: w,\n y: h\n };\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * The skewX and skewY parameters are used in the skewing logic path and\n * do not provide something useful to common use cases.\n * @param {Number} [skewX], a value to override current skewX\n * @param {Number} [skewY], a value to override current skewY\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getTransformedDimensions: function _getTransformedDimensions(skewX, skewY) {\n if (typeof skewX === 'undefined') {\n skewX = this.skewX;\n }\n\n if (typeof skewY === 'undefined') {\n skewY = this.skewY;\n }\n\n var dimensions = this._getNonTransformedDimensions(),\n dimX,\n dimY,\n noSkew = skewX === 0 && skewY === 0;\n\n if (this.strokeUniform) {\n dimX = this.width;\n dimY = this.height;\n } else {\n dimX = dimensions.x;\n dimY = dimensions.y;\n }\n\n if (noSkew) {\n return this._finalizeDimensions(dimX * this.scaleX, dimY * this.scaleY);\n } else {\n dimX /= 2;\n dimY /= 2;\n }\n\n var points = [{\n x: -dimX,\n y: -dimY\n }, {\n x: dimX,\n y: -dimY\n }, {\n x: -dimX,\n y: dimY\n }, {\n x: dimX,\n y: dimY\n }],\n transformMatrix = fabric.util.calcDimensionsMatrix({\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: skewX,\n skewY: skewY\n }),\n bbox = fabric.util.makeBoundingBoxFromPoints(points, transformMatrix);\n return this._finalizeDimensions(bbox.width, bbox.height);\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * @param Number width width of the bbox\n * @param Number height height of the bbox\n * @private\n * @return {Object} .x finalized width dimension\n * @return {Object} .y finalized height dimension\n */\n _finalizeDimensions: function _finalizeDimensions(width, height) {\n return this.strokeUniform ? {\n x: width + this.strokeWidth,\n y: height + this.strokeWidth\n } : {\n x: width,\n y: height\n };\n },\n\n /*\n * Calculate object dimensions for controls, including padding and canvas zoom.\n * private\n */\n _calculateCurrentDimensions: function _calculateCurrentDimensions() {\n var vpt = this.getViewportTransform(),\n dim = this._getTransformedDimensions(),\n p = fabric.util.transformPoint(dim, vpt, true);\n\n return p.scalarAdd(2 * this.padding);\n }\n });\n})();\n\nfabric.util.object.extend(fabric.Object.prototype,\n/** @lends fabric.Object.prototype */\n{\n /**\n * Moves an object to the bottom of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendToBack: function sendToBack() {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendToBack.call(this.group, this);\n } else if (this.canvas) {\n this.canvas.sendToBack(this);\n }\n\n return this;\n },\n\n /**\n * Moves an object to the top of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringToFront: function bringToFront() {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringToFront.call(this.group, this);\n } else if (this.canvas) {\n this.canvas.bringToFront(this);\n }\n\n return this;\n },\n\n /**\n * Moves an object down in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendBackwards: function sendBackwards(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendBackwards.call(this.group, this, intersecting);\n } else if (this.canvas) {\n this.canvas.sendBackwards(this, intersecting);\n }\n\n return this;\n },\n\n /**\n * Moves an object up in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringForward: function bringForward(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringForward.call(this.group, this, intersecting);\n } else if (this.canvas) {\n this.canvas.bringForward(this, intersecting);\n }\n\n return this;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {Number} index New position of object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n moveTo: function moveTo(index) {\n if (this.group && this.group.type !== 'activeSelection') {\n fabric.StaticCanvas.prototype.moveTo.call(this.group, this, index);\n } else if (this.canvas) {\n this.canvas.moveTo(this, index);\n }\n\n return this;\n }\n});\n/* _TO_SVG_START_ */\n\n(function () {\n function getSvgColorString(prop, value) {\n if (!value) {\n return prop + ': none; ';\n } else if (value.toLive) {\n return prop + ': url(#SVGID_' + value.id + '); ';\n } else {\n var color = new fabric.Color(value),\n str = prop + ': ' + color.toRgb() + '; ',\n opacity = color.getAlpha();\n\n if (opacity !== 1) {\n //change the color in rgb + opacity\n str += prop + '-opacity: ' + opacity.toString() + '; ';\n }\n\n return str;\n }\n }\n\n var toFixed = fabric.util.toFixed;\n fabric.util.object.extend(fabric.Object.prototype,\n /** @lends fabric.Object.prototype */\n {\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function getSvgStyles(skipShadow) {\n var fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none',\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = getSvgColorString('fill', this.fill),\n stroke = getSvgColorString('stroke', this.stroke);\n return [stroke, 'stroke-width: ', strokeWidth, '; ', 'stroke-dasharray: ', strokeDashArray, '; ', 'stroke-linecap: ', strokeLineCap, '; ', 'stroke-dashoffset: ', strokeDashOffset, '; ', 'stroke-linejoin: ', strokeLineJoin, '; ', 'stroke-miterlimit: ', strokeMiterLimit, '; ', fill, 'fill-rule: ', fillRule, '; ', 'opacity: ', opacity, ';', filter, visibility].join('');\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles: function getSvgSpanStyles(style, useWhiteSpace) {\n var term = '; ';\n var fontFamily = style.fontFamily ? 'font-family: ' + (style.fontFamily.indexOf('\\'') === -1 && style.fontFamily.indexOf('\"') === -1 ? '\\'' + style.fontFamily + '\\'' : style.fontFamily) + term : '';\n var strokeWidth = style.strokeWidth ? 'stroke-width: ' + style.strokeWidth + term : '',\n fontFamily = fontFamily,\n fontSize = style.fontSize ? 'font-size: ' + style.fontSize + 'px' + term : '',\n fontStyle = style.fontStyle ? 'font-style: ' + style.fontStyle + term : '',\n fontWeight = style.fontWeight ? 'font-weight: ' + style.fontWeight + term : '',\n fill = style.fill ? getSvgColorString('fill', style.fill) : '',\n stroke = style.stroke ? getSvgColorString('stroke', style.stroke) : '',\n textDecoration = this.getSvgTextDecoration(style),\n deltaY = style.deltaY ? 'baseline-shift: ' + -style.deltaY + '; ' : '';\n\n if (textDecoration) {\n textDecoration = 'text-decoration: ' + textDecoration + term;\n }\n\n return [stroke, strokeWidth, fontFamily, fontSize, fontStyle, fontWeight, textDecoration, fill, deltaY, useWhiteSpace ? 'white-space: pre; ' : ''].join('');\n },\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration: function getSvgTextDecoration(style) {\n return ['overline', 'underline', 'line-through'].filter(function (decoration) {\n return style[decoration.replace('-', '')];\n }).join(' ');\n },\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter: function getSvgFilter() {\n return this.shadow ? 'filter: url(#SVGID_' + this.shadow.id + ');' : '';\n },\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons: function getSvgCommons() {\n return [this.id ? 'id=\"' + this.id + '\" ' : '', this.clipPath ? 'clip-path=\"url(#' + this.clipPath.clipPathId + ')\" ' : ''].join('');\n },\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform: function getSvgTransform(full, additionalTransform) {\n var transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = 'transform=\"' + fabric.util.matrixToSVG(transform);\n return svgTransform + (additionalTransform || '') + this.getSvgTransformMatrix() + '\" ';\n },\n\n /**\n * Returns transform-string for svg-export from the transform matrix of single elements\n * @return {String}\n */\n getSvgTransformMatrix: function getSvgTransformMatrix() {\n return this.transformMatrix ? ' ' + fabric.util.matrixToSVG(this.transformMatrix) : '';\n },\n _setSVGBg: function _setSVGBg(textBgRects) {\n if (this.backgroundColor) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push('\\t\\t\\n');\n }\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function toSVG(reviver) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), {\n reviver: reviver\n });\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function toClipPathSVG(reviver) {\n return '\\t' + this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {\n reviver: reviver\n });\n },\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup: function _createBaseClipPathSVGMarkup(objectMarkup, options) {\n options = options || {};\n var reviver = options.reviver,\n additionalTransform = options.additionalTransform || '',\n commonPieces = [this.getSvgTransform(true, additionalTransform), this.getSvgCommons()].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n },\n\n /**\n * @private\n */\n _createBaseSVGMarkup: function _createBaseSVGMarkup(objectMarkup, options) {\n options = options || {};\n var noStyle = options.noStyle,\n reviver = options.reviver,\n styleInfo = noStyle ? '' : 'style=\"' + this.getSvgStyles() + '\" ',\n shadowInfo = options.withShadow ? 'style=\"' + this.getSvgFilter() + '\" ' : '',\n clipPath = this.clipPath,\n vectorEffect = this.strokeUniform ? 'vector-effect=\"non-scaling-stroke\" ' : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke,\n fill = this.fill,\n shadow = this.shadow,\n commonPieces,\n markup = [],\n clipPathMarkup,\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS'),\n additionalTransform = options.additionalTransform;\n\n if (clipPath) {\n clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n clipPathMarkup = '\\n' + clipPath.toClipPathSVG(reviver) + '\\n';\n }\n\n if (absoluteClipPath) {\n markup.push('\\n');\n }\n\n markup.push('\\n');\n commonPieces = [styleInfo, vectorEffect, noStyle ? '' : this.addPaintOrder(), ' ', additionalTransform ? 'transform=\"' + additionalTransform + '\" ' : ''].join('');\n objectMarkup[index] = commonPieces;\n\n if (fill && fill.toLive) {\n markup.push(fill.toSVG(this));\n }\n\n if (stroke && stroke.toLive) {\n markup.push(stroke.toSVG(this));\n }\n\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n },\n addPaintOrder: function addPaintOrder() {\n return this.paintFirst !== 'fill' ? ' paint-order=\"' + this.paintFirst + '\" ' : '';\n }\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function () {\n var extend = fabric.util.object.extend,\n originalSet = 'stateProperties';\n /*\n Depends on `stateProperties`\n */\n\n function saveProps(origin, destination, props) {\n var tmpObj = {},\n deep = true;\n props.forEach(function (prop) {\n tmpObj[prop] = origin[prop];\n });\n extend(origin[destination], tmpObj, deep);\n }\n\n function _isEqual(origValue, currentValue, firstPass) {\n if (origValue === currentValue) {\n // if the objects are identical, return\n return true;\n } else if (Array.isArray(origValue)) {\n if (!Array.isArray(currentValue) || origValue.length !== currentValue.length) {\n return false;\n }\n\n for (var i = 0, len = origValue.length; i < len; i++) {\n if (!_isEqual(origValue[i], currentValue[i])) {\n return false;\n }\n }\n\n return true;\n } else if (origValue && _typeof(origValue) === 'object') {\n var keys = Object.keys(origValue),\n key;\n\n if (!currentValue || _typeof(currentValue) !== 'object' || !firstPass && keys.length !== Object.keys(currentValue).length) {\n return false;\n }\n\n for (var i = 0, len = keys.length; i < len; i++) {\n key = keys[i]; // since clipPath is in the statefull cache list and the clipPath objects\n // would be iterated as an object, this would lead to possible infinite recursion\n\n if (key === 'canvas') {\n continue;\n }\n\n if (!_isEqual(origValue[key], currentValue[key])) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n fabric.util.object.extend(fabric.Object.prototype,\n /** @lends fabric.Object.prototype */\n {\n /**\n * Returns true if object state (one of its state properties) was changed\n * @param {String} [propertySet] optional name for the set of property we want to save\n * @return {Boolean} true if instance' state has changed since `{@link fabric.Object#saveState}` was called\n */\n hasStateChanged: function hasStateChanged(propertySet) {\n propertySet = propertySet || originalSet;\n var dashedPropertySet = '_' + propertySet;\n\n if (Object.keys(this[dashedPropertySet]).length < this[propertySet].length) {\n return true;\n }\n\n return !_isEqual(this[dashedPropertySet], this, true);\n },\n\n /**\n * Saves state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n saveState: function saveState(options) {\n var propertySet = options && options.propertySet || originalSet,\n destination = '_' + propertySet;\n\n if (!this[destination]) {\n return this.setupState(options);\n }\n\n saveProps(this, destination, this[propertySet]);\n\n if (options && options.stateProperties) {\n saveProps(this, destination, options.stateProperties);\n }\n\n return this;\n },\n\n /**\n * Setups state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n setupState: function setupState(options) {\n options = options || {};\n var propertySet = options.propertySet || originalSet;\n options.propertySet = propertySet;\n this['_' + propertySet] = {};\n this.saveState(options);\n return this;\n }\n });\n})();\n\n(function () {\n var degreesToRadians = fabric.util.degreesToRadians;\n fabric.util.object.extend(fabric.Object.prototype,\n /** @lends fabric.Object.prototype */\n {\n /**\n * The object interactivity controls.\n * @private\n */\n _controlsVisibility: null,\n\n /**\n * Determines which corner has been clicked\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or false if nothing is found\n */\n _findTargetCorner: function _findTargetCorner(pointer) {\n // objects in group, anykind, are not self modificable,\n // must not return an hovered corner.\n if (!this.hasControls || this.group || !this.canvas || this.canvas._activeObject !== this) {\n return false;\n }\n\n var ex = pointer.x,\n ey = pointer.y,\n xPoints,\n lines;\n this.__corner = 0;\n\n for (var i in this.oCoords) {\n if (!this.isControlVisible(i)) {\n continue;\n }\n\n if (i === 'mtr' && !this.hasRotatingPoint) {\n continue;\n }\n\n if (this.get('lockUniScaling') && (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) {\n continue;\n }\n\n lines = this._getImageLines(this.oCoords[i].corner); // debugging\n // canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n // canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n // canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n // canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n\n xPoints = this._findCrossPoints({\n x: ex,\n y: ey\n }, lines);\n\n if (xPoints !== 0 && xPoints % 2 === 1) {\n this.__corner = i;\n return i;\n }\n }\n\n return false;\n },\n\n /**\n * Sets the coordinates of the draggable boxes in the corners of\n * the image used to scale/rotate it.\n * @private\n */\n _setCornerCoords: function _setCornerCoords() {\n var coords = this.oCoords,\n newTheta = degreesToRadians(45 - this.angle),\n\n /* Math.sqrt(2 * Math.pow(this.cornerSize, 2)) / 2, */\n\n /* 0.707106 stands for sqrt(2)/2 */\n cornerHypotenuse = this.cornerSize * 0.707106,\n cosHalfOffset = cornerHypotenuse * fabric.util.cos(newTheta),\n sinHalfOffset = cornerHypotenuse * fabric.util.sin(newTheta),\n x,\n y;\n\n for (var point in coords) {\n x = coords[point].x;\n y = coords[point].y;\n coords[point].corner = {\n tl: {\n x: x - sinHalfOffset,\n y: y - cosHalfOffset\n },\n tr: {\n x: x + cosHalfOffset,\n y: y - sinHalfOffset\n },\n bl: {\n x: x - cosHalfOffset,\n y: y + sinHalfOffset\n },\n br: {\n x: x + sinHalfOffset,\n y: y + cosHalfOffset\n }\n };\n }\n },\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawSelectionBackground: function drawSelectionBackground(ctx) {\n if (!this.selectionBackgroundColor || this.canvas && !this.canvas.interactive || this.canvas && this.canvas._activeObject !== this) {\n return this;\n }\n\n ctx.save();\n\n var center = this.getCenterPoint(),\n wh = this._calculateCurrentDimensions(),\n vpt = this.canvas.viewportTransform;\n\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBorders: function drawBorders(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n\n var wh = this._calculateCurrentDimensions(),\n strokeWidth = this.borderScaleFactor,\n width = wh.x + strokeWidth,\n height = wh.y + strokeWidth,\n drawRotatingPoint = typeof styleOverride.hasRotatingPoint !== 'undefined' ? styleOverride.hasRotatingPoint : this.hasRotatingPoint,\n hasControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls,\n rotatingPointOffset = typeof styleOverride.rotatingPointOffset !== 'undefined' ? styleOverride.rotatingPointOffset : this.rotatingPointOffset;\n\n ctx.save();\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray, null);\n\n ctx.strokeRect(-width / 2, -height / 2, width, height);\n\n if (drawRotatingPoint && this.isControlVisible('mtr') && hasControls) {\n var rotateHeight = -height / 2;\n ctx.beginPath();\n ctx.moveTo(0, rotateHeight);\n ctx.lineTo(0, rotateHeight - rotatingPointOffset);\n ctx.stroke();\n }\n\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box when it is inside a group.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBordersInGroup: function drawBordersInGroup(ctx, options, styleOverride) {\n styleOverride = styleOverride || {};\n var p = {\n x: this.width,\n y: this.height\n },\n matrix = fabric.util.composeMatrix({\n scaleX: options.scaleX,\n scaleY: options.scaleY,\n skewX: options.skewX\n }),\n wh = fabric.util.transformPoint(p, matrix),\n strokeWidth = this.strokeWidth,\n borderScaleFactor = this.borderScaleFactor,\n width = wh.x + strokeWidth * (this.strokeUniform ? this.canvas.getZoom() : options.scaleX) + borderScaleFactor,\n height = wh.y + strokeWidth * (this.strokeUniform ? this.canvas.getZoom() : options.scaleY) + borderScaleFactor;\n ctx.save();\n\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray, null);\n\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n ctx.strokeRect(-width / 2, -height / 2, width, height);\n ctx.restore();\n return this;\n },\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawControls: function drawControls(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n\n var wh = this._calculateCurrentDimensions(),\n width = wh.x,\n height = wh.y,\n scaleOffset = styleOverride.cornerSize || this.cornerSize,\n left = -(width + scaleOffset) / 2,\n top = -(height + scaleOffset) / 2,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ? styleOverride.transparentCorners : this.transparentCorners,\n hasRotatingPoint = typeof styleOverride.hasRotatingPoint !== 'undefined' ? styleOverride.hasRotatingPoint : this.hasRotatingPoint,\n methodName = transparentCorners ? 'stroke' : 'fill';\n\n ctx.save();\n ctx.strokeStyle = ctx.fillStyle = styleOverride.cornerColor || this.cornerColor;\n\n if (!this.transparentCorners) {\n ctx.strokeStyle = styleOverride.cornerStrokeColor || this.cornerStrokeColor;\n }\n\n this._setLineDash(ctx, styleOverride.cornerDashArray || this.cornerDashArray, null); // top-left\n\n\n this._drawControl('tl', ctx, methodName, left, top, styleOverride); // top-right\n\n\n this._drawControl('tr', ctx, methodName, left + width, top, styleOverride); // bottom-left\n\n\n this._drawControl('bl', ctx, methodName, left, top + height, styleOverride); // bottom-right\n\n\n this._drawControl('br', ctx, methodName, left + width, top + height, styleOverride);\n\n if (!this.get('lockUniScaling')) {\n // middle-top\n this._drawControl('mt', ctx, methodName, left + width / 2, top, styleOverride); // middle-bottom\n\n\n this._drawControl('mb', ctx, methodName, left + width / 2, top + height, styleOverride); // middle-right\n\n\n this._drawControl('mr', ctx, methodName, left + width, top + height / 2, styleOverride); // middle-left\n\n\n this._drawControl('ml', ctx, methodName, left, top + height / 2, styleOverride);\n } // middle-top-rotate\n\n\n if (hasRotatingPoint) {\n this._drawControl('mtr', ctx, methodName, left + width / 2, top - this.rotatingPointOffset, styleOverride);\n }\n\n ctx.restore();\n return this;\n },\n\n /**\n * @private\n */\n _drawControl: function _drawControl(control, ctx, methodName, left, top, styleOverride) {\n styleOverride = styleOverride || {};\n\n if (!this.isControlVisible(control)) {\n return;\n }\n\n var size = this.cornerSize,\n stroke = !this.transparentCorners && this.cornerStrokeColor;\n\n switch (styleOverride.cornerStyle || this.cornerStyle) {\n case 'circle':\n ctx.beginPath();\n ctx.arc(left + size / 2, top + size / 2, size / 2, 0, 2 * Math.PI, false);\n ctx[methodName]();\n\n if (stroke) {\n ctx.stroke();\n }\n\n break;\n\n default:\n this.transparentCorners || ctx.clearRect(left, top, size, size);\n ctx[methodName + 'Rect'](left, top, size, size);\n\n if (stroke) {\n ctx.strokeRect(left, top, size, size);\n }\n\n }\n },\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {String} controlName The name of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @returns {Boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible: function isControlVisible(controlName) {\n return this._getControlsVisibility()[controlName];\n },\n\n /**\n * Sets the visibility of the specified control.\n * @param {String} controlName The name of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlVisible: function setControlVisible(controlName, visible) {\n this._getControlsVisibility()[controlName] = visible;\n return this;\n },\n\n /**\n * Sets the visibility state of object controls.\n * @param {Object} [options] Options object\n * @param {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n * @param {Boolean} [options.br] true to enable the bottom-right control, false to disable it\n * @param {Boolean} [options.mb] true to enable the middle-bottom control, false to disable it\n * @param {Boolean} [options.ml] true to enable the middle-left control, false to disable it\n * @param {Boolean} [options.mr] true to enable the middle-right control, false to disable it\n * @param {Boolean} [options.mt] true to enable the middle-top control, false to disable it\n * @param {Boolean} [options.tl] true to enable the top-left control, false to disable it\n * @param {Boolean} [options.tr] true to enable the top-right control, false to disable it\n * @param {Boolean} [options.mtr] true to enable the middle-top-rotate control, false to disable it\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlsVisibility: function setControlsVisibility(options) {\n options || (options = {});\n\n for (var p in options) {\n this.setControlVisible(p, options[p]);\n }\n\n return this;\n },\n\n /**\n * Returns the instance of the control visibility set for this object.\n * @private\n * @returns {Object}\n */\n _getControlsVisibility: function _getControlsVisibility() {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {\n tl: true,\n tr: true,\n br: true,\n bl: true,\n ml: true,\n mt: true,\n mr: true,\n mb: true,\n mtr: true\n };\n }\n\n return this._controlsVisibility;\n },\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onDeselect: function onDeselect() {// implemented by sub-classes, as needed.\n },\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onSelect: function onSelect() {// implemented by sub-classes, as needed.\n }\n });\n})();\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype,\n/** @lends fabric.StaticCanvas.prototype */\n{\n /**\n * Animation duration (in ms) for fx* methods\n * @type Number\n * @default\n */\n FX_DURATION: 500,\n\n /**\n * Centers object horizontally with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxCenterObjectH: function fxCenterObjectH(object, callbacks) {\n callbacks = callbacks || {};\n\n var empty = function empty() {},\n _onComplete = callbacks.onComplete || empty,\n _onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.left,\n endValue: this.getCenter().left,\n duration: this.FX_DURATION,\n onChange: function onChange(value) {\n object.set('left', value);\n\n _this.requestRenderAll();\n\n _onChange();\n },\n onComplete: function onComplete() {\n object.setCoords();\n\n _onComplete();\n }\n });\n return this;\n },\n\n /**\n * Centers object vertically with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxCenterObjectV: function fxCenterObjectV(object, callbacks) {\n callbacks = callbacks || {};\n\n var empty = function empty() {},\n _onComplete2 = callbacks.onComplete || empty,\n _onChange2 = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.top,\n endValue: this.getCenter().top,\n duration: this.FX_DURATION,\n onChange: function onChange(value) {\n object.set('top', value);\n\n _this.requestRenderAll();\n\n _onChange2();\n },\n onComplete: function onComplete() {\n object.setCoords();\n\n _onComplete2();\n }\n });\n return this;\n },\n\n /**\n * Same as `fabric.Canvas#remove` but animated\n * @param {fabric.Object} object Object to remove\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxRemove: function fxRemove(object, callbacks) {\n callbacks = callbacks || {};\n\n var empty = function empty() {},\n _onComplete3 = callbacks.onComplete || empty,\n _onChange3 = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.opacity,\n endValue: 0,\n duration: this.FX_DURATION,\n onChange: function onChange(value) {\n object.set('opacity', value);\n\n _this.requestRenderAll();\n\n _onChange3();\n },\n onComplete: function onComplete() {\n _this.remove(object);\n\n _onComplete3();\n }\n });\n return this;\n }\n});\nfabric.util.object.extend(fabric.Object.prototype,\n/** @lends fabric.Object.prototype */\n{\n /**\n * Animates object's properties\n * @param {String|Object} property Property to animate (if string) or properties to animate (if object)\n * @param {Number|Object} value Value to animate property to (if string was given first) or options object\n * @return {fabric.Object} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @chainable\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n *\n * As string — one property\n *\n * object.animate('left', ...);\n * object.animate('left', { duration: ... });\n *\n */\n animate: function animate() {\n if (arguments[0] && _typeof(arguments[0]) === 'object') {\n var propsToAnimate = [],\n prop,\n skipCallbacks;\n\n for (prop in arguments[0]) {\n propsToAnimate.push(prop);\n }\n\n for (var i = 0, len = propsToAnimate.length; i < len; i++) {\n prop = propsToAnimate[i];\n skipCallbacks = i !== len - 1;\n\n this._animate(prop, arguments[0][prop], arguments[1], skipCallbacks);\n }\n } else {\n this._animate.apply(this, arguments);\n }\n\n return this;\n },\n\n /**\n * @private\n * @param {String} property Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n * @param {Boolean} [skipCallbacks] When true, callbacks like onchange and oncomplete are not invoked\n */\n _animate: function _animate(property, to, options, skipCallbacks) {\n var _this = this,\n propPair;\n\n to = to.toString();\n\n if (!options) {\n options = {};\n } else {\n options = fabric.util.object.clone(options);\n }\n\n if (~property.indexOf('.')) {\n propPair = property.split('.');\n }\n\n var currentValue = propPair ? this.get(propPair[0])[propPair[1]] : this.get(property);\n\n if (!('from' in options)) {\n options.from = currentValue;\n }\n\n if (~to.indexOf('=')) {\n to = currentValue + parseFloat(to.replace('=', ''));\n } else {\n to = parseFloat(to);\n }\n\n fabric.util.animate({\n startValue: options.from,\n endValue: to,\n byValue: options.by,\n easing: options.easing,\n duration: options.duration,\n abort: options.abort && function () {\n return options.abort.call(_this);\n },\n onChange: function onChange(value, valueProgress, timeProgress) {\n if (propPair) {\n _this[propPair[0]][propPair[1]] = value;\n } else {\n _this.set(property, value);\n }\n\n if (skipCallbacks) {\n return;\n }\n\n options.onChange && options.onChange(value, valueProgress, timeProgress);\n },\n onComplete: function onComplete(value, valueProgress, timeProgress) {\n if (skipCallbacks) {\n return;\n }\n\n _this.setCoords();\n\n options.onComplete && options.onComplete(value, valueProgress, timeProgress);\n }\n });\n }\n});\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n coordProps = {\n x1: 1,\n x2: 1,\n y1: 1,\n y2: 1\n },\n supportsLineDash = fabric.StaticCanvas.supports('setLineDash');\n\n if (fabric.Line) {\n fabric.warn('fabric.Line is already defined');\n return;\n }\n /**\n * Line class\n * @class fabric.Line\n * @extends fabric.Object\n * @see {@link fabric.Line#initialize} for constructor definition\n */\n\n\n fabric.Line = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Line.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'line',\n\n /**\n * x value or first line edge\n * @type Number\n * @default\n */\n x1: 0,\n\n /**\n * y value or first line edge\n * @type Number\n * @default\n */\n y1: 0,\n\n /**\n * x value or second line edge\n * @type Number\n * @default\n */\n x2: 0,\n\n /**\n * y value or second line edge\n * @type Number\n * @default\n */\n y2: 0,\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('x1', 'x2', 'y1', 'y2'),\n\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {fabric.Line} thisArg\n */\n initialize: function initialize(points, options) {\n if (!points) {\n points = [0, 0, 0, 0];\n }\n\n this.callSuper('initialize', options);\n this.set('x1', points[0]);\n this.set('y1', points[1]);\n this.set('x2', points[2]);\n this.set('y2', points[3]);\n\n this._setWidthHeight(options);\n },\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight: function _setWidthHeight(options) {\n options || (options = {});\n this.width = Math.abs(this.x2 - this.x1);\n this.height = Math.abs(this.y2 - this.y1);\n this.left = 'left' in options ? options.left : this._getLeftToOriginX();\n this.top = 'top' in options ? options.top : this._getTopToOriginY();\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set: function _set(key, value) {\n this.callSuper('_set', key, value);\n\n if (typeof coordProps[key] !== 'undefined') {\n this._setWidthHeight();\n }\n\n return this;\n },\n\n /**\n * @private\n * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line.\n */\n _getLeftToOriginX: makeEdgeToOriginGetter({\n // property names\n origin: 'originX',\n axis1: 'x1',\n axis2: 'x2',\n dimension: 'width'\n }, {\n // possible values of origin\n nearest: 'left',\n center: 'center',\n farthest: 'right'\n }),\n\n /**\n * @private\n * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line.\n */\n _getTopToOriginY: makeEdgeToOriginGetter({\n // property names\n origin: 'originY',\n axis1: 'y1',\n axis2: 'y2',\n dimension: 'height'\n }, {\n // possible values of origin\n nearest: 'top',\n center: 'center',\n farthest: 'bottom'\n }),\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n ctx.beginPath();\n\n if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) {\n // move from center (of virtual box) to its left/top corner\n // we can't assume x1, y1 is top left and x2, y2 is bottom right\n var p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n }\n\n ctx.lineWidth = this.strokeWidth; // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n\n var origStrokeStyle = ctx.strokeStyle;\n ctx.strokeStyle = this.stroke || ctx.fillStyle;\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function _renderDashedStroke(ctx) {\n var p = this.calcLinePoints();\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, p.x1, p.y1, p.x2, p.y2, this.strokeDashArray);\n ctx.closePath();\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function _findCenterFromElement() {\n return {\n x: (this.x1 + this.x2) / 2,\n y: (this.y1 + this.y2) / 2\n };\n },\n\n /**\n * Returns object representation of an instance\n * @methd toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), this.calcLinePoints());\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions: function _getNonTransformedDimensions() {\n var dim = this.callSuper('_getNonTransformedDimensions');\n\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n\n return dim;\n },\n\n /**\n * Recalculates line points given width and height\n * @private\n */\n calcLinePoints: function calcLinePoints() {\n var xMult = this.x1 <= this.x2 ? -1 : 1,\n yMult = this.y1 <= this.y2 ? -1 : 1,\n x1 = xMult * this.width * 0.5,\n y1 = yMult * this.height * 0.5,\n x2 = xMult * this.width * -0.5,\n y2 = yMult * this.height * -0.5;\n return {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2\n };\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n var p = this.calcLinePoints();\n return ['\\n'];\n }\n /* _TO_SVG_END_ */\n\n });\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Line.fromElement})\n * @static\n * @memberOf fabric.Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n\n fabric.Line.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x1 y1 x2 y2'.split(' '));\n /**\n * Returns fabric.Line instance from an SVG element\n * @static\n * @memberOf fabric.Line\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n\n fabric.Line.fromElement = function (element, callback, options) {\n options = options || {};\n var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES),\n points = [parsedAttributes.x1 || 0, parsedAttributes.y1 || 0, parsedAttributes.x2 || 0, parsedAttributes.y2 || 0];\n callback(new fabric.Line(points, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Line instance from an object representation\n * @static\n * @memberOf fabric.Line\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n\n\n fabric.Line.fromObject = function (object, callback) {\n function _callback(instance) {\n delete instance.points;\n callback && callback(instance);\n }\n\n ;\n var options = clone(object, true);\n options.points = [object.x1, object.y1, object.x2, object.y2];\n\n fabric.Object._fromObject('Line', options, _callback, 'points');\n };\n /**\n * Produces a function that calculates distance from canvas edge to Line origin.\n */\n\n\n function makeEdgeToOriginGetter(propertyNames, originValues) {\n var origin = propertyNames.origin,\n axis1 = propertyNames.axis1,\n axis2 = propertyNames.axis2,\n dimension = propertyNames.dimension,\n nearest = originValues.nearest,\n center = originValues.center,\n farthest = originValues.farthest;\n return function () {\n switch (this.get(origin)) {\n case nearest:\n return Math.min(this.get(axis1), this.get(axis2));\n\n case center:\n return Math.min(this.get(axis1), this.get(axis2)) + 0.5 * this.get(dimension);\n\n case farthest:\n return Math.max(this.get(axis1), this.get(axis2));\n }\n };\n }\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n pi = Math.PI;\n\n if (fabric.Circle) {\n fabric.warn('fabric.Circle is already defined.');\n return;\n }\n /**\n * Circle class\n * @class fabric.Circle\n * @extends fabric.Object\n * @see {@link fabric.Circle#initialize} for constructor definition\n */\n\n\n fabric.Circle = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Circle.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'circle',\n\n /**\n * Radius of this circle\n * @type Number\n * @default\n */\n radius: 0,\n\n /**\n * Start angle of the circle, moving clockwise\n * deprectated type, this should be in degree, this was an oversight.\n * probably will change to degrees in next major version\n * @type Number\n * @default 0\n */\n startAngle: 0,\n\n /**\n * End angle of the circle\n * deprectated type, this should be in degree, this was an oversight.\n * probably will change to degrees in next major version\n * @type Number\n * @default 2Pi\n */\n endAngle: pi * 2,\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('radius', 'startAngle', 'endAngle'),\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Circle} thisArg\n */\n _set: function _set(key, value) {\n this.callSuper('_set', key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n return this.callSuper('toObject', ['radius', 'startAngle', 'endAngle'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n var svgString,\n x = 0,\n y = 0,\n angle = (this.endAngle - this.startAngle) % (2 * pi);\n\n if (angle === 0) {\n svgString = ['\\n'];\n } else {\n var startX = fabric.util.cos(this.startAngle) * this.radius,\n startY = fabric.util.sin(this.startAngle) * this.radius,\n endX = fabric.util.cos(this.endAngle) * this.radius,\n endY = fabric.util.sin(this.endAngle) * this.radius,\n largeFlag = angle > pi ? '1' : '0';\n svgString = ['\\n'];\n }\n\n return svgString;\n },\n\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function _render(ctx) {\n ctx.beginPath();\n ctx.arc(0, 0, this.radius, this.startAngle, this.endAngle, false);\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX: function getRadiusX() {\n return this.get('radius') * this.get('scaleX');\n },\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY: function getRadiusY() {\n return this.get('radius') * this.get('scaleY');\n },\n\n /**\n * Sets radius of an object (and updates width accordingly)\n * @return {fabric.Circle} thisArg\n */\n setRadius: function setRadius(value) {\n this.radius = value;\n return this.set('width', value * 2).set('height', value * 2);\n }\n });\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Circle.fromElement})\n * @static\n * @memberOf fabric.Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n\n fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' '));\n /**\n * Returns {@link fabric.Circle} instance from an SVG element\n * @static\n * @memberOf fabric.Circle\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @param {Object} [options] Options object\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n\n fabric.Circle.fromElement = function (element, callback) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Circle.ATTRIBUTE_NAMES);\n\n if (!isValidRadius(parsedAttributes)) {\n throw new Error('value of `r` attribute is required and can not be negative');\n }\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius;\n callback(new fabric.Circle(parsedAttributes));\n };\n /**\n * @private\n */\n\n\n function isValidRadius(attributes) {\n return 'radius' in attributes && attributes.radius >= 0;\n }\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Circle} instance from an object representation\n * @static\n * @memberOf fabric.Circle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {Object} Instance of fabric.Circle\n */\n\n\n fabric.Circle.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Circle', object, callback);\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {});\n\n if (fabric.Triangle) {\n fabric.warn('fabric.Triangle is already defined');\n return;\n }\n /**\n * Triangle class\n * @class fabric.Triangle\n * @extends fabric.Object\n * @return {fabric.Triangle} thisArg\n * @see {@link fabric.Triangle#initialize} for constructor definition\n */\n\n\n fabric.Triangle = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Triangle.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'triangle',\n\n /**\n * Width is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n width: 100,\n\n /**\n * Height is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n height: 100,\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function _renderDashedStroke(ctx) {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, -widthBy2, heightBy2, 0, -heightBy2, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, 0, -heightBy2, widthBy2, heightBy2, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, widthBy2, heightBy2, -widthBy2, heightBy2, this.strokeDashArray);\n ctx.closePath();\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = [-widthBy2 + ' ' + heightBy2, '0 ' + -heightBy2, widthBy2 + ' ' + heightBy2].join(',');\n return [''];\n }\n /* _TO_SVG_END_ */\n\n });\n /**\n * Returns {@link fabric.Triangle} instance from an object representation\n * @static\n * @memberOf fabric.Triangle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n\n fabric.Triangle.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Triangle', object, callback);\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n piBy2 = Math.PI * 2;\n\n if (fabric.Ellipse) {\n fabric.warn('fabric.Ellipse is already defined.');\n return;\n }\n /**\n * Ellipse class\n * @class fabric.Ellipse\n * @extends fabric.Object\n * @return {fabric.Ellipse} thisArg\n * @see {@link fabric.Ellipse#initialize} for constructor definition\n */\n\n\n fabric.Ellipse = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Ellipse.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'ellipse',\n\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n ry: 0,\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {fabric.Ellipse} thisArg\n */\n initialize: function initialize(options) {\n this.callSuper('initialize', options);\n this.set('rx', options && options.rx || 0);\n this.set('ry', options && options.ry || 0);\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Ellipse} thisArg\n */\n _set: function _set(key, value) {\n this.callSuper('_set', key, value);\n\n switch (key) {\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n }\n\n return this;\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx: function getRx() {\n return this.get('rx') * this.get('scaleX');\n },\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy: function getRy() {\n return this.get('ry') * this.get('scaleY');\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n return ['\\n'];\n },\n\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function _render(ctx) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(0, 0, this.rx, 0, piBy2, false);\n ctx.restore();\n\n this._renderPaintInOrder(ctx);\n }\n });\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Ellipse.fromElement})\n * @static\n * @memberOf fabric.Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n\n fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy rx ry'.split(' '));\n /**\n * Returns {@link fabric.Ellipse} instance from an SVG element\n * @static\n * @memberOf fabric.Ellipse\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @return {fabric.Ellipse}\n */\n\n fabric.Ellipse.fromElement = function (element, callback) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES);\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n callback(new fabric.Ellipse(parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Ellipse} instance from an object representation\n * @static\n * @memberOf fabric.Ellipse\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {fabric.Ellipse}\n */\n\n\n fabric.Ellipse.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Ellipse', object, callback);\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend;\n\n if (fabric.Rect) {\n fabric.warn('fabric.Rect is already defined');\n return;\n }\n /**\n * Rectangle class\n * @class fabric.Rect\n * @extends fabric.Object\n * @return {fabric.Rect} thisArg\n * @see {@link fabric.Rect#initialize} for constructor definition\n */\n\n\n fabric.Rect = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Rect.prototype */\n {\n /**\n * List of properties to consider when checking if state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('rx', 'ry'),\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'rect',\n\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n ry: 0,\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function initialize(options) {\n this.callSuper('initialize', options);\n\n this._initRxRy();\n },\n\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy: function _initRxRy() {\n if (this.rx && !this.ry) {\n this.ry = this.rx;\n } else if (this.ry && !this.rx) {\n this.rx = this.ry;\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n // 1x1 case (used in spray brush) optimization was removed because\n // with caching and higher zoom level this makes more damage than help\n var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0,\n ry = this.ry ? Math.min(this.ry, this.height / 2) : 0,\n w = this.width,\n h = this.height,\n x = -this.width / 2,\n y = -this.height / 2,\n isRounded = rx !== 0 || ry !== 0,\n\n /* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\n k = 1 - 0.5522847498;\n ctx.beginPath();\n ctx.moveTo(x + rx, y);\n ctx.lineTo(x + w - rx, y);\n isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry);\n ctx.lineTo(x + w, y + h - ry);\n isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h);\n ctx.lineTo(x + rx, y + h);\n isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry);\n ctx.lineTo(x, y + ry);\n isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function _renderDashedStroke(ctx) {\n var x = -this.width / 2,\n y = -this.height / 2,\n w = this.width,\n h = this.height;\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray);\n ctx.closePath();\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n var x = -this.width / 2,\n y = -this.height / 2;\n return ['\\n'];\n }\n /* _TO_SVG_END_ */\n\n });\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Rect.fromElement`)\n * @static\n * @memberOf fabric.Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n\n fabric.Rect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y rx ry width height'.split(' '));\n /**\n * Returns {@link fabric.Rect} instance from an SVG element\n * @static\n * @memberOf fabric.Rect\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n\n fabric.Rect.fromElement = function (element, callback, options) {\n if (!element) {\n return callback(null);\n }\n\n options = options || {};\n var parsedAttributes = fabric.parseAttributes(element, fabric.Rect.ATTRIBUTE_NAMES);\n parsedAttributes.left = parsedAttributes.left || 0;\n parsedAttributes.top = parsedAttributes.top || 0;\n parsedAttributes.height = parsedAttributes.height || 0;\n parsedAttributes.width = parsedAttributes.width || 0;\n var rect = new fabric.Rect(extend(options ? fabric.util.object.clone(options) : {}, parsedAttributes));\n rect.visible = rect.visible && rect.width > 0 && rect.height > 0;\n callback(rect);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Rect} instance from an object representation\n * @static\n * @memberOf fabric.Rect\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Rect instance is created\n */\n\n\n fabric.Rect.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Rect', object, callback);\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend,\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n toFixed = fabric.util.toFixed;\n\n if (fabric.Polyline) {\n fabric.warn('fabric.Polyline is already defined');\n return;\n }\n /**\n * Polyline class\n * @class fabric.Polyline\n * @extends fabric.Object\n * @see {@link fabric.Polyline#initialize} for constructor definition\n */\n\n\n fabric.Polyline = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Polyline.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polyline',\n\n /**\n * Points array\n * @type Array\n * @default\n */\n points: null,\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('points'),\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {fabric.Polyline} thisArg\n * @example\n * var poly = new fabric.Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n initialize: function initialize(points, options) {\n options = options || {};\n this.points = points || [];\n this.callSuper('initialize', options);\n\n this._setPositionDimensions(options);\n },\n _setPositionDimensions: function _setPositionDimensions(options) {\n var calcDim = this._calcDimensions(options),\n correctLeftTop;\n\n this.width = calcDim.width;\n this.height = calcDim.height;\n\n if (!options.fromSVG) {\n correctLeftTop = this.translateToGivenOrigin({\n x: calcDim.left - this.strokeWidth / 2,\n y: calcDim.top - this.strokeWidth / 2\n }, 'left', 'top', this.originX, this.originY);\n }\n\n if (typeof options.left === 'undefined') {\n this.left = options.fromSVG ? calcDim.left : correctLeftTop.x;\n }\n\n if (typeof options.top === 'undefined') {\n this.top = options.fromSVG ? calcDim.top : correctLeftTop.y;\n }\n\n this.pathOffset = {\n x: calcDim.left + this.width / 2,\n y: calcDim.top + this.height / 2\n };\n },\n\n /**\n * Calculate the polygon min and max point from points array,\n * returning an object with left, top, widht, height to measure the\n * polygon size\n * @return {Object} object.left X coordinate of the polygon leftmost point\n * @return {Object} object.top Y coordinate of the polygon topmost point\n * @return {Object} object.width distance between X coordinates of the polygon leftmost and rightmost point\n * @return {Object} object.height distance between Y coordinates of the polygon topmost and bottommost point\n * @private\n */\n _calcDimensions: function _calcDimensions() {\n var points = this.points,\n minX = min(points, 'x') || 0,\n minY = min(points, 'y') || 0,\n maxX = max(points, 'x') || 0,\n maxY = max(points, 'y') || 0,\n width = maxX - minX,\n height = maxY - minY;\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n points: this.points.concat()\n });\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n var points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n for (var i = 0, len = this.points.length; i < len; i++) {\n points.push(toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ',', toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), ' ');\n }\n\n return ['<' + this.type + ' ', 'COMMON_PARTS', 'points=\"', points.join(''), '\" />\\n'];\n },\n\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n commonRender: function commonRender(ctx) {\n var point,\n len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return false;\n }\n\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n\n for (var i = 0; i < len; i++) {\n point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n\n return true;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function _renderDashedStroke(ctx) {\n var p1, p2;\n ctx.beginPath();\n\n for (var i = 0, len = this.points.length; i < len; i++) {\n p1 = this.points[i];\n p2 = this.points[i + 1] || p1;\n fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray);\n }\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity: function complexity() {\n return this.get('points').length;\n }\n });\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Polyline.fromElement})\n * @static\n * @memberOf fabric.Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n\n fabric.Polyline.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n /**\n * Returns fabric.Polyline instance from an SVG element\n * @static\n * @memberOf fabric.Polyline\n * @param {SVGElement} element Element to parser\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n\n fabric.Polyline.fromElementGenerator = function (_class) {\n return function (element, callback, options) {\n if (!element) {\n return callback(null);\n }\n\n options || (options = {});\n var points = fabric.parsePointsAttribute(element.getAttribute('points')),\n parsedAttributes = fabric.parseAttributes(element, fabric[_class].ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric[_class](points, extend(parsedAttributes, options)));\n };\n };\n\n fabric.Polyline.fromElement = fabric.Polyline.fromElementGenerator('Polyline');\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polyline instance from an object representation\n * @static\n * @memberOf fabric.Polyline\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n\n fabric.Polyline.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Polyline', object, callback, 'points');\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {});\n\n if (fabric.Polygon) {\n fabric.warn('fabric.Polygon is already defined');\n return;\n }\n /**\n * Polygon class\n * @class fabric.Polygon\n * @extends fabric.Polyline\n * @see {@link fabric.Polygon#initialize} for constructor definition\n */\n\n\n fabric.Polygon = fabric.util.createClass(fabric.Polyline,\n /** @lends fabric.Polygon.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polygon',\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function _renderDashedStroke(ctx) {\n this.callSuper('_renderDashedStroke', ctx);\n ctx.closePath();\n }\n });\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Polygon.fromElement`)\n * @static\n * @memberOf fabric.Polygon\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolygonElement\n */\n\n fabric.Polygon.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n /**\n * Returns {@link fabric.Polygon} instance from an SVG element\n * @static\n * @memberOf fabric.Polygon\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n\n fabric.Polygon.fromElement = fabric.Polyline.fromElementGenerator('Polygon');\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polygon instance from an object representation\n * @static\n * @memberOf fabric.Polygon\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n\n fabric.Polygon.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Polygon', object, callback, 'points');\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n extend = fabric.util.object.extend,\n _toString = Object.prototype.toString,\n drawArc = fabric.util.drawArc,\n toFixed = fabric.util.toFixed,\n commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n },\n repeatedCommands = {\n m: 'l',\n M: 'L'\n };\n\n if (fabric.Path) {\n fabric.warn('fabric.Path is already defined');\n return;\n }\n /**\n * Path class\n * @class fabric.Path\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#path_and_pathgroup}\n * @see {@link fabric.Path#initialize} for constructor definition\n */\n\n\n fabric.Path = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Path.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'path',\n\n /**\n * Array of path points\n * @type Array\n * @default\n */\n path: null,\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('path', 'fillRule'),\n stateProperties: fabric.Object.prototype.stateProperties.concat('path'),\n\n /**\n * Constructor\n * @param {Array|String} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Object} [options] Options object\n * @return {fabric.Path} thisArg\n */\n initialize: function initialize(path, options) {\n options = options || {};\n this.callSuper('initialize', options);\n\n if (!path) {\n path = [];\n }\n\n var fromArray = _toString.call(path) === '[object Array]';\n this.path = fromArray ? path // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)\n : path.match && path.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n\n if (!this.path) {\n return;\n }\n\n if (!fromArray) {\n this.path = this._parsePath();\n }\n\n fabric.Polyline.prototype._setPositionDimensions.call(this, options);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands: function _renderPathCommands(ctx) {\n var current,\n // current instruction\n previous = null,\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n ctx.beginPath();\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n current = this.path[i];\n\n switch (current[0]) {\n // first letter\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'v':\n // vertical lineto, relative\n y += current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'V':\n // verical lineto, absolute\n y = current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n subpathStartX = x;\n subpathStartY = y;\n ctx.moveTo(x + l, y + t);\n break;\n\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n ctx.moveTo(x + l, y + t);\n break;\n\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n ctx.bezierCurveTo(x + current[1] + l, // x1\n y + current[2] + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n ctx.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n ctx.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t); // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n ctx.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY; // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n ctx.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n ctx.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 't':\n // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n ctx.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n ctx.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n // TODO: optimize this\n drawArc(ctx, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n\n case 'A':\n // TODO: optimize this\n drawArc(ctx, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n ctx.closePath();\n break;\n }\n\n previous = current;\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render: function _render(ctx) {\n this._renderPathCommands(ctx);\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function toString() {\n return '#';\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n path: this.path.map(function (item) {\n return item.slice();\n })\n });\n },\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function toDatalessObject(propertiesToInclude) {\n var o = this.toObject(['sourcePath'].concat(propertiesToInclude));\n\n if (o.sourcePath) {\n delete o.path;\n }\n\n return o;\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n var path = this.path.map(function (path) {\n return path.join(' ');\n }).join(' ');\n return ['\\n'];\n },\n _getOffsetTransform: function _getOffsetTransform() {\n var digits = fabric.Object.NUM_FRACTION_DIGITS;\n return ' translate(' + toFixed(-this.pathOffset.x, digits) + ', ' + toFixed(-this.pathOffset.y, digits) + ')';\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function toClipPathSVG(reviver) {\n var additionalTransform = this._getOffsetTransform();\n\n return '\\t' + this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver: reviver,\n additionalTransform: additionalTransform\n });\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function toSVG(reviver) {\n var additionalTransform = this._getOffsetTransform();\n\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver: reviver,\n additionalTransform: additionalTransform\n });\n },\n\n /* _TO_SVG_END_ */\n\n /**\n * Returns number representation of an instance complexity\n * @return {Number} complexity of this instance\n */\n complexity: function complexity() {\n return this.path.length;\n },\n\n /**\n * @private\n */\n _parsePath: function _parsePath() {\n var result = [],\n coords = [],\n currentPath,\n parsed,\n re = fabric.rePathCommand,\n match,\n coordsStr;\n\n for (var i = 0, coordsParsed, len = this.path.length; i < len; i++) {\n currentPath = this.path[i];\n coordsStr = currentPath.slice(1).trim();\n coords.length = 0;\n\n while (match = re.exec(coordsStr)) {\n coords.push(match[0]);\n }\n\n coordsParsed = [currentPath.charAt(0)];\n\n for (var j = 0, jlen = coords.length; j < jlen; j++) {\n parsed = parseFloat(coords[j]);\n\n if (!isNaN(parsed)) {\n coordsParsed.push(parsed);\n }\n }\n\n var command = coordsParsed[0],\n commandLength = commandLengths[command.toLowerCase()],\n repeatedCommand = repeatedCommands[command] || command;\n\n if (coordsParsed.length - 1 > commandLength) {\n for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {\n result.push([command].concat(coordsParsed.slice(k, k + commandLength)));\n command = repeatedCommand;\n }\n } else {\n result.push(coordsParsed);\n }\n }\n\n return result;\n },\n\n /**\n * @private\n */\n _calcDimensions: function _calcDimensions() {\n var aX = [],\n aY = [],\n current,\n // current instruction\n previous = null,\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n bounds;\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n current = this.path[i];\n\n switch (current[0]) {\n // first letter\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n bounds = [];\n break;\n\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n bounds = [];\n break;\n\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n bounds = [];\n break;\n\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n bounds = [];\n break;\n\n case 'v':\n // vertical lineto, relative\n y += current[1];\n bounds = [];\n break;\n\n case 'V':\n // verical lineto, absolute\n y = current[1];\n bounds = [];\n break;\n\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n subpathStartX = x;\n subpathStartY = y;\n bounds = [];\n break;\n\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n bounds = [];\n break;\n\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n bounds = fabric.util.getBoundsOfCurve(x, y, x + current[1], // x1\n y + current[2], // y1\n controlX, // x2\n controlY, // y2\n tempX, tempY);\n x = tempX;\n y = tempY;\n break;\n\n case 'C':\n // bezierCurveTo, absolute\n controlX = current[3];\n controlY = current[4];\n bounds = fabric.util.getBoundsOfCurve(x, y, current[1], current[2], controlX, controlY, current[5], current[6]);\n x = current[5];\n y = current[6];\n break;\n\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, x + current[1], y + current[2], tempX, tempY); // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, current[1], current[2], tempX, tempY);\n x = tempX;\n y = tempY; // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, controlX, controlY, tempX, tempY);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q':\n // quadraticCurveTo, absolute\n controlX = current[1];\n controlY = current[2];\n bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, controlX, controlY, current[3], current[4]);\n x = current[3];\n y = current[4];\n break;\n\n case 't':\n // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, controlX, controlY, tempX, tempY);\n x = tempX;\n y = tempY;\n break;\n\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, controlX, controlY, tempX, tempY);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n // TODO: optimize this\n bounds = fabric.util.getBoundsOfArc(x, y, current[1], current[2], current[3], current[4], current[5], current[6] + x, current[7] + y);\n x += current[6];\n y += current[7];\n break;\n\n case 'A':\n // TODO: optimize this\n bounds = fabric.util.getBoundsOfArc(x, y, current[1], current[2], current[3], current[4], current[5], current[6], current[7]);\n x = current[6];\n y = current[7];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n\n previous = current;\n bounds.forEach(function (point) {\n aX.push(point.x);\n aY.push(point.y);\n });\n aX.push(x);\n aY.push(y);\n }\n\n var minX = min(aX) || 0,\n minY = min(aY) || 0,\n maxX = max(aX) || 0,\n maxY = max(aY) || 0,\n deltaX = maxX - minX,\n deltaY = maxY - minY;\n return {\n left: minX,\n top: minY,\n width: deltaX,\n height: deltaY\n };\n }\n });\n /**\n * Creates an instance of fabric.Path from an object\n * @static\n * @memberOf fabric.Path\n * @param {Object} object\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n\n fabric.Path.fromObject = function (object, callback) {\n if (typeof object.sourcePath === 'string') {\n var pathUrl = object.sourcePath;\n fabric.loadSVGFromURL(pathUrl, function (elements) {\n var path = elements[0];\n path.setOptions(object);\n callback && callback(path);\n });\n } else {\n fabric.Object._fromObject('Path', object, callback, 'path');\n }\n };\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Path.fromElement`)\n * @static\n * @memberOf fabric.Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n\n\n fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(['d']);\n /**\n * Creates an instance of fabric.Path from an SVG element\n * @static\n * @memberOf fabric.Path\n * @param {SVGElement} element to parse\n * @param {Function} callback Callback to invoke when an fabric.Path instance is created\n * @param {Object} [options] Options object\n * @param {Function} [callback] Options callback invoked after parsing is finished\n */\n\n fabric.Path.fromElement = function (element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Path.ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric.Path(parsedAttributes.d, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n min = fabric.util.array.min,\n max = fabric.util.array.max;\n\n if (fabric.Group) {\n return;\n }\n /**\n * Group class\n * @class fabric.Group\n * @extends fabric.Object\n * @mixes fabric.Collection\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.Group#initialize} for constructor definition\n */\n\n\n fabric.Group = fabric.util.createClass(fabric.Object, fabric.Collection,\n /** @lends fabric.Group.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'group',\n\n /**\n * Width of stroke\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * Indicates if click, mouseover, mouseout events & hoverCursor should also check for subtargets\n * @type Boolean\n * @default\n */\n subTargetCheck: false,\n\n /**\n * Groups are container, do not render anything on theyr own, ence no cache properties\n * @type Array\n * @default\n */\n cacheProperties: [],\n\n /**\n * setOnGroup is a method used for TextBox that is no more used since 2.0.0 The behavior is still\n * available setting this boolean to true.\n * @type Boolean\n * @since 2.0.0\n * @default\n */\n useSetOnGroup: false,\n\n /**\n * Constructor\n * @param {Object} objects Group objects\n * @param {Object} [options] Options object\n * @param {Boolean} [isAlreadyGrouped] if true, objects have been grouped already.\n * @return {Object} thisArg\n */\n initialize: function initialize(objects, options, isAlreadyGrouped) {\n options = options || {};\n this._objects = []; // if objects enclosed in a group have been grouped already,\n // we cannot change properties of objects.\n // Thus we need to set options to group without objects,\n\n isAlreadyGrouped && this.callSuper('initialize', options);\n this._objects = objects || [];\n\n for (var i = this._objects.length; i--;) {\n this._objects[i].group = this;\n }\n\n if (!isAlreadyGrouped) {\n var center = options && options.centerPoint; // we want to set origins before calculating the bounding box.\n // so that the topleft can be set with that in mind.\n // if specific top and left are passed, are overwritten later\n // with the callSuper('initialize', options)\n\n if (options.originX !== undefined) {\n this.originX = options.originX;\n }\n\n if (options.originY !== undefined) {\n this.originY = options.originY;\n } // if coming from svg i do not want to calc bounds.\n // i assume width and height are passed along options\n\n\n center || this._calcBounds();\n\n this._updateObjectsCoords(center);\n\n delete options.centerPoint;\n this.callSuper('initialize', options);\n } else {\n this._updateObjectsACoords();\n }\n\n this.setCoords();\n },\n\n /**\n * @private\n * @param {Boolean} [skipCoordsChange] if true, coordinates of objects enclosed in a group do not change\n */\n _updateObjectsACoords: function _updateObjectsACoords() {\n var ignoreZoom = true,\n skipAbsolute = true;\n\n for (var i = this._objects.length; i--;) {\n this._objects[i].setCoords(ignoreZoom, skipAbsolute);\n }\n },\n\n /**\n * @private\n * @param {Boolean} [skipCoordsChange] if true, coordinates of objects enclosed in a group do not change\n */\n _updateObjectsCoords: function _updateObjectsCoords(center) {\n var center = center || this.getCenterPoint();\n\n for (var i = this._objects.length; i--;) {\n this._updateObjectCoords(this._objects[i], center);\n }\n },\n\n /**\n * @private\n * @param {Object} object\n * @param {fabric.Point} center, current center of group.\n */\n _updateObjectCoords: function _updateObjectCoords(object, center) {\n var objectLeft = object.left,\n objectTop = object.top,\n ignoreZoom = true,\n skipAbsolute = true;\n object.set({\n left: objectLeft - center.x,\n top: objectTop - center.y\n });\n object.group = this;\n object.setCoords(ignoreZoom, skipAbsolute);\n },\n\n /**\n * Returns string represenation of a group\n * @return {String}\n */\n toString: function toString() {\n return '#';\n },\n\n /**\n * Adds an object to a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n addWithUpdate: function addWithUpdate(object) {\n this._restoreObjectsState();\n\n fabric.util.resetObjectTransform(this);\n\n if (object) {\n this._objects.push(object);\n\n object.group = this;\n\n object._set('canvas', this.canvas);\n }\n\n this._calcBounds();\n\n this._updateObjectsCoords();\n\n this.setCoords();\n this.dirty = true;\n return this;\n },\n\n /**\n * Removes an object from a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n removeWithUpdate: function removeWithUpdate(object) {\n this._restoreObjectsState();\n\n fabric.util.resetObjectTransform(this);\n this.remove(object);\n\n this._calcBounds();\n\n this._updateObjectsCoords();\n\n this.setCoords();\n this.dirty = true;\n return this;\n },\n\n /**\n * @private\n */\n _onObjectAdded: function _onObjectAdded(object) {\n this.dirty = true;\n object.group = this;\n\n object._set('canvas', this.canvas);\n },\n\n /**\n * @private\n */\n _onObjectRemoved: function _onObjectRemoved(object) {\n this.dirty = true;\n delete object.group;\n },\n\n /**\n * @private\n */\n _set: function _set(key, value) {\n var i = this._objects.length;\n\n if (this.useSetOnGroup) {\n while (i--) {\n this._objects[i].setOnGroup(key, value);\n }\n }\n\n if (key === 'canvas') {\n while (i--) {\n this._objects[i]._set(key, value);\n }\n }\n\n fabric.Object.prototype._set.call(this, key, value);\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n var _includeDefaultValues = this.includeDefaultValues;\n\n var objsToObject = this._objects.map(function (obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n\n var _obj = obj.toObject(propertiesToInclude);\n\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n\n var obj = fabric.Object.prototype.toObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Returns object representation of an instance, in dataless mode.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function toDatalessObject(propertiesToInclude) {\n var objsToObject,\n sourcePath = this.sourcePath;\n\n if (sourcePath) {\n objsToObject = sourcePath;\n } else {\n var _includeDefaultValues = this.includeDefaultValues;\n objsToObject = this._objects.map(function (obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n\n var _obj = obj.toDatalessObject(propertiesToInclude);\n\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n }\n\n var obj = fabric.Object.prototype.toDatalessObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render: function render(ctx) {\n this._transformDone = true;\n this.callSuper('render', ctx);\n this._transformDone = false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache: function shouldCache() {\n var ownCache = fabric.Object.prototype.shouldCache.call(this);\n\n if (ownCache) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n\n return ownCache;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow: function willDrawShadow() {\n if (fabric.Object.prototype.willDrawShadow.call(this)) {\n return true;\n }\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function isOnACache() {\n return this.ownCaching || this.group && this.group.isOnACache();\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function drawObject(ctx) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i].render(ctx);\n }\n\n this._drawClipPath(ctx);\n },\n\n /**\n * Check if cache is dirty\n */\n isCacheDirty: function isCacheDirty(skipCanvas) {\n if (this.callSuper('isCacheDirty', skipCanvas)) {\n return true;\n }\n\n if (!this.statefullCache) {\n return false;\n }\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].isCacheDirty(true)) {\n if (this._cacheCanvas) {\n // if this group has not a cache canvas there is nothing to clean\n var x = this.cacheWidth / this.zoomX,\n y = this.cacheHeight / this.zoomY;\n\n this._cacheContext.clearRect(-x / 2, -y / 2, x, y);\n }\n\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Retores original state of each of group objects (original state is that which was before group was created).\n * @private\n * @return {fabric.Group} thisArg\n * @chainable\n */\n _restoreObjectsState: function _restoreObjectsState() {\n this._objects.forEach(this._restoreObjectState, this);\n\n return this;\n },\n\n /**\n * Realises the transform from this group onto the supplied object\n * i.e. it tells you what would happen if the supplied object was in\n * the group, and then the group was destroyed. It mutates the supplied\n * object.\n * @param {fabric.Object} object\n * @return {fabric.Object} transformedObject\n */\n realizeTransform: function realizeTransform(object) {\n var matrix = object.calcTransformMatrix(),\n options = fabric.util.qrDecompose(matrix),\n center = new fabric.Point(options.translateX, options.translateY);\n object.flipX = false;\n object.flipY = false;\n object.set('scaleX', options.scaleX);\n object.set('scaleY', options.scaleY);\n object.skewX = options.skewX;\n object.skewY = options.skewY;\n object.angle = options.angle;\n object.setPositionByOrigin(center, 'center', 'center');\n return object;\n },\n\n /**\n * Restores original state of a specified object in group\n * @private\n * @param {fabric.Object} object\n * @return {fabric.Group} thisArg\n */\n _restoreObjectState: function _restoreObjectState(object) {\n this.realizeTransform(object);\n object.setCoords();\n delete object.group;\n return this;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n destroy: function destroy() {\n // when group is destroyed objects needs to get a repaint to be eventually\n // displayed on canvas.\n this._objects.forEach(function (object) {\n object.set('dirty', true);\n });\n\n return this._restoreObjectsState();\n },\n\n /**\n * make a group an active selection, remove the group from canvas\n * the group has to be on canvas for this to work.\n * @return {fabric.ActiveSelection} thisArg\n * @chainable\n */\n toActiveSelection: function toActiveSelection() {\n if (!this.canvas) {\n return;\n }\n\n var objects = this._objects,\n canvas = this.canvas;\n this._objects = [];\n var options = this.toObject();\n delete options.objects;\n var activeSelection = new fabric.ActiveSelection([]);\n activeSelection.set(options);\n activeSelection.type = 'activeSelection';\n canvas.remove(this);\n objects.forEach(function (object) {\n object.group = activeSelection;\n object.dirty = true;\n canvas.add(object);\n });\n activeSelection.canvas = canvas;\n activeSelection._objects = objects;\n canvas._activeObject = activeSelection;\n activeSelection.setCoords();\n return activeSelection;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n ungroupOnCanvas: function ungroupOnCanvas() {\n return this._restoreObjectsState();\n },\n\n /**\n * Sets coordinates of all objects inside group\n * @return {fabric.Group} thisArg\n * @chainable\n */\n setObjectsCoords: function setObjectsCoords() {\n var ignoreZoom = true,\n skipAbsolute = true;\n this.forEachObject(function (object) {\n object.setCoords(ignoreZoom, skipAbsolute);\n });\n return this;\n },\n\n /**\n * @private\n */\n _calcBounds: function _calcBounds(onlyWidthHeight) {\n var aX = [],\n aY = [],\n o,\n prop,\n props = ['tr', 'br', 'bl', 'tl'],\n i = 0,\n iLen = this._objects.length,\n j,\n jLen = props.length,\n ignoreZoom = true;\n\n for (; i < iLen; ++i) {\n o = this._objects[i];\n o.setCoords(ignoreZoom);\n\n for (j = 0; j < jLen; j++) {\n prop = props[j];\n aX.push(o.oCoords[prop].x);\n aY.push(o.oCoords[prop].y);\n }\n }\n\n this._getBounds(aX, aY, onlyWidthHeight);\n },\n\n /**\n * @private\n */\n _getBounds: function _getBounds(aX, aY, onlyWidthHeight) {\n var minXY = new fabric.Point(min(aX), min(aY)),\n maxXY = new fabric.Point(max(aX), max(aY)),\n top = minXY.y || 0,\n left = minXY.x || 0,\n width = maxXY.x - minXY.x || 0,\n height = maxXY.y - minXY.y || 0;\n this.width = width;\n this.height = height;\n\n if (!onlyWidthHeight) {\n // the bounding box always finds the topleft most corner.\n // whatever is the group origin, we set up here the left/top position.\n this.setPositionByOrigin({\n x: left,\n y: top\n }, 'left', 'top');\n }\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function _toSVG(reviver) {\n var svgString = ['\\n'];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n\n svgString.push('\\n');\n return svgString;\n },\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles: function getSvgStyles() {\n var opacity = typeof this.opacity !== 'undefined' && this.opacity !== 1 ? 'opacity: ' + this.opacity + ';' : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [opacity, this.getSvgFilter(), visibility].join('');\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function toClipPathSVG(reviver) {\n var svgString = [];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n\n return this._createBaseClipPathSVGMarkup(svgString, {\n reviver: reviver\n });\n }\n /* _TO_SVG_END_ */\n\n });\n /**\n * Returns {@link fabric.Group} instance from an object representation\n * @static\n * @memberOf fabric.Group\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an group instance is created\n */\n\n fabric.Group.fromObject = function (object, callback) {\n var objects = object.objects,\n options = fabric.util.object.clone(object, true);\n delete options.objects;\n\n if (typeof objects === 'string') {\n // it has to be an url or something went wrong.\n fabric.loadSVGFromURL(objects, function (elements) {\n var group = fabric.util.groupSVGElements(elements, object, objects);\n group.set(options);\n callback && callback(group);\n });\n return;\n }\n\n fabric.util.enlivenObjects(objects, function (enlivenedObjects) {\n fabric.util.enlivenObjects([object.clipPath], function (enlivedClipPath) {\n var options = fabric.util.object.clone(object, true);\n options.clipPath = enlivedClipPath[0];\n delete options.objects;\n callback && callback(new fabric.Group(enlivenedObjects, options, true));\n });\n });\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {});\n\n if (fabric.ActiveSelection) {\n return;\n }\n /**\n * Group class\n * @class fabric.ActiveSelection\n * @extends fabric.Group\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.ActiveSelection#initialize} for constructor definition\n */\n\n\n fabric.ActiveSelection = fabric.util.createClass(fabric.Group,\n /** @lends fabric.ActiveSelection.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'activeSelection',\n\n /**\n * Constructor\n * @param {Object} objects ActiveSelection objects\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function initialize(objects, options) {\n options = options || {};\n this._objects = objects || [];\n\n for (var i = this._objects.length; i--;) {\n this._objects[i].group = this;\n }\n\n if (options.originX) {\n this.originX = options.originX;\n }\n\n if (options.originY) {\n this.originY = options.originY;\n }\n\n this._calcBounds();\n\n this._updateObjectsCoords();\n\n fabric.Object.prototype.initialize.call(this, options);\n this.setCoords();\n },\n\n /**\n * Change te activeSelection to a normal group,\n * High level function that automatically adds it to canvas as\n * active object. no events fired.\n * @since 2.0.0\n * @return {fabric.Group}\n */\n toGroup: function toGroup() {\n var objects = this._objects.concat();\n\n this._objects = [];\n var options = fabric.Object.prototype.toObject.call(this);\n var newGroup = new fabric.Group([]);\n delete options.type;\n newGroup.set(options);\n objects.forEach(function (object) {\n object.canvas.remove(object);\n object.group = newGroup;\n });\n newGroup._objects = objects;\n\n if (!this.canvas) {\n return newGroup;\n }\n\n var canvas = this.canvas;\n canvas.add(newGroup);\n canvas._activeObject = newGroup;\n newGroup.setCoords();\n return newGroup;\n },\n\n /**\n * If returns true, deselection is cancelled.\n * @since 2.0.0\n * @return {Boolean} [cancel]\n */\n onDeselect: function onDeselect() {\n this.destroy();\n return false;\n },\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString: function toString() {\n return '#';\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache: function shouldCache() {\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function isOnACache() {\n return false;\n },\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls: function _renderControls(ctx, styleOverride, childrenOverride) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.callSuper('_renderControls', ctx, styleOverride);\n childrenOverride = childrenOverride || {};\n\n if (typeof childrenOverride.hasControls === 'undefined') {\n childrenOverride.hasControls = false;\n }\n\n if (typeof childrenOverride.hasRotatingPoint === 'undefined') {\n childrenOverride.hasRotatingPoint = false;\n }\n\n childrenOverride.forActiveSelection = true;\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i]._renderControls(ctx, childrenOverride);\n }\n\n ctx.restore();\n }\n });\n /**\n * Returns {@link fabric.ActiveSelection} instance from an object representation\n * @static\n * @memberOf fabric.ActiveSelection\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an ActiveSelection instance is created\n */\n\n fabric.ActiveSelection.fromObject = function (object, callback) {\n fabric.util.enlivenObjects(object.objects, function (enlivenedObjects) {\n delete object.objects;\n callback && callback(new fabric.ActiveSelection(enlivenedObjects, object, true));\n });\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var extend = fabric.util.object.extend;\n\n if (!global.fabric) {\n global.fabric = {};\n }\n\n if (global.fabric.Image) {\n fabric.warn('fabric.Image is already defined.');\n return;\n }\n /**\n * Image class\n * @class fabric.Image\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n * @see {@link fabric.Image#initialize} for constructor definition\n */\n\n\n fabric.Image = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Image.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'image',\n\n /**\n * crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n * @type String\n * @default\n */\n crossOrigin: '',\n\n /**\n * Width of a stroke.\n * For image quality a stroke multiple of 2 gives better results.\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * When calling {@link fabric.Image.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default\n */\n srcFromAttribute: false,\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleX: 1,\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleY: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingX: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingY: 1,\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n minimumScaleTrigger: 0.5,\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('cropX', 'cropY'),\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n cacheKey: '',\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropX: 0,\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropY: 0,\n\n /**\n * Constructor\n * @param {HTMLImageElement | String} element Image element\n * @param {Object} [options] Options object\n * @param {function} [callback] callback function to call after eventual filters applied.\n * @return {fabric.Image} thisArg\n */\n initialize: function initialize(element, options) {\n options || (options = {});\n this.filters = [];\n this.cacheKey = 'texture' + fabric.Object.__uid++;\n this.callSuper('initialize', options);\n\n this._initElement(element, options);\n },\n\n /**\n * Returns image element which this instance if based on\n * @return {HTMLImageElement} Image element\n */\n getElement: function getElement() {\n return this._element || {};\n },\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Object} [options] Options object\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setElement: function setElement(element, options) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._element = element;\n this._originalElement = element;\n\n this._initConfig(options);\n\n if (this.filters.length !== 0) {\n this.applyFilters();\n } // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal fiters\n // and is triggered by user interactions rather than dev code\n\n\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n\n return this;\n },\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture: function removeTexture(key) {\n var backend = fabric.filterBackend;\n\n if (backend && backend.evictCachesForKey) {\n backend.evictCachesForKey(key);\n }\n },\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose: function dispose() {\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._cacheContext = undefined;\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach(function (element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }.bind(this));\n },\n\n /**\n * Sets crossOrigin value (on an instance and corresponding image element)\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setCrossOrigin: function setCrossOrigin(value) {\n this.crossOrigin = value;\n this._element.crossOrigin = value;\n return this;\n },\n\n /**\n * Returns original size of an image\n * @return {Object} Object with \"width\" and \"height\" properties\n */\n getOriginalSize: function getOriginalSize() {\n var element = this.getElement();\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height\n };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke: function _stroke(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n var w = this.width / 2,\n h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function _renderDashedStroke(ctx) {\n var x = -this.width / 2,\n y = -this.height / 2,\n w = this.width,\n h = this.height;\n ctx.save();\n\n this._setStrokeStyles(ctx, this);\n\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray);\n ctx.closePath();\n ctx.restore();\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n var filters = [];\n this.filters.forEach(function (filterObj) {\n if (filterObj) {\n filters.push(filterObj.toObject());\n }\n });\n var object = extend(this.callSuper('toObject', ['crossOrigin', 'cropX', 'cropY'].concat(propertiesToInclude)), {\n src: this.getSrc(),\n filters: filters\n });\n\n if (this.resizeFilter) {\n object.resizeFilter = this.resizeFilter.toObject();\n }\n\n return object;\n },\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,hight.\n * @return {Boolean}\n */\n hasCrop: function hasCrop() {\n return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height;\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function _toSVG() {\n var svgString = [],\n imageMarkup = [],\n strokeSvg,\n x = -this.width / 2,\n y = -this.height / 2,\n clipPath = '';\n\n if (this.hasCrop()) {\n var clipPathId = fabric.Object.__uid++;\n svgString.push('\\n', '\\t\\n', '\\n');\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n\n imageMarkup.push('\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n '\" width=\"', this._element.width || this._element.naturalWidth, '\" height=\"', this._element.height || this._element.height, '\"', clipPath, '>\\n');\n\n if (this.stroke || this.strokeDashArray) {\n var origFill = this.fill;\n this.fill = null;\n strokeSvg = ['\\t\\n'];\n this.fill = origFill;\n }\n\n if (this.paintFirst !== 'fill') {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n } else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n\n return svgString;\n },\n\n /* _TO_SVG_END_ */\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc: function getSrc(filtered) {\n var element = filtered ? this._element : this._originalElement;\n\n if (element) {\n if (element.toDataURL) {\n return element.toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src');\n } else {\n return element.src;\n }\n } else {\n return this.src || '';\n }\n },\n\n /**\n * Sets source of an image\n * @param {String} src Source string (URL)\n * @param {Function} [callback] Callback is invoked when image has been loaded (and all filters have been applied)\n * @param {Object} [options] Options object\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setSrc: function setSrc(src, callback, options) {\n fabric.util.loadImage(src, function (img) {\n this.setElement(img, options);\n\n this._setWidthHeight();\n\n callback && callback(this);\n }, this, options && options.crossOrigin);\n return this;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString: function toString() {\n return '#';\n },\n applyResizeFilters: function applyResizeFilters() {\n var filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.scaleX,\n scaleY = objectScale.scaleY,\n elementToFilter = this._filteredEl || this._originalElement;\n\n if (this.group) {\n this.set('dirty', true);\n }\n\n if (!filter || scaleX > minimumScale && scaleY > minimumScale) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n\n var canvasEl = fabric.util.createCanvasElement(),\n cacheKey = this._filteredEl ? this.cacheKey + '_filtered' : this.cacheKey,\n sourceWidth = elementToFilter.width,\n sourceHeight = elementToFilter.height;\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n fabric.filterBackend.applyFilters([filter], elementToFilter, sourceWidth, sourceHeight, this._element, cacheKey);\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n },\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n * @return {thisArg} return the fabric.Image object\n * @chainable\n */\n applyFilters: function applyFilters(filters) {\n filters = filters || this.filters || [];\n filters = filters.filter(function (filter) {\n return filter && !filter.isNeutralState();\n });\n this.set('dirty', true); // needs to clear out or WEBGL will not resize correctly\n\n this.removeTexture(this.cacheKey + '_filtered');\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n this._filteredEl = null;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return this;\n }\n\n var imgElement = this._originalElement,\n sourceWidth = imgElement.naturalWidth || imgElement.width,\n sourceHeight = imgElement.naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the element is the same we need to create a new element\n var canvasEl = fabric.util.createCanvasElement();\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n } else {\n // clear the existing element to get new filter data\n // also dereference the eventual resized _element\n this._element = this._filteredEl;\n\n this._filteredEl.getContext('2d').clearRect(0, 0, sourceWidth, sourceHeight); // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n\n\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n\n fabric.filterBackend.applyFilters(filters, this._originalElement, sourceWidth, sourceHeight, this._element, this.cacheKey);\n\n if (this._originalElement.width !== this._element.width || this._originalElement.height !== this._element.height) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY = this._element.height / this._originalElement.height;\n }\n\n return this;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n\n this._stroke(ctx);\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache: function shouldCache() {\n return this.needsItsOwnCache();\n },\n _renderFill: function _renderFill(ctx) {\n var elementToDraw = this._element,\n w = this.width,\n h = this.height,\n sW = Math.min(elementToDraw.naturalWidth || elementToDraw.width, w * this._filterScalingX),\n sH = Math.min(elementToDraw.naturalHeight || elementToDraw.height, h * this._filterScalingY),\n x = -w / 2,\n y = -h / 2,\n sX = Math.max(0, this.cropX * this._filterScalingX),\n sY = Math.max(0, this.cropY * this._filterScalingY);\n elementToDraw && ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, w, h);\n },\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize: function _needsResize() {\n var scale = this.getTotalObjectScaling();\n return scale.scaleX !== this._lastScaleX || scale.scaleY !== this._lastScaleY;\n },\n\n /**\n * @private\n */\n _resetWidthHeight: function _resetWidthHeight() {\n this.set(this.getOriginalSize());\n },\n\n /**\n * The Image class's initialization method. This method is automatically\n * called by the constructor.\n * @private\n * @param {HTMLImageElement|String} element The element representing the image\n * @param {Object} [options] Options object\n */\n _initElement: function _initElement(element, options) {\n this.setElement(fabric.util.getById(element), options);\n fabric.util.addClass(this.getElement(), fabric.Image.CSS_CANVAS);\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initConfig: function _initConfig(options) {\n options || (options = {});\n this.setOptions(options);\n\n this._setWidthHeight(options);\n\n if (this._element && this.crossOrigin) {\n this._element.crossOrigin = this.crossOrigin;\n }\n },\n\n /**\n * @private\n * @param {Array} filters to be initialized\n * @param {Function} callback Callback to invoke when all fabric.Image.filters instances are created\n */\n _initFilters: function _initFilters(filters, callback) {\n if (filters && filters.length) {\n fabric.util.enlivenObjects(filters, function (enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, 'fabric.Image.filters');\n } else {\n callback && callback();\n }\n },\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n * @param {Object} [options] Object with width/height properties\n */\n _setWidthHeight: function _setWidthHeight(options) {\n options || (options = {});\n var el = this.getElement();\n this.width = options.width || el.naturalWidth || el.width || 0;\n this.height = options.height || el.naturalHeight || el.height || 0;\n },\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n * @return {Object}\n */\n parsePreserveAspectRatioAttribute: function parsePreserveAspectRatioAttribute() {\n var pAR = fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ''),\n rWidth = this._element.width,\n rHeight = this._element.height,\n scaleX = 1,\n scaleY = 1,\n offsetLeft = 0,\n offsetTop = 0,\n cropX = 0,\n cropY = 0,\n offset,\n pWidth = this.width,\n pHeight = this.height,\n parsedAttributes = {\n width: pWidth,\n height: pHeight\n };\n\n if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = fabric.util.findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n\n offset = (pHeight - rHeight * scaleY) / 2;\n\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = fabric.util.findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n\n offset = rHeight - pHeight / scaleY;\n\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n } else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n\n return {\n width: rWidth,\n height: rHeight,\n scaleX: scaleX,\n scaleY: scaleY,\n offsetLeft: offsetLeft,\n offsetTop: offsetTop,\n cropX: cropX,\n cropY: cropY\n };\n }\n });\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n\n fabric.Image.CSS_CANVAS = 'canvas-img';\n /**\n * Alias for getSrc\n * @static\n */\n\n fabric.Image.prototype.getSvgSrc = fabric.Image.prototype.getSrc;\n /**\n * Creates an instance of fabric.Image from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} callback Callback to invoke when an image instance is created\n */\n\n fabric.Image.fromObject = function (_object, callback) {\n var object = fabric.util.object.clone(_object);\n fabric.util.loadImage(object.src, function (img, error) {\n if (error) {\n callback && callback(null, error);\n return;\n }\n\n fabric.Image.prototype._initFilters.call(object, object.filters, function (filters) {\n object.filters = filters || [];\n\n fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function (resizeFilters) {\n object.resizeFilter = resizeFilters[0];\n fabric.util.enlivenObjects([object.clipPath], function (enlivedProps) {\n object.clipPath = enlivedProps[0];\n var image = new fabric.Image(img, object);\n callback(image);\n });\n });\n });\n }, null, object.crossOrigin);\n };\n /**\n * Creates an instance of fabric.Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument)\n * @param {Object} [imgOptions] Options object\n */\n\n\n fabric.Image.fromURL = function (url, callback, imgOptions) {\n fabric.util.loadImage(url, function (img) {\n callback && callback(new fabric.Image(img, imgOptions));\n }, null, imgOptions && imgOptions.crossOrigin);\n };\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Image.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n\n\n fabric.Image.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y width height preserveAspectRatio xlink:href crossOrigin'.split(' '));\n /**\n * Returns {@link fabric.Image} instance from an SVG element\n * @static\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} callback Callback to execute when fabric.Image object is created\n * @return {fabric.Image} Instance of fabric.Image\n */\n\n fabric.Image.fromElement = function (element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES);\n fabric.Image.fromURL(parsedAttributes['xlink:href'], callback, extend(options ? fabric.util.object.clone(options) : {}, parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\nfabric.util.object.extend(fabric.Object.prototype,\n/** @lends fabric.Object.prototype */\n{\n /**\n * @private\n * @return {Number} angle value\n */\n _getAngleValueForStraighten: function _getAngleValueForStraighten() {\n var angle = this.angle % 360;\n\n if (angle > 0) {\n return Math.round((angle - 1) / 90) * 90;\n }\n\n return Math.round(angle / 90) * 90;\n },\n\n /**\n * Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n straighten: function straighten() {\n this.rotate(this._getAngleValueForStraighten());\n return this;\n },\n\n /**\n * Same as {@link fabric.Object.prototype.straighten} but with animation\n * @param {Object} callbacks Object with callback functions\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Object} thisArg\n * @chainable\n */\n fxStraighten: function fxStraighten(callbacks) {\n callbacks = callbacks || {};\n\n var empty = function empty() {},\n _onComplete4 = callbacks.onComplete || empty,\n _onChange4 = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: this.get('angle'),\n endValue: this._getAngleValueForStraighten(),\n duration: this.FX_DURATION,\n onChange: function onChange(value) {\n _this.rotate(value);\n\n _onChange4();\n },\n onComplete: function onComplete() {\n _this.setCoords();\n\n _onComplete4();\n }\n });\n return this;\n }\n});\nfabric.util.object.extend(fabric.StaticCanvas.prototype,\n/** @lends fabric.StaticCanvas.prototype */\n{\n /**\n * Straightens object, then rerenders canvas\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n straightenObject: function straightenObject(object) {\n object.straighten();\n this.requestRenderAll();\n return this;\n },\n\n /**\n * Same as {@link fabric.Canvas.prototype.straightenObject}, but animated\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxStraightenObject: function fxStraightenObject(object) {\n object.fxStraighten({\n onChange: this.requestRenderAllBound\n });\n return this;\n }\n});\n\n(function () {\n 'use strict';\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {String} Precision to test can be any of following: 'lowp', 'mediump', 'highp'\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n\n function testPrecision(gl, precision) {\n var fragmentSource = 'precision ' + precision + ' float;\\nvoid main(){}';\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n return false;\n }\n\n return true;\n }\n /**\n * Indicate whether this filtering backend is supported by the user's browser.\n * @param {Number} tileSize check if the tileSize is supported\n * @returns {Boolean} Whether the user's browser supports WebGL.\n */\n\n\n fabric.isWebglSupported = function (tileSize) {\n if (fabric.isLikelyNode) {\n return false;\n }\n\n tileSize = tileSize || fabric.WebglFilterBackend.prototype.tileSize;\n var canvas = document.createElement('canvas');\n var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n var isSupported = false; // eslint-disable-next-line\n\n if (gl) {\n fabric.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n isSupported = fabric.maxTextureSize >= tileSize;\n var precisions = ['highp', 'mediump', 'lowp'];\n\n for (var i = 0; i < 3; i++) {\n if (testPrecision(gl, precisions[i])) {\n fabric.webGlPrecision = precisions[i];\n break;\n }\n\n ;\n }\n }\n\n this.isSupported = isSupported;\n return isSupported;\n };\n\n fabric.WebglFilterBackend = WebglFilterBackend;\n /**\n * WebGL filter backend.\n */\n\n function WebglFilterBackend(options) {\n if (options && options.tileSize) {\n this.tileSize = options.tileSize;\n }\n\n this.setupGLContext(this.tileSize, this.tileSize);\n this.captureGPUInfo();\n }\n\n ;\n WebglFilterBackend.prototype =\n /** @lends fabric.WebglFilterBackend.prototype */\n {\n tileSize: 2048,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you problably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {},\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext: function setupGLContext(width, height) {\n this.dispose();\n this.createWebGLCanvas(width, height); // eslint-disable-next-line\n\n this.aPosition = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n this.chooseFastestCopyGLTo2DMethod(width, height);\n },\n\n /**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * putImageData is faster than drawImage for that specific operation.\n */\n chooseFastestCopyGLTo2DMethod: function chooseFastestCopyGLTo2DMethod(width, height) {\n var canMeasurePerf = typeof window.performance !== 'undefined',\n canUseImageData;\n\n try {\n new ImageData(1, 1);\n canUseImageData = true;\n } catch (e) {\n canUseImageData = false;\n } // eslint-disable-next-line no-undef\n\n\n var canUseArrayBuffer = typeof ArrayBuffer !== 'undefined'; // eslint-disable-next-line no-undef\n\n var canUseUint8Clamped = typeof Uint8ClampedArray !== 'undefined';\n\n if (!(canMeasurePerf && canUseImageData && canUseArrayBuffer && canUseUint8Clamped)) {\n return;\n }\n\n var targetCanvas = fabric.util.createCanvasElement(); // eslint-disable-next-line no-undef\n\n var imageBuffer = new ArrayBuffer(width * height * 4);\n\n if (fabric.forceGLPutImageData) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n return;\n }\n\n var testContext = {\n imageBuffer: imageBuffer,\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas\n };\n var startTime, drawImageTime, putImageDataTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n startTime = window.performance.now();\n copyGLTo2DDrawImage.call(testContext, this.gl, testContext);\n drawImageTime = window.performance.now() - startTime;\n startTime = window.performance.now();\n copyGLTo2DPutImageData.call(testContext, this.gl, testContext);\n putImageDataTime = window.performance.now() - startTime;\n\n if (drawImageTime > putImageDataTime) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n } else {\n this.copyGLTo2D = copyGLTo2DDrawImage;\n }\n },\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas: function createWebGLCanvas(width, height) {\n var canvas = fabric.util.createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n var glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false\n },\n gl = canvas.getContext('webgl', glOptions);\n\n if (!gl) {\n gl = canvas.getContext('experimental-webgl', glOptions);\n }\n\n if (!gl) {\n return;\n }\n\n gl.clearColor(0, 0, 0, 0); // this canvas can fire webglcontextlost and webglcontextrestored\n\n this.canvas = canvas;\n this.gl = gl;\n },\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters: function applyFilters(filters, source, width, height, targetCanvas, cacheKey) {\n var gl = this.gl;\n var cachedTexture;\n\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n\n var pipelineState = {\n originalWidth: source.width || source.originalWidth,\n originalHeight: source.height || source.originalHeight,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(gl, width, height, !cachedTexture && source),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture: cachedTexture || this.createTexture(gl, width, height, !cachedTexture && source),\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas\n };\n var tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach(function (filter) {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n targetCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n },\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose: function dispose() {\n if (this.canvas) {\n this.canvas = null;\n this.gl = null;\n }\n\n this.clearWebGLCaches();\n },\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches: function clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n },\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the textuer to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {Number} width The width to initialize the texture at.\n * @param {Number} height The height to initialize the texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source for the texture data.\n * @returns {WebGLTexture}\n */\n createTexture: function createTexture(gl, width, height, textureImageSource) {\n var texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n if (textureImageSource) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureImageSource);\n } else {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n }\n\n return texture;\n },\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture: function getCachedTexture(uniqueId, textureImageSource) {\n if (this.textureCache[uniqueId]) {\n return this.textureCache[uniqueId];\n } else {\n var texture = this.createTexture(this.gl, textureImageSource.width, textureImageSource.height, textureImageSource);\n this.textureCache[uniqueId] = texture;\n return texture;\n }\n },\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey: function evictCachesForKey(cacheKey) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n },\n copyGLTo2D: copyGLTo2DDrawImage,\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo: function captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n\n var gl = this.gl,\n gpuInfo = {\n renderer: '',\n vendor: ''\n };\n\n if (!gl) {\n return gpuInfo;\n }\n\n var ext = gl.getExtension('WEBGL_debug_renderer_info');\n\n if (ext) {\n var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n };\n})();\n\nfunction resizeCanvasIfNeeded(pipelineState) {\n var targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n/**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n\n\nfunction copyGLTo2DDrawImage(gl, pipelineState) {\n var glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n ctx.translate(0, targetCanvas.height); // move it down again\n\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n\n var sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(glCanvas, 0, sourceY, targetCanvas.width, targetCanvas.height, 0, 0, targetCanvas.width, targetCanvas.height);\n}\n/**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n\n\nfunction copyGLTo2DPutImageData(gl, pipelineState) {\n var targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4; // eslint-disable-next-line no-undef\n\n var u8 = new Uint8Array(this.imageBuffer, 0, numBytes); // eslint-disable-next-line no-undef\n\n var u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n var imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n}\n\n(function () {\n 'use strict';\n\n var noop = function noop() {};\n\n fabric.Canvas2dFilterBackend = Canvas2dFilterBackend;\n /**\n * Canvas 2D filter backend.\n */\n\n function Canvas2dFilterBackend() {}\n\n ;\n Canvas2dFilterBackend.prototype =\n /** @lends fabric.Canvas2dFilterBackend.prototype */\n {\n evictCachesForKey: noop,\n dispose: noop,\n clearWebGLCaches: noop,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {},\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters: function applyFilters(filters, sourceElement, sourceWidth, sourceHeight, targetCanvas) {\n var ctx = targetCanvas.getContext('2d');\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n var imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var pipelineState = {\n sourceWidth: sourceWidth,\n sourceHeight: sourceHeight,\n imageData: imageData,\n originalEl: sourceElement,\n originalImageData: originalImageData,\n canvasEl: targetCanvas,\n ctx: ctx,\n filterBackend: this\n };\n filters.forEach(function (filter) {\n filter.applyTo(pipelineState);\n });\n\n if (pipelineState.imageData.width !== sourceWidth || pipelineState.imageData.height !== sourceHeight) {\n targetCanvas.width = pipelineState.imageData.width;\n targetCanvas.height = pipelineState.imageData.height;\n }\n\n ctx.putImageData(pipelineState.imageData, 0, 0);\n return pipelineState;\n }\n };\n})();\n/**\n * @namespace fabric.Image.filters\n * @memberOf fabric.Image\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#image_filters}\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n */\n\n\nfabric.Image = fabric.Image || {};\nfabric.Image.filters = fabric.Image.filters || {};\n/**\n * Root filter class from which all filter classes inherit from\n * @class fabric.Image.filters.BaseFilter\n * @memberOf fabric.Image.filters\n */\n\nfabric.Image.filters.BaseFilter = fabric.util.createClass(\n/** @lends fabric.Image.filters.BaseFilter.prototype */\n{\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'BaseFilter',\n\n /**\n * Array of attributes to send with buffers. do not modify\n * @private\n */\n vertexSource: 'attribute vec2 aPosition;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vTexCoord = aPosition;\\n' + 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' + '}',\n fragmentSource: 'precision highp float;\\n' + 'varying vec2 vTexCoord;\\n' + 'uniform sampler2D uTexture;\\n' + 'void main() {\\n' + 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' + '}',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function initialize(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Sets filter's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function setOptions(options) {\n for (var prop in options) {\n this[prop] = options[prop];\n }\n },\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram: function createProgram(gl, fragmentSource, vertexSource) {\n fragmentSource = fragmentSource || this.fragmentSource;\n vertexSource = vertexSource || this.vertexSource;\n\n if (fabric.webGlPrecision !== 'highp') {\n fragmentSource = fragmentSource.replace(/precision highp float/g, 'precision ' + fabric.webGlPrecision + ' float');\n }\n\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new Error( // eslint-disable-next-line prefer-template\n 'Vertex shader compile error for ' + this.type + ': ' + gl.getShaderInfoLog(vertexShader));\n }\n\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new Error( // eslint-disable-next-line prefer-template\n 'Fragment shader compile error for ' + this.type + ': ' + gl.getShaderInfoLog(fragmentShader));\n }\n\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error( // eslint-disable-next-line prefer-template\n 'Shader link error for \"${this.type}\" ' + gl.getProgramInfoLog(program));\n }\n\n var attributeLocations = this.getAttributeLocations(gl, program);\n var uniformLocations = this.getUniformLocations(gl, program) || {};\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n return {\n program: program,\n attributeLocations: attributeLocations,\n uniformLocations: uniformLocations\n };\n },\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations: function getAttributeLocations(gl, program) {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition')\n };\n },\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations: function\n /* gl, program */\n getUniformLocations() {\n // in case i do not need any special uniform i need to return an empty object\n return {};\n },\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData: function sendAttributeData(gl, attributeLocations, aPositionData) {\n var attributeLocation = attributeLocations.aPosition;\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n },\n _setupFrameBuffer: function _setupFrameBuffer(options) {\n var gl = options.context,\n width,\n height;\n\n if (options.passes > 1) {\n width = options.destinationWidth;\n height = options.destinationHeight;\n\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(gl, width, height);\n }\n\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, options.targetTexture, 0);\n } else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n },\n _swapTextures: function _swapTextures(options) {\n options.passes--;\n options.pass++;\n var temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n },\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own verison ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n isNeutralState: function\n /* options */\n isNeutralState() {\n var main = this.mainParameter,\n _class = fabric.Image.filters[this.type].prototype;\n\n if (main) {\n if (Array.isArray(_class[main])) {\n for (var i = _class[main].length; i--;) {\n if (this[main][i] !== _class[main][i]) {\n return false;\n }\n }\n\n return true;\n } else {\n return _class[main] === this[main];\n }\n } else {\n return false;\n }\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function applyTo(options) {\n if (options.webgl) {\n this._setupFrameBuffer(options);\n\n this.applyToWebGL(options);\n\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function retrieveShader(options) {\n if (!options.programCache.hasOwnProperty(this.type)) {\n options.programCache[this.type] = this.createProgram(options.context);\n }\n\n return options.programCache[this.type];\n },\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL: function applyToWebGL(options) {\n var gl = options.context;\n var shader = this.retrieveShader(options);\n\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n },\n bindAdditionalTexture: function bindAdditionalTexture(gl, texture, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture); // reset active texture to 0 as usual\n\n gl.activeTexture(gl.TEXTURE0);\n },\n unbindAdditionalTexture: function unbindAdditionalTexture(gl, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n },\n getMainParameter: function getMainParameter() {\n return this[this.mainParameter];\n },\n setMainParameter: function setMainParameter(value) {\n this[this.mainParameter] = value;\n },\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData: function\n /* gl, uniformLocations */\n sendUniformData() {// Intentionally left blank. Override me in subclasses.\n },\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer: function createHelpLayer(options) {\n if (!options.helpLayer) {\n var helpLayer = document.createElement('canvas');\n helpLayer.width = options.sourceWidth;\n helpLayer.height = options.sourceHeight;\n options.helpLayer = helpLayer;\n }\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject() {\n var object = {\n type: this.type\n },\n mainP = this.mainParameter;\n\n if (mainP) {\n object[mainP] = this[mainP];\n }\n\n return object;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON: function toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n});\n\nfabric.Image.filters.BaseFilter.fromObject = function (object, callback) {\n var filter = new fabric.Image.filters[object.type](object);\n callback && callback(filter);\n return filter;\n};\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Color Matrix filter class\n * @class fabric.Image.filters.ColorMatrix\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.ColorMatrix#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://www.webwasp.co.uk/tutorials/219/Color_Matrix_Filter.php}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl}\n * @example Kodachrome filter\n * var filter = new fabric.Image.filters.ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.ColorMatrix = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.ColorMatrix.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'ColorMatrix',\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'varying vec2 vTexCoord;\\n' + 'uniform mat4 uColorMatrix;\\n' + 'uniform vec4 uConstants;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'color *= uColorMatrix;\\n' + 'color += uConstants;\\n' + 'gl_FragColor = color;\\n' + '}',\n\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],\n mainParameter: 'matrix',\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, manly for non webgl scenario\n * to save some calculation\n */\n colorsOnly: true,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function initialize(options) {\n this.callSuper('initialize', options); // create a new array instead mutating the prototype with push\n\n this.matrix = this.matrix.slice(0);\n },\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = data.length,\n m = this.matrix,\n r,\n g,\n b,\n a,\n i,\n colorsOnly = this.colorsOnly;\n\n for (i = 0; i < iLen; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n } else {\n a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] = r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),\n uConstants: gl.getUniformLocation(program, 'uConstants')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n var m = this.matrix,\n matrix = [m[0], m[1], m[2], m[3], m[5], m[6], m[7], m[8], m[10], m[11], m[12], m[13], m[15], m[16], m[17], m[18]],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] function to invoke after filter creation\n * @return {fabric.Image.filters.ColorMatrix} Instance of fabric.Image.filters.ColorMatrix\n */\n\n fabric.Image.filters.ColorMatrix.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Brightness filter class\n * @class fabric.Image.filters.Brightness\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Brightness#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.Brightness = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Brightness.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Brightness',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uBrightness;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'color.rgb += uBrightness;\\n' + 'gl_FragColor = color;\\n' + '}',\n\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n brightness: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'brightness',\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n if (this.brightness === 0) {\n return;\n }\n\n var imageData = options.imageData,\n data = imageData.data,\n i,\n len = data.length,\n brightness = Math.round(this.brightness * 255);\n\n for (i = 0; i < len; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uBrightness: gl.getUniformLocation(program, 'uBrightness')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Brightness} Instance of fabric.Image.filters.Brightness\n */\n\n fabric.Image.filters.Brightness.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Adapted from html5rocks article\n * @class fabric.Image.filters.Convolute\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Convolute#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example Sharpen filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * var filter = new fabric.Image.filters.Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.Convolute = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Convolute.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Convolute',\n\n /*\n * Opaque value (true/false)\n */\n opaque: false,\n\n /*\n * matrix for the filter, max 9x9\n */\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: {\n Convolute_3_1: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[9];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 0);\\n' + 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\\n' + 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\\n' + '}\\n' + '}\\n' + 'gl_FragColor = color;\\n' + '}',\n Convolute_3_0: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[9];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 1);\\n' + 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\\n' + 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\\n' + '}\\n' + '}\\n' + 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' + 'gl_FragColor = color;\\n' + 'gl_FragColor.a = alpha;\\n' + '}',\n Convolute_5_1: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[25];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 0);\\n' + 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' + 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\\n' + '}\\n' + '}\\n' + 'gl_FragColor = color;\\n' + '}',\n Convolute_5_0: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[25];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 1);\\n' + 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' + 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\\n' + '}\\n' + '}\\n' + 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' + 'gl_FragColor = color;\\n' + 'gl_FragColor.a = alpha;\\n' + '}',\n Convolute_7_1: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[49];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 0);\\n' + 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' + 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\\n' + '}\\n' + '}\\n' + 'gl_FragColor = color;\\n' + '}',\n Convolute_7_0: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[49];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 1);\\n' + 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' + 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\\n' + '}\\n' + '}\\n' + 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' + 'gl_FragColor = color;\\n' + 'gl_FragColor.a = alpha;\\n' + '}',\n Convolute_9_1: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[81];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 0);\\n' + 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' + 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\\n' + '}\\n' + '}\\n' + 'gl_FragColor = color;\\n' + '}',\n Convolute_9_0: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uMatrix[81];\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = vec4(0, 0, 0, 1);\\n' + 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' + 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' + 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' + 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\\n' + '}\\n' + '}\\n' + 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' + 'gl_FragColor = color;\\n' + 'gl_FragColor.a = alpha;\\n' + '}'\n },\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Convolute.prototype\n * @param {Object} [options] Options object\n * @param {Boolean} [options.opaque=false] Opaque value (true/false)\n * @param {Array} [options.matrix] Filter matrix\n */\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function retrieveShader(options) {\n var size = Math.sqrt(this.matrix.length);\n var cacheKey = this.type + '_' + size + '_' + (this.opaque ? 1 : 0);\n var shaderSource = this.fragmentSource[cacheKey];\n\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0,\n r,\n g,\n b,\n a,\n dstOff,\n scx,\n scy,\n srcOff,\n wt,\n x,\n y,\n cx,\n cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4; // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide; // eslint-disable-next-line max-depth\n\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt; // eslint-disable-next-line max-depth\n\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n } else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n\n options.imageData = output;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uMatrix: gl.getUniformLocation(program, 'uMatrix'),\n uOpaque: gl.getUniformLocation(program, 'uOpaque'),\n uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),\n uSize: gl.getUniformLocation(program, 'uSize')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject() {\n return extend(this.callSuper('toObject'), {\n opaque: this.opaque,\n matrix: this.matrix\n });\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute\n */\n\n fabric.Image.filters.Convolute.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Grayscale image filter class\n * @class fabric.Image.filters.Grayscale\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.Grayscale = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Grayscale.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Grayscale',\n fragmentSource: {\n average: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'float average = (color.r + color.b + color.g) / 3.0;\\n' + 'gl_FragColor = vec4(average, average, average, color.a);\\n' + '}',\n lightness: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform int uMode;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 col = texture2D(uTexture, vTexCoord);\\n' + 'float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\\n' + 'gl_FragColor = vec4(average, average, average, col.a);\\n' + '}',\n luminosity: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform int uMode;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 col = texture2D(uTexture, vTexCoord);\\n' + 'float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\\n' + 'gl_FragColor = vec4(average, average, average, col.a);\\n' + '}'\n },\n\n /**\n * Grayscale mode, between 'average', 'lightness', 'luminosity'\n * @param {String} type\n * @default\n */\n mode: 'average',\n mainParameter: 'mode',\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n i,\n len = data.length,\n value,\n mode = this.mode;\n\n for (i = 0; i < len; i += 4) {\n if (mode === 'average') {\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n } else if (mode === 'lightness') {\n value = (Math.min(data[i], data[i + 1], data[i + 2]) + Math.max(data[i], data[i + 1], data[i + 2])) / 2;\n } else if (mode === 'luminosity') {\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function retrieveShader(options) {\n var cacheKey = this.type + '_' + this.mode;\n\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var shaderSource = this.fragmentSource[this.mode];\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n\n return options.programCache[cacheKey];\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uMode: gl.getUniformLocation(program, 'uMode')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n // default average mode.\n var mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n },\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState: function isNeutralState() {\n return false;\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Grayscale} Instance of fabric.Image.filters.Grayscale\n */\n\n fabric.Image.filters.Grayscale.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Invert filter class\n * @class fabric.Image.filters.Invert\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n\n filters.Invert = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Invert.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Invert',\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform int uInvert;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'if (uInvert == 1) {\\n' + 'gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\\n' + '} else {\\n' + 'gl_FragColor = color;\\n' + '}\\n' + '}',\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n invert: true,\n mainParameter: 'invert',\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n i,\n len = data.length;\n\n for (i = 0; i < len; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n }\n },\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function isNeutralState() {\n return !this.invert;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uInvert: gl.getUniformLocation(program, 'uInvert')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform1i(uniformLocations.uInvert, this.invert);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Invert} Instance of fabric.Image.filters.Invert\n */\n\n fabric.Image.filters.Invert.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Noise filter class\n * @class fabric.Image.filters.Noise\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Noise#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.Noise = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Noise.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Noise',\n\n /**\n * Fragment source for the noise program\n */\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uStepH;\\n' + 'uniform float uNoise;\\n' + 'uniform float uSeed;\\n' + 'varying vec2 vTexCoord;\\n' + 'float rand(vec2 co, float seed, float vScale) {\\n' + 'return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\\n' + '}\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\\n' + 'gl_FragColor = color;\\n' + '}',\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'noise',\n\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n noise: 0,\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n if (this.noise === 0) {\n return;\n }\n\n var imageData = options.imageData,\n data = imageData.data,\n i,\n len = data.length,\n noise = this.noise,\n rand;\n\n for (i = 0, len = data.length; i < len; i += 4) {\n rand = (0.5 - Math.random()) * noise;\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uNoise: gl.getUniformLocation(program, 'uNoise'),\n uSeed: gl.getUniformLocation(program, 'uSeed')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject() {\n return extend(this.callSuper('toObject'), {\n noise: this.noise\n });\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Noise} Instance of fabric.Image.filters.Noise\n */\n\n fabric.Image.filters.Noise.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Pixelate filter class\n * @class fabric.Image.filters.Pixelate\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Pixelate#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.Pixelate = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Pixelate.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Pixelate',\n blocksize: 4,\n mainParameter: 'blocksize',\n\n /**\n * Fragment source for the Pixelate program\n */\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uBlocksize;\\n' + 'uniform float uStepW;\\n' + 'uniform float uStepH;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'float blockW = uBlocksize * uStepW;\\n' + 'float blockH = uBlocksize * uStepW;\\n' + 'int posX = int(vTexCoord.x / blockW);\\n' + 'int posY = int(vTexCoord.y / blockH);\\n' + 'float fposX = float(posX);\\n' + 'float fposY = float(posY);\\n' + 'vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\\n' + 'vec4 color = texture2D(uTexture, squareCoords);\\n' + 'gl_FragColor = color;\\n' + '}',\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = imageData.height,\n jLen = imageData.width,\n index,\n i,\n j,\n r,\n g,\n b,\n a,\n _i,\n _j,\n _iLen,\n _jLen;\n\n for (i = 0; i < iLen; i += this.blocksize) {\n for (j = 0; j < jLen; j += this.blocksize) {\n index = i * 4 * jLen + j * 4;\n r = data[index];\n g = data[index + 1];\n b = data[index + 2];\n a = data[index + 3];\n _iLen = Math.min(i + this.blocksize, iLen);\n _jLen = Math.min(j + this.blocksize, jLen);\n\n for (_i = i; _i < _iLen; _i++) {\n for (_j = j; _j < _jLen; _j++) {\n index = _i * 4 * jLen + _j * 4;\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n },\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState: function isNeutralState() {\n return this.blocksize === 1;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uBlocksize: gl.getUniformLocation(program, 'uBlocksize'),\n uStepW: gl.getUniformLocation(program, 'uStepW'),\n uStepH: gl.getUniformLocation(program, 'uStepH')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Pixelate} Instance of fabric.Image.filters.Pixelate\n */\n\n fabric.Image.filters.Pixelate.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Remove white filter class\n * @class fabric.Image.filters.RemoveColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.RemoveColor#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.RemoveColor = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.RemoveColor.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'RemoveColor',\n\n /**\n * Color to remove, in any format understood by fabric.Color.\n * @param {String} type\n * @default\n */\n color: '#FFFFFF',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform vec4 uLow;\\n' + 'uniform vec4 uHigh;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' + 'if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\\n' + 'gl_FragColor.a = 0.0;\\n' + '}\\n' + '}',\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n distance: 0.02,\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n useAlpha: false,\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.RemoveWhite.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.color=#RRGGBB] Threshold value\n * @param {Number} [options.distance=10] Distance value\n */\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n i,\n distance = this.distance * 255,\n r,\n g,\n b,\n source = new fabric.Color(this.color).getSource(),\n lowC = [source[0] - distance, source[1] - distance, source[2] - distance],\n highC = [source[0] + distance, source[1] + distance, source[2] + distance];\n\n for (i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n if (r > lowC[0] && g > lowC[1] && b > lowC[2] && r < highC[0] && g < highC[1] && b < highC[2]) {\n data[i + 3] = 0;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uLow: gl.getUniformLocation(program, 'uLow'),\n uHigh: gl.getUniformLocation(program, 'uHigh')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource(),\n distance = parseFloat(this.distance),\n lowC = [0 + source[0] / 255 - distance, 0 + source[1] / 255 - distance, 0 + source[2] / 255 - distance, 1],\n highC = [source[0] / 255 + distance, source[1] / 255 + distance, source[2] / 255 + distance, 1];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject() {\n return extend(this.callSuper('toObject'), {\n color: this.color,\n distance: this.distance\n });\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.RemoveColor} Instance of fabric.Image.filters.RemoveWhite\n */\n\n fabric.Image.filters.RemoveColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n var matrices = {\n Brownie: [0.59970, 0.34553, -0.27082, 0, 0.186, -0.03770, 0.86095, 0.15059, 0, -0.1449, 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0],\n Vintage: [0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0, 0.02926, 0.04660, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0],\n Kodachrome: [1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0, 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0],\n Technicolor: [1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0, -0.27589, -0.23110, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0],\n Polaroid: [1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016, 1.483, 0, 0, 0, 0, 0, 1, 0],\n Sepia: [0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131, 0, 0, 0, 0, 0, 1, 0],\n 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]\n };\n\n for (var key in matrices) {\n filters[key] = createClass(filters.ColorMatrix,\n /** @lends fabric.Image.filters.Sepia.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: key,\n\n /**\n * Colormatrix for the effect\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: matrices[key],\n\n /**\n * Lock the matrix export for this kind of static, parameter less filters.\n */\n mainParameter: false,\n\n /**\n * Lock the colormatrix on the color part, skipping alpha\n */\n colorsOnly: true\n });\n fabric.Image.filters[key].fromObject = fabric.Image.filters.BaseFilter.fromObject;\n }\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Color Blend filter class\n * @class fabric.Image.filter.BlendColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendColor = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Blend.prototype */\n {\n type: 'BlendColor',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n **/\n color: '#F95C63',\n\n /**\n * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend color operation.\n **/\n alpha: 1,\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen: 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n diff: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion: 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: 'if (uColor.r < 0.5) {\\n' + 'gl_FragColor.r *= 2.0 * uColor.r;\\n' + '} else {\\n' + 'gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\\n' + '}\\n' + 'if (uColor.g < 0.5) {\\n' + 'gl_FragColor.g *= 2.0 * uColor.g;\\n' + '} else {\\n' + 'gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\\n' + '}\\n' + 'if (uColor.b < 0.5) {\\n' + 'gl_FragColor.b *= 2.0 * uColor.b;\\n' + '} else {\\n' + 'gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\\n' + '}\\n',\n tint: 'gl_FragColor.rgb *= (1.0 - uColor.a);\\n' + 'gl_FragColor.rgb += uColor.rgb;\\n'\n },\n\n /**\n * build the fragment source for the filters, joining the common part with\n * the specific one.\n * @param {String} mode the mode of the filter, a key of this.fragmentSource\n * @return {String} the source to be compiled\n * @private\n */\n buildSource: function buildSource(mode) {\n return 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform vec4 uColor;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'gl_FragColor = color;\\n' + 'if (color.a > 0.0) {\\n' + this.fragmentSource[mode] + '}\\n' + '}';\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function retrieveShader(options) {\n var cacheKey = this.type + '_' + this.mode,\n shaderSource;\n\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n shaderSource = this.buildSource(this.mode);\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = data.length,\n tr,\n tg,\n tb,\n r,\n g,\n b,\n source,\n alpha1 = 1 - this.alpha;\n source = new fabric.Color(this.color).getSource();\n tr = source[0] * this.alpha;\n tg = source[1] * this.alpha;\n tb = source[2] * this.alpha;\n\n for (var i = 0; i < iLen; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n break;\n\n case 'screen':\n data[i] = 255 - (255 - r) * (255 - tr) / 255;\n data[i + 1] = 255 - (255 - g) * (255 - tg) / 255;\n data[i + 2] = 255 - (255 - b) * (255 - tb) / 255;\n break;\n\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n\n case 'diff':\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n\n case 'overlay':\n data[i] = tr < 128 ? 2 * r * tr / 255 : 255 - 2 * (255 - r) * (255 - tr) / 255;\n data[i + 1] = tg < 128 ? 2 * g * tg / 255 : 255 - 2 * (255 - g) * (255 - tg) / 255;\n data[i + 2] = tb < 128 ? 2 * b * tb / 255 : 255 - 2 * (255 - b) * (255 - tb) / 255;\n break;\n\n case 'exclusion':\n data[i] = tr + r - 2 * tr * r / 255;\n data[i + 1] = tg + g - 2 * tg * g / 255;\n data[i + 2] = tb + b - 2 * tb * b / 255;\n break;\n\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uColor: gl.getUniformLocation(program, 'uColor')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource();\n source[0] = this.alpha * source[0] / 255;\n source[1] = this.alpha * source[1] / 255;\n source[2] = this.alpha * source[2] / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject() {\n return {\n type: this.type,\n color: this.color,\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.BlendColor} Instance of fabric.Image.filters.BlendColor\n */\n\n fabric.Image.filters.BlendColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Image Blend filter class\n * @class fabric.Image.filter.BlendImage\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendImage = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.BlendImage.prototype */\n {\n type: 'BlendImage',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n **/\n image: null,\n\n /**\n * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n alpha: 1,\n vertexSource: 'attribute vec2 aPosition;\\n' + 'varying vec2 vTexCoord;\\n' + 'varying vec2 vTexCoord2;\\n' + 'uniform mat3 uTransformMatrix;\\n' + 'void main() {\\n' + 'vTexCoord = aPosition;\\n' + 'vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\\n' + 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' + '}',\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform sampler2D uImage;\\n' + 'uniform vec4 uColor;\\n' + 'varying vec2 vTexCoord;\\n' + 'varying vec2 vTexCoord2;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' + 'color.rgba *= color2.rgba;\\n' + 'gl_FragColor = color;\\n' + '}',\n mask: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform sampler2D uImage;\\n' + 'uniform vec4 uColor;\\n' + 'varying vec2 vTexCoord;\\n' + 'varying vec2 vTexCoord2;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' + 'color.a = color2.a;\\n' + 'gl_FragColor = color;\\n' + '}'\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function retrieveShader(options) {\n var cacheKey = this.type + '_' + this.mode;\n var shaderSource = this.fragmentSource[this.mode];\n\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n\n return options.programCache[cacheKey];\n },\n applyToWebGL: function applyToWebGL(options) {\n // load texture to blend.\n var gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture, gl.TEXTURE1);\n this.callSuper('applyToWebGL', options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n },\n createTexture: function createTexture(backend, image) {\n return backend.getCachedTexture(image.cacheKey, image._element);\n },\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix: function calculateMatrix() {\n var image = this.image,\n width = image._element.width,\n height = image._element.height;\n return [1 / image.scaleX, 0, 0, 0, 1 / image.scaleY, 0, -image.left / width, -image.top / height, 1];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n resources = options.filterBackend.resources,\n data = imageData.data,\n iLen = data.length,\n width = imageData.width,\n height = imageData.height,\n tr,\n tg,\n tb,\n ta,\n r,\n g,\n b,\n a,\n canvas1,\n context,\n image = this.image,\n blendData;\n\n if (!resources.blendImage) {\n resources.blendImage = fabric.util.createCanvasElement();\n }\n\n canvas1 = resources.blendImage;\n context = canvas1.getContext('2d');\n\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n } else {\n context.clearRect(0, 0, width, height);\n }\n\n context.setTransform(image.scaleX, 0, 0, image.scaleY, image.left, image.top);\n context.drawImage(image._element, 0, 0, width, height);\n blendData = context.getImageData(0, 0, width, height).data;\n\n for (var i = 0; i < iLen; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n tr = blendData[i];\n tg = blendData[i + 1];\n tb = blendData[i + 2];\n ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n data[i + 3] = a * ta / 255;\n break;\n\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uTransformMatrix: gl.getUniformLocation(program, 'uTransformMatrix'),\n uImage: gl.getUniformLocation(program, 'uImage')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n var matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject() {\n return {\n type: this.type,\n image: this.image && this.image.toObject(),\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} callback to be invoked after filter creation\n * @return {fabric.Image.filters.BlendImage} Instance of fabric.Image.filters.BlendImage\n */\n\n fabric.Image.filters.BlendImage.fromObject = function (object, callback) {\n fabric.Image.fromObject(object.image, function (image) {\n var options = fabric.util.object.clone(object);\n options.image = image;\n callback(new fabric.Image.filters.BlendImage(options));\n });\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n pow = Math.pow,\n floor = Math.floor,\n sqrt = Math.sqrt,\n abs = Math.abs,\n round = Math.round,\n sin = Math.sin,\n ceil = Math.ceil,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Resize image filter class\n * @class fabric.Image.filters.Resize\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n\n filters.Resize = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Resize.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Resize',\n\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @param {String} resizeType\n * @default\n */\n resizeType: 'hermite',\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n scaleX: 1,\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n scaleY: 1,\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n lanczosLobes: 3,\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uDelta: gl.getUniformLocation(program, 'uDelta'),\n uTaps: gl.getUniformLocation(program, 'uTaps')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform2fv(uniformLocations.uDelta, this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]);\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function retrieveShader(options) {\n var filterWindow = this.getFilterWindow(),\n cacheKey = this.type + '_' + filterWindow;\n\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var fragmentShader = this.generateShader(filterWindow);\n options.programCache[cacheKey] = this.createProgram(options.context, fragmentShader);\n }\n\n return options.programCache[cacheKey];\n },\n getFilterWindow: function getFilterWindow() {\n var scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n },\n getTaps: function getTaps() {\n var lobeFunction = this.lanczosCreate(this.lanczosLobes),\n scale = this.tempScale,\n filterWindow = this.getFilterWindow(),\n taps = new Array(filterWindow);\n\n for (var i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n\n return taps;\n },\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader: function generateShader(filterWindow) {\n var offsets = new Array(filterWindow),\n fragmentShader = this.fragmentSourceTOP,\n filterWindow;\n\n for (var i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = i + '.0 * uDelta';\n }\n\n fragmentShader += 'uniform float uTaps[' + filterWindow + '];\\n';\n fragmentShader += 'void main() {\\n';\n fragmentShader += ' vec4 color = texture2D(uTexture, vTexCoord);\\n';\n fragmentShader += ' float sum = 1.0;\\n';\n offsets.forEach(function (offset, i) {\n fragmentShader += ' color += texture2D(uTexture, vTexCoord + ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' color += texture2D(uTexture, vTexCoord - ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' sum += 2.0 * uTaps[' + i + '];\\n';\n });\n fragmentShader += ' gl_FragColor = color / sum;\\n';\n fragmentShader += '}';\n return fragmentShader;\n },\n fragmentSourceTOP: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform vec2 uDelta;\\n' + 'varying vec2 vTexCoord;\\n',\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function applyTo(options) {\n if (options.webgl) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n\n this._setupFrameBuffer(options);\n\n this.applyToWebGL(options);\n\n this._swapTextures(options);\n\n options.sourceWidth = options.destinationWidth;\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n\n this._setupFrameBuffer(options);\n\n this.applyToWebGL(options);\n\n this._swapTextures(options);\n\n options.sourceHeight = options.destinationHeight;\n } else {\n this.applyTo2d(options);\n }\n },\n isNeutralState: function isNeutralState() {\n return this.scaleX === 1 && this.scaleY === 1;\n },\n lanczosCreate: function lanczosCreate(lobes) {\n return function (x) {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n\n if (x < 1.19209290E-07 && x > -1.19209290E-07) {\n return 1.0;\n }\n\n x *= Math.PI;\n var xx = x / lobes;\n return sin(x) / x * sin(xx) / xx;\n };\n },\n\n /**\n * Applies filter to canvas element\n * @memberOf fabric.Image.filters.Resize.prototype\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} scaleX\n * @param {Number} scaleY\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n var oW = imageData.width,\n oH = imageData.height,\n dW = round(oW * scaleX),\n dH = round(oH * scaleY),\n newData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n }\n\n options.imageData = newData;\n },\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo: function sliceByTwo(options, oW, oH, dW, dH) {\n var imageData = options.imageData,\n mult = 0.5,\n doneW = false,\n doneH = false,\n stepW = oW * mult,\n stepH = oH * mult,\n resources = fabric.filterBackend.resources,\n tmpCanvas,\n ctx,\n sX = 0,\n sY = 0,\n dX = oW,\n dY = 0;\n\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = document.createElement('canvas');\n }\n\n tmpCanvas = resources.sliceByTwo;\n\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n\n ctx = tmpCanvas.getContext('2d');\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n dW = floor(dW);\n dH = floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n\n if (dW < floor(stepW * mult)) {\n stepW = floor(stepW * mult);\n } else {\n stepW = dW;\n doneW = true;\n }\n\n if (dH < floor(stepH * mult)) {\n stepH = floor(stepH * mult);\n } else {\n stepH = dH;\n doneH = true;\n }\n\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n\n return ctx.getImageData(sX, sY, dW, dH);\n },\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize: function lanczosResize(options, oW, oH, dW, dH) {\n function process(u) {\n var v, i, weight, idx, a, red, green, blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = floor(center.x);\n\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = floor(center.y);\n a = 0;\n red = 0;\n green = 0;\n blue = 0;\n alpha = 0;\n\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n\n fX = floor(1000 * abs(i - center.x));\n\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = {};\n }\n\n for (var j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n\n fY = floor(1000 * abs(j - center.y));\n\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(sqrt(pow(fX * rcpRatioX, 2) + pow(fY * rcpRatioY, 2)) / 1000);\n }\n\n weight = cacheLanc[fX][fY];\n\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n } else {\n return destImg;\n }\n }\n\n var srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX,\n rcpRatioY = 2 / this.rcpScaleY,\n range2X = ceil(ratioX * this.lanczosLobes / 2),\n range2Y = ceil(ratioY * this.lanczosLobes / 2),\n cacheLanc = {},\n center = {},\n icenter = {};\n return process(0);\n },\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering: function bilinearFiltering(options, oW, oH, dW, dH) {\n var a,\n b,\n c,\n d,\n x,\n y,\n i,\n j,\n xDiff,\n yDiff,\n chnl,\n color,\n offset = 0,\n origPix,\n ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n w4 = 4 * (oW - 1),\n img = options.imageData,\n pixels = img.data,\n destImage = options.ctx.createImageData(dW, dH),\n destPixels = destImage.data;\n\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = floor(ratioX * j);\n y = floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color = a * (1 - xDiff) * (1 - yDiff) + b * xDiff * (1 - yDiff) + c * yDiff * (1 - xDiff) + d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n\n return destImage;\n },\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize: function hermiteFastResize(options, oW, oH, dW, dH) {\n var ratioW = this.rcpScaleX,\n ratioH = this.rcpScaleY,\n ratioWHalf = ceil(ratioW / 2),\n ratioHHalf = ceil(ratioH / 2),\n img = options.imageData,\n data = img.data,\n img2 = options.ctx.createImageData(dW, dH),\n data2 = img2.data;\n\n for (var j = 0; j < dH; j++) {\n for (var i = 0; i < dW; i++) {\n var x2 = (i + j * dW) * 4,\n weight = 0,\n weights = 0,\n weightsAlpha = 0,\n gxR = 0,\n gxG = 0,\n gxB = 0,\n gxA = 0,\n centerY = (j + 0.5) * ratioH;\n\n for (var yy = floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n var dy = abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW,\n w0 = dy * dy;\n\n for (var xx = floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n var dx = abs(centerX - (xx + 0.5)) / ratioWHalf,\n w = sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n\n if (w > 1 && w < -1) {\n continue;\n } //hermite filter\n\n\n weight = 2 * w * w * w - 3 * w * w + 1;\n\n if (weight > 0) {\n dx = 4 * (xx + yy * oW); //alpha\n\n gxA += weight * data[dx + 3];\n weightsAlpha += weight; //colors\n\n if (data[dx + 3] < 255) {\n weight = weight * data[dx + 3] / 250;\n }\n\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n\n }\n }\n\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n\n return img2;\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject() {\n return {\n type: this.type,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n resizeType: this.resizeType,\n lanczosLobes: this.lanczosLobes\n };\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Resize} Instance of fabric.Image.filters.Resize\n */\n\n fabric.Image.filters.Resize.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Contrast filter class\n * @class fabric.Image.filters.Contrast\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Contrast#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Contrast({\n * contrast: 40\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.Contrast = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Contrast.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Contrast',\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uContrast;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\\n' + 'color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\\n' + 'gl_FragColor = color;\\n' + '}',\n contrast: 0,\n mainParameter: 'contrast',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Contrast.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.contrast=0] Value to contrast the image up (-1...1)\n */\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n if (this.contrast === 0) {\n return;\n }\n\n var imageData = options.imageData,\n i,\n len,\n data = imageData.data,\n len = data.length,\n contrast = Math.floor(this.contrast * 255),\n contrastF = 259 * (contrast + 255) / (255 * (259 - contrast));\n\n for (i = 0; i < len; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uContrast: gl.getUniformLocation(program, 'uContrast')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Contrast} Instance of fabric.Image.filters.Contrast\n */\n\n fabric.Image.filters.Contrast.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Saturate filter class\n * @class fabric.Image.filters.Saturation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Saturation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Saturation({\n * saturation: 100\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.Saturation = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Saturation.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Saturation',\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform float uSaturation;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'float rgMax = max(color.r, color.g);\\n' + 'float rgbMax = max(rgMax, color.b);\\n' + 'color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\\n' + 'color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\\n' + 'color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\\n' + 'gl_FragColor = color;\\n' + '}',\n saturation: 0,\n mainParameter: 'saturation',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Saturate.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.saturate=0] Value to saturate the image (-1...1)\n */\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n if (this.saturation === 0) {\n return;\n }\n\n var imageData = options.imageData,\n data = imageData.data,\n len = data.length,\n adjust = -this.saturation,\n i,\n max;\n\n for (i = 0; i < len; i += 4) {\n max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uSaturation: gl.getUniformLocation(program, 'uSaturation')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Saturation} Instance of fabric.Image.filters.Saturate\n */\n\n fabric.Image.filters.Saturation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Blur filter class\n * @class fabric.Image.filters.Blur\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Blur#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.Blur = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Blur.prototype */\n {\n type: 'Blur',\n\n /*\n 'gl_FragColor = vec4(0.0);',\n 'gl_FragColor += texture2D(texture, vTexCoord + -7 * uDelta)*0.0044299121055113265;',\n 'gl_FragColor += texture2D(texture, vTexCoord + -6 * uDelta)*0.00895781211794;',\n 'gl_FragColor += texture2D(texture, vTexCoord + -5 * uDelta)*0.0215963866053;',\n 'gl_FragColor += texture2D(texture, vTexCoord + -4 * uDelta)*0.0443683338718;',\n 'gl_FragColor += texture2D(texture, vTexCoord + -3 * uDelta)*0.0776744219933;',\n 'gl_FragColor += texture2D(texture, vTexCoord + -2 * uDelta)*0.115876621105;',\n 'gl_FragColor += texture2D(texture, vTexCoord + -1 * uDelta)*0.147308056121;',\n 'gl_FragColor += texture2D(texture, vTexCoord )*0.159576912161;',\n 'gl_FragColor += texture2D(texture, vTexCoord + 1 * uDelta)*0.147308056121;',\n 'gl_FragColor += texture2D(texture, vTexCoord + 2 * uDelta)*0.115876621105;',\n 'gl_FragColor += texture2D(texture, vTexCoord + 3 * uDelta)*0.0776744219933;',\n 'gl_FragColor += texture2D(texture, vTexCoord + 4 * uDelta)*0.0443683338718;',\n 'gl_FragColor += texture2D(texture, vTexCoord + 5 * uDelta)*0.0215963866053;',\n 'gl_FragColor += texture2D(texture, vTexCoord + 6 * uDelta)*0.00895781211794;',\n 'gl_FragColor += texture2D(texture, vTexCoord + 7 * uDelta)*0.0044299121055113265;',\n */\n\n /* eslint-disable max-len */\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform vec2 uDelta;\\n' + 'varying vec2 vTexCoord;\\n' + 'const float nSamples = 15.0;\\n' + 'vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\\n' + 'float random(vec3 scale) {\\n' +\n /* use the fragment position for a different seed per-pixel */\n 'return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\\n' + '}\\n' + 'void main() {\\n' + 'vec4 color = vec4(0.0);\\n' + 'float total = 0.0;\\n' + 'float offset = random(v3offset);\\n' + 'for (float t = -nSamples; t <= nSamples; t++) {\\n' + 'float percent = (t + offset - 0.5) / nSamples;\\n' + 'float weight = 1.0 - abs(percent);\\n' + 'color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\\n' + 'total += weight;\\n' + '}\\n' + 'gl_FragColor = color / total;\\n' + '}',\n\n /* eslint-enable max-len */\n\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range bewteen 0 and 1.\n */\n blur: 0,\n mainParameter: 'blur',\n applyTo: function applyTo(options) {\n if (options.webgl) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n\n this._setupFrameBuffer(options);\n\n this.horizontal = true;\n this.applyToWebGL(options);\n\n this._swapTextures(options);\n\n this._setupFrameBuffer(options);\n\n this.horizontal = false;\n this.applyToWebGL(options);\n\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n },\n applyTo2d: function applyTo2d(options) {\n // paint canvasEl with current image data.\n //options.ctx.putImageData(options.imageData, 0, 0);\n options.imageData = this.simpleBlur(options);\n },\n simpleBlur: function simpleBlur(options) {\n var resources = options.filterBackend.resources,\n canvas1,\n canvas2,\n width = options.imageData.width,\n height = options.imageData.height;\n\n if (!resources.blurLayer1) {\n resources.blurLayer1 = fabric.util.createCanvasElement();\n resources.blurLayer2 = fabric.util.createCanvasElement();\n }\n\n canvas1 = resources.blurLayer1;\n canvas2 = resources.blurLayer2;\n\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n\n var ctx1 = canvas1.getContext('2d'),\n ctx2 = canvas2.getContext('2d'),\n nSamples = 15,\n random,\n percent,\n j,\n i,\n blur = this.blur * 0.06 * 0.5; // load first canvas\n\n ctx1.putImageData(options.imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n\n options.ctx.drawImage(canvas1, 0, 0);\n var newImageData = options.ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n delta: gl.getUniformLocation(program, 'uDelta')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n var delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.delta, delta);\n },\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta: function chooseRightDelta() {\n var blurScale = 1,\n delta = [0, 0],\n blur;\n\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n } else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n\n blur = blurScale * this.blur * 0.12;\n\n if (this.horizontal) {\n delta[0] = blur;\n } else {\n delta[1] = blur;\n }\n\n return delta;\n }\n });\n /**\n * Deserialize a JSON definition of a BlurFilter into a concrete instance.\n */\n\n filters.Blur.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * Gamma filter class\n * @class fabric.Image.filters.Gamma\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Gamma#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Gamma({\n * brightness: 200\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.Gamma = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Gamma.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Gamma',\n fragmentSource: 'precision highp float;\\n' + 'uniform sampler2D uTexture;\\n' + 'uniform vec3 uGamma;\\n' + 'varying vec2 vTexCoord;\\n' + 'void main() {\\n' + 'vec4 color = texture2D(uTexture, vTexCoord);\\n' + 'vec3 correction = (1.0 / uGamma);\\n' + 'color.r = pow(color.r, correction.r);\\n' + 'color.g = pow(color.g, correction.g);\\n' + 'color.b = pow(color.b, correction.b);\\n' + 'gl_FragColor = color;\\n' + 'gl_FragColor.rgb *= color.a;\\n' + '}',\n\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n gamma: [1, 1, 1],\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'gamma',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function initialize(options) {\n this.gamma = [1, 1, 1];\n filters.BaseFilter.prototype.initialize.call(this, options);\n },\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function applyTo2d(options) {\n var imageData = options.imageData,\n data = imageData.data,\n gamma = this.gamma,\n len = data.length,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2],\n i;\n\n if (!this.rVals) {\n // eslint-disable-next-line\n this.rVals = new Uint8Array(256); // eslint-disable-next-line\n\n this.gVals = new Uint8Array(256); // eslint-disable-next-line\n\n this.bVals = new Uint8Array(256);\n } // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n\n\n for (i = 0, len = 256; i < len; i++) {\n this.rVals[i] = Math.pow(i / 255, rInv) * 255;\n this.gVals[i] = Math.pow(i / 255, gInv) * 255;\n this.bVals[i] = Math.pow(i / 255, bInv) * 255;\n }\n\n for (i = 0, len = data.length; i < len; i += 4) {\n data[i] = this.rVals[data[i]];\n data[i + 1] = this.gVals[data[i + 1]];\n data[i + 2] = this.bVals[data[i + 2]];\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function getUniformLocations(gl, program) {\n return {\n uGamma: gl.getUniformLocation(program, 'uGamma')\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function sendUniformData(gl, uniformLocations) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Gamma} Instance of fabric.Image.filters.Gamma\n */\n\n fabric.Image.filters.Gamma.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\n\n filters.Composed = createClass(filters.BaseFilter,\n /** @lends fabric.Image.filters.Composed.prototype */\n {\n type: 'Composed',\n\n /**\n * A non sparse array of filters to apply\n */\n subFilters: [],\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function initialize(options) {\n this.callSuper('initialize', options); // create a new array instead mutating the prototype with push\n\n this.subFilters = this.subFilters.slice(0);\n },\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo: function applyTo(options) {\n options.passes += this.subFilters.length - 1;\n this.subFilters.forEach(function (filter) {\n filter.applyTo(options);\n });\n },\n\n /**\n * Serialize this filter into JSON.\n *\n * @returns {Object} A JSON representation of this filter.\n */\n toObject: function toObject() {\n return fabric.util.object.extend(this.callSuper('toObject'), {\n subFilters: this.subFilters.map(function (filter) {\n return filter.toObject();\n })\n });\n },\n isNeutralState: function isNeutralState() {\n return !this.subFilters.some(function (filter) {\n return !filter.isNeutralState();\n });\n }\n });\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n */\n\n fabric.Image.filters.Composed.fromObject = function (object, callback) {\n var filters = object.subFilters || [],\n subFilters = filters.map(function (filter) {\n return new fabric.Image.filters[filter.type](filter);\n }),\n instance = new fabric.Image.filters.Composed({\n subFilters: subFilters\n });\n callback && callback(instance);\n return instance;\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n /**\n * HueRotation filter class\n * @class fabric.Image.filters.HueRotation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.HueRotation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n\n filters.HueRotation = createClass(filters.ColorMatrix,\n /** @lends fabric.Image.filters.HueRotation.prototype */\n {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'HueRotation',\n\n /**\n * HueRotation value, from -1 to 1.\n * the unit is radians\n * @param {Number} myParameter\n * @default\n */\n rotation: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'rotation',\n calculateMatrix: function calculateMatrix() {\n var rad = this.rotation * Math.PI,\n cos = fabric.util.cos(rad),\n sin = fabric.util.sin(rad),\n aThird = 1 / 3,\n aThirdSqtSin = Math.sqrt(aThird) * sin,\n OneMinusCos = 1 - cos;\n this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n this.matrix[0] = cos + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cos + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cos + aThird * OneMinusCos;\n },\n\n /**\n * HueRotation isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function isNeutralState(options) {\n this.calculateMatrix();\n return filters.BaseFilter.prototype.isNeutralState.call(this, options);\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function applyTo(options) {\n this.calculateMatrix();\n filters.BaseFilter.prototype.applyTo.call(this, options);\n }\n });\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.HueRotation} Instance of fabric.Image.filters.HueRotation\n */\n\n fabric.Image.filters.HueRotation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n clone = fabric.util.object.clone;\n\n if (fabric.Text) {\n fabric.warn('fabric.Text is already defined');\n return;\n }\n /**\n * Text class\n * @class fabric.Text\n * @extends fabric.Object\n * @return {fabric.Text} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n * @see {@link fabric.Text#initialize} for constructor definition\n */\n\n\n fabric.Text = fabric.util.createClass(fabric.Object,\n /** @lends fabric.Text.prototype */\n {\n /**\n * Properties which when set cause object to change dimensions\n * @type Array\n * @private\n */\n _dimensionAffectingProps: ['fontSize', 'fontWeight', 'fontFamily', 'fontStyle', 'lineHeight', 'text', 'charSpacing', 'textAlign', 'styles'],\n\n /**\n * @private\n */\n _reNewline: /\\r?\\n/,\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpacesAndTabs: /[ \\t\\r]/g,\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpaceAndTab: /[ \\t\\r]/,\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reWords: /\\S+/g,\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'text',\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n fontSize: 40,\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n fontWeight: 'normal',\n\n /**\n * Font family\n * @type String\n * @default\n */\n fontFamily: 'Times New Roman',\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n underline: false,\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n overline: false,\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n linethrough: false,\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n textAlign: 'left',\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n fontStyle: 'normal',\n\n /**\n * Line height\n * @type Number\n * @default\n */\n lineHeight: 1.16,\n\n /**\n * Superscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n superscript: {\n size: 0.60,\n // fontSize factor\n baseline: -0.35 // baseline-shift factor (upwards)\n\n },\n\n /**\n * Subscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n subscript: {\n size: 0.60,\n // fontSize factor\n baseline: 0.11 // baseline-shift factor (downwards)\n\n },\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n textBackgroundColor: '',\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('fontFamily', 'fontWeight', 'fontSize', 'text', 'underline', 'overline', 'linethrough', 'textAlign', 'fontStyle', 'lineHeight', 'textBackgroundColor', 'charSpacing', 'styles'),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * @type Array\n */\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('fontFamily', 'fontWeight', 'fontSize', 'text', 'underline', 'overline', 'linethrough', 'textAlign', 'fontStyle', 'lineHeight', 'textBackgroundColor', 'charSpacing', 'styles'),\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color.\n * Backwards incompatibility note: This property was named \"strokeStyle\" until v1.1.6\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property was named \"textShadow\" (String) until v1.2.11\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * @private\n */\n _fontSizeFraction: 0.222,\n\n /**\n * @private\n */\n offsets: {\n underline: 0.10,\n linethrough: -0.315,\n overline: -0.88\n },\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n _fontSizeMult: 1.13,\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n charSpacing: 0,\n\n /**\n * Object containing character styles - top-level properties -> line numbers,\n * 2nd-level properties - charater numbers\n * @type Object\n * @default\n */\n styles: null,\n\n /**\n * Reference to a context to measure text char or couple of chars\n * the cacheContext of the canvas will be used or a freshly created one if the object is not on canvas\n * once created it will be referenced on fabric._measuringContext to avoide creating a canvas for every\n * text object created.\n * @type {CanvasRenderingContext2D}\n * @default\n */\n _measuringContext: null,\n\n /**\n * Baseline shift, stlyes only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n deltaY: 0,\n\n /**\n * Array of properties that define a style unit (of 'styles').\n * @type {Array}\n * @default\n */\n _styleProperties: ['stroke', 'strokeWidth', 'fill', 'fontFamily', 'fontSize', 'fontWeight', 'fontStyle', 'underline', 'overline', 'linethrough', 'deltaY', 'textBackgroundColor'],\n\n /**\n * contains characters bounding boxes\n */\n __charBounds: [],\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n CACHE_FONT_SIZE: 400,\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n MIN_TEXT_WIDTH: 2,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n initialize: function initialize(text, options) {\n this.styles = options ? options.styles || {} : {};\n this.text = text;\n this.__skipDimension = true;\n this.callSuper('initialize', options);\n this.__skipDimension = false;\n this.initDimensions();\n this.setCoords();\n this.setupState({\n propertySet: '_dimensionAffectingProps'\n });\n },\n\n /**\n * Return a contex for measurement of text string.\n * if created it gets stored for reuse\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n getMeasuringContext: function getMeasuringContext() {\n // if we did not return we have to measure something.\n if (!fabric._measuringContext) {\n fabric._measuringContext = this.canvas && this.canvas.contextCache || fabric.util.createCanvasElement().getContext('2d');\n }\n\n return fabric._measuringContext;\n },\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText: function _splitText() {\n var newLines = this._splitTextIntoLines(this.text);\n\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n },\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions: function initDimensions() {\n if (this.__skipDimension) {\n return;\n }\n\n this._splitText();\n\n this._clearCache();\n\n this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n\n this.height = this.calcTextHeight();\n this.saveState({\n propertySet: '_dimensionAffectingProps'\n });\n },\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces: function enlargeSpaces() {\n var diffSpace, currentLineWidth, numberOfSpaces, accumulatedSpace, line, charBound, spaces;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (this.textAlign !== 'justify' && (i === len - 1 || this.isEndOfWrapping(i))) {\n continue;\n }\n\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n\n if (currentLineWidth < this.width && (spaces = this.textLines[i].match(this._reSpacesAndTabs))) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n\n for (var j = 0, jlen = line.length; j <= jlen; j++) {\n charBound = this.__charBounds[i][j];\n\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n } else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping: function isEndOfWrapping(lineIndex) {\n return lineIndex === this._textLines.length - 1;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always for text and Itext.\n * @return Number\n */\n missingNewlineOffset: function missingNewlineOffset() {\n return 1;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString: function toString() {\n return '#';\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function _getCacheCanvasDimensions() {\n var dims = this.callSuper('_getCacheCanvasDimensions');\n var fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n this._setTextStyles(ctx);\n\n this._renderTextLinesBackground(ctx);\n\n this._renderTextDecoration(ctx, 'underline');\n\n this._renderText(ctx);\n\n this._renderTextDecoration(ctx, 'overline');\n\n this._renderTextDecoration(ctx, 'linethrough');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText: function _renderText(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderTextStroke(ctx);\n\n this._renderTextFill(ctx);\n } else {\n this._renderTextFill(ctx);\n\n this._renderTextStroke(ctx);\n }\n },\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles: function _setTextStyles(ctx, charStyle, forMeasuring) {\n ctx.textBaseline = 'alphabetic';\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n },\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of fabric.Text object\n */\n calcTextWidth: function calcTextWidth() {\n var maxWidth = this.getLineWidth(0);\n\n for (var i = 1, len = this._textLines.length; i < len; i++) {\n var currentLineWidth = this.getLineWidth(i);\n\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n\n return maxWidth;\n },\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine: function _renderTextLine(method, ctx, line, left, top, lineIndex) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n },\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground: function _renderTextLinesBackground(ctx) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n\n var lineTopOffset = 0,\n heightOfLine,\n lineLeftOffset,\n originalFill = ctx.fillStyle,\n line,\n lastColor,\n leftOffset = this._getLeftOffset(),\n topOffset = this._getTopOffset(),\n boxStart = 0,\n boxWidth = 0,\n charBox,\n currentColor;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor', i)) {\n lineTopOffset += heightOfLine;\n continue;\n }\n\n line = this._textLines[i];\n lineLeftOffset = this._getLineLeftOffset(i);\n boxWidth = 0;\n boxStart = 0;\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n\n if (currentColor !== lastColor) {\n ctx.fillStyle = lastColor;\n lastColor && ctx.fillRect(leftOffset + lineLeftOffset + boxStart, topOffset + lineTopOffset, boxWidth, heightOfLine / this.lineHeight);\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n\n if (currentColor) {\n ctx.fillStyle = currentColor;\n ctx.fillRect(leftOffset + lineLeftOffset + boxStart, topOffset + lineTopOffset, boxWidth, heightOfLine / this.lineHeight);\n }\n\n lineTopOffset += heightOfLine;\n }\n\n ctx.fillStyle = originalFill; // if there is text background color no\n // other shadows should be casted\n\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {Object} decl style declaration for cache\n * @param {String} decl.fontFamily fontFamily\n * @param {String} decl.fontStyle fontStyle\n * @param {String} decl.fontWeight fontWeight\n * @return {Object} reference to cache\n */\n getFontCache: function getFontCache(decl) {\n var fontFamily = decl.fontFamily.toLowerCase();\n\n if (!fabric.charWidthsCache[fontFamily]) {\n fabric.charWidthsCache[fontFamily] = {};\n }\n\n var cache = fabric.charWidthsCache[fontFamily],\n cacheProp = decl.fontStyle.toLowerCase() + '_' + (decl.fontWeight + '').toLowerCase();\n\n if (!cache[cacheProp]) {\n cache[cacheProp] = {};\n }\n\n return cache[cacheProp];\n },\n\n /**\n * apply all the character style to canvas for rendering\n * @private\n * @param {String} _char\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} [decl]\n */\n _applyCharStyles: function _applyCharStyles(method, ctx, lineIndex, charIndex, styleDeclaration) {\n this._setFillStyles(ctx, styleDeclaration);\n\n this._setStrokeStyles(ctx, styleDeclaration);\n\n ctx.font = this._getFontDeclaration(styleDeclaration);\n },\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar: function _measureChar(_char, charStyle, previousChar, prevCharStyle) {\n // first i try to return from cache\n var fontCache = this.getFontCache(charStyle),\n fontDeclaration = this._getFontDeclaration(charStyle),\n previousFontDeclaration = this._getFontDeclaration(prevCharStyle),\n couple = previousChar + _char,\n stylesAreEqual = fontDeclaration === previousFontDeclaration,\n width,\n coupleWidth,\n previousWidth,\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE,\n kernedWidth;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth;\n }\n\n if (width === undefined || previousWidth === undefined || coupleWidth === undefined) {\n var ctx = this.getMeasuringContext(); // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n\n this._setTextStyles(ctx, charStyle, true);\n }\n\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n kernedWidth = coupleWidth - previousWidth;\n }\n\n return {\n width: width * fontMultiplier,\n kernedWidth: kernedWidth * fontMultiplier\n };\n },\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar: function getHeightOfChar(line, _char) {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n },\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n measureLine: function measureLine(lineIndex) {\n var lineInfo = this._measureLine(lineIndex);\n\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n\n return lineInfo;\n },\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.widthOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine: function _measureLine(lineIndex) {\n var width = 0,\n i,\n grapheme,\n line = this._textLines[lineIndex],\n prevGrapheme,\n graphemeInfo,\n numOfSpaces = 0,\n lineBounds = new Array(line.length);\n this.__charBounds[lineIndex] = lineBounds;\n\n for (i = 0; i < line.length; i++) {\n grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n } // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n\n\n lineBounds[i] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize\n };\n return {\n width: width,\n numOfSpaces: numOfSpaces\n };\n },\n\n /**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * @private\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n */\n _getGraphemeBox: function _getGraphemeBox(grapheme, lineIndex, charIndex, prevGrapheme, skipLeft) {\n var style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1) : {},\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle),\n kernedWidth = info.kernedWidth,\n width = info.width,\n charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n var box = {\n width: width,\n left: 0,\n height: style.fontSize,\n kernedWidth: kernedWidth,\n deltaY: style.deltaY\n };\n\n if (charIndex > 0 && !skipLeft) {\n var previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left = previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n\n return box;\n },\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine: function getHeightOfLine(lineIndex) {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n var line = this._textLines[lineIndex],\n // char 0 is measured before the line cycle because it nneds to char\n // emptylines\n maxHeight = this.getHeightOfChar(lineIndex, 0);\n\n for (var i = 1, len = line.length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return this.__lineHeights[lineIndex] = maxHeight * this.lineHeight * this._fontSizeMult;\n },\n\n /**\n * Calculate text box height\n */\n calcTextHeight: function calcTextHeight() {\n var lineHeight,\n height = 0;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n }\n\n return height;\n },\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset: function _getLeftOffset() {\n return -this.width / 2;\n },\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset: function _getTopOffset() {\n return -this.height / 2;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} filler fabric.Pattern or fabric.Gradient\n * @return {Object} offset.offsetX offset for text rendering\n * @return {Object} offset.offsetY offset for text rendering\n */\n _applyPatternGradientTransform: function _applyPatternGradientTransform(ctx, filler) {\n if (!filler || !filler.toLive) {\n return {\n offsetX: 0,\n offsetY: 0\n };\n }\n\n var offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n return {\n offsetX: offsetX,\n offsetY: offsetY\n };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon: function _renderTextCommon(ctx, method) {\n ctx.save();\n\n var lineHeights = 0,\n left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._applyPatternGradientTransform(ctx, method === 'fillText' ? this.fill : this.stroke);\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n var heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n\n this._renderTextLine(method, ctx, this._textLines[i], left + leftOffset - offsets.offsetX, top + lineHeights + maxHeight - offsets.offsetY, i);\n\n lineHeights += heightOfLine;\n }\n\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill: function _renderTextFill(ctx) {\n if (!this.fill && !this.styleHas('fill')) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke: function _renderTextStroke(ctx) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n\n this._setLineDash(ctx, this.strokeDashArray);\n\n ctx.beginPath();\n\n this._renderTextCommon(ctx, 'strokeText');\n\n ctx.closePath();\n ctx.restore();\n },\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Content of the line\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n * @param {Number} charOffset\n */\n _renderChars: function _renderChars(method, ctx, line, left, top, lineIndex) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n shortCut = !isJustify && this.charSpacing === 0 && this.isEmptyStyles(lineIndex);\n ctx.save();\n top -= lineHeight * this._fontSizeFraction / this.lineHeight;\n\n if (shortCut) {\n // render all the line in one pass without checking\n this._renderChar(method, ctx, lineIndex, 0, this.textLines[lineIndex], left, top, lineHeight);\n\n ctx.restore();\n return;\n }\n\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n\n if (boxWidth === 0) {\n left += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = this._hasStyleChanged(actualStyle, nextStyle);\n }\n\n if (timeToRender) {\n this._renderChar(method, ctx, lineIndex, i, charsToRender, left, top, lineHeight);\n\n charsToRender = '';\n actualStyle = nextStyle;\n left += boxWidth;\n boxWidth = 0;\n }\n }\n\n ctx.restore();\n },\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar: function _renderChar(method, ctx, lineIndex, charIndex, _char, left, top) {\n var decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke = method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n\n decl && ctx.save();\n\n this._applyCharStyles(method, ctx, lineIndex, charIndex, fullDecl);\n\n if (decl && decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n\n if (decl && decl.deltaY) {\n top += decl.deltaY;\n }\n\n shouldFill && ctx.fillText(_char, left, top);\n shouldStroke && ctx.strokeText(_char, left, top);\n decl && ctx.restore();\n },\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSuperscript: function setSuperscript(start, end) {\n return this._setScript(start, end, this.superscript);\n },\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSubscript: function setSubscript(start, end) {\n return this._setScript(start, end, this.subscript);\n },\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n _setScript: function _setScript(start, end, schema) {\n var loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'fontSize'),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = {\n fontSize: fontSize * schema.size,\n deltaY: dy + fontSize * schema.baseline\n };\n this.setSelectionStyles(style, start, end);\n return this;\n },\n\n /**\n * @private\n * @param {Object} prevStyle\n * @param {Object} thisStyle\n */\n _hasStyleChanged: function _hasStyleChanged(prevStyle, thisStyle) {\n return prevStyle.fill !== thisStyle.fill || prevStyle.stroke !== thisStyle.stroke || prevStyle.strokeWidth !== thisStyle.strokeWidth || prevStyle.fontSize !== thisStyle.fontSize || prevStyle.fontFamily !== thisStyle.fontFamily || prevStyle.fontWeight !== thisStyle.fontWeight || prevStyle.fontStyle !== thisStyle.fontStyle || prevStyle.deltaY !== thisStyle.deltaY;\n },\n\n /**\n * @private\n * @param {Object} prevStyle\n * @param {Object} thisStyle\n */\n _hasStyleChangedForSvg: function _hasStyleChangedForSvg(prevStyle, thisStyle) {\n return this._hasStyleChanged(prevStyle, thisStyle) || prevStyle.overline !== thisStyle.overline || prevStyle.underline !== thisStyle.underline || prevStyle.linethrough !== thisStyle.linethrough;\n },\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset: function _getLineLeftOffset(lineIndex) {\n var lineWidth = this.getLineWidth(lineIndex);\n\n if (this.textAlign === 'center') {\n return (this.width - lineWidth) / 2;\n }\n\n if (this.textAlign === 'right') {\n return this.width - lineWidth;\n }\n\n if (this.textAlign === 'justify-center' && this.isEndOfWrapping(lineIndex)) {\n return (this.width - lineWidth) / 2;\n }\n\n if (this.textAlign === 'justify-right' && this.isEndOfWrapping(lineIndex)) {\n return this.width - lineWidth;\n }\n\n return 0;\n },\n\n /**\n * @private\n */\n _clearCache: function _clearCache() {\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n },\n\n /**\n * @private\n */\n _shouldClearDimensionCache: function _shouldClearDimensionCache() {\n var shouldClear = this._forceClearCache;\n shouldClear || (shouldClear = this.hasStateChanged('_dimensionAffectingProps'));\n\n if (shouldClear) {\n this.dirty = true;\n this._forceClearCache = false;\n }\n\n return shouldClear;\n },\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth: function getLineWidth(lineIndex) {\n if (this.__lineWidths[lineIndex]) {\n return this.__lineWidths[lineIndex];\n }\n\n var width,\n line = this._textLines[lineIndex],\n lineInfo;\n\n if (line === '') {\n width = 0;\n } else {\n lineInfo = this.measureLine(lineIndex);\n width = lineInfo.width;\n }\n\n this.__lineWidths[lineIndex] = width;\n return width;\n },\n _getWidthOfCharSpacing: function _getWidthOfCharSpacing() {\n if (this.charSpacing !== 0) {\n return this.fontSize * this.charSpacing / 1000;\n }\n\n return 0;\n },\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the charater number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt: function getValueOfPropertyAt(lineIndex, charIndex, property) {\n var charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n\n if (charStyle && typeof charStyle[property] !== 'undefined') {\n return charStyle[property];\n }\n\n return this[property];\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration: function _renderTextDecoration(ctx, type) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n\n var heightOfLine,\n size,\n _size,\n lineLeftOffset,\n dy,\n _dy,\n line,\n lastDecoration,\n leftOffset = this._getLeftOffset(),\n topOffset = this._getTopOffset(),\n top,\n boxStart,\n boxWidth,\n charBox,\n currentDecoration,\n maxHeight,\n currentFill,\n lastFill,\n charSpacing = this._getWidthOfCharSpacing();\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n\n line = this._textLines[i];\n maxHeight = heightOfLine / this.lineHeight;\n lineLeftOffset = this._getLineLeftOffset(i);\n boxStart = 0;\n boxWidth = 0;\n lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n lastFill = this.getValueOfPropertyAt(i, 0, 'fill');\n top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n size = this.getHeightOfChar(i, 0);\n dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, 'fill');\n _size = this.getHeightOfChar(i, j);\n _dy = this.getValueOfPropertyAt(i, j, 'deltaY');\n\n if ((currentDecoration !== lastDecoration || currentFill !== lastFill || _size !== size || _dy !== dy) && boxWidth > 0) {\n ctx.fillStyle = lastFill;\n lastDecoration && lastFill && ctx.fillRect(leftOffset + lineLeftOffset + boxStart, top + this.offsets[type] * size + dy, boxWidth, this.fontSize / 15);\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = _size;\n dy = _dy;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n\n ctx.fillStyle = currentFill;\n currentDecoration && currentFill && ctx.fillRect(leftOffset + lineLeftOffset + boxStart, top + this.offsets[type] * size + dy, boxWidth - charSpacing, this.fontSize / 15);\n topOffset += heightOfLine;\n } // if there is text background color no\n // other shadows should be casted\n\n\n this._removeShadow(ctx);\n },\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration: function _getFontDeclaration(styleObject, forMeasuring) {\n var style = styleObject || this,\n family = this.fontFamily,\n fontIsGeneric = fabric.Text.genericFonts.indexOf(family.toLowerCase()) > -1;\n var fontFamily = family === undefined || family.indexOf('\\'') > -1 || family.indexOf(',') > -1 || family.indexOf('\"') > -1 || fontIsGeneric ? style.fontFamily : '\"' + style.fontFamily + '\"';\n return [// node-canvas needs \"weight style\", while browsers need \"style weight\"\n // verify if this can be fixed in JSDOM\n fabric.isLikelyNode ? style.fontWeight : style.fontStyle, fabric.isLikelyNode ? style.fontStyle : style.fontWeight, forMeasuring ? this.CACHE_FONT_SIZE + 'px' : style.fontSize + 'px', fontFamily].join(' ');\n },\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function render(ctx) {\n // do not render if object is not visible\n if (!this.visible) {\n return;\n }\n\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n }\n\n this.callSuper('render', ctx);\n },\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns {Array} Lines in the text\n */\n _splitTextIntoLines: function _splitTextIntoLines(text) {\n var lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'],\n newText = [];\n\n for (var i = 0; i < lines.length; i++) {\n newLines[i] = fabric.util.string.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n\n newText.pop();\n return {\n _unwrappedLines: newLines,\n lines: lines,\n graphemeText: newText,\n graphemeLines: newLines\n };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n var additionalProperties = ['text', 'fontSize', 'fontWeight', 'fontFamily', 'fontStyle', 'lineHeight', 'underline', 'overline', 'linethrough', 'textAlign', 'textBackgroundColor', 'charSpacing'].concat(propertiesToInclude);\n var obj = this.callSuper('toObject', additionalProperties);\n obj.styles = clone(this.styles, true);\n return obj;\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function set(key, value) {\n this.callSuper('set', key, value);\n var needsDims = false;\n\n if (_typeof(key) === 'object') {\n for (var _key in key) {\n needsDims = needsDims || this._dimensionAffectingProps.indexOf(_key) !== -1;\n }\n } else {\n needsDims = this._dimensionAffectingProps.indexOf(key) !== -1;\n }\n\n if (needsDims) {\n this.initDimensions();\n this.setCoords();\n }\n\n return this;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity: function complexity() {\n return 1;\n }\n });\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement})\n * @static\n * @memberOf fabric.Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n\n fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor'.split(' '));\n /**\n * Default SVG font size\n * @static\n * @memberOf fabric.Text\n */\n\n fabric.Text.DEFAULT_SVG_FONT_SIZE = 16;\n /**\n * Returns fabric.Text instance from an SVG element (not yet implemented)\n * @static\n * @memberOf fabric.Text\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n\n fabric.Text.fromElement = function (element, callback, options) {\n if (!element) {\n return callback(null);\n }\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES),\n parsedAnchor = parsedAttributes.textAnchor || 'left';\n options = fabric.util.object.extend(options ? clone(options) : {}, parsedAttributes);\n options.top = options.top || 0;\n options.left = options.left || 0;\n\n if (parsedAttributes.textDecoration) {\n var textDecoration = parsedAttributes.textDecoration;\n\n if (textDecoration.indexOf('underline') !== -1) {\n options.underline = true;\n }\n\n if (textDecoration.indexOf('overline') !== -1) {\n options.overline = true;\n }\n\n if (textDecoration.indexOf('line-through') !== -1) {\n options.linethrough = true;\n }\n\n delete options.textDecoration;\n }\n\n if ('dx' in parsedAttributes) {\n options.left += parsedAttributes.dx;\n }\n\n if ('dy' in parsedAttributes) {\n options.top += parsedAttributes.dy;\n }\n\n if (!('fontSize' in options)) {\n options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n\n var textContent = ''; // The XML is not properly parsed in IE9 so a workaround to get\n // textContent is through firstChild.data. Another workaround would be\n // to convert XML loaded from a file to be converted using DOMParser (same way loadSVGFromString() does)\n\n if (!('textContent' in element)) {\n if ('firstChild' in element && element.firstChild !== null) {\n if ('data' in element.firstChild && element.firstChild.data !== null) {\n textContent = element.firstChild.data;\n }\n }\n } else {\n textContent = element.textContent;\n }\n\n textContent = textContent.replace(/^\\s+|\\s+$|\\n+/g, '').replace(/\\s+/g, ' ');\n var originalStrokeWidth = options.strokeWidth;\n options.strokeWidth = 0;\n var text = new fabric.Text(textContent, options),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff = (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff,\n offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n\n if (parsedAnchor === 'center') {\n offX = text.getScaledWidth() / 2;\n }\n\n if (parsedAnchor === 'right') {\n offX = text.getScaledWidth();\n }\n\n text.set({\n left: text.left - offX,\n top: text.top - (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) / text.lineHeight,\n strokeWidth: typeof originalStrokeWidth !== 'undefined' ? originalStrokeWidth : 1\n });\n callback(text);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Text instance from an object representation\n * @static\n * @memberOf fabric.Text\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Text instance is created\n */\n\n\n fabric.Text.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Text', object, callback, 'text');\n };\n\n fabric.Text.genericFonts = ['sans-serif', 'serif', 'cursive', 'fantasy', 'monospace'];\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Text);\n})(typeof exports !== 'undefined' ? exports : this);\n\n(function () {\n fabric.util.object.extend(fabric.Text.prototype,\n /** @lends fabric.Text.prototype */\n {\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function isEmptyStyles(lineIndex) {\n if (!this.styles) {\n return true;\n }\n\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n\n var obj = typeof lineIndex === 'undefined' ? this.styles : {\n line: this.styles[lineIndex]\n };\n\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n\n return true;\n },\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas: function styleHas(property, lineIndex) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n\n var obj = typeof lineIndex === 'undefined' ? this.styles : {\n 0: this.styles[lineIndex]\n }; // eslint-disable-next-line\n\n for (var p1 in obj) {\n // eslint-disable-next-line\n for (var p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n\n return false;\n },\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle: function cleanStyle(property) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n\n var obj = this.styles,\n stylesCount = 0,\n letterCount,\n stylePropertyValue,\n allStyleObjectPropertiesMatch = true,\n graphemeCount = 0,\n styleObject; // eslint-disable-next-line\n\n for (var p1 in obj) {\n letterCount = 0; // eslint-disable-next-line\n\n for (var p2 in obj[p1]) {\n var styleObject = obj[p1][p2],\n stylePropertyHasBeenSet = styleObject.hasOwnProperty(property);\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n } else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property]) {\n delete styleObject[property];\n }\n } else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n } else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n } // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n\n\n for (var i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n this[property] = stylePropertyValue;\n this.removeStyle(property);\n }\n },\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle: function removeStyle(property) {\n if (!this.styles || !property || property === '') {\n return;\n }\n\n var obj = this.styles,\n line,\n lineNum,\n charNum;\n\n for (lineNum in obj) {\n line = obj[lineNum];\n\n for (charNum in line) {\n delete line[charNum][property];\n\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n },\n\n /**\n * @private\n */\n _extendStyles: function _extendStyles(index, styles) {\n var loc = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(loc.lineIndex)) {\n this._setLineStyle(loc.lineIndex);\n }\n\n if (!this._getStyleDeclaration(loc.lineIndex, loc.charIndex)) {\n this._setStyleDeclaration(loc.lineIndex, loc.charIndex, {});\n }\n\n fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles);\n },\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. usefull to manage styles.\n */\n get2DCursorLocation: function get2DCursorLocation(selectionStart, skipWrapping) {\n if (typeof selectionStart === 'undefined') {\n selectionStart = this.selectionStart;\n }\n\n var lines = skipWrapping ? this._unwrappedTextLines : this._textLines,\n len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart\n };\n }\n\n selectionStart -= lines[i].length + this.missingNewlineOffset(i);\n }\n\n return {\n lineIndex: i - 1,\n charIndex: lines[i - 1].length < selectionStart ? lines[i - 1].length : selectionStart\n };\n },\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, slectionStart or selectionEnd will be used.\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles: function getSelectionStyles(startIndex, endIndex, complete) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n\n var styles = [];\n\n for (var i = startIndex; i < endIndex; i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n\n return styles;\n },\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition: function getStyleAtPosition(position, complete) {\n var loc = this.get2DCursorLocation(position),\n style = complete ? this.getCompleteStyleDeclaration(loc.lineIndex, loc.charIndex) : this._getStyleDeclaration(loc.lineIndex, loc.charIndex);\n return style || {};\n },\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @return {fabric.IText} thisArg\n * @chainable\n */\n setSelectionStyles: function setSelectionStyles(styles, startIndex, endIndex) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n\n for (var i = startIndex; i < endIndex; i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n\n\n this._forceClearCache = true;\n return this;\n },\n\n /**\n * get the reference, not a clone, of the style object for a given character\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Object} style object\n */\n _getStyleDeclaration: function _getStyleDeclaration(lineIndex, charIndex) {\n var lineStyle = this.styles && this.styles[lineIndex];\n\n if (!lineStyle) {\n return null;\n }\n\n return lineStyle[charIndex];\n },\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration: function getCompleteStyleDeclaration(lineIndex, charIndex) {\n var style = this._getStyleDeclaration(lineIndex, charIndex) || {},\n styleObject = {},\n prop;\n\n for (var i = 0; i < this._styleProperties.length; i++) {\n prop = this._styleProperties[i];\n styleObject[prop] = typeof style[prop] === 'undefined' ? this[prop] : style[prop];\n }\n\n return styleObject;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function _setStyleDeclaration(lineIndex, charIndex, style) {\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function _deleteStyleDeclaration(lineIndex, charIndex) {\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function _getLineStyle(lineIndex) {\n return !!this.styles[lineIndex];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n _setLineStyle: function _setLineStyle(lineIndex) {\n this.styles[lineIndex] = {};\n },\n\n /**\n * @param {Number} lineIndex\n * @private\n */\n _deleteLineStyle: function _deleteLineStyle(lineIndex) {\n delete this.styles[lineIndex];\n }\n });\n})();\n\n(function () {\n function parseDecoration(object) {\n if (object.textDecoration) {\n object.textDecoration.indexOf('underline') > -1 && (object.underline = true);\n object.textDecoration.indexOf('line-through') > -1 && (object.linethrough = true);\n object.textDecoration.indexOf('overline') > -1 && (object.overline = true);\n delete object.textDecoration;\n }\n }\n /**\n * IText class (introduced in v1.4) Events are also fired with \"text:\"\n * prefix when observing canvas.\n * @class fabric.IText\n * @extends fabric.Text\n * @mixes fabric.Observable\n *\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n *\n * @return {fabric.IText} thisArg\n * @see {@link fabric.IText#initialize} for constructor definition\n *\n *

Supported key combinations:

\n *
\n   *   Move cursor:                    left, right, up, down\n   *   Select character:               shift + left, shift + right\n   *   Select text vertically:         shift + up, shift + down\n   *   Move cursor by word:            alt + left, alt + right\n   *   Select words:                   shift + alt + left, shift + alt + right\n   *   Move cursor to line start/end:  cmd + left, cmd + right or home, end\n   *   Select till start/end of line:  cmd + shift + left, cmd + shift + right or shift + home, shift + end\n   *   Jump to start/end of text:      cmd + up, cmd + down\n   *   Select till start/end of text:  cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n   *   Delete character:               backspace\n   *   Delete word:                    alt + backspace\n   *   Delete line:                    cmd + backspace\n   *   Forward delete:                 delete\n   *   Copy text:                      ctrl/cmd + c\n   *   Paste text:                     ctrl/cmd + v\n   *   Cut text:                       ctrl/cmd + x\n   *   Select entire text:             ctrl/cmd + a\n   *   Quit editing                    tab or esc\n   * 
\n *\n *

Supported mouse/touch combination

\n *
\n   *   Position cursor:                click/touch\n   *   Create selection:               click/touch & drag\n   *   Create selection:               click & shift + click\n   *   Select word:                    double click\n   *   Select line:                    triple click\n   * 
\n */\n\n\n fabric.IText = fabric.util.createClass(fabric.Text, fabric.Observable,\n /** @lends fabric.IText.prototype */\n {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'i-text',\n\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n selectionStart: 0,\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n selectionEnd: 0,\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(17,119,255,0.3)',\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n isEditing: false,\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n editable: true,\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n editingBorderColor: 'rgba(102,153,255,0.25)',\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n cursorWidth: 2,\n\n /**\n * Color of default cursor (when not overwritten by character style)\n * @type String\n * @default\n */\n cursorColor: '#333',\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n cursorDelay: 1000,\n\n /**\n * Duration of cursor fadein (in ms)\n * @type Number\n * @default\n */\n cursorDuration: 600,\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n caching: true,\n\n /**\n * @private\n */\n _reSpace: /\\s|\\n/,\n\n /**\n * @private\n */\n _currentCursorOpacity: 0,\n\n /**\n * @private\n */\n _selectionDirection: null,\n\n /**\n * @private\n */\n _abortCursorAnimation: false,\n\n /**\n * @private\n */\n __widthOfSpace: [],\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n inCompositionMode: false,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.IText} thisArg\n */\n initialize: function initialize(text, options) {\n this.callSuper('initialize', text, options);\n this.initBehavior();\n },\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart: function setSelectionStart(index) {\n index = Math.max(index, 0);\n\n this._updateAndFire('selectionStart', index);\n },\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd: function setSelectionEnd(index) {\n index = Math.min(index, this.text.length);\n\n this._updateAndFire('selectionEnd', index);\n },\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n _updateAndFire: function _updateAndFire(property, index) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n\n this[property] = index;\n }\n\n this._updateTextarea();\n },\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged: function _fireSelectionChanged() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', {\n target: this\n });\n },\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions: function initDimensions() {\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n this.callSuper('initDimensions');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function render(ctx) {\n this.clearContextTop();\n this.callSuper('render', ctx); // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n\n this.cursorOffsetCache = {};\n this.renderCursorOrSelection();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function _render(ctx) {\n this.callSuper('_render', ctx);\n },\n\n /**\n * Prepare and clean the contextTop\n */\n clearContextTop: function clearContextTop(skipRestore) {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n\n var ctx = this.canvas.contextTop,\n v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n this.transformMatrix && ctx.transform.apply(ctx, this.transformMatrix);\n\n this._clearTextArea(ctx);\n\n skipRestore || ctx.restore();\n },\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection: function renderCursorOrSelection() {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n\n var boundaries = this._getCursorBoundaries(),\n ctx = this.canvas.contextTop;\n\n this.clearContextTop(true);\n\n if (this.selectionStart === this.selectionEnd) {\n this.renderCursor(boundaries, ctx);\n } else {\n this.renderSelection(boundaries, ctx);\n }\n\n ctx.restore();\n },\n _clearTextArea: function _clearTextArea(ctx) {\n // we add 4 pixel, to be sure to do not leave any pixel out\n var width = this.width + 4,\n height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n },\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * @private\n * @param {Array} chars Array of characters\n * @param {String} typeOfBoundaries\n */\n _getCursorBoundaries: function _getCursorBoundaries(position) {\n // left/top are left/top of entire text box\n // leftOffset/topOffset are offset from that left/top point of a text box\n if (typeof position === 'undefined') {\n position = this.selectionStart;\n }\n\n var left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(position);\n\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top\n };\n },\n\n /**\n * @private\n */\n _getCursorBoundariesOffsets: function _getCursorBoundariesOffsets(position) {\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache;\n }\n\n var lineLeftOffset,\n lineIndex,\n charIndex,\n topOffset = 0,\n leftOffset = 0,\n boundaries,\n cursorPosition = this.get2DCursorLocation(position);\n charIndex = cursorPosition.charIndex;\n lineIndex = cursorPosition.lineIndex;\n\n for (var i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n var bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n\n if (this.charSpacing !== 0 && charIndex === this._textLines[lineIndex].length) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n\n boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0)\n };\n this.cursorOffsetCache = boundaries;\n return this.cursorOffsetCache;\n },\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor: function renderCursor(boundaries, ctx) {\n var cursorLocation = this.get2DCursorLocation(),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.scaleX * this.canvas.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n topOffset = boundaries.topOffset,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY');\n topOffset += (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight - charHeight * (1 - this._fontSizeFraction);\n\n if (this.inCompositionMode) {\n this.renderSelection(boundaries, ctx);\n }\n\n ctx.fillStyle = this.getValueOfPropertyAt(lineIndex, charIndex, 'fill');\n ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity;\n ctx.fillRect(boundaries.left + boundaries.leftOffset - cursorWidth / 2, topOffset + boundaries.top + dy, cursorWidth, charHeight);\n },\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection: function renderSelection(boundaries, ctx) {\n var selectionStart = this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart,\n selectionEnd = this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd,\n isJustify = this.textAlign.indexOf('justify') !== -1,\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (var i = startLine; i <= endLine; i++) {\n var lineOffset = this._getLineLeftOffset(i) || 0,\n lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0,\n boxStart = 0,\n boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n\n if (i >= startLine && i < endLine) {\n boxEnd = isJustify && !this.isEndOfWrapping(i) ? this.width : this.getLineWidth(i) || 5; // WTF is this 5?\n } else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n } else {\n var charSpacing = this._getWidthOfCharSpacing();\n\n boxEnd = this.__charBounds[endLine][endChar - 1].left + this.__charBounds[endLine][endChar - 1].width - charSpacing;\n }\n }\n\n realLineHeight = lineHeight;\n\n if (this.lineHeight < 1 || i === endLine && this.lineHeight > 1) {\n lineHeight /= this.lineHeight;\n }\n\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n ctx.fillRect(boundaries.left + lineOffset + boxStart, boundaries.top + boundaries.topOffset + lineHeight, boxEnd - boxStart, 1);\n } else {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(boundaries.left + lineOffset + boxStart, boundaries.top + boundaries.topOffset, boxEnd - boxStart, lineHeight);\n }\n\n boundaries.topOffset += realLineHeight;\n }\n },\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * @return {Number} Character font size\n */\n getCurrentCharFontSize: function getCurrentCharFontSize() {\n var cp = this._getCurrentCharIndex();\n\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n },\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * @return {String} Character color (fill)\n */\n getCurrentCharColor: function getCurrentCharColor() {\n var cp = this._getCurrentCharIndex();\n\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fill');\n },\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex: function _getCurrentCharIndex() {\n var cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex = cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return {\n l: cursorPosition.lineIndex,\n c: charIndex\n };\n }\n });\n /**\n * Returns fabric.IText instance from an object representation\n * @static\n * @memberOf fabric.IText\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as argument\n */\n\n fabric.IText.fromObject = function (object, callback) {\n parseDecoration(object);\n\n if (object.styles) {\n for (var i in object.styles) {\n for (var j in object.styles[i]) {\n parseDecoration(object.styles[i][j]);\n }\n }\n }\n\n fabric.Object._fromObject('IText', object, callback, 'text');\n };\n})();\n\n(function () {\n var clone = fabric.util.object.clone;\n fabric.util.object.extend(fabric.IText.prototype,\n /** @lends fabric.IText.prototype */\n {\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior: function initBehavior() {\n this.initAddedHandler();\n this.initRemovedHandler();\n this.initCursorSelectionHandlers();\n this.initDoubleClickSimulation();\n this.mouseMoveHandler = this.mouseMoveHandler.bind(this);\n },\n onDeselect: function onDeselect() {\n this.isEditing && this.exitEditing();\n this.selected = false;\n },\n\n /**\n * Initializes \"added\" event handler\n */\n initAddedHandler: function initAddedHandler() {\n var _this = this;\n\n this.on('added', function () {\n var canvas = _this.canvas;\n\n if (canvas) {\n if (!canvas._hasITextHandlers) {\n canvas._hasITextHandlers = true;\n\n _this._initCanvasHandlers(canvas);\n }\n\n canvas._iTextInstances = canvas._iTextInstances || [];\n\n canvas._iTextInstances.push(_this);\n }\n });\n },\n initRemovedHandler: function initRemovedHandler() {\n var _this = this;\n\n this.on('removed', function () {\n var canvas = _this.canvas;\n\n if (canvas) {\n canvas._iTextInstances = canvas._iTextInstances || [];\n fabric.util.removeFromArray(canvas._iTextInstances, _this);\n\n if (canvas._iTextInstances.length === 0) {\n canvas._hasITextHandlers = false;\n\n _this._removeCanvasHandlers(canvas);\n }\n }\n });\n },\n\n /**\n * register canvas event to manage exiting on other instances\n * @private\n */\n _initCanvasHandlers: function _initCanvasHandlers(canvas) {\n canvas._mouseUpITextHandler = function () {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function (obj) {\n obj.__isMousedown = false;\n });\n }\n };\n\n canvas.on('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * remove canvas event to manage exiting on other instances\n * @private\n */\n _removeCanvasHandlers: function _removeCanvasHandlers(canvas) {\n canvas.off('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * @private\n */\n _tick: function _tick() {\n this._currentTickState = this._animateCursor(this, 1, this.cursorDuration, '_onTickComplete');\n },\n\n /**\n * @private\n */\n _animateCursor: function _animateCursor(obj, targetOpacity, duration, completeMethod) {\n var tickState;\n tickState = {\n isAborted: false,\n abort: function abort() {\n this.isAborted = true;\n }\n };\n obj.animate('_currentCursorOpacity', targetOpacity, {\n duration: duration,\n onComplete: function onComplete() {\n if (!tickState.isAborted) {\n obj[completeMethod]();\n }\n },\n onChange: function onChange() {\n // we do not want to animate a selection, only cursor\n if (obj.canvas && obj.selectionStart === obj.selectionEnd) {\n obj.renderCursorOrSelection();\n }\n },\n abort: function abort() {\n return tickState.isAborted;\n }\n });\n return tickState;\n },\n\n /**\n * @private\n */\n _onTickComplete: function _onTickComplete() {\n var _this = this;\n\n if (this._cursorTimeout1) {\n clearTimeout(this._cursorTimeout1);\n }\n\n this._cursorTimeout1 = setTimeout(function () {\n _this._currentTickCompleteState = _this._animateCursor(_this, 0, this.cursorDuration / 2, '_tick');\n }, 100);\n },\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor: function initDelayedCursor(restart) {\n var _this = this,\n delay = restart ? 0 : this.cursorDelay;\n\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this._cursorTimeout2 = setTimeout(function () {\n _this._tick();\n }, delay);\n },\n\n /**\n * Aborts cursor animation and clears all timeouts\n */\n abortCursorAnimation: function abortCursorAnimation() {\n var shouldClear = this._currentTickState || this._currentTickCompleteState,\n canvas = this.canvas;\n this._currentTickState && this._currentTickState.abort();\n this._currentTickCompleteState && this._currentTickCompleteState.abort();\n clearTimeout(this._cursorTimeout1);\n clearTimeout(this._cursorTimeout2);\n this._currentCursorOpacity = 0; // to clear just itext area we need to transform the context\n // it may not be worth it\n\n if (shouldClear && canvas) {\n canvas.clearContext(canvas.contextTop || canvas.contextContainer);\n }\n },\n\n /**\n * Selects entire text\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectAll: function selectAll() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n\n this._fireSelectionChanged();\n\n this._updateTextarea();\n\n return this;\n },\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText: function getSelectedText() {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n },\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft: function findWordBoundaryLeft(startFrom) {\n var offset = 0,\n index = startFrom - 1; // remove space before cursor first\n\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight: function findWordBoundaryRight(startFrom) {\n var offset = 0,\n index = startFrom; // remove space after cursor first\n\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft: function findLineBoundaryLeft(startFrom) {\n var offset = 0,\n index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight: function findLineBoundaryRight(startFrom) {\n var offset = 0,\n index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary: function searchWordBoundary(selectionStart, direction) {\n var text = this._text,\n index = this._reSpace.test(text[selectionStart]) ? selectionStart - 1 : selectionStart,\n _char = text[index],\n // wrong\n reNonWord = fabric.reNonWord;\n\n while (!reNonWord.test(_char) && index > 0 && index < text.length) {\n index += direction;\n _char = text[index];\n }\n\n if (reNonWord.test(_char)) {\n index += direction === 1 ? 0 : 1;\n }\n\n return index;\n },\n\n /**\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord: function selectWord(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.searchWordBoundary(selectionStart, -1),\n\n /* search backwards */\n newSelectionEnd = this.searchWordBoundary(selectionStart, 1);\n /* search forward */\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n\n this._fireSelectionChanged();\n\n this._updateTextarea();\n\n this.renderCursorOrSelection();\n },\n\n /**\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectLine: function selectLine(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n\n this._fireSelectionChanged();\n\n this._updateTextarea();\n\n return this;\n },\n\n /**\n * Enters editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n enterEditing: function enterEditing(e) {\n if (this.isEditing || !this.editable) {\n return;\n }\n\n if (this.canvas) {\n this.canvas.calcOffset();\n this.exitEditingOnOthers(this.canvas);\n }\n\n this.isEditing = true;\n this.initHiddenTextarea(e);\n this.hiddenTextarea.focus();\n this.hiddenTextarea.value = this.text;\n\n this._updateTextarea();\n\n this._saveEditingProps();\n\n this._setEditingProps();\n\n this._textBeforeEdit = this.text;\n\n this._tick();\n\n this.fire('editing:entered');\n\n this._fireSelectionChanged();\n\n if (!this.canvas) {\n return this;\n }\n\n this.canvas.fire('text:editing:entered', {\n target: this\n });\n this.initMouseMoveHandler();\n this.canvas.requestRenderAll();\n return this;\n },\n exitEditingOnOthers: function exitEditingOnOthers(canvas) {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function (obj) {\n obj.selected = false;\n\n if (obj.isEditing) {\n obj.exitEditing();\n }\n });\n }\n },\n\n /**\n * Initializes \"mousemove\" event handler\n */\n initMouseMoveHandler: function initMouseMoveHandler() {\n this.canvas.on('mouse:move', this.mouseMoveHandler);\n },\n\n /**\n * @private\n */\n mouseMoveHandler: function mouseMoveHandler(options) {\n if (!this.__isMousedown || !this.isEditing) {\n return;\n }\n\n var newSelectionStart = this.getSelectionStartFromPointer(options.e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n\n if ((newSelectionStart !== this.__selectionStartOnMouseDown || currentStart === currentEnd) && (currentStart === newSelectionStart || currentEnd === newSelectionStart)) {\n return;\n }\n\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n } else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n\n if (this.selectionStart !== currentStart || this.selectionEnd !== currentEnd) {\n this.restartCursorIfNeeded();\n\n this._fireSelectionChanged();\n\n this._updateTextarea();\n\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * @private\n */\n _setEditingProps: function _setEditingProps() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n },\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection: function fromStringToGraphemeSelection(start, end, text) {\n var smallerTextStart = text.slice(0, start),\n graphemeStart = fabric.util.string.graphemeSplit(smallerTextStart).length;\n\n if (start === end) {\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart\n };\n }\n\n var smallerTextEnd = text.slice(start, end),\n graphemeEnd = fabric.util.string.graphemeSplit(smallerTextEnd).length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd\n };\n },\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection: function fromGraphemeToStringSelection(start, end, _text) {\n var smallerTextStart = _text.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n\n if (start === end) {\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart\n };\n }\n\n var smallerTextEnd = _text.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd\n };\n },\n\n /**\n * @private\n */\n _updateTextarea: function _updateTextarea() {\n this.cursorOffsetCache = {};\n\n if (!this.hiddenTextarea) {\n return;\n }\n\n if (!this.inCompositionMode) {\n var newSelection = this.fromGraphemeToStringSelection(this.selectionStart, this.selectionEnd, this._text);\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateFromTextArea: function updateFromTextArea() {\n if (!this.hiddenTextarea) {\n return;\n }\n\n this.cursorOffsetCache = {};\n this.text = this.hiddenTextarea.value;\n\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n\n var newSelection = this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value);\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateTextareaPosition: function updateTextareaPosition() {\n if (this.selectionStart === this.selectionEnd) {\n var style = this._calcTextareaPosition();\n\n this.hiddenTextarea.style.left = style.left;\n this.hiddenTextarea.style.top = style.top;\n }\n },\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition: function _calcTextareaPosition() {\n if (!this.canvas) {\n return {\n x: 1,\n y: 1\n };\n }\n\n var desiredPosition = this.inCompositionMode ? this.compositionStart : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') * this.lineHeight,\n leftOffset = boundaries.leftOffset,\n m = this.calcTransformMatrix(),\n p = {\n x: boundaries.left + leftOffset,\n y: boundaries.top + boundaries.topOffset + charHeight\n },\n retinaScaling = this.canvas.getRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight,\n scaleX = upperCanvas.clientWidth / upperCanvasWidth,\n scaleY = upperCanvas.clientHeight / upperCanvasHeight;\n\n p = fabric.util.transformPoint(p, m);\n p = fabric.util.transformPoint(p, this.canvas.viewportTransform);\n p.x *= scaleX;\n p.y *= scaleY;\n\n if (p.x < 0) {\n p.x = 0;\n }\n\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n\n if (p.y < 0) {\n p.y = 0;\n }\n\n if (p.y > maxHeight) {\n p.y = maxHeight;\n } // add canvas offset on document\n\n\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n return {\n left: p.x + 'px',\n top: p.y + 'px',\n fontSize: charHeight + 'px',\n charHeight: charHeight\n };\n },\n\n /**\n * @private\n */\n _saveEditingProps: function _saveEditingProps() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor\n };\n },\n\n /**\n * @private\n */\n _restoreEditingProps: function _restoreEditingProps() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor = this._savedProps.defaultCursor;\n this.canvas.moveCursor = this._savedProps.moveCursor;\n }\n },\n\n /**\n * Exits from editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n exitEditing: function exitEditing() {\n var isTextChanged = this._textBeforeEdit !== this.text;\n var hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n this.selectionEnd = this.selectionStart;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n\n this._restoreEditingProps();\n\n this._currentCursorOpacity = 0;\n\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n\n this.fire('editing:exited');\n isTextChanged && this.fire('modified');\n\n if (this.canvas) {\n this.canvas.off('mouse:move', this.mouseMoveHandler);\n this.canvas.fire('text:editing:exited', {\n target: this\n });\n isTextChanged && this.canvas.fire('object:modified', {\n target: this\n });\n }\n\n return this;\n },\n\n /**\n * @private\n */\n _removeExtraneousStyles: function _removeExtraneousStyles() {\n for (var prop in this.styles) {\n if (!this._textLines[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo: function removeStyleFromTo(start, end) {\n var cursorStart = this.get2DCursorLocation(start, true),\n cursorEnd = this.get2DCursorLocation(end, true),\n lineStart = cursorStart.lineIndex,\n charStart = cursorStart.charIndex,\n lineEnd = cursorEnd.lineIndex,\n charEnd = cursorEnd.charIndex,\n i,\n styleObj;\n\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (i = charStart; i < this._unwrappedTextLines[lineStart].length; i++) {\n delete this.styles[lineStart][i];\n }\n } // step2 move the trailing of lineEnd to lineStart if needed\n\n\n if (this.styles[lineEnd]) {\n for (i = charEnd; i < this._unwrappedTextLines[lineEnd].length; i++) {\n styleObj = this.styles[lineEnd][i];\n\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = {});\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n } // step3 detects lines will be completely removed.\n\n\n for (i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n } // step4 shift remaining lines.\n\n\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n } else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n styleObj = this.styles[lineStart];\n\n var diff = charEnd - charStart,\n numericChar,\n _char;\n\n for (i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n\n for (_char in this.styles[lineStart]) {\n numericChar = parseInt(_char, 10);\n\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[_char];\n delete styleObj[_char];\n }\n }\n }\n }\n },\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles: function shiftLineStyles(lineIndex, offset) {\n // shift all line styles by offset upward or downward\n // do not clone deep. we need new array, not new style objects\n var clonedStyles = clone(this.styles);\n\n for (var line in this.styles) {\n var numericLine = parseInt(line, 10);\n\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n },\n restartCursorIfNeeded: function restartCursorIfNeeded() {\n if (!this._currentTickState || this._currentTickState.isAborted || !this._currentTickCompleteState || this._currentTickCompleteState.isAborted) {\n this.initDelayedCursor();\n }\n },\n\n /**\n * Inserts new style object\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject: function insertNewlineStyleObject(lineIndex, charIndex, qty, copiedStyle) {\n var currentCharStyle,\n newLineStyles = {},\n somethingAdded = false;\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n\n if (this.styles[lineIndex]) {\n currentCharStyle = this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1];\n } // we clone styles of all chars\n // after cursor onto the current line\n\n\n for (var index in this.styles[lineIndex]) {\n var numIndex = parseInt(index, 10);\n\n if (numIndex >= charIndex) {\n somethingAdded = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index]; // remove lines from the previous line since they're on a new line now\n\n delete this.styles[lineIndex][index];\n }\n }\n\n if (somethingAdded) {\n this.styles[lineIndex + qty] = newLineStyles;\n } else {\n delete this.styles[lineIndex + qty];\n } // for the other lines\n // we clone current char style onto the next (otherwise empty) line\n\n\n while (qty > 1) {\n qty--;\n\n if (copiedStyle && copiedStyle[qty]) {\n this.styles[lineIndex + qty] = {\n 0: clone(copiedStyle[qty])\n };\n } else if (currentCharStyle) {\n this.styles[lineIndex + qty] = {\n 0: clone(currentCharStyle)\n };\n } else {\n delete this.styles[lineIndex + qty];\n }\n }\n\n this._forceClearCache = true;\n },\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject: function insertCharStyleObject(lineIndex, charIndex, quantity, copiedStyle) {\n if (!this.styles) {\n this.styles = {};\n }\n\n var currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles ? clone(currentLineStyles) : {};\n quantity || (quantity = 1); // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n\n for (var index in currentLineStylesCloned) {\n var numericIndex = parseInt(index, 10);\n\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] = currentLineStylesCloned[numericIndex]; // only delete the style if there was nothing moved there\n\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n\n this._forceClearCache = true;\n\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n\n this.styles[lineIndex][charIndex + quantity] = clone(copiedStyle[quantity]);\n }\n\n return;\n }\n\n if (!currentLineStyles) {\n return;\n }\n\n var newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = clone(newStyle);\n }\n },\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock: function insertNewStyleBlock(insertedText, start, copiedStyle) {\n var cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0],\n linesLength = 0;\n\n for (var i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n } else {\n addedLines[linesLength]++;\n }\n }\n\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addedLines[0], copiedStyle);\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n\n linesLength && this.insertNewlineStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex + addedLines[0], linesLength);\n\n for (var i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n } else if (copiedStyle) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n } // we use i outside the loop to get it like linesLength\n\n\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n }\n },\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift: function setSelectionStartEndWithShift(start, end, newSelection) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = 'left';\n } else if (this._selectionDirection === 'right') {\n this._selectionDirection = 'left';\n this.selectionEnd = start;\n }\n\n this.selectionStart = newSelection;\n } else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === 'right') {\n this.selectionEnd = newSelection;\n } else {\n this.selectionStart = newSelection;\n }\n } else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = 'right';\n } else if (this._selectionDirection === 'left') {\n this._selectionDirection = 'right';\n this.selectionStart = end;\n }\n\n this.selectionEnd = newSelection;\n }\n },\n setSelectionInBoundaries: function setSelectionInBoundaries() {\n var length = this.text.length;\n\n if (this.selectionStart > length) {\n this.selectionStart = length;\n } else if (this.selectionStart < 0) {\n this.selectionStart = 0;\n }\n\n if (this.selectionEnd > length) {\n this.selectionEnd = length;\n } else if (this.selectionEnd < 0) {\n this.selectionEnd = 0;\n }\n }\n });\n})();\n\nfabric.util.object.extend(fabric.IText.prototype,\n/** @lends fabric.IText.prototype */\n{\n /**\n * Initializes \"dbclick\" event handler\n */\n initDoubleClickSimulation: function initDoubleClickSimulation() {\n // for double click\n this.__lastClickTime = +new Date(); // for triple click\n\n this.__lastLastClickTime = +new Date();\n this.__lastPointer = {};\n this.on('mousedown', this.onMouseDown);\n },\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown: function onMouseDown(options) {\n if (!this.canvas) {\n return;\n }\n\n this.__newClickTime = +new Date();\n var newPointer = options.pointer;\n\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n\n this._stopEvent(options.e);\n }\n\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastIsEditing = this.isEditing;\n this.__lastSelected = this.selected;\n },\n isTripleClick: function isTripleClick(newPointer) {\n return this.__newClickTime - this.__lastClickTime < 500 && this.__lastClickTime - this.__lastLastClickTime < 500 && this.__lastPointer.x === newPointer.x && this.__lastPointer.y === newPointer.y;\n },\n\n /**\n * @private\n */\n _stopEvent: function _stopEvent(e) {\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n },\n\n /**\n * Initializes event handlers related to cursor or selection\n */\n initCursorSelectionHandlers: function initCursorSelectionHandlers() {\n this.initMousedownHandler();\n this.initMouseupHandler();\n this.initClicks();\n },\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler: function doubleClickHandler(options) {\n if (!this.isEditing) {\n return;\n }\n\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler: function tripleClickHandler(options) {\n if (!this.isEditing) {\n return;\n }\n\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Initializes double and triple click event handlers\n */\n initClicks: function initClicks() {\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n },\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n */\n _mouseDownHandler: function _mouseDownHandler(options) {\n if (!this.canvas || !this.editable || options.e.button && options.e.button !== 1) {\n return;\n }\n\n this.__isMousedown = true;\n\n if (this.selected) {\n this.setCursorByClick(options.e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore: function _mouseDownHandlerBefore(options) {\n if (!this.canvas || !this.editable || options.e.button && options.e.button !== 1) {\n return;\n } // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n\n\n this.selected = this === this.canvas._activeObject;\n },\n\n /**\n * Initializes \"mousedown\" event handler\n */\n initMousedownHandler: function initMousedownHandler() {\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n },\n\n /**\n * Initializes \"mouseup\" event handler\n */\n initMouseupHandler: function initMouseupHandler() {\n this.on('mouseup', this.mouseUpHandler);\n },\n\n /**\n * standard hander for mouse up, overridable\n * @private\n */\n mouseUpHandler: function mouseUpHandler(options) {\n this.__isMousedown = false;\n\n if (!this.editable || this.group || options.transform && options.transform.actionPerformed || options.e.button && options.e.button !== 1) {\n return;\n }\n\n if (this.canvas) {\n var currentActive = this.canvas._activeObject;\n\n if (currentActive && currentActive !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n\n if (this.__lastSelected && !this.__corner) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(options.e);\n\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n } else {\n this.renderCursorOrSelection();\n }\n } else {\n this.selected = true;\n }\n },\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {Event} e Event object\n */\n setCursorByClick: function setCursorByClick(e) {\n var newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart,\n end = this.selectionEnd;\n\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n } else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n\n if (this.isEditing) {\n this._fireSelectionChanged();\n\n this._updateTextarea();\n }\n },\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {Event} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer: function getSelectionStartFromPointer(e) {\n var mouseOffset = this.getLocalPointer(e),\n prevWidth = 0,\n width = 0,\n height = 0,\n charIndex = 0,\n lineIndex = 0,\n lineLeftOffset,\n line;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i) * this.scaleY;\n lineIndex = i;\n\n if (i > 0) {\n charIndex += this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n } else {\n break;\n }\n }\n\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n width = lineLeftOffset * this.scaleX;\n line = this._textLines[lineIndex];\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n prevWidth = width; // i removed something about flipX here, check.\n\n width += this.__charBounds[lineIndex][j].kernedWidth * this.scaleX;\n\n if (width <= mouseOffset.x) {\n charIndex++;\n } else {\n break;\n }\n }\n\n return this._getNewSelectionStartFromOffset(mouseOffset, prevWidth, width, charIndex, jlen);\n },\n\n /**\n * @private\n */\n _getNewSelectionStartFromOffset: function _getNewSelectionStartFromOffset(mouseOffset, prevWidth, width, index, jlen) {\n // we need Math.abs because when width is after the last char, the offset is given as 1, while is 0\n var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth,\n distanceBtwNextCharAndCursor = width - mouseOffset.x,\n offset = distanceBtwNextCharAndCursor > distanceBtwLastCharAndCursor || distanceBtwNextCharAndCursor < 0 ? 0 : 1,\n newSelectionStart = index + offset; // if object is horizontally flipped, mirror cursor location from the end\n\n if (this.flipX) {\n newSelectionStart = jlen - newSelectionStart;\n }\n\n if (newSelectionStart > this._text.length) {\n newSelectionStart = this._text.length;\n }\n\n return newSelectionStart;\n }\n});\nfabric.util.object.extend(fabric.IText.prototype,\n/** @lends fabric.IText.prototype */\n{\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea: function initHiddenTextarea() {\n this.hiddenTextarea = fabric.document.createElement('textarea');\n this.hiddenTextarea.setAttribute('autocapitalize', 'off');\n this.hiddenTextarea.setAttribute('autocorrect', 'off');\n this.hiddenTextarea.setAttribute('autocomplete', 'off');\n this.hiddenTextarea.setAttribute('spellcheck', 'false');\n this.hiddenTextarea.setAttribute('data-fabric-hiddentextarea', '');\n this.hiddenTextarea.setAttribute('wrap', 'off');\n\n var style = this._calcTextareaPosition(); // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n\n\n this.hiddenTextarea.style.cssText = 'position: absolute; top: ' + style.top + '; left: ' + style.left + '; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px;' + ' paddingーtop: ' + style.fontSize + ';';\n fabric.document.body.appendChild(this.hiddenTextarea);\n fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'keyup', this.onKeyUp.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'input', this.onInput.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'copy', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'cut', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'paste', this.paste.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionstart', this.onCompositionStart.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionupdate', this.onCompositionUpdate.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionend', this.onCompositionEnd.bind(this));\n\n if (!this._clickHandlerInitialized && this.canvas) {\n fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this));\n this._clickHandlerInitialized = true;\n }\n },\n\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behaviour for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the fabric.Itext or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = fabric.util.object.clone(this.keysMap);\n * The function must be in fabric.Itext.prototype.myFunction And will receive event as args[0]\n */\n keysMap: {\n 9: 'exitEditing',\n 27: 'exitEditing',\n 33: 'moveCursorUp',\n 34: 'moveCursorDown',\n 35: 'moveCursorRight',\n 36: 'moveCursorLeft',\n 37: 'moveCursorLeft',\n 38: 'moveCursorUp',\n 39: 'moveCursorRight',\n 40: 'moveCursorDown'\n },\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n ctrlKeysMapUp: {\n 67: 'copy',\n 88: 'cut'\n },\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n ctrlKeysMapDown: {\n 65: 'selectAll'\n },\n onClick: function onClick() {\n // No need to trigger click event here, focus is enough to have the keyboard appear on Android\n this.hiddenTextarea && this.hiddenTextarea.focus();\n },\n\n /**\n * Handles keyup event\n * @param {Event} e Event object\n */\n onKeyDown: function onKeyDown(e) {\n if (!this.isEditing || this.inCompositionMode) {\n return;\n }\n\n if (e.keyCode in this.keysMap) {\n this[this.keysMap[e.keyCode]](e);\n } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n } else {\n return;\n }\n\n e.stopImmediatePropagation();\n e.preventDefault();\n\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.clearContextTop();\n this.renderCursorOrSelection();\n } else {\n this.canvas && this.canvas.requestRenderAll();\n }\n },\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {Event} e Event object\n */\n onKeyUp: function onKeyUp(e) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n\n if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n } else {\n return;\n }\n\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n },\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput: function onInput(e) {\n var fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n\n if (!this.isEditing) {\n return;\n } // decisions about style changes.\n\n\n var nextText = this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n removedText,\n insertedText,\n charDiff = nextCharCount - charCount;\n\n if (this.hiddenTextarea.value === '') {\n this.styles = {};\n this.updateFromTextArea();\n this.fire('changed');\n\n if (this.canvas) {\n this.canvas.fire('text:changed', {\n target: this\n });\n this.canvas.requestRenderAll();\n }\n\n return;\n }\n\n var textareaSelection = this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value);\n var backDelete = this.selectionStart > textareaSelection.selectionStart;\n\n if (this.selectionStart !== this.selectionEnd) {\n removedText = this._text.slice(this.selectionStart, this.selectionEnd);\n charDiff += this.selectionEnd - this.selectionStart;\n } else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(this.selectionEnd + charDiff, this.selectionEnd);\n } else {\n removedText = this._text.slice(this.selectionStart, this.selectionStart - charDiff);\n }\n }\n\n insertedText = nextText.slice(textareaSelection.selectionEnd - charDiff, textareaSelection.selectionEnd);\n\n if (removedText && removedText.length) {\n if (this.selectionStart !== this.selectionEnd) {\n this.removeStyleFromTo(this.selectionStart, this.selectionEnd);\n } else if (backDelete) {\n // detect differencies between forwardDelete and backDelete\n this.removeStyleFromTo(this.selectionEnd - removedText.length, this.selectionEnd);\n } else {\n this.removeStyleFromTo(this.selectionEnd, this.selectionEnd + removedText.length);\n }\n }\n\n if (insertedText.length) {\n if (fromPaste && insertedText.join('') === fabric.copiedText && !fabric.disableStyleCopyPaste) {\n this.insertNewStyleBlock(insertedText, this.selectionStart, fabric.copiedTextStyle);\n } else {\n this.insertNewStyleBlock(insertedText, this.selectionStart);\n }\n }\n\n this.updateFromTextArea();\n this.fire('changed');\n\n if (this.canvas) {\n this.canvas.fire('text:changed', {\n target: this\n });\n this.canvas.requestRenderAll();\n }\n },\n\n /**\n * Composition start\n */\n onCompositionStart: function onCompositionStart() {\n this.inCompositionMode = true;\n },\n\n /**\n * Composition end\n */\n onCompositionEnd: function onCompositionEnd() {\n this.inCompositionMode = false;\n },\n // /**\n // * Composition update\n // */\n onCompositionUpdate: function onCompositionUpdate(e) {\n this.compositionStart = e.target.selectionStart;\n this.compositionEnd = e.target.selectionEnd;\n this.updateTextareaPosition();\n },\n\n /**\n * Copies selected text\n * @param {Event} e Event object\n */\n copy: function copy() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n\n fabric.copiedText = this.getSelectedText();\n\n if (!fabric.disableStyleCopyPaste) {\n fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true);\n } else {\n fabric.copiedTextStyle = null;\n }\n\n this._copyDone = true;\n },\n\n /**\n * Pastes text\n * @param {Event} e Event object\n */\n paste: function paste() {\n this.fromPaste = true;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @return {Object} Clipboard data object\n */\n _getClipboardData: function _getClipboardData(e) {\n return e && e.clipboardData || fabric.window.clipboardData;\n },\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor: function _getWidthBeforeCursor(lineIndex, charIndex) {\n var widthBeforeCursor = this._getLineLeftOffset(lineIndex),\n bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n\n return widthBeforeCursor;\n },\n\n /**\n * Gets start offset of a selection\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset: function getDownCursorOffset(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex; // if on last line, down cursor goes to end of line\n\n\n if (lineIndex === this._textLines.length - 1 || e.metaKey || e.keyCode === 34) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n\n return textAfterCursor.length + indexOnOtherLine + 1 + this.missingNewlineOffset(lineIndex);\n },\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset: function _getSelectionForOffset(e, isRight) {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n } else {\n return this.selectionStart;\n }\n },\n\n /**\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset: function getUpCursorOffset(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1); // return a negative offset\n\n\n return -this._textLines[lineIndex - 1].length + indexOnOtherLine - textBeforeCursor.length + (1 - missingNewlineOffset);\n },\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine: function _getIndexOnLine(lineIndex, width) {\n var line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex),\n widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0,\n charWidth,\n foundMatch;\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n var leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : j - 1;\n break;\n }\n } // reached end\n\n\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n },\n\n /**\n * Moves cursor down\n * @param {Event} e Event object\n */\n moveCursorDown: function moveCursorDown(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n\n this._moveCursorUpOrDown('Down', e);\n },\n\n /**\n * Moves cursor up\n * @param {Event} e Event object\n */\n moveCursorUp: function moveCursorUp(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n\n this._moveCursorUpOrDown('Up', e);\n },\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {Event} e Event object\n */\n _moveCursorUpOrDown: function _moveCursorUpOrDown(direction, e) {\n // getUpCursorOffset\n // getDownCursorOffset\n var action = 'get' + direction + 'CursorOffset',\n offset = this[action](e, this._selectionDirection === 'right');\n\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n } else {\n this.moveCursorWithoutShift(offset);\n }\n\n if (offset !== 0) {\n this.setSelectionInBoundaries();\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this.initDelayedCursor();\n\n this._fireSelectionChanged();\n\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift: function moveCursorWithShift(offset) {\n var newSelection = this._selectionDirection === 'left' ? this.selectionStart + offset : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(this.selectionStart, this.selectionEnd, newSelection);\n return offset !== 0;\n },\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift: function moveCursorWithoutShift(offset) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n\n return offset !== 0;\n },\n\n /**\n * Moves cursor left\n * @param {Event} e Event object\n */\n moveCursorLeft: function moveCursorLeft(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n\n this._moveCursorLeftOrRight('Left', e);\n },\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n */\n _move: function _move(e, prop, direction) {\n var newValue;\n\n if (e.altKey) {\n newValue = this['findWordBoundary' + direction](this[prop]);\n } else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36) {\n newValue = this['findLineBoundary' + direction](this[prop]);\n } else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n\n if (_typeof(newValue) !== undefined && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n },\n\n /**\n * @private\n */\n _moveLeft: function _moveLeft(e, prop) {\n return this._move(e, prop, 'Left');\n },\n\n /**\n * @private\n */\n _moveRight: function _moveRight(e, prop) {\n return this._move(e, prop, 'Right');\n },\n\n /**\n * Moves cursor left without keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithoutShift: function moveCursorLeftWithoutShift(e) {\n var change = true;\n this._selectionDirection = 'left'; // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n\n if (this.selectionEnd === this.selectionStart && this.selectionStart !== 0) {\n change = this._moveLeft(e, 'selectionStart');\n }\n\n this.selectionEnd = this.selectionStart;\n return change;\n },\n\n /**\n * Moves cursor left while keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithShift: function moveCursorLeftWithShift(e) {\n if (this._selectionDirection === 'right' && this.selectionStart !== this.selectionEnd) {\n return this._moveLeft(e, 'selectionEnd');\n } else if (this.selectionStart !== 0) {\n this._selectionDirection = 'left';\n return this._moveLeft(e, 'selectionStart');\n }\n },\n\n /**\n * Moves cursor right\n * @param {Event} e Event object\n */\n moveCursorRight: function moveCursorRight(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n\n this._moveCursorLeftOrRight('Right', e);\n },\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {Event} e Event object\n */\n _moveCursorLeftOrRight: function _moveCursorLeftOrRight(direction, e) {\n var actionName = 'moveCursor' + direction + 'With';\n this._currentCursorOpacity = 1;\n\n if (e.shiftKey) {\n actionName += 'Shift';\n } else {\n actionName += 'outShift';\n }\n\n if (this[actionName](e)) {\n this.abortCursorAnimation();\n this.initDelayedCursor();\n\n this._fireSelectionChanged();\n\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor right while keeping selection\n * @param {Event} e\n */\n moveCursorRightWithShift: function moveCursorRightWithShift(e) {\n if (this._selectionDirection === 'left' && this.selectionStart !== this.selectionEnd) {\n return this._moveRight(e, 'selectionStart');\n } else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = 'right';\n return this._moveRight(e, 'selectionEnd');\n }\n },\n\n /**\n * Moves cursor right without keeping selection\n * @param {Event} e Event object\n */\n moveCursorRightWithoutShift: function moveCursorRightWithoutShift(e) {\n var changed = true;\n this._selectionDirection = 'right';\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionStart = this.selectionEnd;\n }\n\n return changed;\n },\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars: function removeChars(start, end) {\n if (typeof end === 'undefined') {\n end = start + 1;\n }\n\n this.removeStyleFromTo(start, end);\n\n this._text.splice(start, end - start);\n\n this.text = this._text.join('');\n this.set('dirty', true);\n\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n\n this._removeExtraneousStyles();\n },\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars: function insertChars(text, style, start, end) {\n if (typeof end === 'undefined') {\n end = start;\n }\n\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n\n var graphemes = fabric.util.string.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [].concat(this._text.slice(0, start), graphemes, this._text.slice(end));\n this.text = this._text.join('');\n this.set('dirty', true);\n\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n\n this._removeExtraneousStyles();\n }\n});\n/* _TO_SVG_START_ */\n\n(function () {\n var toFixed = fabric.util.toFixed,\n multipleSpacesRegex = / +/g;\n fabric.util.object.extend(fabric.Text.prototype,\n /** @lends fabric.Text.prototype */\n {\n /**\n * Returns SVG representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function _toSVG() {\n var offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n\n return this._wrapSVGTextAndBg(textAndBg);\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function toSVG(reviver) {\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver: reviver,\n noStyle: true,\n withShadow: true\n });\n },\n\n /**\n * @private\n */\n _getSVGLeftTopOffsets: function _getSVGLeftTopOffsets() {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0)\n };\n },\n\n /**\n * @private\n */\n _wrapSVGTextAndBg: function _wrapSVGTextAndBg(textAndBg) {\n var noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [textAndBg.textBgRects.join(''), '\\t\\t', textAndBg.textSpans.join(''), '\\n'];\n },\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n _getSVGTextAndBg: function _getSVGTextAndBg(textTopOffset, textLeftOffset) {\n var textSpans = [],\n textBgRects = [],\n height = textTopOffset,\n lineOffset; // bounding-box background\n\n this._setSVGBg(textBgRects); // text and text-background\n\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(textBgRects, i, textLeftOffset + lineOffset, height);\n }\n\n this._setSVGTextLineText(textSpans, i, textLeftOffset + lineOffset, height);\n\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans: textSpans,\n textBgRects: textBgRects\n };\n },\n\n /**\n * @private\n */\n _createTextCharSpan: function _createTextCharSpan(_char, styleDecl, left, top) {\n var shouldUseWhitespace = _char !== _char.trim() || _char.match(multipleSpacesRegex),\n styleProps = this.getSvgSpanStyles(styleDecl, shouldUseWhitespace),\n fillStyles = styleProps ? 'style=\"' + styleProps + '\"' : '',\n dy = styleDecl.deltaY,\n dySpan = '',\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n if (dy) {\n dySpan = ' dy=\"' + toFixed(dy, NUM_FRACTION_DIGITS) + '\" ';\n }\n\n return ['', fabric.util.string.escapeXml(_char), ''].join('');\n },\n _setSVGTextLineText: function _setSVGTextLineText(textSpans, lineIndex, textLeftOffset, textTopOffset) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n style,\n boxWidth = 0,\n line = this._textLines[lineIndex],\n timeToRender;\n textTopOffset += lineHeight * (1 - this._fontSizeFraction) / this.lineHeight;\n\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = this._hasStyleChangedForSvg(actualStyle, nextStyle);\n }\n\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i) || {};\n textSpans.push(this._createTextCharSpan(charsToRender, style, textLeftOffset, textTopOffset));\n charsToRender = '';\n actualStyle = nextStyle;\n textLeftOffset += boxWidth;\n boxWidth = 0;\n }\n }\n },\n _pushTextBgRect: function _pushTextBgRect(textBgRects, color, left, top, width, height) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push('\\t\\t\\n');\n },\n _setSVGTextLineBg: function _setSVGTextLineBg(textBgRects, i, leftOffset, textTopOffset) {\n var line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight,\n boxWidth = 0,\n boxStart = 0,\n charBox,\n currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n\n if (currentColor !== lastColor) {\n lastColor && this._pushTextBgRect(textBgRects, lastColor, leftOffset + boxStart, textTopOffset, boxWidth, heightOfLine);\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n\n currentColor && this._pushTextBgRect(textBgRects, currentColor, leftOffset + boxStart, textTopOffset, boxWidth, heightOfLine);\n },\n\n /**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n *\n * @private\n * @param {*} value\n * @return {String}\n */\n _getFillAttributes: function _getFillAttributes(value) {\n var fillColor = value && typeof value === 'string' ? new fabric.Color(value) : '';\n\n if (!fillColor || !fillColor.getSource() || fillColor.getAlpha() === 1) {\n return 'fill=\"' + value + '\"';\n }\n\n return 'opacity=\"' + fillColor.getAlpha() + '\" fill=\"' + fillColor.setAlpha(1).toRgb() + '\"';\n },\n\n /**\n * @private\n */\n _getSVGLineTopOffset: function _getSVGLineTopOffset(lineIndex) {\n var lineTopOffset = 0,\n lastHeight = 0;\n\n for (var j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n\n lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset: (this._fontSizeMult - this._fontSizeFraction) * lastHeight / (this.lineHeight * this._fontSizeMult)\n };\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function getSvgStyles(skipShadow) {\n var svgStyle = fabric.Object.prototype.getSvgStyles.call(this, skipShadow);\n return svgStyle + ' white-space: pre;';\n }\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function (global) {\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {});\n /**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n * @class fabric.Textbox\n * @extends fabric.IText\n * @mixes fabric.Observable\n * @return {fabric.Textbox} thisArg\n * @see {@link fabric.Textbox#initialize} for constructor definition\n */\n\n fabric.Textbox = fabric.util.createClass(fabric.IText, fabric.Observable, {\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'textbox',\n\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n minWidth: 20,\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n dynamicMinWidth: 2,\n\n /**\n * Cached array of text wrapping.\n * @type Array\n */\n __cachedLines: null,\n\n /**\n * Override standard Object class values\n */\n lockScalingFlip: true,\n\n /**\n * Override standard Object class values\n * Textbox needs this on false\n */\n noScaleCache: false,\n\n /**\n * Properties which when set cause object to change dimensions\n * @type Object\n * @private\n */\n _dimensionAffectingProps: fabric.Text.prototype._dimensionAffectingProps.concat('width'),\n\n /**\n * Use this regular expression to split strings in breakable lines\n * @private\n */\n _wordJoiners: /[ \\t\\r]/,\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japaense\n * @type Boolean\n * @since 2.6.0\n */\n splitByGrapheme: false,\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions: function initDimensions() {\n if (this.__skipDimension) {\n return;\n }\n\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n\n this._clearCache(); // clear dynamicMinWidth as it will be different after we re-wrap line\n\n\n this.dynamicMinWidth = 0; // wrap lines\n\n this._styleMap = this._generateStyleMap(this._splitText()); // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n } // clear cache and re-calculate height\n\n\n this.height = this.calcTextHeight();\n this.saveState({\n propertySet: '_dimensionAffectingProps'\n });\n },\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap: function _generateStyleMap(textInfo) {\n var realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0,\n map = {};\n\n for (var i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n } else if (!this.splitByGrapheme && this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) && i > 0) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = {\n line: realLineCount,\n offset: realLineCharCount\n };\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n },\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas: function styleHas(property, lineIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n\n if (map) {\n lineIndex = map.line;\n }\n }\n\n return fabric.Text.prototype.styleHas.call(this, property, lineIndex);\n },\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function isEmptyStyles(lineIndex) {\n if (!this.styles) {\n return true;\n }\n\n var offset = 0,\n nextLineIndex = lineIndex + 1,\n nextOffset,\n obj,\n shouldLimit = false,\n map = this._styleMap[lineIndex],\n mapNextLine = this._styleMap[lineIndex + 1];\n\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n\n obj = typeof lineIndex === 'undefined' ? this.styles : {\n line: this.styles[lineIndex]\n };\n\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n\n return true;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _getStyleDeclaration: function _getStyleDeclaration(lineIndex, charIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n\n if (!map) {\n return null;\n }\n\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n\n return this.callSuper('_getStyleDeclaration', lineIndex, charIndex);\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function _setStyleDeclaration(lineIndex, charIndex, style) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function _deleteStyleDeclaration(lineIndex, charIndex) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function _getLineStyle(lineIndex) {\n var map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n _setLineStyle: function _setLineStyle(lineIndex) {\n var map = this._styleMap[lineIndex];\n this.styles[map.line] = {};\n },\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText: function _wrapText(lines, desiredWidth) {\n var wrapped = [],\n i;\n this.isWrapping = true;\n\n for (i = 0; i < lines.length; i++) {\n wrapped = wrapped.concat(this._wrapLine(lines[i], i, desiredWidth));\n }\n\n this.isWrapping = false;\n return wrapped;\n },\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * it gets called when charBounds are not available yet.\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n * @private\n */\n _measureWord: function _measureWord(word, lineIndex, charOffset) {\n var width = 0,\n prevGrapheme,\n skipLeft = true;\n charOffset = charOffset || 0;\n\n for (var i = 0, len = word.length; i < len; i++) {\n var box = this._getGraphemeBox(word[i], lineIndex, i + charOffset, prevGrapheme, skipLeft);\n\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n\n return width;\n },\n\n /**\n * Wraps a line of text using the width of the Textbox and a context.\n * @param {Array} line The grapheme array that represent the line\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine: function _wrapLine(_line, lineIndex, desiredWidth, reservedSpace) {\n var lineWidth = 0,\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n line = [],\n // spaces in different languges?\n words = splitByGrapheme ? fabric.util.string.graphemeSplit(_line) : _line.split(this._wordJoiners),\n word = '',\n offset = 0,\n infix = splitByGrapheme ? '' : ' ',\n wordWidth = 0,\n infixWidth = 0,\n largestWordWidth = 0,\n lineJustStarted = true,\n additionalSpace = splitByGrapheme ? 0 : this._getWidthOfCharSpacing(),\n reservedSpace = reservedSpace || 0; // fix a difference between split and graphemeSplit\n\n if (words.length === 0) {\n words.push([]);\n }\n\n desiredWidth -= reservedSpace;\n\n for (var i = 0; i < words.length; i++) {\n // if using splitByGrapheme words are already in graphemes.\n word = splitByGrapheme ? words[i] : fabric.util.string.graphemeSplit(words[i]);\n wordWidth = this._measureWord(word, lineIndex, offset);\n offset += word.length;\n lineWidth += infixWidth + wordWidth - additionalSpace;\n\n if (lineWidth >= desiredWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n } else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n\n line = line.concat(word);\n infixWidth = this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false; // keep track of largest word\n\n if (wordWidth > largestWordWidth) {\n largestWordWidth = wordWidth;\n }\n }\n\n i && graphemeLines.push(line);\n\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n\n return graphemeLines;\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping: function isEndOfWrapping(lineIndex) {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n\n return false;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * @return Number\n */\n missingNewlineOffset: function missingNewlineOffset(lineIndex) {\n if (this.splitByGrapheme) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n\n return 1;\n },\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines: function _splitTextIntoLines(text) {\n var newText = fabric.Text.prototype._splitTextIntoLines.call(this, text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n\n for (var i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n },\n getMinWidth: function getMinWidth() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n },\n _removeExtraneousStyles: function _removeExtraneousStyles() {\n var linesToKeep = {};\n\n for (var prop in this._styleMap) {\n if (this._textLines[prop]) {\n linesToKeep[this._styleMap[prop].line] = 1;\n }\n }\n\n for (var prop in this.styles) {\n if (!linesToKeep[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function toObject(propertiesToInclude) {\n return this.callSuper('toObject', ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude));\n }\n });\n /**\n * Returns fabric.Textbox instance from an object representation\n * @static\n * @memberOf fabric.Textbox\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Textbox instance is created\n */\n\n fabric.Textbox.fromObject = function (object, callback) {\n return fabric.Object._fromObject('Textbox', object, callback, 'text');\n };\n})(typeof exports !== 'undefined' ? exports : this);","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 } from 'uuid';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nvar CONSTANT = {\n GLOBAL: {\n HIDE: '__react_tooltip_hide_event',\n REBUILD: '__react_tooltip_rebuild_event',\n SHOW: '__react_tooltip_show_event'\n }\n};\n/**\n * Static methods for react-tooltip\n */\n\nvar dispatchGlobalEvent = function dispatchGlobalEvent(eventName, opts) {\n // Compatible with IE\n // @see http://stackoverflow.com/questions/26596123/internet-explorer-9-10-11-event-constructor-doesnt-work\n // @see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n var event;\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(eventName, {\n detail: opts\n });\n } else {\n event = document.createEvent('Event');\n event.initEvent(eventName, false, true, opts);\n }\n\n window.dispatchEvent(event);\n};\n\nfunction staticMethods(target) {\n /**\n * Hide all tooltip\n * @trigger ReactTooltip.hide()\n */\n target.hide = function (target) {\n dispatchGlobalEvent(CONSTANT.GLOBAL.HIDE, {\n target: target\n });\n };\n /**\n * Rebuild all tooltip\n * @trigger ReactTooltip.rebuild()\n */\n\n\n target.rebuild = function () {\n dispatchGlobalEvent(CONSTANT.GLOBAL.REBUILD);\n };\n /**\n * Show specific tooltip\n * @trigger ReactTooltip.show()\n */\n\n\n target.show = function (target) {\n dispatchGlobalEvent(CONSTANT.GLOBAL.SHOW, {\n target: target\n });\n };\n\n target.prototype.globalRebuild = function () {\n if (this.mount) {\n this.unbindListener();\n this.bindListener();\n }\n };\n\n target.prototype.globalShow = function (event) {\n if (this.mount) {\n var hasTarget = event && event.detail && event.detail.target && true || false; // Create a fake event, specific show will limit the type to `solid`\n // only `float` type cares e.clientX e.clientY\n\n this.showTooltip({\n currentTarget: hasTarget && event.detail.target\n }, true);\n }\n };\n\n target.prototype.globalHide = function (event) {\n if (this.mount) {\n var hasTarget = event && event.detail && event.detail.target && true || false;\n this.hideTooltip({\n currentTarget: hasTarget && event.detail.target\n }, hasTarget);\n }\n };\n}\n/**\n * Events that should be bound to the window\n */\n\n\nfunction windowListener(target) {\n target.prototype.bindWindowEvents = function (resizeHide) {\n // ReactTooltip.hide\n window.removeEventListener(CONSTANT.GLOBAL.HIDE, this.globalHide);\n window.addEventListener(CONSTANT.GLOBAL.HIDE, this.globalHide, false); // ReactTooltip.rebuild\n\n window.removeEventListener(CONSTANT.GLOBAL.REBUILD, this.globalRebuild);\n window.addEventListener(CONSTANT.GLOBAL.REBUILD, this.globalRebuild, false); // ReactTooltip.show\n\n window.removeEventListener(CONSTANT.GLOBAL.SHOW, this.globalShow);\n window.addEventListener(CONSTANT.GLOBAL.SHOW, this.globalShow, false); // Resize\n\n if (resizeHide) {\n window.removeEventListener('resize', this.onWindowResize);\n window.addEventListener('resize', this.onWindowResize, false);\n }\n };\n\n target.prototype.unbindWindowEvents = function () {\n window.removeEventListener(CONSTANT.GLOBAL.HIDE, this.globalHide);\n window.removeEventListener(CONSTANT.GLOBAL.REBUILD, this.globalRebuild);\n window.removeEventListener(CONSTANT.GLOBAL.SHOW, this.globalShow);\n window.removeEventListener('resize', this.onWindowResize);\n };\n /**\n * invoked by resize event of window\n */\n\n\n target.prototype.onWindowResize = function () {\n if (!this.mount) return;\n this.hideTooltip();\n };\n}\n/**\n * Custom events to control showing and hiding of tooltip\n *\n * @attributes\n * - `event` {String}\n * - `eventOff` {String}\n */\n\n\nvar checkStatus = function checkStatus(dataEventOff, e) {\n var show = this.state.show;\n var id = this.props.id;\n var isCapture = this.isCapture(e.currentTarget);\n var currentItem = e.currentTarget.getAttribute('currentItem');\n if (!isCapture) e.stopPropagation();\n\n if (show && currentItem === 'true') {\n if (!dataEventOff) this.hideTooltip(e);\n } else {\n e.currentTarget.setAttribute('currentItem', 'true');\n setUntargetItems(e.currentTarget, this.getTargetArray(id));\n this.showTooltip(e);\n }\n};\n\nvar setUntargetItems = function setUntargetItems(currentTarget, targetArray) {\n for (var i = 0; i < targetArray.length; i++) {\n if (currentTarget !== targetArray[i]) {\n targetArray[i].setAttribute('currentItem', 'false');\n } else {\n targetArray[i].setAttribute('currentItem', 'true');\n }\n }\n};\n\nvar customListeners = {\n id: '9b69f92e-d3fe-498b-b1b4-c5e63a51b0cf',\n set: function set(target, event, listener) {\n if (this.id in target) {\n var map = target[this.id];\n map[event] = listener;\n } else {\n // this is workaround for WeakMap, which is not supported in older browsers, such as IE\n Object.defineProperty(target, this.id, {\n configurable: true,\n value: _defineProperty({}, event, listener)\n });\n }\n },\n get: function get(target, event) {\n var map = target[this.id];\n\n if (map !== undefined) {\n return map[event];\n }\n }\n};\n\nfunction customEvent(target) {\n target.prototype.isCustomEvent = function (ele) {\n var event = this.state.event;\n return event || !!ele.getAttribute('data-event');\n };\n /* Bind listener for custom event */\n\n\n target.prototype.customBindListener = function (ele) {\n var _this = this;\n\n var _this$state = this.state,\n event = _this$state.event,\n eventOff = _this$state.eventOff;\n var dataEvent = ele.getAttribute('data-event') || event;\n var dataEventOff = ele.getAttribute('data-event-off') || eventOff;\n dataEvent.split(' ').forEach(function (event) {\n ele.removeEventListener(event, customListeners.get(ele, event));\n var customListener = checkStatus.bind(_this, dataEventOff);\n customListeners.set(ele, event, customListener);\n ele.addEventListener(event, customListener, false);\n });\n\n if (dataEventOff) {\n dataEventOff.split(' ').forEach(function (event) {\n ele.removeEventListener(event, _this.hideTooltip);\n ele.addEventListener(event, _this.hideTooltip, false);\n });\n }\n };\n /* Unbind listener for custom event */\n\n\n target.prototype.customUnbindListener = function (ele) {\n var _this$state2 = this.state,\n event = _this$state2.event,\n eventOff = _this$state2.eventOff;\n var dataEvent = event || ele.getAttribute('data-event');\n var dataEventOff = eventOff || ele.getAttribute('data-event-off');\n ele.removeEventListener(dataEvent, customListeners.get(ele, event));\n if (dataEventOff) ele.removeEventListener(dataEventOff, this.hideTooltip);\n };\n}\n/**\n * Util method to judge if it should follow capture model\n */\n\n\nfunction isCapture(target) {\n target.prototype.isCapture = function (currentTarget) {\n return currentTarget && currentTarget.getAttribute('data-iscapture') === 'true' || this.props.isCapture || false;\n };\n}\n/**\n * Util method to get effect\n */\n\n\nfunction getEffect(target) {\n target.prototype.getEffect = function (currentTarget) {\n var dataEffect = currentTarget.getAttribute('data-effect');\n return dataEffect || this.props.effect || 'float';\n };\n}\n/**\n * Util method to get effect\n */\n\n\nvar makeProxy = function makeProxy(e) {\n var proxy = {};\n\n for (var key in e) {\n if (typeof e[key] === 'function') {\n proxy[key] = e[key].bind(e);\n } else {\n proxy[key] = e[key];\n }\n }\n\n return proxy;\n};\n\nvar bodyListener = function bodyListener(callback, options, e) {\n var _options$respectEffec = options.respectEffect,\n respectEffect = _options$respectEffec === void 0 ? false : _options$respectEffec,\n _options$customEvent = options.customEvent,\n customEvent = _options$customEvent === void 0 ? false : _options$customEvent;\n var id = this.props.id;\n var tip = e.target.getAttribute('data-tip') || null;\n var forId = e.target.getAttribute('data-for') || null;\n var target = e.target;\n\n if (this.isCustomEvent(target) && !customEvent) {\n return;\n }\n\n var isTargetBelongsToTooltip = id == null && forId == null || forId === id;\n\n if (tip != null && (!respectEffect || this.getEffect(target) === 'float') && isTargetBelongsToTooltip) {\n var proxy = makeProxy(e);\n proxy.currentTarget = target;\n callback(proxy);\n }\n};\n\nvar findCustomEvents = function findCustomEvents(targetArray, dataAttribute) {\n var events = {};\n targetArray.forEach(function (target) {\n var event = target.getAttribute(dataAttribute);\n if (event) event.split(' ').forEach(function (event) {\n return events[event] = true;\n });\n });\n return events;\n};\n\nvar getBody = function getBody() {\n return document.getElementsByTagName('body')[0];\n};\n\nfunction bodyMode(target) {\n target.prototype.isBodyMode = function () {\n return !!this.props.bodyMode;\n };\n\n target.prototype.bindBodyListener = function (targetArray) {\n var _this = this;\n\n var _this$state = this.state,\n event = _this$state.event,\n eventOff = _this$state.eventOff,\n possibleCustomEvents = _this$state.possibleCustomEvents,\n possibleCustomEventsOff = _this$state.possibleCustomEventsOff;\n var body = getBody();\n var customEvents = findCustomEvents(targetArray, 'data-event');\n var customEventsOff = findCustomEvents(targetArray, 'data-event-off');\n if (event != null) customEvents[event] = true;\n if (eventOff != null) customEventsOff[eventOff] = true;\n possibleCustomEvents.split(' ').forEach(function (event) {\n return customEvents[event] = true;\n });\n possibleCustomEventsOff.split(' ').forEach(function (event) {\n return customEventsOff[event] = true;\n });\n this.unbindBodyListener(body);\n var listeners = this.bodyModeListeners = {};\n\n if (event == null) {\n listeners.mouseover = bodyListener.bind(this, this.showTooltip, {});\n listeners.mousemove = bodyListener.bind(this, this.updateTooltip, {\n respectEffect: true\n });\n listeners.mouseout = bodyListener.bind(this, this.hideTooltip, {});\n }\n\n for (var _event in customEvents) {\n listeners[_event] = bodyListener.bind(this, function (e) {\n var targetEventOff = e.currentTarget.getAttribute('data-event-off') || eventOff;\n checkStatus.call(_this, targetEventOff, e);\n }, {\n customEvent: true\n });\n }\n\n for (var _event2 in customEventsOff) {\n listeners[_event2] = bodyListener.bind(this, this.hideTooltip, {\n customEvent: true\n });\n }\n\n for (var _event3 in listeners) {\n body.addEventListener(_event3, listeners[_event3]);\n }\n };\n\n target.prototype.unbindBodyListener = function (body) {\n body = body || getBody();\n var listeners = this.bodyModeListeners;\n\n for (var event in listeners) {\n body.removeEventListener(event, listeners[event]);\n }\n };\n}\n/**\n * Tracking target removing from DOM.\n * It's necessary to hide tooltip when it's target disappears.\n * Otherwise, the tooltip would be shown forever until another target\n * is triggered.\n *\n * If MutationObserver is not available, this feature just doesn't work.\n */\n// https://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/\n\n\nvar getMutationObserverClass = function getMutationObserverClass() {\n return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n};\n\nfunction trackRemoval(target) {\n target.prototype.bindRemovalTracker = function () {\n var _this = this;\n\n var MutationObserver = getMutationObserverClass();\n if (MutationObserver == null) return;\n var observer = new MutationObserver(function (mutations) {\n for (var m1 = 0; m1 < mutations.length; m1++) {\n var mutation = mutations[m1];\n\n for (var m2 = 0; m2 < mutation.removedNodes.length; m2++) {\n var element = mutation.removedNodes[m2];\n\n if (element === _this.state.currentTarget) {\n _this.hideTooltip();\n\n return;\n }\n }\n }\n });\n observer.observe(window.document, {\n childList: true,\n subtree: true\n });\n this.removalTracker = observer;\n };\n\n target.prototype.unbindRemovalTracker = function () {\n if (this.removalTracker) {\n this.removalTracker.disconnect();\n this.removalTracker = null;\n }\n };\n}\n/**\n * Calculate the position of tooltip\n *\n * @params\n * - `e` {Event} the event of current mouse\n * - `target` {Element} the currentTarget of the event\n * - `node` {DOM} the react-tooltip object\n * - `place` {String} top / right / bottom / left\n * - `effect` {String} float / solid\n * - `offset` {Object} the offset to default position\n *\n * @return {Object}\n * - `isNewState` {Bool} required\n * - `newState` {Object}\n * - `position` {Object} {left: {Number}, top: {Number}}\n */\n\n\nfunction getPosition(e, target, node, place, desiredPlace, effect, offset) {\n var _getDimensions = getDimensions(node),\n tipWidth = _getDimensions.width,\n tipHeight = _getDimensions.height;\n\n var _getDimensions2 = getDimensions(target),\n targetWidth = _getDimensions2.width,\n targetHeight = _getDimensions2.height;\n\n var _getCurrentOffset = getCurrentOffset(e, target, effect),\n mouseX = _getCurrentOffset.mouseX,\n mouseY = _getCurrentOffset.mouseY;\n\n var defaultOffset = getDefaultPosition(effect, targetWidth, targetHeight, tipWidth, tipHeight);\n\n var _calculateOffset = calculateOffset(offset),\n extraOffsetX = _calculateOffset.extraOffsetX,\n extraOffsetY = _calculateOffset.extraOffsetY;\n\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n\n var _getParent = getParent(node),\n parentTop = _getParent.parentTop,\n parentLeft = _getParent.parentLeft; // Get the edge offset of the tooltip\n\n\n var getTipOffsetLeft = function getTipOffsetLeft(place) {\n var offsetX = defaultOffset[place].l;\n return mouseX + offsetX + extraOffsetX;\n };\n\n var getTipOffsetRight = function getTipOffsetRight(place) {\n var offsetX = defaultOffset[place].r;\n return mouseX + offsetX + extraOffsetX;\n };\n\n var getTipOffsetTop = function getTipOffsetTop(place) {\n var offsetY = defaultOffset[place].t;\n return mouseY + offsetY + extraOffsetY;\n };\n\n var getTipOffsetBottom = function getTipOffsetBottom(place) {\n var offsetY = defaultOffset[place].b;\n return mouseY + offsetY + extraOffsetY;\n }; //\n // Functions to test whether the tooltip's sides are inside\n // the client window for a given orientation p\n //\n // _____________\n // | | <-- Right side\n // | p = 'left' |\\\n // | |/ |\\\n // |_____________| |_\\ <-- Mouse\n // / \\ |\n // |\n // |\n // Bottom side\n //\n\n\n var outsideLeft = function outsideLeft(p) {\n return getTipOffsetLeft(p) < 0;\n };\n\n var outsideRight = function outsideRight(p) {\n return getTipOffsetRight(p) > windowWidth;\n };\n\n var outsideTop = function outsideTop(p) {\n return getTipOffsetTop(p) < 0;\n };\n\n var outsideBottom = function outsideBottom(p) {\n return getTipOffsetBottom(p) > windowHeight;\n }; // Check whether the tooltip with orientation p is completely inside the client window\n\n\n var outside = function outside(p) {\n return outsideLeft(p) || outsideRight(p) || outsideTop(p) || outsideBottom(p);\n };\n\n var inside = function inside(p) {\n return !outside(p);\n };\n\n var placesList = ['top', 'bottom', 'left', 'right'];\n var insideList = [];\n\n for (var i = 0; i < 4; i++) {\n var p = placesList[i];\n\n if (inside(p)) {\n insideList.push(p);\n }\n }\n\n var isNewState = false;\n var newPlace;\n var shouldUpdatePlace = desiredPlace !== place;\n\n if (inside(desiredPlace) && shouldUpdatePlace) {\n isNewState = true;\n newPlace = desiredPlace;\n } else if (insideList.length > 0 && outside(desiredPlace) && outside(place)) {\n isNewState = true;\n newPlace = insideList[0];\n }\n\n if (isNewState) {\n return {\n isNewState: true,\n newState: {\n place: newPlace\n }\n };\n }\n\n return {\n isNewState: false,\n position: {\n left: parseInt(getTipOffsetLeft(place) - parentLeft, 10),\n top: parseInt(getTipOffsetTop(place) - parentTop, 10)\n }\n };\n}\n\nvar getDimensions = function getDimensions(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n height = _node$getBoundingClie.height,\n width = _node$getBoundingClie.width;\n\n return {\n height: parseInt(height, 10),\n width: parseInt(width, 10)\n };\n}; // Get current mouse offset\n\n\nvar getCurrentOffset = function getCurrentOffset(e, currentTarget, effect) {\n var boundingClientRect = currentTarget.getBoundingClientRect();\n var targetTop = boundingClientRect.top;\n var targetLeft = boundingClientRect.left;\n\n var _getDimensions3 = getDimensions(currentTarget),\n targetWidth = _getDimensions3.width,\n targetHeight = _getDimensions3.height;\n\n if (effect === 'float') {\n return {\n mouseX: e.clientX,\n mouseY: e.clientY\n };\n }\n\n return {\n mouseX: targetLeft + targetWidth / 2,\n mouseY: targetTop + targetHeight / 2\n };\n}; // List all possibility of tooltip final offset\n// This is useful in judging if it is necessary for tooltip to switch position when out of window\n\n\nvar getDefaultPosition = function getDefaultPosition(effect, targetWidth, targetHeight, tipWidth, tipHeight) {\n var top;\n var right;\n var bottom;\n var left;\n var disToMouse = 3;\n var triangleHeight = 2;\n var cursorHeight = 12; // Optimize for float bottom only, cause the cursor will hide the tooltip\n\n if (effect === 'float') {\n top = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: -(tipHeight + disToMouse + triangleHeight),\n b: -disToMouse\n };\n bottom = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: disToMouse + cursorHeight,\n b: tipHeight + disToMouse + triangleHeight + cursorHeight\n };\n left = {\n l: -(tipWidth + disToMouse + triangleHeight),\n r: -disToMouse,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n right = {\n l: disToMouse,\n r: tipWidth + disToMouse + triangleHeight,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n } else if (effect === 'solid') {\n top = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: -(targetHeight / 2 + tipHeight + triangleHeight),\n b: -(targetHeight / 2)\n };\n bottom = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: targetHeight / 2,\n b: targetHeight / 2 + tipHeight + triangleHeight\n };\n left = {\n l: -(tipWidth + targetWidth / 2 + triangleHeight),\n r: -(targetWidth / 2),\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n right = {\n l: targetWidth / 2,\n r: tipWidth + targetWidth / 2 + triangleHeight,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n }\n\n return {\n top: top,\n bottom: bottom,\n left: left,\n right: right\n };\n}; // Consider additional offset into position calculation\n\n\nvar calculateOffset = function calculateOffset(offset) {\n var extraOffsetX = 0;\n var extraOffsetY = 0;\n\n if (Object.prototype.toString.apply(offset) === '[object String]') {\n offset = JSON.parse(offset.toString().replace(/'/g, '\"'));\n }\n\n for (var key in offset) {\n if (key === 'top') {\n extraOffsetY -= parseInt(offset[key], 10);\n } else if (key === 'bottom') {\n extraOffsetY += parseInt(offset[key], 10);\n } else if (key === 'left') {\n extraOffsetX -= parseInt(offset[key], 10);\n } else if (key === 'right') {\n extraOffsetX += parseInt(offset[key], 10);\n }\n }\n\n return {\n extraOffsetX: extraOffsetX,\n extraOffsetY: extraOffsetY\n };\n}; // Get the offset of the parent elements\n\n\nvar getParent = function getParent(currentTarget) {\n var currentParent = currentTarget;\n\n while (currentParent) {\n var computedStyle = window.getComputedStyle(currentParent); // transform and will-change: transform change the containing block\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_Block\n\n if (computedStyle.getPropertyValue('transform') !== 'none' || computedStyle.getPropertyValue('will-change') === 'transform') break;\n currentParent = currentParent.parentElement;\n }\n\n var parentTop = currentParent && currentParent.getBoundingClientRect().top || 0;\n var parentLeft = currentParent && currentParent.getBoundingClientRect().left || 0;\n return {\n parentTop: parentTop,\n parentLeft: parentLeft\n };\n};\n/**\n * To get the tooltip content\n * it may comes from data-tip or this.props.children\n * it should support multiline\n *\n * @params\n * - `tip` {String} value of data-tip\n * - `children` {ReactElement} this.props.children\n * - `multiline` {Any} could be Bool(true/false) or String('true'/'false')\n *\n * @return\n * - String or react component\n */\n\n\nfunction getTipContent(tip, children, getContent, multiline) {\n if (children) return children;\n if (getContent !== undefined && getContent !== null) return getContent; // getContent can be 0, '', etc.\n\n if (getContent === null) return null; // Tip not exist and children is null or undefined\n\n var regexp = //;\n\n if (!multiline || multiline === 'false' || !regexp.test(tip)) {\n // No trim(), so that user can keep their input\n return tip;\n } // Multiline tooltip content\n\n\n return tip.split(regexp).map(function (d, i) {\n return /*#__PURE__*/React.createElement(\"span\", {\n key: i,\n className: \"multi-line\"\n }, d);\n });\n}\n/**\n * Support aria- and role in ReactTooltip\n *\n * @params props {Object}\n * @return {Object}\n */\n\n\nfunction parseAria(props) {\n var ariaObj = {};\n Object.keys(props).filter(function (prop) {\n // aria-xxx and role is acceptable\n return /(^aria-\\w+$|^role$)/.test(prop);\n }).forEach(function (prop) {\n ariaObj[prop] = props[prop];\n });\n return ariaObj;\n}\n/**\n * Convert nodelist to array\n * @see https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/core/createArrayFromMixed.js#L24\n * NodeLists are functions in Safari\n */\n\n\nfunction nodeListToArray(nodeList) {\n var length = nodeList.length;\n\n if (nodeList.hasOwnProperty) {\n return Array.prototype.slice.call(nodeList);\n }\n\n return new Array(length).fill().map(function (index) {\n return nodeList[index];\n });\n}\n\nfunction generateUUID() {\n return 't' + v4();\n}\n\nvar baseCss = \".__react_component_tooltip {\\n border-radius: 3px;\\n display: inline-block;\\n font-size: 13px;\\n left: -999em;\\n opacity: 0;\\n padding: 8px 21px;\\n position: fixed;\\n pointer-events: none;\\n transition: opacity 0.3s ease-out;\\n top: -999em;\\n visibility: hidden;\\n z-index: 999;\\n}\\n.__react_component_tooltip.allow_hover, .__react_component_tooltip.allow_click {\\n pointer-events: auto;\\n}\\n.__react_component_tooltip::before, .__react_component_tooltip::after {\\n content: \\\"\\\";\\n width: 0;\\n height: 0;\\n position: absolute;\\n}\\n.__react_component_tooltip.show {\\n opacity: 0.9;\\n margin-top: 0;\\n margin-left: 0;\\n visibility: visible;\\n}\\n.__react_component_tooltip.place-top::before {\\n border-left: 10px solid transparent;\\n border-right: 10px solid transparent;\\n bottom: -8px;\\n left: 50%;\\n margin-left: -10px;\\n}\\n.__react_component_tooltip.place-bottom::before {\\n border-left: 10px solid transparent;\\n border-right: 10px solid transparent;\\n top: -8px;\\n left: 50%;\\n margin-left: -10px;\\n}\\n.__react_component_tooltip.place-left::before {\\n border-top: 6px solid transparent;\\n border-bottom: 6px solid transparent;\\n right: -8px;\\n top: 50%;\\n margin-top: -5px;\\n}\\n.__react_component_tooltip.place-right::before {\\n border-top: 6px solid transparent;\\n border-bottom: 6px solid transparent;\\n left: -8px;\\n top: 50%;\\n margin-top: -5px;\\n}\\n.__react_component_tooltip .multi-line {\\n display: block;\\n padding: 2px 0;\\n text-align: center;\\n}\";\n/**\n * Default pop-up style values (text color, background color).\n */\n\nvar defaultColors = {\n dark: {\n text: '#fff',\n background: '#222',\n border: 'transparent',\n arrow: '#222'\n },\n success: {\n text: '#fff',\n background: '#8DC572',\n border: 'transparent',\n arrow: '#8DC572'\n },\n warning: {\n text: '#fff',\n background: '#F0AD4E',\n border: 'transparent',\n arrow: '#F0AD4E'\n },\n error: {\n text: '#fff',\n background: '#BE6464',\n border: 'transparent',\n arrow: '#BE6464'\n },\n info: {\n text: '#fff',\n background: '#337AB7',\n border: 'transparent',\n arrow: '#337AB7'\n },\n light: {\n text: '#222',\n background: '#fff',\n border: 'transparent',\n arrow: '#fff'\n }\n};\n\nfunction getDefaultPopupColors(type) {\n return defaultColors[type] ? _objectSpread2({}, defaultColors[type]) : undefined;\n}\n/**\n * Generates the specific tooltip style for use on render.\n */\n\n\nfunction generateTooltipStyle(uuid, customColors, type, hasBorder) {\n return generateStyle(uuid, getPopupColors(customColors, type, hasBorder));\n}\n/**\n * Generates the tooltip style rules based on the element-specified \"data-type\" property.\n */\n\n\nfunction generateStyle(uuid, colors) {\n var textColor = colors.text;\n var backgroundColor = colors.background;\n var borderColor = colors.border;\n var arrowColor = colors.arrow;\n return \"\\n \\t.\".concat(uuid, \" {\\n\\t color: \").concat(textColor, \";\\n\\t background: \").concat(backgroundColor, \";\\n\\t border: 1px solid \").concat(borderColor, \";\\n \\t}\\n\\n \\t.\").concat(uuid, \".place-top {\\n margin-top: -10px;\\n }\\n .\").concat(uuid, \".place-top::before {\\n border-top: 8px solid \").concat(borderColor, \";\\n }\\n .\").concat(uuid, \".place-top::after {\\n border-left: 8px solid transparent;\\n border-right: 8px solid transparent;\\n bottom: -6px;\\n left: 50%;\\n margin-left: -8px;\\n border-top-color: \").concat(arrowColor, \";\\n border-top-style: solid;\\n border-top-width: 6px;\\n }\\n\\n .\").concat(uuid, \".place-bottom {\\n margin-top: 10px;\\n }\\n .\").concat(uuid, \".place-bottom::before {\\n border-bottom: 8px solid \").concat(borderColor, \";\\n }\\n .\").concat(uuid, \".place-bottom::after {\\n border-left: 8px solid transparent;\\n border-right: 8px solid transparent;\\n top: -6px;\\n left: 50%;\\n margin-left: -8px;\\n border-bottom-color: \").concat(arrowColor, \";\\n border-bottom-style: solid;\\n border-bottom-width: 6px;\\n }\\n\\n .\").concat(uuid, \".place-left {\\n margin-left: -10px;\\n }\\n .\").concat(uuid, \".place-left::before {\\n border-left: 8px solid \").concat(borderColor, \";\\n }\\n .\").concat(uuid, \".place-left::after {\\n border-top: 5px solid transparent;\\n border-bottom: 5px solid transparent;\\n right: -6px;\\n top: 50%;\\n margin-top: -4px;\\n border-left-color: \").concat(arrowColor, \";\\n border-left-style: solid;\\n border-left-width: 6px;\\n }\\n\\n .\").concat(uuid, \".place-right {\\n margin-left: 10px;\\n }\\n .\").concat(uuid, \".place-right::before {\\n border-right: 8px solid \").concat(borderColor, \";\\n }\\n .\").concat(uuid, \".place-right::after {\\n border-top: 5px solid transparent;\\n border-bottom: 5px solid transparent;\\n left: -6px;\\n top: 50%;\\n margin-top: -4px;\\n border-right-color: \").concat(arrowColor, \";\\n border-right-style: solid;\\n border-right-width: 6px;\\n }\\n \");\n}\n\nfunction getPopupColors(customColors, type, hasBorder) {\n var textColor = customColors.text;\n var backgroundColor = customColors.background;\n var borderColor = customColors.border;\n var arrowColor = customColors.arrow ? customColors.arrow : customColors.background;\n var colors = getDefaultPopupColors(type);\n\n if (textColor) {\n colors.text = textColor;\n }\n\n if (backgroundColor) {\n colors.background = backgroundColor;\n }\n\n if (hasBorder) {\n if (borderColor) {\n colors.border = borderColor;\n } else {\n colors.border = type === 'light' ? 'black' : 'white';\n }\n }\n\n if (arrowColor) {\n colors.arrow = arrowColor;\n }\n\n return colors;\n}\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n}\n\nvar check = function check(it) {\n return it && it.Math == Math && it;\n}; // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\n\nvar global_1 = // eslint-disable-next-line es/no-global-this -- safe\ncheck((typeof globalThis === \"undefined\" ? \"undefined\" : _typeof(globalThis)) == 'object' && globalThis) || check((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) == 'object' && window) || // eslint-disable-next-line no-restricted-globals -- safe\ncheck((typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self) || check(_typeof(commonjsGlobal) == 'object' && commonjsGlobal) || // eslint-disable-next-line no-new-func -- fallback\nfunction () {\n return this;\n}() || Function('return this')();\n\nvar fails = function fails(exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n}; // Detect IE8's incomplete defineProperty implementation\n\n\nvar descriptors = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, {\n get: function get() {\n return 7;\n }\n })[1] != 7;\n});\nvar $propertyIsEnumerable = {}.propertyIsEnumerable; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // Nashorn ~ JDK8 bug\n\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({\n 1: 2\n}, 1); // `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\n\nvar f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\nvar objectPropertyIsEnumerable = {\n f: f\n};\n\nvar createPropertyDescriptor = function createPropertyDescriptor(bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar toString = {}.toString;\n\nvar classofRaw = function classofRaw(it) {\n return toString.call(it).slice(8, -1);\n};\n\nvar split = ''.split; // fallback for non-array-like ES3 and non-enumerable old V8 strings\n\nvar indexedObject = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classofRaw(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object; // `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\n\nvar requireObjectCoercible = function requireObjectCoercible(it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n}; // toObject with fallback for non-array-like ES3 strings\n\n\nvar toIndexedObject = function toIndexedObject(it) {\n return indexedObject(requireObjectCoercible(it));\n};\n\nvar isObject = function isObject(it) {\n return _typeof(it) === 'object' ? it !== null : typeof it === 'function';\n}; // `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\n\n\nvar toPrimitive = function toPrimitive(input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n}; // `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\n\n\nvar toObject = function toObject(argument) {\n return Object(requireObjectCoercible(argument));\n};\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar has = function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n\nvar document$1 = global_1.document; // typeof document.createElement is 'object' in old IE\n\nvar EXISTS = isObject(document$1) && isObject(document$1.createElement);\n\nvar documentCreateElement = function documentCreateElement(it) {\n return EXISTS ? document$1.createElement(it) : {};\n}; // Thank's IE8 for his funny defineProperty\n\n\nvar ie8DomDefine = !descriptors && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(documentCreateElement('div'), 'a', {\n get: function get() {\n return 7;\n }\n }).a != 7;\n}); // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n\nvar f$1 = descriptors ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (ie8DomDefine) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) {\n /* empty */\n }\n if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]);\n};\nvar objectGetOwnPropertyDescriptor = {\n f: f$1\n};\n\nvar anObject = function anObject(it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n }\n\n return it;\n}; // eslint-disable-next-line es/no-object-defineproperty -- safe\n\n\nvar $defineProperty = Object.defineProperty; // `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n\nvar f$2 = descriptors ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (ie8DomDefine) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) {\n /* empty */\n }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\nvar objectDefineProperty = {\n f: f$2\n};\nvar createNonEnumerableProperty = descriptors ? function (object, key, value) {\n return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar setGlobal = function setGlobal(key, value) {\n try {\n createNonEnumerableProperty(global_1, key, value);\n } catch (error) {\n global_1[key] = value;\n }\n\n return value;\n};\n\nvar SHARED = '__core-js_shared__';\nvar store = global_1[SHARED] || setGlobal(SHARED, {});\nvar sharedStore = store;\nvar functionToString = Function.toString; // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\n\nif (typeof sharedStore.inspectSource != 'function') {\n sharedStore.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nvar inspectSource = sharedStore.inspectSource;\nvar WeakMap = global_1.WeakMap;\nvar nativeWeakMap = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\nvar shared = createCommonjsModule(function (module) {\n (module.exports = function (key, value) {\n return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {});\n })('versions', []).push({\n version: '3.12.1',\n mode: 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n });\n});\nvar id = 0;\nvar postfix = Math.random();\n\nvar uid = function uid(key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n\nvar keys = shared('keys');\n\nvar sharedKey = function sharedKey(key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\nvar hiddenKeys = {};\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap$1 = global_1.WeakMap;\nvar set, get, has$1;\n\nvar enforce = function enforce(it) {\n return has$1(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function getterFor(TYPE) {\n return function (it) {\n var state;\n\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n }\n\n return state;\n };\n};\n\nif (nativeWeakMap || sharedStore.state) {\n var store$1 = sharedStore.state || (sharedStore.state = new WeakMap$1());\n var wmget = store$1.get;\n var wmhas = store$1.has;\n var wmset = store$1.set;\n\n set = function set(it, metadata) {\n if (wmhas.call(store$1, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store$1, it, metadata);\n return metadata;\n };\n\n get = function get(it) {\n return wmget.call(store$1, it) || {};\n };\n\n has$1 = function has$1(it) {\n return wmhas.call(store$1, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n\n set = function set(it, metadata) {\n if (has(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n\n get = function get(it) {\n return has(it, STATE) ? it[STATE] : {};\n };\n\n has$1 = function has$1(it) {\n return has(it, STATE);\n };\n}\n\nvar internalState = {\n set: set,\n get: get,\n has: has$1,\n enforce: enforce,\n getterFor: getterFor\n};\nvar redefine = createCommonjsModule(function (module) {\n var getInternalState = internalState.get;\n var enforceInternalState = internalState.enforce;\n var TEMPLATE = String(String).split('String');\n (module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n\n state = enforceInternalState(value);\n\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n\n if (O === global_1) {\n if (simple) O[key] = value;else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n\n if (simple) O[key] = value;else createNonEnumerableProperty(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n })(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n });\n});\nvar path = global_1;\n\nvar aFunction = function aFunction(variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nvar getBuiltIn = function getBuiltIn(namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace]) : path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method];\n};\n\nvar ceil = Math.ceil;\nvar floor = Math.floor; // `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\n\nvar toInteger = function toInteger(argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n\nvar min = Math.min; // `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\n\nvar toLength = function toLength(argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\nvar max = Math.max;\nvar min$1 = Math.min; // Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\n\nvar toAbsoluteIndex = function toAbsoluteIndex(index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min$1(integer, length);\n}; // `Array.prototype.{ indexOf, includes }` methods implementation\n\n\nvar createMethod = function createMethod(IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value; // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++]; // eslint-disable-next-line no-self-compare -- NaN check\n\n if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not\n } else for (; length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n }\n return !IS_INCLUDES && -1;\n };\n};\n\nvar arrayIncludes = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\nvar indexOf = arrayIncludes.indexOf;\n\nvar objectKeysInternal = function objectKeysInternal(object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n\n for (key in O) {\n !has(hiddenKeys, key) && has(O, key) && result.push(key);\n } // Don't enum bug & hidden keys\n\n\n while (names.length > i) {\n if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n }\n\n return result;\n}; // IE8- don't enum bug keys\n\n\nvar enumBugKeys = ['constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf'];\nvar hiddenKeys$1 = enumBugKeys.concat('length', 'prototype'); // `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\n\nvar f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return objectKeysInternal(O, hiddenKeys$1);\n};\n\nvar objectGetOwnPropertyNames = {\n f: f$3\n}; // eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\n\nvar f$4 = Object.getOwnPropertySymbols;\nvar objectGetOwnPropertySymbols = {\n f: f$4\n}; // all object keys, includes non-enumerable and symbols\n\nvar ownKeys$1 = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = objectGetOwnPropertyNames.f(anObject(it));\n var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n\nvar copyConstructorProperties = function copyConstructorProperties(target, source) {\n var keys = ownKeys$1(source);\n var defineProperty = objectDefineProperty.f;\n var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function isForced(feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == 'function' ? fails(detection) : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\nvar isForced_1 = isForced;\nvar getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\n\nvar _export = function _export(options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n\n if (GLOBAL) {\n target = global_1;\n } else if (STATIC) {\n target = global_1[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global_1[TARGET] || {}).prototype;\n }\n\n if (target) for (key in source) {\n sourceProperty = source[key];\n\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor$1(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n\n FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); // contained in target\n\n if (!FORCED && targetProperty !== undefined) {\n if (_typeof(sourceProperty) === _typeof(targetProperty)) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n } // add a flag to not completely full polyfills\n\n\n if (options.sham || targetProperty && targetProperty.sham) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n } // extend global\n\n\n redefine(target, key, sourceProperty, options);\n }\n};\n\nvar aFunction$1 = function aFunction$1(it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n }\n\n return it;\n}; // optional / simple context binding\n\n\nvar functionBindContext = function functionBindContext(fn, that, length) {\n aFunction$1(fn);\n if (that === undefined) return fn;\n\n switch (length) {\n case 0:\n return function () {\n return fn.call(that);\n };\n\n case 1:\n return function (a) {\n return fn.call(that, a);\n };\n\n case 2:\n return function (a, b) {\n return fn.call(that, a, b);\n };\n\n case 3:\n return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n\n return function\n /* ...args */\n () {\n return fn.apply(that, arguments);\n };\n}; // `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\n\n\nvar isArray = Array.isArray || function isArray(arg) {\n return classofRaw(arg) == 'Array';\n};\n\nvar engineUserAgent = getBuiltIn('navigator', 'userAgent') || '';\nvar process = global_1.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (engineUserAgent) {\n match = engineUserAgent.match(/Edge\\/(\\d+)/);\n\n if (!match || match[1] >= 74) {\n match = engineUserAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nvar engineV8Version = version && +version;\n/* eslint-disable es/no-symbol -- required for testing */\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\n\nvar nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () {\n return !String(Symbol()) || // Chrome 38 Symbol has incorrect toString conversion\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && engineV8Version && engineV8Version < 41;\n});\n/* eslint-disable es/no-symbol -- required for testing */\n\nvar useSymbolAsUid = nativeSymbol && !Symbol.sham && _typeof(Symbol.iterator) == 'symbol';\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol$1 = global_1.Symbol;\nvar createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid;\n\nvar wellKnownSymbol = function wellKnownSymbol(name) {\n if (!has(WellKnownSymbolsStore, name) || !(nativeSymbol || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (nativeSymbol && has(Symbol$1, name)) {\n WellKnownSymbolsStore[name] = Symbol$1[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n }\n\n return WellKnownSymbolsStore[name];\n};\n\nvar SPECIES = wellKnownSymbol('species'); // `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\n\nvar arraySpeciesCreate = function arraySpeciesCreate(originalArray, length) {\n var C;\n\n if (isArray(originalArray)) {\n C = originalArray.constructor; // cross-realm fallback\n\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n }\n\n return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n\nvar push = [].push; // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\n\nvar createMethod$1 = function createMethod$1(TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_OUT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = indexedObject(O);\n var boundFunction = functionBindContext(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n var value, result;\n\n for (; length > index; index++) {\n if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3:\n return true;\n // some\n\n case 5:\n return value;\n // find\n\n case 6:\n return index;\n // findIndex\n\n case 2:\n push.call(target, value);\n // filter\n } else switch (TYPE) {\n case 4:\n return false;\n // every\n\n case 7:\n push.call(target, value);\n // filterOut\n }\n }\n }\n }\n\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nvar arrayIteration = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod$1(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod$1(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod$1(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod$1(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod$1(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod$1(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod$1(6),\n // `Array.prototype.filterOut` method\n // https://github.com/tc39/proposal-array-filtering\n filterOut: createMethod$1(7)\n}; // `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\n\nvar objectKeys = Object.keys || function keys(O) {\n return objectKeysInternal(O, enumBugKeys);\n}; // `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\n\n\nvar objectDefineProperties = descriptors ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n\n while (length > index) {\n objectDefineProperty.f(O, key = keys[index++], Properties[key]);\n }\n\n return O;\n};\nvar html = getBuiltIn('document', 'documentElement');\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function EmptyConstructor() {\n /* empty */\n};\n\nvar scriptTag = function scriptTag(content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n}; // Create object with fake `null` prototype: use ActiveX Object with cleared prototype\n\n\nvar NullProtoObjectViaActiveX = function NullProtoObjectViaActiveX(activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n\n return temp;\n}; // Create object with fake `null` prototype: use iframe Object with cleared prototype\n\n\nvar NullProtoObjectViaIFrame = function NullProtoObjectViaIFrame() {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe); // https://github.com/zloirock/core-js/issues/475\n\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n}; // Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\n\n\nvar activeXDocument;\n\nvar _NullProtoObject = function NullProtoObject() {\n try {\n /* global ActiveXObject -- old IE */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) {\n /* ignore */\n }\n\n _NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n\n while (length--) {\n delete _NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n }\n\n return _NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true; // `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n\nvar objectCreate = Object.create || function create(O, Properties) {\n var result;\n\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null; // add \"__proto__\" for Object.getPrototypeOf polyfill\n\n result[IE_PROTO] = O;\n } else result = _NullProtoObject();\n\n return Properties === undefined ? result : objectDefineProperties(result, Properties);\n};\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype; // Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\n\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n objectDefineProperty.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: objectCreate(null)\n });\n} // add a key to Array.prototype[@@unscopables]\n\n\nvar addToUnscopables = function addToUnscopables(key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\nvar $find = arrayIteration.find;\nvar FIND = 'find';\nvar SKIPS_HOLES = true; // Shouldn't skip holes\n\nif (FIND in []) Array(1)[FIND](function () {\n SKIPS_HOLES = false;\n}); // `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n\n_export({\n target: 'Array',\n proto: true,\n forced: SKIPS_HOLES\n}, {\n find: function find(callbackfn\n /* , that = undefined */\n ) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n}); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\n\n\naddToUnscopables(FIND);\n\nvar _class, _class2, _temp;\n\nvar ReactTooltip = staticMethods(_class = windowListener(_class = customEvent(_class = isCapture(_class = getEffect(_class = bodyMode(_class = trackRemoval(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {\n _inherits(ReactTooltip, _React$Component);\n\n _createClass(ReactTooltip, null, [{\n key: \"propTypes\",\n get: function get() {\n return {\n uuid: PropTypes.string,\n children: PropTypes.any,\n place: PropTypes.string,\n type: PropTypes.string,\n effect: PropTypes.string,\n offset: PropTypes.object,\n multiline: PropTypes.bool,\n border: PropTypes.bool,\n textColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n borderColor: PropTypes.string,\n arrowColor: PropTypes.string,\n insecure: PropTypes.bool,\n \"class\": PropTypes.string,\n className: PropTypes.string,\n id: PropTypes.string,\n html: PropTypes.bool,\n delayHide: PropTypes.number,\n delayUpdate: PropTypes.number,\n delayShow: PropTypes.number,\n event: PropTypes.string,\n eventOff: PropTypes.string,\n isCapture: PropTypes.bool,\n globalEventOff: PropTypes.string,\n getContent: PropTypes.any,\n afterShow: PropTypes.func,\n afterHide: PropTypes.func,\n overridePosition: PropTypes.func,\n disable: PropTypes.bool,\n scrollHide: PropTypes.bool,\n resizeHide: PropTypes.bool,\n wrapper: PropTypes.string,\n bodyMode: PropTypes.bool,\n possibleCustomEvents: PropTypes.string,\n possibleCustomEventsOff: PropTypes.string,\n clickable: PropTypes.bool\n };\n }\n }]);\n\n function ReactTooltip(props) {\n var _this;\n\n _classCallCheck(this, ReactTooltip);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ReactTooltip).call(this, props));\n _this.state = {\n uuid: props.uuid || generateUUID(),\n place: props.place || 'top',\n // Direction of tooltip\n desiredPlace: props.place || 'top',\n type: 'dark',\n // Color theme of tooltip\n effect: 'float',\n // float or fixed\n show: false,\n border: false,\n customColors: {},\n offset: {},\n extraClass: '',\n html: false,\n delayHide: 0,\n delayShow: 0,\n event: props.event || null,\n eventOff: props.eventOff || null,\n currentEvent: null,\n // Current mouse event\n currentTarget: null,\n // Current target of mouse event\n ariaProps: parseAria(props),\n // aria- and role attributes\n isEmptyTip: false,\n disable: false,\n possibleCustomEvents: props.possibleCustomEvents || '',\n possibleCustomEventsOff: props.possibleCustomEventsOff || '',\n originTooltip: null,\n isMultiline: false\n };\n\n _this.bind(['showTooltip', 'updateTooltip', 'hideTooltip', 'hideTooltipOnScroll', 'getTooltipContent', 'globalRebuild', 'globalShow', 'globalHide', 'onWindowResize', 'mouseOnToolTip']);\n\n _this.mount = true;\n _this.delayShowLoop = null;\n _this.delayHideLoop = null;\n _this.delayReshow = null;\n _this.intervalUpdateContent = null;\n return _this;\n }\n /**\n * For unify the bind and unbind listener\n */\n\n\n _createClass(ReactTooltip, [{\n key: \"bind\",\n value: function bind(methodArray) {\n var _this2 = this;\n\n methodArray.forEach(function (method) {\n _this2[method] = _this2[method].bind(_this2);\n });\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props = this.props,\n insecure = _this$props.insecure,\n resizeHide = _this$props.resizeHide;\n this.bindListener(); // Bind listener for tooltip\n\n this.bindWindowEvents(resizeHide); // Bind global event for static method\n\n this.injectStyles(); // Inject styles for each DOM root having tooltip.\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mount = false;\n this.clearTimer();\n this.unbindListener();\n this.removeScrollListener(this.state.currentTarget);\n this.unbindWindowEvents();\n }\n /* Look for the closest DOM root having tooltip and inject styles. */\n\n }, {\n key: \"injectStyles\",\n value: function injectStyles() {\n var tooltipRef = this.tooltipRef;\n\n if (!tooltipRef) {\n return;\n }\n\n var parentNode = tooltipRef.parentNode;\n\n while (parentNode.parentNode) {\n parentNode = parentNode.parentNode;\n }\n\n var domRoot;\n\n switch (parentNode.constructor.name) {\n case 'Document':\n case 'HTMLDocument':\n case undefined:\n domRoot = parentNode.head;\n break;\n\n case 'ShadowRoot':\n default:\n domRoot = parentNode;\n break;\n } // Prevent styles duplication.\n\n\n if (!domRoot.querySelector('style[data-react-tooltip]')) {\n var style = document.createElement('style');\n style.textContent = baseCss;\n style.setAttribute('data-react-tooltip', 'true');\n domRoot.appendChild(style);\n }\n }\n /**\n * Return if the mouse is on the tooltip.\n * @returns {boolean} true - mouse is on the tooltip\n */\n\n }, {\n key: \"mouseOnToolTip\",\n value: function mouseOnToolTip() {\n var show = this.state.show;\n\n if (show && this.tooltipRef) {\n /* old IE or Firefox work around */\n if (!this.tooltipRef.matches) {\n /* old IE work around */\n if (this.tooltipRef.msMatchesSelector) {\n this.tooltipRef.matches = this.tooltipRef.msMatchesSelector;\n } else {\n /* old Firefox work around */\n this.tooltipRef.matches = this.tooltipRef.mozMatchesSelector;\n }\n }\n\n return this.tooltipRef.matches(':hover');\n }\n\n return false;\n }\n /**\n * Pick out corresponded target elements\n */\n\n }, {\n key: \"getTargetArray\",\n value: function getTargetArray(id) {\n var targetArray = [];\n var selector;\n\n if (!id) {\n selector = '[data-tip]:not([data-for])';\n } else {\n var escaped = id.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n selector = \"[data-tip][data-for=\\\"\".concat(escaped, \"\\\"]\");\n } // Scan document for shadow DOM elements\n\n\n nodeListToArray(document.getElementsByTagName('*')).filter(function (element) {\n return element.shadowRoot;\n }).forEach(function (element) {\n targetArray = targetArray.concat(nodeListToArray(element.shadowRoot.querySelectorAll(selector)));\n });\n return targetArray.concat(nodeListToArray(document.querySelectorAll(selector)));\n }\n /**\n * Bind listener to the target elements\n * These listeners used to trigger showing or hiding the tooltip\n */\n\n }, {\n key: \"bindListener\",\n value: function bindListener() {\n var _this3 = this;\n\n var _this$props2 = this.props,\n id = _this$props2.id,\n globalEventOff = _this$props2.globalEventOff,\n isCapture = _this$props2.isCapture;\n var targetArray = this.getTargetArray(id);\n targetArray.forEach(function (target) {\n if (target.getAttribute('currentItem') === null) {\n target.setAttribute('currentItem', 'false');\n }\n\n _this3.unbindBasicListener(target);\n\n if (_this3.isCustomEvent(target)) {\n _this3.customUnbindListener(target);\n }\n });\n\n if (this.isBodyMode()) {\n this.bindBodyListener(targetArray);\n } else {\n targetArray.forEach(function (target) {\n var isCaptureMode = _this3.isCapture(target);\n\n var effect = _this3.getEffect(target);\n\n if (_this3.isCustomEvent(target)) {\n _this3.customBindListener(target);\n\n return;\n }\n\n target.addEventListener('mouseenter', _this3.showTooltip, isCaptureMode);\n target.addEventListener('focus', _this3.showTooltip, isCaptureMode);\n\n if (effect === 'float') {\n target.addEventListener('mousemove', _this3.updateTooltip, isCaptureMode);\n }\n\n target.addEventListener('mouseleave', _this3.hideTooltip, isCaptureMode);\n target.addEventListener('blur', _this3.hideTooltip, isCaptureMode);\n });\n } // Global event to hide tooltip\n\n\n if (globalEventOff) {\n window.removeEventListener(globalEventOff, this.hideTooltip);\n window.addEventListener(globalEventOff, this.hideTooltip, isCapture);\n } // Track removal of targetArray elements from DOM\n\n\n this.bindRemovalTracker();\n }\n /**\n * Unbind listeners on target elements\n */\n\n }, {\n key: \"unbindListener\",\n value: function unbindListener() {\n var _this4 = this;\n\n var _this$props3 = this.props,\n id = _this$props3.id,\n globalEventOff = _this$props3.globalEventOff;\n\n if (this.isBodyMode()) {\n this.unbindBodyListener();\n } else {\n var targetArray = this.getTargetArray(id);\n targetArray.forEach(function (target) {\n _this4.unbindBasicListener(target);\n\n if (_this4.isCustomEvent(target)) _this4.customUnbindListener(target);\n });\n }\n\n if (globalEventOff) window.removeEventListener(globalEventOff, this.hideTooltip);\n this.unbindRemovalTracker();\n }\n /**\n * Invoke this before bind listener and unmount the component\n * it is necessary to invoke this even when binding custom event\n * so that the tooltip can switch between custom and default listener\n */\n\n }, {\n key: \"unbindBasicListener\",\n value: function unbindBasicListener(target) {\n var isCaptureMode = this.isCapture(target);\n target.removeEventListener('mouseenter', this.showTooltip, isCaptureMode);\n target.removeEventListener('mousemove', this.updateTooltip, isCaptureMode);\n target.removeEventListener('mouseleave', this.hideTooltip, isCaptureMode);\n }\n }, {\n key: \"getTooltipContent\",\n value: function getTooltipContent() {\n var _this$props4 = this.props,\n getContent = _this$props4.getContent,\n children = _this$props4.children; // Generate tooltip content\n\n var content;\n\n if (getContent) {\n if (Array.isArray(getContent)) {\n content = getContent[0] && getContent[0](this.state.originTooltip);\n } else {\n content = getContent(this.state.originTooltip);\n }\n }\n\n return getTipContent(this.state.originTooltip, children, content, this.state.isMultiline);\n }\n }, {\n key: \"isEmptyTip\",\n value: function isEmptyTip(placeholder) {\n return typeof placeholder === 'string' && placeholder === '' || placeholder === null;\n }\n /**\n * When mouse enter, show the tooltip\n */\n\n }, {\n key: \"showTooltip\",\n value: function showTooltip(e, isGlobalCall) {\n if (!this.tooltipRef) {\n return;\n }\n\n if (isGlobalCall) {\n // Don't trigger other elements belongs to other ReactTooltip\n var targetArray = this.getTargetArray(this.props.id);\n var isMyElement = targetArray.some(function (ele) {\n return ele === e.currentTarget;\n });\n if (!isMyElement) return;\n } // Get the tooltip content\n // calculate in this phrase so that tip width height can be detected\n\n\n var _this$props5 = this.props,\n multiline = _this$props5.multiline,\n getContent = _this$props5.getContent;\n var originTooltip = e.currentTarget.getAttribute('data-tip');\n var isMultiline = e.currentTarget.getAttribute('data-multiline') || multiline || false; // If it is focus event or called by ReactTooltip.show, switch to `solid` effect\n\n var switchToSolid = e instanceof window.FocusEvent || isGlobalCall; // if it needs to skip adding hide listener to scroll\n\n var scrollHide = true;\n\n if (e.currentTarget.getAttribute('data-scroll-hide')) {\n scrollHide = e.currentTarget.getAttribute('data-scroll-hide') === 'true';\n } else if (this.props.scrollHide != null) {\n scrollHide = this.props.scrollHide;\n } // adding aria-describedby to target to make tooltips read by screen readers\n\n\n if (e && e.currentTarget && e.currentTarget.setAttribute) {\n e.currentTarget.setAttribute('aria-describedby', this.state.uuid);\n } // Make sure the correct place is set\n\n\n var desiredPlace = e.currentTarget.getAttribute('data-place') || this.props.place || 'top';\n var effect = switchToSolid && 'solid' || this.getEffect(e.currentTarget);\n var offset = e.currentTarget.getAttribute('data-offset') || this.props.offset || {};\n var result = getPosition(e, e.currentTarget, this.tooltipRef, desiredPlace, desiredPlace, effect, offset);\n\n if (result.position && this.props.overridePosition) {\n result.position = this.props.overridePosition(result.position, e, e.currentTarget, this.tooltipRef, desiredPlace, desiredPlace, effect, offset);\n }\n\n var place = result.isNewState ? result.newState.place : desiredPlace; // To prevent previously created timers from triggering\n\n this.clearTimer();\n var target = e.currentTarget;\n var reshowDelay = this.state.show ? target.getAttribute('data-delay-update') || this.props.delayUpdate : 0;\n var self = this;\n\n var updateState = function updateState() {\n self.setState({\n originTooltip: originTooltip,\n isMultiline: isMultiline,\n desiredPlace: desiredPlace,\n place: place,\n type: target.getAttribute('data-type') || self.props.type || 'dark',\n customColors: {\n text: target.getAttribute('data-text-color') || self.props.textColor || null,\n background: target.getAttribute('data-background-color') || self.props.backgroundColor || null,\n border: target.getAttribute('data-border-color') || self.props.borderColor || null,\n arrow: target.getAttribute('data-arrow-color') || self.props.arrowColor || null\n },\n effect: effect,\n offset: offset,\n html: (target.getAttribute('data-html') ? target.getAttribute('data-html') === 'true' : self.props.html) || false,\n delayShow: target.getAttribute('data-delay-show') || self.props.delayShow || 0,\n delayHide: target.getAttribute('data-delay-hide') || self.props.delayHide || 0,\n delayUpdate: target.getAttribute('data-delay-update') || self.props.delayUpdate || 0,\n border: (target.getAttribute('data-border') ? target.getAttribute('data-border') === 'true' : self.props.border) || false,\n extraClass: target.getAttribute('data-class') || self.props[\"class\"] || self.props.className || '',\n disable: (target.getAttribute('data-tip-disable') ? target.getAttribute('data-tip-disable') === 'true' : self.props.disable) || false,\n currentTarget: target\n }, function () {\n if (scrollHide) {\n self.addScrollListener(self.state.currentTarget);\n }\n\n self.updateTooltip(e);\n\n if (getContent && Array.isArray(getContent)) {\n self.intervalUpdateContent = setInterval(function () {\n if (self.mount) {\n var _getContent = self.props.getContent;\n var placeholder = getTipContent(originTooltip, '', _getContent[0](), isMultiline);\n var isEmptyTip = self.isEmptyTip(placeholder);\n self.setState({\n isEmptyTip: isEmptyTip\n });\n self.updatePosition();\n }\n }, getContent[1]);\n }\n });\n }; // If there is no delay call immediately, don't allow events to get in first.\n\n\n if (reshowDelay) {\n this.delayReshow = setTimeout(updateState, reshowDelay);\n } else {\n updateState();\n }\n }\n /**\n * When mouse hover, update tool tip\n */\n\n }, {\n key: \"updateTooltip\",\n value: function updateTooltip(e) {\n var _this5 = this;\n\n var _this$state = this.state,\n delayShow = _this$state.delayShow,\n disable = _this$state.disable;\n var afterShow = this.props.afterShow;\n var placeholder = this.getTooltipContent();\n var eventTarget = e.currentTarget || e.target; // Check if the mouse is actually over the tooltip, if so don't hide the tooltip\n\n if (this.mouseOnToolTip()) {\n return;\n } // if the tooltip is empty, disable the tooltip\n\n\n if (this.isEmptyTip(placeholder) || disable) {\n return;\n }\n\n var delayTime = !this.state.show ? parseInt(delayShow, 10) : 0;\n\n var updateState = function updateState() {\n if (Array.isArray(placeholder) && placeholder.length > 0 || placeholder) {\n var isInvisible = !_this5.state.show;\n\n _this5.setState({\n currentEvent: e,\n currentTarget: eventTarget,\n show: true\n }, function () {\n _this5.updatePosition();\n\n if (isInvisible && afterShow) {\n afterShow(e);\n }\n });\n }\n };\n\n clearTimeout(this.delayShowLoop);\n\n if (delayTime) {\n this.delayShowLoop = setTimeout(updateState, delayTime);\n } else {\n updateState();\n }\n }\n /*\n * If we're mousing over the tooltip remove it when we leave.\n */\n\n }, {\n key: \"listenForTooltipExit\",\n value: function listenForTooltipExit() {\n var show = this.state.show;\n\n if (show && this.tooltipRef) {\n this.tooltipRef.addEventListener('mouseleave', this.hideTooltip);\n }\n }\n }, {\n key: \"removeListenerForTooltipExit\",\n value: function removeListenerForTooltipExit() {\n var show = this.state.show;\n\n if (show && this.tooltipRef) {\n this.tooltipRef.removeEventListener('mouseleave', this.hideTooltip);\n }\n }\n /**\n * When mouse leave, hide tooltip\n */\n\n }, {\n key: \"hideTooltip\",\n value: function hideTooltip(e, hasTarget) {\n var _this6 = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n isScroll: false\n };\n var disable = this.state.disable;\n var isScroll = options.isScroll;\n var delayHide = isScroll ? 0 : this.state.delayHide;\n var afterHide = this.props.afterHide;\n var placeholder = this.getTooltipContent();\n if (!this.mount) return;\n if (this.isEmptyTip(placeholder) || disable) return; // if the tooltip is empty, disable the tooltip\n\n if (hasTarget) {\n // Don't trigger other elements belongs to other ReactTooltip\n var targetArray = this.getTargetArray(this.props.id);\n var isMyElement = targetArray.some(function (ele) {\n return ele === e.currentTarget;\n });\n if (!isMyElement || !this.state.show) return;\n } // clean up aria-describedby when hiding tooltip\n\n\n if (e && e.currentTarget && e.currentTarget.removeAttribute) {\n e.currentTarget.removeAttribute('aria-describedby');\n }\n\n var resetState = function resetState() {\n var isVisible = _this6.state.show; // Check if the mouse is actually over the tooltip, if so don't hide the tooltip\n\n if (_this6.mouseOnToolTip()) {\n _this6.listenForTooltipExit();\n\n return;\n }\n\n _this6.removeListenerForTooltipExit();\n\n _this6.setState({\n show: false\n }, function () {\n _this6.removeScrollListener(_this6.state.currentTarget);\n\n if (isVisible && afterHide) {\n afterHide(e);\n }\n });\n };\n\n this.clearTimer();\n\n if (delayHide) {\n this.delayHideLoop = setTimeout(resetState, parseInt(delayHide, 10));\n } else {\n resetState();\n }\n }\n /**\n * When scroll, hide tooltip\n */\n\n }, {\n key: \"hideTooltipOnScroll\",\n value: function hideTooltipOnScroll(event, hasTarget) {\n this.hideTooltip(event, hasTarget, {\n isScroll: true\n });\n }\n /**\n * Add scroll event listener when tooltip show\n * automatically hide the tooltip when scrolling\n */\n\n }, {\n key: \"addScrollListener\",\n value: function addScrollListener(currentTarget) {\n var isCaptureMode = this.isCapture(currentTarget);\n window.addEventListener('scroll', this.hideTooltipOnScroll, isCaptureMode);\n }\n }, {\n key: \"removeScrollListener\",\n value: function removeScrollListener(currentTarget) {\n var isCaptureMode = this.isCapture(currentTarget);\n window.removeEventListener('scroll', this.hideTooltipOnScroll, isCaptureMode);\n } // Calculation the position\n\n }, {\n key: \"updatePosition\",\n value: function updatePosition() {\n var _this7 = this;\n\n var _this$state2 = this.state,\n currentEvent = _this$state2.currentEvent,\n currentTarget = _this$state2.currentTarget,\n place = _this$state2.place,\n desiredPlace = _this$state2.desiredPlace,\n effect = _this$state2.effect,\n offset = _this$state2.offset;\n var node = this.tooltipRef;\n var result = getPosition(currentEvent, currentTarget, node, place, desiredPlace, effect, offset);\n\n if (result.position && this.props.overridePosition) {\n result.position = this.props.overridePosition(result.position, currentEvent, currentTarget, node, place, desiredPlace, effect, offset);\n }\n\n if (result.isNewState) {\n // Switch to reverse placement\n return this.setState(result.newState, function () {\n _this7.updatePosition();\n });\n } // Set tooltip position\n\n\n node.style.left = result.position.left + 'px';\n node.style.top = result.position.top + 'px';\n }\n /**\n * CLear all kinds of timeout of interval\n */\n\n }, {\n key: \"clearTimer\",\n value: function clearTimer() {\n clearTimeout(this.delayShowLoop);\n clearTimeout(this.delayHideLoop);\n clearTimeout(this.delayReshow);\n clearInterval(this.intervalUpdateContent);\n }\n }, {\n key: \"hasCustomColors\",\n value: function hasCustomColors() {\n var _this8 = this;\n\n return Boolean(Object.keys(this.state.customColors).find(function (color) {\n return color !== 'border' && _this8.state.customColors[color];\n }) || this.state.border && this.state.customColors['border']);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this9 = this;\n\n var _this$state3 = this.state,\n extraClass = _this$state3.extraClass,\n html = _this$state3.html,\n ariaProps = _this$state3.ariaProps,\n disable = _this$state3.disable,\n uuid = _this$state3.uuid;\n var content = this.getTooltipContent();\n var isEmptyTip = this.isEmptyTip(content);\n var style = generateTooltipStyle(this.state.uuid, this.state.customColors, this.state.type, this.state.border);\n var tooltipClass = '__react_component_tooltip' + \" \".concat(this.state.uuid) + (this.state.show && !disable && !isEmptyTip ? ' show' : '') + (this.state.border ? ' border' : '') + \" place-\".concat(this.state.place) + // top, bottom, left, right\n \" type-\".concat(this.hasCustomColors() ? 'custom' : this.state.type) + ( // dark, success, warning, error, info, light, custom\n this.props.delayUpdate ? ' allow_hover' : '') + (this.props.clickable ? ' allow_click' : '');\n var Wrapper = this.props.wrapper;\n\n if (ReactTooltip.supportedWrappers.indexOf(Wrapper) < 0) {\n Wrapper = ReactTooltip.defaultProps.wrapper;\n }\n\n var wrapperClassName = [tooltipClass, extraClass].filter(Boolean).join(' ');\n\n if (html) {\n var htmlContent = \"\".concat(content, \"\\n\");\n return /*#__PURE__*/React.createElement(Wrapper, _extends({\n className: \"\".concat(wrapperClassName),\n id: this.props.id || uuid,\n ref: function ref(_ref) {\n return _this9.tooltipRef = _ref;\n }\n }, ariaProps, {\n \"data-id\": \"tooltip\",\n dangerouslySetInnerHTML: {\n __html: htmlContent\n }\n }));\n } else {\n return /*#__PURE__*/React.createElement(Wrapper, _extends({\n className: \"\".concat(wrapperClassName),\n id: this.props.id || uuid\n }, ariaProps, {\n ref: function ref(_ref2) {\n return _this9.tooltipRef = _ref2;\n },\n \"data-id\": \"tooltip\"\n }), /*#__PURE__*/React.createElement(\"style\", {\n dangerouslySetInnerHTML: {\n __html: style\n },\n \"aria-hidden\": \"true\"\n }), content);\n }\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var ariaProps = prevState.ariaProps;\n var newAriaProps = parseAria(nextProps);\n var isChanged = Object.keys(newAriaProps).some(function (props) {\n return newAriaProps[props] !== ariaProps[props];\n });\n\n if (!isChanged) {\n return null;\n }\n\n return _objectSpread2({}, prevState, {\n ariaProps: newAriaProps\n });\n }\n }]);\n\n return ReactTooltip;\n}(React.Component), _defineProperty(_class2, \"defaultProps\", {\n insecure: true,\n resizeHide: true,\n wrapper: 'div',\n clickable: false\n}), _defineProperty(_class2, \"supportedWrappers\", ['div', 'span']), _defineProperty(_class2, \"displayName\", 'ReactTooltip'), _temp)) || _class) || _class) || _class) || _class) || _class) || _class) || _class;\n\nexport default ReactTooltip;","module.exports = require(\"regenerator-runtime\");\n","module.exports = require('./lib/axios');","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function') {\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n'use strict';\n/* eslint-disable no-unused-vars */\n\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n if (val === null || val === undefined) {\n throw new TypeError('Object.assign cannot be called with null or undefined');\n }\n\n return Object(val);\n}\n\nfunction shouldUseNative() {\n try {\n if (!Object.assign) {\n return false;\n } // Detect buggy property enumeration order in older V8 versions.\n // https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\n\n var test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\n test1[5] = 'de';\n\n if (Object.getOwnPropertyNames(test1)[0] === '5') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test2 = {};\n\n for (var i = 0; i < 10; i++) {\n test2['_' + String.fromCharCode(i)] = i;\n }\n\n var order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n return test2[n];\n });\n\n if (order2.join('') !== '0123456789') {\n return false;\n } // https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\n\n var test3 = {};\n 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n test3[letter] = letter;\n });\n\n if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n return false;\n }\n\n return true;\n } catch (err) {\n // We don't expect any of the above to throw, but better to be safe.\n return false;\n }\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n var from;\n var to = toObject(target);\n var symbols;\n\n for (var s = 1; s < arguments.length; s++) {\n from = Object(arguments[s]);\n\n for (var key in from) {\n if (hasOwnProperty.call(from, key)) {\n to[key] = from[key];\n }\n }\n\n if (getOwnPropertySymbols) {\n symbols = getOwnPropertySymbols(from);\n\n for (var i = 0; i < symbols.length; i++) {\n if (propIsEnumerable.call(from, symbols[i])) {\n to[symbols[i]] = from[symbols[i]];\n }\n }\n }\n }\n\n return to;\n};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of ';\n }\n );\n var addBorder = Frontsvg.replace(/(<\\/svg)([^<]*|[^>]*)/g,match => {\n return `\n \n \n \n \n
` + match;\n }\n );\n frontSideSVG = addBorder;\n if (state.hasBackside) {\n checkBackSide();\n } else {\n callBackend(state, props, frontSideSVG, backSideSVG, totalPrice);\n }\n });\n });\n } else {\n checkBackSide();\n }\n\n function checkBackSide() {\n props.setSide('back');\n if (props.backCurrent.getObjects().length > 1) {\n const selectedCanvas = props.backCurrent;\n const side = props.product.workArea.back;\n handleCanvas(selectedCanvas, side).then( () => {\n const svgString = props.backCurrent.toSVG();\n Promise.all(canvasFonts.map( fontName => getBase64(Fonts[fontName]).then(base64font => [fontName, base64font]))).then(downloadedFonts => {\n const svgStyles = downloadedFonts.map(([fontName, font64]) => getSvgStyle(fontName, font64));\n const rawStyle = svgStyles.join('\\n');\n var backSVG = svgString.replace(/(]*)/g,match => {\n return match + '';\n }\n );\n var addBorder = backSVG.replace(/(<\\/svg)([^<]*|[^>]*)/g,match => {\n return `\n \n \n \n \n ` + match;\n }\n );\n backSideSVG = addBorder;\n callBackend(state, props, frontSideSVG, backSideSVG, totalPrice);\n });\n });\n } else {\n callBackend(state, props, frontSideSVG, backSideSVG, totalPrice);\n }\n }\n\n async function handleCanvas(selectedCanvas, side) {\n const allFonts = new Set();\n selectedCanvas.backgroundImage = 0;\n selectedCanvas.discardActiveObject();\n let left , top, width, height;\n if (props.product.workArea) {\n left = side.left;\n top = side.top;\n width = side.width;\n height = side.height;\n } else {\n // eslint-disable-next-line no-sequences\n left , top = 0;\n width = 670; // defaulut image size from welovelaser\n height = 652; // /////////////////////////////////\n }\n var out_frame = new fabric.Rect({\n width: width,\n height: height,\n top: top,\n left: left,\n absolutePositioned: true\n });\n selectedCanvas.clipPath = out_frame;\n const allObjectOnCanvas = selectedCanvas.getObjects();\n const collect = [];\n allObjectOnCanvas.map( o => {\n if (o.text) {\n allFonts.add(o.fontFamily);\n o.clipPath = null;\n if (o._objects) {\n o._objects.map( obj => {\n obj.fill = 'black';\n });\n } else {\n o.fill = 'black';\n }\n collect.push(o);\n } else if (o.type === 'rect') {\n selectedCanvas.remove(o);\n } else if (o.id === 'svg') {\n o.clipPath = null;\n if (o._objects) {\n o._objects.map( obj => {\n if ( obj.fill.length > 0 ) {\n obj.fill = 'black';\n }\n if (obj.stroke.length > 0 ) {\n obj.stroke = 'black';\n }\n });\n } else {\n o.fill = 'black';\n }\n collect.push(o);\n } else {\n // empty text !!\n o.clipPath = null;\n const { orginalPics } = props;\n const { userImages } = state;\n orginalPics[0].map( file => {\n file.name === o.id ? userImages.push(file) : null;\n });\n var filter = new fabric.Image.filters.Brightness({ brightness: -1 });\n o.filters.push(filter);\n o.applyFilters();\n collect.push(o);\n }\n }\n );\n const group = fabric.util.groupSVGElements(collect);\n selectedCanvas.remove(...selectedCanvas.getObjects());\n selectedCanvas.add(group);\n canvasFonts = Array.from(allFonts);\n }\n}\n","module.exports = __webpack_public_path__ + \"media/Components/fonts/boldTeko-ff817333802ca240623cef0c06ffa3ce.ttf\";","module.exports = __webpack_public_path__ + \"media/Components/Logos/WeLoveLaser_Logo-aeeb7a9cfdd035f7437bd900e0a924c0.svg\";","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js??ref--5-1!../../../node_modules/postcss-loader/src/index.js??ref--5-2!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(true);\n// Module\nexports.push([module.id, \"* {\\n padding: 0;\\n margin: 0;\\n box-sizing: border-box;\\n}\\n\\nbody {\\n font-family: 'lato-regular';\\n height: 100%;\\n font-size: 13px;\\n line-height: 1.4em;\\n}\\n\\n.Container {\\n width: 100%;\\n height: 100vh;\\n display: flex;\\n}\\n\\n.ContainerChild {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.block-mobile {\\n display: none;\\n}\\n\\n@media all and (orientation:portrait) {\\n .Container {\\n flex-direction: column;\\n }\\n .ContainerChild {\\n width: 100%;\\n }\\n}\\n\\n@media screen and (max-width: 767px){\\n /* .Container {\\n display: none;\\n }\\n .block-mobile {\\n display: block;\\n width: 100%;\\n height: 100%;\\n z-index: 10;\\n position: relative;\\n top: 0;\\n left: 0;\\n background-color: white;\\n }\\n .tools {\\n min-height: 0px;\\n } */\\n}\\n\\n.content-options {\\n width: 35%;\\n height: 100%;\\n}\\n\\n.content-wrapper {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n height: 100%;\\n}\\n\\n.text-options {\\n width: 90%;\\n height: 80%;\\n margin: auto;\\n}\\n\\n.text-options > div > div {\\n padding: 10px 0;\\n}\\n\\n.text-options .rangeArea,\\n.text-options .font-area {\\n font-size: 10px;\\n font-family: lato-black;\\n}\\n\\n.rangeArea div {\\n display: flex;\\n /* flex-direction: column; */\\n align-items: center;\\n}\\n\\n.rangeArea span {\\n width: 35%;\\n}\\n\\n.rangeArea input {\\n width: 60%;\\n}\\n\\n.rangeArea label {\\n width: 10%;\\n text-align: center;\\n}\\n\\ninput[type='range'] {\\n -webkit-appearance: none;\\n height: 2px;\\n border-radius: 4px;\\n margin-bottom: 15px;\\n background-color: black;\\n margin: auto;\\n\\n}\\n\\ninput[type='range']::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n width: 18px;\\n height: 18px;\\n border-radius: 10px;\\n background-color: #b39964 ;\\n overflow: visible;\\n cursor: pointer;\\n }\\n\\n.font-area {\\n margin-bottom: 10px;\\n}\\n\\n.font-area div {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.font-area span {\\n width: 25% !important;\\n}\\n\\n.font-area div div {\\n width: 75% !important;\\n}\\n\\n.svgContainer svg {\\n width: 30px;\\n height: 30px;\\n}\\n\\n.slectContainer {\\n width: 70%;\\n border: none;\\n font-size: 1.7em;\\n margin-left: 8%;\\n}\\n\\n.disabled {\\n background-color: #ccc;\\n}\\n\\n.sendButton {\\n display: flex;\\n}\\n\\n.sendButton label,\\n.sendButton span,\\n.mobileButton {\\n font-family: lato-bold;\\n margin: auto;\\n color: black;\\n margin-top: 3px;\\n border: 1px solid #000;\\n padding: 5px 7px;\\n text-align: center;\\n display: inline-block;\\n text-transform: uppercase;\\n}\\n\\n.sendButton span:hover {\\n color: white;\\n background-color: black;\\n cursor: pointer;\\n}\\n\\n.image-options {\\n height: 100%;\\n text-align: center;\\n}\\n\\n.refused {\\n height: 500px;\\n padding: 20px;\\n\\n}\\n\\n.refused span {\\n margin: 10px;\\n text-align: left;\\n display: block;\\n}\\n\\n.accepted div span {\\n display: block;\\n}\\n\\n.uploadArea {\\n padding: 20px;\\n text-align: left;\\n font-size: 10px;\\n}\\n\\ninput[type=\\\"file\\\"] {\\n display: none;\\n}\\n\\n.custom-file-upload {\\n border: 1px dashed #000;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n padding: 5px 7px;\\n cursor: pointer;\\n width: 75%;\\n height: 50px;\\n margin: 20px auto;\\n text-transform: uppercase;\\n font-family: lato-bold;\\n}\\n\\n.custom-file-upload div {\\n margin-right: 5px;\\n}\\n\\n.black {\\n background-color: black;\\n}\\n\\n.canvasContiner {\\n width: auto;\\n max-height: calc(100vh - 350px);\\n max-width: 95%;\\n}\\n\\n.contrast-area {\\n display: flex;\\n width: 80%;\\n margin: auto;\\n margin-top: 15px;\\n margin-bottom: 15px;\\n}\\n\\n.closeImageOption {\\n display: none;\\n}\\n\\n.hide-content-button {\\n display: none;\\n}\\n\\n.gallery-wrapper {\\n height: 100%;\\n position: relative;\\n}\\n\\n.gallery-container {\\n overflow-y: scroll;\\n max-height: 100%;\\n}\\n\\n.gallery-options {\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.gallery-image {\\n width: 24%;\\n margin: 0.5%;\\n}\\n\\n.gallery-empty {\\n margin-left: 10px;\\n}\\n\\n.gallery-category {\\n width: 49%;\\n margin: 0.5%;\\n display: block;\\n padding: 40px 15px;\\n background: #ecf0f1;\\n cursor: pointer;\\n text-align: center;\\n font-size: 16px;\\n}\\n\\n.gallery-category:hover {\\n background: #cfd9db;\\n}\\n\\n.sticky {\\n position: -webkit-sticky; /* Safari */\\n position: sticky;\\n top: 0;\\n}\\n\\n@media all and (orientation:portrait) {\\n #content {\\n flex: 2 1;\\n height: 100vh;\\n width: 100%;\\n position: fixed;\\n z-index: -1;\\n background-color: white;\\n opacity: 0.8;\\n }\\n\\n .hide-content-button {\\n display: block;\\n font-size: x-large;\\n text-align: right;\\n margin: 10px 10px 0 0;\\n }\\n}\\n\\n.searchbox {\\n margin: 10px;\\n}\\n\\n.back-button {\\n cursor: pointer;\\n background-color: #f3f3f3 !important;\\n}\\n\\n.image-options,\\n.text-options {\\n overflow: scroll;\\n}\\n\\n#gallery-preview {\\n position: absolute;\\n display: none;\\n left: 100%;\\n margin: 20px;\\n\\n background: #fff;\\n border: 1px solid #bbb;\\n border-radius: 4px;\\n padding: 10px;\\n text-align: center;\\n}\\n\\n#gallery-preview img {\\n width: 300px;\\n}\\n\\n#gallery-preview span {\\n font-size: 17px;\\n}\\n\\n#gallery-preview.show {\\n display: block;\\n}\\n\\n/* Input addons, based on */\\n\\n/* https://philipwalton.github.io/solved-by-flexbox/demos/input-add-ons/ */\\n\\n.InputAddOn {\\n display: flex;\\n margin-bottom: 1.5em;\\n}\\n\\n.InputAddOn-field {\\n flex: 1 1;\\n}\\n\\n.InputAddOn-field:not(:first-child) {\\n border-left: 0;\\n}\\n\\n.InputAddOn-field:not(:last-child) {\\n border-right: 0;\\n}\\n\\n.InputAddOn-item {\\n background-color: rgba(147, 128, 108, 0.1);\\n color: #666666;\\n font: inherit;\\n font-weight: normal;\\n}\\n\\n.InputAddOn-field,\\n.InputAddOn-item {\\n border: 1px solid rgba(147, 128, 108, 0.25);\\n padding: 0.5em 0.75em;\\n}\\n\\n.InputAddOn-field:first-child,\\n.InputAddOn-item:first-child {\\n border-radius: 2px 0 0 2px;\\n}\\n\\n.InputAddOn-field:last-child,\\n.InputAddOn-item:last-child {\\n border-radius: 0 2px 2px 0;\\n}\\n\\n/* fontello */\\n\\n[class^=\\\"icon-\\\"]:before, [class*=\\\" icon-\\\"]:before {\\n font-family: \\\"fontello\\\";\\n font-style: normal;\\n font-weight: normal;\\n speak: never;\\n\\n display: inline-block;\\n text-decoration: inherit;\\n width: 1em;\\n margin-right: .2em;\\n text-align: center;\\n /* opacity: .8; */\\n\\n /* For safety - reset parent styles, that can break glyph codes*/\\n font-feature-settings: normal;\\n font-variant: normal;\\n text-transform: none;\\n\\n /* fix buttons height, for twitter bootstrap */\\n line-height: 1em;\\n\\n /* Animation center compensation - margins should be symmetric */\\n /* remove if not needed */\\n margin-left: .2em;\\n\\n /* you can be more comfortable with increased icons size */\\n /* font-size: 120%; */\\n\\n /* Font smoothing. That was taken from TWBS */\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n\\n /* Uncomment for 3D effect */\\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\\n}\\n\\n.icon-left:before { content: '\\\\f177'; }\\n\\n/* '' */\\n\\n.icon-search:before { content: '🔍'; }\\n\\n/* '\\\\1f50d' */\\n\\n.tools {\\n background-color: black;\\n /* width: 5%; */\\n flex: 1 1;\\n min-width: -webkit-fit-content;\\n min-width: -moz-fit-content;\\n min-width: fit-content;\\n min-height: -webkit-fit-content;\\n min-height: -moz-fit-content;\\n min-height: fit-content;\\n height: auto;\\n overflow: scroll;\\n z-index: 2;\\n}\\n\\n.tools-wrapper {\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-around;\\n}\\n\\n.tools-wrapper div {\\n max-width: 50px;\\n width: 100%;\\n margin: auto;\\n }\\n\\n.mobile-screen {\\n background-color: #B39964;\\n}\\n\\n#wwl-logo {\\n display: none;\\n}\\n\\n.textImagePic path {\\n fill: #B39964;\\n}\\n\\n.tooltip-width {\\n min-width: 120px;\\n}\\n\\n#wwl-logo {\\n display: block;\\n}\\n\\n@media all and (orientation:portrait) {\\n .tools {\\n flex: 1 1;\\n width: 100%;\\n min-height: 40px;\\n }\\n .tools-wrapper {\\n width: 100%;\\n flex-direction: row;\\n justify-content: space-around;\\n align-items: flex-end;\\n /* min-height: fit-content; */\\n min-width: -webkit-fit-content;\\n min-width: -moz-fit-content;\\n min-width: fit-content;\\n }\\n .tools-wrapper > div {\\n margin-top: 0;\\n width: 30px;\\n height: 30px;\\n display: contents;\\n }\\n .tools-wrapper div div {\\n display: inline;\\n }\\n #wwl-logo {\\n display: none;\\n }\\n /* #textImageIcon {\\n display: none;\\n } */\\n}\\n\\n@media all and (max-width: 1200px) {\\n #wwl-logo {\\n display: none;\\n }\\n}\\n\\n.engraving {\\n width: 60%;\\n z-index: 2;\\n overflow: scroll;\\n}\\n\\n.engravingWrapper {\\n height: 100%;\\n background-color: #f3f3f3;\\n padding: 20px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.engravingHeader {\\n display: block;\\n text-align: right;\\n padding-bottom: 20px;\\n height: 50px;\\n}\\n\\n.engravingHeader .divAsButton,\\n.engravingHeader .disabled,\\n.engravingHeader .selected {\\n font-family: lato-bold;\\n border: 1px solid #000;\\n padding: 5px 7px;\\n display: inline-block;\\n font-weight: 900;\\n text-align: center;\\n}\\n\\n.engravingArea {\\n /* display: inline-block; */\\n float: left;\\n white-space: nowrap;\\n}\\n\\n.divAsButton:hover {\\n color: #fff;\\n background-color: #666;\\n cursor: pointer;\\n}\\n\\n.selected {\\n color: #fff;\\n background-color: #000;\\n}\\n\\n.selected:hover {\\n cursor: pointer;\\n}\\n\\n.engravingBody {\\n height: calc(100vh - 150px);\\n min-height: 150px;\\n overflow: scroll;\\n}\\n\\n.engravingFooter {\\n padding: 20px 0;\\n height: 100px;\\n}\\n\\n.wagenButton {\\n display: inline-block;\\n}\\n\\n.buttonToChart {\\n background-color: #000;\\n color: #fff;\\n padding: 5px 7px;\\n border: 1px solid #000;\\n font-family: lato-bold;\\n font-size: 13px;\\n float: right;\\n}\\n\\n.buttonToChart:hover {\\n cursor: pointer;\\n}\\n\\n.spinner {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 120px;\\n height: 120px;\\n margin:-60px 0 0 -60px;\\n -webkit-animation:spin 4s linear infinite;\\n animation:spin 4s linear infinite;\\n}\\n\\n@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }\\n\\n@keyframes spin { 100% { transform:rotate(360deg); }\\n}\\n\\n.popup-overlay {\\n background-color: #4e4e4e !important;\\n}\\n\\n.canvas-container {\\n margin: 0 auto;\\n}\\n\\n.popup-container {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-around;\\n}\\n\\n.vertical-div {\\n -ms-writing-mode: tb-rl;\\n writing-mode: vertical-rl;\\n -webkit-text-orientation: mixed;\\n text-orientation: mixed;\\n margin: auto;\\n}\\n\\n@media all and (orientation:portrait) {\\n .engravingArea {\\n display: inline;\\n margin: auto;\\n /* float: left; */\\n }\\n .engraving {\\n width: 100%;\\n flex: 16 1;\\n overflow: scroll;\\n }\\n #Fcanvas {\\n height: auto !important;\\n position: unset;\\n }\\n #Bcanvas {\\n height: auto !important;\\n position: unset;\\n }\\n .vertical-div {\\n -ms-writing-mode: lr-tb !important;\\n writing-mode: horizontal-tb !important;\\n }\\n .zommDiv {\\n flex-direction: column;\\n }\\n}\\n\\n@media screen and (orientation: landscape) and (max-height: 768px) {\\n .canvas-container {\\n transform: scale(0.8);\\n width: unset !important;\\n height: unset !important;\\n left: -60px;\\n }\\n}\\n\\n@media screen and (orientation: landscape) and (max-height: 649px) {\\n .canvas-container {\\n transform: scale(0.65);\\n width: unset !important;\\n height: unset !important;\\n }\\n\\n}\\n\\n@media all and (max-width: 768px) {\\n .canvas-container {\\n transform: scale(0.5);\\n width: unset !important;\\n height: unset !important;\\n }\\n\\n}\\n\\n@media screen and (max-width: 768px) and (orientation: portrait) {\\n .canvas-container {\\n transform: scale(0.7);\\n width: unset !important;\\n height: unset !important;\\n left: -35px;\\n }\\n}\\n\\n.popup {\\n position: fixed;\\n max-width: 80%;\\n max-height: 40%;\\n height: auto;\\n top: 20%;\\n left: 0;\\n right: 0;\\n margin: auto;\\n background-color: white;\\n border: solid 2px black;\\n font-family: lato-black;\\n text-align: center;\\n}\\n\\n.popup_close {\\n position: absolute;\\n top: 1%;\\n right: 1%;\\n height: 20px;\\n width: 20px;\\n border: none;\\n background-color: white;\\n font-size: x-large;\\n}\\n\\n.popup_inner {\\n left: 10%;\\n right: 10%;\\n top: 10%;\\n bottom: 10%;\\n margin: auto;\\n background: white;\\n height: auto;\\n padding: 10% 10%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"../Components/style/AppStyle.css\",\"../Components/style/content.css\",\"../Components/style/tools.css\",\"../Components/style/engraving.css\",\"../Components/style/popup.css\"],\"names\":[],\"mappings\":\"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\",\"file\":\"index.css\",\"sourcesContent\":[\"* {\\n padding: 0;\\n margin: 0;\\n box-sizing: border-box;\\n}\\n\\nbody {\\n font-family: 'lato-regular';\\n height: 100%;\\n font-size: 13px;\\n line-height: 1.4em;\\n}\\n\\n\\n\\n.Container {\\n width: 100%;\\n height: 100vh;\\n display: flex;\\n}\\n\\n.ContainerChild {\\n display: flex;\\n flex-direction: column;\\n}\\n.block-mobile {\\n display: none;\\n}\\n\\n\\n\\n@media all and (orientation:portrait) {\\n .Container {\\n flex-direction: column;\\n }\\n .ContainerChild {\\n width: 100%;\\n }\\n}\\n\\n\\n\\n@media screen and (max-width: 767px){\\n /* .Container {\\n display: none;\\n }\\n .block-mobile {\\n display: block;\\n width: 100%;\\n height: 100%;\\n z-index: 10;\\n position: relative;\\n top: 0;\\n left: 0;\\n background-color: white;\\n }\\n .tools {\\n min-height: 0px;\\n } */\\n}\\n\",\".content-options {\\n width: 35%;\\n height: 100%;\\n}\\n.content-wrapper {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n height: 100%;\\n}\\n\\n.text-options {\\n width: 90%;\\n height: 80%;\\n margin: auto;\\n}\\n\\n.text-options > div > div {\\n padding: 10px 0;\\n}\\n\\n.text-options .rangeArea,\\n.text-options .font-area {\\n font-size: 10px;\\n font-family: lato-black;\\n}\\n\\n.rangeArea div {\\n display: flex;\\n /* flex-direction: column; */\\n align-items: center;\\n}\\n.rangeArea span {\\n width: 35%;\\n}\\n.rangeArea input {\\n width: 60%;\\n}\\n.rangeArea label {\\n width: 10%;\\n text-align: center;\\n}\\n\\ninput[type='range'] {\\n -webkit-appearance: none;\\n height: 2px;\\n border-radius: 4px;\\n margin-bottom: 15px;\\n background-color: black;\\n margin: auto;\\n\\n}\\n\\ninput[type='range']::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n width: 18px;\\n height: 18px;\\n border-radius: 10px;\\n background-color: #b39964 ;\\n overflow: visible;\\n cursor: pointer;\\n }\\n\\n.font-area {\\n margin-bottom: 10px;\\n}\\n\\n.font-area div {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.font-area span {\\n width: 25% !important;\\n}\\n.font-area div div {\\n width: 75% !important;\\n}\\n\\n.svgContainer svg {\\n width: 30px;\\n height: 30px;\\n}\\n\\n.slectContainer {\\n width: 70%;\\n border: none;\\n font-size: 1.7em;\\n margin-left: 8%;\\n}\\n\\n.disabled {\\n background-color: #ccc;\\n}\\n\\n.sendButton {\\n display: flex;\\n}\\n\\n.sendButton label,\\n.sendButton span,\\n.mobileButton {\\n font-family: lato-bold;\\n margin: auto;\\n color: black;\\n margin-top: 3px;\\n border: 1px solid #000;\\n padding: 5px 7px;\\n text-align: center;\\n display: inline-block;\\n text-transform: uppercase;\\n}\\n\\n.sendButton span:hover {\\n color: white;\\n background-color: black;\\n cursor: pointer;\\n}\\n\\n.image-options {\\n height: 100%;\\n text-align: center;\\n}\\n\\n\\n.refused {\\n height: 500px;\\n padding: 20px;\\n\\n}\\n\\n.refused span {\\n margin: 10px;\\n text-align: left;\\n display: block;\\n}\\n\\n.accepted div span {\\n display: block;\\n}\\n\\n.uploadArea {\\n padding: 20px;\\n text-align: left;\\n font-size: 10px;\\n}\\n\\n\\ninput[type=\\\"file\\\"] {\\n display: none;\\n}\\n.custom-file-upload {\\n border: 1px dashed #000;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n padding: 5px 7px;\\n cursor: pointer;\\n width: 75%;\\n height: 50px;\\n margin: 20px auto;\\n text-transform: uppercase;\\n font-family: lato-bold;\\n}\\n.custom-file-upload div {\\n margin-right: 5px;\\n}\\n\\n.black {\\n background-color: black;\\n}\\n\\n.canvasContiner {\\n width: auto;\\n max-height: calc(100vh - 350px);\\n max-width: 95%;\\n}\\n\\n.contrast-area {\\n display: flex;\\n width: 80%;\\n margin: auto;\\n margin-top: 15px;\\n margin-bottom: 15px;\\n}\\n.closeImageOption {\\n display: none;\\n}\\n\\n.hide-content-button {\\n display: none;\\n}\\n\\n.gallery-wrapper {\\n height: 100%;\\n position: relative;\\n}\\n\\n.gallery-container {\\n overflow-y: scroll;\\n max-height: 100%;\\n}\\n\\n.gallery-options {\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.gallery-image {\\n width: 24%;\\n margin: 0.5%;\\n}\\n\\n.gallery-empty {\\n margin-left: 10px;\\n}\\n\\n.gallery-category {\\n width: 49%;\\n margin: 0.5%;\\n display: block;\\n padding: 40px 15px;\\n background: #ecf0f1;\\n cursor: pointer;\\n text-align: center;\\n font-size: 16px;\\n}\\n.gallery-category:hover {\\n background: #cfd9db;\\n}\\n\\n.sticky {\\n position: -webkit-sticky; /* Safari */\\n position: sticky;\\n top: 0;\\n}\\n\\n@media all and (orientation:portrait) {\\n #content {\\n flex: 2;\\n height: 100vh;\\n width: 100%;\\n position: fixed;\\n z-index: -1;\\n background-color: white;\\n opacity: 0.8;\\n }\\n\\n .hide-content-button {\\n display: block;\\n font-size: x-large;\\n text-align: right;\\n margin: 10px 10px 0 0;\\n }\\n}\\n\\n.searchbox {\\n margin: 10px;\\n}\\n\\n.back-button {\\n cursor: pointer;\\n background-color: #f3f3f3 !important;\\n}\\n\\n.image-options,\\n.text-options {\\n overflow: scroll;\\n}\\n\\n#gallery-preview {\\n position: absolute;\\n display: none;\\n left: 100%;\\n margin: 20px;\\n\\n background: #fff;\\n border: 1px solid #bbb;\\n border-radius: 4px;\\n padding: 10px;\\n text-align: center;\\n}\\n\\n#gallery-preview img {\\n width: 300px;\\n}\\n\\n#gallery-preview span {\\n font-size: 17px;\\n}\\n\\n#gallery-preview.show {\\n display: block;\\n}\\n\\n/* Input addons, based on */\\n/* https://philipwalton.github.io/solved-by-flexbox/demos/input-add-ons/ */\\n.InputAddOn {\\n display: flex;\\n margin-bottom: 1.5em;\\n}\\n\\n.InputAddOn-field {\\n flex: 1;\\n}\\n.InputAddOn-field:not(:first-child) {\\n border-left: 0;\\n}\\n.InputAddOn-field:not(:last-child) {\\n border-right: 0;\\n}\\n\\n.InputAddOn-item {\\n background-color: rgba(147, 128, 108, 0.1);\\n color: #666666;\\n font: inherit;\\n font-weight: normal;\\n}\\n\\n.InputAddOn-field,\\n.InputAddOn-item {\\n border: 1px solid rgba(147, 128, 108, 0.25);\\n padding: 0.5em 0.75em;\\n}\\n.InputAddOn-field:first-child,\\n.InputAddOn-item:first-child {\\n border-radius: 2px 0 0 2px;\\n}\\n.InputAddOn-field:last-child,\\n.InputAddOn-item:last-child {\\n border-radius: 0 2px 2px 0;\\n}\\n\\n\\n/* fontello */\\n[class^=\\\"icon-\\\"]:before, [class*=\\\" icon-\\\"]:before {\\n font-family: \\\"fontello\\\";\\n font-style: normal;\\n font-weight: normal;\\n speak: never;\\n\\n display: inline-block;\\n text-decoration: inherit;\\n width: 1em;\\n margin-right: .2em;\\n text-align: center;\\n /* opacity: .8; */\\n\\n /* For safety - reset parent styles, that can break glyph codes*/\\n font-variant: normal;\\n text-transform: none;\\n\\n /* fix buttons height, for twitter bootstrap */\\n line-height: 1em;\\n\\n /* Animation center compensation - margins should be symmetric */\\n /* remove if not needed */\\n margin-left: .2em;\\n\\n /* you can be more comfortable with increased icons size */\\n /* font-size: 120%; */\\n\\n /* Font smoothing. That was taken from TWBS */\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n\\n /* Uncomment for 3D effect */\\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\\n}\\n\\n.icon-left:before { content: '\\\\f177'; } /* '' */\\n.icon-search:before { content: '🔍'; } /* '\\\\1f50d' */\\n\",\".tools {\\n background-color: black;\\n /* width: 5%; */\\n flex: 1;\\n min-width: fit-content;\\n min-height: fit-content;\\n height: auto;\\n overflow: scroll;\\n z-index: 2;\\n}\\n\\n.tools-wrapper {\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-around;\\n}\\n.tools-wrapper div {\\n max-width: 50px;\\n width: 100%;\\n margin: auto;\\n }\\n\\n.mobile-screen {\\n background-color: #B39964;\\n}\\n#wwl-logo {\\n display: none;\\n}\\n\\n\\n.textImagePic path {\\n fill: #B39964;\\n}\\n\\n.tooltip-width {\\n min-width: 120px;\\n}\\n\\n#wwl-logo {\\n display: block;\\n}\\n\\n\\n@media all and (orientation:portrait) {\\n .tools {\\n flex: 1;\\n width: 100%;\\n min-height: 40px;\\n }\\n .tools-wrapper {\\n width: 100%;\\n flex-direction: row;\\n justify-content: space-around;\\n align-items: flex-end;\\n /* min-height: fit-content; */\\n min-width: fit-content;\\n }\\n .tools-wrapper > div {\\n margin-top: 0;\\n width: 30px;\\n height: 30px;\\n display: contents;\\n }\\n .tools-wrapper div div {\\n display: inline;\\n }\\n #wwl-logo {\\n display: none;\\n }\\n /* #textImageIcon {\\n display: none;\\n } */\\n}\\n\\n@media all and (max-width: 1200px) {\\n #wwl-logo {\\n display: none;\\n }\\n}\",\".engraving {\\n width: 60%;\\n z-index: 2;\\n overflow: scroll;\\n}\\n.engravingWrapper {\\n height: 100%;\\n background-color: #f3f3f3;\\n padding: 20px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.engravingHeader {\\n display: block;\\n text-align: right;\\n padding-bottom: 20px;\\n height: 50px;\\n}\\n\\n.engravingHeader .divAsButton,\\n.engravingHeader .disabled,\\n.engravingHeader .selected {\\n font-family: lato-bold;\\n border: 1px solid #000;\\n padding: 5px 7px;\\n display: inline-block;\\n font-weight: 900;\\n text-align: center;\\n}\\n\\n.engravingArea {\\n /* display: inline-block; */\\n float: left;\\n white-space: nowrap;\\n}\\n\\n.divAsButton:hover {\\n color: #fff;\\n background-color: #666;\\n cursor: pointer;\\n}\\n\\n.selected {\\n color: #fff;\\n background-color: #000;\\n}\\n\\n.selected:hover {\\n cursor: pointer;\\n}\\n\\n.engravingBody {\\n height: calc(100vh - 150px);\\n min-height: 150px;\\n overflow: scroll;\\n}\\n\\n.engravingFooter {\\n padding: 20px 0;\\n height: 100px;\\n}\\n\\n.wagenButton {\\n display: inline-block;\\n}\\n\\n.buttonToChart {\\n background-color: #000;\\n color: #fff;\\n padding: 5px 7px;\\n border: 1px solid #000;\\n font-family: lato-bold;\\n font-size: 13px;\\n float: right;\\n}\\n\\n.buttonToChart:hover {\\n cursor: pointer;\\n}\\n\\n.spinner {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n width: 120px;\\n height: 120px;\\n margin:-60px 0 0 -60px;\\n -webkit-animation:spin 4s linear infinite;\\n -moz-animation:spin 4s linear infinite;\\n animation:spin 4s linear infinite;\\n}\\n @-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }\\n @-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }\\n @keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); }\\n}\\n\\n.popup-overlay {\\n background-color: #4e4e4e !important;\\n}\\n\\n.canvas-container {\\n margin: 0 auto;\\n}\\n\\n.popup-container {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-around;\\n}\\n\\n.vertical-div {\\n writing-mode: vertical-rl;\\n text-orientation: mixed;\\n margin: auto;\\n}\\n\\n@media all and (orientation:portrait) {\\n .engravingArea {\\n display: inline;\\n margin: auto;\\n /* float: left; */\\n }\\n .engraving {\\n width: 100%;\\n flex: 16;\\n overflow: scroll;\\n }\\n #Fcanvas {\\n height: auto !important;\\n position: unset;\\n }\\n #Bcanvas {\\n height: auto !important;\\n position: unset;\\n }\\n .vertical-div {\\n writing-mode: horizontal-tb !important;\\n }\\n .zommDiv {\\n flex-direction: column;\\n }\\n}\\n\\n\\n@media screen and (orientation: landscape) and (max-height: 768px) {\\n .canvas-container {\\n transform: scale(0.8);\\n width: unset !important;\\n height: unset !important;\\n left: -60px;\\n }\\n}\\n@media screen and (orientation: landscape) and (max-height: 649px) {\\n .canvas-container {\\n transform: scale(0.65);\\n width: unset !important;\\n height: unset !important;\\n }\\n\\n}\\n\\n@media all and (max-width: 768px) {\\n .canvas-container {\\n transform: scale(0.5);\\n width: unset !important;\\n height: unset !important;\\n }\\n\\n}\\n\\n@media screen and (max-width: 768px) and (orientation: portrait) {\\n .canvas-container {\\n transform: scale(0.7);\\n width: unset !important;\\n height: unset !important;\\n left: -35px;\\n }\\n}\\n\",\".popup {\\n position: fixed;\\n max-width: 80%;\\n max-height: 40%;\\n height: auto;\\n top: 20%;\\n left: 0;\\n right: 0;\\n margin: auto;\\n background-color: white;\\n border: solid 2px black;\\n font-family: lato-black;\\n text-align: center;\\n}\\n\\n.popup_close {\\n position: absolute;\\n top: 1%;\\n right: 1%;\\n height: 20px;\\n width: 20px;\\n border: none;\\n background-color: white;\\n font-size: x-large;\\n}\\n\\n\\n.popup_inner {\\n left: 10%;\\n right: 10%;\\n top: 10%;\\n bottom: 10%;\\n margin: auto;\\n background: white;\\n height: auto;\\n padding: 10% 10%;\\n}\\n\"]}]);\n// Exports\nmodule.exports = exports;\n","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/** @license React v16.14.0\n * react-dom-server.browser.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar k = require(\"object-assign\"),\n l = require(\"react\");\n\nfunction q(a) {\n for (var b = \"https://reactjs.org/docs/error-decoder.html?invariant=\" + a, c = 1; c < arguments.length; c++) {\n b += \"&args[]=\" + encodeURIComponent(arguments[c]);\n }\n\n return \"Minified React error #\" + a + \"; visit \" + b + \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\";\n}\n\nvar t = \"function\" === typeof Symbol && Symbol.for,\n aa = t ? Symbol.for(\"react.portal\") : 60106,\n u = t ? Symbol.for(\"react.fragment\") : 60107,\n ba = t ? Symbol.for(\"react.strict_mode\") : 60108,\n ca = t ? Symbol.for(\"react.profiler\") : 60114,\n v = t ? Symbol.for(\"react.provider\") : 60109,\n da = t ? Symbol.for(\"react.context\") : 60110,\n ea = t ? Symbol.for(\"react.concurrent_mode\") : 60111,\n fa = t ? Symbol.for(\"react.forward_ref\") : 60112,\n B = t ? Symbol.for(\"react.suspense\") : 60113,\n ha = t ? Symbol.for(\"react.suspense_list\") : 60120,\n ia = t ? Symbol.for(\"react.memo\") : 60115,\n ja = t ? Symbol.for(\"react.lazy\") : 60116,\n ka = t ? Symbol.for(\"react.block\") : 60121,\n la = t ? Symbol.for(\"react.fundamental\") : 60117,\n ma = t ? Symbol.for(\"react.scope\") : 60119;\n\nfunction na(a) {\n if (-1 === a._status) {\n a._status = 0;\n var b = a._ctor;\n b = b();\n a._result = b;\n b.then(function (c) {\n 0 === a._status && (c = c.default, a._status = 1, a._result = c);\n }, function (c) {\n 0 === a._status && (a._status = 2, a._result = c);\n });\n }\n}\n\nfunction C(a) {\n if (null == a) return null;\n if (\"function\" === typeof a) return a.displayName || a.name || null;\n if (\"string\" === typeof a) return a;\n\n switch (a) {\n case u:\n return \"Fragment\";\n\n case aa:\n return \"Portal\";\n\n case ca:\n return \"Profiler\";\n\n case ba:\n return \"StrictMode\";\n\n case B:\n return \"Suspense\";\n\n case ha:\n return \"SuspenseList\";\n }\n\n if (\"object\" === _typeof(a)) switch (a.$$typeof) {\n case da:\n return \"Context.Consumer\";\n\n case v:\n return \"Context.Provider\";\n\n case fa:\n var b = a.render;\n b = b.displayName || b.name || \"\";\n return a.displayName || (\"\" !== b ? \"ForwardRef(\" + b + \")\" : \"ForwardRef\");\n\n case ia:\n return C(a.type);\n\n case ka:\n return C(a.render);\n\n case ja:\n if (a = 1 === a._status ? a._result : null) return C(a);\n }\n return null;\n}\n\nvar D = l.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\nD.hasOwnProperty(\"ReactCurrentDispatcher\") || (D.ReactCurrentDispatcher = {\n current: null\n});\nD.hasOwnProperty(\"ReactCurrentBatchConfig\") || (D.ReactCurrentBatchConfig = {\n suspense: null\n});\nvar oa = {};\n\nfunction E(a, b) {\n for (var c = a._threadCount | 0; c <= b; c++) {\n a[c] = a._currentValue2, a._threadCount = c + 1;\n }\n}\n\nfunction pa(a, b, c, d) {\n if (d && (d = a.contextType, \"object\" === _typeof(d) && null !== d)) return E(d, c), d[c];\n\n if (a = a.contextTypes) {\n c = {};\n\n for (var f in a) {\n c[f] = b[f];\n }\n\n b = c;\n } else b = oa;\n\n return b;\n}\n\nfor (var F = new Uint16Array(16), H = 0; 15 > H; H++) {\n F[H] = H + 1;\n}\n\nF[15] = 0;\nvar qa = /^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,\n ra = Object.prototype.hasOwnProperty,\n sa = {},\n ta = {};\n\nfunction ua(a) {\n if (ra.call(ta, a)) return !0;\n if (ra.call(sa, a)) return !1;\n if (qa.test(a)) return ta[a] = !0;\n sa[a] = !0;\n return !1;\n}\n\nfunction va(a, b, c, d) {\n if (null !== c && 0 === c.type) return !1;\n\n switch (_typeof(b)) {\n case \"function\":\n case \"symbol\":\n return !0;\n\n case \"boolean\":\n if (d) return !1;\n if (null !== c) return !c.acceptsBooleans;\n a = a.toLowerCase().slice(0, 5);\n return \"data-\" !== a && \"aria-\" !== a;\n\n default:\n return !1;\n }\n}\n\nfunction wa(a, b, c, d) {\n if (null === b || \"undefined\" === typeof b || va(a, b, c, d)) return !0;\n if (d) return !1;\n if (null !== c) switch (c.type) {\n case 3:\n return !b;\n\n case 4:\n return !1 === b;\n\n case 5:\n return isNaN(b);\n\n case 6:\n return isNaN(b) || 1 > b;\n }\n return !1;\n}\n\nfunction J(a, b, c, d, f, g) {\n this.acceptsBooleans = 2 === b || 3 === b || 4 === b;\n this.attributeName = d;\n this.attributeNamespace = f;\n this.mustUseProperty = c;\n this.propertyName = a;\n this.type = b;\n this.sanitizeURL = g;\n}\n\nvar K = {};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function (a) {\n K[a] = new J(a, 0, !1, a, null, !1);\n});\n[[\"acceptCharset\", \"accept-charset\"], [\"className\", \"class\"], [\"htmlFor\", \"for\"], [\"httpEquiv\", \"http-equiv\"]].forEach(function (a) {\n var b = a[0];\n K[b] = new J(b, 1, !1, a[1], null, !1);\n});\n[\"contentEditable\", \"draggable\", \"spellCheck\", \"value\"].forEach(function (a) {\n K[a] = new J(a, 2, !1, a.toLowerCase(), null, !1);\n});\n[\"autoReverse\", \"externalResourcesRequired\", \"focusable\", \"preserveAlpha\"].forEach(function (a) {\n K[a] = new J(a, 2, !1, a, null, !1);\n});\n\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function (a) {\n K[a] = new J(a, 3, !1, a.toLowerCase(), null, !1);\n});\n[\"checked\", \"multiple\", \"muted\", \"selected\"].forEach(function (a) {\n K[a] = new J(a, 3, !0, a, null, !1);\n});\n[\"capture\", \"download\"].forEach(function (a) {\n K[a] = new J(a, 4, !1, a, null, !1);\n});\n[\"cols\", \"rows\", \"size\", \"span\"].forEach(function (a) {\n K[a] = new J(a, 6, !1, a, null, !1);\n});\n[\"rowSpan\", \"start\"].forEach(function (a) {\n K[a] = new J(a, 5, !1, a.toLowerCase(), null, !1);\n});\nvar L = /[\\-:]([a-z])/g;\n\nfunction M(a) {\n return a[1].toUpperCase();\n}\n\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function (a) {\n var b = a.replace(L, M);\n K[b] = new J(b, 1, !1, a, null, !1);\n});\n\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function (a) {\n var b = a.replace(L, M);\n K[b] = new J(b, 1, !1, a, \"http://www.w3.org/1999/xlink\", !1);\n});\n[\"xml:base\", \"xml:lang\", \"xml:space\"].forEach(function (a) {\n var b = a.replace(L, M);\n K[b] = new J(b, 1, !1, a, \"http://www.w3.org/XML/1998/namespace\", !1);\n});\n[\"tabIndex\", \"crossOrigin\"].forEach(function (a) {\n K[a] = new J(a, 1, !1, a.toLowerCase(), null, !1);\n});\nK.xlinkHref = new J(\"xlinkHref\", 1, !1, \"xlink:href\", \"http://www.w3.org/1999/xlink\", !0);\n[\"src\", \"href\", \"action\", \"formAction\"].forEach(function (a) {\n K[a] = new J(a, 1, !1, a.toLowerCase(), null, !0);\n});\nvar xa = /[\"'&<>]/;\n\nfunction N(a) {\n if (\"boolean\" === typeof a || \"number\" === typeof a) return \"\" + a;\n a = \"\" + a;\n var b = xa.exec(a);\n\n if (b) {\n var c = \"\",\n d,\n f = 0;\n\n for (d = b.index; d < a.length; d++) {\n switch (a.charCodeAt(d)) {\n case 34:\n b = \""\";\n break;\n\n case 38:\n b = \"&\";\n break;\n\n case 39:\n b = \"'\";\n break;\n\n case 60:\n b = \"<\";\n break;\n\n case 62:\n b = \">\";\n break;\n\n default:\n continue;\n }\n\n f !== d && (c += a.substring(f, d));\n f = d + 1;\n c += b;\n }\n\n a = f !== d ? c + a.substring(f, d) : c;\n }\n\n return a;\n}\n\nfunction ya(a, b) {\n var c = K.hasOwnProperty(a) ? K[a] : null;\n var d;\n if (d = \"style\" !== a) d = null !== c ? 0 === c.type : !(2 < a.length) || \"o\" !== a[0] && \"O\" !== a[0] || \"n\" !== a[1] && \"N\" !== a[1] ? !1 : !0;\n if (d || wa(a, b, c, !1)) return \"\";\n\n if (null !== c) {\n a = c.attributeName;\n d = c.type;\n if (3 === d || 4 === d && !0 === b) return a + '=\"\"';\n c.sanitizeURL && (b = \"\" + b);\n return a + '=\"' + (N(b) + '\"');\n }\n\n return ua(a) ? a + '=\"' + (N(b) + '\"') : \"\";\n}\n\nfunction za(a, b) {\n return a === b && (0 !== a || 1 / a === 1 / b) || a !== a && b !== b;\n}\n\nvar Aa = \"function\" === typeof Object.is ? Object.is : za,\n O = null,\n P = null,\n Q = null,\n R = !1,\n S = !1,\n U = null,\n V = 0;\n\nfunction W() {\n if (null === O) throw Error(q(321));\n return O;\n}\n\nfunction Ba() {\n if (0 < V) throw Error(q(312));\n return {\n memoizedState: null,\n queue: null,\n next: null\n };\n}\n\nfunction Ca() {\n null === Q ? null === P ? (R = !1, P = Q = Ba()) : (R = !0, Q = P) : null === Q.next ? (R = !1, Q = Q.next = Ba()) : (R = !0, Q = Q.next);\n return Q;\n}\n\nfunction Da(a, b, c, d) {\n for (; S;) {\n S = !1, V += 1, Q = null, c = a(b, d);\n }\n\n P = O = null;\n V = 0;\n Q = U = null;\n return c;\n}\n\nfunction Ea(a, b) {\n return \"function\" === typeof b ? b(a) : b;\n}\n\nfunction Fa(a, b, c) {\n O = W();\n Q = Ca();\n\n if (R) {\n var d = Q.queue;\n b = d.dispatch;\n\n if (null !== U && (c = U.get(d), void 0 !== c)) {\n U.delete(d);\n d = Q.memoizedState;\n\n do {\n d = a(d, c.action), c = c.next;\n } while (null !== c);\n\n Q.memoizedState = d;\n return [d, b];\n }\n\n return [Q.memoizedState, b];\n }\n\n a = a === Ea ? \"function\" === typeof b ? b() : b : void 0 !== c ? c(b) : b;\n Q.memoizedState = a;\n a = Q.queue = {\n last: null,\n dispatch: null\n };\n a = a.dispatch = Ga.bind(null, O, a);\n return [Q.memoizedState, a];\n}\n\nfunction Ga(a, b, c) {\n if (!(25 > V)) throw Error(q(301));\n if (a === O) if (S = !0, a = {\n action: c,\n next: null\n }, null === U && (U = new Map()), c = U.get(b), void 0 === c) U.set(b, a);else {\n for (b = c; null !== b.next;) {\n b = b.next;\n }\n\n b.next = a;\n }\n}\n\nfunction Ha() {}\n\nvar X = 0,\n Ia = {\n readContext: function readContext(a) {\n var b = X;\n E(a, b);\n return a[b];\n },\n useContext: function useContext(a) {\n W();\n var b = X;\n E(a, b);\n return a[b];\n },\n useMemo: function useMemo(a, b) {\n O = W();\n Q = Ca();\n b = void 0 === b ? null : b;\n\n if (null !== Q) {\n var c = Q.memoizedState;\n\n if (null !== c && null !== b) {\n a: {\n var d = c[1];\n if (null === d) d = !1;else {\n for (var f = 0; f < d.length && f < b.length; f++) {\n if (!Aa(b[f], d[f])) {\n d = !1;\n break a;\n }\n }\n\n d = !0;\n }\n }\n\n if (d) return c[0];\n }\n }\n\n a = a();\n Q.memoizedState = [a, b];\n return a;\n },\n useReducer: Fa,\n useRef: function useRef(a) {\n O = W();\n Q = Ca();\n var b = Q.memoizedState;\n return null === b ? (a = {\n current: a\n }, Q.memoizedState = a) : b;\n },\n useState: function useState(a) {\n return Fa(Ea, a);\n },\n useLayoutEffect: function useLayoutEffect() {},\n useCallback: function useCallback(a) {\n return a;\n },\n useImperativeHandle: Ha,\n useEffect: Ha,\n useDebugValue: Ha,\n useResponder: function useResponder(a, b) {\n return {\n props: b,\n responder: a\n };\n },\n useDeferredValue: function useDeferredValue(a) {\n W();\n return a;\n },\n useTransition: function useTransition() {\n W();\n return [function (a) {\n a();\n }, !1];\n }\n},\n Ja = {\n html: \"http://www.w3.org/1999/xhtml\",\n mathml: \"http://www.w3.org/1998/Math/MathML\",\n svg: \"http://www.w3.org/2000/svg\"\n};\n\nfunction Ka(a) {\n switch (a) {\n case \"svg\":\n return \"http://www.w3.org/2000/svg\";\n\n case \"math\":\n return \"http://www.w3.org/1998/Math/MathML\";\n\n default:\n return \"http://www.w3.org/1999/xhtml\";\n }\n}\n\nvar La = {\n area: !0,\n base: !0,\n br: !0,\n col: !0,\n embed: !0,\n hr: !0,\n img: !0,\n input: !0,\n keygen: !0,\n link: !0,\n meta: !0,\n param: !0,\n source: !0,\n track: !0,\n wbr: !0\n},\n Ma = k({\n menuitem: !0\n}, La),\n Y = {\n animationIterationCount: !0,\n borderImageOutset: !0,\n borderImageSlice: !0,\n borderImageWidth: !0,\n boxFlex: !0,\n boxFlexGroup: !0,\n boxOrdinalGroup: !0,\n columnCount: !0,\n columns: !0,\n flex: !0,\n flexGrow: !0,\n flexPositive: !0,\n flexShrink: !0,\n flexNegative: !0,\n flexOrder: !0,\n gridArea: !0,\n gridRow: !0,\n gridRowEnd: !0,\n gridRowSpan: !0,\n gridRowStart: !0,\n gridColumn: !0,\n gridColumnEnd: !0,\n gridColumnSpan: !0,\n gridColumnStart: !0,\n fontWeight: !0,\n lineClamp: !0,\n lineHeight: !0,\n opacity: !0,\n order: !0,\n orphans: !0,\n tabSize: !0,\n widows: !0,\n zIndex: !0,\n zoom: !0,\n fillOpacity: !0,\n floodOpacity: !0,\n stopOpacity: !0,\n strokeDasharray: !0,\n strokeDashoffset: !0,\n strokeMiterlimit: !0,\n strokeOpacity: !0,\n strokeWidth: !0\n},\n Na = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\nObject.keys(Y).forEach(function (a) {\n Na.forEach(function (b) {\n b = b + a.charAt(0).toUpperCase() + a.substring(1);\n Y[b] = Y[a];\n });\n});\nvar Oa = /([A-Z])/g,\n Pa = /^ms-/,\n Z = l.Children.toArray,\n Qa = D.ReactCurrentDispatcher,\n Ra = {\n listing: !0,\n pre: !0,\n textarea: !0\n},\n Sa = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,\n Ta = {},\n Ua = {};\n\nfunction Va(a) {\n if (void 0 === a || null === a) return a;\n var b = \"\";\n l.Children.forEach(a, function (a) {\n null != a && (b += a);\n });\n return b;\n}\n\nvar Wa = Object.prototype.hasOwnProperty,\n Xa = {\n children: null,\n dangerouslySetInnerHTML: null,\n suppressContentEditableWarning: null,\n suppressHydrationWarning: null\n};\n\nfunction Ya(a, b) {\n if (void 0 === a) throw Error(q(152, C(b) || \"Component\"));\n}\n\nfunction Za(a, b, c) {\n function d(d, g) {\n var e = g.prototype && g.prototype.isReactComponent,\n f = pa(g, b, c, e),\n x = [],\n h = !1,\n m = {\n isMounted: function isMounted() {\n return !1;\n },\n enqueueForceUpdate: function enqueueForceUpdate() {\n if (null === x) return null;\n },\n enqueueReplaceState: function enqueueReplaceState(a, c) {\n h = !0;\n x = [c];\n },\n enqueueSetState: function enqueueSetState(a, c) {\n if (null === x) return null;\n x.push(c);\n }\n };\n\n if (e) {\n if (e = new g(d.props, f, m), \"function\" === typeof g.getDerivedStateFromProps) {\n var w = g.getDerivedStateFromProps.call(null, d.props, e.state);\n null != w && (e.state = k({}, e.state, w));\n }\n } else if (O = {}, e = g(d.props, f, m), e = Da(g, d.props, e, f), null == e || null == e.render) {\n a = e;\n Ya(a, g);\n return;\n }\n\n e.props = d.props;\n e.context = f;\n e.updater = m;\n m = e.state;\n void 0 === m && (e.state = m = null);\n if (\"function\" === typeof e.UNSAFE_componentWillMount || \"function\" === typeof e.componentWillMount) if (\"function\" === typeof e.componentWillMount && \"function\" !== typeof g.getDerivedStateFromProps && e.componentWillMount(), \"function\" === typeof e.UNSAFE_componentWillMount && \"function\" !== typeof g.getDerivedStateFromProps && e.UNSAFE_componentWillMount(), x.length) {\n m = x;\n var r = h;\n x = null;\n h = !1;\n if (r && 1 === m.length) e.state = m[0];else {\n w = r ? m[0] : e.state;\n var y = !0;\n\n for (r = r ? 1 : 0; r < m.length; r++) {\n var p = m[r];\n p = \"function\" === typeof p ? p.call(e, w, d.props, f) : p;\n null != p && (y ? (y = !1, w = k({}, w, p)) : k(w, p));\n }\n\n e.state = w;\n }\n } else x = null;\n a = e.render();\n Ya(a, g);\n\n if (\"function\" === typeof e.getChildContext && (d = g.childContextTypes, \"object\" === _typeof(d))) {\n var A = e.getChildContext();\n\n for (var T in A) {\n if (!(T in d)) throw Error(q(108, C(g) || \"Unknown\", T));\n }\n }\n\n A && (b = k({}, b, A));\n }\n\n for (; l.isValidElement(a);) {\n var f = a,\n g = f.type;\n if (\"function\" !== typeof g) break;\n d(f, g);\n }\n\n return {\n child: a,\n context: b\n };\n}\n\nvar $a = function () {\n function a(a, b) {\n l.isValidElement(a) ? a.type !== u ? a = [a] : (a = a.props.children, a = l.isValidElement(a) ? [a] : Z(a)) : a = Z(a);\n a = {\n type: null,\n domNamespace: Ja.html,\n children: a,\n childIndex: 0,\n context: oa,\n footer: \"\"\n };\n var c = F[0];\n\n if (0 === c) {\n var g = F;\n c = g.length;\n var d = 2 * c;\n if (!(65536 >= d)) throw Error(q(304));\n var h = new Uint16Array(d);\n h.set(g);\n F = h;\n F[0] = c + 1;\n\n for (g = c; g < d - 1; g++) {\n F[g] = g + 1;\n }\n\n F[d - 1] = 0;\n } else F[0] = F[c];\n\n this.threadID = c;\n this.stack = [a];\n this.exhausted = !1;\n this.currentSelectValue = null;\n this.previousWasTextNode = !1;\n this.makeStaticMarkup = b;\n this.suspenseDepth = 0;\n this.contextIndex = -1;\n this.contextStack = [];\n this.contextValueStack = [];\n }\n\n var b = a.prototype;\n\n b.destroy = function () {\n if (!this.exhausted) {\n this.exhausted = !0;\n this.clearProviders();\n var a = this.threadID;\n F[a] = F[0];\n F[0] = a;\n }\n };\n\n b.pushProvider = function (a) {\n var c = ++this.contextIndex,\n b = a.type._context,\n g = this.threadID;\n E(b, g);\n var x = b[g];\n this.contextStack[c] = b;\n this.contextValueStack[c] = x;\n b[g] = a.props.value;\n };\n\n b.popProvider = function () {\n var a = this.contextIndex,\n b = this.contextStack[a],\n f = this.contextValueStack[a];\n this.contextStack[a] = null;\n this.contextValueStack[a] = null;\n this.contextIndex--;\n b[this.threadID] = f;\n };\n\n b.clearProviders = function () {\n for (var a = this.contextIndex; 0 <= a; a--) {\n this.contextStack[a][this.threadID] = this.contextValueStack[a];\n }\n };\n\n b.read = function (a) {\n if (this.exhausted) return null;\n var b = X;\n X = this.threadID;\n var c = Qa.current;\n Qa.current = Ia;\n\n try {\n for (var g = [\"\"], x = !1; g[0].length < a;) {\n if (0 === this.stack.length) {\n this.exhausted = !0;\n var h = this.threadID;\n F[h] = F[0];\n F[0] = h;\n break;\n }\n\n var e = this.stack[this.stack.length - 1];\n\n if (x || e.childIndex >= e.children.length) {\n var I = e.footer;\n \"\" !== I && (this.previousWasTextNode = !1);\n this.stack.pop();\n if (\"select\" === e.type) this.currentSelectValue = null;else if (null != e.type && null != e.type.type && e.type.type.$$typeof === v) this.popProvider(e.type);else if (e.type === B) {\n this.suspenseDepth--;\n var G = g.pop();\n\n if (x) {\n x = !1;\n var n = e.fallbackFrame;\n if (!n) throw Error(q(303));\n this.stack.push(n);\n g[this.suspenseDepth] += \"\\x3c!--$!--\\x3e\";\n continue;\n } else g[this.suspenseDepth] += G;\n }\n g[this.suspenseDepth] += I;\n } else {\n var m = e.children[e.childIndex++],\n w = \"\";\n\n try {\n w += this.render(m, e.context, e.domNamespace);\n } catch (r) {\n if (null != r && \"function\" === typeof r.then) throw Error(q(294));\n throw r;\n } finally {}\n\n g.length <= this.suspenseDepth && g.push(\"\");\n g[this.suspenseDepth] += w;\n }\n }\n\n return g[0];\n } finally {\n Qa.current = c, X = b;\n }\n };\n\n b.render = function (a, b, f) {\n if (\"string\" === typeof a || \"number\" === typeof a) {\n f = \"\" + a;\n if (\"\" === f) return \"\";\n if (this.makeStaticMarkup) return N(f);\n if (this.previousWasTextNode) return \"\\x3c!-- --\\x3e\" + N(f);\n this.previousWasTextNode = !0;\n return N(f);\n }\n\n b = Za(a, b, this.threadID);\n a = b.child;\n b = b.context;\n if (null === a || !1 === a) return \"\";\n\n if (!l.isValidElement(a)) {\n if (null != a && null != a.$$typeof) {\n f = a.$$typeof;\n if (f === aa) throw Error(q(257));\n throw Error(q(258, f.toString()));\n }\n\n a = Z(a);\n this.stack.push({\n type: null,\n domNamespace: f,\n children: a,\n childIndex: 0,\n context: b,\n footer: \"\"\n });\n return \"\";\n }\n\n var c = a.type;\n if (\"string\" === typeof c) return this.renderDOM(a, b, f);\n\n switch (c) {\n case ba:\n case ea:\n case ca:\n case ha:\n case u:\n return a = Z(a.props.children), this.stack.push({\n type: null,\n domNamespace: f,\n children: a,\n childIndex: 0,\n context: b,\n footer: \"\"\n }), \"\";\n\n case B:\n throw Error(q(294));\n }\n\n if (\"object\" === _typeof(c) && null !== c) switch (c.$$typeof) {\n case fa:\n O = {};\n var d = c.render(a.props, a.ref);\n d = Da(c.render, a.props, d, a.ref);\n d = Z(d);\n this.stack.push({\n type: null,\n domNamespace: f,\n children: d,\n childIndex: 0,\n context: b,\n footer: \"\"\n });\n return \"\";\n\n case ia:\n return a = [l.createElement(c.type, k({\n ref: a.ref\n }, a.props))], this.stack.push({\n type: null,\n domNamespace: f,\n children: a,\n childIndex: 0,\n context: b,\n footer: \"\"\n }), \"\";\n\n case v:\n return c = Z(a.props.children), f = {\n type: a,\n domNamespace: f,\n children: c,\n childIndex: 0,\n context: b,\n footer: \"\"\n }, this.pushProvider(a), this.stack.push(f), \"\";\n\n case da:\n c = a.type;\n d = a.props;\n var h = this.threadID;\n E(c, h);\n c = Z(d.children(c[h]));\n this.stack.push({\n type: a,\n domNamespace: f,\n children: c,\n childIndex: 0,\n context: b,\n footer: \"\"\n });\n return \"\";\n\n case la:\n throw Error(q(338));\n\n case ja:\n switch (c = a.type, na(c), c._status) {\n case 1:\n return a = [l.createElement(c._result, k({\n ref: a.ref\n }, a.props))], this.stack.push({\n type: null,\n domNamespace: f,\n children: a,\n childIndex: 0,\n context: b,\n footer: \"\"\n }), \"\";\n\n case 2:\n throw c._result;\n\n default:\n throw Error(q(295));\n }\n\n case ma:\n throw Error(q(343));\n }\n throw Error(q(130, null == c ? c : _typeof(c), \"\"));\n };\n\n b.renderDOM = function (a, b, f) {\n var c = a.type.toLowerCase();\n f === Ja.html && Ka(c);\n\n if (!Ta.hasOwnProperty(c)) {\n if (!Sa.test(c)) throw Error(q(65, c));\n Ta[c] = !0;\n }\n\n var d = a.props;\n if (\"input\" === c) d = k({\n type: void 0\n }, d, {\n defaultChecked: void 0,\n defaultValue: void 0,\n value: null != d.value ? d.value : d.defaultValue,\n checked: null != d.checked ? d.checked : d.defaultChecked\n });else if (\"textarea\" === c) {\n var h = d.value;\n\n if (null == h) {\n h = d.defaultValue;\n var e = d.children;\n\n if (null != e) {\n if (null != h) throw Error(q(92));\n\n if (Array.isArray(e)) {\n if (!(1 >= e.length)) throw Error(q(93));\n e = e[0];\n }\n\n h = \"\" + e;\n }\n\n null == h && (h = \"\");\n }\n\n d = k({}, d, {\n value: void 0,\n children: \"\" + h\n });\n } else if (\"select\" === c) this.currentSelectValue = null != d.value ? d.value : d.defaultValue, d = k({}, d, {\n value: void 0\n });else if (\"option\" === c) {\n e = this.currentSelectValue;\n var I = Va(d.children);\n\n if (null != e) {\n var G = null != d.value ? d.value + \"\" : I;\n h = !1;\n if (Array.isArray(e)) for (var n = 0; n < e.length; n++) {\n if (\"\" + e[n] === G) {\n h = !0;\n break;\n }\n } else h = \"\" + e === G;\n d = k({\n selected: void 0,\n children: void 0\n }, d, {\n selected: h,\n children: I\n });\n }\n }\n\n if (h = d) {\n if (Ma[c] && (null != h.children || null != h.dangerouslySetInnerHTML)) throw Error(q(137, c, \"\"));\n\n if (null != h.dangerouslySetInnerHTML) {\n if (null != h.children) throw Error(q(60));\n if (!(\"object\" === _typeof(h.dangerouslySetInnerHTML) && \"__html\" in h.dangerouslySetInnerHTML)) throw Error(q(61));\n }\n\n if (null != h.style && \"object\" !== _typeof(h.style)) throw Error(q(62, \"\"));\n }\n\n h = d;\n e = this.makeStaticMarkup;\n I = 1 === this.stack.length;\n G = \"<\" + a.type;\n\n for (z in h) {\n if (Wa.call(h, z)) {\n var m = h[z];\n\n if (null != m) {\n if (\"style\" === z) {\n n = void 0;\n var w = \"\",\n r = \"\";\n\n for (n in m) {\n if (m.hasOwnProperty(n)) {\n var y = 0 === n.indexOf(\"--\"),\n p = m[n];\n\n if (null != p) {\n if (y) var A = n;else if (A = n, Ua.hasOwnProperty(A)) A = Ua[A];else {\n var T = A.replace(Oa, \"-$1\").toLowerCase().replace(Pa, \"-ms-\");\n A = Ua[A] = T;\n }\n w += r + A + \":\";\n r = n;\n y = null == p || \"boolean\" === typeof p || \"\" === p ? \"\" : y || \"number\" !== typeof p || 0 === p || Y.hasOwnProperty(r) && Y[r] ? (\"\" + p).trim() : p + \"px\";\n w += y;\n r = \";\";\n }\n }\n }\n\n m = w || null;\n }\n\n n = null;\n\n b: if (y = c, p = h, -1 === y.indexOf(\"-\")) y = \"string\" === typeof p.is;else switch (y) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n y = !1;\n break b;\n\n default:\n y = !0;\n }\n\n y ? Xa.hasOwnProperty(z) || (n = z, n = ua(n) && null != m ? n + '=\"' + (N(m) + '\"') : \"\") : n = ya(z, m);\n n && (G += \" \" + n);\n }\n }\n }\n\n e || I && (G += ' data-reactroot=\"\"');\n var z = G;\n h = \"\";\n La.hasOwnProperty(c) ? z += \"/>\" : (z += \">\", h = \"\");\n\n a: {\n e = d.dangerouslySetInnerHTML;\n\n if (null != e) {\n if (null != e.__html) {\n e = e.__html;\n break a;\n }\n } else if (e = d.children, \"string\" === typeof e || \"number\" === typeof e) {\n e = N(e);\n break a;\n }\n\n e = null;\n }\n\n null != e ? (d = [], Ra.hasOwnProperty(c) && \"\\n\" === e.charAt(0) && (z += \"\\n\"), z += e) : d = Z(d.children);\n a = a.type;\n f = null == f || \"http://www.w3.org/1999/xhtml\" === f ? Ka(a) : \"http://www.w3.org/2000/svg\" === f && \"foreignObject\" === a ? \"http://www.w3.org/1999/xhtml\" : f;\n this.stack.push({\n domNamespace: f,\n type: c,\n children: d,\n childIndex: 0,\n context: b,\n footer: h\n });\n this.previousWasTextNode = !1;\n return z;\n };\n\n return a;\n}(),\n ab = {\n renderToString: function renderToString(a) {\n a = new $a(a, !1);\n\n try {\n return a.read(Infinity);\n } finally {\n a.destroy();\n }\n },\n renderToStaticMarkup: function renderToStaticMarkup(a) {\n a = new $a(a, !0);\n\n try {\n return a.read(Infinity);\n } finally {\n a.destroy();\n }\n },\n renderToNodeStream: function renderToNodeStream() {\n throw Error(q(207));\n },\n renderToStaticNodeStream: function renderToStaticNodeStream() {\n throw Error(q(208));\n },\n version: \"16.14.0\"\n};\n\nmodule.exports = ab.default || ab;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\n\nfunction emptyFunctionWithReset() {}\n\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function () {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n\n var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n ;\n shim.isRequired = shim;\n\n function getShim() {\n return shim;\n }\n\n ; // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n ReactPropTypes.PropTypes = ReactPropTypes;\n return ReactPropTypes;\n};","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\nmodule.exports = ReactPropTypesSecret;","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar b = \"function\" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for(\"react.element\") : 60103,\n d = b ? Symbol.for(\"react.portal\") : 60106,\n e = b ? Symbol.for(\"react.fragment\") : 60107,\n f = b ? Symbol.for(\"react.strict_mode\") : 60108,\n g = b ? Symbol.for(\"react.profiler\") : 60114,\n h = b ? Symbol.for(\"react.provider\") : 60109,\n k = b ? Symbol.for(\"react.context\") : 60110,\n l = b ? Symbol.for(\"react.async_mode\") : 60111,\n m = b ? Symbol.for(\"react.concurrent_mode\") : 60111,\n n = b ? Symbol.for(\"react.forward_ref\") : 60112,\n p = b ? Symbol.for(\"react.suspense\") : 60113,\n q = b ? Symbol.for(\"react.suspense_list\") : 60120,\n r = b ? Symbol.for(\"react.memo\") : 60115,\n t = b ? Symbol.for(\"react.lazy\") : 60116,\n v = b ? Symbol.for(\"react.block\") : 60121,\n w = b ? Symbol.for(\"react.fundamental\") : 60117,\n x = b ? Symbol.for(\"react.responder\") : 60118,\n y = b ? Symbol.for(\"react.scope\") : 60119;\n\nfunction z(a) {\n if (\"object\" === _typeof(a) && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return \"object\" === _typeof(a) && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return \"string\" === typeof a || \"function\" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || \"object\" === _typeof(a) && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;","/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar b = 60103,\n c = 60106,\n d = 60107,\n e = 60108,\n f = 60114,\n g = 60109,\n h = 60110,\n k = 60112,\n l = 60113,\n m = 60120,\n n = 60115,\n p = 60116,\n q = 60121,\n r = 60122,\n u = 60117,\n v = 60129,\n w = 60131;\n\nif (\"function\" === typeof Symbol && Symbol.for) {\n var x = Symbol.for;\n b = x(\"react.element\");\n c = x(\"react.portal\");\n d = x(\"react.fragment\");\n e = x(\"react.strict_mode\");\n f = x(\"react.profiler\");\n g = x(\"react.provider\");\n h = x(\"react.context\");\n k = x(\"react.forward_ref\");\n l = x(\"react.suspense\");\n m = x(\"react.suspense_list\");\n n = x(\"react.memo\");\n p = x(\"react.lazy\");\n q = x(\"react.block\");\n r = x(\"react.server.block\");\n u = x(\"react.fundamental\");\n v = x(\"react.debug_trace_mode\");\n w = x(\"react.legacy_hidden\");\n}\n\nfunction y(a) {\n if (\"object\" === _typeof(a) && null !== a) {\n var t = a.$$typeof;\n\n switch (t) {\n case b:\n switch (a = a.type, a) {\n case d:\n case f:\n case e:\n case l:\n case m:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case h:\n case k:\n case p:\n case n:\n case g:\n return a;\n\n default:\n return t;\n }\n\n }\n\n case c:\n return t;\n }\n }\n}\n\nvar z = g,\n A = b,\n B = k,\n C = d,\n D = p,\n E = n,\n F = c,\n G = f,\n H = e,\n I = l;\nexports.ContextConsumer = h;\nexports.ContextProvider = z;\nexports.Element = A;\nexports.ForwardRef = B;\nexports.Fragment = C;\nexports.Lazy = D;\nexports.Memo = E;\nexports.Portal = F;\nexports.Profiler = G;\nexports.StrictMode = H;\nexports.Suspense = I;\n\nexports.isAsyncMode = function () {\n return !1;\n};\n\nexports.isConcurrentMode = function () {\n return !1;\n};\n\nexports.isContextConsumer = function (a) {\n return y(a) === h;\n};\n\nexports.isContextProvider = function (a) {\n return y(a) === g;\n};\n\nexports.isElement = function (a) {\n return \"object\" === _typeof(a) && null !== a && a.$$typeof === b;\n};\n\nexports.isForwardRef = function (a) {\n return y(a) === k;\n};\n\nexports.isFragment = function (a) {\n return y(a) === d;\n};\n\nexports.isLazy = function (a) {\n return y(a) === p;\n};\n\nexports.isMemo = function (a) {\n return y(a) === n;\n};\n\nexports.isPortal = function (a) {\n return y(a) === c;\n};\n\nexports.isProfiler = function (a) {\n return y(a) === f;\n};\n\nexports.isStrictMode = function (a) {\n return y(a) === e;\n};\n\nexports.isSuspense = function (a) {\n return y(a) === l;\n};\n\nexports.isValidElementType = function (a) {\n return \"string\" === typeof a || \"function\" === typeof a || a === d || a === f || a === v || a === e || a === l || a === m || a === w || \"object\" === _typeof(a) && null !== a && (a.$$typeof === p || a.$$typeof === n || a.$$typeof === g || a.$$typeof === h || a.$$typeof === k || a.$$typeof === u || a.$$typeof === q || a[0] === r) ? !0 : !1;\n};\n\nexports.typeOf = y;","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js??ref--5-1!../../../../node_modules/postcss-loader/src/index.js??ref--5-2!./tools.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(true);\n// Module\nexports.push([module.id, \".tools {\\n background-color: black;\\n /* width: 5%; */\\n flex: 1 1;\\n min-width: -webkit-fit-content;\\n min-width: -moz-fit-content;\\n min-width: fit-content;\\n min-height: -webkit-fit-content;\\n min-height: -moz-fit-content;\\n min-height: fit-content;\\n height: auto;\\n overflow: scroll;\\n z-index: 2;\\n}\\n\\n.tools-wrapper {\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-around;\\n}\\n\\n.tools-wrapper div {\\n max-width: 50px;\\n width: 100%;\\n margin: auto;\\n }\\n\\n.mobile-screen {\\n background-color: #B39964;\\n}\\n\\n#wwl-logo {\\n display: none;\\n}\\n\\n.textImagePic path {\\n fill: #B39964;\\n}\\n\\n.tooltip-width {\\n min-width: 120px;\\n}\\n\\n#wwl-logo {\\n display: block;\\n}\\n\\n@media all and (orientation:portrait) {\\n .tools {\\n flex: 1 1;\\n width: 100%;\\n min-height: 40px;\\n }\\n .tools-wrapper {\\n width: 100%;\\n flex-direction: row;\\n justify-content: space-around;\\n align-items: flex-end;\\n /* min-height: fit-content; */\\n min-width: -webkit-fit-content;\\n min-width: -moz-fit-content;\\n min-width: fit-content;\\n }\\n .tools-wrapper > div {\\n margin-top: 0;\\n width: 30px;\\n height: 30px;\\n display: contents;\\n }\\n .tools-wrapper div div {\\n display: inline;\\n }\\n #wwl-logo {\\n display: none;\\n }\\n /* #textImageIcon {\\n display: none;\\n } */\\n}\\n\\n@media all and (max-width: 1200px) {\\n #wwl-logo {\\n display: none;\\n }\\n}\", \"\",{\"version\":3,\"sources\":[\"tools.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,uBAAuB;IACvB,eAAe;IACf,SAAO;IACP,8BAAsB;IAAtB,2BAAsB;IAAtB,sBAAsB;IACtB,+BAAuB;IAAvB,4BAAuB;IAAvB,uBAAuB;IACvB,YAAY;IACZ,gBAAgB;IAChB,UAAU;AACd;;AAEA;GACG,YAAY;GACZ,aAAa;GACb,sBAAsB;GACtB,6BAA6B;AAChC;;AACA;IACI,eAAe;IACf,WAAW;IACX,YAAY;CACf;;AAED;IACI,yBAAyB;AAC7B;;AACA;IACI,aAAa;AACjB;;AAGA;IACI,aAAa;AACjB;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,cAAc;AAClB;;AAGA;IACI;QACI,SAAO;QACP,WAAW;QACX,gBAAgB;IACpB;IACA;QACI,WAAW;QACX,mBAAmB;QACnB,6BAA6B;QAC7B,qBAAqB;QACrB,6BAA6B;QAC7B,8BAAsB;QAAtB,2BAAsB;QAAtB,sBAAsB;IAC1B;IACA;QACI,aAAa;QACb,WAAW;QACX,YAAY;QACZ,iBAAiB;IACrB;IACA;QACI,eAAe;IACnB;IACA;QACI,aAAa;IACjB;IACA;;OAEG;AACP;;AAEA;IACI;QACI,aAAa;IACjB;AACJ\",\"file\":\"tools.css\",\"sourcesContent\":[\".tools {\\n background-color: black;\\n /* width: 5%; */\\n flex: 1;\\n min-width: fit-content;\\n min-height: fit-content;\\n height: auto;\\n overflow: scroll;\\n z-index: 2;\\n}\\n\\n.tools-wrapper {\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-around;\\n}\\n.tools-wrapper div {\\n max-width: 50px;\\n width: 100%;\\n margin: auto;\\n }\\n\\n.mobile-screen {\\n background-color: #B39964;\\n}\\n#wwl-logo {\\n display: none;\\n}\\n\\n\\n.textImagePic path {\\n fill: #B39964;\\n}\\n\\n.tooltip-width {\\n min-width: 120px;\\n}\\n\\n#wwl-logo {\\n display: block;\\n}\\n\\n\\n@media all and (orientation:portrait) {\\n .tools {\\n flex: 1;\\n width: 100%;\\n min-height: 40px;\\n }\\n .tools-wrapper {\\n width: 100%;\\n flex-direction: row;\\n justify-content: space-around;\\n align-items: flex-end;\\n /* min-height: fit-content; */\\n min-width: fit-content;\\n }\\n .tools-wrapper > div {\\n margin-top: 0;\\n width: 30px;\\n height: 30px;\\n display: contents;\\n }\\n .tools-wrapper div div {\\n display: inline;\\n }\\n #wwl-logo {\\n display: none;\\n }\\n /* #textImageIcon {\\n display: none;\\n } */\\n}\\n\\n@media all and (max-width: 1200px) {\\n #wwl-logo {\\n display: none;\\n }\\n}\"]}]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js??ref--5-1!../../../../node_modules/postcss-loader/src/index.js??ref--5-2!./content.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(true);\n// Module\nexports.push([module.id, \".content-options {\\n width: 35%;\\n height: 100%;\\n}\\n.content-wrapper {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n height: 100%;\\n}\\n.text-options {\\n width: 90%;\\n height: 80%;\\n margin: auto;\\n}\\n.text-options > div > div {\\n padding: 10px 0;\\n}\\n.text-options .rangeArea,\\n.text-options .font-area {\\n font-size: 10px;\\n font-family: lato-black;\\n}\\n.rangeArea div {\\n display: flex;\\n /* flex-direction: column; */\\n align-items: center;\\n}\\n.rangeArea span {\\n width: 35%;\\n}\\n.rangeArea input {\\n width: 60%;\\n}\\n.rangeArea label {\\n width: 10%;\\n text-align: center;\\n}\\ninput[type='range'] {\\n -webkit-appearance: none;\\n height: 2px;\\n border-radius: 4px;\\n margin-bottom: 15px;\\n background-color: black;\\n margin: auto;\\n\\n}\\ninput[type='range']::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n width: 18px;\\n height: 18px;\\n border-radius: 10px;\\n background-color: #b39964 ;\\n overflow: visible;\\n cursor: pointer;\\n }\\n.font-area {\\n margin-bottom: 10px;\\n}\\n.font-area div {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.font-area span {\\n width: 25% !important;\\n}\\n.font-area div div {\\n width: 75% !important;\\n}\\n.svgContainer svg {\\n width: 30px;\\n height: 30px;\\n}\\n.slectContainer {\\n width: 70%;\\n border: none;\\n font-size: 1.7em;\\n margin-left: 8%;\\n}\\n.disabled {\\n background-color: #ccc;\\n}\\n.sendButton {\\n display: flex;\\n}\\n.sendButton label,\\n.sendButton span,\\n.mobileButton {\\n font-family: lato-bold;\\n margin: auto;\\n color: black;\\n margin-top: 3px;\\n border: 1px solid #000;\\n padding: 5px 7px;\\n text-align: center;\\n display: inline-block;\\n text-transform: uppercase;\\n}\\n.sendButton span:hover {\\n color: white;\\n background-color: black;\\n cursor: pointer;\\n}\\n.image-options {\\n height: 100%;\\n text-align: center;\\n}\\n.refused {\\n height: 500px;\\n padding: 20px;\\n\\n}\\n.refused span {\\n margin: 10px;\\n text-align: left;\\n display: block;\\n}\\n.accepted div span {\\n display: block;\\n}\\n.uploadArea {\\n padding: 20px;\\n text-align: left;\\n font-size: 10px;\\n}\\ninput[type=\\\"file\\\"] {\\n display: none;\\n}\\n.custom-file-upload {\\n border: 1px dashed #000;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n padding: 5px 7px;\\n cursor: pointer;\\n width: 75%;\\n height: 50px;\\n margin: 20px auto;\\n text-transform: uppercase;\\n font-family: lato-bold;\\n}\\n.custom-file-upload div {\\n margin-right: 5px;\\n}\\n.black {\\n background-color: black;\\n}\\n.canvasContiner {\\n width: auto;\\n max-height: calc(100vh - 350px);\\n max-width: 95%;\\n}\\n.contrast-area {\\n display: flex;\\n width: 80%;\\n margin: auto;\\n margin-top: 15px;\\n margin-bottom: 15px;\\n}\\n.closeImageOption {\\n display: none;\\n}\\n.hide-content-button {\\n display: none;\\n}\\n.gallery-wrapper {\\n height: 100%;\\n position: relative;\\n}\\n.gallery-container {\\n overflow-y: scroll;\\n max-height: 100%;\\n}\\n.gallery-options {\\n display: flex;\\n flex-wrap: wrap;\\n}\\n.gallery-image {\\n width: 24%;\\n margin: 0.5%;\\n}\\n.gallery-empty {\\n margin-left: 10px;\\n}\\n.gallery-category {\\n width: 49%;\\n margin: 0.5%;\\n display: block;\\n padding: 40px 15px;\\n background: #ecf0f1;\\n cursor: pointer;\\n text-align: center;\\n font-size: 16px;\\n}\\n.gallery-category:hover {\\n background: #cfd9db;\\n}\\n.sticky {\\n position: -webkit-sticky; /* Safari */\\n position: sticky;\\n top: 0;\\n}\\n@media all and (orientation:portrait) {\\n #content {\\n flex: 2 1;\\n height: 100vh;\\n width: 100%;\\n position: fixed;\\n z-index: -1;\\n background-color: white;\\n opacity: 0.8;\\n }\\n\\n .hide-content-button {\\n display: block;\\n font-size: x-large;\\n text-align: right;\\n margin: 10px 10px 0 0;\\n }\\n}\\n.searchbox {\\n margin: 10px;\\n}\\n.back-button {\\n cursor: pointer;\\n background-color: #f3f3f3 !important;\\n}\\n.image-options,\\n.text-options {\\n overflow: scroll;\\n}\\n#gallery-preview {\\n position: absolute;\\n display: none;\\n left: 100%;\\n margin: 20px;\\n\\n background: #fff;\\n border: 1px solid #bbb;\\n border-radius: 4px;\\n padding: 10px;\\n text-align: center;\\n}\\n#gallery-preview img {\\n width: 300px;\\n}\\n#gallery-preview span {\\n font-size: 17px;\\n}\\n#gallery-preview.show {\\n display: block;\\n}\\n/* Input addons, based on */\\n/* https://philipwalton.github.io/solved-by-flexbox/demos/input-add-ons/ */\\n.InputAddOn {\\n display: flex;\\n margin-bottom: 1.5em;\\n}\\n.InputAddOn-field {\\n flex: 1 1;\\n}\\n.InputAddOn-field:not(:first-child) {\\n border-left: 0;\\n}\\n.InputAddOn-field:not(:last-child) {\\n border-right: 0;\\n}\\n.InputAddOn-item {\\n background-color: rgba(147, 128, 108, 0.1);\\n color: #666666;\\n font: inherit;\\n font-weight: normal;\\n}\\n.InputAddOn-field,\\n.InputAddOn-item {\\n border: 1px solid rgba(147, 128, 108, 0.25);\\n padding: 0.5em 0.75em;\\n}\\n.InputAddOn-field:first-child,\\n.InputAddOn-item:first-child {\\n border-radius: 2px 0 0 2px;\\n}\\n.InputAddOn-field:last-child,\\n.InputAddOn-item:last-child {\\n border-radius: 0 2px 2px 0;\\n}\\n/* fontello */\\n[class^=\\\"icon-\\\"]:before, [class*=\\\" icon-\\\"]:before {\\n font-family: \\\"fontello\\\";\\n font-style: normal;\\n font-weight: normal;\\n speak: never;\\n\\n display: inline-block;\\n text-decoration: inherit;\\n width: 1em;\\n margin-right: .2em;\\n text-align: center;\\n /* opacity: .8; */\\n\\n /* For safety - reset parent styles, that can break glyph codes*/\\n font-feature-settings: normal;\\n font-variant: normal;\\n text-transform: none;\\n\\n /* fix buttons height, for twitter bootstrap */\\n line-height: 1em;\\n\\n /* Animation center compensation - margins should be symmetric */\\n /* remove if not needed */\\n margin-left: .2em;\\n\\n /* you can be more comfortable with increased icons size */\\n /* font-size: 120%; */\\n\\n /* Font smoothing. That was taken from TWBS */\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n\\n /* Uncomment for 3D effect */\\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\\n}\\n.icon-left:before { content: '\\\\f177'; }\\n/* '' */\\n.icon-search:before { content: '🔍'; }\\n/* '\\\\1f50d' */\\n\", \"\",{\"version\":3,\"sources\":[\"content.css\"],\"names\":[],\"mappings\":\"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\",\"file\":\"content.css\",\"sourcesContent\":[\".content-options {\\n width: 35%;\\n height: 100%;\\n}\\n.content-wrapper {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n height: 100%;\\n}\\n\\n.text-options {\\n width: 90%;\\n height: 80%;\\n margin: auto;\\n}\\n\\n.text-options > div > div {\\n padding: 10px 0;\\n}\\n\\n.text-options .rangeArea,\\n.text-options .font-area {\\n font-size: 10px;\\n font-family: lato-black;\\n}\\n\\n.rangeArea div {\\n display: flex;\\n /* flex-direction: column; */\\n align-items: center;\\n}\\n.rangeArea span {\\n width: 35%;\\n}\\n.rangeArea input {\\n width: 60%;\\n}\\n.rangeArea label {\\n width: 10%;\\n text-align: center;\\n}\\n\\ninput[type='range'] {\\n -webkit-appearance: none;\\n height: 2px;\\n border-radius: 4px;\\n margin-bottom: 15px;\\n background-color: black;\\n margin: auto;\\n\\n}\\n\\ninput[type='range']::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n width: 18px;\\n height: 18px;\\n border-radius: 10px;\\n background-color: #b39964 ;\\n overflow: visible;\\n cursor: pointer;\\n }\\n\\n.font-area {\\n margin-bottom: 10px;\\n}\\n\\n.font-area div {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.font-area span {\\n width: 25% !important;\\n}\\n.font-area div div {\\n width: 75% !important;\\n}\\n\\n.svgContainer svg {\\n width: 30px;\\n height: 30px;\\n}\\n\\n.slectContainer {\\n width: 70%;\\n border: none;\\n font-size: 1.7em;\\n margin-left: 8%;\\n}\\n\\n.disabled {\\n background-color: #ccc;\\n}\\n\\n.sendButton {\\n display: flex;\\n}\\n\\n.sendButton label,\\n.sendButton span,\\n.mobileButton {\\n font-family: lato-bold;\\n margin: auto;\\n color: black;\\n margin-top: 3px;\\n border: 1px solid #000;\\n padding: 5px 7px;\\n text-align: center;\\n display: inline-block;\\n text-transform: uppercase;\\n}\\n\\n.sendButton span:hover {\\n color: white;\\n background-color: black;\\n cursor: pointer;\\n}\\n\\n.image-options {\\n height: 100%;\\n text-align: center;\\n}\\n\\n\\n.refused {\\n height: 500px;\\n padding: 20px;\\n\\n}\\n\\n.refused span {\\n margin: 10px;\\n text-align: left;\\n display: block;\\n}\\n\\n.accepted div span {\\n display: block;\\n}\\n\\n.uploadArea {\\n padding: 20px;\\n text-align: left;\\n font-size: 10px;\\n}\\n\\n\\ninput[type=\\\"file\\\"] {\\n display: none;\\n}\\n.custom-file-upload {\\n border: 1px dashed #000;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n padding: 5px 7px;\\n cursor: pointer;\\n width: 75%;\\n height: 50px;\\n margin: 20px auto;\\n text-transform: uppercase;\\n font-family: lato-bold;\\n}\\n.custom-file-upload div {\\n margin-right: 5px;\\n}\\n\\n.black {\\n background-color: black;\\n}\\n\\n.canvasContiner {\\n width: auto;\\n max-height: calc(100vh - 350px);\\n max-width: 95%;\\n}\\n\\n.contrast-area {\\n display: flex;\\n width: 80%;\\n margin: auto;\\n margin-top: 15px;\\n margin-bottom: 15px;\\n}\\n.closeImageOption {\\n display: none;\\n}\\n\\n.hide-content-button {\\n display: none;\\n}\\n\\n.gallery-wrapper {\\n height: 100%;\\n position: relative;\\n}\\n\\n.gallery-container {\\n overflow-y: scroll;\\n max-height: 100%;\\n}\\n\\n.gallery-options {\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.gallery-image {\\n width: 24%;\\n margin: 0.5%;\\n}\\n\\n.gallery-empty {\\n margin-left: 10px;\\n}\\n\\n.gallery-category {\\n width: 49%;\\n margin: 0.5%;\\n display: block;\\n padding: 40px 15px;\\n background: #ecf0f1;\\n cursor: pointer;\\n text-align: center;\\n font-size: 16px;\\n}\\n.gallery-category:hover {\\n background: #cfd9db;\\n}\\n\\n.sticky {\\n position: -webkit-sticky; /* Safari */\\n position: sticky;\\n top: 0;\\n}\\n\\n@media all and (orientation:portrait) {\\n #content {\\n flex: 2;\\n height: 100vh;\\n width: 100%;\\n position: fixed;\\n z-index: -1;\\n background-color: white;\\n opacity: 0.8;\\n }\\n\\n .hide-content-button {\\n display: block;\\n font-size: x-large;\\n text-align: right;\\n margin: 10px 10px 0 0;\\n }\\n}\\n\\n.searchbox {\\n margin: 10px;\\n}\\n\\n.back-button {\\n cursor: pointer;\\n background-color: #f3f3f3 !important;\\n}\\n\\n.image-options,\\n.text-options {\\n overflow: scroll;\\n}\\n\\n#gallery-preview {\\n position: absolute;\\n display: none;\\n left: 100%;\\n margin: 20px;\\n\\n background: #fff;\\n border: 1px solid #bbb;\\n border-radius: 4px;\\n padding: 10px;\\n text-align: center;\\n}\\n\\n#gallery-preview img {\\n width: 300px;\\n}\\n\\n#gallery-preview span {\\n font-size: 17px;\\n}\\n\\n#gallery-preview.show {\\n display: block;\\n}\\n\\n/* Input addons, based on */\\n/* https://philipwalton.github.io/solved-by-flexbox/demos/input-add-ons/ */\\n.InputAddOn {\\n display: flex;\\n margin-bottom: 1.5em;\\n}\\n\\n.InputAddOn-field {\\n flex: 1;\\n}\\n.InputAddOn-field:not(:first-child) {\\n border-left: 0;\\n}\\n.InputAddOn-field:not(:last-child) {\\n border-right: 0;\\n}\\n\\n.InputAddOn-item {\\n background-color: rgba(147, 128, 108, 0.1);\\n color: #666666;\\n font: inherit;\\n font-weight: normal;\\n}\\n\\n.InputAddOn-field,\\n.InputAddOn-item {\\n border: 1px solid rgba(147, 128, 108, 0.25);\\n padding: 0.5em 0.75em;\\n}\\n.InputAddOn-field:first-child,\\n.InputAddOn-item:first-child {\\n border-radius: 2px 0 0 2px;\\n}\\n.InputAddOn-field:last-child,\\n.InputAddOn-item:last-child {\\n border-radius: 0 2px 2px 0;\\n}\\n\\n\\n/* fontello */\\n[class^=\\\"icon-\\\"]:before, [class*=\\\" icon-\\\"]:before {\\n font-family: \\\"fontello\\\";\\n font-style: normal;\\n font-weight: normal;\\n speak: never;\\n\\n display: inline-block;\\n text-decoration: inherit;\\n width: 1em;\\n margin-right: .2em;\\n text-align: center;\\n /* opacity: .8; */\\n\\n /* For safety - reset parent styles, that can break glyph codes*/\\n font-variant: normal;\\n text-transform: none;\\n\\n /* fix buttons height, for twitter bootstrap */\\n line-height: 1em;\\n\\n /* Animation center compensation - margins should be symmetric */\\n /* remove if not needed */\\n margin-left: .2em;\\n\\n /* you can be more comfortable with increased icons size */\\n /* font-size: 120%; */\\n\\n /* Font smoothing. That was taken from TWBS */\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n\\n /* Uncomment for 3D effect */\\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\\n}\\n\\n.icon-left:before { content: '\\\\f177'; } /* '' */\\n.icon-search:before { content: '🔍'; } /* '\\\\1f50d' */\\n\"]}]);\n// Exports\nmodule.exports = exports;\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/* Font Face Observer v2.1.0 - © Bram Stein. License: BSD-3-Clause */\n(function () {\n function l(a, b) {\n document.addEventListener ? a.addEventListener(\"scroll\", b, !1) : a.attachEvent(\"scroll\", b);\n }\n\n function m(a) {\n document.body ? a() : document.addEventListener ? document.addEventListener(\"DOMContentLoaded\", function c() {\n document.removeEventListener(\"DOMContentLoaded\", c);\n a();\n }) : document.attachEvent(\"onreadystatechange\", function k() {\n if (\"interactive\" == document.readyState || \"complete\" == document.readyState) document.detachEvent(\"onreadystatechange\", k), a();\n });\n }\n\n ;\n\n function t(a) {\n this.a = document.createElement(\"div\");\n this.a.setAttribute(\"aria-hidden\", \"true\");\n this.a.appendChild(document.createTextNode(a));\n this.b = document.createElement(\"span\");\n this.c = document.createElement(\"span\");\n this.h = document.createElement(\"span\");\n this.f = document.createElement(\"span\");\n this.g = -1;\n this.b.style.cssText = \"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\n this.c.style.cssText = \"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\n this.f.style.cssText = \"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\n this.h.style.cssText = \"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";\n this.b.appendChild(this.h);\n this.c.appendChild(this.f);\n this.a.appendChild(this.b);\n this.a.appendChild(this.c);\n }\n\n function u(a, b) {\n a.a.style.cssText = \"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\" + b + \";\";\n }\n\n function z(a) {\n var b = a.a.offsetWidth,\n c = b + 100;\n a.f.style.width = c + \"px\";\n a.c.scrollLeft = c;\n a.b.scrollLeft = a.b.scrollWidth + 100;\n return a.g !== b ? (a.g = b, !0) : !1;\n }\n\n function A(a, b) {\n function c() {\n var a = k;\n z(a) && a.a.parentNode && b(a.g);\n }\n\n var k = a;\n l(a.b, c);\n l(a.c, c);\n z(a);\n }\n\n ;\n\n function B(a, b) {\n var c = b || {};\n this.family = a;\n this.style = c.style || \"normal\";\n this.weight = c.weight || \"normal\";\n this.stretch = c.stretch || \"normal\";\n }\n\n var C = null,\n D = null,\n E = null,\n F = null;\n\n function G() {\n if (null === D) if (J() && /Apple/.test(window.navigator.vendor)) {\n var a = /AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent);\n D = !!a && 603 > parseInt(a[1], 10);\n } else D = !1;\n return D;\n }\n\n function J() {\n null === F && (F = !!document.fonts);\n return F;\n }\n\n function K() {\n if (null === E) {\n var a = document.createElement(\"div\");\n\n try {\n a.style.font = \"condensed 100px sans-serif\";\n } catch (b) {}\n\n E = \"\" !== a.style.font;\n }\n\n return E;\n }\n\n function L(a, b) {\n return [a.style, a.weight, K() ? a.stretch : \"\", \"100px\", b].join(\" \");\n }\n\n B.prototype.load = function (a, b) {\n var c = this,\n k = a || \"BESbswy\",\n r = 0,\n n = b || 3E3,\n H = new Date().getTime();\n return new Promise(function (a, b) {\n if (J() && !G()) {\n var M = new Promise(function (a, b) {\n function e() {\n new Date().getTime() - H >= n ? b(Error(\"\" + n + \"ms timeout exceeded\")) : document.fonts.load(L(c, '\"' + c.family + '\"'), k).then(function (c) {\n 1 <= c.length ? a() : setTimeout(e, 25);\n }, b);\n }\n\n e();\n }),\n N = new Promise(function (a, c) {\n r = setTimeout(function () {\n c(Error(\"\" + n + \"ms timeout exceeded\"));\n }, n);\n });\n Promise.race([N, M]).then(function () {\n clearTimeout(r);\n a(c);\n }, b);\n } else m(function () {\n function v() {\n var b;\n if (b = -1 != f && -1 != g || -1 != f && -1 != h || -1 != g && -1 != h) (b = f != g && f != h && g != h) || (null === C && (b = /AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent), C = !!b && (536 > parseInt(b[1], 10) || 536 === parseInt(b[1], 10) && 11 >= parseInt(b[2], 10))), b = C && (f == w && g == w && h == w || f == x && g == x && h == x || f == y && g == y && h == y)), b = !b;\n b && (d.parentNode && d.parentNode.removeChild(d), clearTimeout(r), a(c));\n }\n\n function I() {\n if (new Date().getTime() - H >= n) d.parentNode && d.parentNode.removeChild(d), b(Error(\"\" + n + \"ms timeout exceeded\"));else {\n var a = document.hidden;\n if (!0 === a || void 0 === a) f = e.a.offsetWidth, g = p.a.offsetWidth, h = q.a.offsetWidth, v();\n r = setTimeout(I, 50);\n }\n }\n\n var e = new t(k),\n p = new t(k),\n q = new t(k),\n f = -1,\n g = -1,\n h = -1,\n w = -1,\n x = -1,\n y = -1,\n d = document.createElement(\"div\");\n d.dir = \"ltr\";\n u(e, L(c, \"sans-serif\"));\n u(p, L(c, \"serif\"));\n u(q, L(c, \"monospace\"));\n d.appendChild(e.a);\n d.appendChild(p.a);\n d.appendChild(q.a);\n document.body.appendChild(d);\n w = e.a.offsetWidth;\n x = p.a.offsetWidth;\n y = q.a.offsetWidth;\n I();\n A(e, function (a) {\n f = a;\n v();\n });\n u(e, L(c, '\"' + c.family + '\",sans-serif'));\n A(p, function (a) {\n g = a;\n v();\n });\n u(p, L(c, '\"' + c.family + '\",serif'));\n A(q, function (a) {\n h = a;\n v();\n });\n u(q, L(c, '\"' + c.family + '\",monospace'));\n });\n });\n };\n\n \"object\" === (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) ? module.exports = B : (window.FontFaceObserver = B, window.FontFaceObserver.prototype.load = B.prototype.load);\n})();","'use strict';\n\nexports.byteLength = byteLength;\nexports.toByteArray = toByteArray;\nexports.fromByteArray = fromByteArray;\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n} // Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction getLens(b64) {\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4');\n } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf('=');\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n} // base64 is 4/3 + up to two characters of the original data\n\n\nfunction byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\n tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n arr[curByte++] = tmp >> 16 & 0xFF;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n return arr;\n}\n\nfunction tripletToBase64(num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];\n}\n\nfunction encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join('');\n}\n\nfunction fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');\n }\n\n return parts.join('');\n}","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? nBytes - 1 : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : (s ? -1 : 1) * Infinity;\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n};\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n var i = isLE ? 0 : nBytes - 1;\n var d = isLE ? 1 : -1;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n};","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};","var api = require(\"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js??ref--5-1!../../../../node_modules/postcss-loader/src/index.js??ref--5-2!./fonts.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_GET_URL_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL_IMPORT_0___ = require(\"../fonts/lato.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_1___ = require(\"../fonts/Lato-Regular.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_2___ = require(\"../fonts/Lato-Black.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_3___ = require(\"../fonts/Lato-Bold.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_4___ = require(\"../fonts/Abel.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_5___ = require(\"../fonts/Audiowide.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_6___ = require(\"../fonts/Bitter.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_7___ = require(\"../fonts/boldBitter.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_8___ = require(\"../fonts/Bitteritalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_9___ = require(\"../fonts/CarterOne.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_10___ = require(\"../fonts/Cinzel.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_11___ = require(\"../fonts/boldCinzel.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_12___ = require(\"../fonts/Graduate.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_13___ = require(\"../fonts/GreatVibes.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_14___ = require(\"../fonts/Kameron.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_15___ = require(\"../fonts/boldKameron.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_16___ = require(\"../fonts/LobsterTwo.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_17___ = require(\"../fonts/boldLobsterTwo.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_18___ = require(\"../fonts/boldLobsterTwoitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_19___ = require(\"../fonts/LobsterTwoitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_20___ = require(\"../fonts/Michroma.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_21___ = require(\"../fonts/Monda.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_22___ = require(\"../fonts/boldMonda.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_23___ = require(\"../fonts/Niconne.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_24___ = require(\"../fonts/boldOleoScript.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_25___ = require(\"../fonts/OleoScript.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_26___ = require(\"../fonts/Play.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_27___ = require(\"../fonts/boldPlay.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_28___ = require(\"../fonts/PlayfairDisplay.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_29___ = require(\"../fonts/boldPlayfairDisplay.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_30___ = require(\"../fonts/PlayfairDisplayitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_31___ = require(\"../fonts/boldPlayfairDisplayitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_32___ = require(\"../fonts/PTSans.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_33___ = require(\"../fonts/boldPTSans.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_34___ = require(\"../fonts/boldPTSansitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_35___ = require(\"../fonts/PTSansitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_36___ = require(\"../fonts/Raleway.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_37___ = require(\"../fonts/boldRaleway.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_38___ = require(\"../fonts/boldRalewayitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_39___ = require(\"../fonts/Ralewayitalic.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_40___ = require(\"../fonts/RobotoSlab.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_41___ = require(\"../fonts/boldRobotoSlab.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_42___ = require(\"../fonts/Teko.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_43___ = require(\"../fonts/VastShadow.ttf\");\nvar ___CSS_LOADER_URL_IMPORT_44___ = require(\"../fonts/fontello.ttf?96414401\");\nexports = ___CSS_LOADER_API_IMPORT___(true);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\nvar ___CSS_LOADER_URL_REPLACEMENT_8___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_8___);\nvar ___CSS_LOADER_URL_REPLACEMENT_9___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_9___);\nvar ___CSS_LOADER_URL_REPLACEMENT_10___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_10___);\nvar ___CSS_LOADER_URL_REPLACEMENT_11___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_11___);\nvar ___CSS_LOADER_URL_REPLACEMENT_12___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_12___);\nvar ___CSS_LOADER_URL_REPLACEMENT_13___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_13___);\nvar ___CSS_LOADER_URL_REPLACEMENT_14___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_14___);\nvar ___CSS_LOADER_URL_REPLACEMENT_15___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_15___);\nvar ___CSS_LOADER_URL_REPLACEMENT_16___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_16___);\nvar ___CSS_LOADER_URL_REPLACEMENT_17___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_17___);\nvar ___CSS_LOADER_URL_REPLACEMENT_18___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_18___);\nvar ___CSS_LOADER_URL_REPLACEMENT_19___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_19___);\nvar ___CSS_LOADER_URL_REPLACEMENT_20___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_20___);\nvar ___CSS_LOADER_URL_REPLACEMENT_21___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_21___);\nvar ___CSS_LOADER_URL_REPLACEMENT_22___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_22___);\nvar ___CSS_LOADER_URL_REPLACEMENT_23___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_23___);\nvar ___CSS_LOADER_URL_REPLACEMENT_24___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_24___);\nvar ___CSS_LOADER_URL_REPLACEMENT_25___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_25___);\nvar ___CSS_LOADER_URL_REPLACEMENT_26___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_26___);\nvar ___CSS_LOADER_URL_REPLACEMENT_27___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_27___);\nvar ___CSS_LOADER_URL_REPLACEMENT_28___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_28___);\nvar ___CSS_LOADER_URL_REPLACEMENT_29___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_29___);\nvar ___CSS_LOADER_URL_REPLACEMENT_30___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_30___);\nvar ___CSS_LOADER_URL_REPLACEMENT_31___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_31___);\nvar ___CSS_LOADER_URL_REPLACEMENT_32___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_32___);\nvar ___CSS_LOADER_URL_REPLACEMENT_33___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_33___);\nvar ___CSS_LOADER_URL_REPLACEMENT_34___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_34___);\nvar ___CSS_LOADER_URL_REPLACEMENT_35___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_35___);\nvar ___CSS_LOADER_URL_REPLACEMENT_36___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_36___);\nvar ___CSS_LOADER_URL_REPLACEMENT_37___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_37___);\nvar ___CSS_LOADER_URL_REPLACEMENT_38___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_38___);\nvar ___CSS_LOADER_URL_REPLACEMENT_39___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_39___);\nvar ___CSS_LOADER_URL_REPLACEMENT_40___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_40___);\nvar ___CSS_LOADER_URL_REPLACEMENT_41___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_41___);\nvar ___CSS_LOADER_URL_REPLACEMENT_42___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_42___);\nvar ___CSS_LOADER_URL_REPLACEMENT_43___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_43___);\nvar ___CSS_LOADER_URL_REPLACEMENT_44___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_44___);\n// Module\nexports.push([module.id, \"@font-face {\\n font-family: 'lato';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'lato-regular';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'lato-black';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'lato-bold';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Abel';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Audiowide';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_5___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Bitter';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_6___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldBitter';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_7___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Bitteritalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_8___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'CarterOne';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_9___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Cinzel';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_10___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldCinzel';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_11___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Graduate';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_12___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'GreatVibes';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_13___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Kameron';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_14___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldKameron';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_15___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'LobsterTwo';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_16___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldLobsterTwo';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_17___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldLobsterTwoitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_18___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'LobsterTwoitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_19___ + \") format('truetype');\\n /* ...................... */\\n}\\n@font-face {\\n font-family: 'Michroma';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_20___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Monda';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_21___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldMonda';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_22___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Niconne';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_23___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldOleoScript';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_24___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'OleoScript';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_25___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Play';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_26___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPlay';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_27___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'PlayfairDisplay';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_28___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPlayfairDisplay';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_29___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'PlayfairDisplayitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_30___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPlayfairDisplayitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_31___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'PTSans';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_32___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPTSans';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_33___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPTSansitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_34___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'PTSansitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_35___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Raleway';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_36___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldRaleway';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_37___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldRalewayitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_38___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Ralewayitalic';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_39___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'RobotoSlab';\\n\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_40___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'boldRobotoSlab';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_41___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'Teko';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_42___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'VastShadow';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_43___ + \") format('truetype');\\n}\\n@font-face {\\n font-family: 'fontello';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_44___ + \") format('truetype');\\n font-weight: normal;\\n font-style: normal;\\n}\\n\\n\", \"\",{\"version\":3,\"sources\":[\"fonts.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,mBAAmB;IACnB,+DAA8C;AAClD;AACA;IACI,2BAA2B;IAC3B,+DAAsD;AAC1D;AACA;IACI,yBAAyB;IACzB,+DAAoD;AACxD;AACA;IACI,wBAAwB;IACxB,+DAAmD;AACvD;AAEA;IACI,mBAAmB;IACnB,+DAA8C;AAClD;AACA;IACI,wBAAwB;IACxB,+DAAmD;AACvD;AACA;IACI,qBAAqB;IACrB,+DAAgD;AACpD;AACA;IACI,yBAAyB;IACzB,+DAAoD;AACxD;AACA;IACI,2BAA2B;IAC3B,+DAAsD;AAC1D;AACA;IACI,wBAAwB;IACxB,+DAAmD;AACvD;AACA;IACI,qBAAqB;IACrB,gEAAgD;AACpD;AACA;IACI,yBAAyB;IACzB,gEAAoD;AACxD;AACA;IACI,uBAAuB;IACvB,gEAAkD;AACtD;AACA;IACI,yBAAyB;IACzB,gEAAoD;AACxD;AACA;IACI,sBAAsB;IACtB,gEAAiD;AACrD;AACA;IACI,0BAA0B;IAC1B,gEAAqD;AACzD;AACA;IACI,yBAAyB;IACzB,gEAAoD;AACxD;AAAC;IACG,6BAA6B;IAC7B,gEAAwD;AAC5D;AAAC;IACG,mCAAmC;IACnC,gEAA8D;AAClE;AAAC;IACG,+BAA+B;IAC/B,gEAA0D;IAC1D,2BAA2B;AAC/B;AAAC;IACG,uBAAuB;IACvB,gEAAkD;AACtD;AACA;IACI,oBAAoB;IACpB,gEAA+C;AACnD;AACA;IACI,wBAAwB;IACxB,gEAAmD;AACvD;AACA;IACI,sBAAsB;IACtB,gEAAiD;AACrD;AACA;IACI,6BAA6B;IAC7B,gEAAwD;AAC5D;AACA;IACI,yBAAyB;IACzB,gEAAoD;AACxD;AACA;IACI,mBAAmB;IACnB,gEAA8C;AAClD;AACA;IACI,uBAAuB;IACvB,gEAAkD;AACtD;AACA;IACI,8BAA8B;IAC9B,gEAAyD;AAC7D;AACA;IACI,kCAAkC;IAClC,gEAA6D;AACjE;AACA;IACI,oCAAoC;IACpC,gEAA+D;AACnE;AACA;IACI,wCAAwC;IACxC,gEAAmE;AACvE;AACA;IACI,qBAAqB;IACrB,gEAAgD;AACpD;AACA;IACI,yBAAyB;IACzB,gEAAoD;AACxD;AACA;IACI,+BAA+B;IAC/B,gEAA0D;AAC9D;AACA;IACI,2BAA2B;IAC3B,gEAAsD;AAC1D;AACA;IACI,sBAAsB;IACtB,gEAAiD;AACrD;AAAC;IACG,0BAA0B;IAC1B,gEAAqD;AACzD;AACA;IACI,gCAAgC;IAChC,gEAA2D;AAC/D;AACA;IACI,4BAA4B;IAC5B,gEAAuD;AAC3D;AACA;IACI,yBAAyB;;IAEzB,gEAAoD;AACxD;AAAC;IACG,6BAA6B;IAC7B,gEAAwD;AAC5D;AACA;IACI,mBAAmB;IACnB,gEAA8C;AAClD;AAEA;IACI,yBAAyB;IACzB,gEAAoD;AACxD;AAEA;EACE,uBAAuB;EACvB,gEAA6D;EAC7D,mBAAmB;EACnB,kBAAkB;AACpB\",\"file\":\"fonts.css\",\"sourcesContent\":[\"@font-face {\\n font-family: 'lato';\\n src: url(../fonts/lato.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'lato-regular';\\n src: url(../fonts/Lato-Regular.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'lato-black';\\n src: url(../fonts/Lato-Black.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'lato-bold';\\n src: url(../fonts/Lato-Bold.ttf) format('truetype');\\n}\\n\\n@font-face {\\n font-family: 'Abel';\\n src: url(../fonts/Abel.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Audiowide';\\n src: url(../fonts/Audiowide.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Bitter';\\n src: url(../fonts/Bitter.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldBitter';\\n src: url(../fonts/boldBitter.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Bitteritalic';\\n src: url(../fonts/Bitteritalic.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'CarterOne';\\n src: url(../fonts/CarterOne.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Cinzel';\\n src: url(../fonts/Cinzel.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldCinzel';\\n src: url(../fonts/boldCinzel.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Graduate';\\n src: url(../fonts/Graduate.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'GreatVibes';\\n src: url(../fonts/GreatVibes.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Kameron';\\n src: url(../fonts/Kameron.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldKameron';\\n src: url(../fonts/boldKameron.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'LobsterTwo';\\n src: url(../fonts/LobsterTwo.ttf) format('truetype');\\n}@font-face {\\n font-family: 'boldLobsterTwo';\\n src: url(../fonts/boldLobsterTwo.ttf) format('truetype');\\n}@font-face {\\n font-family: 'boldLobsterTwoitalic';\\n src: url(../fonts/boldLobsterTwoitalic.ttf) format('truetype');\\n}@font-face {\\n font-family: 'LobsterTwoitalic';\\n src: url(../fonts/LobsterTwoitalic.ttf) format('truetype');\\n /* ...................... */\\n}@font-face {\\n font-family: 'Michroma';\\n src: url(../fonts/Michroma.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Monda';\\n src: url(../fonts/Monda.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldMonda';\\n src: url(../fonts/boldMonda.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Niconne';\\n src: url(../fonts/Niconne.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldOleoScript';\\n src: url(../fonts/boldOleoScript.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'OleoScript';\\n src: url(../fonts/OleoScript.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Play';\\n src: url(../fonts/Play.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPlay';\\n src: url(../fonts/boldPlay.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'PlayfairDisplay';\\n src: url(../fonts/PlayfairDisplay.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPlayfairDisplay';\\n src: url(../fonts/boldPlayfairDisplay.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'PlayfairDisplayitalic';\\n src: url(../fonts/PlayfairDisplayitalic.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPlayfairDisplayitalic';\\n src: url(../fonts/boldPlayfairDisplayitalic.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'PTSans';\\n src: url(../fonts/PTSans.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPTSans';\\n src: url(../fonts/boldPTSans.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldPTSansitalic';\\n src: url(../fonts/boldPTSansitalic.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'PTSansitalic';\\n src: url(../fonts/PTSansitalic.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Raleway';\\n src: url(../fonts/Raleway.ttf) format('truetype');\\n}@font-face {\\n font-family: 'boldRaleway';\\n src: url(../fonts/boldRaleway.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'boldRalewayitalic';\\n src: url(../fonts/boldRalewayitalic.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Ralewayitalic';\\n src: url(../fonts/Ralewayitalic.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'RobotoSlab';\\n\\n src: url(../fonts/RobotoSlab.ttf) format('truetype');\\n}@font-face {\\n font-family: 'boldRobotoSlab';\\n src: url(../fonts/boldRobotoSlab.ttf) format('truetype');\\n}\\n@font-face {\\n font-family: 'Teko';\\n src: url(../fonts/Teko.ttf) format('truetype');\\n}\\n\\n@font-face {\\n font-family: 'VastShadow';\\n src: url(../fonts/VastShadow.ttf) format('truetype');\\n}\\n\\n@font-face {\\n font-family: 'fontello';\\n src: url('../fonts/fontello.ttf?96414401') format('truetype');\\n font-weight: normal;\\n font-style: normal;\\n}\\n\\n\"]}]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== 'string') {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n }\n\n return url;\n};","module.exports = __webpack_public_path__ + \"media/Components/fonts/Lato-Regular-9919edff6283018571add043109dc20b.ttf\";","module.exports = __webpack_public_path__ + \"media/Components/fonts/Lato-Black-0b51cf32bbc2d8b8d840c80c77a84a31.ttf\";","module.exports = __webpack_public_path__ + \"media/Components/fonts/Lato-Bold-5dd5aa0269395f0ea92763e6cb3bc07a.ttf\";","module.exports = __webpack_public_path__ + \"media/Components/fonts/fontello-acf6ba4569e6586a8baa3fc0d76781a0.ttf\";","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\nexport { _assign as __assign };\nexport function __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexport function __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nexport function __metadata(metadataKey, metadataValue) {\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nexport function __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nexport var __createBinding = Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n};\nexport function __exportStar(m, o) {\n for (var p in m) {\n if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n }\n}\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\n/** @deprecated */\n\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\n/** @deprecated */\n\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume(\"next\", value);\n }\n\n function reject(value) {\n resume(\"throw\", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: n === \"return\"\n } : f ? f(v) : v;\n } : f;\n }\n}\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\n\nvar __setModuleDefault = Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n }\n\n __setModuleDefault(result, mod);\n\n return result;\n}\nexport function __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}","import { __spreadArrays } from 'tslib';\nimport { parse } from 'content-type';\n\nvar cloneSvg = function cloneSvg(sourceSvg) {\n return sourceSvg.cloneNode(true);\n};\n\nvar isLocal = function isLocal() {\n return window.location.protocol === 'file:';\n};\n\nvar makeAjaxRequest = function makeAjaxRequest(url, callback) {\n var httpRequest = new XMLHttpRequest();\n\n httpRequest.onreadystatechange = function () {\n try {\n if (!/\\.svg/i.test(url) && httpRequest.readyState === 2) {\n var contentType = httpRequest.getResponseHeader('Content-Type');\n\n if (!contentType) {\n throw new Error('Content type not found');\n }\n\n var type = parse(contentType).type;\n\n if (!(type === 'image/svg+xml' || type === 'text/plain')) {\n throw new Error(\"Invalid content type: \" + type);\n }\n }\n\n if (httpRequest.readyState === 4) {\n if (httpRequest.status === 404 || httpRequest.responseXML === null) {\n throw new Error(isLocal() ? 'Note: SVG injection ajax calls do not work locally without ' + 'adjusting security settings in your browser. Or consider ' + 'using a local webserver.' : 'Unable to load SVG file: ' + url);\n }\n\n if (httpRequest.status === 200 || isLocal() && httpRequest.status === 0) {\n callback(null, httpRequest);\n } else {\n throw new Error('There was a problem injecting the SVG: ' + httpRequest.status + ' ' + httpRequest.statusText);\n }\n }\n } catch (error) {\n httpRequest.abort();\n callback(error, httpRequest);\n }\n };\n\n httpRequest.open('GET', url);\n\n if (httpRequest.overrideMimeType) {\n httpRequest.overrideMimeType('text/xml');\n }\n\n httpRequest.send();\n};\n\nvar svgCache = new Map();\nvar requestQueue = {};\n\nvar queueRequest = function queueRequest(url, callback) {\n requestQueue[url] = requestQueue[url] || [];\n requestQueue[url].push(callback);\n};\n\nvar processRequestQueue = function processRequestQueue(url) {\n var _loop_1 = function _loop_1(i, len) {\n setTimeout(function () {\n if (Array.isArray(requestQueue[url])) {\n var cacheValue = svgCache.get(url);\n var callback = requestQueue[url][i];\n\n if (cacheValue instanceof SVGElement) {\n callback(null, cloneSvg(cacheValue));\n }\n\n if (cacheValue instanceof Error) {\n callback(cacheValue);\n }\n\n if (i === requestQueue[url].length - 1) {\n delete requestQueue[url];\n }\n }\n }, 0);\n };\n\n for (var i = 0, len = requestQueue[url].length; i < len; i++) {\n _loop_1(i);\n }\n};\n\nvar loadSvgCached = function loadSvgCached(url, callback) {\n if (svgCache.has(url)) {\n var cacheValue = svgCache.get(url);\n\n if (cacheValue instanceof SVGElement) {\n callback(null, cloneSvg(cacheValue));\n return;\n }\n\n if (cacheValue instanceof Error) {\n callback(cacheValue);\n return;\n }\n\n queueRequest(url, callback);\n return;\n }\n\n svgCache.set(url, undefined);\n queueRequest(url, callback);\n makeAjaxRequest(url, function (error, httpRequest) {\n if (error) {\n svgCache.set(url, error);\n } else if (httpRequest.responseXML instanceof Document && httpRequest.responseXML.documentElement && httpRequest.responseXML.documentElement instanceof SVGElement) {\n svgCache.set(url, httpRequest.responseXML.documentElement);\n }\n\n processRequestQueue(url);\n });\n};\n\nvar loadSvgUncached = function loadSvgUncached(url, callback) {\n makeAjaxRequest(url, function (error, httpRequest) {\n if (error) {\n callback(error);\n } else if (httpRequest.responseXML instanceof Document && httpRequest.responseXML.documentElement && httpRequest.responseXML.documentElement instanceof SVGElement) {\n callback(null, httpRequest.responseXML.documentElement);\n }\n });\n};\n\nvar idCounter = 0;\n\nvar uniqueId = function uniqueId() {\n return ++idCounter;\n};\n\nvar injectedElements = [];\nvar ranScripts = {};\nvar svgNamespace = 'http://www.w3.org/2000/svg';\nvar xlinkNamespace = 'http://www.w3.org/1999/xlink';\n\nvar injectElement = function injectElement(el, evalScripts, renumerateIRIElements, cacheRequests, beforeEach, callback) {\n var imgUrl = el.getAttribute('data-src') || el.getAttribute('src');\n\n if (!imgUrl) {\n callback(new Error('Invalid data-src or src attribute'));\n return;\n }\n\n if (injectedElements.indexOf(el) !== -1) {\n injectedElements.splice(injectedElements.indexOf(el), 1);\n el = null;\n return;\n }\n\n injectedElements.push(el);\n el.setAttribute('src', '');\n var loadSvg = cacheRequests ? loadSvgCached : loadSvgUncached;\n loadSvg(imgUrl, function (error, svg) {\n if (!svg) {\n injectedElements.splice(injectedElements.indexOf(el), 1);\n el = null;\n callback(error);\n return;\n }\n\n var imgId = el.getAttribute('id');\n\n if (imgId) {\n svg.setAttribute('id', imgId);\n }\n\n var imgTitle = el.getAttribute('title');\n\n if (imgTitle) {\n svg.setAttribute('title', imgTitle);\n }\n\n var imgWidth = el.getAttribute('width');\n\n if (imgWidth) {\n svg.setAttribute('width', imgWidth);\n }\n\n var imgHeight = el.getAttribute('height');\n\n if (imgHeight) {\n svg.setAttribute('height', imgHeight);\n }\n\n var mergedClasses = Array.from(new Set(__spreadArrays((svg.getAttribute('class') || '').split(' '), ['injected-svg'], (el.getAttribute('class') || '').split(' ')))).join(' ').trim();\n svg.setAttribute('class', mergedClasses);\n var imgStyle = el.getAttribute('style');\n\n if (imgStyle) {\n svg.setAttribute('style', imgStyle);\n }\n\n svg.setAttribute('data-src', imgUrl);\n var imgData = [].filter.call(el.attributes, function (at) {\n return /^data-\\w[\\w-]*$/.test(at.name);\n });\n Array.prototype.forEach.call(imgData, function (dataAttr) {\n if (dataAttr.name && dataAttr.value) {\n svg.setAttribute(dataAttr.name, dataAttr.value);\n }\n });\n\n if (renumerateIRIElements) {\n var iriElementsAndProperties_1 = {\n clipPath: ['clip-path'],\n 'color-profile': ['color-profile'],\n cursor: ['cursor'],\n filter: ['filter'],\n linearGradient: ['fill', 'stroke'],\n marker: ['marker', 'marker-start', 'marker-mid', 'marker-end'],\n mask: ['mask'],\n path: [],\n pattern: ['fill', 'stroke'],\n radialGradient: ['fill', 'stroke']\n };\n var element_1;\n var elements_1;\n var properties_1;\n var currentId_1;\n var newId_1;\n Object.keys(iriElementsAndProperties_1).forEach(function (key) {\n element_1 = key;\n properties_1 = iriElementsAndProperties_1[key];\n elements_1 = svg.querySelectorAll(element_1 + '[id]');\n\n var _loop_1 = function _loop_1(a, elementsLen) {\n currentId_1 = elements_1[a].id;\n newId_1 = currentId_1 + '-' + uniqueId();\n var referencingElements;\n Array.prototype.forEach.call(properties_1, function (property) {\n referencingElements = svg.querySelectorAll('[' + property + '*=\"' + currentId_1 + '\"]');\n\n for (var b = 0, referencingElementLen = referencingElements.length; b < referencingElementLen; b++) {\n var attrValue = referencingElements[b].getAttribute(property);\n\n if (attrValue && !attrValue.match(new RegExp('url\\\\(\"?#' + currentId_1 + '\"?\\\\)'))) {\n continue;\n }\n\n referencingElements[b].setAttribute(property, 'url(#' + newId_1 + ')');\n }\n });\n var allLinks = svg.querySelectorAll('[*|href]');\n var links = [];\n\n for (var c = 0, allLinksLen = allLinks.length; c < allLinksLen; c++) {\n var href = allLinks[c].getAttributeNS(xlinkNamespace, 'href');\n\n if (href && href.toString() === '#' + elements_1[a].id) {\n links.push(allLinks[c]);\n }\n }\n\n for (var d = 0, linksLen = links.length; d < linksLen; d++) {\n links[d].setAttributeNS(xlinkNamespace, 'href', '#' + newId_1);\n }\n\n elements_1[a].id = newId_1;\n };\n\n for (var a = 0, elementsLen = elements_1.length; a < elementsLen; a++) {\n _loop_1(a);\n }\n });\n }\n\n svg.removeAttribute('xmlns:a');\n var scripts = svg.querySelectorAll('script');\n var scriptsToEval = [];\n var script;\n var scriptType;\n\n for (var i = 0, scriptsLen = scripts.length; i < scriptsLen; i++) {\n scriptType = scripts[i].getAttribute('type');\n\n if (!scriptType || scriptType === 'application/ecmascript' || scriptType === 'application/javascript' || scriptType === 'text/javascript') {\n script = scripts[i].innerText || scripts[i].textContent;\n\n if (script) {\n scriptsToEval.push(script);\n }\n\n svg.removeChild(scripts[i]);\n }\n }\n\n if (scriptsToEval.length > 0 && (evalScripts === 'always' || evalScripts === 'once' && !ranScripts[imgUrl])) {\n for (var l = 0, scriptsToEvalLen = scriptsToEval.length; l < scriptsToEvalLen; l++) {\n new Function(scriptsToEval[l])(window);\n }\n\n ranScripts[imgUrl] = true;\n }\n\n var styleTags = svg.querySelectorAll('style');\n Array.prototype.forEach.call(styleTags, function (styleTag) {\n styleTag.textContent += '';\n });\n svg.setAttribute('xmlns', svgNamespace);\n svg.setAttribute('xmlns:xlink', xlinkNamespace);\n beforeEach(svg);\n\n if (el.parentNode) {\n el.parentNode.replaceChild(svg, el);\n }\n\n injectedElements.splice(injectedElements.indexOf(el), 1);\n el = null;\n callback(null, svg);\n });\n};\n\nvar SVGInjector = function SVGInjector(elements, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.afterAll,\n afterAll = _c === void 0 ? function () {\n return undefined;\n } : _c,\n _d = _b.afterEach,\n afterEach = _d === void 0 ? function () {\n return undefined;\n } : _d,\n _e = _b.beforeEach,\n beforeEach = _e === void 0 ? function () {\n return undefined;\n } : _e,\n _f = _b.cacheRequests,\n cacheRequests = _f === void 0 ? true : _f,\n _g = _b.evalScripts,\n evalScripts = _g === void 0 ? 'never' : _g,\n _h = _b.renumerateIRIElements,\n renumerateIRIElements = _h === void 0 ? true : _h;\n\n if (elements && 'length' in elements) {\n var elementsLoaded_1 = 0;\n\n for (var i = 0, j = elements.length; i < j; i++) {\n injectElement(elements[i], evalScripts, renumerateIRIElements, cacheRequests, beforeEach, function (error, svg) {\n afterEach(error, svg);\n\n if (elements && 'length' in elements && elements.length === ++elementsLoaded_1) {\n afterAll(elementsLoaded_1);\n }\n });\n }\n } else if (elements) {\n injectElement(elements, evalScripts, renumerateIRIElements, cacheRequests, beforeEach, function (error, svg) {\n afterEach(error, svg);\n afterAll(1);\n elements = null;\n });\n } else {\n afterAll(0);\n }\n};\n\nexport { SVGInjector };","import _objectWithoutPropertiesLoose from '@babel/runtime/helpers/objectWithoutPropertiesLoose';\nimport _inheritsLoose from '@babel/runtime/helpers/inheritsLoose';\nimport { SVGInjector } from '@tanem/svg-injector';\nimport { func, oneOf, oneOfType, object, string, bool } from 'prop-types';\nimport { createElement, Component } from 'react';\nimport ReactDOMServer from 'react-dom/server'; // Hat-tip: https://github.com/developit/preact-compat/blob/master/src/index.js#L402.\n\nvar shallowDiffers = function shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) {\n return true;\n }\n }\n\n for (var _i in b) {\n if (a[_i] !== b[_i]) {\n return true;\n }\n }\n\n return false;\n};\n\nvar ReactSVG = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ReactSVG, _React$Component);\n\n function ReactSVG() {\n var _this;\n\n _this = _React$Component.apply(this, arguments) || this;\n _this.initialState = {\n hasError: false,\n isLoading: true\n };\n _this.state = _this.initialState;\n _this._isMounted = false;\n\n _this.refCallback = function (container) {\n _this.container = container;\n };\n\n return _this;\n }\n\n var _proto = ReactSVG.prototype;\n\n _proto.renderSVG = function renderSVG() {\n var _this2 = this;\n /* istanbul ignore else */\n\n\n if (this.container instanceof Node) {\n var _this$props = this.props,\n beforeInjection = _this$props.beforeInjection,\n evalScripts = _this$props.evalScripts,\n renumerateIRIElements = _this$props.renumerateIRIElements,\n src = _this$props.src,\n useRequestCache = _this$props.useRequestCache;\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n\n var afterInjection = this.props.afterInjection;\n var Wrapper = this.props.wrapper;\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n\n var wrapper = document.createElement(Wrapper);\n wrapper.innerHTML = ReactDOMServer.renderToStaticMarkup( /*#__PURE__*/createElement(Wrapper, null, /*#__PURE__*/createElement(Wrapper, {\n \"data-src\": src\n })));\n this.svgWrapper = this.container.appendChild(wrapper.firstChild);\n\n var afterEach = function afterEach(error, svg) {\n if (error) {\n _this2.removeSVG();\n } // TODO: It'd be better to cleanly unsubscribe from SVGInjector\n // callbacks instead of tracking a property like this.\n\n\n if (_this2._isMounted) {\n _this2.setState(function () {\n return {\n hasError: !!error,\n isLoading: false\n };\n }, function () {\n afterInjection(error, svg);\n });\n }\n };\n\n SVGInjector(this.svgWrapper.firstChild, {\n afterEach: afterEach,\n beforeEach: beforeInjection,\n cacheRequests: useRequestCache,\n evalScripts: evalScripts,\n renumerateIRIElements: renumerateIRIElements\n });\n }\n };\n\n _proto.removeSVG = function removeSVG() {\n if (this.container instanceof Node && this.svgWrapper instanceof Node) {\n this.container.removeChild(this.svgWrapper);\n this.svgWrapper = null;\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this._isMounted = true;\n this.renderSVG();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this3 = this;\n\n if (shallowDiffers(prevProps, this.props)) {\n this.setState(function () {\n return _this3.initialState;\n }, function () {\n _this3.removeSVG();\n\n _this3.renderSVG();\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this._isMounted = false;\n this.removeSVG();\n };\n\n _proto.render = function render() {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n var _this$props2 = this.props;\n _this$props2.afterInjection;\n _this$props2.beforeInjection;\n _this$props2.evalScripts;\n var Fallback = _this$props2.fallback,\n Loading = _this$props2.loading;\n _this$props2.renumerateIRIElements;\n _this$props2.src;\n _this$props2.useRequestCache;\n\n var wrapper = _this$props2.wrapper,\n rest = _objectWithoutPropertiesLoose(_this$props2, [\"afterInjection\", \"beforeInjection\", \"evalScripts\", \"fallback\", \"loading\", \"renumerateIRIElements\", \"src\", \"useRequestCache\", \"wrapper\"]);\n /* eslint-enable @typescript-eslint/no-unused-vars */\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n\n var Wrapper = wrapper;\n return /*#__PURE__*/createElement(Wrapper, Object.assign({}, rest, {\n ref: this.refCallback\n }), this.state.isLoading && Loading && /*#__PURE__*/createElement(Loading, null), this.state.hasError && Fallback && /*#__PURE__*/createElement(Fallback, null));\n };\n\n return ReactSVG;\n}(Component);\n\nReactSVG.defaultProps = {\n afterInjection: function afterInjection() {\n return undefined;\n },\n beforeInjection: function beforeInjection() {\n return undefined;\n },\n evalScripts: 'never',\n fallback: null,\n loading: null,\n renumerateIRIElements: true,\n useRequestCache: true,\n wrapper: 'div'\n};\nReactSVG.propTypes = {\n afterInjection: func,\n beforeInjection: func,\n evalScripts: oneOf(['always', 'once', 'never']),\n fallback: oneOfType([func, object, string]),\n loading: oneOfType([func, object, string]),\n renumerateIRIElements: bool,\n src: string.isRequired,\n useRequestCache: bool,\n wrapper: oneOf(['div', 'span'])\n};\nexport { ReactSVG };","import axios from \"axios\";\n\nexport const SET_CONTENT = 'SET_CONTENT';\nexport const FRONT_CANVAS = 'FRONT_CANVAS';\nexport const BACK_CANVAS = 'BACK_CANVAS';\nexport const SET_STYLE = 'SET_STYLE';\nexport const SET_SIDE = 'SET_SIDE';\nexport const FRONT_ADD_FIGURE = 'FRONT_ADD_FIGURE';\nexport const BACK_ADD_FIGURE = 'BACK_ADD_FIGURE';\nexport const UNDO_FRONT_CANVAS = 'UNDO_FRONT_CANVAS';\nexport const UNDO_BACK_CANVAS = 'UNDO_BACK_CANVAS';\nexport const REDO_BACK_CANVAS = 'REDO_BACK_CANVAS';\nexport const REDO_FRONT_CANVAS = 'REDO_FRONT_CANVAS';\nexport const HIDE_CANVAS_BORDER = 'HIDE_CANVAS_BORDER';\nexport const ORGINAL_PICS = 'ORGINAL_PICS';\nexport const ACCEPT_TERMS = 'ACCEPT_TERMS';\nexport const objectFS = 'objectFS';\nexport const objectBS = 'objectBS';\nexport const UNSELECT_GALLERY_CATEGORY = 'UNSELECT_GALLERY_CATEGORY';\nexport const LOAD_GALLERY_CATEGORIES = 'LOAD_GALLERY_CATEGORIES';\nexport const LOAD_GALLERY_CATEGORY_IMAGES = 'LOAD_GALLERY_CATEGORY_IMAGES';\nexport const SET_GALLERY_SEARCH = 'SET_GALLERY_SEARCH';\n\nexport function setSide(side) {\n return {\n type: SET_SIDE,\n payload: side\n };\n};\n\n\nexport async function fetchGalleryCategories(dispatch, getState) {\n const response = await axios.get('/library');\n dispatch({type: LOAD_GALLERY_CATEGORIES, payload: response.data});\n}\n\nexport function fetchGalleryImages(categoryId) {\n return (dispatch, getState) => {\n axios\n .get(`/library/${categoryId}`).then(\n (res) => dispatch({type: LOAD_GALLERY_CATEGORY_IMAGES, payload: res.data}),\n (error) => {}\n )\n }\n}\n\nexport function unselectGalleryCategory() {\n return {\n type: UNSELECT_GALLERY_CATEGORY,\n };\n}\n\nexport function setGallerySearch(query) {\n return {\n type: SET_GALLERY_SEARCH,\n payload: query\n };\n}\n\nexport function imageOrtext(data) {\n return {\n type: SET_CONTENT,\n payload: data\n };\n};\n\nexport function addEngraving(data) {\n return {\n type: data[0],\n payload: data[1]\n };\n}\n\n\nexport function selectCurrent(current) {\n return {\n type: current[0],\n payload: current[1]\n };\n}\n\nexport function setStyle(data) {\n return {\n type: SET_STYLE,\n payload: data\n };\n}\n\n\nexport function undoFrontSide(data) {\n return {\n type: UNDO_FRONT_CANVAS,\n payload: data\n };\n}\n\nexport function redoFrontSide(data) {\n return {\n type: REDO_FRONT_CANVAS,\n payload: data\n };\n}\n\nexport function undoBackSide(data) {\n return {\n type: UNDO_BACK_CANVAS,\n payload: data\n };\n}\n\nexport function redoBackSide(data) {\n return {\n type: REDO_BACK_CANVAS,\n payload: data\n };\n}\n\n// export function showCnavasBorder(data) {\n// return {\n// type: SHOW_CANVAS_BORDER,\n// payload: data\n// };\n// }\n\n\nexport function hideCanvasBoeder(data) {\n return {\n type: HIDE_CANVAS_BORDER,\n payload: data\n };\n}\n\nexport function addoriginalPics(pics) {\n return {\n type: ORGINAL_PICS,\n payload: pics\n };\n}\n\nexport function acceptTerms(yes) {\n return {\n type: 'ACCEPT_TERMS',\n payload: yes\n };\n}\n\nexport function countObjectFS(count) {\n return {\n type: 'objectFS',\n payload: count\n };\n}\n\nexport function countObjectBS(count) {\n return {\n type: 'objectBS',\n payload: count\n };\n}\n","import React from 'react';\nexport var ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n var batch = getBatch();\n var first = null;\n var last = null;\n return {\n clear: function clear() {\n first = null;\n last = null;\n },\n notify: function notify() {\n batch(function () {\n var listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get: function get() {\n var listeners = [];\n var listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n subscribe: function subscribe(callback) {\n var isSubscribed = true;\n var listener = last = {\n callback: callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\n\nvar nullListeners = {\n notify: function notify() {},\n get: function get() {\n return [];\n }\n};\nexport function createSubscription(store, parentSub) {\n var unsubscribe;\n var listeners = nullListeners;\n\n function addNestedSub(listener) {\n trySubscribe();\n return listeners.subscribe(listener);\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return Boolean(unsubscribe);\n }\n\n function trySubscribe() {\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n var subscription = {\n addNestedSub: addNestedSub,\n notifyNestedSubs: notifyNestedSubs,\n handleChangeWrapper: handleChangeWrapper,\n isSubscribed: isSubscribed,\n trySubscribe: trySubscribe,\n tryUnsubscribe: tryUnsubscribe,\n getListeners: function getListeners() {\n return listeners;\n }\n };\n return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider(_ref) {\n var store = _ref.store,\n context = _ref.context,\n children = _ref.children;\n var contextValue = useMemo(function () {\n var subscription = createSubscription(store);\n subscription.onStateChange = subscription.notifyNestedSubs;\n return {\n store: store,\n subscription: subscription\n };\n }, [store]);\n var previousState = useMemo(function () {\n return store.getState();\n }, [store]);\n useIsomorphicLayoutEffect(function () {\n var subscription = contextValue.subscription;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return function () {\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n };\n }, [contextValue, previousState]);\n var Context = context || ReactReduxContext;\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nif (process.env.NODE_ENV !== 'production') {}\n\nexport default Provider;","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"],\n _excluded2 = [\"reactReduxForwardedRef\"];\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n var updateCount = state[1];\n return [action.payload, updateCount + 1];\n}\n\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(function () {\n return effectFunc.apply(void 0, effectArgs);\n }, dependencies);\n}\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n lastChildProps.current = actualChildProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n var didUnsubscribe = false;\n var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n var checkForUpdates = function checkForUpdates() {\n if (didUnsubscribe) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n }\n\n var latestStoreState = store.getState();\n var newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n forceComponentUpdateDispatch({\n type: 'STORE_UPDATED',\n payload: {\n error: error\n }\n });\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n var unsubscribeWrapper = function unsubscribeWrapper() {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n}\n\nvar initStateUpdates = function initStateUpdates() {\n return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\n selectorFactory is a func that is responsible for returning the selector function used to\n compute new props from state, props, and dispatch. For example:\n export default connectAdvanced((dispatch, options) => (state, props) => ({\n thing: state.things[props.thingId],\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\n }))(YourComponent)\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\n props. Do not use connectAdvanced directly without memoizing results between calls to your\n selector, otherwise the Connect component will re-render on every state or props change.\n*/\nselectorFactory, // options object:\n_ref) {\n if (_ref === void 0) {\n _ref = {};\n }\n\n var _ref2 = _ref,\n _ref2$getDisplayName = _ref2.getDisplayName,\n getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n return \"ConnectAdvanced(\" + name + \")\";\n } : _ref2$getDisplayName,\n _ref2$methodName = _ref2.methodName,\n methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n _ref2$renderCountProp = _ref2.renderCountProp,\n renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n _ref2$storeKey = _ref2.storeKey,\n storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n _ref2$withRef = _ref2.withRef,\n withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n _ref2$forwardRef = _ref2.forwardRef,\n forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n _ref2$context = _ref2.context,\n context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n connectOptions = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n if (process.env.NODE_ENV !== 'production') {\n if (renderCountProp !== undefined) {\n throw new Error(\"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n }\n\n if (withRef) {\n throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');\n }\n\n var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: . ' + 'You may also pass a {context : MyContext} option to connect';\n\n if (storeKey !== 'store') {\n throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n }\n }\n\n var Context = context;\n return function wrapWithConnect(WrappedComponent) {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(\"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n }\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var pure = connectOptions.pure;\n\n function createChildSelector(store) {\n return selectorFactory(store.dispatch, selectorFactoryOptions);\n } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n // that just executes the given callback immediately.\n\n\n var usePureOnlyMemo = pure ? useMemo : function (callback) {\n return callback();\n };\n\n function ConnectFunction(props) {\n var _useMemo = useMemo(function () {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n var reactReduxForwardedRef = props.reactReduxForwardedRef,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded2);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]),\n propsContext = _useMemo[0],\n reactReduxForwardedRef = _useMemo[1],\n wrapperProps = _useMemo[2];\n\n var ContextToUse = useMemo(function () {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a , \") + \"or pass a custom React context provider to and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n } // Based on the previous check, one of these must be true\n\n\n var store = didStoreComeFromProps ? props.store : contextValue.store;\n var childPropsSelector = useMemo(function () {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return createChildSelector(store);\n }, [store]);\n\n var _useMemo2 = useMemo(function () {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n var subscription = createSubscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]),\n subscription = _useMemo2[0],\n notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n\n var overriddenContextValue = useMemo(function () {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription: subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n // causes a change to the calculated child component props (or we caught an error in mapState)\n\n var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n _useReducer$ = _useReducer[0],\n previousStateUpdateResult = _useReducer$[0],\n forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n if (previousStateUpdateResult && previousStateUpdateResult.error) {\n throw previousStateUpdateResult.error;\n } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n var lastChildProps = useRef();\n var lastWrapperProps = useRef(wrapperProps);\n var childPropsFromStoreUpdate = useRef();\n var renderIsScheduled = useRef(false);\n var actualChildProps = usePureOnlyMemo(function () {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n var renderedWrappedComponent = useMemo(function () {\n return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }));\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n var renderedChild = useMemo(function () {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n var Connect = pure ? /*#__PURE__*/React.memo(ConnectFunction) : ConnectFunction;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n var forwarded = /*#__PURE__*/React.forwardRef(function forwardConnectRef(props, ref) {\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (_typeof(objA) !== 'object' || objA === null || _typeof(objB) !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n//\n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return {\n dispatch: dispatch\n };\n }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && _typeof(mapDispatchToProps) === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","export default function bindActionCreators(actionCreators, dispatch) {\n var boundActionCreators = {};\n\n var _loop = function _loop(key) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = function () {\n return dispatch(actionCreator.apply(void 0, arguments));\n };\n }\n };\n\n for (var key in actionCreators) {\n _loop(key);\n }\n\n return boundActionCreators;\n}","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n var hasRunOnce = false;\n var mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n var hasRunAtLeastOnce = false;\n var state;\n var ownProps;\n var stateProps;\n var dispatchProps;\n var mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"];\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\n connect is a facade over connectAdvanced. It turns its args into a compatible\n selectorFactory, which has the signature:\n\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\n \n connect passes its args to connectAdvanced as options, which will in turn pass them to\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\n\n selectorFactory returns a final props selector from its mapStateToProps,\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\n mergePropsFactories, and pure args.\n\n The resulting final props selector is called by the Connect component instance whenever\n it receives new props or store state.\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error(\"Invalid value of type \" + _typeof(arg) + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n if (_ref2 === void 0) {\n _ref2 = {};\n }\n\n var _ref3 = _ref2,\n _ref3$pure = _ref3.pure,\n pure = _ref3$pure === void 0 ? true : _ref3$pure,\n _ref3$areStatesEqual = _ref3.areStatesEqual,\n areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n extraOptions = _objectWithoutPropertiesLoose(_ref3, _excluded);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return \"Connect(\" + name + \")\";\n },\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n }, extraOptions));\n };\n}\nexport default /*#__PURE__*/createConnect();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n var _useReducer = useReducer(function (s) {\n return s + 1;\n }, 0),\n forceRender = _useReducer[1];\n\n var subscription = useMemo(function () {\n return createSubscription(store, contextSub);\n }, [store, contextSub]);\n var latestSubscriptionCallbackError = useRef();\n var latestSelector = useRef();\n var latestStoreState = useRef();\n var latestSelectedState = useRef();\n var storeState = store.getState();\n var selectedState;\n\n try {\n if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n selectedState = newSelectedState;\n } else {\n selectedState = latestSelectedState.current;\n }\n } else {\n selectedState = latestSelectedState.current;\n }\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(function () {\n latestSelector.current = selector;\n latestStoreState.current = storeState;\n latestSelectedState.current = selectedState;\n latestSubscriptionCallbackError.current = undefined;\n });\n useIsomorphicLayoutEffect(function () {\n function checkForUpdates() {\n try {\n var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed\n\n if (newStoreState === latestStoreState.current) {\n return;\n }\n\n var _newSelectedState = latestSelector.current(newStoreState);\n\n if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n return;\n }\n\n latestSelectedState.current = _newSelectedState;\n latestStoreState.current = newStoreState;\n } catch (err) {\n // we ignore all errors here, since when the component\n // is re-rendered, the selectors are called again, and\n // will throw again, if neither props nor store state\n // changed\n latestSubscriptionCallbackError.current = err;\n }\n\n forceRender();\n }\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n return function () {\n return subscription.tryUnsubscribe();\n };\n }, [store, subscription]);\n return selectedState;\n}\n/**\n * Hook factory, which creates a `useSelector` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\n * @returns {Function} A `useSelector` hook bound to the specified context.\n */\n\n\nexport function createSelectorHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useSelector(selector, equalityFn) {\n if (equalityFn === void 0) {\n equalityFn = refEquality;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(\"You must pass a selector to useSelector\");\n }\n\n if (typeof selector !== 'function') {\n throw new Error(\"You must pass a function as a selector to useSelector\");\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(\"You must pass a function as an equality function to useSelector\");\n }\n }\n\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store,\n contextSub = _useReduxContext.subscription;\n\n var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n * const counter = useSelector(state => state.counter)\n * return
{counter}
\n * }\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","export * from './exports';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch'; // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };","import React from 'react';\nimport wwlLogo from '../Logos/wwl-logo.svg';\nimport iconImage from '../Logos/icon-image.svg';\nimport iconText from '../Logos/icon-text.svg';\nimport iconGallery from '../Logos/icon-gallery.svg';\nimport iconDuplicate from '../Logos/icon-tool-duplicate.svg';\nimport iconDelete from '../Logos/icon-tool-delete.svg';\nimport iconCenterHo from '../Logos/icon-tool-centerhorizontal.svg';\nimport iconCenterVe from '../Logos/icon-tool-centervertical.svg';\nimport iconRedo from '../Logos/icon-tool-redo.svg';\nimport iconUndo from '../Logos/icon-tool-undo.svg';\nimport iconToTop from '../Logos/icon-tool-totop.svg';\nimport iconToButtom from '../Logos/icon-tool-tobottom.svg';\nimport iconToRight from '../Logos/icon-tool-toright.svg';\nimport iconToLeft from '../Logos/icon-tool-toleft.svg';\nimport { ReactSVG } from 'react-svg';\nimport { imageOrtext } from '../actions';\nimport { connect } from 'react-redux';\nimport ReactTooltip from 'react-tooltip';\nimport '../style/tools.css';\n\nconst isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n\n\n\nconst Tools = props => {\n let canvas, workArea;\n if (props.sideIs === 'front') {\n canvas = props.frontCurrent;\n workArea = props.product.workArea.front;\n } else {\n canvas = props.backCurrent;\n workArea = props.product.workArea.back;\n }\n\n function undo() {\n if (props.sideIs === 'front') {\n props.undoFront();\n } else props.undoBack();\n }\n\n function redo() {\n if (props.sideIs === 'front') {\n props.redoFront();\n } else props.redoBack();\n }\n\n function showPortraitOverlay () {\n // for portrait orientation - show content using z-index\n if (document.documentElement.clientWidth <= document.documentElement.clientHeight ) {\n document.getElementById('content').style.zIndex = '3';\n }\n }\n\n return(\n
\n
\n );\n};\n\n\nconst mapStateToProps = state => {\n const { frontCurrent, backCurrent } = state.currentFigureReducer;\n const { contentIs, sideIs } = state.optionsReducer;\n const { undoFront } = state.undoredoReducer;\n const { undoBack } = state.undoredoReducer;\n const { redoBack } = state.undoredoReducer;\n const { redoFront } = state.undoredoReducer;\n const { product } = state.productReducer;\n\n return {\n frontCurrent, contentIs, backCurrent, sideIs,\n undoFront, undoBack, redoBack, redoFront, product\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n imageOrtext: data => dispatch(imageOrtext(data)),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Tools);\n","/* eslint-disable no-redeclare */\nimport React, { Component } from 'react';\nimport textItalic from '../Logos/icon-text-italic.svg';\nimport textBold from '../Logos/icon-text-bold.svg';\nimport textUnderline from '../Logos/icon-text-underline.svg';\nimport textCenter from '../Logos/icon-text-center.svg';\nimport textLeft from '../Logos/icon-text-left.svg';\nimport textRight from '../Logos/icon-text-right.svg';\nimport { ReactSVG } from 'react-svg';\nimport { connect } from 'react-redux';\nimport { addEngraving, setStyle } from '../actions';\nvar FontFaceObserver = require('fontfaceobserver');\n\nconst withoutBold = 'Abel, Audiowide, CarterOne, GreatVibes, Graduate, Great Vibes, Michroma, Niconne, vast-shadow, Teko, VastShadow';\nconst withoutItalic = 'Abel, Audiowide, CarterOne, GreatVibes, Cinzel, Kameron, Graduate, Great Vibes, Michroma, Niconne, vast-shadow, RobotoSlab, kameron, Monda, monda, OleoScript, Play, Teko, boldCinzel, boldKameron, boldMonda, boldOleoScript, boldPlay, boldRobotoSlab, VastShadow';\n\nclass TextOptions extends Component {\n state = {\n fontSize: 40,\n lineHeight: 0,\n charSpacing: 50,\n textDecoration: false,\n textAlign: '',\n fontFamily: '',\n }\n\n componentWillReceiveProps(nextprops) {\n const { style } = nextprops\n const { fontSize , lineHeight, charSpacing , textAlign, textDecoration, fontFamily } = style\n\n if(fontSize && fontSize !== this.state.fontSize) {\n this.setState({ fontSize : fontSize });\n }\n if(lineHeight && lineHeight !== this.state.lineHeight) {\n this.setState({ lineHeight : lineHeight });\n }\n if(charSpacing && parseInt(charSpacing) !== this.state.charSpacing) {\n this.setState({ charSpacing : parseInt(charSpacing) });\n }\n if(textAlign && textAlign !== this.state.textAlign ) {\n this.setState({ textAlign : textAlign });\n }\n if(textDecoration && textDecoration !== this.state.textDecoration) {\n this.setState({ textDecoration : textDecoration });\n }\n if(fontFamily && fontFamily !== this.state.fontFamily) {\n this.setState({ fontFamily : fontFamily });\n }\n return true;\n }\n\n findFontfamilyvalue = () => {\n const { fontFamily } = this.state;\n if (fontFamily.includes('Abel')) {\n return 'Abel';\n } else if(fontFamily.includes('Audiowide')) {\n return 'Audiowide';\n } else if(fontFamily.includes('Bitter')) {\n return 'Bitter';\n } else if(fontFamily.includes('Carter')) {\n return 'CarterOne';\n } else if(fontFamily.includes('Cinzel')) {\n return 'Cinzel';\n } else if(fontFamily.includes('Graduate')) {\n return 'Graduate';\n } else if(fontFamily.includes('GreatVibes')) {\n return 'GreatVibes';\n } else if(fontFamily.includes('Kameron')) {\n return 'Kameron';\n } else if(fontFamily.includes('LobsterTwo')) {\n return 'LobsterTwo';\n } else if(fontFamily.includes('Michroma')) {\n return 'Michroma';\n } else if(fontFamily.includes('Monda')) {\n return 'Monda';\n } else if(fontFamily.includes('Niconne')) {\n return 'Niconne';\n } else if(fontFamily.includes('OleoScript')) {\n return 'OleoScript';\n } else if(fontFamily === 'Play') {\n return 'Play';\n } else if(fontFamily.includes('PlayfairDisplay')) {\n return 'PlayfairDisplay';\n } else if(fontFamily.includes('PTSans')) {\n return 'PTSans';\n } else if(fontFamily.includes('Raleway')) {\n return 'Raleway';\n } else if(fontFamily.includes('RobotoSlab')) {\n return 'RobotoSlab';\n } else if(fontFamily.includes('Teko')) {\n return 'Teko';\n } else if(fontFamily.includes('VastShadow')) {\n return 'VastShadow';\n }\n }\n\n render() {\n let canvas;\n if (this.props.sideIs === 'front') {\n canvas = this.props.frontCurrent;\n } else canvas = this.props.backCurrent;\n let addFigure;\n if (this.props.sideIs === 'front') {\n addFigure = 'FRONT_ADD_FIGURE';\n } else addFigure = 'BACK_ADD_FIGURE';\n return(\n
\n
\n document.getElementById('content').style.zIndex = '1' }>X
\n
\n
\n TEXTGRÖSSE\n {\n canvas.getActiveObject().set('fontSize', e.target.value);\n canvas.renderAll();\n const newStyle = { ...this.state, fontSize: e.target.value/1 };\n this.props.setStyle(newStyle);\n }}\n step=\"1\"/>\n \n
\n
\n ZEILENHÖHE\n {\n canvas.getActiveObject().set('lineHeight', `${ e.target.value}`);\n canvas.renderAll();\n const newStyle = { ...this.state, lineHeight: e.target.value/1 };\n this.props.setStyle(newStyle);\n }\n }\n step=\"0.1\"/>\n \n\n
\n
\n ZEICHENABSTAND\n {\n canvas.getActiveObject().set('charSpacing', e.target.value);\n canvas.renderAll();\n const newStyle = { ...this.state, charSpacing: e.target.value };\n // this.setState({ charSpacing: e.target.value });\n this.props.setStyle(newStyle);\n }}\n step=\"10\"/>\n \n\n
\n
\n
\n
\n AUSRICHTUNG\n
\n\n {\n canvas.getActiveObject().set('textAlign', 'left');\n canvas.renderAll();\n this.setState({ textAlign: 'left' });\n }}\n style={{ fill: this.state.textAlign === 'left'\n ? '#B39964' : 'black' }}\n />\n {\n canvas.getActiveObject().set('textAlign', 'center');\n canvas.renderAll();\n const newStyle = { ...this.state, textAlign: 'center' };\n this.props.setStyle(newStyle);\n this.setState({ textAlign: 'center' });\n }}\n style={{ fill: this.state.textAlign === 'center' ? '#B39964' : 'black' }}\n />\n {\n canvas.getActiveObject().set('textAlign', 'right');\n canvas.renderAll();\n const newStyle = { ...this.state, textAlign: 'right' };\n this.props.setStyle(newStyle);\n this.setState({ textAlign: 'right' });\n }}\n style={{ fill: this.state.textAlign === 'right' ? '#B39964' : 'black' }}\n />\n
\n\n
\n
\n GESTALTUNG\n
\n {\n const { fontFamily } = this.state;\n const italic = 'italic';\n if (!fontFamily.includes(italic)) {\n const newfont = fontFamily + italic;\n this.setState({ fontFamily: newfont });\n const newStyle = { ...this.state, fontFamily: newfont };\n this.props.setStyle(newStyle);\n var myfont = new FontFaceObserver(newfont);\n myfont.load()\n .then(() => {\n // when font is loaded, use it.\n canvas.getActiveObject().set('fontFamily', newfont);\n canvas.requestRenderAll();\n }).catch(e => {\n alert('die Schriftart ist nicht in kursiv oder kursiv & fett verfügbar');\n });\n } else {\n const newfont = fontFamily.replace(italic,'');\n this.setState({ fontFamily: newfont });\n const newStyle = { ...this.state, fontFamily: newfont };\n this.props.setStyle(newStyle);\n // eslint-disable-next-line no-redeclare\n var myfont = new FontFaceObserver(newfont);\n myfont.load()\n .then(() => {\n canvas.getActiveObject().set('fontFamily', newfont);\n canvas.requestRenderAll();\n }).catch(e => {\n alert('für diese Schriftart wählen Sie entweder kursiv oder fett aus');\n });\n }\n }\n\n }\n style={{ fill: withoutItalic.includes(this.state.fontFamily)\n ? '#A9A9A9' :\n this.state.fontFamily.includes('italic') ? '#B39964' : 'black'\n }}\n />\n {\n const { fontFamily } = this.state;\n const bold = 'bold';\n if (!fontFamily.includes(bold)) {\n const newfont = bold + fontFamily;\n this.setState({ fontFamily: newfont });\n const newStyle = { ...this.state, fontFamily: newfont };\n this.props.setStyle(newStyle);\n var myfont = new FontFaceObserver(newfont);\n myfont.load()\n .then(() => {\n // when font is loaded, use it.\n canvas.getActiveObject().set('fontFamily', newfont);\n canvas.requestRenderAll();\n }).catch(e => {\n alert('für diese Schriftart wählen Sie entweder kursiv oder fett aus');\n });\n } else {\n const newfont = fontFamily.replace(bold,'');\n this.setState({ fontFamily: newfont });\n const newStyle = { ...this.state, fontFamily: newfont };\n this.props.setStyle(newStyle);\n var myfont = new FontFaceObserver(newfont);\n myfont.load()\n .then(() => {\n // when font is loaded, use it.\n canvas.getActiveObject().set('fontFamily', newfont);\n canvas.requestRenderAll();\n }).catch(e => {\n alert('die Schriftart ist nicht in fett oder fett & kursiv verfügbar');\n });\n }\n }}\n style={{ fill: withoutBold.includes(this.state.fontFamily)\n ? '#A9A9A9' :\n this.state.fontFamily.includes('bold') ? '#B39964' : 'black'\n\n }}\n />\n {\n if (this.state.textDecoration === false) {\n canvas.getActiveObject().set('underline', true);\n canvas.renderAll();\n this.setState({ textDecoration: true });\n canvas.getActiveObject().dirty = true;\n } else {\n canvas.getActiveObject().set('underline', false);\n canvas.renderAll();\n this.setState({ textDecoration: false });\n canvas.getActiveObject().dirty = false;\n }\n } }\n style={{ fill: this.state.textDecoration === true ? '#B39964' : 'black' }}\n />\n
\n
\n
\n SCHRIFTART\n\n \n
\n
\n\n
\n this.props.addEngraving([addFigure, 'Meine Gravur'])} >Textfeld einfügen\n
\n
\n );\n }\n}\n\nconst mapStateToProps = state => {\n const { frontCurrent, backCurrent } = state.currentFigureReducer;\n const { style } = state.styleReducer;\n const { sideIs } = state.optionsReducer;\n return {\n frontCurrent, style, sideIs, backCurrent\n };\n};\nconst mapDispatchToProps = dispatch => ({\n addEngraving: data => dispatch(addEngraving(data)),\n setStyle: fs => dispatch(setStyle(fs))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TextOptions);\n","/* eslint-disable prefer-destructuring */\nimport React , { Component } from 'react';\nimport uploadIcon from '../Logos/upload.svg';\nimport { connect } from 'react-redux';\nimport { addEngraving, addoriginalPics, acceptTerms, imageOrtext } from '../actions';\n// import { SVG } from '@svgdotjs/svg.js';\n// import Filter from '@svgdotjs/svg.filter.js/src/svg.filter';\n// import Filter from '@svgdotjs/svg.filter.js'; //3.0.2\nimport { ReactSVG } from 'react-svg';\n\n\nconst isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n\nclass ImageOptions extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n range: 145,\n userImages: [],\n invert: true,\n showCanvas: false,\n invertedImageUrl: null,\n userSVG: [],\n color: [this.props.product.engColor.r,this.props.product.engColor.g,this.props.product.engColor.b]\n };\n this.canvas = React.createRef();\n this.image = React.createRef();\n }\n\n checkImage = e => {\n if (e.target.files[0] &&\n e.target.files[0].type.includes('jpeg') ||\n e.target.files[0].type.includes('jpg') ||\n e.target.files[0].type.includes('png')) {\n const { userImages } = this.state;\n userImages.push(e.target.files[0]);\n const img = new Image();\n img.id = e.target.files[0].name;\n img.src = window.URL.createObjectURL(e.target.files[0]);\n img.onload = () => {\n if(img.width > 599 && img.height > 599 && img.width < 2501 && img.height < 2501) {\n this.image.current = img;\n this.setState({ showCanvas: true, userImages });\n this.invertColor();\n } else alert('Die Datei kann nicht hochgeladen werden. Bitte beachten Sie die Dateivoraussetzungen.');\n };\n } else if ( e.target.files[0].type.includes('svg') ) {\n const { userSVG } = this.state;\n const reader = new FileReader();\n reader.addEventListener('load', event => {\n const invertedImageUrl = { url: event.target.result };\n userSVG.push(event.target.result);\n this.setState({ invertedImageUrl, userSVG });\n let addFigure;\n if (this.props.sideIs === 'front') {\n addFigure = 'FRONT_ADD_FIGURE';\n } else addFigure = 'BACK_ADD_FIGURE';\n this.props.addoriginalPics([this.state.userImages, this.state.userSVG]);\n this.props.addEngraving([addFigure, invertedImageUrl]);\n });\n reader.readAsText(e.target.files[0]);\n } else {\n alert('Laden Sie Bitte ein Bild hoch');\n }\n }\n\n reInverColor = e => {\n let value;\n if (e) {\n value = e.target.value;\n } else value = this.state.range;\n const img = this.image.current;\n const { color } = this.state;\n const canvas = this.canvas.current;\n canvas.width = img.width;\n canvas.height = img.height;\n canvas.id = img.id;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0);\n var imgData = ctx.getImageData(0, 0, img.width, img.height);\n var i;\n for (i = 0; i < imgData.data.length; i += 4) {\n if (imgData.data[i] < value || imgData.data[i+1] < value || imgData.data[i+2] < value) {\n imgData.data[i+3] = 0;\n } else {\n imgData.data[i] = color[0];\n imgData.data[i+1] = color[1];\n imgData.data[i+2] = color[2];\n imgData.data[i+3] = 255;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n const invertedImageUrl = { url: canvas.toDataURL(), id: canvas.id };\n this.setState({ invertedImageUrl });\n }\n\n invertColor = e => {\n let value;\n if (e) {\n value = e.target.value;\n } else value = this.state.range;\n const img = this.image.current;\n const { color } = this.state;\n const canvas = this.canvas.current;\n canvas.width = img.width;\n canvas.height = img.height;\n canvas.id = img.id;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0);\n var imgData = ctx.getImageData(0, 0, img.width, img.height);\n var i;\n\n for (i = 0; i < imgData.data.length; i += 4) {\n if (imgData.data[i] > value || imgData.data[i+1] > value || imgData.data[i+2] > value) {\n imgData.data[i+3] = 0;\n } else {\n imgData.data[i] = color[0];\n imgData.data[i+1] = color[1];\n imgData.data[i+2] = color[2];\n imgData.data[i+3] = 255;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n const invertedImageUrl = { url: canvas.toDataURL(), id: canvas.id };\n this.setState({ invertedImageUrl });\n }\n\n checkColor(state) {\n const color = state.color\n if (color[0] > 200 && color[1] > 200 && color[2] > 200) {\n return false\n } else {\n return true\n }\n };\n\n render() {\n let addFigure;\n if (this.props.sideIs === 'front') {\n addFigure = 'FRONT_ADD_FIGURE';\n } else addFigure = 'BACK_ADD_FIGURE';\n return (\n
\n
\n
\n document.getElementById('content').style.zIndex = '1' }>X
\n
\n
\n akzeptierte Dateiformate: jpg, png, jpeg, svg\n Mindestabmessungen: 600x600 Pixel\n Maximalabmessungen: 2500x2500 Pixel\n
\n
\n \n this.checkImage(e)}\n onClick={ event => event.target.value = null }/>\n
\n {this.state.showCanvas? : null }\n {this.state.showCanvas?
\n Kontrast\n {\n if (this.state.invert === true) {\n this.invertColor(e);\n } else this.reInverColor(e);\n this.setState({ range: e.target.value });\n }}\n step=\"1\"/>\n
: null }\n
\n\n {this.state.showCanvas? {\n if (this.state.invert === true) {\n this.reInverColor();\n this.setState({ invert: !this.state.invert });\n } else {\n this.invertColor();\n }\n this.setState({ invert: !this.state.invert });\n }} >Invertieren : null }\n {this.state.showCanvas? {\n this.setState({ showCanvas: false });\n }} >Löschen : null }\n {this.state.showCanvas? {\n this.props.addoriginalPics([this.state.userImages, this.state.userSVG]);\n this.props.addEngraving([addFigure, this.state.invertedImageUrl]);\n this.props.imageOrtext('Text');\n document.getElementById('content').style.zIndex = '1';\n }\n }>Hinzufügen : null }\n
\n
\n
\n
\n akzeptierte Dateiformate: jpg, png, jpeg, svg\n Mindestabmessungen: 600x600 Pixel\n Maximalabmessungen: 2500x2500 Pixel\n \n Ich habe das Recht, das Bild für kommerzielle Zwecke zu\n verwenden und verletze keine Rechte Dritter mit der Nutzung des Bildes.\n \n \n Im Fall einer Rechtsverletzung wird WeLoveLaser den Rechteinhaber mit sämtlichen Forderungen\n an mich verweisen.\n \n \n Mir ist bekannt, dass die unrechtmäßige Verwendung, von durch Dritte geschützen Motiven,\n kein Kavaliersdelikt ist und mit hohen Geldstrafen geahndet werden kann.\n \n \n Wir behalten uns vor die Produktion von gestalteten Produkten, die offensichtlich markenrechtlich\n relevante Bestandteile beinhalten, abzulehnen.\n \n
this.props.acceptTerms(true)}>\n \n this.checkImage(e)}/>\n
\n
\n
\n );\n }\n}\nconst mapStateToProps = state => {\n const { sideIs, userAccept } = state.optionsReducer;\n const { product } = state.productReducer;\n\n return {\n sideIs, userAccept, product\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n acceptTerms: yes => dispatch(acceptTerms(yes)),\n addEngraving: data => dispatch(addEngraving(data)),\n addoriginalPics: pics => dispatch(addoriginalPics(pics)),\n imageOrtext: data => dispatch(imageOrtext(data))\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ImageOptions);\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\n\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n} // Inlined version of the `symbol-observable` polyfill\n\n\nvar $$observable = function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}();\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\n\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\n\nfunction isPlainObject(obj) {\n if (_typeof(obj) !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n} // Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\n\n\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n\n var type = _typeof(val);\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = _typeof(val);\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (_typeof(observer) !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\n\n\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (_typeof(actionCreators) !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\n\n\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n // Standard Redux middleware definition pattern:\n // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n var middleware = function middleware(_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n // If this \"action\" is really a function, call it and return the result.\n if (typeof action === 'function') {\n // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n return action(dispatch, getState, extraArgument);\n } // Otherwise, pass the action down the middleware chain as usual\n\n\n return next(action);\n };\n };\n };\n\n return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","import { SET_CONTENT,\n FRONT_CANVAS, BACK_CANVAS,\n SET_STYLE,\n SET_SIDE,\n FRONT_ADD_FIGURE,\n BACK_ADD_FIGURE,\n UNDO_FRONT_CANVAS, UNDO_BACK_CANVAS, REDO_BACK_CANVAS, REDO_FRONT_CANVAS,\n HIDE_CANVAS_BORDER, ORGINAL_PICS, ACCEPT_TERMS, objectFS, objectBS,\n\n UNSELECT_GALLERY_CATEGORY, SET_GALLERY_SEARCH,\n LOAD_GALLERY_CATEGORIES, LOAD_GALLERY_CATEGORY_IMAGES,\n} from './actions';\n\nconst initCurrent = {\n frontCurrent: null,\n backCurrent: null\n};\n\nconst initFrontside = {\n frontEngraving: [],\n countFS: 0,\n};\n\nconst initBackside = {\n backEngraving: [],\n countBS: 0\n};\n\nconst initUndoRedo = {\n undoFront: [],\n undoBack: [],\n redoFront: [],\n redoBack: []\n};\n\nconst initOptions = {\n contentIs: 'Text',\n sideIs: 'front',\n // canvasBorder: {},\n orginalPics: [],\n userAccept: false,\n gallery: {\n selected: 0,\n images: [],\n categories: [],\n search: ''\n }\n};\n\nconst initStyle = {\n style: {\n fontSize: 40,\n lineHeight: 1.0,\n charSpacing: 50,\n textDecoration: false,\n textAlign: '',\n fontFamily: 'Abel',\n }\n};\n\nexport const optionsReducer = (state = initOptions, action) => {\n switch (action.type) {\n case SET_CONTENT:\n return {\n ...state,\n contentIs: action.payload\n };\n case SET_SIDE: {\n return {\n ...state,\n sideIs: action.payload\n };\n }\n\n case HIDE_CANVAS_BORDER: {\n let canvasBorder = [state.canvasBorder];\n canvasBorder = action.payload;\n return {\n ...state,\n canvasBorder\n };\n }\n\n case ACCEPT_TERMS: {\n let userAccept = [state.acceptTerms];\n userAccept = action.payload;\n return {\n ...state,\n userAccept\n };\n }\n\n case ORGINAL_PICS: {\n const orginalPics = action.payload;\n return {\n ...state,\n orginalPics\n };\n }\n\n case UNSELECT_GALLERY_CATEGORY: {\n return {\n ...state,\n gallery: {\n ...state.gallery,\n selected: 0,\n images: []\n }\n }\n }\n\n case LOAD_GALLERY_CATEGORIES: {\n return {\n ...state,\n gallery: {\n ...state.gallery,\n categories: action.payload\n }\n };\n }\n\n case LOAD_GALLERY_CATEGORY_IMAGES: {\n return {\n ...state,\n gallery: {\n ...state.gallery,\n images: action.payload\n }\n };\n }\n\n case SET_GALLERY_SEARCH: {\n return {\n ...state,\n gallery: {\n ...state.gallery,\n search: action.payload\n }\n }\n }\n\n default:\n return state;\n }\n};\n\n\nexport const currentFigureReducer = (state = initCurrent, action) => {\n\n switch (action.type) {\n case FRONT_CANVAS:\n let frontCurrent = [state.frontCurrent];\n frontCurrent = action.payload;\n return {\n ...state,\n frontCurrent\n };\n case BACK_CANVAS:\n let backCurrent = [state.backCurrent];\n backCurrent = action.payload;\n return {\n ...state,\n backCurrent\n };\n default:\n return state;\n }\n};\n\nexport const styleReducer = (state = initStyle, action) => {\n switch (action.type) {\n case SET_STYLE:\n let style = [state.style];\n style = action.payload;\n return {\n style\n };\n default:\n return state;\n }\n};\n\nexport const productReducer = (state = {}, action) => {\n switch (action.type) {\n case 'ADD_PRODUCT':\n const product = action.payload;\n return {\n product\n };\n default:\n return state;\n }\n};\n\nexport const frontsideReducer = (state = initFrontside, action) => {\n switch (action.type) {\n case FRONT_ADD_FIGURE:\n const frontEngraving = [ ...state.frontEngraving];\n frontEngraving.push(action.payload);\n return {\n ...state,\n frontEngraving\n };\n case objectFS:\n const countFS = action.payload;\n return {\n ...state,\n countFS\n };\n default:\n return state;\n }\n};\n\nexport const backsideReducer = (state = initBackside, action) => {\n switch (action.type) {\n case BACK_ADD_FIGURE:\n const backEngraving = [ ...state.backEngraving];\n backEngraving.push(action.payload);\n return {\n ...state,\n backEngraving\n };\n case objectBS:\n const countBS = action.payload;\n return {\n ...state,\n countBS\n };\n default:\n return state;\n }\n};\n\nexport const undoredoReducer = (state = initUndoRedo, action) => {\n switch (action.type) {\n case UNDO_FRONT_CANVAS:\n let undoFront = [state.undoFront];\n undoFront = action.payload;\n return {\n ...state,\n undoFront\n };\n case UNDO_BACK_CANVAS:\n let undoBack = [state.undoBack];\n undoBack = action.payload;\n return {\n ...state,\n undoBack\n };\n\n case REDO_FRONT_CANVAS:\n let redoFront = [state.redoFront];\n redoFront = action.payload;\n return {\n ...state,\n redoFront\n };\n case REDO_BACK_CANVAS:\n let redoBack = [state.redoBack];\n redoBack = action.payload;\n return {\n ...state,\n redoBack\n };\n default:\n return state;\n }\n};\n","import { createStore, combineReducers, applyMiddleware } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\nimport { optionsReducer,\n currentFigureReducer,\n styleReducer,\n productReducer,\n frontsideReducer,\n backsideReducer,\n undoredoReducer\n} from './reducers';\n\n\n\nfunction lastAction(state = null, action) {\n return action;\n}\n\n\nconst rootReducer = combineReducers({\n optionsReducer, productReducer, frontsideReducer,\n backsideReducer, currentFigureReducer, styleReducer, undoredoReducer,\n lastAction\n});\n\nexport const store = createStore(rootReducer, applyMiddleware(thunkMiddleware));\n\n// store.subscribe( () => {\n// console.log(store.getState().lastAction, 'last action');\n// console.log(store.getState());\n// });\n","/* eslint-disable prefer-destructuring */\n\nimport React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { addEngraving,\n fetchGalleryCategories, fetchGalleryImages,\n unselectGalleryCategory, setGallerySearch } from '../actions';\nimport { store } from '../store';\n\nclass GalleryOptions extends Component {\n\n constructor(props) {\n super(props);\n\n store.dispatch(fetchGalleryCategories);\n }\n\n addSVGToProduct = img => {\n\n fetch(img.url, { headers: {\n 'pragma': 'no-cache',\n 'cache-control': 'no-cache'\n }})\n .then(r => r.blob())\n .then(b => {\n const reader = new FileReader();\n reader.addEventListener('load', evt => {\n const side = this.props.sideIs === 'front' ? 'FRONT_ADD_FIGURE' : 'BACK_ADD_FIGURE';\n\n this.props.addEngraving([side, { url: evt.target.result }]);\n });\n reader.readAsText(b);\n });\n }\n\n showPreview = img => {\n let previewContainer = document.getElementById('gallery-preview');\n previewContainer.style.zIndex = '3';\n previewContainer.querySelector('img').src = img.url;\n previewContainer.querySelector('span').innerHTML = img.name;\n\n previewContainer.classList.add('show');\n }\n\n hidePreview = () => {\n document.getElementById('gallery-preview').classList.remove('show');\n }\n\n renderImages = () => {\n let images = this.props.images.filter(img => {\n if (this.props.search === '') return true;\n let keywords = this.props.search.split(/, /);\n return keywords.every(tested => img.keywords.includes(tested.trim().toLowerCase()));\n });\n\n if (!images.length) {\n return
Nothing found
;\n }\n\n return images.map((img) => {\n return {img.name}\n this.addSVGToProduct(img)}\n onMouseEnter={() => this.showPreview(img)}\n onMouseLeave={() => this.hidePreview()}\n />\n })\n }\n\n render() {\n const shouldRenderImages = !!this.props.images.length;\n const shouldRenderCategories = !shouldRenderImages && !!this.props.categories.length;\n\n return (\n
\n\n
\n \"\"\n \n
\n\n
\n
\n document.getElementById('content').style.zIndex = '1' }>X
\n\n { shouldRenderImages &&\n
\n \n {\n this.hidePreview();\n this.props.setGallerySearch(e.target.value);\n }}\n />\n \n
\n }\n\n
\n { shouldRenderCategories && this.props.categories.map((category) => {\n return store.dispatch(fetchGalleryImages(category.id))}\n key={category.id}\n >\n {category.name}\n \n })\n }\n\n { shouldRenderImages &&\n this.renderImages()\n }\n\n {\n !shouldRenderCategories && !shouldRenderImages &&\n
Category is empty
\n }\n
\n
\n
\n );\n }\n}\n\nconst mapStateToProps = state => {\n const { sideIs, gallery: {selected, images, categories, search}} = state.optionsReducer;\n\n return {\n sideIs, selected, images, categories, search\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n unselectGalleryCategory: () => dispatch(unselectGalleryCategory()),\n addEngraving: data => dispatch(addEngraving(data)),\n setGallerySearch: (query) => dispatch(setGallerySearch(query)),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(GalleryOptions);\n","import React, { Component } from 'react';\nimport '../style/content';\nimport { connect } from 'react-redux';\nimport TextOptions from './TextOptions';\nimport ImageOptions from './ImageOptions';\nimport GalleryOptions from './GalleryOptions';\n\n\nclass Content extends Component {\n\n render() {\n return(\n
\n { (() => {\n switch(this.props.contentIs) {\n case 'Text': return ;\n case 'uploadImage': return ;\n case 'galleryImages': return ;\n }\n })()}\n
\n );\n }\n}\n\nconst mapStateToProps = state => {\n const { contentIs } = state.optionsReducer;\n return {\n contentIs\n };\n};\n\n\n\nexport default connect(mapStateToProps)(Content);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n/*!\n * reactjs-popup v1.5.0\n * (c) 2019-present Youssouf EL AZIZI \n * Released under the MIT License.\n */\nimport React from 'react';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n/* Algo to calculate position\n 1. center position for popup content : the center of the trigger will be the center of the content content\n so the popup content position will be like this :\n top => the y of the center for the trigger element : trigger.top + trigger.height/2\n left => the x of the center for the trigger element : trigger.left + trigger.width/2\n\n 2. translate position according to the first position attribute passed in the function argument\n for example :\n position = 'left top'\n we need to handle the first argument in the position: 'left' => that's mean we need to translate the popup content according to the X axis by - content.width/2\n\n 3.translate position according to the first position attribute passed in the function argument\n for example :\n position = 'left top'\n the second argument 'top' => translate popup content by + content.height*4/5\n\n 4. check if calculated position is going out of bounds of wrapper box or not. If yes repeat 1-3 for next position enum. By default wrapper box is window element\n*/\n\n\nfunction getCoordinatesForPosition(triggerBounding, ContentBounding, position, arrow, _ref) {\n var offsetX = _ref.offsetX,\n offsetY = _ref.offsetY;\n var margin = arrow ? 8 : 0;\n var args = position.split(' '); // the step N 1 : center the popup content => ok\n\n var CenterTop = triggerBounding.top + triggerBounding.height / 2;\n var CenterLeft = triggerBounding.left + triggerBounding.width / 2;\n var height = ContentBounding.height,\n width = ContentBounding.width;\n var top = CenterTop - height / 2;\n var left = CenterLeft - width / 2;\n var transform = '';\n var arrowTop = '0%';\n var arrowLeft = '0%'; // the step N 2 : => ok\n\n switch (args[0]) {\n case 'top':\n top -= height / 2 + triggerBounding.height / 2 + margin;\n transform = \"rotate(45deg)\";\n arrowTop = '100%';\n arrowLeft = '50%';\n break;\n\n case 'bottom':\n top += height / 2 + triggerBounding.height / 2 + margin;\n transform = \"rotate(225deg)\";\n arrowLeft = '50%';\n break;\n\n case 'left':\n left -= width / 2 + triggerBounding.width / 2 + margin;\n transform = \" rotate(-45deg)\";\n arrowLeft = '100%';\n arrowTop = '50%';\n break;\n\n case 'right':\n left += width / 2 + triggerBounding.width / 2 + margin;\n transform = \"rotate(135deg)\";\n arrowTop = '50%';\n break;\n\n default:\n }\n\n switch (args[1]) {\n case 'top':\n top = triggerBounding.top;\n arrowTop = \"\".concat(triggerBounding.height / 2, \"px\");\n break;\n\n case 'bottom':\n top = triggerBounding.top - height + triggerBounding.height;\n arrowTop = \"\".concat(height - triggerBounding.height / 2, \"px\");\n break;\n\n case 'left':\n left = triggerBounding.left;\n arrowLeft = \"\".concat(triggerBounding.width / 2, \"px\");\n break;\n\n case 'right':\n left = triggerBounding.left - width + triggerBounding.width;\n arrowLeft = \"\".concat(width - triggerBounding.width / 2, \"px\");\n break;\n\n default:\n }\n\n top = args[0] === 'top' ? top - offsetY : top + offsetY;\n left = args[0] === 'left' ? left - offsetX : left + offsetX;\n return {\n top: top,\n left: left,\n transform: transform,\n arrowLeft: arrowLeft,\n arrowTop: arrowTop\n };\n}\n\nfunction calculatePosition(triggerBounding, ContentBounding, positions, arrow, _ref2, wrapperBox) {\n var offsetX = _ref2.offsetX,\n offsetY = _ref2.offsetY;\n var bestCoords;\n var i = 0;\n\n while (i < positions.length) {\n bestCoords = getCoordinatesForPosition(triggerBounding, ContentBounding, positions[i], arrow, {\n offsetX: offsetX,\n offsetY: offsetY\n });\n var contentBox = {\n top: bestCoords.top,\n left: bestCoords.left,\n width: ContentBounding.width,\n height: ContentBounding.height\n };\n\n if (contentBox.top <= wrapperBox.top || contentBox.left <= wrapperBox.left || contentBox.top + contentBox.height >= wrapperBox.top + wrapperBox.height || contentBox.left + contentBox.width >= wrapperBox.left + wrapperBox.width) {\n i++;\n } else {\n break;\n }\n }\n\n return bestCoords;\n}\n\nvar styles = {\n popupContent: {\n tooltip: {\n position: 'absolute',\n zIndex: '2',\n width: '200px',\n background: \"rgb(255, 255, 255)\",\n border: \"1px solid rgb(187, 187, 187)\",\n boxShadow: \"rgba(0, 0, 0, 0.2) 0px 1px 3px\",\n padding: '5px'\n },\n modal: {\n position: 'relative',\n background: \"rgb(255, 255, 255)\",\n width: '50%',\n margin: 'auto',\n border: \"1px solid rgb(187, 187, 187)\",\n padding: '5px'\n }\n },\n popupArrow: {\n height: '10px',\n width: '10px',\n position: 'absolute',\n background: 'rgb(255, 255, 255)',\n transform: 'rotate(45deg)',\n margin: '-5px',\n zIndex: '-1',\n boxShadow: 'rgba(0, 0, 0, 0.2) 1px 1px 1px'\n },\n overlay: {\n tooltip: {\n position: 'fixed',\n top: '0',\n bottom: '0',\n left: '0',\n right: '0'\n },\n modal: {\n position: 'fixed',\n top: '0',\n bottom: '0',\n left: '0',\n right: '0',\n background: \"rgba(0, 0, 0,0.5)\",\n display: 'flex',\n zIndex: '999'\n }\n }\n};\nvar POSITION_TYPES = ['top left', 'top center', 'top right', 'right top', 'right center', 'right bottom', 'bottom left', 'bottom center', 'bottom right', 'left top', 'left center', 'left bottom', 'center center'];\n\nvar Popup = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(Popup, _React$PureComponent);\n\n function Popup(props) {\n var _this;\n\n _classCallCheck(this, Popup);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Popup).call(this, props));\n\n _defineProperty(_assertThisInitialized(_this), \"repositionOnResize\", function () {\n _this.setPosition();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onEscape\", function (e) {\n if (e.key === 'Escape') _this.closePopup();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"lockScroll\", function () {\n var lockScroll = _this.props.lockScroll;\n var modal = _this.state.modal;\n if (modal && lockScroll)\n /* eslint-disable-next-line no-undef */\n document.getElementsByTagName('body')[0].style.overflow = 'hidden';\n });\n\n _defineProperty(_assertThisInitialized(_this), \"resetScroll\", function () {\n var lockScroll = _this.props.lockScroll;\n var modal = _this.state.modal;\n if (modal && lockScroll)\n /* eslint-disable-next-line no-undef */\n document.getElementsByTagName('body')[0].style.overflow = 'auto';\n });\n\n _defineProperty(_assertThisInitialized(_this), \"togglePopup\", function (e) {\n // https://reactjs.org/docs/events.html#event-pooling\n e.persist();\n if (_this.state.isOpen) _this.closePopup(e);else _this.openPopup(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"openPopup\", function (e) {\n var _this$props = _this.props,\n disabled = _this$props.disabled,\n onOpen = _this$props.onOpen;\n var isOpen = _this.state.isOpen;\n if (isOpen || disabled) return;\n onOpen(e);\n\n _this.setState({\n isOpen: true\n }, function () {\n _this.setPosition();\n\n _this.lockScroll();\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"closePopup\", function (e) {\n var onClose = _this.props.onClose;\n var isOpen = _this.state.isOpen;\n if (!isOpen) return;\n onClose(e);\n\n _this.setState({\n isOpen: false\n }, function () {\n _this.resetScroll();\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseEnter\", function () {\n clearTimeout(_this.timeOut);\n var mouseEnterDelay = _this.props.mouseEnterDelay;\n _this.timeOut = setTimeout(function () {\n return _this.openPopup();\n }, mouseEnterDelay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseLeave\", function () {\n clearTimeout(_this.timeOut);\n var mouseLeaveDelay = _this.props.mouseLeaveDelay;\n _this.timeOut = setTimeout(function () {\n return _this.closePopup();\n }, mouseLeaveDelay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getTooltipBoundary\", function () {\n var keepTooltipInside = _this.props.keepTooltipInside;\n var boundingBox = {\n top: 0,\n left: 0,\n\n /* eslint-disable-next-line no-undef */\n width: window.innerWidth,\n\n /* eslint-disable-next-line no-undef */\n height: window.innerHeight\n };\n\n if (typeof keepTooltipInside === 'string') {\n /* eslint-disable-next-line no-undef */\n var selector = document.querySelector(keepTooltipInside);\n\n if (process.env.NODE_ENV !== 'production') {\n if (selector === null) throw new Error(\"\".concat(keepTooltipInside, \" selector is not exist : keepTooltipInside must be a valid html selector 'class' or 'Id' or a boolean value\"));\n }\n\n boundingBox = selector.getBoundingClientRect();\n }\n\n return boundingBox;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setPosition\", function () {\n var _this$state = _this.state,\n modal = _this$state.modal,\n isOpen = _this$state.isOpen;\n if (modal || !isOpen) return;\n var _this$props2 = _this.props,\n arrow = _this$props2.arrow,\n position = _this$props2.position,\n offsetX = _this$props2.offsetX,\n offsetY = _this$props2.offsetY,\n keepTooltipInside = _this$props2.keepTooltipInside,\n arrowStyle = _this$props2.arrowStyle,\n className = _this$props2.className;\n\n var helper = _this.HelperEl.getBoundingClientRect();\n\n var trigger = _this.TriggerEl.getBoundingClientRect();\n\n var content = _this.ContentEl.getBoundingClientRect();\n\n var boundingBox = _this.getTooltipBoundary();\n\n var positions = Array.isArray(position) ? position : [position]; // keepTooltipInside would be activated if the keepTooltipInside exist or the position is Array\n\n if (keepTooltipInside || Array.isArray(position)) positions = [].concat(_toConsumableArray(positions), POSITION_TYPES);\n var cords = calculatePosition(trigger, content, positions, arrow, {\n offsetX: offsetX,\n offsetY: offsetY\n }, boundingBox);\n _this.ContentEl.style.top = \"\".concat(cords.top - helper.top, \"px\");\n _this.ContentEl.style.left = \"\".concat(cords.left - helper.left, \"px\");\n\n if (arrow) {\n _this.ArrowEl.style.transform = cords.transform;\n _this.ArrowEl.style['-ms-transform'] = cords.transform;\n _this.ArrowEl.style['-webkit-transform'] = cords.transform;\n _this.ArrowEl.style.top = arrowStyle.top || cords.arrowTop;\n _this.ArrowEl.style.left = arrowStyle.left || cords.arrowLeft;\n\n _this.ArrowEl.classList.add(\"popup-arrow\");\n\n if (className !== '') {\n _this.ArrowEl.classList.add(\"\".concat(className, \"-arrow\"));\n }\n }\n\n if (\n /* eslint-disable-next-line no-undef */\n window.getComputedStyle(_this.TriggerEl, null).getPropertyValue('position') === 'static' ||\n /* eslint-disable-next-line no-undef */\n window.getComputedStyle(_this.TriggerEl, null).getPropertyValue('position') === '') _this.TriggerEl.style.position = 'relative';\n });\n\n _defineProperty(_assertThisInitialized(_this), \"addWarperAction\", function () {\n var _this$props3 = _this.props,\n contentStyle = _this$props3.contentStyle,\n className = _this$props3.className,\n on = _this$props3.on;\n var modal = _this.state.modal;\n var popupContentStyle = modal ? styles.popupContent.modal : styles.popupContent.tooltip;\n var childrenElementProps = {\n className: \"popup-content \".concat(className !== '' ? \"\".concat(className, \"-content\") : ''),\n style: Object.assign({}, popupContentStyle, contentStyle),\n ref: _this.setContentRef,\n onClick: function onClick(e) {\n e.stopPropagation();\n }\n };\n\n if (!modal && on.indexOf('hover') >= 0) {\n childrenElementProps.onMouseEnter = _this.onMouseEnter;\n childrenElementProps.onMouseLeave = _this.onMouseLeave;\n }\n\n return childrenElementProps;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderTrigger\", function () {\n var triggerProps = {\n key: 'T',\n ref: _this.setTriggerRef\n };\n var _this$props4 = _this.props,\n on = _this$props4.on,\n trigger = _this$props4.trigger;\n var isOpen = _this.state.isOpen;\n var onAsArray = Array.isArray(on) ? on : [on];\n\n for (var i = 0, len = onAsArray.length; i < len; i++) {\n switch (onAsArray[i]) {\n case 'click':\n triggerProps.onClick = _this.togglePopup;\n break;\n\n case 'hover':\n triggerProps.onMouseEnter = _this.onMouseEnter;\n triggerProps.onMouseLeave = _this.onMouseLeave;\n break;\n\n case 'focus':\n triggerProps.onFocus = _this.onMouseEnter;\n break;\n\n default:\n }\n }\n\n if (typeof trigger === 'function') return !!trigger && /*#__PURE__*/React.cloneElement(trigger(isOpen), triggerProps);\n return !!trigger && /*#__PURE__*/React.cloneElement(trigger, triggerProps);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderContent\", function () {\n var _this$props5 = _this.props,\n arrow = _this$props5.arrow,\n arrowStyle = _this$props5.arrowStyle,\n children = _this$props5.children;\n var _this$state2 = _this.state,\n modal = _this$state2.modal,\n isOpen = _this$state2.isOpen;\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, _this.addWarperAction(), {\n key: \"C\"\n }), arrow && !modal && /*#__PURE__*/React.createElement(\"div\", {\n ref: _this.setArrowRef,\n style: Object.assign({}, styles.popupArrow, arrowStyle)\n }), typeof children === 'function' ? children(_this.closePopup, isOpen) : children);\n });\n\n _this.setTriggerRef = function (r) {\n return _this.TriggerEl = r;\n };\n\n _this.setContentRef = function (r) {\n return _this.ContentEl = r;\n };\n\n _this.setArrowRef = function (r) {\n return _this.ArrowEl = r;\n };\n\n _this.setHelperRef = function (r) {\n return _this.HelperEl = r;\n };\n\n _this.timeOut = 0;\n var open = props.open,\n _modal = props.modal,\n defaultOpen = props.defaultOpen,\n _trigger = props.trigger;\n _this.state = {\n isOpen: open || defaultOpen,\n modal: _modal ? true : !_trigger // we create this modal state because the popup can't be a tooltip if the trigger prop doesn't exist\n\n };\n return _this;\n }\n\n _createClass(Popup, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props6 = this.props,\n closeOnEscape = _this$props6.closeOnEscape,\n defaultOpen = _this$props6.defaultOpen,\n repositionOnResize = _this$props6.repositionOnResize;\n if (defaultOpen) this.setPosition();\n\n if (closeOnEscape) {\n /* eslint-disable-next-line no-undef */\n window.addEventListener('keyup', this.onEscape);\n }\n\n if (repositionOnResize) {\n /* eslint-disable-next-line no-undef */\n window.addEventListener('resize', this.repositionOnResize);\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props7 = this.props,\n open = _this$props7.open,\n disabled = _this$props7.disabled;\n var isOpen = this.state.isOpen;\n\n if (prevProps.open !== open) {\n if (open) this.openPopup();else this.closePopup(undefined, true);\n }\n\n if (prevProps.disabled !== disabled && disabled && isOpen) {\n this.closePopup();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n // kill any function to execute if the component is unmounted\n clearTimeout(this.timeOut);\n var _this$props8 = this.props,\n closeOnEscape = _this$props8.closeOnEscape,\n repositionOnResize = _this$props8.repositionOnResize; // remove events listeners\n\n if (closeOnEscape) {\n /* eslint-disable-next-line no-undef */\n window.removeEventListener('keyup', this.onEscape);\n }\n\n if (repositionOnResize) {\n /* eslint-disable-next-line no-undef */\n window.removeEventListener('resize', this.repositionOnResize);\n }\n\n this.resetScroll();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props9 = this.props,\n overlayStyle = _this$props9.overlayStyle,\n closeOnDocumentClick = _this$props9.closeOnDocumentClick,\n className = _this$props9.className,\n on = _this$props9.on,\n trigger = _this$props9.trigger;\n var _this$state3 = this.state,\n modal = _this$state3.modal,\n isOpen = _this$state3.isOpen;\n var overlay = isOpen && !(on.indexOf('hover') >= 0);\n var ovStyle = modal ? styles.overlay.modal : styles.overlay.tooltip;\n return [this.renderTrigger(), isOpen && /*#__PURE__*/React.createElement(\"div\", {\n key: \"H\",\n style: {\n position: 'absolute',\n top: '0px',\n left: '0px'\n },\n ref: this.setHelperRef\n }), overlay && /*#__PURE__*/React.createElement(\"div\", {\n key: \"O\",\n className: \"popup-overlay \".concat(className !== '' ? \"\".concat(className, \"-overlay\") : ''),\n style: Object.assign({}, ovStyle, overlayStyle),\n onClick: closeOnDocumentClick ? this.closePopup : undefined\n }, modal && this.renderContent()), isOpen && !modal && this.renderContent()];\n }\n }]);\n\n return Popup;\n}(React.PureComponent);\n\n_defineProperty(Popup, \"defaultProps\", {\n trigger: null,\n onOpen: function onOpen() {},\n onClose: function onClose() {},\n defaultOpen: false,\n open: false,\n disabled: false,\n closeOnDocumentClick: true,\n repositionOnResize: true,\n closeOnEscape: true,\n on: ['click'],\n contentStyle: {},\n arrowStyle: {},\n overlayStyle: {},\n className: '',\n position: 'bottom center',\n modal: false,\n lockScroll: false,\n arrow: true,\n offsetX: 0,\n offsetY: 0,\n mouseEnterDelay: 100,\n mouseLeaveDelay: 100,\n keepTooltipInside: false\n});\n\nif (process.env.NODE_ENV !== 'production') {\n var PropTypes = require('prop-types');\n\n var TRIGGER_TYPES = ['hover', 'click', 'focus'];\n}\n\nexport default Popup;","\nexport const SVGFilter = (object, engColor) => {\n console.log(object, 'herer is obj');\n const R = engColor.r;\n const G = engColor.g;\n const B = engColor.b;\n function hexToRgb(hex) {\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n let r, g,b;\n if(result) {\n r = parseInt(result[1], 16);\n g = parseInt(result[2], 16);\n b = parseInt(result[3], 16);\n }\n return `rgb(${r}, ${g}, ${b})`;\n }\n // delete gropu & path to make the in svg empty\n // object.path = [];\n // object.group = {};\n\n // check if color is hex change it to rgb\n // we need rgb to compare if r or g or b bigger than 155 which is gray to white shold be deleted in the else\n // if smaller which is gray to black fill it with engraving color\n\n function rgbExtract() {\n let color = object.fill;\n if (typeof color == 'string' && color.includes('#')) {\n color = hexToRgb(color);\n }\n var matchColors = /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/;\n var match = matchColors.exec(color);\n if (match) {\n var a = parseInt(match[1], 10);\n var b = parseInt(match[2], 10);\n var c = parseInt(match[3], 10);\n if ( ( a < 150 ) || ( b < 150 )|| (c < 150) ) {\n object.fill = `rgb(${R},${G},${B})`;\n object.opacity = 1;\n object.stroke = '';\n } else {\n object.opacity = 0;\n }\n object.stroke = '';\n return object;\n } else {\n object.fill = '';\n object.stroke = `rgb(${R},${G},${B})`;\n }\n }\n\n\n return rgbExtract();\n};","/* eslint-disable no-unused-expressions */\n/* eslint-disable prefer-destructuring */\nimport React, { Component }from 'react';\nimport { connect } from 'react-redux';\nimport { undoFrontSide, selectCurrent, setStyle,\n redoFrontSide, imageOrtext, countObjectFS } from '../actions';\nimport { fabric } from 'fabric';\nimport { SVGFilter } from './SVGFilter';\n\nclass FrontSide extends Component {\n constructor(props) {\n super(props);\n this.outFrameIndex = 0;\n this.state = {\n canvasHistory: {\n state: [],\n currentStateIndex: -1,\n undoStatus: false,\n redoStatus: false,\n undoFinishedStatus: true,\n redoFinishedStatus: true,\n },\n };\n this.frontcanvas = React.createRef();\n }\n\n componentDidMount() {\n const img = new Image();\n img.src = this.props.frontImage;\n let left , top, width, height;\n if (this.props.product.workArea) {\n left = this.props.product.workArea.front.left;\n top = this.props.product.workArea.front.top;\n width = this.props.product.workArea.front.width;\n height = this.props.product.workArea.front.height;\n } else {\n // eslint-disable-next-line no-sequences\n left , top = 0;\n width = 670; // defaulut image size from welovelaser\n height = 652; // /////////////////////////////////\n }\n this.frontcanvas.current = new fabric.Canvas(this.frontcanvas.current, {\n preserveObjectStacking: true,\n height: 652,\n width: 670,\n // selection : false,\n // controlsAboveOverlay:true,\n // centeredScaling:true,\n // allowTouchScrolling: true\n });\n this.frontcanvas.current.setBackgroundImage(this.props.frontImage, () => this.frontcanvas.current.renderAll());\n this.frontcanvas.current.on('mouse:down', options => {\n if (options.target && options.target.text) {\n this.props.imageOrtext('Text');\n this.updateTextOptions();\n }\n });\n this.frontcanvas.current.on('object:modified', () => {\n this.updateHistory();\n this.updateTextOptions();\n });\n var out_frame = new fabric.Rect({\n width: width,\n height: height,\n top: top,\n left: left,\n fill: 'rgba(0, 0, 0, 0)',\n selectable: false,\n stroke: 'rgba(0,0,0,1)',\n strokeWidth: 1,\n evented: false,\n id: 'out_frame'\n });\n this.frontcanvas.current.add(out_frame);\n this.outFrameIndex = this.frontcanvas.current.getObjects().length - 1;\n\n this.frontcanvas.current.on('object:removed', () => {\n this.props.countObjectFS(this.frontcanvas.current.getObjects().length -1);\n });\n\n this.frontcanvas.current.on('object:added', () => {\n // -1 = the out frame\n this.props.countObjectFS(this.frontcanvas.current.getObjects().length -1);\n this.updateHistory();\n this.updateTextOptions();\n });\n this.props.undoFrontSide(this.undo);\n this.props.redoFrontSide(this.redo);\n this.props.selectCurrent(['FRONT_CANVAS', this.frontcanvas.current]);\n }\n updateTextOptions = () => {\n if (this.frontcanvas.current.getActiveObject()) {\n var obj = this.frontcanvas.current.getActiveObject();\n const style = {\n fontFamily: obj.fontFamily,\n fontSize: obj.fontSize /1,\n lineHeight: obj.lineHeight /1,\n textAlign: obj.textAlign,\n textDecoration: obj.underline,\n charSpacing: obj.charSpacing\n };\n this.props.setStyle(style);\n }\n }\n\n updateHistory = () => {\n // now there is fabric history package in npm\n const { canvasHistory } = this.state;\n if (this.state.canvasHistory.undoStatus === true || this.state.canvasHistory.redoStatus === true) {\n console.log('Do not do anything, this got triggered automatically while the undo and redo actions were performed');\n } else {\n const jsonData = this.frontcanvas.current.toJSON();\n const canvasAsJson = JSON.stringify(jsonData);\n\n // NOTE: This is to replace the canvasHistory when it gets rewritten 20180912:Alevale\n if (canvasHistory.currentStateIndex < canvasHistory.state.length - 1) {\n\n const indexToBeInserted = canvasHistory.currentStateIndex + 1;\n canvasHistory.state[indexToBeInserted] = canvasAsJson;\n const elementsToKeep = indexToBeInserted + 1;\n console.log(`History rewritten, preserved ${elementsToKeep} items`);\n canvasHistory.state = canvasHistory.state.splice(0, elementsToKeep);\n\n // NOTE: This happens when there is a new item pushed to the canvasHistory (normal case) 20180912:Alevale\n } else {\n // console.log('push to canvasHistory');\n canvasHistory.state.push(canvasAsJson);\n }\n\n canvasHistory.currentStateIndex = canvasHistory.state.length - 1;\n }\n };\n\nundo = () => {\n const { canvasHistory } = this.state;\n if (canvasHistory.currentStateIndex - 1 === -1) {\n console.log('do not do anything anymore, you are going far to the past, before creation, there was nothing');\n return;\n }\n\n if (canvasHistory.undoFinishedStatus) {\n canvasHistory.undoFinishedStatus = false;\n canvasHistory.undoStatus = true;\n\n this.frontcanvas.current.loadFromJSON(canvasHistory.state[canvasHistory.currentStateIndex - 1], () => {\n // prevent working area from being moved\n this.frontcanvas.current.item(this.outFrameIndex).selectable = false;\n this.frontcanvas.current.renderAll();\n canvasHistory.undoStatus = false;\n canvasHistory.currentStateIndex--;\n canvasHistory.undoFinishedStatus = true;\n });\n }\n};\n\n redo = () => {\n const { canvasHistory } = this.state;\n if (canvasHistory.currentStateIndex + 1 === canvasHistory.state.length) {\n console.log('do not do anything anymore, you do not know what is after the present, do not mess with the future');\n return;\n }\n if (canvasHistory.redoFinishedStatus) {\n canvasHistory.redoFinishedStatus = false;\n canvasHistory.redoStatus = true;\n this.frontcanvas.current.loadFromJSON(canvasHistory.state[canvasHistory.currentStateIndex + 1], () => {\n // prevent working area from being moved\n this.frontcanvas.current.item(this.outFrameIndex).selectable = false;\n this.frontcanvas.current.renderAll();\n canvasHistory.redoStatus = false;\n canvasHistory.currentStateIndex++;\n canvasHistory.redoFinishedStatus = true;\n });\n }\n };\n\n addEng = () => {\n let left , top, width, height;\n if (this.props.product.workArea) {\n left = this.props.product.workArea.front.left;\n top = this.props.product.workArea.front.top;\n width = this.props.product.workArea.front.width;\n height = this.props.product.workArea.front.height;\n } else {\n // eslint-disable-next-line no-sequences\n left , top = 0;\n width = 670; // defaulut image size from welovelaser\n height = 652; // /////////////////////////////////\n }\n var out_frame = new fabric.Rect({\n width: width,\n height: height,\n top: top,\n left: left,\n absolutePositioned: true\n });\n // this.frontcanvas.current.add(out_frame);\n const { engColor } = this.props.product;\n const { frontEngraving } = this.props;\n // To-DO => check if no left and top\n const last = frontEngraving[frontEngraving.length -1];\n if (typeof(last) === 'string') {\n var text = new fabric.IText(last, {\n top: top,\n left: left,\n objecttype: 'text',\n fontFamily: 'Abel',\n lineHeight: 1.0,\n charSpacing: 50,\n borderColor: '#ff1212',\n cornerColor: '#ff5454',\n fill: `rgb(${engColor.r},${ engColor.g}, ${engColor.b})`,\n clipPath: out_frame\n });\n\n this.frontcanvas.current.add(text);\n text.setCoords();\n this.frontcanvas.current.setActiveObject(text);\n this.frontcanvas.current.renderAll(text);\n this.props.setStyle({\n fontSize: 40,\n lineHeight: 1,\n charSpacing: 50,\n textDecoration: false,\n textAlign: '',\n fontFamily: 'Abel',\n });\n } else if(last.url.includes(' {\n var obj = [];\n for(var i = 0; i < objects.length; i++) {\n obj.push(SVGFilter( objects[i], engColor));\n }\n var group = fabric.util.groupSVGElements(objects, last.url);\n group.scale(Math.max(Math.min(width / 670, height / 652, 0.9)), 0.1);\n group.clipPath = out_frame;\n group.id = 'svg';\n group.left = left;\n group.top = top;\n group.borderColor = '#ff1212';\n group.cornerColor = '#ff5454';\n group.toObject = (function(toObject) {\n return function() {\n return fabric.util.object.extend(toObject.call(this), {\n id: this.id,\n });\n };\n })(group.toObject);\n this.frontcanvas.current.add(group);\n group.setCoords();\n this.frontcanvas.current.renderAll();\n });\n }\n } else {\n new fabric.Image.fromURL(last.url, myImg => {\n var img = myImg.set({\n top: top,\n left: left,\n id: last.id,\n clipPath: out_frame,\n borderColor: '#ff1212',\n cornerColor: '#ff5454', }).scale(0.1);\n img.toObject = (function(toObject) {\n return function() {\n return fabric.util.object.extend(toObject.call(this), {\n id: this.id\n });\n };\n })(img.toObject);\n this.frontcanvas.current.add(img);\n img.setCoords();\n this.frontcanvas.current.setActiveObject(img);\n this.frontcanvas.current.renderAll(img);\n });\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.frontEngraving !== this.props.frontEngraving) {\n this.addEng();\n }\n }\n\n\n render() {\n return(
\n \n
);\n }\n}\n\nconst mapStateToProps = state => {\n const { frontEngraving } = state.frontsideReducer;\n const frontImage = state.productReducer.product.front_image;\n const { sideIs } = state.optionsReducer;\n const { canvasBorder } = state.optionsReducer;\n const { product } = state.productReducer;\n const { frontCurrent } = state.currentFigureReducer;\n\n return {\n frontEngraving, frontImage, sideIs, canvasBorder, product, frontCurrent\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n undoFrontSide: undoFun => dispatch(undoFrontSide(undoFun)),\n redoFrontSide: undoFun => dispatch(redoFrontSide(undoFun)),\n selectCurrent: current => dispatch(selectCurrent(current)),\n setStyle: fs => dispatch(setStyle(fs)),\n imageOrtext: data => dispatch(imageOrtext(data)),\n countObjectFS: data => dispatch(countObjectFS(data)),\n});\n\nexport default React.memo(connect(mapStateToProps, mapDispatchToProps)(FrontSide));\n","/* eslint-disable no-unused-expressions */\n/* eslint-disable no-sequences */\n/* eslint-disable prefer-destructuring */\nimport React, { Component }from 'react';\nimport { connect } from 'react-redux';\nimport { undoBackSide, redoBackSide, selectCurrent, setStyle,\n countObjectBS, imageOrtext } from '../actions';\nimport { fabric } from 'fabric';\nimport { SVGFilter } from './SVGFilter';\n\nclass BackSide extends Component {\n constructor(props) {\n super(props);\n this.state = {\n canvasHistory: {\n state: [],\n currentStateIndex: -1,\n undoStatus: false,\n redoStatus: false,\n undoFinishedStatus: true,\n redoFinishedStatus: true,\n },\n };\n this.backcanvas = React.createRef();\n }\n\n componentDidMount() {\n const img = new Image();\n img.src = this.props.product.back_image;\n let left , top, width, height;\n if (this.props.product.workArea.back) {\n left = this.props.product.workArea.back.left;\n top = this.props.product.workArea.back.top;\n width = this.props.product.workArea.back.width;\n height = this.props.product.workArea.back.height;\n } else {\n left , top = 0 ,\n width, height = '100%';\n }\n\n this.backcanvas.current = new fabric.Canvas(this.backcanvas.current, {\n preserveObjectStacking: true,\n height: 652,\n width: 670,\n });\n this.backcanvas.current.setBackgroundImage(this.props.product.back_image, () => this.backcanvas.current.renderAll());\n this.backcanvas.current.on('object:removed', () => {\n this.props.countObjectBS(this.backcanvas.current.getObjects().length -1);\n });\n this.backcanvas.current.on('object:added', () => {\n this.props.countObjectBS(this.backcanvas.current.getObjects().length -1);\n this.updateHistory();\n this.updateTextOptions();\n });\n this.backcanvas.current.on('mouse:down', options => {\n if (options.target && options.target.text) {\n this.props.imageOrtext('Text');\n this.updateTextOptions();\n }\n });\n\n this.backcanvas.current.on('object:modified', () => {\n this.updateHistory();\n this.updateTextOptions();\n });\n var out_frame = new fabric.Rect({\n width: width,\n height: height,\n top: top,\n left: left,\n fill: 'rgba(0, 0, 0, 0)',\n selectable: false,\n stroke: 'rgba(0,0,0,1)',\n strokeWidth: 1,\n evented: false,\n id: 'out_frame'\n });\n this.backcanvas.current.add(out_frame);\n this.props.undoBackSide(this.undo);\n this.props.redoBackSide(this.redo);\n this.props.selectCurrent(['BACK_CANVAS', this.backcanvas.current]);\n }\n\n updateTextOptions = () => {\n if (this.backcanvas.current.getActiveObject()) {\n var obj = this.backcanvas.current.getActiveObject();\n const style = {\n fontFamily: obj.fontFamily,\n fontSize: obj.fontSize,\n lineHeight: obj.lineHeight,\n textAlign: obj.textAlign,\n textDecoration: obj.underline,\n charSpacing: obj.charSpacing\n };\n this.props.setStyle(style);\n }\n }\n\n updateHistory = () => {\n const { canvasHistory } = this.state;\n if (this.state.canvasHistory.undoStatus === true || this.state.canvasHistory.redoStatus === true) {\n console.log('Do not do anything, this got triggered automatically while the undo and redo actions were performed');\n } else {\n const jsonData = this.backcanvas.current.toJSON();\n const canvasAsJson = JSON.stringify(jsonData);\n\n // NOTE: This is to replace the canvasHistory when it gets rewritten 20180912:Alevale\n if (canvasHistory.currentStateIndex < canvasHistory.state.length - 1) {\n\n const indexToBeInserted = canvasHistory.currentStateIndex + 1;\n canvasHistory.state[indexToBeInserted] = canvasAsJson;\n const elementsToKeep = indexToBeInserted + 1;\n console.log(`History rewritten, preserved ${elementsToKeep} items`);\n canvasHistory.state = canvasHistory.state.splice(0, elementsToKeep);\n\n // NOTE: This happens when there is a new item pushed to the canvasHistory (normal case) 20180912:Alevale\n } else {\n // console.log('push to canvasHistory');\n canvasHistory.state.push(canvasAsJson);\n }\n\n canvasHistory.currentStateIndex = canvasHistory.state.length - 1;\n }\n };\n\nundo = () => {\n const { canvasHistory } = this.state;\n if (canvasHistory.currentStateIndex - 1 === -1) {\n console.log('do not do anything anymore, you are going far to the past, before creation, there was nothing');\n return;\n }\n\n if (canvasHistory.undoFinishedStatus) {\n canvasHistory.undoFinishedStatus = false;\n canvasHistory.undoStatus = true;\n this.backcanvas.current.loadFromJSON(canvasHistory.state[canvasHistory.currentStateIndex - 1], () => {\n this.backcanvas.current.renderAll();\n canvasHistory.undoStatus = false;\n canvasHistory.currentStateIndex--;\n canvasHistory.undoFinishedStatus = true;\n });\n }\n};\n\nredo = () => {\n const { canvasHistory } = this.state;\n\n if (canvasHistory.currentStateIndex + 1 === canvasHistory.state.length) {\n console.log('do not do anything anymore, you do not know what is after the present, do not mess with the future');\n return;\n }\n if (canvasHistory.redoFinishedStatus) {\n canvasHistory.redoFinishedStatus = false;\n canvasHistory.redoStatus = true;\n this.backcanvas.current.loadFromJSON(canvasHistory.state[canvasHistory.currentStateIndex + 1], () => {\n this.backcanvas.current.renderAll();\n canvasHistory.redoStatus = false;\n canvasHistory.currentStateIndex++;\n canvasHistory.redoFinishedStatus = true;\n });\n }\n};\n\naddEng = () => {\n let left , top, width, height;\n if (this.props.product.workArea) {\n left = this.props.product.workArea.back.left;\n top = this.props.product.workArea.back.top;\n width = this.props.product.workArea.back.width;\n height = this.props.product.workArea.back.height;\n } else {\n // eslint-disable-next-line no-sequences\n left , top = 0;\n width = 670; // defaulut image size from welovelaser\n height = 652; // /////////////////////////////////\n }\n var out_frame = new fabric.Rect({\n width: width,\n height: height,\n top: top,\n left: left,\n absolutePositioned: true\n });\n const { engColor } = this.props.product;\n const { backEngraving } = this.props;\n const last = backEngraving[backEngraving.length -1];\n if (typeof(last) === 'string') {\n var text = new fabric.IText(last, {\n top: top,\n left: left,\n objecttype: 'text',\n fontFamily: 'Abel',\n lineHeight: 1.0,\n charSpacing: 50,\n fill: `rgb(${engColor.r},${ engColor.g}, ${engColor.b})`,\n borderColor: '#ff1212',\n cornerColor: '#ff5454',\n clipPath: out_frame\n });\n this.backcanvas.current.add(text);\n text.setCoords();\n this.backcanvas.current.setActiveObject(text);\n this.backcanvas.current.renderAll(text);\n this.props.setStyle({\n fontSize: 40,\n lineHeight: 1,\n charSpacing: 50,\n textDecoration: false,\n textAlign: '',\n fontFamily: 'Abel',\n });\n } else if(last.url.includes(' {\n var obj = [];\n for(var i = 0; i < objects.length; i++) {\n obj.push(SVGFilter( objects[i], engColor));\n }\n var group = fabric.util.groupSVGElements(objects, last.url);\n group.scale(Math.max(Math.min(width / 670, height / 652, 0.9)), 0.1);\n group.clipPath = out_frame;\n group.id = 'svg';\n group.left = left;\n group.top = top;\n group.borderColor = '#ff1212';\n group.cornerColor = '#ff5454';\n group.toObject = (function(toObject) {\n return function() {\n return fabric.util.object.extend(toObject.call(this), {\n id: this.id\n });\n };\n })(group.toObject);\n this.backcanvas.current.add(group);\n group.setCoords();\n this.backcanvas.current.renderAll();\n });\n }\n } else {\n new fabric.Image.fromURL(last.url, myImg => {\n var img = myImg.set({\n top: top,\n left: left,\n id: last.id,\n clipPath: out_frame,\n borderColor: '#ff1212',\n cornerColor: '#ff5454', }).scale(0.1);\n img.toObject = (function(toObject) {\n return function() {\n return fabric.util.object.extend(toObject.call(this), {\n id: this.id\n });\n };\n })(img.toObject);\n this.backcanvas.current.add(img);\n img.setCoords();\n this.backcanvas.current.setActiveObject(img);\n this.backcanvas.current.renderAll(img);\n });\n }\n}\n\ncomponentDidUpdate(prevProps) {\n if (prevProps.backEngraving !== this.props.backEngraving) {\n this.addEng();\n }\n}\n\n\nrender() {\n return(
\n \n
);\n}\n}\n\nconst mapStateToProps = state => {\n const { product } = state.productReducer;\n const { backEngraving } = state.backsideReducer;\n const { sideIs } = state.optionsReducer;\n const { canvasBorder } = state.optionsReducer;\n return {\n backEngraving, sideIs, canvasBorder, product\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n undoBackSide: undoFun => dispatch(undoBackSide(undoFun)),\n redoBackSide: undoFun => dispatch(redoBackSide(undoFun)),\n setStyle: fs => dispatch(setStyle(fs)),\n selectCurrent: current => dispatch(selectCurrent(current)),\n imageOrtext: data => dispatch(imageOrtext(data)),\n countObjectBS: data => dispatch(countObjectBS(data)),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BackSide);\n","\n\nimport React, { Component } from 'react';\nimport Popup from 'reactjs-popup';\nimport FrontSide from './FrontSide';\nimport BackSide from './BackSide';\nimport { connect } from 'react-redux';\nimport { setSide, hideCanvasBoeder } from '../actions';\nimport logo from '../Logos/wwl-logo.svg';\nimport { ReactSVG } from 'react-svg';\nimport { AddToChart } from './AddToChart';\n\n\n\nconst Spinner = () => {\n return( );\n};\n\nclass Engraving extends Component {\n state = { open: false ,\n hasBackside: false,\n userImages: [],\n loading: false ,\n };\n\n componentDidMount() {\n if (this.props.back_image) {\n this.setState({ hasBackside : true });\n }\n }\n\n\n render() {\n let totalPrice;\n if (this.props.countFS > 0 && this.props.countBS > 0 ) {\n totalPrice = parseFloat(this.props.product.price) + parseFloat(this.props.product.front_side_price) + parseFloat(this.props.product.back_side_price);\n } else if (this.props.countFS > 0 ) {\n totalPrice = parseFloat(this.props.product.price) + parseFloat(this.props.product.front_side_price);\n } else if (this.props.countBS > 0 ) {\n totalPrice = parseFloat(this.props.product.price) + parseFloat(this.props.product.back_side_price);\n } else totalPrice = parseFloat(this.props.product.price);\n let euro = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' })\n\n return(\n
\n
\n
\n Gravurbereich: {this.props.sideIs === 'front'? `${this.props.product.workArea.front.workAreaWidth} x ${this.props.product.workArea.front.workAreaHeight} cm` : `${this.props.product.workArea.back.workAreaWidth} x ${this.props.product.workArea.back.workAreaHeight} cm` }\n
\n this.props.setSide('front')} >VARIANTE 1
\n this.props.setSide('back') : null} >VARIANTE 2
\n \n
\n\n \n
\n
Ihre Bestellung wird bearbeitet
\n \n
\n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n {this.state.hasBackside ?\n \n \n : null }\n \n \n \n \n
Produktpreis: {euro.format(this.props.product.price)}
Gravur Variante 1: { this.props.product.front_side_price > 0 ? euro.format(this.props.product.front_side_price) : '' }
Gravur Variante 2: { this.props.product.back_side_price > 0 ? euro.format(this.props.product.back_side_price) : '' }
inkl. 19% MwSt. zzgl. Versandkosten
\n
\n
\n \n
\n \n );\n }\n}\nconst mapDispatchToProps = dispatch => ({\n setSide: side => dispatch(setSide(side)),\n hideCanvasBoeder: border => dispatch(hideCanvasBoeder(border)),\n});\n\nconst mapStateToProps = state => {\n // orginal pics without manipulate pixels\n const { sideIs, orginalPics } = state.optionsReducer;\n const { frontCurrent, backCurrent } = state.currentFigureReducer;\n const { back_image, authtoken } = state.productReducer.product;\n const { product } = state.productReducer;\n const { countFS } = state.frontsideReducer;\n const { countBS } = state.backsideReducer;\n return {\n sideIs, back_image, frontCurrent, backCurrent, orginalPics, authtoken, product, countFS, countBS\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Engraving);\n","import React from 'react';\nimport WeLoveLaser_Logo from './Logos/WeLoveLaser_Logo';\nimport { ReactSVG } from 'react-svg';\n\nvar ua = window.navigator.userAgent;\nvar isIE = /MSIE|Trident/.test(ua);\nif ( isIE ) {\n alert('Dieser Browser wird nicht unterstützt, bitte benutzen Sie Chrome, Firefox, Edge, Opera oder Safari');\n window.location.href = 'https://www.welovelaser.de/';\n}\n\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n render() {\n if (this.state.hasError) {\n return
\n

\n Leider ist ein Fehler aufgetreten. Bitte versuchen Sie die Seite in einem anderen Browser zu laden\n

\n \n\n
;\n }\n\n return this.props.children;\n }\n}\nexport default ErrorBoundary;","import React, { Component } from 'react';\n\nclass PopUp extends Component {\n render() {\n return (\n
\n
\n Die Funktion und Darstellung des Konfigurators kann auf Deinem Gerät eingeschränkt sein.
\n Bitte nutze für die Gravurgestaltung ein Tablet oder Computer.\n
\n \n
\n );\n };\n}\nexport default PopUp;\n","import React, { Component } from 'react';\nimport Tools from './ChildComponents/Tools';\nimport Content from './ChildComponents/Content';\nimport Engraving from './ChildComponents/Engraving';\nimport ErrorBoundary from './ErrorBoundary';\nimport PopUp from './ChildComponents/PopUp';\nimport './style/fonts.css';\n\nclass App extends Component {\n constructor(props) {\n super(props);\n const { innerWidth: width, innerHeight: height } = window;\n this.state = {\n showPopup: innerWidth < 500 ? true : false,\n innerWidth: innerWidth,\n innerHeight: innerHeight\n };\n }\n\n toggleOffPopup() {\n this.setState({\n showPopup: false\n });\n }\n\n render() {\n return (\n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n {this.state.showPopup ?\n \n : null\n }\n
\n
\n
\n
\n );\n }\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from '../Components/App';\nimport { Provider } from 'react-redux';\nimport { store } from '../Components/store';\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const node = document.getElementById('rootFromRuby');\n const json_data = node.getAttribute('data');\n const front_image = node.getAttribute('front_image');\n const back_image = node.getAttribute('back_image');\n const authtoken = node.getAttribute('authtoken');\n node.remove();\n const data = JSON.parse(json_data);\n function hexToRgb(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n }\n\n const engColor = hexToRgb(data.engraving_color);\n const { title, id, woo_id } = data;\n let { front_side_price, back_side_price, price } = data;\n const workArea = data.work_area;\n back_side_price = parseFloat(back_side_price).toFixed(2);\n front_side_price = parseFloat(front_side_price).toFixed(2);\n price = parseFloat(price).toFixed(2);\n const product = { title,woo_id,id,workArea, engColor, front_image, back_image, authtoken , front_side_price, back_side_price, price };\n store.dispatch({\n type: 'ADD_PRODUCT',\n payload: product\n });\n ReactDOM.render(\n \n \n ,\n document.body.appendChild(document.createElement('div')),\n );\n});\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n// find the complete implementation of crypto (msCrypto) on IE11.\nvar getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);\nvar rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\nexport default function rng() {\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n\n return getRandomValues(rnds8);\n}","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n\n return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');\n}\n\nexport default bytesToUuid;","import rng from './rng.js';\nimport bytesToUuid from './bytesToUuid.js';\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof options == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nexport default v4;"],"sourceRoot":""}