{"version":3,"file":"DrawSVGPlugin.min.js","sources":["../src/DrawSVGPlugin.js"],"sourcesContent":["/*!\n * DrawSVGPlugin 3.1.1\n * https://greensock.com\n *\n * @license Copyright 2008-2020, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n/* eslint-disable */\n\n\nlet gsap, _toArray, _doc, _win, _isEdge, _coreInitted,\n\t_windowExists = () => typeof(window) !== \"undefined\",\n\t_getGSAP = () => gsap || (_windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap),\n\t_numExp = /[-+=\\.]*\\d+[\\.e\\-\\+]*\\d*[e\\-\\+]*\\d*/gi, //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\n\t_types = {rect:[\"width\",\"height\"], circle:[\"r\",\"r\"], ellipse:[\"rx\",\"ry\"], line:[\"x2\",\"y2\"]},\n\t_round = value => Math.round(value * 10000) / 10000,\n\t_parseNum = value => parseFloat(value || 0),\n\t_getAttributeAsNumber = (target, attr) => _parseNum(target.getAttribute(attr)),\n\t_sqrt = Math.sqrt,\n\t_getDistance = (x1, y1, x2, y2, scaleX, scaleY) => _sqrt(((_parseNum(x2) - _parseNum(x1)) * scaleX) ** 2 + ((_parseNum(y2) - _parseNum(y1)) * scaleY) ** 2),\n\t_warn = message => console.warn(message),\n\t_hasNonScalingStroke = target => target.getAttribute(\"vector-effect\") === \"non-scaling-stroke\",\n\t_bonusValidated = 1, //DrawSVGPlugin\n\t//accepts values like \"100%\" or \"20% 80%\" or \"20 50\" and parses it into an absolute start and end position on the line/stroke based on its length. Returns an an array with the start and end values, like [0, 243]\n\t_parse = (value, length, defaultStart) => {\n\t\tlet i = value.indexOf(\" \"),\n\t\t\ts, e;\n\t\tif (i < 0) {\n\t\t\ts = defaultStart !== undefined ? defaultStart + \"\" : value;\n\t\t\te = value;\n\t\t} else {\n\t\t\ts = value.substr(0, i);\n\t\t\te = value.substr(i + 1);\n\t\t}\n\t\ts = ~s.indexOf(\"%\") ? (_parseNum(s) / 100) * length : _parseNum(s);\n\t\te = ~e.indexOf(\"%\") ? (_parseNum(e) / 100) * length : _parseNum(e);\n\t\treturn (s > e) ? [e, s] : [s, e];\n\t},\n\t_getLength = target => {\n\t\ttarget = _toArray(target)[0];\n\t\tif (!target) {\n\t\t\treturn 0;\n\t\t}\n\t\tlet type = target.tagName.toLowerCase(),\n\t\t\tstyle = target.style,\n\t\t\tscaleX = 1,\n\t\t\tscaleY = 1,\n\t\t\tlength, bbox, points, prevPoint, i, rx, ry;\n\t\tif (_hasNonScalingStroke(target)) { //non-scaling-stroke basically scales the shape and then strokes it at the screen-level (after transforms), thus we need to adjust the length accordingly.\n\t\t\tscaleY = target.getScreenCTM();\n\t\t\tscaleX = _sqrt(scaleY.a * scaleY.a + scaleY.b * scaleY.b);\n\t\t\tscaleY = _sqrt(scaleY.d * scaleY.d + scaleY.c * scaleY.c);\n\t\t}\n\t\ttry { //IE bug: calling .getTotalLength() locks the repaint area of the stroke to whatever its current dimensions are on that frame/tick. To work around that, we must call getBBox() to force IE to recalculate things.\n\t\t\tbbox = target.getBBox(); //solely for fixing bug in IE - we don't actually use the bbox.\n\t\t} catch (e) {\n\t\t\t//firefox has a bug that throws an error if the element isn't visible.\n\t\t\t_warn(\"Some browsers won't measure invisible elements (like display:none or masks inside defs).\");\n\t\t}\n\t\tlet {x, y, width, height} = bbox || {x:0, y:0, width:0, height:0};\n\t\tif ((!bbox || (!width && !height)) && _types[type]) { //if the element isn't visible, try to discern width/height using its attributes.\n\t\t\twidth =_getAttributeAsNumber(target, _types[type][0]);\n\t\t\theight = _getAttributeAsNumber(target, _types[type][1]);\n\t\t\tif (type !== \"rect\" && type !== \"line\") { //double the radius for circles and ellipses\n\t\t\t\twidth *= 2;\n\t\t\t\theight *= 2;\n\t\t\t}\n\t\t\tif (type === \"line\") {\n\t\t\t\tx = _getAttributeAsNumber(target, \"x1\");\n\t\t\t\ty = _getAttributeAsNumber(target, \"y1\");\n\t\t\t\twidth = Math.abs(width - x);\n\t\t\t\theight = Math.abs(height - y);\n\t\t\t}\n\t\t}\n\t\tif (type === \"path\") {\n\t\t\tprevPoint = style.strokeDasharray;\n\t\t\tstyle.strokeDasharray = \"none\";\n\t\t\tlength = target.getTotalLength() || 0;\n\t\t\tif (scaleX !== scaleY) {\n\t\t\t\t_warn(\"Warning: length cannot be measured when vector-effect is non-scaling-stroke and the element isn't proportionally scaled.\");\n\t\t\t}\n\t\t\tlength *= (scaleX + scaleY) / 2;\n\t\t\tstyle.strokeDasharray = prevPoint;\n\t\t} else if (type === \"rect\") {\n\t\t\tlength = width * 2 * scaleX + height * 2 * scaleY;\n\t\t} else if (type === \"line\") {\n\t\t\tlength = _getDistance(x, y, x + width, y + height, scaleX, scaleY);\n\t\t} else if (type === \"polyline\" || type === \"polygon\") {\n\t\t\tpoints = target.getAttribute(\"points\").match(_numExp) || [];\n\t\t\tif (type === \"polygon\") {\n\t\t\t\tpoints.push(points[0], points[1]);\n\t\t\t}\n\t\t\tlength = 0;\n\t\t\tfor (i = 2; i < points.length; i+=2) {\n\t\t\t\tlength += _getDistance(points[i-2], points[i-1], points[i], points[i+1], scaleX, scaleY) || 0;\n\t\t\t}\n\t\t} else if (type === \"circle\" || type === \"ellipse\") {\n\t\t\trx = (width / 2) * scaleX;\n\t\t\try = (height / 2) * scaleY;\n\t\t\tlength = Math.PI * ( 3 * (rx + ry) - _sqrt((3 * rx + ry) * (rx + 3 * ry)) );\n\t\t}\n\t\treturn length || 0;\n\t},\n\t_getPosition = (target, length) => {\n\t\ttarget = _toArray(target)[0];\n\t\tif (!target) {\n\t\t\treturn [0, 0];\n\t\t}\n\t\tif (!length) {\n\t\t\tlength = _getLength(target) + 1;\n\t\t}\n\t\tlet cs = _win.getComputedStyle(target),\n\t\t\tdash = cs.strokeDasharray || \"\",\n\t\t\toffset = _parseNum(cs.strokeDashoffset),\n\t\t\ti = dash.indexOf(\",\");\n\t\tif (i < 0) {\n\t\t\ti = dash.indexOf(\" \");\n\t\t}\n\t\tdash = (i < 0) ? length : _parseNum(dash.substr(0, i)) || 1e-5;\n\t\tif (dash > length) {\n\t\t\tdash = length;\n\t\t}\n\t\treturn [Math.max(0, -offset), Math.max(0, dash - offset)];\n\t},\n\t_initCore = () => {\n\t\tif (_windowExists()) {\n\t\t\t_doc = document;\n\t\t\t_win = window;\n\t\t\t_coreInitted = gsap = _getGSAP();\n\t\t\t_toArray = gsap.utils.toArray;\n\t\t\t_isEdge = (((_win.navigator || {}).userAgent || \"\").indexOf(\"Edge\") !== -1); //Microsoft Edge has a bug that causes it not to redraw the path correctly if the stroke-linecap is anything other than \"butt\" (like \"round\") and it doesn't match the stroke-linejoin. A way to trigger it is to change the stroke-miterlimit, so we'll only do that if/when we have to (to maximize performance)\n\t\t}\n\t};\n\n\nexport const DrawSVGPlugin = {\n\tversion:\"3.1.1\",\n\tname:\"drawSVG\",\n\tregister(core) {\n\t\tgsap = core;\n\t\t_initCore();\n\t},\n\tinit(target, value, tween, index, targets) {\n\t\tif (!target.getBBox) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!_coreInitted) {\n\t\t\t_initCore();\n\t\t}\n\t\tlet length = _getLength(target) + 1,\n\t\t\tstart, end, overage, cs;\n\t\tthis._style = target.style;\n\t\tthis._target = target;\n\t\tif (value + \"\" === \"true\") {\n\t\t\tvalue = \"0 100%\";\n\t\t} else if (!value) {\n\t\t\tvalue = \"0 0\";\n\t\t} else if ((value + \"\").indexOf(\" \") === -1) {\n\t\t\tvalue = \"0 \" + value;\n\t\t}\n\t\tstart = _getPosition(target, length);\n\t\tend = _parse(value, length, start[0]);\n\t\tthis._length = _round(length + 10);\n\t\tif (start[0] === 0 && end[0] === 0) {\n\t\t\toverage = Math.max(0.00001, end[1] - length); //allow people to go past the end, like values of 105% because for some paths, Firefox doesn't return an accurate getTotalLength(), so it could end up coming up short.\n\t\t\tthis._dash = _round(length + overage);\n\t\t\tthis._offset = _round(length - start[1] + overage);\n\t\t\tthis._offsetPT = this.add(this, \"_offset\", this._offset, _round(length - end[1] + overage));\n\t\t} else {\n\t\t\tthis._dash = _round(start[1] - start[0]) || 0.000001; //some browsers render artifacts if dash is 0, so we use a very small number in that case.\n\t\t\tthis._offset = _round(-start[0]);\n\t\t\tthis._dashPT = this.add(this, \"_dash\", this._dash, _round(end[1] - end[0]) || 0.00001);\n\t\t\tthis._offsetPT = this.add(this, \"_offset\", this._offset, _round(-end[0]));\n\t\t}\n\t\tif (_isEdge) { //to work around a bug in Microsoft Edge, animate the stroke-miterlimit by 0.0001 just to trigger the repaint (unnecessary if it's \"round\" and stroke-linejoin is also \"round\"). Imperceptible, relatively high-performance, and effective. Another option was to set the \"d\" attribute to its current value on every tick, but that seems like it'd be much less performant.\n\t\t\tcs = _win.getComputedStyle(target);\n\t\t\tif (cs.strokeLinecap !== cs.strokeLinejoin) {\n\t\t\t\tend = _parseNum(cs.strokeMiterlimit);\n\t\t\t\tthis.add(target.style, \"strokeMiterlimit\", end, end + 0.01);\n\t\t\t}\n\t\t}\n\t\tthis._live = (_hasNonScalingStroke(target) || ~((value + \"\").indexOf(\"live\")));\n\t\tthis._props.push(\"drawSVG\");\n\t\treturn _bonusValidated;\n\t},\n\trender(ratio, data) {\n\t\tlet pt = data._pt,\n\t\t\tstyle = data._style,\n\t\t\tlength, lengthRatio, dash, offset;\n\t\tif (pt) {\n\t\t\t//when the element has vector-effect=\"non-scaling-stroke\" and the SVG is resized (like on a window resize), it actually changes the length of the stroke! So we must sense that and make the proper adjustments.\n\t\t\tif (data._live) {\n\t\t\t\tlength = _getLength(data._target) + 11;\n\t\t\t\tif (length !== data._length) {\n\t\t\t\t\tlengthRatio = length / data._length;\n\t\t\t\t\tdata._length = length;\n\t\t\t\t\tdata._offsetPT.s *= lengthRatio;\n\t\t\t\t\tdata._offsetPT.c *= lengthRatio;\n\t\t\t\t\tif (data._dashPT) {\n\t\t\t\t\t\tdata._dashPT.s *= lengthRatio;\n\t\t\t\t\t\tdata._dashPT.c *= lengthRatio;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata._dash *= lengthRatio;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tpt.r(ratio, pt.d);\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\tdash = data._dash;\n\t\t\toffset = data._offset;\n\t\t\tlength = data._length;\n\t\t\tstyle.strokeDashoffset = data._offset;\n\t\t\tif (ratio === 1 || !ratio) {\n\t\t\t\tif (dash - offset < 0.001 && length - dash <= 10) { //works around a bug in Safari that caused strokes with rounded ends to still show initially when they shouldn't.\n\t\t\t\t\tstyle.strokeDashoffset = offset + 1;\n\t\t\t\t}\n\t\t\t\tstyle.strokeDasharray = (offset < 0.001 && length - dash <= 10) ? \"none\" : (offset === dash) ? \"0px, 999999px\" : dash + \"px,\" + length + \"px\";\n\t\t\t} else {\n\t\t\t\tstyle.strokeDasharray = dash + \"px,\" + length + \"px\";\n\t\t\t}\n\t\t}\n\t},\n\tgetLength: _getLength,\n\tgetPosition: _getPosition\n};\n\n_getGSAP() && gsap.registerPlugin(DrawSVGPlugin);\n\nexport { DrawSVGPlugin as default };"],"names":["_windowExists","window","_getGSAP","gsap","registerPlugin","_round","value","Math","round","_parseNum","parseFloat","_getAttributeAsNumber","target","attr","getAttribute","_getDistance","x1","y1","x2","y2","scaleX","scaleY","_sqrt","_warn","message","console","warn","_hasNonScalingStroke","_getLength","_toArray","length","bbox","points","prevPoint","i","rx","ry","type","tagName","toLowerCase","style","getScreenCTM","a","b","d","c","getBBox","e","x","y","width","height","_types","abs","strokeDasharray","getTotalLength","match","_numExp","push","PI","_getPosition","cs","_win","getComputedStyle","dash","offset","strokeDashoffset","indexOf","substr","max","_initCore","_coreInitted","utils","toArray","_isEdge","navigator","userAgent","rect","circle","ellipse","line","sqrt","DrawSVGPlugin","version","name","register","core","init","start","end","overage","_style","_target","_parse","defaultStart","s","undefined","_length","_dash","_offset","_offsetPT","this","add","_dashPT","strokeLinecap","strokeLinejoin","strokeMiterlimit","_live","_props","render","ratio","data","lengthRatio","pt","_pt","r","_next","getLength","getPosition"],"mappings":"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"}