You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
563 KiB
1 lines
563 KiB
{"ast":null,"code":"import 'core-js/modules/es.promise.js';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport 'core-js/modules/es.string.match.js';\nimport 'core-js/modules/es.string.replace.js';\nimport 'core-js/modules/es.string.starts-with.js';\nimport 'core-js/modules/es.array.iterator.js';\nimport 'core-js/modules/web.dom-collections.iterator.js';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport 'core-js/modules/es.array.reduce.js';\nimport 'core-js/modules/es.string.ends-with.js';\nimport 'core-js/modules/es.string.split.js';\nimport requestAnimationFrame from 'raf';\nimport 'core-js/modules/es.string.trim.js';\nimport RGBColor from 'rgbcolor';\nimport 'core-js/modules/es.array.index-of.js';\nimport 'core-js/modules/es.string.includes.js';\nimport 'core-js/modules/es.array.reverse.js';\nimport { SVGPathData } from 'svg-pathdata';\nimport 'core-js/modules/es.regexp.to-string.js';\nimport { canvasRGBA } from 'stackblur-canvas';\n/**\r\n * Options preset for `OffscreenCanvas`.\r\n * @param config - Preset requirements.\r\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\r\n * @returns Preset object.\r\n */\n\nfunction offscreen() {\n var {\n DOMParser: DOMParserFallback\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var preset = {\n window: null,\n ignoreAnimation: true,\n ignoreMouse: true,\n DOMParser: DOMParserFallback,\n\n createCanvas(width, height) {\n return new OffscreenCanvas(width, height);\n },\n\n createImage(url) {\n return _asyncToGenerator(function* () {\n var response = yield fetch(url);\n var blob = yield response.blob();\n var img = yield createImageBitmap(blob);\n return img;\n })();\n }\n\n };\n\n if (typeof DOMParser !== 'undefined' || typeof DOMParserFallback === 'undefined') {\n Reflect.deleteProperty(preset, 'DOMParser');\n }\n\n return preset;\n}\n/**\r\n * Options preset for `node-canvas`.\r\n * @param config - Preset requirements.\r\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\r\n * @param config.canvas - `node-canvas` exports.\r\n * @param config.fetch - WHATWG-compatible `fetch` function.\r\n * @returns Preset object.\r\n */\n\n\nfunction node(_ref) {\n var {\n DOMParser,\n canvas,\n fetch\n } = _ref;\n return {\n window: null,\n ignoreAnimation: true,\n ignoreMouse: true,\n DOMParser,\n fetch,\n createCanvas: canvas.createCanvas,\n createImage: canvas.loadImage\n };\n}\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null,\n offscreen: offscreen,\n node: node\n});\n/**\r\n * HTML-safe compress white-spaces.\r\n * @param str - String to compress.\r\n * @returns String.\r\n */\n\nfunction compressSpaces(str) {\n return str.replace(/(?!\\u3000)\\s+/gm, ' ');\n}\n/**\r\n * HTML-safe left trim.\r\n * @param str - String to trim.\r\n * @returns String.\r\n */\n\n\nfunction trimLeft(str) {\n return str.replace(/^[\\n \\t]+/, '');\n}\n/**\r\n * HTML-safe right trim.\r\n * @param str - String to trim.\r\n * @returns String.\r\n */\n\n\nfunction trimRight(str) {\n return str.replace(/[\\n \\t]+$/, '');\n}\n/**\r\n * String to numbers array.\r\n * @param str - Numbers string.\r\n * @returns Numbers array.\r\n */\n\n\nfunction toNumbers(str) {\n var matches = (str || '').match(/-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)/gm) || [];\n return matches.map(parseFloat);\n} // Microsoft Edge fix\n\n\nvar allUppercase = /^[A-Z-]+$/;\n/**\r\n * Normalize attribute name.\r\n * @param name - Attribute name.\r\n * @returns Normalized attribute name.\r\n */\n\nfunction normalizeAttributeName(name) {\n if (allUppercase.test(name)) {\n return name.toLowerCase();\n }\n\n return name;\n}\n/**\r\n * Parse external URL.\r\n * @param url - CSS url string.\r\n * @returns Parsed URL.\r\n */\n\n\nfunction parseExternalUrl(url) {\n // single quotes [2]\n // v double quotes [3]\n // v v no quotes [4]\n // v v v\n var urlMatch = /url\\(('([^']+)'|\"([^\"]+)\"|([^'\")]+))\\)/.exec(url) || [];\n return urlMatch[2] || urlMatch[3] || urlMatch[4];\n}\n/**\r\n * Transform floats to integers in rgb colors.\r\n * @param color - Color to normalize.\r\n * @returns Normalized color.\r\n */\n\n\nfunction normalizeColor(color) {\n if (!color.startsWith('rgb')) {\n return color;\n }\n\n var rgbParts = 3;\n var normalizedColor = color.replace(/\\d+(\\.\\d+)?/g, (num, isFloat) => rgbParts-- && isFloat ? String(Math.round(parseFloat(num))) : num);\n return normalizedColor;\n} // slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js\n\n\nvar attributeRegex = /(\\[[^\\]]+\\])/g;\nvar idRegex = /(#[^\\s+>~.[:]+)/g;\nvar classRegex = /(\\.[^\\s+>~.[:]+)/g;\nvar pseudoElementRegex = /(::[^\\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi;\nvar pseudoClassWithBracketsRegex = /(:[\\w-]+\\([^)]*\\))/gi;\nvar pseudoClassRegex = /(:[^\\s+>~.[:]+)/g;\nvar elementRegex = /([^\\s+>~.[:]+)/g;\n\nfunction findSelectorMatch(selector, regex) {\n var matches = regex.exec(selector);\n\n if (!matches) {\n return [selector, 0];\n }\n\n return [selector.replace(regex, ' '), matches.length];\n}\n/**\r\n * Measure selector specificity.\r\n * @param selector - Selector to measure.\r\n * @returns Specificity.\r\n */\n\n\nfunction getSelectorSpecificity(selector) {\n var specificity = [0, 0, 0];\n var currentSelector = selector.replace(/:not\\(([^)]*)\\)/g, ' $1 ').replace(/{[\\s\\S]*/gm, ' ');\n var delta = 0;\n [currentSelector, delta] = findSelectorMatch(currentSelector, attributeRegex);\n specificity[1] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, idRegex);\n specificity[0] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, classRegex);\n specificity[1] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoElementRegex);\n specificity[2] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassWithBracketsRegex);\n specificity[1] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassRegex);\n specificity[1] += delta;\n currentSelector = currentSelector.replace(/[*\\s+>~]/g, ' ').replace(/[#.]/g, ' ');\n [currentSelector, delta] = findSelectorMatch(currentSelector, elementRegex); // lgtm [js/useless-assignment-to-local]\n\n specificity[2] += delta;\n return specificity.join('');\n}\n\nvar PSEUDO_ZERO = .00000001;\n/**\r\n * Vector magnitude.\r\n * @param v\r\n * @returns Number result.\r\n */\n\nfunction vectorMagnitude(v) {\n return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2));\n}\n/**\r\n * Ratio between two vectors.\r\n * @param u\r\n * @param v\r\n * @returns Number result.\r\n */\n\n\nfunction vectorsRatio(u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vectorMagnitude(u) * vectorMagnitude(v));\n}\n/**\r\n * Angle between two vectors.\r\n * @param u\r\n * @param v\r\n * @returns Number result.\r\n */\n\n\nfunction vectorsAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vectorsRatio(u, v));\n}\n\nfunction CB1(t) {\n return t * t * t;\n}\n\nfunction CB2(t) {\n return 3 * t * t * (1 - t);\n}\n\nfunction CB3(t) {\n return 3 * t * (1 - t) * (1 - t);\n}\n\nfunction CB4(t) {\n return (1 - t) * (1 - t) * (1 - t);\n}\n\nfunction QB1(t) {\n return t * t;\n}\n\nfunction QB2(t) {\n return 2 * t * (1 - t);\n}\n\nfunction QB3(t) {\n return (1 - t) * (1 - t);\n}\n\nclass Property {\n constructor(document, name, value) {\n this.document = document;\n this.name = name;\n this.value = value;\n this.isNormalizedColor = false;\n }\n\n static empty(document) {\n return new Property(document, 'EMPTY', '');\n }\n\n split() {\n var separator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ' ';\n var {\n document,\n name\n } = this;\n return compressSpaces(this.getString()).trim().split(separator).map(value => new Property(document, name, value));\n }\n\n hasValue(zeroIsValue) {\n var {\n value\n } = this;\n return value !== null && value !== '' && (zeroIsValue || value !== 0) && typeof value !== 'undefined';\n }\n\n isString(regexp) {\n var {\n value\n } = this;\n var result = typeof value === 'string';\n\n if (!result || !regexp) {\n return result;\n }\n\n return regexp.test(value);\n }\n\n isUrlDefinition() {\n return this.isString(/^url\\(/);\n }\n\n isPixels() {\n if (!this.hasValue()) {\n return false;\n }\n\n var asString = this.getString();\n\n switch (true) {\n case asString.endsWith('px'):\n case /^[0-9]+$/.test(asString):\n return true;\n\n default:\n return false;\n }\n }\n\n setValue(value) {\n this.value = value;\n return this;\n }\n\n getValue(def) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return this.value;\n }\n\n return def;\n }\n\n getNumber(def) {\n if (!this.hasValue()) {\n if (typeof def === 'undefined') {\n return 0;\n }\n\n return parseFloat(def);\n }\n\n var {\n value\n } = this;\n var n = parseFloat(value);\n\n if (this.isString(/%$/)) {\n n /= 100.0;\n }\n\n return n;\n }\n\n getString(def) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return typeof this.value === 'undefined' ? '' : String(this.value);\n }\n\n return String(def);\n }\n\n getColor(def) {\n var color = this.getString(def);\n\n if (this.isNormalizedColor) {\n return color;\n }\n\n this.isNormalizedColor = true;\n color = normalizeColor(color);\n this.value = color;\n return color;\n }\n\n getDpi() {\n return 96.0; // TODO: compute?\n }\n\n getRem() {\n return this.document.rootEmSize;\n }\n\n getEm() {\n return this.document.emSize;\n }\n\n getUnits() {\n return this.getString().replace(/[0-9.-]/g, '');\n }\n\n getPixels(axisOrIsFontSize) {\n var processPercent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.hasValue()) {\n return 0;\n }\n\n var [axis, isFontSize] = typeof axisOrIsFontSize === 'boolean' ? [undefined, axisOrIsFontSize] : [axisOrIsFontSize];\n var {\n viewPort\n } = this.document.screen;\n\n switch (true) {\n case this.isString(/vmin$/):\n return this.getNumber() / 100.0 * Math.min(viewPort.computeSize('x'), viewPort.computeSize('y'));\n\n case this.isString(/vmax$/):\n return this.getNumber() / 100.0 * Math.max(viewPort.computeSize('x'), viewPort.computeSize('y'));\n\n case this.isString(/vw$/):\n return this.getNumber() / 100.0 * viewPort.computeSize('x');\n\n case this.isString(/vh$/):\n return this.getNumber() / 100.0 * viewPort.computeSize('y');\n\n case this.isString(/rem$/):\n return this.getNumber() * this.getRem();\n\n case this.isString(/em$/):\n return this.getNumber() * this.getEm();\n\n case this.isString(/ex$/):\n return this.getNumber() * this.getEm() / 2.0;\n\n case this.isString(/px$/):\n return this.getNumber();\n\n case this.isString(/pt$/):\n return this.getNumber() * this.getDpi() * (1.0 / 72.0);\n\n case this.isString(/pc$/):\n return this.getNumber() * 15;\n\n case this.isString(/cm$/):\n return this.getNumber() * this.getDpi() / 2.54;\n\n case this.isString(/mm$/):\n return this.getNumber() * this.getDpi() / 25.4;\n\n case this.isString(/in$/):\n return this.getNumber() * this.getDpi();\n\n case this.isString(/%$/) && isFontSize:\n return this.getNumber() * this.getEm();\n\n case this.isString(/%$/):\n return this.getNumber() * viewPort.computeSize(axis);\n\n default:\n {\n var n = this.getNumber();\n\n if (processPercent && n < 1.0) {\n return n * viewPort.computeSize(axis);\n }\n\n return n;\n }\n }\n }\n\n getMilliseconds() {\n if (!this.hasValue()) {\n return 0;\n }\n\n if (this.isString(/ms$/)) {\n return this.getNumber();\n }\n\n return this.getNumber() * 1000;\n }\n\n getRadians() {\n if (!this.hasValue()) {\n return 0;\n }\n\n switch (true) {\n case this.isString(/deg$/):\n return this.getNumber() * (Math.PI / 180.0);\n\n case this.isString(/grad$/):\n return this.getNumber() * (Math.PI / 200.0);\n\n case this.isString(/rad$/):\n return this.getNumber();\n\n default:\n return this.getNumber() * (Math.PI / 180.0);\n }\n }\n\n getDefinition() {\n var asString = this.getString();\n var name = /#([^)'\"]+)/.exec(asString);\n\n if (name) {\n name = name[1];\n }\n\n if (!name) {\n name = asString;\n }\n\n return this.document.definitions[name];\n }\n\n getFillStyleDefinition(element, opacity) {\n var def = this.getDefinition();\n\n if (!def) {\n return null;\n } // gradient\n\n\n if (typeof def.createGradient === 'function') {\n return def.createGradient(this.document.ctx, element, opacity);\n } // pattern\n\n\n if (typeof def.createPattern === 'function') {\n if (def.getHrefAttribute().hasValue()) {\n var patternTransform = def.getAttribute('patternTransform');\n def = def.getHrefAttribute().getDefinition();\n\n if (patternTransform.hasValue()) {\n def.getAttribute('patternTransform', true).setValue(patternTransform.value);\n }\n }\n\n return def.createPattern(this.document.ctx, element, opacity);\n }\n\n return null;\n }\n\n getTextBaseline() {\n if (!this.hasValue()) {\n return null;\n }\n\n return Property.textBaselineMapping[this.getString()];\n }\n\n addOpacity(opacity) {\n var value = this.getColor();\n var len = value.length;\n var commas = 0; // Simulate old RGBColor version, which can't parse rgba.\n\n for (var i = 0; i < len; i++) {\n if (value[i] === ',') {\n commas++;\n }\n\n if (commas === 3) {\n break;\n }\n }\n\n if (opacity.hasValue() && this.isString() && commas !== 3) {\n var color = new RGBColor(value);\n\n if (color.ok) {\n color.alpha = opacity.getNumber();\n value = color.toRGBA();\n }\n }\n\n return new Property(this.document, this.name, value);\n }\n\n}\n\nProperty.textBaselineMapping = {\n 'baseline': 'alphabetic',\n 'before-edge': 'top',\n 'text-before-edge': 'top',\n 'middle': 'middle',\n 'central': 'middle',\n 'after-edge': 'bottom',\n 'text-after-edge': 'bottom',\n 'ideographic': 'ideographic',\n 'alphabetic': 'alphabetic',\n 'hanging': 'hanging',\n 'mathematical': 'alphabetic'\n};\n\nclass ViewPort {\n constructor() {\n this.viewPorts = [];\n }\n\n clear() {\n this.viewPorts = [];\n }\n\n setCurrent(width, height) {\n this.viewPorts.push({\n width,\n height\n });\n }\n\n removeCurrent() {\n this.viewPorts.pop();\n }\n\n getCurrent() {\n var {\n viewPorts\n } = this;\n return viewPorts[viewPorts.length - 1];\n }\n\n get width() {\n return this.getCurrent().width;\n }\n\n get height() {\n return this.getCurrent().height;\n }\n\n computeSize(d) {\n if (typeof d === 'number') {\n return d;\n }\n\n if (d === 'x') {\n return this.width;\n }\n\n if (d === 'y') {\n return this.height;\n }\n\n return Math.sqrt(Math.pow(this.width, 2) + Math.pow(this.height, 2)) / Math.sqrt(2);\n }\n\n}\n\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n\n static parse(point) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var [x = defaultValue, y = defaultValue] = toNumbers(point);\n return new Point(x, y);\n }\n\n static parseScale(scale) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var [x = defaultValue, y = x] = toNumbers(scale);\n return new Point(x, y);\n }\n\n static parsePath(path) {\n var points = toNumbers(path);\n var len = points.length;\n var pathPoints = [];\n\n for (var i = 0; i < len; i += 2) {\n pathPoints.push(new Point(points[i], points[i + 1]));\n }\n\n return pathPoints;\n }\n\n angleTo(point) {\n return Math.atan2(point.y - this.y, point.x - this.x);\n }\n\n applyTransform(transform) {\n var {\n x,\n y\n } = this;\n var xp = x * transform[0] + y * transform[2] + transform[4];\n var yp = x * transform[1] + y * transform[3] + transform[5];\n this.x = xp;\n this.y = yp;\n }\n\n}\n\nclass Mouse {\n constructor(screen) {\n this.screen = screen;\n this.working = false;\n this.events = [];\n this.eventElements = []; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\n this.onClick = this.onClick.bind(this); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\n this.onMouseMove = this.onMouseMove.bind(this);\n }\n\n isWorking() {\n return this.working;\n }\n\n start() {\n if (this.working) {\n return;\n }\n\n var {\n screen,\n onClick,\n onMouseMove\n } = this;\n var canvas = screen.ctx.canvas;\n canvas.onclick = onClick;\n canvas.onmousemove = onMouseMove;\n this.working = true;\n }\n\n stop() {\n if (!this.working) {\n return;\n }\n\n var canvas = this.screen.ctx.canvas;\n this.working = false;\n canvas.onclick = null;\n canvas.onmousemove = null;\n }\n\n hasEvents() {\n return this.working && this.events.length > 0;\n }\n\n runEvents() {\n if (!this.working) {\n return;\n }\n\n var {\n screen: document,\n events,\n eventElements\n } = this;\n var {\n style\n } = document.ctx.canvas;\n\n if (style) {\n style.cursor = '';\n }\n\n events.forEach((_ref, i) => {\n var {\n run\n } = _ref;\n var element = eventElements[i];\n\n while (element) {\n run(element);\n element = element.parent;\n }\n }); // done running, clear\n\n this.events = [];\n this.eventElements = [];\n }\n\n checkPath(element, ctx) {\n if (!this.working || !ctx) {\n return;\n }\n\n var {\n events,\n eventElements\n } = this;\n events.forEach((_ref2, i) => {\n var {\n x,\n y\n } = _ref2;\n\n if (!eventElements[i] && ctx.isPointInPath && ctx.isPointInPath(x, y)) {\n eventElements[i] = element;\n }\n });\n }\n\n checkBoundingBox(element, boundingBox) {\n if (!this.working || !boundingBox) {\n return;\n }\n\n var {\n events,\n eventElements\n } = this;\n events.forEach((_ref3, i) => {\n var {\n x,\n y\n } = _ref3;\n\n if (!eventElements[i] && boundingBox.isPointInBox(x, y)) {\n eventElements[i] = element;\n }\n });\n }\n\n mapXY(x, y) {\n var {\n window,\n ctx\n } = this.screen;\n var point = new Point(x, y);\n var element = ctx.canvas;\n\n while (element) {\n point.x -= element.offsetLeft;\n point.y -= element.offsetTop;\n element = element.offsetParent;\n }\n\n if (window.scrollX) {\n point.x += window.scrollX;\n }\n\n if (window.scrollY) {\n point.y += window.scrollY;\n }\n\n return point;\n }\n\n onClick(event) {\n var {\n x,\n y\n } = this.mapXY(event.clientX, event.clientY);\n this.events.push({\n type: 'onclick',\n x,\n y,\n\n run(eventTarget) {\n if (eventTarget.onClick) {\n eventTarget.onClick();\n }\n }\n\n });\n }\n\n onMouseMove(event) {\n var {\n x,\n y\n } = this.mapXY(event.clientX, event.clientY);\n this.events.push({\n type: 'onmousemove',\n x,\n y,\n\n run(eventTarget) {\n if (eventTarget.onMouseMove) {\n eventTarget.onMouseMove();\n }\n }\n\n });\n }\n\n}\n\nvar defaultWindow = typeof window !== 'undefined' ? window : null;\nvar defaultFetch$1 = typeof fetch !== 'undefined' ? fetch.bind(undefined) // `fetch` depends on context: `someObject.fetch(...)` will throw error.\n: null;\n\nclass Screen {\n constructor(ctx) {\n var {\n fetch = defaultFetch$1,\n window = defaultWindow\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.ctx = ctx;\n this.FRAMERATE = 30;\n this.MAX_VIRTUAL_PIXELS = 30000;\n this.CLIENT_WIDTH = 800;\n this.CLIENT_HEIGHT = 600;\n this.viewPort = new ViewPort();\n this.mouse = new Mouse(this);\n this.animations = [];\n this.waits = [];\n this.frameDuration = 0;\n this.isReadyLock = false;\n this.isFirstRender = true;\n this.intervalId = null;\n this.window = window;\n this.fetch = fetch;\n }\n\n wait(checker) {\n this.waits.push(checker);\n }\n\n ready() {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (!this.readyPromise) {\n return Promise.resolve();\n }\n\n return this.readyPromise;\n }\n\n isReady() {\n if (this.isReadyLock) {\n return true;\n }\n\n var isReadyLock = this.waits.every(_ => _());\n\n if (isReadyLock) {\n this.waits = [];\n\n if (this.resolveReady) {\n this.resolveReady();\n }\n }\n\n this.isReadyLock = isReadyLock;\n return isReadyLock;\n }\n\n setDefaults(ctx) {\n // initial values and defaults\n ctx.strokeStyle = 'rgba(0,0,0,0)';\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n }\n\n setViewBox(_ref) {\n var {\n document,\n ctx,\n aspectRatio,\n width,\n desiredWidth,\n height,\n desiredHeight,\n minX = 0,\n minY = 0,\n refX,\n refY,\n clip = false,\n clipX = 0,\n clipY = 0\n } = _ref; // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n\n var cleanAspectRatio = compressSpaces(aspectRatio).replace(/^defer\\s/, ''); // ignore defer\n\n var [aspectRatioAlign, aspectRatioMeetOrSlice] = cleanAspectRatio.split(' ');\n var align = aspectRatioAlign || 'xMidYMid';\n var meetOrSlice = aspectRatioMeetOrSlice || 'meet'; // calculate scale\n\n var scaleX = width / desiredWidth;\n var scaleY = height / desiredHeight;\n var scaleMin = Math.min(scaleX, scaleY);\n var scaleMax = Math.max(scaleX, scaleY);\n var finalDesiredWidth = desiredWidth;\n var finalDesiredHeight = desiredHeight;\n\n if (meetOrSlice === 'meet') {\n finalDesiredWidth *= scaleMin;\n finalDesiredHeight *= scaleMin;\n }\n\n if (meetOrSlice === 'slice') {\n finalDesiredWidth *= scaleMax;\n finalDesiredHeight *= scaleMax;\n }\n\n var refXProp = new Property(document, 'refX', refX);\n var refYProp = new Property(document, 'refY', refY);\n var hasRefs = refXProp.hasValue() && refYProp.hasValue();\n\n if (hasRefs) {\n ctx.translate(-scaleMin * refXProp.getPixels('x'), -scaleMin * refYProp.getPixels('y'));\n }\n\n if (clip) {\n var scaledClipX = scaleMin * clipX;\n var scaledClipY = scaleMin * clipY;\n ctx.beginPath();\n ctx.moveTo(scaledClipX, scaledClipY);\n ctx.lineTo(width, scaledClipY);\n ctx.lineTo(width, height);\n ctx.lineTo(scaledClipX, height);\n ctx.closePath();\n ctx.clip();\n }\n\n if (!hasRefs) {\n var isMeetMinY = meetOrSlice === 'meet' && scaleMin === scaleY;\n var isSliceMaxY = meetOrSlice === 'slice' && scaleMax === scaleY;\n var isMeetMinX = meetOrSlice === 'meet' && scaleMin === scaleX;\n var isSliceMaxX = meetOrSlice === 'slice' && scaleMax === scaleX;\n\n if (align.startsWith('xMid') && (isMeetMinY || isSliceMaxY)) {\n ctx.translate(width / 2.0 - finalDesiredWidth / 2.0, 0);\n }\n\n if (align.endsWith('YMid') && (isMeetMinX || isSliceMaxX)) {\n ctx.translate(0, height / 2.0 - finalDesiredHeight / 2.0);\n }\n\n if (align.startsWith('xMax') && (isMeetMinY || isSliceMaxY)) {\n ctx.translate(width - finalDesiredWidth, 0);\n }\n\n if (align.endsWith('YMax') && (isMeetMinX || isSliceMaxX)) {\n ctx.translate(0, height - finalDesiredHeight);\n }\n } // scale\n\n\n switch (true) {\n case align === 'none':\n ctx.scale(scaleX, scaleY);\n break;\n\n case meetOrSlice === 'meet':\n ctx.scale(scaleMin, scaleMin);\n break;\n\n case meetOrSlice === 'slice':\n ctx.scale(scaleMax, scaleMax);\n break;\n } // translate\n\n\n ctx.translate(-minX, -minY);\n }\n\n start(element) {\n var {\n enableRedraw = false,\n ignoreMouse = false,\n ignoreAnimation = false,\n ignoreDimensions = false,\n ignoreClear = false,\n forceRedraw,\n scaleWidth,\n scaleHeight,\n offsetX,\n offsetY\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var {\n FRAMERATE,\n mouse\n } = this;\n var frameDuration = 1000 / FRAMERATE;\n this.frameDuration = frameDuration;\n this.readyPromise = new Promise(resolve => {\n this.resolveReady = resolve;\n });\n\n if (this.isReady()) {\n this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n }\n\n if (!enableRedraw) {\n return;\n }\n\n var now = Date.now();\n var then = now;\n var delta = 0;\n\n var tick = () => {\n now = Date.now();\n delta = now - then;\n\n if (delta >= frameDuration) {\n then = now - delta % frameDuration;\n\n if (this.shouldUpdate(ignoreAnimation, forceRedraw)) {\n this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n mouse.runEvents();\n }\n }\n\n this.intervalId = requestAnimationFrame(tick);\n };\n\n if (!ignoreMouse) {\n mouse.start();\n }\n\n this.intervalId = requestAnimationFrame(tick);\n }\n\n stop() {\n if (this.intervalId) {\n requestAnimationFrame.cancel(this.intervalId);\n this.intervalId = null;\n }\n\n this.mouse.stop();\n }\n\n shouldUpdate(ignoreAnimation, forceRedraw) {\n // need update from animations?\n if (!ignoreAnimation) {\n var {\n frameDuration\n } = this;\n var shouldUpdate = this.animations.reduce((shouldUpdate, animation) => animation.update(frameDuration) || shouldUpdate, false);\n\n if (shouldUpdate) {\n return true;\n }\n } // need update from redraw?\n\n\n if (typeof forceRedraw === 'function' && forceRedraw()) {\n return true;\n }\n\n if (!this.isReadyLock && this.isReady()) {\n return true;\n } // need update from mouse events?\n\n\n if (this.mouse.hasEvents()) {\n return true;\n }\n\n return false;\n }\n\n render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY) {\n var {\n CLIENT_WIDTH,\n CLIENT_HEIGHT,\n viewPort,\n ctx,\n isFirstRender\n } = this;\n var canvas = ctx.canvas;\n viewPort.clear();\n\n if (canvas.width && canvas.height) {\n viewPort.setCurrent(canvas.width, canvas.height);\n } else {\n viewPort.setCurrent(CLIENT_WIDTH, CLIENT_HEIGHT);\n }\n\n var widthStyle = element.getStyle('width');\n var heightStyle = element.getStyle('height');\n\n if (!ignoreDimensions && (isFirstRender || typeof scaleWidth !== 'number' && typeof scaleHeight !== 'number')) {\n // set canvas size\n if (widthStyle.hasValue()) {\n canvas.width = widthStyle.getPixels('x');\n\n if (canvas.style) {\n canvas.style.width = \"\".concat(canvas.width, \"px\");\n }\n }\n\n if (heightStyle.hasValue()) {\n canvas.height = heightStyle.getPixels('y');\n\n if (canvas.style) {\n canvas.style.height = \"\".concat(canvas.height, \"px\");\n }\n }\n }\n\n var cWidth = canvas.clientWidth || canvas.width;\n var cHeight = canvas.clientHeight || canvas.height;\n\n if (ignoreDimensions && widthStyle.hasValue() && heightStyle.hasValue()) {\n cWidth = widthStyle.getPixels('x');\n cHeight = heightStyle.getPixels('y');\n }\n\n viewPort.setCurrent(cWidth, cHeight);\n\n if (typeof offsetX === 'number') {\n element.getAttribute('x', true).setValue(offsetX);\n }\n\n if (typeof offsetY === 'number') {\n element.getAttribute('y', true).setValue(offsetY);\n }\n\n if (typeof scaleWidth === 'number' || typeof scaleHeight === 'number') {\n var viewBox = toNumbers(element.getAttribute('viewBox').getString());\n var xRatio = 0;\n var yRatio = 0;\n\n if (typeof scaleWidth === 'number') {\n var _widthStyle = element.getStyle('width');\n\n if (_widthStyle.hasValue()) {\n xRatio = _widthStyle.getPixels('x') / scaleWidth;\n } else if (!isNaN(viewBox[2])) {\n xRatio = viewBox[2] / scaleWidth;\n }\n }\n\n if (typeof scaleHeight === 'number') {\n var _heightStyle = element.getStyle('height');\n\n if (_heightStyle.hasValue()) {\n yRatio = _heightStyle.getPixels('y') / scaleHeight;\n } else if (!isNaN(viewBox[3])) {\n yRatio = viewBox[3] / scaleHeight;\n }\n }\n\n if (!xRatio) {\n xRatio = yRatio;\n }\n\n if (!yRatio) {\n yRatio = xRatio;\n }\n\n element.getAttribute('width', true).setValue(scaleWidth);\n element.getAttribute('height', true).setValue(scaleHeight);\n var transformStyle = element.getStyle('transform', true, true);\n transformStyle.setValue(\"\".concat(transformStyle.getString(), \" scale(\").concat(1.0 / xRatio, \", \").concat(1.0 / yRatio, \")\"));\n } // clear and render\n\n\n if (!ignoreClear) {\n ctx.clearRect(0, 0, cWidth, cHeight);\n }\n\n element.render(ctx);\n\n if (isFirstRender) {\n this.isFirstRender = false;\n }\n }\n\n}\n\nScreen.defaultWindow = defaultWindow;\nScreen.defaultFetch = defaultFetch$1;\nvar {\n defaultFetch\n} = Screen;\nvar DefaultDOMParser = typeof DOMParser !== 'undefined' ? DOMParser : null;\n\nclass Parser {\n constructor() {\n var {\n fetch = defaultFetch,\n DOMParser = DefaultDOMParser\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.fetch = fetch;\n this.DOMParser = DOMParser;\n }\n\n parse(resource) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n if (resource.startsWith('<')) {\n return _this.parseFromString(resource);\n }\n\n return _this.load(resource);\n })();\n }\n\n parseFromString(xml) {\n var parser = new this.DOMParser();\n\n try {\n return this.checkDocument(parser.parseFromString(xml, 'image/svg+xml'));\n } catch (err) {\n return this.checkDocument(parser.parseFromString(xml, 'text/xml'));\n }\n }\n\n checkDocument(document) {\n var parserError = document.getElementsByTagName('parsererror')[0];\n\n if (parserError) {\n throw new Error(parserError.textContent);\n }\n\n return document;\n }\n\n load(url) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var response = yield _this2.fetch(url);\n var xml = yield response.text();\n return _this2.parseFromString(xml);\n })();\n }\n\n}\n\nclass Translate {\n constructor(_, point) {\n this.type = 'translate';\n this.point = null;\n this.point = Point.parse(point);\n }\n\n apply(ctx) {\n var {\n x,\n y\n } = this.point;\n ctx.translate(x || 0.0, y || 0.0);\n }\n\n unapply(ctx) {\n var {\n x,\n y\n } = this.point;\n ctx.translate(-1.0 * x || 0.0, -1.0 * y || 0.0);\n }\n\n applyToPoint(point) {\n var {\n x,\n y\n } = this.point;\n point.applyTransform([1, 0, 0, 1, x || 0.0, y || 0.0]);\n }\n\n}\n\nclass Rotate {\n constructor(document, rotate, transformOrigin) {\n this.type = 'rotate';\n this.angle = null;\n this.originX = null;\n this.originY = null;\n this.cx = 0;\n this.cy = 0;\n var numbers = toNumbers(rotate);\n this.angle = new Property(document, 'angle', numbers[0]);\n this.originX = transformOrigin[0];\n this.originY = transformOrigin[1];\n this.cx = numbers[1] || 0;\n this.cy = numbers[2] || 0;\n }\n\n apply(ctx) {\n var {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this;\n var tx = cx + originX.getPixels('x');\n var ty = cy + originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.rotate(angle.getRadians());\n ctx.translate(-tx, -ty);\n }\n\n unapply(ctx) {\n var {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this;\n var tx = cx + originX.getPixels('x');\n var ty = cy + originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.rotate(-1.0 * angle.getRadians());\n ctx.translate(-tx, -ty);\n }\n\n applyToPoint(point) {\n var {\n cx,\n cy,\n angle\n } = this;\n var rad = angle.getRadians();\n point.applyTransform([1, 0, 0, 1, cx || 0.0, cy || 0.0 // this.p.y\n ]);\n point.applyTransform([Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), 0, 0]);\n point.applyTransform([1, 0, 0, 1, -cx || 0.0, -cy || 0.0 // -this.p.y\n ]);\n }\n\n}\n\nclass Scale {\n constructor(_, scale, transformOrigin) {\n this.type = 'scale';\n this.scale = null;\n this.originX = null;\n this.originY = null;\n var scaleSize = Point.parseScale(scale); // Workaround for node-canvas\n\n if (scaleSize.x === 0 || scaleSize.y === 0) {\n scaleSize.x = PSEUDO_ZERO;\n scaleSize.y = PSEUDO_ZERO;\n }\n\n this.scale = scaleSize;\n this.originX = transformOrigin[0];\n this.originY = transformOrigin[1];\n }\n\n apply(ctx) {\n var {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this;\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.scale(x, y || x);\n ctx.translate(-tx, -ty);\n }\n\n unapply(ctx) {\n var {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this;\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.scale(1.0 / x, 1.0 / y || x);\n ctx.translate(-tx, -ty);\n }\n\n applyToPoint(point) {\n var {\n x,\n y\n } = this.scale;\n point.applyTransform([x || 0.0, 0, 0, y || 0.0, 0, 0]);\n }\n\n}\n\nclass Matrix {\n constructor(_, matrix, transformOrigin) {\n this.type = 'matrix';\n this.matrix = [];\n this.originX = null;\n this.originY = null;\n this.matrix = toNumbers(matrix);\n this.originX = transformOrigin[0];\n this.originY = transformOrigin[1];\n }\n\n apply(ctx) {\n var {\n originX,\n originY,\n matrix\n } = this;\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\n ctx.translate(-tx, -ty);\n }\n\n unapply(ctx) {\n var {\n originX,\n originY,\n matrix\n } = this;\n var a = matrix[0];\n var b = matrix[2];\n var c = matrix[4];\n var d = matrix[1];\n var e = matrix[3];\n var f = matrix[5];\n var g = 0.0;\n var h = 0.0;\n var i = 1.0;\n var det = 1 / (a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g));\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.transform(det * (e * i - f * h), det * (f * g - d * i), det * (c * h - b * i), det * (a * i - c * g), det * (b * f - c * e), det * (c * d - a * f));\n ctx.translate(-tx, -ty);\n }\n\n applyToPoint(point) {\n point.applyTransform(this.matrix);\n }\n\n}\n\nclass Skew extends Matrix {\n constructor(document, skew, transformOrigin) {\n super(document, skew, transformOrigin);\n this.type = 'skew';\n this.angle = null;\n this.angle = new Property(document, 'angle', skew);\n }\n\n}\n\nclass SkewX extends Skew {\n constructor(document, skew, transformOrigin) {\n super(document, skew, transformOrigin);\n this.type = 'skewX';\n this.matrix = [1, 0, Math.tan(this.angle.getRadians()), 1, 0, 0];\n }\n\n}\n\nclass SkewY extends Skew {\n constructor(document, skew, transformOrigin) {\n super(document, skew, transformOrigin);\n this.type = 'skewY';\n this.matrix = [1, Math.tan(this.angle.getRadians()), 0, 1, 0, 0];\n }\n\n}\n\nfunction parseTransforms(transform) {\n return compressSpaces(transform).trim().replace(/\\)([a-zA-Z])/g, ') $1').replace(/\\)(\\s?,\\s?)/g, ') ').split(/\\s(?=[a-z])/);\n}\n\nfunction parseTransform(transform) {\n var [type, value] = transform.split('(');\n return [type.trim(), value.trim().replace(')', '')];\n}\n\nclass Transform {\n constructor(document, transform, transformOrigin) {\n this.document = document;\n this.transforms = [];\n var data = parseTransforms(transform);\n data.forEach(transform => {\n if (transform === 'none') {\n return;\n }\n\n var [type, value] = parseTransform(transform);\n var TransformType = Transform.transformTypes[type];\n\n if (typeof TransformType !== 'undefined') {\n this.transforms.push(new TransformType(this.document, value, transformOrigin));\n }\n });\n }\n\n static fromElement(document, element) {\n var transformStyle = element.getStyle('transform', false, true);\n var [transformOriginXProperty, transformOriginYProperty = transformOriginXProperty] = element.getStyle('transform-origin', false, true).split();\n var transformOrigin = [transformOriginXProperty, transformOriginYProperty];\n\n if (transformStyle.hasValue()) {\n return new Transform(document, transformStyle.getString(), transformOrigin);\n }\n\n return null;\n }\n\n apply(ctx) {\n var {\n transforms\n } = this;\n var len = transforms.length;\n\n for (var i = 0; i < len; i++) {\n transforms[i].apply(ctx);\n }\n }\n\n unapply(ctx) {\n var {\n transforms\n } = this;\n var len = transforms.length;\n\n for (var i = len - 1; i >= 0; i--) {\n transforms[i].unapply(ctx);\n }\n } // TODO: applyToPoint unused ... remove?\n\n\n applyToPoint(point) {\n var {\n transforms\n } = this;\n var len = transforms.length;\n\n for (var i = 0; i < len; i++) {\n transforms[i].applyToPoint(point);\n }\n }\n\n}\n\nTransform.transformTypes = {\n translate: Translate,\n rotate: Rotate,\n scale: Scale,\n matrix: Matrix,\n skewX: SkewX,\n skewY: SkewY\n};\n\nclass Element {\n constructor(document, node) {\n var captureTextNodes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this.document = document;\n this.node = node;\n this.captureTextNodes = captureTextNodes;\n this.attributes = {};\n this.styles = {};\n this.stylesSpecificity = {};\n this.animationFrozen = false;\n this.animationFrozenValue = '';\n this.parent = null;\n this.children = [];\n\n if (!node || node.nodeType !== 1) {\n // ELEMENT_NODE\n return;\n } // add attributes\n\n\n Array.from(node.attributes).forEach(attribute => {\n var nodeName = normalizeAttributeName(attribute.nodeName);\n this.attributes[nodeName] = new Property(document, nodeName, attribute.value);\n });\n this.addStylesFromStyleDefinition(); // add inline styles\n\n if (this.getAttribute('style').hasValue()) {\n var styles = this.getAttribute('style').getString().split(';').map(_ => _.trim());\n styles.forEach(style => {\n if (!style) {\n return;\n }\n\n var [name, value] = style.split(':').map(_ => _.trim());\n this.styles[name] = new Property(document, name, value);\n });\n }\n\n var {\n definitions\n } = document;\n var id = this.getAttribute('id'); // add id\n\n if (id.hasValue()) {\n if (!definitions[id.getString()]) {\n definitions[id.getString()] = this;\n }\n }\n\n Array.from(node.childNodes).forEach(childNode => {\n if (childNode.nodeType === 1) {\n this.addChild(childNode); // ELEMENT_NODE\n } else if (captureTextNodes && (childNode.nodeType === 3 || childNode.nodeType === 4)) {\n var textNode = document.createTextNode(childNode);\n\n if (textNode.getText().length > 0) {\n this.addChild(textNode); // TEXT_NODE\n }\n }\n });\n }\n\n getAttribute(name) {\n var createIfNotExists = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var attr = this.attributes[name];\n\n if (!attr && createIfNotExists) {\n var _attr = new Property(this.document, name, '');\n\n this.attributes[name] = _attr;\n return _attr;\n }\n\n return attr || Property.empty(this.document);\n }\n\n getHrefAttribute() {\n for (var key in this.attributes) {\n if (key === 'href' || key.endsWith(':href')) {\n return this.attributes[key];\n }\n }\n\n return Property.empty(this.document);\n }\n\n getStyle(name) {\n var createIfNotExists = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var skipAncestors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var style = this.styles[name];\n\n if (style) {\n return style;\n }\n\n var attr = this.getAttribute(name);\n\n if (attr !== null && attr !== void 0 && attr.hasValue()) {\n this.styles[name] = attr; // move up to me to cache\n\n return attr;\n }\n\n if (!skipAncestors) {\n var {\n parent\n } = this;\n\n if (parent) {\n var parentStyle = parent.getStyle(name);\n\n if (parentStyle !== null && parentStyle !== void 0 && parentStyle.hasValue()) {\n return parentStyle;\n }\n }\n }\n\n if (createIfNotExists) {\n var _style = new Property(this.document, name, '');\n\n this.styles[name] = _style;\n return _style;\n }\n\n return style || Property.empty(this.document);\n }\n\n render(ctx) {\n // don't render display=none\n // don't render visibility=hidden\n if (this.getStyle('display').getString() === 'none' || this.getStyle('visibility').getString() === 'hidden') {\n return;\n }\n\n ctx.save();\n\n if (this.getStyle('mask').hasValue()) {\n // mask\n var mask = this.getStyle('mask').getDefinition();\n\n if (mask) {\n this.applyEffects(ctx);\n mask.apply(ctx, this);\n }\n } else if (this.getStyle('filter').getValue('none') !== 'none') {\n // filter\n var filter = this.getStyle('filter').getDefinition();\n\n if (filter) {\n this.applyEffects(ctx);\n filter.apply(ctx, this);\n }\n } else {\n this.setContext(ctx);\n this.renderChildren(ctx);\n this.clearContext(ctx);\n }\n\n ctx.restore();\n }\n\n setContext(_) {// NO RENDER\n }\n\n applyEffects(ctx) {\n // transform\n var transform = Transform.fromElement(this.document, this);\n\n if (transform) {\n transform.apply(ctx);\n } // clip\n\n\n var clipPathStyleProp = this.getStyle('clip-path', false, true);\n\n if (clipPathStyleProp.hasValue()) {\n var clip = clipPathStyleProp.getDefinition();\n\n if (clip) {\n clip.apply(ctx);\n }\n }\n }\n\n clearContext(_) {// NO RENDER\n }\n\n renderChildren(ctx) {\n this.children.forEach(child => {\n child.render(ctx);\n });\n }\n\n addChild(childNode) {\n var child = childNode instanceof Element ? childNode : this.document.createElement(childNode);\n child.parent = this;\n\n if (!Element.ignoreChildTypes.includes(child.type)) {\n this.children.push(child);\n }\n }\n\n matchesSelector(selector) {\n var _node$getAttribute;\n\n var {\n node\n } = this;\n\n if (typeof node.matches === 'function') {\n return node.matches(selector);\n }\n\n var styleClasses = (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'class');\n\n if (!styleClasses || styleClasses === '') {\n return false;\n }\n\n return styleClasses.split(' ').some(styleClass => \".\".concat(styleClass) === selector);\n }\n\n addStylesFromStyleDefinition() {\n var {\n styles,\n stylesSpecificity\n } = this.document;\n\n for (var selector in styles) {\n if (!selector.startsWith('@') && this.matchesSelector(selector)) {\n var style = styles[selector];\n var specificity = stylesSpecificity[selector];\n\n if (style) {\n for (var name in style) {\n var existingSpecificity = this.stylesSpecificity[name];\n\n if (typeof existingSpecificity === 'undefined') {\n existingSpecificity = '000';\n }\n\n if (specificity >= existingSpecificity) {\n this.styles[name] = style[name];\n this.stylesSpecificity[name] = specificity;\n }\n }\n }\n }\n }\n }\n\n removeStyles(element, ignoreStyles) {\n var toRestore = ignoreStyles.reduce((toRestore, name) => {\n var styleProp = element.getStyle(name);\n\n if (!styleProp.hasValue()) {\n return toRestore;\n }\n\n var value = styleProp.getString();\n styleProp.setValue('');\n return [...toRestore, [name, value]];\n }, []);\n return toRestore;\n }\n\n restoreStyles(element, styles) {\n styles.forEach(_ref => {\n var [name, value] = _ref;\n element.getStyle(name, true).setValue(value);\n });\n }\n\n isFirstChild() {\n var _this$parent;\n\n return ((_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.children.indexOf(this)) === 0;\n }\n\n}\n\nElement.ignoreChildTypes = ['title'];\n\nclass UnknownElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n }\n\n}\n\nfunction wrapFontFamily(fontFamily) {\n var trimmed = fontFamily.trim();\n return /^('|\")/.test(trimmed) ? trimmed : \"\\\"\".concat(trimmed, \"\\\"\");\n}\n\nfunction prepareFontFamily(fontFamily) {\n return typeof process === 'undefined' ? fontFamily : fontFamily.trim().split(',').map(wrapFontFamily).join(',');\n}\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\r\n * @param fontStyle\r\n * @returns CSS font style.\r\n */\n\n\nfunction prepareFontStyle(fontStyle) {\n if (!fontStyle) {\n return '';\n }\n\n var targetFontStyle = fontStyle.trim().toLowerCase();\n\n switch (targetFontStyle) {\n case 'normal':\n case 'italic':\n case 'oblique':\n case 'inherit':\n case 'initial':\n case 'unset':\n return targetFontStyle;\n\n default:\n if (/^oblique\\s+(-|)\\d+deg$/.test(targetFontStyle)) {\n return targetFontStyle;\n }\n\n return '';\n }\n}\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\r\n * @param fontWeight\r\n * @returns CSS font weight.\r\n */\n\n\nfunction prepareFontWeight(fontWeight) {\n if (!fontWeight) {\n return '';\n }\n\n var targetFontWeight = fontWeight.trim().toLowerCase();\n\n switch (targetFontWeight) {\n case 'normal':\n case 'bold':\n case 'lighter':\n case 'bolder':\n case 'inherit':\n case 'initial':\n case 'unset':\n return targetFontWeight;\n\n default:\n if (/^[\\d.]+$/.test(targetFontWeight)) {\n return targetFontWeight;\n }\n\n return '';\n }\n}\n\nclass Font {\n constructor(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) {\n var inheritFont = inherit ? typeof inherit === 'string' ? Font.parse(inherit) : inherit : {};\n this.fontFamily = fontFamily || inheritFont.fontFamily;\n this.fontSize = fontSize || inheritFont.fontSize;\n this.fontStyle = fontStyle || inheritFont.fontStyle;\n this.fontWeight = fontWeight || inheritFont.fontWeight;\n this.fontVariant = fontVariant || inheritFont.fontVariant;\n }\n\n static parse() {\n var font = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var inherit = arguments.length > 1 ? arguments[1] : undefined;\n var fontStyle = '';\n var fontVariant = '';\n var fontWeight = '';\n var fontSize = '';\n var fontFamily = '';\n var parts = compressSpaces(font).trim().split(' ');\n var set = {\n fontSize: false,\n fontStyle: false,\n fontWeight: false,\n fontVariant: false\n };\n parts.forEach(part => {\n switch (true) {\n case !set.fontStyle && Font.styles.includes(part):\n if (part !== 'inherit') {\n fontStyle = part;\n }\n\n set.fontStyle = true;\n break;\n\n case !set.fontVariant && Font.variants.includes(part):\n if (part !== 'inherit') {\n fontVariant = part;\n }\n\n set.fontStyle = true;\n set.fontVariant = true;\n break;\n\n case !set.fontWeight && Font.weights.includes(part):\n if (part !== 'inherit') {\n fontWeight = part;\n }\n\n set.fontStyle = true;\n set.fontVariant = true;\n set.fontWeight = true;\n break;\n\n case !set.fontSize:\n if (part !== 'inherit') {\n [fontSize] = part.split('/');\n }\n\n set.fontStyle = true;\n set.fontVariant = true;\n set.fontWeight = true;\n set.fontSize = true;\n break;\n\n default:\n if (part !== 'inherit') {\n fontFamily += part;\n }\n\n }\n });\n return new Font(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit);\n }\n\n toString() {\n return [prepareFontStyle(this.fontStyle), this.fontVariant, prepareFontWeight(this.fontWeight), this.fontSize, // Wrap fontFamily only on nodejs and only for canvas.ctx\n prepareFontFamily(this.fontFamily)].join(' ').trim();\n }\n\n}\n\nFont.styles = 'normal|italic|oblique|inherit';\nFont.variants = 'normal|small-caps|inherit';\nFont.weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit';\n\nclass BoundingBox {\n constructor() {\n var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.NaN;\n var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.NaN;\n var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.NaN;\n var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Number.NaN;\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n this.addPoint(x1, y1);\n this.addPoint(x2, y2);\n }\n\n get x() {\n return this.x1;\n }\n\n get y() {\n return this.y1;\n }\n\n get width() {\n return this.x2 - this.x1;\n }\n\n get height() {\n return this.y2 - this.y1;\n }\n\n addPoint(x, y) {\n if (typeof x !== 'undefined') {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x;\n this.x2 = x;\n }\n\n if (x < this.x1) {\n this.x1 = x;\n }\n\n if (x > this.x2) {\n this.x2 = x;\n }\n }\n\n if (typeof y !== 'undefined') {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y;\n this.y2 = y;\n }\n\n if (y < this.y1) {\n this.y1 = y;\n }\n\n if (y > this.y2) {\n this.y2 = y;\n }\n }\n }\n\n addX(x) {\n this.addPoint(x, null);\n }\n\n addY(y) {\n this.addPoint(null, y);\n }\n\n addBoundingBox(boundingBox) {\n if (!boundingBox) {\n return;\n }\n\n var {\n x1,\n y1,\n x2,\n y2\n } = boundingBox;\n this.addPoint(x1, y1);\n this.addPoint(x2, y2);\n }\n\n sumCubic(t, p0, p1, p2, p3) {\n return Math.pow(1 - t, 3) * p0 + 3 * Math.pow(1 - t, 2) * t * p1 + 3 * (1 - t) * Math.pow(t, 2) * p2 + Math.pow(t, 3) * p3;\n }\n\n bezierCurveAdd(forX, p0, p1, p2, p3) {\n var b = 6 * p0 - 12 * p1 + 6 * p2;\n var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n var c = 3 * p1 - 3 * p0;\n\n if (a === 0) {\n if (b === 0) {\n return;\n }\n\n var t = -c / b;\n\n if (0 < t && t < 1) {\n if (forX) {\n this.addX(this.sumCubic(t, p0, p1, p2, p3));\n } else {\n this.addY(this.sumCubic(t, p0, p1, p2, p3));\n }\n }\n\n return;\n }\n\n var b2ac = Math.pow(b, 2) - 4 * c * a;\n\n if (b2ac < 0) {\n return;\n }\n\n var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n\n if (0 < t1 && t1 < 1) {\n if (forX) {\n this.addX(this.sumCubic(t1, p0, p1, p2, p3));\n } else {\n this.addY(this.sumCubic(t1, p0, p1, p2, p3));\n }\n }\n\n var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n\n if (0 < t2 && t2 < 1) {\n if (forX) {\n this.addX(this.sumCubic(t2, p0, p1, p2, p3));\n } else {\n this.addY(this.sumCubic(t2, p0, p1, p2, p3));\n }\n }\n } // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\n\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p3x, p3y);\n this.bezierCurveAdd(true, p0x, p1x, p2x, p3x);\n this.bezierCurveAdd(false, p0y, p1y, p2y, p3y);\n }\n\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n var cp1x = p0x + 2 / 3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\n var cp1y = p0y + 2 / 3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\n var cp2x = cp1x + 1 / 3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\n var cp2y = cp1y + 1 / 3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\n this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y);\n }\n\n isPointInBox(x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this;\n return x1 <= x && x <= x2 && y1 <= y && y <= y2;\n }\n\n}\n\nclass PathParser extends SVGPathData {\n constructor(path) {\n super(path // Fix spaces after signs.\n .replace(/([+\\-.])\\s+/gm, '$1') // Remove invalid part.\n .replace(/[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*/g, ''));\n this.control = null;\n this.start = null;\n this.current = null;\n this.command = null;\n this.commands = this.commands;\n this.i = -1;\n this.previousCommand = null;\n this.points = [];\n this.angles = [];\n }\n\n reset() {\n this.i = -1;\n this.command = null;\n this.previousCommand = null;\n this.start = new Point(0, 0);\n this.control = new Point(0, 0);\n this.current = new Point(0, 0);\n this.points = [];\n this.angles = [];\n }\n\n isEnd() {\n var {\n i,\n commands\n } = this;\n return i >= commands.length - 1;\n }\n\n next() {\n var command = this.commands[++this.i];\n this.previousCommand = this.command;\n this.command = command;\n return command;\n }\n\n getPoint() {\n var xProp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'x';\n var yProp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'y';\n var point = new Point(this.command[xProp], this.command[yProp]);\n return this.makeAbsolute(point);\n }\n\n getAsControlPoint(xProp, yProp) {\n var point = this.getPoint(xProp, yProp);\n this.control = point;\n return point;\n }\n\n getAsCurrentPoint(xProp, yProp) {\n var point = this.getPoint(xProp, yProp);\n this.current = point;\n return point;\n }\n\n getReflectedControlPoint() {\n var previousCommand = this.previousCommand.type;\n\n if (previousCommand !== SVGPathData.CURVE_TO && previousCommand !== SVGPathData.SMOOTH_CURVE_TO && previousCommand !== SVGPathData.QUAD_TO && previousCommand !== SVGPathData.SMOOTH_QUAD_TO) {\n return this.current;\n } // reflect point\n\n\n var {\n current: {\n x: cx,\n y: cy\n },\n control: {\n x: ox,\n y: oy\n }\n } = this;\n var point = new Point(2 * cx - ox, 2 * cy - oy);\n return point;\n }\n\n makeAbsolute(point) {\n if (this.command.relative) {\n var {\n x,\n y\n } = this.current;\n point.x += x;\n point.y += y;\n }\n\n return point;\n }\n\n addMarker(point, from, priorTo) {\n var {\n points,\n angles\n } = this; // if the last angle isn't filled in because we didn't have this point yet ...\n\n if (priorTo && angles.length > 0 && !angles[angles.length - 1]) {\n angles[angles.length - 1] = points[points.length - 1].angleTo(priorTo);\n }\n\n this.addMarkerAngle(point, from ? from.angleTo(point) : null);\n }\n\n addMarkerAngle(point, angle) {\n this.points.push(point);\n this.angles.push(angle);\n }\n\n getMarkerPoints() {\n return this.points;\n }\n\n getMarkerAngles() {\n var {\n angles\n } = this;\n var len = angles.length;\n\n for (var i = 0; i < len; i++) {\n if (!angles[i]) {\n for (var j = i + 1; j < len; j++) {\n if (angles[j]) {\n angles[i] = angles[j];\n break;\n }\n }\n }\n }\n\n return angles;\n }\n\n}\n\nclass RenderedElement extends Element {\n constructor() {\n super(...arguments);\n this.modifiedEmSizeStack = false;\n }\n\n calculateOpacity() {\n var opacity = 1.0; // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n\n var element = this;\n\n while (element) {\n var opacityStyle = element.getStyle('opacity', false, true); // no ancestors on style call\n\n if (opacityStyle.hasValue(true)) {\n opacity *= opacityStyle.getNumber();\n }\n\n element = element.parent;\n }\n\n return opacity;\n }\n\n setContext(ctx) {\n var fromMeasure = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!fromMeasure) {\n // causes stack overflow when measuring text with gradients\n // fill\n var fillStyleProp = this.getStyle('fill');\n var fillOpacityStyleProp = this.getStyle('fill-opacity');\n var strokeStyleProp = this.getStyle('stroke');\n var strokeOpacityProp = this.getStyle('stroke-opacity');\n\n if (fillStyleProp.isUrlDefinition()) {\n var fillStyle = fillStyleProp.getFillStyleDefinition(this, fillOpacityStyleProp);\n\n if (fillStyle) {\n ctx.fillStyle = fillStyle;\n }\n } else if (fillStyleProp.hasValue()) {\n if (fillStyleProp.getString() === 'currentColor') {\n fillStyleProp.setValue(this.getStyle('color').getColor());\n }\n\n var _fillStyle = fillStyleProp.getColor();\n\n if (_fillStyle !== 'inherit') {\n ctx.fillStyle = _fillStyle === 'none' ? 'rgba(0,0,0,0)' : _fillStyle;\n }\n }\n\n if (fillOpacityStyleProp.hasValue()) {\n var _fillStyle2 = new Property(this.document, 'fill', ctx.fillStyle).addOpacity(fillOpacityStyleProp).getColor();\n\n ctx.fillStyle = _fillStyle2;\n } // stroke\n\n\n if (strokeStyleProp.isUrlDefinition()) {\n var strokeStyle = strokeStyleProp.getFillStyleDefinition(this, strokeOpacityProp);\n\n if (strokeStyle) {\n ctx.strokeStyle = strokeStyle;\n }\n } else if (strokeStyleProp.hasValue()) {\n if (strokeStyleProp.getString() === 'currentColor') {\n strokeStyleProp.setValue(this.getStyle('color').getColor());\n }\n\n var _strokeStyle = strokeStyleProp.getString();\n\n if (_strokeStyle !== 'inherit') {\n ctx.strokeStyle = _strokeStyle === 'none' ? 'rgba(0,0,0,0)' : _strokeStyle;\n }\n }\n\n if (strokeOpacityProp.hasValue()) {\n var _strokeStyle2 = new Property(this.document, 'stroke', ctx.strokeStyle).addOpacity(strokeOpacityProp).getString();\n\n ctx.strokeStyle = _strokeStyle2;\n }\n\n var strokeWidthStyleProp = this.getStyle('stroke-width');\n\n if (strokeWidthStyleProp.hasValue()) {\n var newLineWidth = strokeWidthStyleProp.getPixels();\n ctx.lineWidth = !newLineWidth ? PSEUDO_ZERO // browsers don't respect 0 (or node-canvas? :-)\n : newLineWidth;\n }\n\n var strokeLinecapStyleProp = this.getStyle('stroke-linecap');\n var strokeLinejoinStyleProp = this.getStyle('stroke-linejoin');\n var strokeMiterlimitProp = this.getStyle('stroke-miterlimit'); // NEED TEST\n // const pointOrderStyleProp = this.getStyle('paint-order');\n\n var strokeDasharrayStyleProp = this.getStyle('stroke-dasharray');\n var strokeDashoffsetProp = this.getStyle('stroke-dashoffset');\n\n if (strokeLinecapStyleProp.hasValue()) {\n ctx.lineCap = strokeLinecapStyleProp.getString();\n }\n\n if (strokeLinejoinStyleProp.hasValue()) {\n ctx.lineJoin = strokeLinejoinStyleProp.getString();\n }\n\n if (strokeMiterlimitProp.hasValue()) {\n ctx.miterLimit = strokeMiterlimitProp.getNumber();\n } // NEED TEST\n // if (pointOrderStyleProp.hasValue()) {\n // \t// ?\n // \tctx.paintOrder = pointOrderStyleProp.getValue();\n // }\n\n\n if (strokeDasharrayStyleProp.hasValue() && strokeDasharrayStyleProp.getString() !== 'none') {\n var gaps = toNumbers(strokeDasharrayStyleProp.getString());\n\n if (typeof ctx.setLineDash !== 'undefined') {\n ctx.setLineDash(gaps);\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.webkitLineDash !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.webkitLineDash = gaps;\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.mozDash !== 'undefined' && !(gaps.length === 1 && gaps[0] === 0)) {\n // @ts-expect-error Handle browser prefix.\n ctx.mozDash = gaps;\n }\n\n var offset = strokeDashoffsetProp.getPixels();\n\n if (typeof ctx.lineDashOffset !== 'undefined') {\n ctx.lineDashOffset = offset;\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.webkitLineDashOffset !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.webkitLineDashOffset = offset;\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.mozDashOffset !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.mozDashOffset = offset;\n }\n }\n } // font\n\n\n this.modifiedEmSizeStack = false;\n\n if (typeof ctx.font !== 'undefined') {\n var fontStyleProp = this.getStyle('font');\n var fontStyleStyleProp = this.getStyle('font-style');\n var fontVariantStyleProp = this.getStyle('font-variant');\n var fontWeightStyleProp = this.getStyle('font-weight');\n var fontSizeStyleProp = this.getStyle('font-size');\n var fontFamilyStyleProp = this.getStyle('font-family');\n var font = new Font(fontStyleStyleProp.getString(), fontVariantStyleProp.getString(), fontWeightStyleProp.getString(), fontSizeStyleProp.hasValue() ? \"\".concat(fontSizeStyleProp.getPixels(true), \"px\") : '', fontFamilyStyleProp.getString(), Font.parse(fontStyleProp.getString(), ctx.font));\n fontStyleStyleProp.setValue(font.fontStyle);\n fontVariantStyleProp.setValue(font.fontVariant);\n fontWeightStyleProp.setValue(font.fontWeight);\n fontSizeStyleProp.setValue(font.fontSize);\n fontFamilyStyleProp.setValue(font.fontFamily);\n ctx.font = font.toString();\n\n if (fontSizeStyleProp.isPixels()) {\n this.document.emSize = fontSizeStyleProp.getPixels();\n this.modifiedEmSizeStack = true;\n }\n }\n\n if (!fromMeasure) {\n // effects\n this.applyEffects(ctx); // opacity\n\n ctx.globalAlpha = this.calculateOpacity();\n }\n }\n\n clearContext(ctx) {\n super.clearContext(ctx);\n\n if (this.modifiedEmSizeStack) {\n this.document.popEmSize();\n }\n }\n\n}\n\nclass PathElement extends RenderedElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'path';\n this.pathParser = null;\n this.pathParser = new PathParser(this.getAttribute('d').getString());\n }\n\n path(ctx) {\n var {\n pathParser\n } = this;\n var boundingBox = new BoundingBox();\n pathParser.reset();\n\n if (ctx) {\n ctx.beginPath();\n }\n\n while (!pathParser.isEnd()) {\n switch (pathParser.next().type) {\n case PathParser.MOVE_TO:\n this.pathM(ctx, boundingBox);\n break;\n\n case PathParser.LINE_TO:\n this.pathL(ctx, boundingBox);\n break;\n\n case PathParser.HORIZ_LINE_TO:\n this.pathH(ctx, boundingBox);\n break;\n\n case PathParser.VERT_LINE_TO:\n this.pathV(ctx, boundingBox);\n break;\n\n case PathParser.CURVE_TO:\n this.pathC(ctx, boundingBox);\n break;\n\n case PathParser.SMOOTH_CURVE_TO:\n this.pathS(ctx, boundingBox);\n break;\n\n case PathParser.QUAD_TO:\n this.pathQ(ctx, boundingBox);\n break;\n\n case PathParser.SMOOTH_QUAD_TO:\n this.pathT(ctx, boundingBox);\n break;\n\n case PathParser.ARC:\n this.pathA(ctx, boundingBox);\n break;\n\n case PathParser.CLOSE_PATH:\n this.pathZ(ctx, boundingBox);\n break;\n }\n }\n\n return boundingBox;\n }\n\n getBoundingBox(_) {\n return this.path();\n }\n\n getMarkers() {\n var {\n pathParser\n } = this;\n var points = pathParser.getMarkerPoints();\n var angles = pathParser.getMarkerAngles();\n var markers = points.map((point, i) => [point, angles[i]]);\n return markers;\n }\n\n renderChildren(ctx) {\n this.path(ctx);\n this.document.screen.mouse.checkPath(this, ctx);\n var fillRuleStyleProp = this.getStyle('fill-rule');\n\n if (ctx.fillStyle !== '') {\n if (fillRuleStyleProp.getString('inherit') !== 'inherit') {\n ctx.fill(fillRuleStyleProp.getString());\n } else {\n ctx.fill();\n }\n }\n\n if (ctx.strokeStyle !== '') {\n if (this.getAttribute('vector-effect').getString() === 'non-scaling-stroke') {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.stroke();\n ctx.restore();\n } else {\n ctx.stroke();\n }\n }\n\n var markers = this.getMarkers();\n\n if (markers) {\n var markersLastIndex = markers.length - 1;\n var markerStartStyleProp = this.getStyle('marker-start');\n var markerMidStyleProp = this.getStyle('marker-mid');\n var markerEndStyleProp = this.getStyle('marker-end');\n\n if (markerStartStyleProp.isUrlDefinition()) {\n var marker = markerStartStyleProp.getDefinition();\n var [point, angle] = markers[0];\n marker.render(ctx, point, angle);\n }\n\n if (markerMidStyleProp.isUrlDefinition()) {\n var _marker = markerMidStyleProp.getDefinition();\n\n for (var i = 1; i < markersLastIndex; i++) {\n var [_point, _angle] = markers[i];\n\n _marker.render(ctx, _point, _angle);\n }\n }\n\n if (markerEndStyleProp.isUrlDefinition()) {\n var _marker2 = markerEndStyleProp.getDefinition();\n\n var [_point2, _angle2] = markers[markersLastIndex];\n\n _marker2.render(ctx, _point2, _angle2);\n }\n }\n }\n\n static pathM(pathParser) {\n var point = pathParser.getAsCurrentPoint();\n pathParser.start = pathParser.current;\n return {\n point\n };\n }\n\n pathM(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n point\n } = PathElement.pathM(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.moveTo(x, y);\n }\n }\n\n static pathL(pathParser) {\n var {\n current\n } = pathParser;\n var point = pathParser.getAsCurrentPoint();\n return {\n current,\n point\n };\n }\n\n pathL(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point\n } = PathElement.pathL(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point, current);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n }\n\n static pathH(pathParser) {\n var {\n current,\n command\n } = pathParser;\n var point = new Point((command.relative ? current.x : 0) + command.x, current.y);\n pathParser.current = point;\n return {\n current,\n point\n };\n }\n\n pathH(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point\n } = PathElement.pathH(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point, current);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n }\n\n static pathV(pathParser) {\n var {\n current,\n command\n } = pathParser;\n var point = new Point(current.x, (command.relative ? current.y : 0) + command.y);\n pathParser.current = point;\n return {\n current,\n point\n };\n }\n\n pathV(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point\n } = PathElement.pathV(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point, current);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n }\n\n static pathC(pathParser) {\n var {\n current\n } = pathParser;\n var point = pathParser.getPoint('x1', 'y1');\n var controlPoint = pathParser.getAsControlPoint('x2', 'y2');\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n point,\n controlPoint,\n currentPoint\n };\n }\n\n pathC(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, point);\n boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathS(pathParser) {\n var {\n current\n } = pathParser;\n var point = pathParser.getReflectedControlPoint();\n var controlPoint = pathParser.getAsControlPoint('x2', 'y2');\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n point,\n controlPoint,\n currentPoint\n };\n }\n\n pathS(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, point);\n boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathQ(pathParser) {\n var {\n current\n } = pathParser;\n var controlPoint = pathParser.getAsControlPoint('x1', 'y1');\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n controlPoint,\n currentPoint\n };\n }\n\n pathQ(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, controlPoint);\n boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathT(pathParser) {\n var {\n current\n } = pathParser;\n var controlPoint = pathParser.getReflectedControlPoint();\n pathParser.control = controlPoint;\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n controlPoint,\n currentPoint\n };\n }\n\n pathT(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, controlPoint);\n boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathA(pathParser) {\n var {\n current,\n command\n } = pathParser;\n var {\n rX,\n rY,\n xRot,\n lArcFlag,\n sweepFlag\n } = command;\n var xAxisRotation = xRot * (Math.PI / 180.0);\n var currentPoint = pathParser.getAsCurrentPoint(); // Conversion from endpoint to center parameterization\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n // x1', y1'\n\n var currp = new Point(Math.cos(xAxisRotation) * (current.x - currentPoint.x) / 2.0 + Math.sin(xAxisRotation) * (current.y - currentPoint.y) / 2.0, -Math.sin(xAxisRotation) * (current.x - currentPoint.x) / 2.0 + Math.cos(xAxisRotation) * (current.y - currentPoint.y) / 2.0); // adjust radii\n\n var l = Math.pow(currp.x, 2) / Math.pow(rX, 2) + Math.pow(currp.y, 2) / Math.pow(rY, 2);\n\n if (l > 1) {\n rX *= Math.sqrt(l);\n rY *= Math.sqrt(l);\n } // cx', cy'\n\n\n var s = (lArcFlag === sweepFlag ? -1 : 1) * Math.sqrt((Math.pow(rX, 2) * Math.pow(rY, 2) - Math.pow(rX, 2) * Math.pow(currp.y, 2) - Math.pow(rY, 2) * Math.pow(currp.x, 2)) / (Math.pow(rX, 2) * Math.pow(currp.y, 2) + Math.pow(rY, 2) * Math.pow(currp.x, 2)));\n\n if (isNaN(s)) {\n s = 0;\n }\n\n var cpp = new Point(s * rX * currp.y / rY, s * -rY * currp.x / rX); // cx, cy\n\n var centp = new Point((current.x + currentPoint.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, (current.y + currentPoint.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y); // initial angle\n\n var a1 = vectorsAngle([1, 0], [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY]); // θ1\n // angle delta\n\n var u = [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY];\n var v = [(-currp.x - cpp.x) / rX, (-currp.y - cpp.y) / rY];\n var ad = vectorsAngle(u, v); // Δθ\n\n if (vectorsRatio(u, v) <= -1) {\n ad = Math.PI;\n }\n\n if (vectorsRatio(u, v) >= 1) {\n ad = 0;\n }\n\n return {\n currentPoint,\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n };\n }\n\n pathA(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n currentPoint,\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n } = PathElement.pathA(pathParser); // for markers\n\n var dir = 1 - sweepFlag ? 1.0 : -1.0;\n var ah = a1 + dir * (ad / 2.0);\n var halfWay = new Point(centp.x + rX * Math.cos(ah), centp.y + rY * Math.sin(ah));\n pathParser.addMarkerAngle(halfWay, ah - dir * Math.PI / 2);\n pathParser.addMarkerAngle(currentPoint, ah - dir * Math.PI);\n boundingBox.addPoint(currentPoint.x, currentPoint.y); // TODO: this is too naive, make it better\n\n if (ctx && !isNaN(a1) && !isNaN(ad)) {\n var r = rX > rY ? rX : rY;\n var sx = rX > rY ? 1 : rX / rY;\n var sy = rX > rY ? rY / rX : 1;\n ctx.translate(centp.x, centp.y);\n ctx.rotate(xAxisRotation);\n ctx.scale(sx, sy);\n ctx.arc(0, 0, r, a1, a1 + ad, Boolean(1 - sweepFlag));\n ctx.scale(1 / sx, 1 / sy);\n ctx.rotate(-xAxisRotation);\n ctx.translate(-centp.x, -centp.y);\n }\n }\n\n static pathZ(pathParser) {\n pathParser.current = pathParser.start;\n }\n\n pathZ(ctx, boundingBox) {\n PathElement.pathZ(this.pathParser);\n\n if (ctx) {\n // only close path if it is not a straight line\n if (boundingBox.x1 !== boundingBox.x2 && boundingBox.y1 !== boundingBox.y2) {\n ctx.closePath();\n }\n }\n }\n\n}\n\nclass GlyphElement extends PathElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'glyph';\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber();\n this.unicode = this.getAttribute('unicode').getString();\n this.arabicForm = this.getAttribute('arabic-form').getString();\n }\n\n}\n\nclass TextElement extends RenderedElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, new.target === TextElement ? true : captureTextNodes);\n this.type = 'text';\n this.x = 0;\n this.y = 0;\n this.measureCache = -1;\n }\n\n setContext(ctx) {\n var fromMeasure = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n super.setContext(ctx, fromMeasure);\n var textBaseline = this.getStyle('dominant-baseline').getTextBaseline() || this.getStyle('alignment-baseline').getTextBaseline();\n\n if (textBaseline) {\n ctx.textBaseline = textBaseline;\n }\n }\n\n initializeCoordinates() {\n this.x = 0;\n this.y = 0;\n this.leafTexts = [];\n this.textChunkStart = 0;\n this.minX = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n }\n\n getBoundingBox(ctx) {\n if (this.type !== 'text') {\n return this.getTElementBoundingBox(ctx);\n } // first, calculate child positions\n\n\n this.initializeCoordinates();\n this.adjustChildCoordinatesRecursive(ctx);\n var boundingBox = null; // then calculate bounding box\n\n this.children.forEach((_, i) => {\n var childBoundingBox = this.getChildBoundingBox(ctx, this, this, i);\n\n if (!boundingBox) {\n boundingBox = childBoundingBox;\n } else {\n boundingBox.addBoundingBox(childBoundingBox);\n }\n });\n return boundingBox;\n }\n\n getFontSize() {\n var {\n document,\n parent\n } = this;\n var inheritFontSize = Font.parse(document.ctx.font).fontSize;\n var fontSize = parent.getStyle('font-size').getNumber(inheritFontSize);\n return fontSize;\n }\n\n getTElementBoundingBox(ctx) {\n var fontSize = this.getFontSize();\n return new BoundingBox(this.x, this.y - fontSize, this.x + this.measureText(ctx), this.y);\n }\n\n getGlyph(font, text, i) {\n var char = text[i];\n var glyph = null;\n\n if (font.isArabic) {\n var len = text.length;\n var prevChar = text[i - 1];\n var nextChar = text[i + 1];\n var arabicForm = 'isolated';\n\n if ((i === 0 || prevChar === ' ') && i < len - 1 && nextChar !== ' ') {\n arabicForm = 'terminal';\n }\n\n if (i > 0 && prevChar !== ' ' && i < len - 1 && nextChar !== ' ') {\n arabicForm = 'medial';\n }\n\n if (i > 0 && prevChar !== ' ' && (i === len - 1 || nextChar === ' ')) {\n arabicForm = 'initial';\n }\n\n if (typeof font.glyphs[char] !== 'undefined') {\n // NEED TEST\n var maybeGlyph = font.glyphs[char];\n glyph = maybeGlyph instanceof GlyphElement ? maybeGlyph : maybeGlyph[arabicForm];\n }\n } else {\n glyph = font.glyphs[char];\n }\n\n if (!glyph) {\n glyph = font.missingGlyph;\n }\n\n return glyph;\n }\n\n getText() {\n return '';\n }\n\n getTextFromNode(node) {\n var textNode = node || this.node;\n var childNodes = Array.from(textNode.parentNode.childNodes);\n var index = childNodes.indexOf(textNode);\n var lastIndex = childNodes.length - 1;\n var text = compressSpaces( // textNode.value\n // || textNode.text\n textNode.textContent || '');\n\n if (index === 0) {\n text = trimLeft(text);\n }\n\n if (index === lastIndex) {\n text = trimRight(text);\n }\n\n return text;\n }\n\n renderChildren(ctx) {\n if (this.type !== 'text') {\n this.renderTElementChildren(ctx);\n return;\n } // first, calculate child positions\n\n\n this.initializeCoordinates();\n this.adjustChildCoordinatesRecursive(ctx); // then render\n\n this.children.forEach((_, i) => {\n this.renderChild(ctx, this, this, i);\n });\n var {\n mouse\n } = this.document.screen; // Do not calc bounding box if mouse is not working.\n\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(this, this.getBoundingBox(ctx));\n }\n }\n\n renderTElementChildren(ctx) {\n var {\n document,\n parent\n } = this;\n var renderText = this.getText();\n var customFont = parent.getStyle('font-family').getDefinition();\n\n if (customFont) {\n var {\n unitsPerEm\n } = customFont.fontFace;\n var ctxFont = Font.parse(document.ctx.font);\n var fontSize = parent.getStyle('font-size').getNumber(ctxFont.fontSize);\n var fontStyle = parent.getStyle('font-style').getString(ctxFont.fontStyle);\n var scale = fontSize / unitsPerEm;\n var text = customFont.isRTL ? renderText.split('').reverse().join('') : renderText;\n var dx = toNumbers(parent.getAttribute('dx').getString());\n var len = text.length;\n\n for (var i = 0; i < len; i++) {\n var glyph = this.getGlyph(customFont, text, i);\n ctx.translate(this.x, this.y);\n ctx.scale(scale, -scale);\n var lw = ctx.lineWidth;\n ctx.lineWidth = ctx.lineWidth * unitsPerEm / fontSize;\n\n if (fontStyle === 'italic') {\n ctx.transform(1, 0, .4, 1, 0, 0);\n }\n\n glyph.render(ctx);\n\n if (fontStyle === 'italic') {\n ctx.transform(1, 0, -.4, 1, 0, 0);\n }\n\n ctx.lineWidth = lw;\n ctx.scale(1 / scale, -1 / scale);\n ctx.translate(-this.x, -this.y);\n this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / unitsPerEm;\n\n if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n this.x += dx[i];\n }\n }\n\n return;\n }\n\n var {\n x,\n y\n } = this; // NEED TEST\n // if (ctx.paintOrder === 'stroke') {\n // \tif (ctx.strokeStyle) {\n // \t\tctx.strokeText(renderText, x, y);\n // \t}\n // \tif (ctx.fillStyle) {\n // \t\tctx.fillText(renderText, x, y);\n // \t}\n // } else {\n\n if (ctx.fillStyle) {\n ctx.fillText(renderText, x, y);\n }\n\n if (ctx.strokeStyle) {\n ctx.strokeText(renderText, x, y);\n } // }\n\n }\n\n applyAnchoring() {\n if (this.textChunkStart >= this.leafTexts.length) {\n return;\n } // This is basically the \"Apply anchoring\" part of https://www.w3.org/TR/SVG2/text.html#TextLayoutAlgorithm.\n // The difference is that we apply the anchoring as soon as a chunk is finished. This saves some extra looping.\n // Vertical text is not supported.\n\n\n var firstElement = this.leafTexts[this.textChunkStart];\n var textAnchor = firstElement.getStyle('text-anchor').getString('start');\n var isRTL = false; // we treat RTL like LTR\n\n var shift = 0;\n\n if (textAnchor === 'start' && !isRTL || textAnchor === 'end' && isRTL) {\n shift = firstElement.x - this.minX;\n } else if (textAnchor === 'end' && !isRTL || textAnchor === 'start' && isRTL) {\n shift = firstElement.x - this.maxX;\n } else {\n shift = firstElement.x - (this.minX + this.maxX) / 2;\n }\n\n for (var i = this.textChunkStart; i < this.leafTexts.length; i++) {\n this.leafTexts[i].x += shift;\n } // start new chunk\n\n\n this.minX = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n this.textChunkStart = this.leafTexts.length;\n }\n\n adjustChildCoordinatesRecursive(ctx) {\n this.children.forEach((_, i) => {\n this.adjustChildCoordinatesRecursiveCore(ctx, this, this, i);\n });\n this.applyAnchoring();\n }\n\n adjustChildCoordinatesRecursiveCore(ctx, textParent, parent, i) {\n var child = parent.children[i];\n\n if (child.children.length > 0) {\n child.children.forEach((_, i) => {\n textParent.adjustChildCoordinatesRecursiveCore(ctx, textParent, child, i);\n });\n } else {\n // only leafs are relevant\n this.adjustChildCoordinates(ctx, textParent, parent, i);\n }\n }\n\n adjustChildCoordinates(ctx, textParent, parent, i) {\n var child = parent.children[i];\n\n if (typeof child.measureText !== 'function') {\n return child;\n }\n\n ctx.save();\n child.setContext(ctx, true);\n var xAttr = child.getAttribute('x');\n var yAttr = child.getAttribute('y');\n var dxAttr = child.getAttribute('dx');\n var dyAttr = child.getAttribute('dy');\n var customFont = child.getStyle('font-family').getDefinition();\n var isRTL = Boolean(customFont) && customFont.isRTL;\n\n if (i === 0) {\n // First children inherit attributes from parent(s). Positional attributes\n // are only inherited from a parent to it's first child.\n if (!xAttr.hasValue()) {\n xAttr.setValue(child.getInheritedAttribute('x'));\n }\n\n if (!yAttr.hasValue()) {\n yAttr.setValue(child.getInheritedAttribute('y'));\n }\n\n if (!dxAttr.hasValue()) {\n dxAttr.setValue(child.getInheritedAttribute('dx'));\n }\n\n if (!dyAttr.hasValue()) {\n dyAttr.setValue(child.getInheritedAttribute('dy'));\n }\n }\n\n var width = child.measureText(ctx);\n\n if (isRTL) {\n textParent.x -= width;\n }\n\n if (xAttr.hasValue()) {\n // an \"x\" attribute marks the start of a new chunk\n textParent.applyAnchoring();\n child.x = xAttr.getPixels('x');\n\n if (dxAttr.hasValue()) {\n child.x += dxAttr.getPixels('x');\n }\n } else {\n if (dxAttr.hasValue()) {\n textParent.x += dxAttr.getPixels('x');\n }\n\n child.x = textParent.x;\n }\n\n textParent.x = child.x;\n\n if (!isRTL) {\n textParent.x += width;\n }\n\n if (yAttr.hasValue()) {\n child.y = yAttr.getPixels('y');\n\n if (dyAttr.hasValue()) {\n child.y += dyAttr.getPixels('y');\n }\n } else {\n if (dyAttr.hasValue()) {\n textParent.y += dyAttr.getPixels('y');\n }\n\n child.y = textParent.y;\n }\n\n textParent.y = child.y; // update the current chunk and it's bounds\n\n textParent.leafTexts.push(child);\n textParent.minX = Math.min(textParent.minX, child.x, child.x + width);\n textParent.maxX = Math.max(textParent.maxX, child.x, child.x + width);\n child.clearContext(ctx);\n ctx.restore();\n return child;\n }\n\n getChildBoundingBox(ctx, textParent, parent, i) {\n var child = parent.children[i]; // not a text node?\n\n if (typeof child.getBoundingBox !== 'function') {\n return null;\n }\n\n var boundingBox = child.getBoundingBox(ctx);\n\n if (!boundingBox) {\n return null;\n }\n\n child.children.forEach((_, i) => {\n var childBoundingBox = textParent.getChildBoundingBox(ctx, textParent, child, i);\n boundingBox.addBoundingBox(childBoundingBox);\n });\n return boundingBox;\n }\n\n renderChild(ctx, textParent, parent, i) {\n var child = parent.children[i];\n child.render(ctx);\n child.children.forEach((_, i) => {\n textParent.renderChild(ctx, textParent, child, i);\n });\n }\n\n measureText(ctx) {\n var {\n measureCache\n } = this;\n\n if (~measureCache) {\n return measureCache;\n }\n\n var renderText = this.getText();\n var measure = this.measureTargetText(ctx, renderText);\n this.measureCache = measure;\n return measure;\n }\n\n measureTargetText(ctx, targetText) {\n if (!targetText.length) {\n return 0;\n }\n\n var {\n parent\n } = this;\n var customFont = parent.getStyle('font-family').getDefinition();\n\n if (customFont) {\n var fontSize = this.getFontSize();\n var text = customFont.isRTL ? targetText.split('').reverse().join('') : targetText;\n var dx = toNumbers(parent.getAttribute('dx').getString());\n var len = text.length;\n var _measure = 0;\n\n for (var i = 0; i < len; i++) {\n var glyph = this.getGlyph(customFont, text, i);\n _measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;\n\n if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n _measure += dx[i];\n }\n }\n\n return _measure;\n }\n\n if (!ctx.measureText) {\n return targetText.length * 10;\n }\n\n ctx.save();\n this.setContext(ctx, true);\n var {\n width: measure\n } = ctx.measureText(targetText);\n this.clearContext(ctx);\n ctx.restore();\n return measure;\n }\n /**\r\n * Inherits positional attributes from {@link TextElement} parent(s). Attributes\r\n * are only inherited from a parent to its first child.\r\n * @param name - The attribute name.\r\n * @returns The attribute value or null.\r\n */\n\n\n getInheritedAttribute(name) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n var current = this;\n\n while (current instanceof TextElement && current.isFirstChild()) {\n var parentAttr = current.parent.getAttribute(name);\n\n if (parentAttr.hasValue(true)) {\n return parentAttr.getValue('0');\n }\n\n current = current.parent;\n }\n\n return null;\n }\n\n}\n\nclass TSpanElement extends TextElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, new.target === TSpanElement ? true : captureTextNodes);\n this.type = 'tspan'; // if this node has children, then they own the text\n\n this.text = this.children.length > 0 ? '' : this.getTextFromNode();\n }\n\n getText() {\n return this.text;\n }\n\n}\n\nclass TextNode extends TSpanElement {\n constructor() {\n super(...arguments);\n this.type = 'textNode';\n }\n\n}\n\nclass SVGElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'svg';\n this.root = false;\n }\n\n setContext(ctx) {\n var _this$node$parentNode;\n\n var {\n document\n } = this;\n var {\n screen,\n window\n } = document;\n var canvas = ctx.canvas;\n screen.setDefaults(ctx);\n\n if (canvas.style && typeof ctx.font !== 'undefined' && window && typeof window.getComputedStyle !== 'undefined') {\n ctx.font = window.getComputedStyle(canvas).getPropertyValue('font');\n var fontSizeProp = new Property(document, 'fontSize', Font.parse(ctx.font).fontSize);\n\n if (fontSizeProp.hasValue()) {\n document.rootEmSize = fontSizeProp.getPixels('y');\n document.emSize = document.rootEmSize;\n }\n } // create new view port\n\n\n if (!this.getAttribute('x').hasValue()) {\n this.getAttribute('x', true).setValue(0);\n }\n\n if (!this.getAttribute('y').hasValue()) {\n this.getAttribute('y', true).setValue(0);\n }\n\n var {\n width,\n height\n } = screen.viewPort;\n\n if (!this.getStyle('width').hasValue()) {\n this.getStyle('width', true).setValue('100%');\n }\n\n if (!this.getStyle('height').hasValue()) {\n this.getStyle('height', true).setValue('100%');\n }\n\n if (!this.getStyle('color').hasValue()) {\n this.getStyle('color', true).setValue('black');\n }\n\n var refXAttr = this.getAttribute('refX');\n var refYAttr = this.getAttribute('refY');\n var viewBoxAttr = this.getAttribute('viewBox');\n var viewBox = viewBoxAttr.hasValue() ? toNumbers(viewBoxAttr.getString()) : null;\n var clip = !this.root && this.getStyle('overflow').getValue('hidden') !== 'visible';\n var minX = 0;\n var minY = 0;\n var clipX = 0;\n var clipY = 0;\n\n if (viewBox) {\n minX = viewBox[0];\n minY = viewBox[1];\n }\n\n if (!this.root) {\n width = this.getStyle('width').getPixels('x');\n height = this.getStyle('height').getPixels('y');\n\n if (this.type === 'marker') {\n clipX = minX;\n clipY = minY;\n minX = 0;\n minY = 0;\n }\n }\n\n screen.viewPort.setCurrent(width, height); // Default value of transform-origin is center only for root SVG elements\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform-origin\n\n if (this.node // is not temporary SVGElement\n && (!this.parent || ((_this$node$parentNode = this.node.parentNode) === null || _this$node$parentNode === void 0 ? void 0 : _this$node$parentNode.nodeName) === 'foreignObject') && this.getStyle('transform', false, true).hasValue() && !this.getStyle('transform-origin', false, true).hasValue()) {\n this.getStyle('transform-origin', true, true).setValue('50% 50%');\n }\n\n super.setContext(ctx);\n ctx.translate(this.getAttribute('x').getPixels('x'), this.getAttribute('y').getPixels('y'));\n\n if (viewBox) {\n width = viewBox[2];\n height = viewBox[3];\n }\n\n document.setViewBox({\n ctx,\n aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n width: screen.viewPort.width,\n desiredWidth: width,\n height: screen.viewPort.height,\n desiredHeight: height,\n minX,\n minY,\n refX: refXAttr.getValue(),\n refY: refYAttr.getValue(),\n clip,\n clipX,\n clipY\n });\n\n if (viewBox) {\n screen.viewPort.removeCurrent();\n screen.viewPort.setCurrent(width, height);\n }\n }\n\n clearContext(ctx) {\n super.clearContext(ctx);\n this.document.screen.viewPort.removeCurrent();\n }\n /**\r\n * Resize SVG to fit in given size.\r\n * @param width\r\n * @param height\r\n * @param preserveAspectRatio\r\n */\n\n\n resize(width) {\n var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : width;\n var preserveAspectRatio = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var widthAttr = this.getAttribute('width', true);\n var heightAttr = this.getAttribute('height', true);\n var viewBoxAttr = this.getAttribute('viewBox');\n var styleAttr = this.getAttribute('style');\n var originWidth = widthAttr.getNumber(0);\n var originHeight = heightAttr.getNumber(0);\n\n if (preserveAspectRatio) {\n if (typeof preserveAspectRatio === 'string') {\n this.getAttribute('preserveAspectRatio', true).setValue(preserveAspectRatio);\n } else {\n var preserveAspectRatioAttr = this.getAttribute('preserveAspectRatio');\n\n if (preserveAspectRatioAttr.hasValue()) {\n preserveAspectRatioAttr.setValue(preserveAspectRatioAttr.getString().replace(/^\\s*(\\S.*\\S)\\s*$/, '$1'));\n }\n }\n }\n\n widthAttr.setValue(width);\n heightAttr.setValue(height);\n\n if (!viewBoxAttr.hasValue()) {\n viewBoxAttr.setValue(\"0 0 \".concat(originWidth || width, \" \").concat(originHeight || height));\n }\n\n if (styleAttr.hasValue()) {\n var widthStyle = this.getStyle('width');\n var heightStyle = this.getStyle('height');\n\n if (widthStyle.hasValue()) {\n widthStyle.setValue(\"\".concat(width, \"px\"));\n }\n\n if (heightStyle.hasValue()) {\n heightStyle.setValue(\"\".concat(height, \"px\"));\n }\n }\n }\n\n}\n\nclass RectElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'rect';\n }\n\n path(ctx) {\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width', false, true).getPixels('x');\n var height = this.getStyle('height', false, true).getPixels('y');\n var rxAttr = this.getAttribute('rx');\n var ryAttr = this.getAttribute('ry');\n var rx = rxAttr.getPixels('x');\n var ry = ryAttr.getPixels('y');\n\n if (rxAttr.hasValue() && !ryAttr.hasValue()) {\n ry = rx;\n }\n\n if (ryAttr.hasValue() && !rxAttr.hasValue()) {\n rx = ry;\n }\n\n rx = Math.min(rx, width / 2.0);\n ry = Math.min(ry, height / 2.0);\n\n if (ctx) {\n var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n ctx.beginPath(); // always start the path so we don't fill prior paths\n\n if (height > 0 && width > 0) {\n ctx.moveTo(x + rx, y);\n ctx.lineTo(x + width - rx, y);\n ctx.bezierCurveTo(x + width - rx + KAPPA * rx, y, x + width, y + ry - KAPPA * ry, x + width, y + ry);\n ctx.lineTo(x + width, y + height - ry);\n ctx.bezierCurveTo(x + width, y + height - ry + KAPPA * ry, x + width - rx + KAPPA * rx, y + height, x + width - rx, y + height);\n ctx.lineTo(x + rx, y + height);\n ctx.bezierCurveTo(x + rx - KAPPA * rx, y + height, x, y + height - ry + KAPPA * ry, x, y + height - ry);\n ctx.lineTo(x, y + ry);\n ctx.bezierCurveTo(x, y + ry - KAPPA * ry, x + rx - KAPPA * rx, y, x + rx, y);\n ctx.closePath();\n }\n }\n\n return new BoundingBox(x, y, x + width, y + height);\n }\n\n getMarkers() {\n return null;\n }\n\n}\n\nclass CircleElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'circle';\n }\n\n path(ctx) {\n var cx = this.getAttribute('cx').getPixels('x');\n var cy = this.getAttribute('cy').getPixels('y');\n var r = this.getAttribute('r').getPixels();\n\n if (ctx && r > 0) {\n ctx.beginPath();\n ctx.arc(cx, cy, r, 0, Math.PI * 2, false);\n ctx.closePath();\n }\n\n return new BoundingBox(cx - r, cy - r, cx + r, cy + r);\n }\n\n getMarkers() {\n return null;\n }\n\n}\n\nclass EllipseElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'ellipse';\n }\n\n path(ctx) {\n var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n var rx = this.getAttribute('rx').getPixels('x');\n var ry = this.getAttribute('ry').getPixels('y');\n var cx = this.getAttribute('cx').getPixels('x');\n var cy = this.getAttribute('cy').getPixels('y');\n\n if (ctx && rx > 0 && ry > 0) {\n ctx.beginPath();\n ctx.moveTo(cx + rx, cy);\n ctx.bezierCurveTo(cx + rx, cy + KAPPA * ry, cx + KAPPA * rx, cy + ry, cx, cy + ry);\n ctx.bezierCurveTo(cx - KAPPA * rx, cy + ry, cx - rx, cy + KAPPA * ry, cx - rx, cy);\n ctx.bezierCurveTo(cx - rx, cy - KAPPA * ry, cx - KAPPA * rx, cy - ry, cx, cy - ry);\n ctx.bezierCurveTo(cx + KAPPA * rx, cy - ry, cx + rx, cy - KAPPA * ry, cx + rx, cy);\n ctx.closePath();\n }\n\n return new BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\n }\n\n getMarkers() {\n return null;\n }\n\n}\n\nclass LineElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'line';\n }\n\n getPoints() {\n return [new Point(this.getAttribute('x1').getPixels('x'), this.getAttribute('y1').getPixels('y')), new Point(this.getAttribute('x2').getPixels('x'), this.getAttribute('y2').getPixels('y'))];\n }\n\n path(ctx) {\n var [{\n x: x0,\n y: y0\n }, {\n x: x1,\n y: y1\n }] = this.getPoints();\n\n if (ctx) {\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n }\n\n return new BoundingBox(x0, y0, x1, y1);\n }\n\n getMarkers() {\n var [p0, p1] = this.getPoints();\n var a = p0.angleTo(p1);\n return [[p0, a], [p1, a]];\n }\n\n}\n\nclass PolylineElement extends PathElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'polyline';\n this.points = [];\n this.points = Point.parsePath(this.getAttribute('points').getString());\n }\n\n path(ctx) {\n var {\n points\n } = this;\n var [{\n x: x0,\n y: y0\n }] = points;\n var boundingBox = new BoundingBox(x0, y0);\n\n if (ctx) {\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n }\n\n points.forEach(_ref => {\n var {\n x,\n y\n } = _ref;\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n });\n return boundingBox;\n }\n\n getMarkers() {\n var {\n points\n } = this;\n var lastIndex = points.length - 1;\n var markers = [];\n points.forEach((point, i) => {\n if (i === lastIndex) {\n return;\n }\n\n markers.push([point, point.angleTo(points[i + 1])]);\n });\n\n if (markers.length > 0) {\n markers.push([points[points.length - 1], markers[markers.length - 1][1]]);\n }\n\n return markers;\n }\n\n}\n\nclass PolygonElement extends PolylineElement {\n constructor() {\n super(...arguments);\n this.type = 'polygon';\n }\n\n path(ctx) {\n var boundingBox = super.path(ctx);\n var [{\n x,\n y\n }] = this.points;\n\n if (ctx) {\n ctx.lineTo(x, y);\n ctx.closePath();\n }\n\n return boundingBox;\n }\n\n}\n\nclass PatternElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'pattern';\n }\n\n createPattern(ctx, _, parentOpacityProp) {\n var width = this.getStyle('width').getPixels('x', true);\n var height = this.getStyle('height').getPixels('y', true); // render me using a temporary svg element\n\n var patternSvg = new SVGElement(this.document, null);\n patternSvg.attributes.viewBox = new Property(this.document, 'viewBox', this.getAttribute('viewBox').getValue());\n patternSvg.attributes.width = new Property(this.document, 'width', \"\".concat(width, \"px\"));\n patternSvg.attributes.height = new Property(this.document, 'height', \"\".concat(height, \"px\"));\n patternSvg.attributes.transform = new Property(this.document, 'transform', this.getAttribute('patternTransform').getValue());\n patternSvg.children = this.children;\n var patternCanvas = this.document.createCanvas(width, height);\n var patternCtx = patternCanvas.getContext('2d');\n var xAttr = this.getAttribute('x');\n var yAttr = this.getAttribute('y');\n\n if (xAttr.hasValue() && yAttr.hasValue()) {\n patternCtx.translate(xAttr.getPixels('x', true), yAttr.getPixels('y', true));\n }\n\n if (parentOpacityProp.hasValue()) {\n this.styles['fill-opacity'] = parentOpacityProp;\n } else {\n Reflect.deleteProperty(this.styles, 'fill-opacity');\n } // render 3x3 grid so when we transform there's no white space on edges\n\n\n for (var x = -1; x <= 1; x++) {\n for (var y = -1; y <= 1; y++) {\n patternCtx.save();\n patternSvg.attributes.x = new Property(this.document, 'x', x * patternCanvas.width);\n patternSvg.attributes.y = new Property(this.document, 'y', y * patternCanvas.height);\n patternSvg.render(patternCtx);\n patternCtx.restore();\n }\n }\n\n var pattern = ctx.createPattern(patternCanvas, 'repeat');\n return pattern;\n }\n\n}\n\nclass MarkerElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'marker';\n }\n\n render(ctx, point, angle) {\n if (!point) {\n return;\n }\n\n var {\n x,\n y\n } = point;\n var orient = this.getAttribute('orient').getString('auto');\n var markerUnits = this.getAttribute('markerUnits').getString('strokeWidth');\n ctx.translate(x, y);\n\n if (orient === 'auto') {\n ctx.rotate(angle);\n }\n\n if (markerUnits === 'strokeWidth') {\n ctx.scale(ctx.lineWidth, ctx.lineWidth);\n }\n\n ctx.save(); // render me using a temporary svg element\n\n var markerSvg = new SVGElement(this.document, null);\n markerSvg.type = this.type;\n markerSvg.attributes.viewBox = new Property(this.document, 'viewBox', this.getAttribute('viewBox').getValue());\n markerSvg.attributes.refX = new Property(this.document, 'refX', this.getAttribute('refX').getValue());\n markerSvg.attributes.refY = new Property(this.document, 'refY', this.getAttribute('refY').getValue());\n markerSvg.attributes.width = new Property(this.document, 'width', this.getAttribute('markerWidth').getValue());\n markerSvg.attributes.height = new Property(this.document, 'height', this.getAttribute('markerHeight').getValue());\n markerSvg.attributes.overflow = new Property(this.document, 'overflow', this.getAttribute('overflow').getValue());\n markerSvg.attributes.fill = new Property(this.document, 'fill', this.getAttribute('fill').getColor('black'));\n markerSvg.attributes.stroke = new Property(this.document, 'stroke', this.getAttribute('stroke').getValue('none'));\n markerSvg.children = this.children;\n markerSvg.render(ctx);\n ctx.restore();\n\n if (markerUnits === 'strokeWidth') {\n ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth);\n }\n\n if (orient === 'auto') {\n ctx.rotate(-angle);\n }\n\n ctx.translate(-x, -y);\n }\n\n}\n\nclass DefsElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'defs';\n }\n\n render() {// NOOP\n }\n\n}\n\nclass GElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'g';\n }\n\n getBoundingBox(ctx) {\n var boundingBox = new BoundingBox();\n this.children.forEach(child => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx));\n });\n return boundingBox;\n }\n\n}\n\nclass GradientElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.attributesToInherit = ['gradientUnits'];\n this.stops = [];\n var {\n stops,\n children\n } = this;\n children.forEach(child => {\n if (child.type === 'stop') {\n stops.push(child);\n }\n });\n }\n\n getGradientUnits() {\n return this.getAttribute('gradientUnits').getString('objectBoundingBox');\n }\n\n createGradient(ctx, element, parentOpacityProp) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n var stopsContainer = this;\n\n if (this.getHrefAttribute().hasValue()) {\n stopsContainer = this.getHrefAttribute().getDefinition();\n this.inheritStopContainer(stopsContainer);\n }\n\n var {\n stops\n } = stopsContainer;\n var gradient = this.getGradient(ctx, element);\n\n if (!gradient) {\n return this.addParentOpacity(parentOpacityProp, stops[stops.length - 1].color);\n }\n\n stops.forEach(stop => {\n gradient.addColorStop(stop.offset, this.addParentOpacity(parentOpacityProp, stop.color));\n });\n\n if (this.getAttribute('gradientTransform').hasValue()) {\n // render as transformed pattern on temporary canvas\n var {\n document\n } = this;\n var {\n MAX_VIRTUAL_PIXELS,\n viewPort\n } = document.screen;\n var [rootView] = viewPort.viewPorts;\n var rect = new RectElement(document, null);\n rect.attributes.x = new Property(document, 'x', -MAX_VIRTUAL_PIXELS / 3.0);\n rect.attributes.y = new Property(document, 'y', -MAX_VIRTUAL_PIXELS / 3.0);\n rect.attributes.width = new Property(document, 'width', MAX_VIRTUAL_PIXELS);\n rect.attributes.height = new Property(document, 'height', MAX_VIRTUAL_PIXELS);\n var group = new GElement(document, null);\n group.attributes.transform = new Property(document, 'transform', this.getAttribute('gradientTransform').getValue());\n group.children = [rect];\n var patternSvg = new SVGElement(document, null);\n patternSvg.attributes.x = new Property(document, 'x', 0);\n patternSvg.attributes.y = new Property(document, 'y', 0);\n patternSvg.attributes.width = new Property(document, 'width', rootView.width);\n patternSvg.attributes.height = new Property(document, 'height', rootView.height);\n patternSvg.children = [group];\n var patternCanvas = document.createCanvas(rootView.width, rootView.height);\n var patternCtx = patternCanvas.getContext('2d');\n patternCtx.fillStyle = gradient;\n patternSvg.render(patternCtx);\n return patternCtx.createPattern(patternCanvas, 'no-repeat');\n }\n\n return gradient;\n }\n\n inheritStopContainer(stopsContainer) {\n this.attributesToInherit.forEach(attributeToInherit => {\n if (!this.getAttribute(attributeToInherit).hasValue() && stopsContainer.getAttribute(attributeToInherit).hasValue()) {\n this.getAttribute(attributeToInherit, true).setValue(stopsContainer.getAttribute(attributeToInherit).getValue());\n }\n });\n }\n\n addParentOpacity(parentOpacityProp, color) {\n if (parentOpacityProp.hasValue()) {\n var colorProp = new Property(this.document, 'color', color);\n return colorProp.addOpacity(parentOpacityProp).getColor();\n }\n\n return color;\n }\n\n}\n\nclass LinearGradientElement extends GradientElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'linearGradient';\n this.attributesToInherit.push('x1', 'y1', 'x2', 'y2');\n }\n\n getGradient(ctx, element) {\n var isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n var boundingBox = isBoundingBoxUnits ? element.getBoundingBox(ctx) : null;\n\n if (isBoundingBoxUnits && !boundingBox) {\n return null;\n }\n\n if (!this.getAttribute('x1').hasValue() && !this.getAttribute('y1').hasValue() && !this.getAttribute('x2').hasValue() && !this.getAttribute('y2').hasValue()) {\n this.getAttribute('x1', true).setValue(0);\n this.getAttribute('y1', true).setValue(0);\n this.getAttribute('x2', true).setValue(1);\n this.getAttribute('y2', true).setValue(0);\n }\n\n var x1 = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('x1').getNumber() : this.getAttribute('x1').getPixels('x');\n var y1 = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('y1').getNumber() : this.getAttribute('y1').getPixels('y');\n var x2 = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('x2').getNumber() : this.getAttribute('x2').getPixels('x');\n var y2 = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('y2').getNumber() : this.getAttribute('y2').getPixels('y');\n\n if (x1 === x2 && y1 === y2) {\n return null;\n }\n\n return ctx.createLinearGradient(x1, y1, x2, y2);\n }\n\n}\n\nclass RadialGradientElement extends GradientElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'radialGradient';\n this.attributesToInherit.push('cx', 'cy', 'r', 'fx', 'fy', 'fr');\n }\n\n getGradient(ctx, element) {\n var isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n var boundingBox = element.getBoundingBox(ctx);\n\n if (isBoundingBoxUnits && !boundingBox) {\n return null;\n }\n\n if (!this.getAttribute('cx').hasValue()) {\n this.getAttribute('cx', true).setValue('50%');\n }\n\n if (!this.getAttribute('cy').hasValue()) {\n this.getAttribute('cy', true).setValue('50%');\n }\n\n if (!this.getAttribute('r').hasValue()) {\n this.getAttribute('r', true).setValue('50%');\n }\n\n var cx = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('cx').getNumber() : this.getAttribute('cx').getPixels('x');\n var cy = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('cy').getNumber() : this.getAttribute('cy').getPixels('y');\n var fx = cx;\n var fy = cy;\n\n if (this.getAttribute('fx').hasValue()) {\n fx = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('fx').getNumber() : this.getAttribute('fx').getPixels('x');\n }\n\n if (this.getAttribute('fy').hasValue()) {\n fy = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('fy').getNumber() : this.getAttribute('fy').getPixels('y');\n }\n\n var r = isBoundingBoxUnits ? (boundingBox.width + boundingBox.height) / 2.0 * this.getAttribute('r').getNumber() : this.getAttribute('r').getPixels();\n var fr = this.getAttribute('fr').getPixels();\n return ctx.createRadialGradient(fx, fy, fr, cx, cy, r);\n }\n\n}\n\nclass StopElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'stop';\n var offset = Math.max(0, Math.min(1, this.getAttribute('offset').getNumber()));\n var stopOpacity = this.getStyle('stop-opacity');\n var stopColor = this.getStyle('stop-color', true);\n\n if (stopColor.getString() === '') {\n stopColor.setValue('#000');\n }\n\n if (stopOpacity.hasValue()) {\n stopColor = stopColor.addOpacity(stopOpacity);\n }\n\n this.offset = offset;\n this.color = stopColor.getColor();\n }\n\n}\n\nclass AnimateElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'animate';\n this.duration = 0;\n this.initialValue = null;\n this.initialUnits = '';\n this.removed = false;\n this.frozen = false;\n document.screen.animations.push(this);\n this.begin = this.getAttribute('begin').getMilliseconds();\n this.maxDuration = this.begin + this.getAttribute('dur').getMilliseconds();\n this.from = this.getAttribute('from');\n this.to = this.getAttribute('to');\n this.values = new Property(document, 'values', null);\n var valuesAttr = this.getAttribute('values');\n\n if (valuesAttr.hasValue()) {\n this.values.setValue(valuesAttr.getString().split(';'));\n }\n }\n\n getProperty() {\n var attributeType = this.getAttribute('attributeType').getString();\n var attributeName = this.getAttribute('attributeName').getString();\n\n if (attributeType === 'CSS') {\n return this.parent.getStyle(attributeName, true);\n }\n\n return this.parent.getAttribute(attributeName, true);\n }\n\n calcValue() {\n var {\n initialUnits\n } = this;\n var {\n progress,\n from,\n to\n } = this.getProgress(); // tween value linearly\n\n var newValue = from.getNumber() + (to.getNumber() - from.getNumber()) * progress;\n\n if (initialUnits === '%') {\n newValue *= 100.0; // numValue() returns 0-1 whereas properties are 0-100\n }\n\n return \"\".concat(newValue).concat(initialUnits);\n }\n\n update(delta) {\n var {\n parent\n } = this;\n var prop = this.getProperty(); // set initial value\n\n if (!this.initialValue) {\n this.initialValue = prop.getString();\n this.initialUnits = prop.getUnits();\n } // if we're past the end time\n\n\n if (this.duration > this.maxDuration) {\n var fill = this.getAttribute('fill').getString('remove'); // loop for indefinitely repeating animations\n\n if (this.getAttribute('repeatCount').getString() === 'indefinite' || this.getAttribute('repeatDur').getString() === 'indefinite') {\n this.duration = 0;\n } else if (fill === 'freeze' && !this.frozen) {\n this.frozen = true;\n parent.animationFrozen = true;\n parent.animationFrozenValue = prop.getString();\n } else if (fill === 'remove' && !this.removed) {\n this.removed = true;\n prop.setValue(parent.animationFrozen ? parent.animationFrozenValue : this.initialValue);\n return true;\n }\n\n return false;\n }\n\n this.duration += delta; // if we're past the begin time\n\n var updated = false;\n\n if (this.begin < this.duration) {\n var newValue = this.calcValue(); // tween\n\n var typeAttr = this.getAttribute('type');\n\n if (typeAttr.hasValue()) {\n // for transform, etc.\n var type = typeAttr.getString();\n newValue = \"\".concat(type, \"(\").concat(newValue, \")\");\n }\n\n prop.setValue(newValue);\n updated = true;\n }\n\n return updated;\n }\n\n getProgress() {\n var {\n document,\n values\n } = this;\n var result = {\n progress: (this.duration - this.begin) / (this.maxDuration - this.begin)\n };\n\n if (values.hasValue()) {\n var p = result.progress * (values.getValue().length - 1);\n var lb = Math.floor(p);\n var ub = Math.ceil(p);\n result.from = new Property(document, 'from', parseFloat(values.getValue()[lb]));\n result.to = new Property(document, 'to', parseFloat(values.getValue()[ub]));\n result.progress = (p - lb) / (ub - lb);\n } else {\n result.from = this.from;\n result.to = this.to;\n }\n\n return result;\n }\n\n}\n\nclass AnimateColorElement extends AnimateElement {\n constructor() {\n super(...arguments);\n this.type = 'animateColor';\n }\n\n calcValue() {\n var {\n progress,\n from,\n to\n } = this.getProgress();\n var colorFrom = new RGBColor(from.getColor());\n var colorTo = new RGBColor(to.getColor());\n\n if (colorFrom.ok && colorTo.ok) {\n // tween color linearly\n var r = colorFrom.r + (colorTo.r - colorFrom.r) * progress;\n var g = colorFrom.g + (colorTo.g - colorFrom.g) * progress;\n var b = colorFrom.b + (colorTo.b - colorFrom.b) * progress; // ? alpha\n\n return \"rgb(\".concat(Math.floor(r), \", \").concat(Math.floor(g), \", \").concat(Math.floor(b), \")\");\n }\n\n return this.getAttribute('from').getColor();\n }\n\n}\n\nclass AnimateTransformElement extends AnimateElement {\n constructor() {\n super(...arguments);\n this.type = 'animateTransform';\n }\n\n calcValue() {\n var {\n progress,\n from,\n to\n } = this.getProgress(); // tween value linearly\n\n var transformFrom = toNumbers(from.getString());\n var transformTo = toNumbers(to.getString());\n var newValue = transformFrom.map((from, i) => {\n var to = transformTo[i];\n return from + (to - from) * progress;\n }).join(' ');\n return newValue;\n }\n\n}\n\nclass FontElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'font';\n this.glyphs = {};\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber();\n var {\n definitions\n } = document;\n var {\n children\n } = this;\n\n for (var child of children) {\n switch (child.type) {\n case 'font-face':\n {\n this.fontFace = child;\n var fontFamilyStyle = child.getStyle('font-family');\n\n if (fontFamilyStyle.hasValue()) {\n definitions[fontFamilyStyle.getString()] = this;\n }\n\n break;\n }\n\n case 'missing-glyph':\n this.missingGlyph = child;\n break;\n\n case 'glyph':\n {\n var glyph = child;\n\n if (glyph.arabicForm) {\n this.isRTL = true;\n this.isArabic = true;\n\n if (typeof this.glyphs[glyph.unicode] === 'undefined') {\n this.glyphs[glyph.unicode] = {};\n }\n\n this.glyphs[glyph.unicode][glyph.arabicForm] = glyph;\n } else {\n this.glyphs[glyph.unicode] = glyph;\n }\n\n break;\n }\n }\n }\n }\n\n render() {// NO RENDER\n }\n\n}\n\nclass FontFaceElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'font-face';\n this.ascent = this.getAttribute('ascent').getNumber();\n this.descent = this.getAttribute('descent').getNumber();\n this.unitsPerEm = this.getAttribute('units-per-em').getNumber();\n }\n\n}\n\nclass MissingGlyphElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'missing-glyph';\n this.horizAdvX = 0;\n }\n\n}\n\nclass TRefElement extends TextElement {\n constructor() {\n super(...arguments);\n this.type = 'tref';\n }\n\n getText() {\n var element = this.getHrefAttribute().getDefinition();\n\n if (element) {\n var firstChild = element.children[0];\n\n if (firstChild) {\n return firstChild.getText();\n }\n }\n\n return '';\n }\n\n}\n\nclass AElement extends TextElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'a';\n var {\n childNodes\n } = node;\n var firstChild = childNodes[0];\n var hasText = childNodes.length > 0 && Array.from(childNodes).every(node => node.nodeType === 3);\n this.hasText = hasText;\n this.text = hasText ? this.getTextFromNode(firstChild) : '';\n }\n\n getText() {\n return this.text;\n }\n\n renderChildren(ctx) {\n if (this.hasText) {\n // render as text element\n super.renderChildren(ctx);\n var {\n document,\n x,\n y\n } = this;\n var {\n mouse\n } = document.screen;\n var fontSize = new Property(document, 'fontSize', Font.parse(document.ctx.font).fontSize); // Do not calc bounding box if mouse is not working.\n\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(this, new BoundingBox(x, y - fontSize.getPixels('y'), x + this.measureText(ctx), y));\n }\n } else if (this.children.length > 0) {\n // render as temporary group\n var g = new GElement(this.document, null);\n g.children = this.children;\n g.parent = this;\n g.render(ctx);\n }\n }\n\n onClick() {\n var {\n window\n } = this.document;\n\n if (window) {\n window.open(this.getHrefAttribute().getString());\n }\n }\n\n onMouseMove() {\n var ctx = this.document.ctx;\n ctx.canvas.style.cursor = 'pointer';\n }\n\n}\n\nfunction ownKeys$2(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread$2(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$2(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$2(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nclass TextPathElement extends TextElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'textPath';\n this.textWidth = 0;\n this.textHeight = 0;\n this.pathLength = -1;\n this.glyphInfo = null;\n this.letterSpacingCache = [];\n this.measuresCache = new Map([['', 0]]);\n var pathElement = this.getHrefAttribute().getDefinition();\n this.text = this.getTextFromNode();\n this.dataArray = this.parsePathData(pathElement);\n }\n\n getText() {\n return this.text;\n }\n\n path(ctx) {\n var {\n dataArray\n } = this;\n\n if (ctx) {\n ctx.beginPath();\n }\n\n dataArray.forEach(_ref => {\n var {\n type,\n points\n } = _ref;\n\n switch (type) {\n case PathParser.LINE_TO:\n if (ctx) {\n ctx.lineTo(points[0], points[1]);\n }\n\n break;\n\n case PathParser.MOVE_TO:\n if (ctx) {\n ctx.moveTo(points[0], points[1]);\n }\n\n break;\n\n case PathParser.CURVE_TO:\n if (ctx) {\n ctx.bezierCurveTo(points[0], points[1], points[2], points[3], points[4], points[5]);\n }\n\n break;\n\n case PathParser.QUAD_TO:\n if (ctx) {\n ctx.quadraticCurveTo(points[0], points[1], points[2], points[3]);\n }\n\n break;\n\n case PathParser.ARC:\n {\n var [cx, cy, rx, ry, theta, dTheta, psi, fs] = points;\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n\n if (ctx) {\n ctx.translate(cx, cy);\n ctx.rotate(psi);\n ctx.scale(scaleX, scaleY);\n ctx.arc(0, 0, r, theta, theta + dTheta, Boolean(1 - fs));\n ctx.scale(1 / scaleX, 1 / scaleY);\n ctx.rotate(-psi);\n ctx.translate(-cx, -cy);\n }\n\n break;\n }\n\n case PathParser.CLOSE_PATH:\n if (ctx) {\n ctx.closePath();\n }\n\n break;\n }\n });\n }\n\n renderChildren(ctx) {\n this.setTextData(ctx);\n ctx.save();\n var textDecoration = this.parent.getStyle('text-decoration').getString();\n var fontSize = this.getFontSize();\n var {\n glyphInfo\n } = this;\n var fill = ctx.fillStyle;\n\n if (textDecoration === 'underline') {\n ctx.beginPath();\n }\n\n glyphInfo.forEach((glyph, i) => {\n var {\n p0,\n p1,\n rotation,\n text: partialText\n } = glyph;\n ctx.save();\n ctx.translate(p0.x, p0.y);\n ctx.rotate(rotation);\n\n if (ctx.fillStyle) {\n ctx.fillText(partialText, 0, 0);\n }\n\n if (ctx.strokeStyle) {\n ctx.strokeText(partialText, 0, 0);\n }\n\n ctx.restore();\n\n if (textDecoration === 'underline') {\n if (i === 0) {\n ctx.moveTo(p0.x, p0.y + fontSize / 8);\n }\n\n ctx.lineTo(p1.x, p1.y + fontSize / 5);\n } // // To assist with debugging visually, uncomment following\n //\n // ctx.beginPath();\n // if (i % 2)\n // \tctx.strokeStyle = 'red';\n // else\n // \tctx.strokeStyle = 'green';\n // ctx.moveTo(p0.x, p0.y);\n // ctx.lineTo(p1.x, p1.y);\n // ctx.stroke();\n // ctx.closePath();\n\n });\n\n if (textDecoration === 'underline') {\n ctx.lineWidth = fontSize / 20;\n ctx.strokeStyle = fill;\n ctx.stroke();\n ctx.closePath();\n }\n\n ctx.restore();\n }\n\n getLetterSpacingAt() {\n var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return this.letterSpacingCache[idx] || 0;\n }\n\n findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, inputOffset, dy, c, charI) {\n var offset = inputOffset;\n var glyphWidth = this.measureText(ctx, c);\n\n if (c === ' ' && anchor === 'justify' && textFullWidth < fullPathWidth) {\n glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber;\n }\n\n if (charI > -1) {\n offset += this.getLetterSpacingAt(charI);\n }\n\n var splineStep = this.textHeight / 20;\n var p0 = this.getEquidistantPointOnPath(offset, splineStep, 0);\n var p1 = this.getEquidistantPointOnPath(offset + glyphWidth, splineStep, 0);\n var segment = {\n p0,\n p1\n };\n var rotation = p0 && p1 ? Math.atan2(p1.y - p0.y, p1.x - p0.x) : 0;\n\n if (dy) {\n var dyX = Math.cos(Math.PI / 2 + rotation) * dy;\n var dyY = Math.cos(-rotation) * dy;\n segment.p0 = _objectSpread$2(_objectSpread$2({}, p0), {}, {\n x: p0.x + dyX,\n y: p0.y + dyY\n });\n segment.p1 = _objectSpread$2(_objectSpread$2({}, p1), {}, {\n x: p1.x + dyX,\n y: p1.y + dyY\n });\n }\n\n offset += glyphWidth;\n return {\n offset,\n segment,\n rotation\n };\n }\n\n measureText(ctx, text) {\n var {\n measuresCache\n } = this;\n var targetText = text || this.getText();\n\n if (measuresCache.has(targetText)) {\n return measuresCache.get(targetText);\n }\n\n var measure = this.measureTargetText(ctx, targetText);\n measuresCache.set(targetText, measure);\n return measure;\n } // This method supposes what all custom fonts already loaded.\n // If some font will be loaded after this method call, <textPath> will not be rendered correctly.\n // You need to call this method manually to update glyphs cache.\n\n\n setTextData(ctx) {\n if (this.glyphInfo) {\n return;\n }\n\n var renderText = this.getText();\n var chars = renderText.split('');\n var spacesNumber = renderText.split(' ').length - 1;\n var dx = this.parent.getAttribute('dx').split().map(_ => _.getPixels('x'));\n var dy = this.parent.getAttribute('dy').getPixels('y');\n var anchor = this.parent.getStyle('text-anchor').getString('start');\n var thisSpacing = this.getStyle('letter-spacing');\n var parentSpacing = this.parent.getStyle('letter-spacing');\n var letterSpacing = 0;\n\n if (!thisSpacing.hasValue() || thisSpacing.getValue() === 'inherit') {\n letterSpacing = parentSpacing.getPixels();\n } else if (thisSpacing.hasValue()) {\n if (thisSpacing.getValue() !== 'initial' && thisSpacing.getValue() !== 'unset') {\n letterSpacing = thisSpacing.getPixels();\n }\n } // fill letter-spacing cache\n\n\n var letterSpacingCache = [];\n var textLen = renderText.length;\n this.letterSpacingCache = letterSpacingCache;\n\n for (var i = 0; i < textLen; i++) {\n letterSpacingCache.push(typeof dx[i] !== 'undefined' ? dx[i] : letterSpacing);\n }\n\n var dxSum = letterSpacingCache.reduce((acc, cur, i) => i === 0 ? 0 : acc + cur || 0, 0);\n var textWidth = this.measureText(ctx);\n var textFullWidth = Math.max(textWidth + dxSum, 0);\n this.textWidth = textWidth;\n this.textHeight = this.getFontSize();\n this.glyphInfo = [];\n var fullPathWidth = this.getPathLength();\n var startOffset = this.getStyle('startOffset').getNumber(0) * fullPathWidth;\n var offset = 0;\n\n if (anchor === 'middle' || anchor === 'center') {\n offset = -textFullWidth / 2;\n }\n\n if (anchor === 'end' || anchor === 'right') {\n offset = -textFullWidth;\n }\n\n offset += startOffset;\n chars.forEach((char, i) => {\n // Find such segment what distance between p0 and p1 is approx. width of glyph\n var {\n offset: nextOffset,\n segment,\n rotation\n } = this.findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, offset, dy, char, i);\n offset = nextOffset;\n\n if (!segment.p0 || !segment.p1) {\n return;\n } // const width = this.getLineLength(\n // \tsegment.p0.x,\n // \tsegment.p0.y,\n // \tsegment.p1.x,\n // \tsegment.p1.y\n // );\n // Note: Since glyphs are rendered one at a time, any kerning pair data built into the font will not be used.\n // Can foresee having a rough pair table built in that the developer can override as needed.\n // Or use \"dx\" attribute of the <text> node as a naive replacement\n // const kern = 0;\n // placeholder for future implementation\n // const midpoint = this.getPointOnLine(\n // \tkern + width / 2.0,\n // \tsegment.p0.x, segment.p0.y, segment.p1.x, segment.p1.y\n // );\n\n\n this.glyphInfo.push({\n // transposeX: midpoint.x,\n // transposeY: midpoint.y,\n text: chars[i],\n p0: segment.p0,\n p1: segment.p1,\n rotation\n });\n });\n }\n\n parsePathData(path) {\n this.pathLength = -1; // reset path length\n\n if (!path) {\n return [];\n }\n\n var pathCommands = [];\n var {\n pathParser\n } = path;\n pathParser.reset(); // convert l, H, h, V, and v to L\n\n while (!pathParser.isEnd()) {\n var {\n current\n } = pathParser;\n var startX = current ? current.x : 0;\n var startY = current ? current.y : 0;\n var command = pathParser.next();\n var nextCommandType = command.type;\n var points = [];\n\n switch (command.type) {\n case PathParser.MOVE_TO:\n this.pathM(pathParser, points);\n break;\n\n case PathParser.LINE_TO:\n nextCommandType = this.pathL(pathParser, points);\n break;\n\n case PathParser.HORIZ_LINE_TO:\n nextCommandType = this.pathH(pathParser, points);\n break;\n\n case PathParser.VERT_LINE_TO:\n nextCommandType = this.pathV(pathParser, points);\n break;\n\n case PathParser.CURVE_TO:\n this.pathC(pathParser, points);\n break;\n\n case PathParser.SMOOTH_CURVE_TO:\n nextCommandType = this.pathS(pathParser, points);\n break;\n\n case PathParser.QUAD_TO:\n this.pathQ(pathParser, points);\n break;\n\n case PathParser.SMOOTH_QUAD_TO:\n nextCommandType = this.pathT(pathParser, points);\n break;\n\n case PathParser.ARC:\n points = this.pathA(pathParser);\n break;\n\n case PathParser.CLOSE_PATH:\n PathElement.pathZ(pathParser);\n break;\n }\n\n if (command.type !== PathParser.CLOSE_PATH) {\n pathCommands.push({\n type: nextCommandType,\n points,\n start: {\n x: startX,\n y: startY\n },\n pathLength: this.calcLength(startX, startY, nextCommandType, points)\n });\n } else {\n pathCommands.push({\n type: PathParser.CLOSE_PATH,\n points: [],\n pathLength: 0\n });\n }\n }\n\n return pathCommands;\n }\n\n pathM(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathM(pathParser).point;\n points.push(x, y);\n }\n\n pathL(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathL(pathParser).point;\n points.push(x, y);\n return PathParser.LINE_TO;\n }\n\n pathH(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathH(pathParser).point;\n points.push(x, y);\n return PathParser.LINE_TO;\n }\n\n pathV(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathV(pathParser).point;\n points.push(x, y);\n return PathParser.LINE_TO;\n }\n\n pathC(pathParser, points) {\n var {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser);\n points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n\n pathS(pathParser, points) {\n var {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser);\n points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n return PathParser.CURVE_TO;\n }\n\n pathQ(pathParser, points) {\n var {\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser);\n points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n\n pathT(pathParser, points) {\n var {\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser);\n points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n return PathParser.QUAD_TO;\n }\n\n pathA(pathParser) {\n var {\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n } = PathElement.pathA(pathParser);\n\n if (sweepFlag === 0 && ad > 0) {\n ad -= 2 * Math.PI;\n }\n\n if (sweepFlag === 1 && ad < 0) {\n ad += 2 * Math.PI;\n }\n\n return [centp.x, centp.y, rX, rY, a1, ad, xAxisRotation, sweepFlag];\n }\n\n calcLength(x, y, commandType, points) {\n var len = 0;\n var p1 = null;\n var p2 = null;\n var t = 0;\n\n switch (commandType) {\n case PathParser.LINE_TO:\n return this.getLineLength(x, y, points[0], points[1]);\n\n case PathParser.CURVE_TO:\n // Approximates by breaking curve into 100 line segments\n len = 0.0;\n p1 = this.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n\n return len;\n\n case PathParser.QUAD_TO:\n // Approximates by breaking curve into 100 line segments\n len = 0.0;\n p1 = this.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]);\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n\n return len;\n\n case PathParser.ARC:\n {\n // Approximates by breaking curve into line segments\n len = 0.0;\n var start = points[4]; // 4 = theta\n\n var dTheta = points[5]; // 5 = dTheta\n\n var end = points[4] + dTheta;\n var inc = Math.PI / 180.0; // 1 degree resolution\n\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end);\n } // Note: for purpose of calculating arc length, not going to worry about rotating X-axis by angle psi\n\n\n p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0);\n\n if (dTheta < 0) {\n // clockwise\n for (t = start - inc; t > end; t -= inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n } else {\n // counter-clockwise\n for (t = start + inc; t < end; t += inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n }\n\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n return len;\n }\n }\n\n return 0;\n }\n\n getPointOnLine(dist, p1x, p1y, p2x, p2y) {\n var fromX = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : p1x;\n var fromY = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : p1y;\n var m = (p2y - p1y) / (p2x - p1x + PSEUDO_ZERO);\n var run = Math.sqrt(dist * dist / (1 + m * m));\n\n if (p2x < p1x) {\n run *= -1;\n }\n\n var rise = m * run;\n var pt = null;\n\n if (p2x === p1x) {\n // vertical line\n pt = {\n x: fromX,\n y: fromY + rise\n };\n } else if ((fromY - p1y) / (fromX - p1x + PSEUDO_ZERO) === m) {\n pt = {\n x: fromX + run,\n y: fromY + rise\n };\n } else {\n var ix = 0;\n var iy = 0;\n var len = this.getLineLength(p1x, p1y, p2x, p2y);\n\n if (len < PSEUDO_ZERO) {\n return null;\n }\n\n var u = (fromX - p1x) * (p2x - p1x) + (fromY - p1y) * (p2y - p1y);\n u /= len * len;\n ix = p1x + u * (p2x - p1x);\n iy = p1y + u * (p2y - p1y);\n var pRise = this.getLineLength(fromX, fromY, ix, iy);\n var pRun = Math.sqrt(dist * dist - pRise * pRise);\n run = Math.sqrt(pRun * pRun / (1 + m * m));\n\n if (p2x < p1x) {\n run *= -1;\n }\n\n rise = m * run;\n pt = {\n x: ix + run,\n y: iy + rise\n };\n }\n\n return pt;\n }\n\n getPointOnPath(distance) {\n var fullLen = this.getPathLength();\n var cumulativePathLength = 0;\n var p = null;\n\n if (distance < -0.00005 || distance - 0.00005 > fullLen) {\n return null;\n }\n\n var {\n dataArray\n } = this;\n\n for (var command of dataArray) {\n if (command && (command.pathLength < 0.00005 || cumulativePathLength + command.pathLength + 0.00005 < distance)) {\n cumulativePathLength += command.pathLength;\n continue;\n }\n\n var delta = distance - cumulativePathLength;\n var currentT = 0;\n\n switch (command.type) {\n case PathParser.LINE_TO:\n p = this.getPointOnLine(delta, command.start.x, command.start.y, command.points[0], command.points[1], command.start.x, command.start.y);\n break;\n\n case PathParser.ARC:\n {\n var start = command.points[4]; // 4 = theta\n\n var dTheta = command.points[5]; // 5 = dTheta\n\n var end = command.points[4] + dTheta;\n currentT = start + delta / command.pathLength * dTheta;\n\n if (dTheta < 0 && currentT < end || dTheta >= 0 && currentT > end) {\n break;\n }\n\n p = this.getPointOnEllipticalArc(command.points[0], command.points[1], command.points[2], command.points[3], currentT, command.points[6]);\n break;\n }\n\n case PathParser.CURVE_TO:\n currentT = delta / command.pathLength;\n\n if (currentT > 1) {\n currentT = 1;\n }\n\n p = this.getPointOnCubicBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3], command.points[4], command.points[5]);\n break;\n\n case PathParser.QUAD_TO:\n currentT = delta / command.pathLength;\n\n if (currentT > 1) {\n currentT = 1;\n }\n\n p = this.getPointOnQuadraticBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3]);\n break;\n }\n\n if (p) {\n return p;\n }\n\n break;\n }\n\n return null;\n }\n\n getLineLength(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n\n getPathLength() {\n if (this.pathLength === -1) {\n this.pathLength = this.dataArray.reduce((length, command) => command.pathLength > 0 ? length + command.pathLength : length, 0);\n }\n\n return this.pathLength;\n }\n\n getPointOnCubicBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n var x = p4x * CB1(pct) + p3x * CB2(pct) + p2x * CB3(pct) + p1x * CB4(pct);\n var y = p4y * CB1(pct) + p3y * CB2(pct) + p2y * CB3(pct) + p1y * CB4(pct);\n return {\n x,\n y\n };\n }\n\n getPointOnQuadraticBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y) {\n var x = p3x * QB1(pct) + p2x * QB2(pct) + p1x * QB3(pct);\n var y = p3y * QB1(pct) + p2y * QB2(pct) + p1y * QB3(pct);\n return {\n x,\n y\n };\n }\n\n getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) {\n var cosPsi = Math.cos(psi);\n var sinPsi = Math.sin(psi);\n var pt = {\n x: rx * Math.cos(theta),\n y: ry * Math.sin(theta)\n };\n return {\n x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n y: cy + (pt.x * sinPsi + pt.y * cosPsi)\n };\n } // TODO need some optimisations. possibly build cache only for curved segments?\n\n\n buildEquidistantCache(inputStep, inputPrecision) {\n var fullLen = this.getPathLength();\n var precision = inputPrecision || 0.25; // accuracy vs performance\n\n var step = inputStep || fullLen / 100;\n\n if (!this.equidistantCache || this.equidistantCache.step !== step || this.equidistantCache.precision !== precision) {\n // Prepare cache\n this.equidistantCache = {\n step,\n precision,\n points: []\n }; // Calculate points\n\n var s = 0;\n\n for (var l = 0; l <= fullLen; l += precision) {\n var p0 = this.getPointOnPath(l);\n var p1 = this.getPointOnPath(l + precision);\n\n if (!p0 || !p1) {\n continue;\n }\n\n s += this.getLineLength(p0.x, p0.y, p1.x, p1.y);\n\n if (s >= step) {\n this.equidistantCache.points.push({\n x: p0.x,\n y: p0.y,\n distance: l\n });\n s -= step;\n }\n }\n }\n }\n\n getEquidistantPointOnPath(targetDistance, step, precision) {\n this.buildEquidistantCache(step, precision);\n\n if (targetDistance < 0 || targetDistance - this.getPathLength() > 0.00005) {\n return null;\n }\n\n var idx = Math.round(targetDistance / this.getPathLength() * (this.equidistantCache.points.length - 1));\n return this.equidistantCache.points[idx] || null;\n }\n\n}\n\nvar dataUriRegex = /^\\s*data:(([^/,;]+\\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i;\n\nclass ImageElement extends RenderedElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'image';\n this.loaded = false;\n var href = this.getHrefAttribute().getString();\n\n if (!href) {\n return;\n }\n\n var isSvg = href.endsWith('.svg') || /^\\s*data:image\\/svg\\+xml/i.test(href);\n document.images.push(this);\n\n if (!isSvg) {\n void this.loadImage(href);\n } else {\n void this.loadSvg(href);\n }\n\n this.isSvg = isSvg;\n }\n\n loadImage(href) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n try {\n var image = yield _this.document.createImage(href);\n _this.image = image;\n } catch (err) {\n console.error(\"Error while loading image \\\"\".concat(href, \"\\\":\"), err);\n }\n\n _this.loaded = true;\n })();\n }\n\n loadSvg(href) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var match = dataUriRegex.exec(href);\n\n if (match) {\n var data = match[5];\n\n if (match[4] === 'base64') {\n _this2.image = atob(data);\n } else {\n _this2.image = decodeURIComponent(data);\n }\n } else {\n try {\n var response = yield _this2.document.fetch(href);\n var svg = yield response.text();\n _this2.image = svg;\n } catch (err) {\n console.error(\"Error while loading image \\\"\".concat(href, \"\\\":\"), err);\n }\n }\n\n _this2.loaded = true;\n })();\n }\n\n renderChildren(ctx) {\n var {\n document,\n image,\n loaded\n } = this;\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width').getPixels('x');\n var height = this.getStyle('height').getPixels('y');\n\n if (!loaded || !image || !width || !height) {\n return;\n }\n\n ctx.save();\n ctx.translate(x, y);\n\n if (this.isSvg) {\n var subDocument = document.canvg.forkString(ctx, this.image, {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true,\n ignoreClear: true,\n offsetX: 0,\n offsetY: 0,\n scaleWidth: width,\n scaleHeight: height\n });\n subDocument.document.documentElement.parent = this;\n void subDocument.render();\n } else {\n var _image = this.image;\n document.setViewBox({\n ctx,\n aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n width,\n desiredWidth: _image.width,\n height,\n desiredHeight: _image.height\n });\n\n if (this.loaded) {\n if (typeof _image.complete === 'undefined' || _image.complete) {\n ctx.drawImage(_image, 0, 0);\n }\n }\n }\n\n ctx.restore();\n }\n\n getBoundingBox() {\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width').getPixels('x');\n var height = this.getStyle('height').getPixels('y');\n return new BoundingBox(x, y, x + width, y + height);\n }\n\n}\n\nclass SymbolElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'symbol';\n }\n\n render(_) {// NO RENDER\n }\n\n}\n\nclass SVGFontLoader {\n constructor(document) {\n this.document = document;\n this.loaded = false;\n document.fonts.push(this);\n }\n\n load(fontFamily, url) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n try {\n var {\n document\n } = _this;\n var svgDocument = yield document.canvg.parser.load(url);\n var fonts = svgDocument.getElementsByTagName('font');\n Array.from(fonts).forEach(fontNode => {\n var font = document.createElement(fontNode);\n document.definitions[fontFamily] = font;\n });\n } catch (err) {\n console.error(\"Error while loading font \\\"\".concat(url, \"\\\":\"), err);\n }\n\n _this.loaded = true;\n })();\n }\n\n}\n\nclass StyleElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'style';\n var css = compressSpaces(Array.from(node.childNodes) // NEED TEST\n .map(_ => _.textContent).join('').replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, '') // remove comments\n .replace(/@import.*;/g, '') // remove imports\n );\n var cssDefs = css.split('}');\n cssDefs.forEach(_ => {\n var def = _.trim();\n\n if (!def) {\n return;\n }\n\n var cssParts = def.split('{');\n var cssClasses = cssParts[0].split(',');\n var cssProps = cssParts[1].split(';');\n cssClasses.forEach(_ => {\n var cssClass = _.trim();\n\n if (!cssClass) {\n return;\n }\n\n var props = document.styles[cssClass] || {};\n cssProps.forEach(cssProp => {\n var prop = cssProp.indexOf(':');\n var name = cssProp.substr(0, prop).trim();\n var value = cssProp.substr(prop + 1, cssProp.length - prop).trim();\n\n if (name && value) {\n props[name] = new Property(document, name, value);\n }\n });\n document.styles[cssClass] = props;\n document.stylesSpecificity[cssClass] = getSelectorSpecificity(cssClass);\n\n if (cssClass === '@font-face') {\n // && !nodeEnv\n var fontFamily = props['font-family'].getString().replace(/\"|'/g, '');\n var srcs = props.src.getString().split(',');\n srcs.forEach(src => {\n if (src.indexOf('format(\"svg\")') > 0) {\n var url = parseExternalUrl(src);\n\n if (url) {\n void new SVGFontLoader(document).load(fontFamily, url);\n }\n }\n });\n }\n });\n });\n }\n\n}\n\nStyleElement.parseExternalUrl = parseExternalUrl;\n\nclass UseElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'use';\n }\n\n setContext(ctx) {\n super.setContext(ctx);\n var xAttr = this.getAttribute('x');\n var yAttr = this.getAttribute('y');\n\n if (xAttr.hasValue()) {\n ctx.translate(xAttr.getPixels('x'), 0);\n }\n\n if (yAttr.hasValue()) {\n ctx.translate(0, yAttr.getPixels('y'));\n }\n }\n\n path(ctx) {\n var {\n element\n } = this;\n\n if (element) {\n element.path(ctx);\n }\n }\n\n renderChildren(ctx) {\n var {\n document,\n element\n } = this;\n\n if (element) {\n var tempSvg = element;\n\n if (element.type === 'symbol') {\n // render me using a temporary svg element in symbol cases (http://www.w3.org/TR/SVG/struct.html#UseElement)\n tempSvg = new SVGElement(document, null);\n tempSvg.attributes.viewBox = new Property(document, 'viewBox', element.getAttribute('viewBox').getString());\n tempSvg.attributes.preserveAspectRatio = new Property(document, 'preserveAspectRatio', element.getAttribute('preserveAspectRatio').getString());\n tempSvg.attributes.overflow = new Property(document, 'overflow', element.getAttribute('overflow').getString());\n tempSvg.children = element.children; // element is still the parent of the children\n\n element.styles.opacity = new Property(document, 'opacity', this.calculateOpacity());\n }\n\n if (tempSvg.type === 'svg') {\n var widthStyle = this.getStyle('width', false, true);\n var heightStyle = this.getStyle('height', false, true); // if symbol or svg, inherit width/height from me\n\n if (widthStyle.hasValue()) {\n tempSvg.attributes.width = new Property(document, 'width', widthStyle.getString());\n }\n\n if (heightStyle.hasValue()) {\n tempSvg.attributes.height = new Property(document, 'height', heightStyle.getString());\n }\n }\n\n var oldParent = tempSvg.parent;\n tempSvg.parent = this;\n tempSvg.render(ctx);\n tempSvg.parent = oldParent;\n }\n }\n\n getBoundingBox(ctx) {\n var {\n element\n } = this;\n\n if (element) {\n return element.getBoundingBox(ctx);\n }\n\n return null;\n }\n\n elementTransform() {\n var {\n document,\n element\n } = this;\n return Transform.fromElement(document, element);\n }\n\n get element() {\n if (!this.cachedElement) {\n this.cachedElement = this.getHrefAttribute().getDefinition();\n }\n\n return this.cachedElement;\n }\n\n}\n\nfunction imGet(img, x, y, width, _height, rgba) {\n return img[y * width * 4 + x * 4 + rgba];\n}\n\nfunction imSet(img, x, y, width, _height, rgba, val) {\n img[y * width * 4 + x * 4 + rgba] = val;\n}\n\nfunction m(matrix, i, v) {\n var mi = matrix[i];\n return mi * v;\n}\n\nfunction c(a, m1, m2, m3) {\n return m1 + Math.cos(a) * m2 + Math.sin(a) * m3;\n}\n\nclass FeColorMatrixElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'feColorMatrix';\n var matrix = toNumbers(this.getAttribute('values').getString());\n\n switch (this.getAttribute('type').getString('matrix')) {\n // http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement\n case 'saturate':\n {\n var s = matrix[0];\n /* eslint-disable array-element-newline */\n\n matrix = [0.213 + 0.787 * s, 0.715 - 0.715 * s, 0.072 - 0.072 * s, 0, 0, 0.213 - 0.213 * s, 0.715 + 0.285 * s, 0.072 - 0.072 * s, 0, 0, 0.213 - 0.213 * s, 0.715 - 0.715 * s, 0.072 + 0.928 * s, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1];\n /* eslint-enable array-element-newline */\n\n break;\n }\n\n case 'hueRotate':\n {\n var a = matrix[0] * Math.PI / 180.0;\n /* eslint-disable array-element-newline */\n\n matrix = [c(a, 0.213, 0.787, -0.213), c(a, 0.715, -0.715, -0.715), c(a, 0.072, -0.072, 0.928), 0, 0, c(a, 0.213, -0.213, 0.143), c(a, 0.715, 0.285, 0.140), c(a, 0.072, -0.072, -0.283), 0, 0, c(a, 0.213, -0.213, -0.787), c(a, 0.715, -0.715, 0.715), c(a, 0.072, 0.928, 0.072), 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1];\n /* eslint-enable array-element-newline */\n\n break;\n }\n\n case 'luminanceToAlpha':\n /* eslint-disable array-element-newline */\n matrix = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2125, 0.7154, 0.0721, 0, 0, 0, 0, 0, 0, 1];\n /* eslint-enable array-element-newline */\n\n break;\n }\n\n this.matrix = matrix;\n this.includeOpacity = this.getAttribute('includeOpacity').hasValue();\n }\n\n apply(ctx, _x, _y, width, height) {\n // assuming x==0 && y==0 for now\n var {\n includeOpacity,\n matrix\n } = this;\n var srcData = ctx.getImageData(0, 0, width, height);\n\n for (var y = 0; y < height; y++) {\n for (var x = 0; x < width; x++) {\n var r = imGet(srcData.data, x, y, width, height, 0);\n var g = imGet(srcData.data, x, y, width, height, 1);\n var b = imGet(srcData.data, x, y, width, height, 2);\n var a = imGet(srcData.data, x, y, width, height, 3);\n var nr = m(matrix, 0, r) + m(matrix, 1, g) + m(matrix, 2, b) + m(matrix, 3, a) + m(matrix, 4, 1);\n var ng = m(matrix, 5, r) + m(matrix, 6, g) + m(matrix, 7, b) + m(matrix, 8, a) + m(matrix, 9, 1);\n var nb = m(matrix, 10, r) + m(matrix, 11, g) + m(matrix, 12, b) + m(matrix, 13, a) + m(matrix, 14, 1);\n var na = m(matrix, 15, r) + m(matrix, 16, g) + m(matrix, 17, b) + m(matrix, 18, a) + m(matrix, 19, 1);\n\n if (includeOpacity) {\n nr = 0;\n ng = 0;\n nb = 0;\n na *= a / 255;\n }\n\n imSet(srcData.data, x, y, width, height, 0, nr);\n imSet(srcData.data, x, y, width, height, 1, ng);\n imSet(srcData.data, x, y, width, height, 2, nb);\n imSet(srcData.data, x, y, width, height, 3, na);\n }\n }\n\n ctx.clearRect(0, 0, width, height);\n ctx.putImageData(srcData, 0, 0);\n }\n\n}\n\nclass MaskElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'mask';\n }\n\n apply(ctx, element) {\n var {\n document\n } = this; // render as temp svg\n\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width').getPixels('x');\n var height = this.getStyle('height').getPixels('y');\n\n if (!width && !height) {\n var boundingBox = new BoundingBox();\n this.children.forEach(child => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx));\n });\n x = Math.floor(boundingBox.x1);\n y = Math.floor(boundingBox.y1);\n width = Math.floor(boundingBox.width);\n height = Math.floor(boundingBox.height);\n }\n\n var ignoredStyles = this.removeStyles(element, MaskElement.ignoreStyles);\n var maskCanvas = document.createCanvas(x + width, y + height);\n var maskCtx = maskCanvas.getContext('2d');\n document.screen.setDefaults(maskCtx);\n this.renderChildren(maskCtx); // convert mask to alpha with a fake node\n // TODO: refactor out apply from feColorMatrix\n\n new FeColorMatrixElement(document, {\n nodeType: 1,\n childNodes: [],\n attributes: [{\n nodeName: 'type',\n value: 'luminanceToAlpha'\n }, {\n nodeName: 'includeOpacity',\n value: 'true'\n }]\n }).apply(maskCtx, 0, 0, x + width, y + height);\n var tmpCanvas = document.createCanvas(x + width, y + height);\n var tmpCtx = tmpCanvas.getContext('2d');\n document.screen.setDefaults(tmpCtx);\n element.render(tmpCtx);\n tmpCtx.globalCompositeOperation = 'destination-in';\n tmpCtx.fillStyle = maskCtx.createPattern(maskCanvas, 'no-repeat');\n tmpCtx.fillRect(0, 0, x + width, y + height);\n ctx.fillStyle = tmpCtx.createPattern(tmpCanvas, 'no-repeat');\n ctx.fillRect(0, 0, x + width, y + height); // reassign mask\n\n this.restoreStyles(element, ignoredStyles);\n }\n\n render(_) {// NO RENDER\n }\n\n}\n\nMaskElement.ignoreStyles = ['mask', 'transform', 'clip-path'];\n\nvar noop = () => {// NOOP\n};\n\nclass ClipPathElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'clipPath';\n }\n\n apply(ctx) {\n var {\n document\n } = this;\n var contextProto = Reflect.getPrototypeOf(ctx);\n var {\n beginPath,\n closePath\n } = ctx;\n\n if (contextProto) {\n contextProto.beginPath = noop;\n contextProto.closePath = noop;\n }\n\n Reflect.apply(beginPath, ctx, []);\n this.children.forEach(child => {\n if (typeof child.path === 'undefined') {\n return;\n }\n\n var transform = typeof child.elementTransform !== 'undefined' ? child.elementTransform() : null; // handle <use />\n\n if (!transform) {\n transform = Transform.fromElement(document, child);\n }\n\n if (transform) {\n transform.apply(ctx);\n }\n\n child.path(ctx);\n\n if (contextProto) {\n contextProto.closePath = closePath;\n }\n\n if (transform) {\n transform.unapply(ctx);\n }\n });\n Reflect.apply(closePath, ctx, []);\n ctx.clip();\n\n if (contextProto) {\n contextProto.beginPath = beginPath;\n contextProto.closePath = closePath;\n }\n }\n\n render(_) {// NO RENDER\n }\n\n}\n\nclass FilterElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'filter';\n }\n\n apply(ctx, element) {\n // render as temp svg\n var {\n document,\n children\n } = this;\n var boundingBox = element.getBoundingBox(ctx);\n\n if (!boundingBox) {\n return;\n }\n\n var px = 0;\n var py = 0;\n children.forEach(child => {\n var efd = child.extraFilterDistance || 0;\n px = Math.max(px, efd);\n py = Math.max(py, efd);\n });\n var width = Math.floor(boundingBox.width);\n var height = Math.floor(boundingBox.height);\n var tmpCanvasWidth = width + 2 * px;\n var tmpCanvasHeight = height + 2 * py;\n\n if (tmpCanvasWidth < 1 || tmpCanvasHeight < 1) {\n return;\n }\n\n var x = Math.floor(boundingBox.x);\n var y = Math.floor(boundingBox.y);\n var ignoredStyles = this.removeStyles(element, FilterElement.ignoreStyles);\n var tmpCanvas = document.createCanvas(tmpCanvasWidth, tmpCanvasHeight);\n var tmpCtx = tmpCanvas.getContext('2d');\n document.screen.setDefaults(tmpCtx);\n tmpCtx.translate(-x + px, -y + py);\n element.render(tmpCtx); // apply filters\n\n children.forEach(child => {\n if (typeof child.apply === 'function') {\n child.apply(tmpCtx, 0, 0, tmpCanvasWidth, tmpCanvasHeight);\n }\n }); // render on me\n\n ctx.drawImage(tmpCanvas, 0, 0, tmpCanvasWidth, tmpCanvasHeight, x - px, y - py, tmpCanvasWidth, tmpCanvasHeight);\n this.restoreStyles(element, ignoredStyles);\n }\n\n render(_) {// NO RENDER\n }\n\n}\n\nFilterElement.ignoreStyles = ['filter', 'transform', 'clip-path'];\n\nclass FeDropShadowElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'feDropShadow';\n this.addStylesFromStyleDefinition();\n }\n\n apply(_, _x, _y, _width, _height) {// TODO: implement\n }\n\n}\n\nclass FeMorphologyElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'feMorphology';\n }\n\n apply(_, _x, _y, _width, _height) {// TODO: implement\n }\n\n}\n\nclass FeCompositeElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'feComposite';\n }\n\n apply(_, _x, _y, _width, _height) {// TODO: implement\n }\n\n}\n\nclass FeGaussianBlurElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'feGaussianBlur';\n this.blurRadius = Math.floor(this.getAttribute('stdDeviation').getNumber());\n this.extraFilterDistance = this.blurRadius;\n }\n\n apply(ctx, x, y, width, height) {\n var {\n document,\n blurRadius\n } = this;\n var body = document.window ? document.window.document.body : null;\n var canvas = ctx.canvas; // StackBlur requires canvas be on document\n\n canvas.id = document.getUniqueId();\n\n if (body) {\n canvas.style.display = 'none';\n body.appendChild(canvas);\n }\n\n canvasRGBA(canvas, x, y, width, height, blurRadius);\n\n if (body) {\n body.removeChild(canvas);\n }\n }\n\n}\n\nclass TitleElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'title';\n }\n\n}\n\nclass DescElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'desc';\n }\n\n}\n\nvar elements = {\n 'svg': SVGElement,\n 'rect': RectElement,\n 'circle': CircleElement,\n 'ellipse': EllipseElement,\n 'line': LineElement,\n 'polyline': PolylineElement,\n 'polygon': PolygonElement,\n 'path': PathElement,\n 'pattern': PatternElement,\n 'marker': MarkerElement,\n 'defs': DefsElement,\n 'linearGradient': LinearGradientElement,\n 'radialGradient': RadialGradientElement,\n 'stop': StopElement,\n 'animate': AnimateElement,\n 'animateColor': AnimateColorElement,\n 'animateTransform': AnimateTransformElement,\n 'font': FontElement,\n 'font-face': FontFaceElement,\n 'missing-glyph': MissingGlyphElement,\n 'glyph': GlyphElement,\n 'text': TextElement,\n 'tspan': TSpanElement,\n 'tref': TRefElement,\n 'a': AElement,\n 'textPath': TextPathElement,\n 'image': ImageElement,\n 'g': GElement,\n 'symbol': SymbolElement,\n 'style': StyleElement,\n 'use': UseElement,\n 'mask': MaskElement,\n 'clipPath': ClipPathElement,\n 'filter': FilterElement,\n 'feDropShadow': FeDropShadowElement,\n 'feMorphology': FeMorphologyElement,\n 'feComposite': FeCompositeElement,\n 'feColorMatrix': FeColorMatrixElement,\n 'feGaussianBlur': FeGaussianBlurElement,\n 'title': TitleElement,\n 'desc': DescElement\n};\n\nfunction ownKeys$1(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread$1(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$1(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$1(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction createCanvas(width, height) {\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nfunction createImage(_x) {\n return _createImage.apply(this, arguments);\n}\n\nfunction _createImage() {\n _createImage = _asyncToGenerator(function* (src) {\n var anonymousCrossOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var image = document.createElement('img');\n\n if (anonymousCrossOrigin) {\n image.crossOrigin = 'Anonymous';\n }\n\n return new Promise((resolve, reject) => {\n image.onload = () => {\n resolve(image);\n };\n\n image.onerror = (_event, _source, _lineno, _colno, error) => {\n reject(error);\n };\n\n image.src = src;\n });\n });\n return _createImage.apply(this, arguments);\n}\n\nclass Document {\n constructor(canvg) {\n var {\n rootEmSize = 12,\n emSize = 12,\n createCanvas = Document.createCanvas,\n createImage = Document.createImage,\n anonymousCrossOrigin\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.canvg = canvg;\n this.definitions = {};\n this.styles = {};\n this.stylesSpecificity = {};\n this.images = [];\n this.fonts = [];\n this.emSizeStack = [];\n this.uniqueId = 0;\n this.screen = canvg.screen;\n this.rootEmSize = rootEmSize;\n this.emSize = emSize;\n this.createCanvas = createCanvas;\n this.createImage = this.bindCreateImage(createImage, anonymousCrossOrigin);\n this.screen.wait(this.isImagesLoaded.bind(this));\n this.screen.wait(this.isFontsLoaded.bind(this));\n }\n\n bindCreateImage(createImage, anonymousCrossOrigin) {\n if (typeof anonymousCrossOrigin === 'boolean') {\n return (source, forceAnonymousCrossOrigin) => createImage(source, typeof forceAnonymousCrossOrigin === 'boolean' ? forceAnonymousCrossOrigin : anonymousCrossOrigin);\n }\n\n return createImage;\n }\n\n get window() {\n return this.screen.window;\n }\n\n get fetch() {\n return this.screen.fetch;\n }\n\n get ctx() {\n return this.screen.ctx;\n }\n\n get emSize() {\n var {\n emSizeStack\n } = this;\n return emSizeStack[emSizeStack.length - 1];\n }\n\n set emSize(value) {\n var {\n emSizeStack\n } = this;\n emSizeStack.push(value);\n }\n\n popEmSize() {\n var {\n emSizeStack\n } = this;\n emSizeStack.pop();\n }\n\n getUniqueId() {\n return \"canvg\".concat(++this.uniqueId);\n }\n\n isImagesLoaded() {\n return this.images.every(_ => _.loaded);\n }\n\n isFontsLoaded() {\n return this.fonts.every(_ => _.loaded);\n }\n\n createDocumentElement(document) {\n var documentElement = this.createElement(document.documentElement);\n documentElement.root = true;\n documentElement.addStylesFromStyleDefinition();\n this.documentElement = documentElement;\n return documentElement;\n }\n\n createElement(node) {\n var elementType = node.nodeName.replace(/^[^:]+:/, '');\n var ElementType = Document.elementTypes[elementType];\n\n if (typeof ElementType !== 'undefined') {\n return new ElementType(this, node);\n }\n\n return new UnknownElement(this, node);\n }\n\n createTextNode(node) {\n return new TextNode(this, node);\n }\n\n setViewBox(config) {\n this.screen.setViewBox(_objectSpread$1({\n document: this\n }, config));\n }\n\n}\n\nDocument.createCanvas = createCanvas;\nDocument.createImage = createImage;\nDocument.elementTypes = elements;\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(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/**\r\n * SVG renderer on canvas.\r\n */\n\n\nclass Canvg {\n /**\r\n * Main constructor.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG Document.\r\n * @param options - Rendering options.\r\n */\n constructor(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.parser = new Parser(options);\n this.screen = new Screen(ctx, options);\n this.options = options;\n var document = new Document(this, options);\n var documentElement = document.createDocumentElement(svg);\n this.document = document;\n this.documentElement = documentElement;\n }\n /**\r\n * Create Canvg instance from SVG source string or URL.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string or URL.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n static from(ctx, svg) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var options = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : {};\n var parser = new Parser(options);\n var svgDocument = yield parser.parse(svg);\n return new Canvg(ctx, svgDocument, options);\n })();\n }\n /**\r\n * Create Canvg instance from SVG source string.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n static fromString(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var parser = new Parser(options);\n var svgDocument = parser.parseFromString(svg);\n return new Canvg(ctx, svgDocument, options);\n }\n /**\r\n * Create new Canvg instance with inherited options.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string or URL.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n fork(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return Canvg.from(ctx, svg, _objectSpread(_objectSpread({}, this.options), options));\n }\n /**\r\n * Create new Canvg instance with inherited options.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n forkString(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return Canvg.fromString(ctx, svg, _objectSpread(_objectSpread({}, this.options), options));\n }\n /**\r\n * Document is ready promise.\r\n * @returns Ready promise.\r\n */\n\n\n ready() {\n return this.screen.ready();\n }\n /**\r\n * Document is ready value.\r\n * @returns Is ready or not.\r\n */\n\n\n isReady() {\n return this.screen.isReady();\n }\n /**\r\n * Render only first frame, ignoring animations and mouse.\r\n * @param options - Rendering options.\r\n */\n\n\n render() {\n var _arguments2 = arguments,\n _this = this;\n\n return _asyncToGenerator(function* () {\n var options = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : {};\n\n _this.start(_objectSpread({\n enableRedraw: true,\n ignoreAnimation: true,\n ignoreMouse: true\n }, options));\n\n yield _this.ready();\n\n _this.stop();\n })();\n }\n /**\r\n * Start rendering.\r\n * @param options - Render options.\r\n */\n\n\n start() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var {\n documentElement,\n screen,\n options: baseOptions\n } = this;\n screen.start(documentElement, _objectSpread(_objectSpread({\n enableRedraw: true\n }, baseOptions), options));\n }\n /**\r\n * Stop rendering.\r\n */\n\n\n stop() {\n this.screen.stop();\n }\n /**\r\n * Resize SVG to fit in given size.\r\n * @param width\r\n * @param height\r\n * @param preserveAspectRatio\r\n */\n\n\n resize(width) {\n var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : width;\n var preserveAspectRatio = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this.documentElement.resize(width, height, preserveAspectRatio);\n }\n\n}\n\nexport { AElement, AnimateColorElement, AnimateElement, AnimateTransformElement, BoundingBox, CB1, CB2, CB3, CB4, Canvg, CircleElement, ClipPathElement, DefsElement, DescElement, Document, Element, EllipseElement, FeColorMatrixElement, FeCompositeElement, FeDropShadowElement, FeGaussianBlurElement, FeMorphologyElement, FilterElement, Font, FontElement, FontFaceElement, GElement, GlyphElement, GradientElement, ImageElement, LineElement, LinearGradientElement, MarkerElement, MaskElement, Matrix, MissingGlyphElement, Mouse, PSEUDO_ZERO, Parser, PathElement, PathParser, PatternElement, Point, PolygonElement, PolylineElement, Property, QB1, QB2, QB3, RadialGradientElement, RectElement, RenderedElement, Rotate, SVGElement, SVGFontLoader, Scale, Screen, Skew, SkewX, SkewY, StopElement, StyleElement, SymbolElement, TRefElement, TSpanElement, TextElement, TextPathElement, TitleElement, Transform, Translate, UnknownElement, UseElement, ViewPort, compressSpaces, Canvg as default, getSelectorSpecificity, normalizeAttributeName, normalizeColor, parseExternalUrl, index as presets, toNumbers, trimLeft, trimRight, vectorMagnitude, vectorsAngle, vectorsRatio };","map":{"version":3,"sources":["/Users/satish.ganga/Desktop/EKAM/ekamv3/skgangaEkam/node_modules/canvg/lib/index.es.js"],"names":["_asyncToGenerator","_defineProperty","requestAnimationFrame","RGBColor","SVGPathData","canvasRGBA","offscreen","DOMParser","DOMParserFallback","arguments","length","undefined","preset","window","ignoreAnimation","ignoreMouse","createCanvas","width","height","OffscreenCanvas","createImage","url","response","fetch","blob","img","createImageBitmap","Reflect","deleteProperty","node","_ref","canvas","loadImage","index","Object","freeze","__proto__","compressSpaces","str","replace","trimLeft","trimRight","toNumbers","matches","match","map","parseFloat","allUppercase","normalizeAttributeName","name","test","toLowerCase","parseExternalUrl","urlMatch","exec","normalizeColor","color","startsWith","rgbParts","normalizedColor","num","isFloat","String","Math","round","attributeRegex","idRegex","classRegex","pseudoElementRegex","pseudoClassWithBracketsRegex","pseudoClassRegex","elementRegex","findSelectorMatch","selector","regex","getSelectorSpecificity","specificity","currentSelector","delta","join","PSEUDO_ZERO","vectorMagnitude","v","sqrt","pow","vectorsRatio","u","vectorsAngle","acos","CB1","t","CB2","CB3","CB4","QB1","QB2","QB3","Property","constructor","document","value","isNormalizedColor","empty","split","separator","getString","trim","hasValue","zeroIsValue","isString","regexp","result","isUrlDefinition","isPixels","asString","endsWith","setValue","getValue","def","getNumber","n","getColor","getDpi","getRem","rootEmSize","getEm","emSize","getUnits","getPixels","axisOrIsFontSize","processPercent","axis","isFontSize","viewPort","screen","min","computeSize","max","getMilliseconds","getRadians","PI","getDefinition","definitions","getFillStyleDefinition","element","opacity","createGradient","ctx","createPattern","getHrefAttribute","patternTransform","getAttribute","getTextBaseline","textBaselineMapping","addOpacity","len","commas","i","ok","alpha","toRGBA","ViewPort","viewPorts","clear","setCurrent","push","removeCurrent","pop","getCurrent","d","Point","x","y","parse","point","defaultValue","parseScale","scale","parsePath","path","points","pathPoints","angleTo","atan2","applyTransform","transform","xp","yp","Mouse","working","events","eventElements","onClick","bind","onMouseMove","isWorking","start","onclick","onmousemove","stop","hasEvents","runEvents","style","cursor","forEach","run","parent","checkPath","_ref2","isPointInPath","checkBoundingBox","boundingBox","_ref3","isPointInBox","mapXY","offsetLeft","offsetTop","offsetParent","scrollX","scrollY","event","clientX","clientY","type","eventTarget","defaultWindow","defaultFetch$1","Screen","FRAMERATE","MAX_VIRTUAL_PIXELS","CLIENT_WIDTH","CLIENT_HEIGHT","mouse","animations","waits","frameDuration","isReadyLock","isFirstRender","intervalId","wait","checker","ready","readyPromise","Promise","resolve","isReady","every","_","resolveReady","setDefaults","strokeStyle","lineCap","lineJoin","miterLimit","setViewBox","aspectRatio","desiredWidth","desiredHeight","minX","minY","refX","refY","clip","clipX","clipY","cleanAspectRatio","aspectRatioAlign","aspectRatioMeetOrSlice","align","meetOrSlice","scaleX","scaleY","scaleMin","scaleMax","finalDesiredWidth","finalDesiredHeight","refXProp","refYProp","hasRefs","translate","scaledClipX","scaledClipY","beginPath","moveTo","lineTo","closePath","isMeetMinY","isSliceMaxY","isMeetMinX","isSliceMaxX","enableRedraw","ignoreDimensions","ignoreClear","forceRedraw","scaleWidth","scaleHeight","offsetX","offsetY","render","now","Date","then","tick","shouldUpdate","cancel","reduce","animation","update","widthStyle","getStyle","heightStyle","concat","cWidth","clientWidth","cHeight","clientHeight","viewBox","xRatio","yRatio","_widthStyle","isNaN","_heightStyle","transformStyle","clearRect","defaultFetch","DefaultDOMParser","Parser","resource","_this","parseFromString","load","xml","parser","checkDocument","err","parserError","getElementsByTagName","Error","textContent","_this2","text","Translate","apply","unapply","applyToPoint","Rotate","rotate","transformOrigin","angle","originX","originY","cx","cy","numbers","tx","ty","rad","cos","sin","Scale","scaleSize","Matrix","matrix","a","b","c","e","f","g","h","det","Skew","skew","SkewX","tan","SkewY","parseTransforms","parseTransform","Transform","transforms","data","TransformType","transformTypes","fromElement","transformOriginXProperty","transformOriginYProperty","skewX","skewY","Element","captureTextNodes","attributes","styles","stylesSpecificity","animationFrozen","animationFrozenValue","children","nodeType","Array","from","attribute","nodeName","addStylesFromStyleDefinition","id","childNodes","childNode","addChild","textNode","createTextNode","getText","createIfNotExists","attr","_attr","key","skipAncestors","parentStyle","_style","save","mask","applyEffects","filter","setContext","renderChildren","clearContext","restore","clipPathStyleProp","child","createElement","ignoreChildTypes","includes","matchesSelector","_node$getAttribute","styleClasses","call","some","styleClass","existingSpecificity","removeStyles","ignoreStyles","toRestore","styleProp","restoreStyles","isFirstChild","_this$parent","indexOf","UnknownElement","wrapFontFamily","fontFamily","trimmed","prepareFontFamily","process","prepareFontStyle","fontStyle","targetFontStyle","prepareFontWeight","fontWeight","targetFontWeight","Font","fontVariant","fontSize","inherit","inheritFont","font","parts","set","part","variants","weights","toString","BoundingBox","x1","Number","NaN","y1","x2","y2","addPoint","addX","addY","addBoundingBox","sumCubic","p0","p1","p2","p3","bezierCurveAdd","forX","b2ac","t1","t2","addBezierCurve","p0x","p0y","p1x","p1y","p2x","p2y","p3x","p3y","addQuadraticCurve","cp1x","cp1y","cp2x","cp2y","PathParser","control","current","command","commands","previousCommand","angles","reset","isEnd","next","getPoint","xProp","yProp","makeAbsolute","getAsControlPoint","getAsCurrentPoint","getReflectedControlPoint","CURVE_TO","SMOOTH_CURVE_TO","QUAD_TO","SMOOTH_QUAD_TO","ox","oy","relative","addMarker","priorTo","addMarkerAngle","getMarkerPoints","getMarkerAngles","j","RenderedElement","modifiedEmSizeStack","calculateOpacity","opacityStyle","fromMeasure","fillStyleProp","fillOpacityStyleProp","strokeStyleProp","strokeOpacityProp","fillStyle","_fillStyle","_fillStyle2","_strokeStyle","_strokeStyle2","strokeWidthStyleProp","newLineWidth","lineWidth","strokeLinecapStyleProp","strokeLinejoinStyleProp","strokeMiterlimitProp","strokeDasharrayStyleProp","strokeDashoffsetProp","gaps","setLineDash","webkitLineDash","mozDash","offset","lineDashOffset","webkitLineDashOffset","mozDashOffset","fontStyleProp","fontStyleStyleProp","fontVariantStyleProp","fontWeightStyleProp","fontSizeStyleProp","fontFamilyStyleProp","globalAlpha","popEmSize","PathElement","pathParser","MOVE_TO","pathM","LINE_TO","pathL","HORIZ_LINE_TO","pathH","VERT_LINE_TO","pathV","pathC","pathS","pathQ","pathT","ARC","pathA","CLOSE_PATH","pathZ","getBoundingBox","getMarkers","markers","fillRuleStyleProp","fill","setTransform","stroke","markersLastIndex","markerStartStyleProp","markerMidStyleProp","markerEndStyleProp","marker","_marker","_point","_angle","_marker2","_point2","_angle2","controlPoint","currentPoint","bezierCurveTo","quadraticCurveTo","rX","rY","xRot","lArcFlag","sweepFlag","xAxisRotation","currp","l","s","cpp","centp","a1","ad","dir","ah","halfWay","r","sx","sy","arc","Boolean","GlyphElement","horizAdvX","unicode","arabicForm","TextElement","new","target","measureCache","textBaseline","initializeCoordinates","leafTexts","textChunkStart","POSITIVE_INFINITY","maxX","NEGATIVE_INFINITY","getTElementBoundingBox","adjustChildCoordinatesRecursive","childBoundingBox","getChildBoundingBox","getFontSize","inheritFontSize","measureText","getGlyph","char","glyph","isArabic","prevChar","nextChar","glyphs","maybeGlyph","missingGlyph","getTextFromNode","parentNode","lastIndex","renderTElementChildren","renderChild","renderText","customFont","unitsPerEm","fontFace","ctxFont","isRTL","reverse","dx","lw","fillText","strokeText","applyAnchoring","firstElement","textAnchor","shift","adjustChildCoordinatesRecursiveCore","textParent","adjustChildCoordinates","xAttr","yAttr","dxAttr","dyAttr","getInheritedAttribute","measure","measureTargetText","targetText","_measure","parentAttr","TSpanElement","TextNode","SVGElement","root","_this$node$parentNode","getComputedStyle","getPropertyValue","fontSizeProp","refXAttr","refYAttr","viewBoxAttr","resize","preserveAspectRatio","widthAttr","heightAttr","styleAttr","originWidth","originHeight","preserveAspectRatioAttr","RectElement","rxAttr","ryAttr","rx","ry","KAPPA","CircleElement","EllipseElement","LineElement","getPoints","x0","y0","PolylineElement","PolygonElement","PatternElement","parentOpacityProp","patternSvg","patternCanvas","patternCtx","getContext","pattern","MarkerElement","orient","markerUnits","markerSvg","overflow","DefsElement","GElement","GradientElement","attributesToInherit","stops","getGradientUnits","stopsContainer","inheritStopContainer","gradient","getGradient","addParentOpacity","addColorStop","rootView","rect","group","attributeToInherit","colorProp","LinearGradientElement","isBoundingBoxUnits","createLinearGradient","RadialGradientElement","fx","fy","fr","createRadialGradient","StopElement","stopOpacity","stopColor","AnimateElement","duration","initialValue","initialUnits","removed","frozen","begin","maxDuration","to","values","valuesAttr","getProperty","attributeType","attributeName","calcValue","progress","getProgress","newValue","prop","updated","typeAttr","p","lb","floor","ub","ceil","AnimateColorElement","colorFrom","colorTo","AnimateTransformElement","transformFrom","transformTo","FontElement","fontFamilyStyle","FontFaceElement","ascent","descent","MissingGlyphElement","TRefElement","firstChild","AElement","hasText","open","ownKeys$2","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","_objectSpread$2","source","getOwnPropertyDescriptors","defineProperties","defineProperty","TextPathElement","textWidth","textHeight","pathLength","glyphInfo","letterSpacingCache","measuresCache","Map","pathElement","dataArray","parsePathData","theta","dTheta","psi","fs","setTextData","textDecoration","rotation","partialText","getLetterSpacingAt","idx","findSegmentToFitChar","anchor","textFullWidth","fullPathWidth","spacesNumber","inputOffset","dy","charI","glyphWidth","splineStep","getEquidistantPointOnPath","segment","dyX","dyY","has","get","chars","thisSpacing","parentSpacing","letterSpacing","textLen","dxSum","acc","cur","getPathLength","startOffset","nextOffset","pathCommands","startX","startY","nextCommandType","calcLength","commandType","getLineLength","getPointOnCubicBezier","getPointOnQuadraticBezier","end","inc","abs","getPointOnEllipticalArc","getPointOnLine","dist","fromX","fromY","m","rise","pt","ix","iy","pRise","pRun","getPointOnPath","distance","fullLen","cumulativePathLength","currentT","pct","p4x","p4y","cosPsi","sinPsi","buildEquidistantCache","inputStep","inputPrecision","precision","step","equidistantCache","targetDistance","dataUriRegex","ImageElement","loaded","href","isSvg","images","loadSvg","image","console","error","atob","decodeURIComponent","svg","subDocument","canvg","forkString","documentElement","_image","complete","drawImage","SymbolElement","SVGFontLoader","fonts","svgDocument","fontNode","StyleElement","css","cssDefs","cssParts","cssClasses","cssProps","cssClass","props","cssProp","substr","srcs","src","UseElement","tempSvg","oldParent","elementTransform","cachedElement","imGet","_height","rgba","imSet","val","mi","m1","m2","m3","FeColorMatrixElement","includeOpacity","_x","_y","srcData","getImageData","nr","ng","nb","na","putImageData","MaskElement","ignoredStyles","maskCanvas","maskCtx","tmpCanvas","tmpCtx","globalCompositeOperation","fillRect","noop","ClipPathElement","contextProto","getPrototypeOf","FilterElement","px","py","efd","extraFilterDistance","tmpCanvasWidth","tmpCanvasHeight","FeDropShadowElement","_width","FeMorphologyElement","FeCompositeElement","FeGaussianBlurElement","blurRadius","body","getUniqueId","display","appendChild","removeChild","TitleElement","DescElement","elements","ownKeys$1","_objectSpread$1","_createImage","anonymousCrossOrigin","crossOrigin","reject","onload","onerror","_event","_source","_lineno","_colno","Document","emSizeStack","uniqueId","bindCreateImage","isImagesLoaded","isFontsLoaded","forceAnonymousCrossOrigin","createDocumentElement","elementType","ElementType","elementTypes","config","ownKeys","_objectSpread","Canvg","options","_arguments","fromString","fork","_arguments2","baseOptions","default","presets"],"mappings":"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","sourcesContent":["import 'core-js/modules/es.promise.js';\nimport _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport 'core-js/modules/es.string.match.js';\nimport 'core-js/modules/es.string.replace.js';\nimport 'core-js/modules/es.string.starts-with.js';\nimport 'core-js/modules/es.array.iterator.js';\nimport 'core-js/modules/web.dom-collections.iterator.js';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport 'core-js/modules/es.array.reduce.js';\nimport 'core-js/modules/es.string.ends-with.js';\nimport 'core-js/modules/es.string.split.js';\nimport requestAnimationFrame from 'raf';\nimport 'core-js/modules/es.string.trim.js';\nimport RGBColor from 'rgbcolor';\nimport 'core-js/modules/es.array.index-of.js';\nimport 'core-js/modules/es.string.includes.js';\nimport 'core-js/modules/es.array.reverse.js';\nimport { SVGPathData } from 'svg-pathdata';\nimport 'core-js/modules/es.regexp.to-string.js';\nimport { canvasRGBA } from 'stackblur-canvas';\n\n/**\r\n * Options preset for `OffscreenCanvas`.\r\n * @param config - Preset requirements.\r\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\r\n * @returns Preset object.\r\n */\nfunction offscreen() {\n var {\n DOMParser: DOMParserFallback\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var preset = {\n window: null,\n ignoreAnimation: true,\n ignoreMouse: true,\n DOMParser: DOMParserFallback,\n\n createCanvas(width, height) {\n return new OffscreenCanvas(width, height);\n },\n\n createImage(url) {\n return _asyncToGenerator(function* () {\n var response = yield fetch(url);\n var blob = yield response.blob();\n var img = yield createImageBitmap(blob);\n return img;\n })();\n }\n\n };\n\n if (typeof DOMParser !== 'undefined' || typeof DOMParserFallback === 'undefined') {\n Reflect.deleteProperty(preset, 'DOMParser');\n }\n\n return preset;\n}\n\n/**\r\n * Options preset for `node-canvas`.\r\n * @param config - Preset requirements.\r\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\r\n * @param config.canvas - `node-canvas` exports.\r\n * @param config.fetch - WHATWG-compatible `fetch` function.\r\n * @returns Preset object.\r\n */\nfunction node(_ref) {\n var {\n DOMParser,\n canvas,\n fetch\n } = _ref;\n return {\n window: null,\n ignoreAnimation: true,\n ignoreMouse: true,\n DOMParser,\n fetch,\n createCanvas: canvas.createCanvas,\n createImage: canvas.loadImage\n };\n}\n\nvar index = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\toffscreen: offscreen,\n\tnode: node\n});\n\n/**\r\n * HTML-safe compress white-spaces.\r\n * @param str - String to compress.\r\n * @returns String.\r\n */\nfunction compressSpaces(str) {\n return str.replace(/(?!\\u3000)\\s+/gm, ' ');\n}\n/**\r\n * HTML-safe left trim.\r\n * @param str - String to trim.\r\n * @returns String.\r\n */\n\nfunction trimLeft(str) {\n return str.replace(/^[\\n \\t]+/, '');\n}\n/**\r\n * HTML-safe right trim.\r\n * @param str - String to trim.\r\n * @returns String.\r\n */\n\nfunction trimRight(str) {\n return str.replace(/[\\n \\t]+$/, '');\n}\n/**\r\n * String to numbers array.\r\n * @param str - Numbers string.\r\n * @returns Numbers array.\r\n */\n\nfunction toNumbers(str) {\n var matches = (str || '').match(/-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)/gm) || [];\n return matches.map(parseFloat);\n} // Microsoft Edge fix\n\nvar allUppercase = /^[A-Z-]+$/;\n/**\r\n * Normalize attribute name.\r\n * @param name - Attribute name.\r\n * @returns Normalized attribute name.\r\n */\n\nfunction normalizeAttributeName(name) {\n if (allUppercase.test(name)) {\n return name.toLowerCase();\n }\n\n return name;\n}\n/**\r\n * Parse external URL.\r\n * @param url - CSS url string.\r\n * @returns Parsed URL.\r\n */\n\nfunction parseExternalUrl(url) {\n // single quotes [2]\n // v double quotes [3]\n // v v no quotes [4]\n // v v v\n var urlMatch = /url\\(('([^']+)'|\"([^\"]+)\"|([^'\")]+))\\)/.exec(url) || [];\n return urlMatch[2] || urlMatch[3] || urlMatch[4];\n}\n/**\r\n * Transform floats to integers in rgb colors.\r\n * @param color - Color to normalize.\r\n * @returns Normalized color.\r\n */\n\nfunction normalizeColor(color) {\n if (!color.startsWith('rgb')) {\n return color;\n }\n\n var rgbParts = 3;\n var normalizedColor = color.replace(/\\d+(\\.\\d+)?/g, (num, isFloat) => rgbParts-- && isFloat ? String(Math.round(parseFloat(num))) : num);\n return normalizedColor;\n}\n\n// slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js\nvar attributeRegex = /(\\[[^\\]]+\\])/g;\nvar idRegex = /(#[^\\s+>~.[:]+)/g;\nvar classRegex = /(\\.[^\\s+>~.[:]+)/g;\nvar pseudoElementRegex = /(::[^\\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi;\nvar pseudoClassWithBracketsRegex = /(:[\\w-]+\\([^)]*\\))/gi;\nvar pseudoClassRegex = /(:[^\\s+>~.[:]+)/g;\nvar elementRegex = /([^\\s+>~.[:]+)/g;\n\nfunction findSelectorMatch(selector, regex) {\n var matches = regex.exec(selector);\n\n if (!matches) {\n return [selector, 0];\n }\n\n return [selector.replace(regex, ' '), matches.length];\n}\n/**\r\n * Measure selector specificity.\r\n * @param selector - Selector to measure.\r\n * @returns Specificity.\r\n */\n\n\nfunction getSelectorSpecificity(selector) {\n var specificity = [0, 0, 0];\n var currentSelector = selector.replace(/:not\\(([^)]*)\\)/g, ' $1 ').replace(/{[\\s\\S]*/gm, ' ');\n var delta = 0;\n [currentSelector, delta] = findSelectorMatch(currentSelector, attributeRegex);\n specificity[1] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, idRegex);\n specificity[0] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, classRegex);\n specificity[1] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoElementRegex);\n specificity[2] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassWithBracketsRegex);\n specificity[1] += delta;\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassRegex);\n specificity[1] += delta;\n currentSelector = currentSelector.replace(/[*\\s+>~]/g, ' ').replace(/[#.]/g, ' ');\n [currentSelector, delta] = findSelectorMatch(currentSelector, elementRegex); // lgtm [js/useless-assignment-to-local]\n\n specificity[2] += delta;\n return specificity.join('');\n}\n\nvar PSEUDO_ZERO = .00000001;\n/**\r\n * Vector magnitude.\r\n * @param v\r\n * @returns Number result.\r\n */\n\nfunction vectorMagnitude(v) {\n return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2));\n}\n/**\r\n * Ratio between two vectors.\r\n * @param u\r\n * @param v\r\n * @returns Number result.\r\n */\n\nfunction vectorsRatio(u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vectorMagnitude(u) * vectorMagnitude(v));\n}\n/**\r\n * Angle between two vectors.\r\n * @param u\r\n * @param v\r\n * @returns Number result.\r\n */\n\nfunction vectorsAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vectorsRatio(u, v));\n}\nfunction CB1(t) {\n return t * t * t;\n}\nfunction CB2(t) {\n return 3 * t * t * (1 - t);\n}\nfunction CB3(t) {\n return 3 * t * (1 - t) * (1 - t);\n}\nfunction CB4(t) {\n return (1 - t) * (1 - t) * (1 - t);\n}\nfunction QB1(t) {\n return t * t;\n}\nfunction QB2(t) {\n return 2 * t * (1 - t);\n}\nfunction QB3(t) {\n return (1 - t) * (1 - t);\n}\n\nclass Property {\n constructor(document, name, value) {\n this.document = document;\n this.name = name;\n this.value = value;\n this.isNormalizedColor = false;\n }\n\n static empty(document) {\n return new Property(document, 'EMPTY', '');\n }\n\n split() {\n var separator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ' ';\n var {\n document,\n name\n } = this;\n return compressSpaces(this.getString()).trim().split(separator).map(value => new Property(document, name, value));\n }\n\n hasValue(zeroIsValue) {\n var {\n value\n } = this;\n return value !== null && value !== '' && (zeroIsValue || value !== 0) && typeof value !== 'undefined';\n }\n\n isString(regexp) {\n var {\n value\n } = this;\n var result = typeof value === 'string';\n\n if (!result || !regexp) {\n return result;\n }\n\n return regexp.test(value);\n }\n\n isUrlDefinition() {\n return this.isString(/^url\\(/);\n }\n\n isPixels() {\n if (!this.hasValue()) {\n return false;\n }\n\n var asString = this.getString();\n\n switch (true) {\n case asString.endsWith('px'):\n case /^[0-9]+$/.test(asString):\n return true;\n\n default:\n return false;\n }\n }\n\n setValue(value) {\n this.value = value;\n return this;\n }\n\n getValue(def) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return this.value;\n }\n\n return def;\n }\n\n getNumber(def) {\n if (!this.hasValue()) {\n if (typeof def === 'undefined') {\n return 0;\n }\n\n return parseFloat(def);\n }\n\n var {\n value\n } = this;\n var n = parseFloat(value);\n\n if (this.isString(/%$/)) {\n n /= 100.0;\n }\n\n return n;\n }\n\n getString(def) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return typeof this.value === 'undefined' ? '' : String(this.value);\n }\n\n return String(def);\n }\n\n getColor(def) {\n var color = this.getString(def);\n\n if (this.isNormalizedColor) {\n return color;\n }\n\n this.isNormalizedColor = true;\n color = normalizeColor(color);\n this.value = color;\n return color;\n }\n\n getDpi() {\n return 96.0; // TODO: compute?\n }\n\n getRem() {\n return this.document.rootEmSize;\n }\n\n getEm() {\n return this.document.emSize;\n }\n\n getUnits() {\n return this.getString().replace(/[0-9.-]/g, '');\n }\n\n getPixels(axisOrIsFontSize) {\n var processPercent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.hasValue()) {\n return 0;\n }\n\n var [axis, isFontSize] = typeof axisOrIsFontSize === 'boolean' ? [undefined, axisOrIsFontSize] : [axisOrIsFontSize];\n var {\n viewPort\n } = this.document.screen;\n\n switch (true) {\n case this.isString(/vmin$/):\n return this.getNumber() / 100.0 * Math.min(viewPort.computeSize('x'), viewPort.computeSize('y'));\n\n case this.isString(/vmax$/):\n return this.getNumber() / 100.0 * Math.max(viewPort.computeSize('x'), viewPort.computeSize('y'));\n\n case this.isString(/vw$/):\n return this.getNumber() / 100.0 * viewPort.computeSize('x');\n\n case this.isString(/vh$/):\n return this.getNumber() / 100.0 * viewPort.computeSize('y');\n\n case this.isString(/rem$/):\n return this.getNumber() * this.getRem();\n\n case this.isString(/em$/):\n return this.getNumber() * this.getEm();\n\n case this.isString(/ex$/):\n return this.getNumber() * this.getEm() / 2.0;\n\n case this.isString(/px$/):\n return this.getNumber();\n\n case this.isString(/pt$/):\n return this.getNumber() * this.getDpi() * (1.0 / 72.0);\n\n case this.isString(/pc$/):\n return this.getNumber() * 15;\n\n case this.isString(/cm$/):\n return this.getNumber() * this.getDpi() / 2.54;\n\n case this.isString(/mm$/):\n return this.getNumber() * this.getDpi() / 25.4;\n\n case this.isString(/in$/):\n return this.getNumber() * this.getDpi();\n\n case this.isString(/%$/) && isFontSize:\n return this.getNumber() * this.getEm();\n\n case this.isString(/%$/):\n return this.getNumber() * viewPort.computeSize(axis);\n\n default:\n {\n var n = this.getNumber();\n\n if (processPercent && n < 1.0) {\n return n * viewPort.computeSize(axis);\n }\n\n return n;\n }\n }\n }\n\n getMilliseconds() {\n if (!this.hasValue()) {\n return 0;\n }\n\n if (this.isString(/ms$/)) {\n return this.getNumber();\n }\n\n return this.getNumber() * 1000;\n }\n\n getRadians() {\n if (!this.hasValue()) {\n return 0;\n }\n\n switch (true) {\n case this.isString(/deg$/):\n return this.getNumber() * (Math.PI / 180.0);\n\n case this.isString(/grad$/):\n return this.getNumber() * (Math.PI / 200.0);\n\n case this.isString(/rad$/):\n return this.getNumber();\n\n default:\n return this.getNumber() * (Math.PI / 180.0);\n }\n }\n\n getDefinition() {\n var asString = this.getString();\n var name = /#([^)'\"]+)/.exec(asString);\n\n if (name) {\n name = name[1];\n }\n\n if (!name) {\n name = asString;\n }\n\n return this.document.definitions[name];\n }\n\n getFillStyleDefinition(element, opacity) {\n var def = this.getDefinition();\n\n if (!def) {\n return null;\n } // gradient\n\n\n if (typeof def.createGradient === 'function') {\n return def.createGradient(this.document.ctx, element, opacity);\n } // pattern\n\n\n if (typeof def.createPattern === 'function') {\n if (def.getHrefAttribute().hasValue()) {\n var patternTransform = def.getAttribute('patternTransform');\n def = def.getHrefAttribute().getDefinition();\n\n if (patternTransform.hasValue()) {\n def.getAttribute('patternTransform', true).setValue(patternTransform.value);\n }\n }\n\n return def.createPattern(this.document.ctx, element, opacity);\n }\n\n return null;\n }\n\n getTextBaseline() {\n if (!this.hasValue()) {\n return null;\n }\n\n return Property.textBaselineMapping[this.getString()];\n }\n\n addOpacity(opacity) {\n var value = this.getColor();\n var len = value.length;\n var commas = 0; // Simulate old RGBColor version, which can't parse rgba.\n\n for (var i = 0; i < len; i++) {\n if (value[i] === ',') {\n commas++;\n }\n\n if (commas === 3) {\n break;\n }\n }\n\n if (opacity.hasValue() && this.isString() && commas !== 3) {\n var color = new RGBColor(value);\n\n if (color.ok) {\n color.alpha = opacity.getNumber();\n value = color.toRGBA();\n }\n }\n\n return new Property(this.document, this.name, value);\n }\n\n}\nProperty.textBaselineMapping = {\n 'baseline': 'alphabetic',\n 'before-edge': 'top',\n 'text-before-edge': 'top',\n 'middle': 'middle',\n 'central': 'middle',\n 'after-edge': 'bottom',\n 'text-after-edge': 'bottom',\n 'ideographic': 'ideographic',\n 'alphabetic': 'alphabetic',\n 'hanging': 'hanging',\n 'mathematical': 'alphabetic'\n};\n\nclass ViewPort {\n constructor() {\n this.viewPorts = [];\n }\n\n clear() {\n this.viewPorts = [];\n }\n\n setCurrent(width, height) {\n this.viewPorts.push({\n width,\n height\n });\n }\n\n removeCurrent() {\n this.viewPorts.pop();\n }\n\n getCurrent() {\n var {\n viewPorts\n } = this;\n return viewPorts[viewPorts.length - 1];\n }\n\n get width() {\n return this.getCurrent().width;\n }\n\n get height() {\n return this.getCurrent().height;\n }\n\n computeSize(d) {\n if (typeof d === 'number') {\n return d;\n }\n\n if (d === 'x') {\n return this.width;\n }\n\n if (d === 'y') {\n return this.height;\n }\n\n return Math.sqrt(Math.pow(this.width, 2) + Math.pow(this.height, 2)) / Math.sqrt(2);\n }\n\n}\n\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n\n static parse(point) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var [x = defaultValue, y = defaultValue] = toNumbers(point);\n return new Point(x, y);\n }\n\n static parseScale(scale) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var [x = defaultValue, y = x] = toNumbers(scale);\n return new Point(x, y);\n }\n\n static parsePath(path) {\n var points = toNumbers(path);\n var len = points.length;\n var pathPoints = [];\n\n for (var i = 0; i < len; i += 2) {\n pathPoints.push(new Point(points[i], points[i + 1]));\n }\n\n return pathPoints;\n }\n\n angleTo(point) {\n return Math.atan2(point.y - this.y, point.x - this.x);\n }\n\n applyTransform(transform) {\n var {\n x,\n y\n } = this;\n var xp = x * transform[0] + y * transform[2] + transform[4];\n var yp = x * transform[1] + y * transform[3] + transform[5];\n this.x = xp;\n this.y = yp;\n }\n\n}\n\nclass Mouse {\n constructor(screen) {\n this.screen = screen;\n this.working = false;\n this.events = [];\n this.eventElements = []; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\n this.onClick = this.onClick.bind(this); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\n this.onMouseMove = this.onMouseMove.bind(this);\n }\n\n isWorking() {\n return this.working;\n }\n\n start() {\n if (this.working) {\n return;\n }\n\n var {\n screen,\n onClick,\n onMouseMove\n } = this;\n var canvas = screen.ctx.canvas;\n canvas.onclick = onClick;\n canvas.onmousemove = onMouseMove;\n this.working = true;\n }\n\n stop() {\n if (!this.working) {\n return;\n }\n\n var canvas = this.screen.ctx.canvas;\n this.working = false;\n canvas.onclick = null;\n canvas.onmousemove = null;\n }\n\n hasEvents() {\n return this.working && this.events.length > 0;\n }\n\n runEvents() {\n if (!this.working) {\n return;\n }\n\n var {\n screen: document,\n events,\n eventElements\n } = this;\n var {\n style\n } = document.ctx.canvas;\n\n if (style) {\n style.cursor = '';\n }\n\n events.forEach((_ref, i) => {\n var {\n run\n } = _ref;\n var element = eventElements[i];\n\n while (element) {\n run(element);\n element = element.parent;\n }\n }); // done running, clear\n\n this.events = [];\n this.eventElements = [];\n }\n\n checkPath(element, ctx) {\n if (!this.working || !ctx) {\n return;\n }\n\n var {\n events,\n eventElements\n } = this;\n events.forEach((_ref2, i) => {\n var {\n x,\n y\n } = _ref2;\n\n if (!eventElements[i] && ctx.isPointInPath && ctx.isPointInPath(x, y)) {\n eventElements[i] = element;\n }\n });\n }\n\n checkBoundingBox(element, boundingBox) {\n if (!this.working || !boundingBox) {\n return;\n }\n\n var {\n events,\n eventElements\n } = this;\n events.forEach((_ref3, i) => {\n var {\n x,\n y\n } = _ref3;\n\n if (!eventElements[i] && boundingBox.isPointInBox(x, y)) {\n eventElements[i] = element;\n }\n });\n }\n\n mapXY(x, y) {\n var {\n window,\n ctx\n } = this.screen;\n var point = new Point(x, y);\n var element = ctx.canvas;\n\n while (element) {\n point.x -= element.offsetLeft;\n point.y -= element.offsetTop;\n element = element.offsetParent;\n }\n\n if (window.scrollX) {\n point.x += window.scrollX;\n }\n\n if (window.scrollY) {\n point.y += window.scrollY;\n }\n\n return point;\n }\n\n onClick(event) {\n var {\n x,\n y\n } = this.mapXY(event.clientX, event.clientY);\n this.events.push({\n type: 'onclick',\n x,\n y,\n\n run(eventTarget) {\n if (eventTarget.onClick) {\n eventTarget.onClick();\n }\n }\n\n });\n }\n\n onMouseMove(event) {\n var {\n x,\n y\n } = this.mapXY(event.clientX, event.clientY);\n this.events.push({\n type: 'onmousemove',\n x,\n y,\n\n run(eventTarget) {\n if (eventTarget.onMouseMove) {\n eventTarget.onMouseMove();\n }\n }\n\n });\n }\n\n}\n\nvar defaultWindow = typeof window !== 'undefined' ? window : null;\nvar defaultFetch$1 = typeof fetch !== 'undefined' ? fetch.bind(undefined) // `fetch` depends on context: `someObject.fetch(...)` will throw error.\n: null;\nclass Screen {\n constructor(ctx) {\n var {\n fetch = defaultFetch$1,\n window = defaultWindow\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.ctx = ctx;\n this.FRAMERATE = 30;\n this.MAX_VIRTUAL_PIXELS = 30000;\n this.CLIENT_WIDTH = 800;\n this.CLIENT_HEIGHT = 600;\n this.viewPort = new ViewPort();\n this.mouse = new Mouse(this);\n this.animations = [];\n this.waits = [];\n this.frameDuration = 0;\n this.isReadyLock = false;\n this.isFirstRender = true;\n this.intervalId = null;\n this.window = window;\n this.fetch = fetch;\n }\n\n wait(checker) {\n this.waits.push(checker);\n }\n\n ready() {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (!this.readyPromise) {\n return Promise.resolve();\n }\n\n return this.readyPromise;\n }\n\n isReady() {\n if (this.isReadyLock) {\n return true;\n }\n\n var isReadyLock = this.waits.every(_ => _());\n\n if (isReadyLock) {\n this.waits = [];\n\n if (this.resolveReady) {\n this.resolveReady();\n }\n }\n\n this.isReadyLock = isReadyLock;\n return isReadyLock;\n }\n\n setDefaults(ctx) {\n // initial values and defaults\n ctx.strokeStyle = 'rgba(0,0,0,0)';\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n }\n\n setViewBox(_ref) {\n var {\n document,\n ctx,\n aspectRatio,\n width,\n desiredWidth,\n height,\n desiredHeight,\n minX = 0,\n minY = 0,\n refX,\n refY,\n clip = false,\n clipX = 0,\n clipY = 0\n } = _ref;\n // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n var cleanAspectRatio = compressSpaces(aspectRatio).replace(/^defer\\s/, ''); // ignore defer\n\n var [aspectRatioAlign, aspectRatioMeetOrSlice] = cleanAspectRatio.split(' ');\n var align = aspectRatioAlign || 'xMidYMid';\n var meetOrSlice = aspectRatioMeetOrSlice || 'meet'; // calculate scale\n\n var scaleX = width / desiredWidth;\n var scaleY = height / desiredHeight;\n var scaleMin = Math.min(scaleX, scaleY);\n var scaleMax = Math.max(scaleX, scaleY);\n var finalDesiredWidth = desiredWidth;\n var finalDesiredHeight = desiredHeight;\n\n if (meetOrSlice === 'meet') {\n finalDesiredWidth *= scaleMin;\n finalDesiredHeight *= scaleMin;\n }\n\n if (meetOrSlice === 'slice') {\n finalDesiredWidth *= scaleMax;\n finalDesiredHeight *= scaleMax;\n }\n\n var refXProp = new Property(document, 'refX', refX);\n var refYProp = new Property(document, 'refY', refY);\n var hasRefs = refXProp.hasValue() && refYProp.hasValue();\n\n if (hasRefs) {\n ctx.translate(-scaleMin * refXProp.getPixels('x'), -scaleMin * refYProp.getPixels('y'));\n }\n\n if (clip) {\n var scaledClipX = scaleMin * clipX;\n var scaledClipY = scaleMin * clipY;\n ctx.beginPath();\n ctx.moveTo(scaledClipX, scaledClipY);\n ctx.lineTo(width, scaledClipY);\n ctx.lineTo(width, height);\n ctx.lineTo(scaledClipX, height);\n ctx.closePath();\n ctx.clip();\n }\n\n if (!hasRefs) {\n var isMeetMinY = meetOrSlice === 'meet' && scaleMin === scaleY;\n var isSliceMaxY = meetOrSlice === 'slice' && scaleMax === scaleY;\n var isMeetMinX = meetOrSlice === 'meet' && scaleMin === scaleX;\n var isSliceMaxX = meetOrSlice === 'slice' && scaleMax === scaleX;\n\n if (align.startsWith('xMid') && (isMeetMinY || isSliceMaxY)) {\n ctx.translate(width / 2.0 - finalDesiredWidth / 2.0, 0);\n }\n\n if (align.endsWith('YMid') && (isMeetMinX || isSliceMaxX)) {\n ctx.translate(0, height / 2.0 - finalDesiredHeight / 2.0);\n }\n\n if (align.startsWith('xMax') && (isMeetMinY || isSliceMaxY)) {\n ctx.translate(width - finalDesiredWidth, 0);\n }\n\n if (align.endsWith('YMax') && (isMeetMinX || isSliceMaxX)) {\n ctx.translate(0, height - finalDesiredHeight);\n }\n } // scale\n\n\n switch (true) {\n case align === 'none':\n ctx.scale(scaleX, scaleY);\n break;\n\n case meetOrSlice === 'meet':\n ctx.scale(scaleMin, scaleMin);\n break;\n\n case meetOrSlice === 'slice':\n ctx.scale(scaleMax, scaleMax);\n break;\n } // translate\n\n\n ctx.translate(-minX, -minY);\n }\n\n start(element) {\n var {\n enableRedraw = false,\n ignoreMouse = false,\n ignoreAnimation = false,\n ignoreDimensions = false,\n ignoreClear = false,\n forceRedraw,\n scaleWidth,\n scaleHeight,\n offsetX,\n offsetY\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var {\n FRAMERATE,\n mouse\n } = this;\n var frameDuration = 1000 / FRAMERATE;\n this.frameDuration = frameDuration;\n this.readyPromise = new Promise(resolve => {\n this.resolveReady = resolve;\n });\n\n if (this.isReady()) {\n this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n }\n\n if (!enableRedraw) {\n return;\n }\n\n var now = Date.now();\n var then = now;\n var delta = 0;\n\n var tick = () => {\n now = Date.now();\n delta = now - then;\n\n if (delta >= frameDuration) {\n then = now - delta % frameDuration;\n\n if (this.shouldUpdate(ignoreAnimation, forceRedraw)) {\n this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n mouse.runEvents();\n }\n }\n\n this.intervalId = requestAnimationFrame(tick);\n };\n\n if (!ignoreMouse) {\n mouse.start();\n }\n\n this.intervalId = requestAnimationFrame(tick);\n }\n\n stop() {\n if (this.intervalId) {\n requestAnimationFrame.cancel(this.intervalId);\n this.intervalId = null;\n }\n\n this.mouse.stop();\n }\n\n shouldUpdate(ignoreAnimation, forceRedraw) {\n // need update from animations?\n if (!ignoreAnimation) {\n var {\n frameDuration\n } = this;\n var shouldUpdate = this.animations.reduce((shouldUpdate, animation) => animation.update(frameDuration) || shouldUpdate, false);\n\n if (shouldUpdate) {\n return true;\n }\n } // need update from redraw?\n\n\n if (typeof forceRedraw === 'function' && forceRedraw()) {\n return true;\n }\n\n if (!this.isReadyLock && this.isReady()) {\n return true;\n } // need update from mouse events?\n\n\n if (this.mouse.hasEvents()) {\n return true;\n }\n\n return false;\n }\n\n render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY) {\n var {\n CLIENT_WIDTH,\n CLIENT_HEIGHT,\n viewPort,\n ctx,\n isFirstRender\n } = this;\n var canvas = ctx.canvas;\n viewPort.clear();\n\n if (canvas.width && canvas.height) {\n viewPort.setCurrent(canvas.width, canvas.height);\n } else {\n viewPort.setCurrent(CLIENT_WIDTH, CLIENT_HEIGHT);\n }\n\n var widthStyle = element.getStyle('width');\n var heightStyle = element.getStyle('height');\n\n if (!ignoreDimensions && (isFirstRender || typeof scaleWidth !== 'number' && typeof scaleHeight !== 'number')) {\n // set canvas size\n if (widthStyle.hasValue()) {\n canvas.width = widthStyle.getPixels('x');\n\n if (canvas.style) {\n canvas.style.width = \"\".concat(canvas.width, \"px\");\n }\n }\n\n if (heightStyle.hasValue()) {\n canvas.height = heightStyle.getPixels('y');\n\n if (canvas.style) {\n canvas.style.height = \"\".concat(canvas.height, \"px\");\n }\n }\n }\n\n var cWidth = canvas.clientWidth || canvas.width;\n var cHeight = canvas.clientHeight || canvas.height;\n\n if (ignoreDimensions && widthStyle.hasValue() && heightStyle.hasValue()) {\n cWidth = widthStyle.getPixels('x');\n cHeight = heightStyle.getPixels('y');\n }\n\n viewPort.setCurrent(cWidth, cHeight);\n\n if (typeof offsetX === 'number') {\n element.getAttribute('x', true).setValue(offsetX);\n }\n\n if (typeof offsetY === 'number') {\n element.getAttribute('y', true).setValue(offsetY);\n }\n\n if (typeof scaleWidth === 'number' || typeof scaleHeight === 'number') {\n var viewBox = toNumbers(element.getAttribute('viewBox').getString());\n var xRatio = 0;\n var yRatio = 0;\n\n if (typeof scaleWidth === 'number') {\n var _widthStyle = element.getStyle('width');\n\n if (_widthStyle.hasValue()) {\n xRatio = _widthStyle.getPixels('x') / scaleWidth;\n } else if (!isNaN(viewBox[2])) {\n xRatio = viewBox[2] / scaleWidth;\n }\n }\n\n if (typeof scaleHeight === 'number') {\n var _heightStyle = element.getStyle('height');\n\n if (_heightStyle.hasValue()) {\n yRatio = _heightStyle.getPixels('y') / scaleHeight;\n } else if (!isNaN(viewBox[3])) {\n yRatio = viewBox[3] / scaleHeight;\n }\n }\n\n if (!xRatio) {\n xRatio = yRatio;\n }\n\n if (!yRatio) {\n yRatio = xRatio;\n }\n\n element.getAttribute('width', true).setValue(scaleWidth);\n element.getAttribute('height', true).setValue(scaleHeight);\n var transformStyle = element.getStyle('transform', true, true);\n transformStyle.setValue(\"\".concat(transformStyle.getString(), \" scale(\").concat(1.0 / xRatio, \", \").concat(1.0 / yRatio, \")\"));\n } // clear and render\n\n\n if (!ignoreClear) {\n ctx.clearRect(0, 0, cWidth, cHeight);\n }\n\n element.render(ctx);\n\n if (isFirstRender) {\n this.isFirstRender = false;\n }\n }\n\n}\nScreen.defaultWindow = defaultWindow;\nScreen.defaultFetch = defaultFetch$1;\n\nvar {\n defaultFetch\n} = Screen;\nvar DefaultDOMParser = typeof DOMParser !== 'undefined' ? DOMParser : null;\nclass Parser {\n constructor() {\n var {\n fetch = defaultFetch,\n DOMParser = DefaultDOMParser\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.fetch = fetch;\n this.DOMParser = DOMParser;\n }\n\n parse(resource) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n if (resource.startsWith('<')) {\n return _this.parseFromString(resource);\n }\n\n return _this.load(resource);\n })();\n }\n\n parseFromString(xml) {\n var parser = new this.DOMParser();\n\n try {\n return this.checkDocument(parser.parseFromString(xml, 'image/svg+xml'));\n } catch (err) {\n return this.checkDocument(parser.parseFromString(xml, 'text/xml'));\n }\n }\n\n checkDocument(document) {\n var parserError = document.getElementsByTagName('parsererror')[0];\n\n if (parserError) {\n throw new Error(parserError.textContent);\n }\n\n return document;\n }\n\n load(url) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var response = yield _this2.fetch(url);\n var xml = yield response.text();\n return _this2.parseFromString(xml);\n })();\n }\n\n}\n\nclass Translate {\n constructor(_, point) {\n this.type = 'translate';\n this.point = null;\n this.point = Point.parse(point);\n }\n\n apply(ctx) {\n var {\n x,\n y\n } = this.point;\n ctx.translate(x || 0.0, y || 0.0);\n }\n\n unapply(ctx) {\n var {\n x,\n y\n } = this.point;\n ctx.translate(-1.0 * x || 0.0, -1.0 * y || 0.0);\n }\n\n applyToPoint(point) {\n var {\n x,\n y\n } = this.point;\n point.applyTransform([1, 0, 0, 1, x || 0.0, y || 0.0]);\n }\n\n}\n\nclass Rotate {\n constructor(document, rotate, transformOrigin) {\n this.type = 'rotate';\n this.angle = null;\n this.originX = null;\n this.originY = null;\n this.cx = 0;\n this.cy = 0;\n var numbers = toNumbers(rotate);\n this.angle = new Property(document, 'angle', numbers[0]);\n this.originX = transformOrigin[0];\n this.originY = transformOrigin[1];\n this.cx = numbers[1] || 0;\n this.cy = numbers[2] || 0;\n }\n\n apply(ctx) {\n var {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this;\n var tx = cx + originX.getPixels('x');\n var ty = cy + originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.rotate(angle.getRadians());\n ctx.translate(-tx, -ty);\n }\n\n unapply(ctx) {\n var {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this;\n var tx = cx + originX.getPixels('x');\n var ty = cy + originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.rotate(-1.0 * angle.getRadians());\n ctx.translate(-tx, -ty);\n }\n\n applyToPoint(point) {\n var {\n cx,\n cy,\n angle\n } = this;\n var rad = angle.getRadians();\n point.applyTransform([1, 0, 0, 1, cx || 0.0, cy || 0.0 // this.p.y\n ]);\n point.applyTransform([Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), 0, 0]);\n point.applyTransform([1, 0, 0, 1, -cx || 0.0, -cy || 0.0 // -this.p.y\n ]);\n }\n\n}\n\nclass Scale {\n constructor(_, scale, transformOrigin) {\n this.type = 'scale';\n this.scale = null;\n this.originX = null;\n this.originY = null;\n var scaleSize = Point.parseScale(scale); // Workaround for node-canvas\n\n if (scaleSize.x === 0 || scaleSize.y === 0) {\n scaleSize.x = PSEUDO_ZERO;\n scaleSize.y = PSEUDO_ZERO;\n }\n\n this.scale = scaleSize;\n this.originX = transformOrigin[0];\n this.originY = transformOrigin[1];\n }\n\n apply(ctx) {\n var {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this;\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.scale(x, y || x);\n ctx.translate(-tx, -ty);\n }\n\n unapply(ctx) {\n var {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this;\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.scale(1.0 / x, 1.0 / y || x);\n ctx.translate(-tx, -ty);\n }\n\n applyToPoint(point) {\n var {\n x,\n y\n } = this.scale;\n point.applyTransform([x || 0.0, 0, 0, y || 0.0, 0, 0]);\n }\n\n}\n\nclass Matrix {\n constructor(_, matrix, transformOrigin) {\n this.type = 'matrix';\n this.matrix = [];\n this.originX = null;\n this.originY = null;\n this.matrix = toNumbers(matrix);\n this.originX = transformOrigin[0];\n this.originY = transformOrigin[1];\n }\n\n apply(ctx) {\n var {\n originX,\n originY,\n matrix\n } = this;\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\n ctx.translate(-tx, -ty);\n }\n\n unapply(ctx) {\n var {\n originX,\n originY,\n matrix\n } = this;\n var a = matrix[0];\n var b = matrix[2];\n var c = matrix[4];\n var d = matrix[1];\n var e = matrix[3];\n var f = matrix[5];\n var g = 0.0;\n var h = 0.0;\n var i = 1.0;\n var det = 1 / (a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g));\n var tx = originX.getPixels('x');\n var ty = originY.getPixels('y');\n ctx.translate(tx, ty);\n ctx.transform(det * (e * i - f * h), det * (f * g - d * i), det * (c * h - b * i), det * (a * i - c * g), det * (b * f - c * e), det * (c * d - a * f));\n ctx.translate(-tx, -ty);\n }\n\n applyToPoint(point) {\n point.applyTransform(this.matrix);\n }\n\n}\n\nclass Skew extends Matrix {\n constructor(document, skew, transformOrigin) {\n super(document, skew, transformOrigin);\n this.type = 'skew';\n this.angle = null;\n this.angle = new Property(document, 'angle', skew);\n }\n\n}\n\nclass SkewX extends Skew {\n constructor(document, skew, transformOrigin) {\n super(document, skew, transformOrigin);\n this.type = 'skewX';\n this.matrix = [1, 0, Math.tan(this.angle.getRadians()), 1, 0, 0];\n }\n\n}\n\nclass SkewY extends Skew {\n constructor(document, skew, transformOrigin) {\n super(document, skew, transformOrigin);\n this.type = 'skewY';\n this.matrix = [1, Math.tan(this.angle.getRadians()), 0, 1, 0, 0];\n }\n\n}\n\nfunction parseTransforms(transform) {\n return compressSpaces(transform).trim().replace(/\\)([a-zA-Z])/g, ') $1').replace(/\\)(\\s?,\\s?)/g, ') ').split(/\\s(?=[a-z])/);\n}\n\nfunction parseTransform(transform) {\n var [type, value] = transform.split('(');\n return [type.trim(), value.trim().replace(')', '')];\n}\n\nclass Transform {\n constructor(document, transform, transformOrigin) {\n this.document = document;\n this.transforms = [];\n var data = parseTransforms(transform);\n data.forEach(transform => {\n if (transform === 'none') {\n return;\n }\n\n var [type, value] = parseTransform(transform);\n var TransformType = Transform.transformTypes[type];\n\n if (typeof TransformType !== 'undefined') {\n this.transforms.push(new TransformType(this.document, value, transformOrigin));\n }\n });\n }\n\n static fromElement(document, element) {\n var transformStyle = element.getStyle('transform', false, true);\n var [transformOriginXProperty, transformOriginYProperty = transformOriginXProperty] = element.getStyle('transform-origin', false, true).split();\n var transformOrigin = [transformOriginXProperty, transformOriginYProperty];\n\n if (transformStyle.hasValue()) {\n return new Transform(document, transformStyle.getString(), transformOrigin);\n }\n\n return null;\n }\n\n apply(ctx) {\n var {\n transforms\n } = this;\n var len = transforms.length;\n\n for (var i = 0; i < len; i++) {\n transforms[i].apply(ctx);\n }\n }\n\n unapply(ctx) {\n var {\n transforms\n } = this;\n var len = transforms.length;\n\n for (var i = len - 1; i >= 0; i--) {\n transforms[i].unapply(ctx);\n }\n } // TODO: applyToPoint unused ... remove?\n\n\n applyToPoint(point) {\n var {\n transforms\n } = this;\n var len = transforms.length;\n\n for (var i = 0; i < len; i++) {\n transforms[i].applyToPoint(point);\n }\n }\n\n}\nTransform.transformTypes = {\n translate: Translate,\n rotate: Rotate,\n scale: Scale,\n matrix: Matrix,\n skewX: SkewX,\n skewY: SkewY\n};\n\nclass Element {\n constructor(document, node) {\n var captureTextNodes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this.document = document;\n this.node = node;\n this.captureTextNodes = captureTextNodes;\n this.attributes = {};\n this.styles = {};\n this.stylesSpecificity = {};\n this.animationFrozen = false;\n this.animationFrozenValue = '';\n this.parent = null;\n this.children = [];\n\n if (!node || node.nodeType !== 1) {\n // ELEMENT_NODE\n return;\n } // add attributes\n\n\n Array.from(node.attributes).forEach(attribute => {\n var nodeName = normalizeAttributeName(attribute.nodeName);\n this.attributes[nodeName] = new Property(document, nodeName, attribute.value);\n });\n this.addStylesFromStyleDefinition(); // add inline styles\n\n if (this.getAttribute('style').hasValue()) {\n var styles = this.getAttribute('style').getString().split(';').map(_ => _.trim());\n styles.forEach(style => {\n if (!style) {\n return;\n }\n\n var [name, value] = style.split(':').map(_ => _.trim());\n this.styles[name] = new Property(document, name, value);\n });\n }\n\n var {\n definitions\n } = document;\n var id = this.getAttribute('id'); // add id\n\n if (id.hasValue()) {\n if (!definitions[id.getString()]) {\n definitions[id.getString()] = this;\n }\n }\n\n Array.from(node.childNodes).forEach(childNode => {\n if (childNode.nodeType === 1) {\n this.addChild(childNode); // ELEMENT_NODE\n } else if (captureTextNodes && (childNode.nodeType === 3 || childNode.nodeType === 4)) {\n var textNode = document.createTextNode(childNode);\n\n if (textNode.getText().length > 0) {\n this.addChild(textNode); // TEXT_NODE\n }\n }\n });\n }\n\n getAttribute(name) {\n var createIfNotExists = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var attr = this.attributes[name];\n\n if (!attr && createIfNotExists) {\n var _attr = new Property(this.document, name, '');\n\n this.attributes[name] = _attr;\n return _attr;\n }\n\n return attr || Property.empty(this.document);\n }\n\n getHrefAttribute() {\n for (var key in this.attributes) {\n if (key === 'href' || key.endsWith(':href')) {\n return this.attributes[key];\n }\n }\n\n return Property.empty(this.document);\n }\n\n getStyle(name) {\n var createIfNotExists = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var skipAncestors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var style = this.styles[name];\n\n if (style) {\n return style;\n }\n\n var attr = this.getAttribute(name);\n\n if (attr !== null && attr !== void 0 && attr.hasValue()) {\n this.styles[name] = attr; // move up to me to cache\n\n return attr;\n }\n\n if (!skipAncestors) {\n var {\n parent\n } = this;\n\n if (parent) {\n var parentStyle = parent.getStyle(name);\n\n if (parentStyle !== null && parentStyle !== void 0 && parentStyle.hasValue()) {\n return parentStyle;\n }\n }\n }\n\n if (createIfNotExists) {\n var _style = new Property(this.document, name, '');\n\n this.styles[name] = _style;\n return _style;\n }\n\n return style || Property.empty(this.document);\n }\n\n render(ctx) {\n // don't render display=none\n // don't render visibility=hidden\n if (this.getStyle('display').getString() === 'none' || this.getStyle('visibility').getString() === 'hidden') {\n return;\n }\n\n ctx.save();\n\n if (this.getStyle('mask').hasValue()) {\n // mask\n var mask = this.getStyle('mask').getDefinition();\n\n if (mask) {\n this.applyEffects(ctx);\n mask.apply(ctx, this);\n }\n } else if (this.getStyle('filter').getValue('none') !== 'none') {\n // filter\n var filter = this.getStyle('filter').getDefinition();\n\n if (filter) {\n this.applyEffects(ctx);\n filter.apply(ctx, this);\n }\n } else {\n this.setContext(ctx);\n this.renderChildren(ctx);\n this.clearContext(ctx);\n }\n\n ctx.restore();\n }\n\n setContext(_) {// NO RENDER\n }\n\n applyEffects(ctx) {\n // transform\n var transform = Transform.fromElement(this.document, this);\n\n if (transform) {\n transform.apply(ctx);\n } // clip\n\n\n var clipPathStyleProp = this.getStyle('clip-path', false, true);\n\n if (clipPathStyleProp.hasValue()) {\n var clip = clipPathStyleProp.getDefinition();\n\n if (clip) {\n clip.apply(ctx);\n }\n }\n }\n\n clearContext(_) {// NO RENDER\n }\n\n renderChildren(ctx) {\n this.children.forEach(child => {\n child.render(ctx);\n });\n }\n\n addChild(childNode) {\n var child = childNode instanceof Element ? childNode : this.document.createElement(childNode);\n child.parent = this;\n\n if (!Element.ignoreChildTypes.includes(child.type)) {\n this.children.push(child);\n }\n }\n\n matchesSelector(selector) {\n var _node$getAttribute;\n\n var {\n node\n } = this;\n\n if (typeof node.matches === 'function') {\n return node.matches(selector);\n }\n\n var styleClasses = (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'class');\n\n if (!styleClasses || styleClasses === '') {\n return false;\n }\n\n return styleClasses.split(' ').some(styleClass => \".\".concat(styleClass) === selector);\n }\n\n addStylesFromStyleDefinition() {\n var {\n styles,\n stylesSpecificity\n } = this.document;\n\n for (var selector in styles) {\n if (!selector.startsWith('@') && this.matchesSelector(selector)) {\n var style = styles[selector];\n var specificity = stylesSpecificity[selector];\n\n if (style) {\n for (var name in style) {\n var existingSpecificity = this.stylesSpecificity[name];\n\n if (typeof existingSpecificity === 'undefined') {\n existingSpecificity = '000';\n }\n\n if (specificity >= existingSpecificity) {\n this.styles[name] = style[name];\n this.stylesSpecificity[name] = specificity;\n }\n }\n }\n }\n }\n }\n\n removeStyles(element, ignoreStyles) {\n var toRestore = ignoreStyles.reduce((toRestore, name) => {\n var styleProp = element.getStyle(name);\n\n if (!styleProp.hasValue()) {\n return toRestore;\n }\n\n var value = styleProp.getString();\n styleProp.setValue('');\n return [...toRestore, [name, value]];\n }, []);\n return toRestore;\n }\n\n restoreStyles(element, styles) {\n styles.forEach(_ref => {\n var [name, value] = _ref;\n element.getStyle(name, true).setValue(value);\n });\n }\n\n isFirstChild() {\n var _this$parent;\n\n return ((_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.children.indexOf(this)) === 0;\n }\n\n}\nElement.ignoreChildTypes = ['title'];\n\nclass UnknownElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n }\n\n}\n\nfunction wrapFontFamily(fontFamily) {\n var trimmed = fontFamily.trim();\n return /^('|\")/.test(trimmed) ? trimmed : \"\\\"\".concat(trimmed, \"\\\"\");\n}\n\nfunction prepareFontFamily(fontFamily) {\n return typeof process === 'undefined' ? fontFamily : fontFamily.trim().split(',').map(wrapFontFamily).join(',');\n}\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\r\n * @param fontStyle\r\n * @returns CSS font style.\r\n */\n\n\nfunction prepareFontStyle(fontStyle) {\n if (!fontStyle) {\n return '';\n }\n\n var targetFontStyle = fontStyle.trim().toLowerCase();\n\n switch (targetFontStyle) {\n case 'normal':\n case 'italic':\n case 'oblique':\n case 'inherit':\n case 'initial':\n case 'unset':\n return targetFontStyle;\n\n default:\n if (/^oblique\\s+(-|)\\d+deg$/.test(targetFontStyle)) {\n return targetFontStyle;\n }\n\n return '';\n }\n}\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\r\n * @param fontWeight\r\n * @returns CSS font weight.\r\n */\n\n\nfunction prepareFontWeight(fontWeight) {\n if (!fontWeight) {\n return '';\n }\n\n var targetFontWeight = fontWeight.trim().toLowerCase();\n\n switch (targetFontWeight) {\n case 'normal':\n case 'bold':\n case 'lighter':\n case 'bolder':\n case 'inherit':\n case 'initial':\n case 'unset':\n return targetFontWeight;\n\n default:\n if (/^[\\d.]+$/.test(targetFontWeight)) {\n return targetFontWeight;\n }\n\n return '';\n }\n}\n\nclass Font {\n constructor(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) {\n var inheritFont = inherit ? typeof inherit === 'string' ? Font.parse(inherit) : inherit : {};\n this.fontFamily = fontFamily || inheritFont.fontFamily;\n this.fontSize = fontSize || inheritFont.fontSize;\n this.fontStyle = fontStyle || inheritFont.fontStyle;\n this.fontWeight = fontWeight || inheritFont.fontWeight;\n this.fontVariant = fontVariant || inheritFont.fontVariant;\n }\n\n static parse() {\n var font = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var inherit = arguments.length > 1 ? arguments[1] : undefined;\n var fontStyle = '';\n var fontVariant = '';\n var fontWeight = '';\n var fontSize = '';\n var fontFamily = '';\n var parts = compressSpaces(font).trim().split(' ');\n var set = {\n fontSize: false,\n fontStyle: false,\n fontWeight: false,\n fontVariant: false\n };\n parts.forEach(part => {\n switch (true) {\n case !set.fontStyle && Font.styles.includes(part):\n if (part !== 'inherit') {\n fontStyle = part;\n }\n\n set.fontStyle = true;\n break;\n\n case !set.fontVariant && Font.variants.includes(part):\n if (part !== 'inherit') {\n fontVariant = part;\n }\n\n set.fontStyle = true;\n set.fontVariant = true;\n break;\n\n case !set.fontWeight && Font.weights.includes(part):\n if (part !== 'inherit') {\n fontWeight = part;\n }\n\n set.fontStyle = true;\n set.fontVariant = true;\n set.fontWeight = true;\n break;\n\n case !set.fontSize:\n if (part !== 'inherit') {\n [fontSize] = part.split('/');\n }\n\n set.fontStyle = true;\n set.fontVariant = true;\n set.fontWeight = true;\n set.fontSize = true;\n break;\n\n default:\n if (part !== 'inherit') {\n fontFamily += part;\n }\n\n }\n });\n return new Font(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit);\n }\n\n toString() {\n return [prepareFontStyle(this.fontStyle), this.fontVariant, prepareFontWeight(this.fontWeight), this.fontSize, // Wrap fontFamily only on nodejs and only for canvas.ctx\n prepareFontFamily(this.fontFamily)].join(' ').trim();\n }\n\n}\nFont.styles = 'normal|italic|oblique|inherit';\nFont.variants = 'normal|small-caps|inherit';\nFont.weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit';\n\nclass BoundingBox {\n constructor() {\n var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.NaN;\n var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.NaN;\n var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.NaN;\n var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Number.NaN;\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n this.addPoint(x1, y1);\n this.addPoint(x2, y2);\n }\n\n get x() {\n return this.x1;\n }\n\n get y() {\n return this.y1;\n }\n\n get width() {\n return this.x2 - this.x1;\n }\n\n get height() {\n return this.y2 - this.y1;\n }\n\n addPoint(x, y) {\n if (typeof x !== 'undefined') {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x;\n this.x2 = x;\n }\n\n if (x < this.x1) {\n this.x1 = x;\n }\n\n if (x > this.x2) {\n this.x2 = x;\n }\n }\n\n if (typeof y !== 'undefined') {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y;\n this.y2 = y;\n }\n\n if (y < this.y1) {\n this.y1 = y;\n }\n\n if (y > this.y2) {\n this.y2 = y;\n }\n }\n }\n\n addX(x) {\n this.addPoint(x, null);\n }\n\n addY(y) {\n this.addPoint(null, y);\n }\n\n addBoundingBox(boundingBox) {\n if (!boundingBox) {\n return;\n }\n\n var {\n x1,\n y1,\n x2,\n y2\n } = boundingBox;\n this.addPoint(x1, y1);\n this.addPoint(x2, y2);\n }\n\n sumCubic(t, p0, p1, p2, p3) {\n return Math.pow(1 - t, 3) * p0 + 3 * Math.pow(1 - t, 2) * t * p1 + 3 * (1 - t) * Math.pow(t, 2) * p2 + Math.pow(t, 3) * p3;\n }\n\n bezierCurveAdd(forX, p0, p1, p2, p3) {\n var b = 6 * p0 - 12 * p1 + 6 * p2;\n var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n var c = 3 * p1 - 3 * p0;\n\n if (a === 0) {\n if (b === 0) {\n return;\n }\n\n var t = -c / b;\n\n if (0 < t && t < 1) {\n if (forX) {\n this.addX(this.sumCubic(t, p0, p1, p2, p3));\n } else {\n this.addY(this.sumCubic(t, p0, p1, p2, p3));\n }\n }\n\n return;\n }\n\n var b2ac = Math.pow(b, 2) - 4 * c * a;\n\n if (b2ac < 0) {\n return;\n }\n\n var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n\n if (0 < t1 && t1 < 1) {\n if (forX) {\n this.addX(this.sumCubic(t1, p0, p1, p2, p3));\n } else {\n this.addY(this.sumCubic(t1, p0, p1, p2, p3));\n }\n }\n\n var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n\n if (0 < t2 && t2 < 1) {\n if (forX) {\n this.addX(this.sumCubic(t2, p0, p1, p2, p3));\n } else {\n this.addY(this.sumCubic(t2, p0, p1, p2, p3));\n }\n }\n } // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\n\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p3x, p3y);\n this.bezierCurveAdd(true, p0x, p1x, p2x, p3x);\n this.bezierCurveAdd(false, p0y, p1y, p2y, p3y);\n }\n\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n var cp1x = p0x + 2 / 3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\n var cp1y = p0y + 2 / 3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\n\n var cp2x = cp1x + 1 / 3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\n var cp2y = cp1y + 1 / 3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\n\n this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y);\n }\n\n isPointInBox(x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this;\n return x1 <= x && x <= x2 && y1 <= y && y <= y2;\n }\n\n}\n\nclass PathParser extends SVGPathData {\n constructor(path) {\n super(path // Fix spaces after signs.\n .replace(/([+\\-.])\\s+/gm, '$1') // Remove invalid part.\n .replace(/[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*/g, ''));\n this.control = null;\n this.start = null;\n this.current = null;\n this.command = null;\n this.commands = this.commands;\n this.i = -1;\n this.previousCommand = null;\n this.points = [];\n this.angles = [];\n }\n\n reset() {\n this.i = -1;\n this.command = null;\n this.previousCommand = null;\n this.start = new Point(0, 0);\n this.control = new Point(0, 0);\n this.current = new Point(0, 0);\n this.points = [];\n this.angles = [];\n }\n\n isEnd() {\n var {\n i,\n commands\n } = this;\n return i >= commands.length - 1;\n }\n\n next() {\n var command = this.commands[++this.i];\n this.previousCommand = this.command;\n this.command = command;\n return command;\n }\n\n getPoint() {\n var xProp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'x';\n var yProp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'y';\n var point = new Point(this.command[xProp], this.command[yProp]);\n return this.makeAbsolute(point);\n }\n\n getAsControlPoint(xProp, yProp) {\n var point = this.getPoint(xProp, yProp);\n this.control = point;\n return point;\n }\n\n getAsCurrentPoint(xProp, yProp) {\n var point = this.getPoint(xProp, yProp);\n this.current = point;\n return point;\n }\n\n getReflectedControlPoint() {\n var previousCommand = this.previousCommand.type;\n\n if (previousCommand !== SVGPathData.CURVE_TO && previousCommand !== SVGPathData.SMOOTH_CURVE_TO && previousCommand !== SVGPathData.QUAD_TO && previousCommand !== SVGPathData.SMOOTH_QUAD_TO) {\n return this.current;\n } // reflect point\n\n\n var {\n current: {\n x: cx,\n y: cy\n },\n control: {\n x: ox,\n y: oy\n }\n } = this;\n var point = new Point(2 * cx - ox, 2 * cy - oy);\n return point;\n }\n\n makeAbsolute(point) {\n if (this.command.relative) {\n var {\n x,\n y\n } = this.current;\n point.x += x;\n point.y += y;\n }\n\n return point;\n }\n\n addMarker(point, from, priorTo) {\n var {\n points,\n angles\n } = this; // if the last angle isn't filled in because we didn't have this point yet ...\n\n if (priorTo && angles.length > 0 && !angles[angles.length - 1]) {\n angles[angles.length - 1] = points[points.length - 1].angleTo(priorTo);\n }\n\n this.addMarkerAngle(point, from ? from.angleTo(point) : null);\n }\n\n addMarkerAngle(point, angle) {\n this.points.push(point);\n this.angles.push(angle);\n }\n\n getMarkerPoints() {\n return this.points;\n }\n\n getMarkerAngles() {\n var {\n angles\n } = this;\n var len = angles.length;\n\n for (var i = 0; i < len; i++) {\n if (!angles[i]) {\n for (var j = i + 1; j < len; j++) {\n if (angles[j]) {\n angles[i] = angles[j];\n break;\n }\n }\n }\n }\n\n return angles;\n }\n\n}\n\nclass RenderedElement extends Element {\n constructor() {\n super(...arguments);\n this.modifiedEmSizeStack = false;\n }\n\n calculateOpacity() {\n var opacity = 1.0; // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n\n var element = this;\n\n while (element) {\n var opacityStyle = element.getStyle('opacity', false, true); // no ancestors on style call\n\n if (opacityStyle.hasValue(true)) {\n opacity *= opacityStyle.getNumber();\n }\n\n element = element.parent;\n }\n\n return opacity;\n }\n\n setContext(ctx) {\n var fromMeasure = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!fromMeasure) {\n // causes stack overflow when measuring text with gradients\n // fill\n var fillStyleProp = this.getStyle('fill');\n var fillOpacityStyleProp = this.getStyle('fill-opacity');\n var strokeStyleProp = this.getStyle('stroke');\n var strokeOpacityProp = this.getStyle('stroke-opacity');\n\n if (fillStyleProp.isUrlDefinition()) {\n var fillStyle = fillStyleProp.getFillStyleDefinition(this, fillOpacityStyleProp);\n\n if (fillStyle) {\n ctx.fillStyle = fillStyle;\n }\n } else if (fillStyleProp.hasValue()) {\n if (fillStyleProp.getString() === 'currentColor') {\n fillStyleProp.setValue(this.getStyle('color').getColor());\n }\n\n var _fillStyle = fillStyleProp.getColor();\n\n if (_fillStyle !== 'inherit') {\n ctx.fillStyle = _fillStyle === 'none' ? 'rgba(0,0,0,0)' : _fillStyle;\n }\n }\n\n if (fillOpacityStyleProp.hasValue()) {\n var _fillStyle2 = new Property(this.document, 'fill', ctx.fillStyle).addOpacity(fillOpacityStyleProp).getColor();\n\n ctx.fillStyle = _fillStyle2;\n } // stroke\n\n\n if (strokeStyleProp.isUrlDefinition()) {\n var strokeStyle = strokeStyleProp.getFillStyleDefinition(this, strokeOpacityProp);\n\n if (strokeStyle) {\n ctx.strokeStyle = strokeStyle;\n }\n } else if (strokeStyleProp.hasValue()) {\n if (strokeStyleProp.getString() === 'currentColor') {\n strokeStyleProp.setValue(this.getStyle('color').getColor());\n }\n\n var _strokeStyle = strokeStyleProp.getString();\n\n if (_strokeStyle !== 'inherit') {\n ctx.strokeStyle = _strokeStyle === 'none' ? 'rgba(0,0,0,0)' : _strokeStyle;\n }\n }\n\n if (strokeOpacityProp.hasValue()) {\n var _strokeStyle2 = new Property(this.document, 'stroke', ctx.strokeStyle).addOpacity(strokeOpacityProp).getString();\n\n ctx.strokeStyle = _strokeStyle2;\n }\n\n var strokeWidthStyleProp = this.getStyle('stroke-width');\n\n if (strokeWidthStyleProp.hasValue()) {\n var newLineWidth = strokeWidthStyleProp.getPixels();\n ctx.lineWidth = !newLineWidth ? PSEUDO_ZERO // browsers don't respect 0 (or node-canvas? :-)\n : newLineWidth;\n }\n\n var strokeLinecapStyleProp = this.getStyle('stroke-linecap');\n var strokeLinejoinStyleProp = this.getStyle('stroke-linejoin');\n var strokeMiterlimitProp = this.getStyle('stroke-miterlimit'); // NEED TEST\n // const pointOrderStyleProp = this.getStyle('paint-order');\n\n var strokeDasharrayStyleProp = this.getStyle('stroke-dasharray');\n var strokeDashoffsetProp = this.getStyle('stroke-dashoffset');\n\n if (strokeLinecapStyleProp.hasValue()) {\n ctx.lineCap = strokeLinecapStyleProp.getString();\n }\n\n if (strokeLinejoinStyleProp.hasValue()) {\n ctx.lineJoin = strokeLinejoinStyleProp.getString();\n }\n\n if (strokeMiterlimitProp.hasValue()) {\n ctx.miterLimit = strokeMiterlimitProp.getNumber();\n } // NEED TEST\n // if (pointOrderStyleProp.hasValue()) {\n // \t// ?\n // \tctx.paintOrder = pointOrderStyleProp.getValue();\n // }\n\n\n if (strokeDasharrayStyleProp.hasValue() && strokeDasharrayStyleProp.getString() !== 'none') {\n var gaps = toNumbers(strokeDasharrayStyleProp.getString());\n\n if (typeof ctx.setLineDash !== 'undefined') {\n ctx.setLineDash(gaps);\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.webkitLineDash !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.webkitLineDash = gaps;\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.mozDash !== 'undefined' && !(gaps.length === 1 && gaps[0] === 0)) {\n // @ts-expect-error Handle browser prefix.\n ctx.mozDash = gaps;\n }\n\n var offset = strokeDashoffsetProp.getPixels();\n\n if (typeof ctx.lineDashOffset !== 'undefined') {\n ctx.lineDashOffset = offset;\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.webkitLineDashOffset !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.webkitLineDashOffset = offset;\n } else // @ts-expect-error Handle browser prefix.\n if (typeof ctx.mozDashOffset !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.mozDashOffset = offset;\n }\n }\n } // font\n\n\n this.modifiedEmSizeStack = false;\n\n if (typeof ctx.font !== 'undefined') {\n var fontStyleProp = this.getStyle('font');\n var fontStyleStyleProp = this.getStyle('font-style');\n var fontVariantStyleProp = this.getStyle('font-variant');\n var fontWeightStyleProp = this.getStyle('font-weight');\n var fontSizeStyleProp = this.getStyle('font-size');\n var fontFamilyStyleProp = this.getStyle('font-family');\n var font = new Font(fontStyleStyleProp.getString(), fontVariantStyleProp.getString(), fontWeightStyleProp.getString(), fontSizeStyleProp.hasValue() ? \"\".concat(fontSizeStyleProp.getPixels(true), \"px\") : '', fontFamilyStyleProp.getString(), Font.parse(fontStyleProp.getString(), ctx.font));\n fontStyleStyleProp.setValue(font.fontStyle);\n fontVariantStyleProp.setValue(font.fontVariant);\n fontWeightStyleProp.setValue(font.fontWeight);\n fontSizeStyleProp.setValue(font.fontSize);\n fontFamilyStyleProp.setValue(font.fontFamily);\n ctx.font = font.toString();\n\n if (fontSizeStyleProp.isPixels()) {\n this.document.emSize = fontSizeStyleProp.getPixels();\n this.modifiedEmSizeStack = true;\n }\n }\n\n if (!fromMeasure) {\n // effects\n this.applyEffects(ctx); // opacity\n\n ctx.globalAlpha = this.calculateOpacity();\n }\n }\n\n clearContext(ctx) {\n super.clearContext(ctx);\n\n if (this.modifiedEmSizeStack) {\n this.document.popEmSize();\n }\n }\n\n}\n\nclass PathElement extends RenderedElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'path';\n this.pathParser = null;\n this.pathParser = new PathParser(this.getAttribute('d').getString());\n }\n\n path(ctx) {\n var {\n pathParser\n } = this;\n var boundingBox = new BoundingBox();\n pathParser.reset();\n\n if (ctx) {\n ctx.beginPath();\n }\n\n while (!pathParser.isEnd()) {\n switch (pathParser.next().type) {\n case PathParser.MOVE_TO:\n this.pathM(ctx, boundingBox);\n break;\n\n case PathParser.LINE_TO:\n this.pathL(ctx, boundingBox);\n break;\n\n case PathParser.HORIZ_LINE_TO:\n this.pathH(ctx, boundingBox);\n break;\n\n case PathParser.VERT_LINE_TO:\n this.pathV(ctx, boundingBox);\n break;\n\n case PathParser.CURVE_TO:\n this.pathC(ctx, boundingBox);\n break;\n\n case PathParser.SMOOTH_CURVE_TO:\n this.pathS(ctx, boundingBox);\n break;\n\n case PathParser.QUAD_TO:\n this.pathQ(ctx, boundingBox);\n break;\n\n case PathParser.SMOOTH_QUAD_TO:\n this.pathT(ctx, boundingBox);\n break;\n\n case PathParser.ARC:\n this.pathA(ctx, boundingBox);\n break;\n\n case PathParser.CLOSE_PATH:\n this.pathZ(ctx, boundingBox);\n break;\n }\n }\n\n return boundingBox;\n }\n\n getBoundingBox(_) {\n return this.path();\n }\n\n getMarkers() {\n var {\n pathParser\n } = this;\n var points = pathParser.getMarkerPoints();\n var angles = pathParser.getMarkerAngles();\n var markers = points.map((point, i) => [point, angles[i]]);\n return markers;\n }\n\n renderChildren(ctx) {\n this.path(ctx);\n this.document.screen.mouse.checkPath(this, ctx);\n var fillRuleStyleProp = this.getStyle('fill-rule');\n\n if (ctx.fillStyle !== '') {\n if (fillRuleStyleProp.getString('inherit') !== 'inherit') {\n ctx.fill(fillRuleStyleProp.getString());\n } else {\n ctx.fill();\n }\n }\n\n if (ctx.strokeStyle !== '') {\n if (this.getAttribute('vector-effect').getString() === 'non-scaling-stroke') {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.stroke();\n ctx.restore();\n } else {\n ctx.stroke();\n }\n }\n\n var markers = this.getMarkers();\n\n if (markers) {\n var markersLastIndex = markers.length - 1;\n var markerStartStyleProp = this.getStyle('marker-start');\n var markerMidStyleProp = this.getStyle('marker-mid');\n var markerEndStyleProp = this.getStyle('marker-end');\n\n if (markerStartStyleProp.isUrlDefinition()) {\n var marker = markerStartStyleProp.getDefinition();\n var [point, angle] = markers[0];\n marker.render(ctx, point, angle);\n }\n\n if (markerMidStyleProp.isUrlDefinition()) {\n var _marker = markerMidStyleProp.getDefinition();\n\n for (var i = 1; i < markersLastIndex; i++) {\n var [_point, _angle] = markers[i];\n\n _marker.render(ctx, _point, _angle);\n }\n }\n\n if (markerEndStyleProp.isUrlDefinition()) {\n var _marker2 = markerEndStyleProp.getDefinition();\n\n var [_point2, _angle2] = markers[markersLastIndex];\n\n _marker2.render(ctx, _point2, _angle2);\n }\n }\n }\n\n static pathM(pathParser) {\n var point = pathParser.getAsCurrentPoint();\n pathParser.start = pathParser.current;\n return {\n point\n };\n }\n\n pathM(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n point\n } = PathElement.pathM(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.moveTo(x, y);\n }\n }\n\n static pathL(pathParser) {\n var {\n current\n } = pathParser;\n var point = pathParser.getAsCurrentPoint();\n return {\n current,\n point\n };\n }\n\n pathL(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point\n } = PathElement.pathL(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point, current);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n }\n\n static pathH(pathParser) {\n var {\n current,\n command\n } = pathParser;\n var point = new Point((command.relative ? current.x : 0) + command.x, current.y);\n pathParser.current = point;\n return {\n current,\n point\n };\n }\n\n pathH(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point\n } = PathElement.pathH(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point, current);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n }\n\n static pathV(pathParser) {\n var {\n current,\n command\n } = pathParser;\n var point = new Point(current.x, (command.relative ? current.y : 0) + command.y);\n pathParser.current = point;\n return {\n current,\n point\n };\n }\n\n pathV(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point\n } = PathElement.pathV(pathParser);\n var {\n x,\n y\n } = point;\n pathParser.addMarker(point, current);\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n }\n\n static pathC(pathParser) {\n var {\n current\n } = pathParser;\n var point = pathParser.getPoint('x1', 'y1');\n var controlPoint = pathParser.getAsControlPoint('x2', 'y2');\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n point,\n controlPoint,\n currentPoint\n };\n }\n\n pathC(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, point);\n boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathS(pathParser) {\n var {\n current\n } = pathParser;\n var point = pathParser.getReflectedControlPoint();\n var controlPoint = pathParser.getAsControlPoint('x2', 'y2');\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n point,\n controlPoint,\n currentPoint\n };\n }\n\n pathS(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, point);\n boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathQ(pathParser) {\n var {\n current\n } = pathParser;\n var controlPoint = pathParser.getAsControlPoint('x1', 'y1');\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n controlPoint,\n currentPoint\n };\n }\n\n pathQ(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, controlPoint);\n boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathT(pathParser) {\n var {\n current\n } = pathParser;\n var controlPoint = pathParser.getReflectedControlPoint();\n pathParser.control = controlPoint;\n var currentPoint = pathParser.getAsCurrentPoint();\n return {\n current,\n controlPoint,\n currentPoint\n };\n }\n\n pathT(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser);\n pathParser.addMarker(currentPoint, controlPoint, controlPoint);\n boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n\n if (ctx) {\n ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n }\n\n static pathA(pathParser) {\n var {\n current,\n command\n } = pathParser;\n var {\n rX,\n rY,\n xRot,\n lArcFlag,\n sweepFlag\n } = command;\n var xAxisRotation = xRot * (Math.PI / 180.0);\n var currentPoint = pathParser.getAsCurrentPoint(); // Conversion from endpoint to center parameterization\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n // x1', y1'\n\n var currp = new Point(Math.cos(xAxisRotation) * (current.x - currentPoint.x) / 2.0 + Math.sin(xAxisRotation) * (current.y - currentPoint.y) / 2.0, -Math.sin(xAxisRotation) * (current.x - currentPoint.x) / 2.0 + Math.cos(xAxisRotation) * (current.y - currentPoint.y) / 2.0); // adjust radii\n\n var l = Math.pow(currp.x, 2) / Math.pow(rX, 2) + Math.pow(currp.y, 2) / Math.pow(rY, 2);\n\n if (l > 1) {\n rX *= Math.sqrt(l);\n rY *= Math.sqrt(l);\n } // cx', cy'\n\n\n var s = (lArcFlag === sweepFlag ? -1 : 1) * Math.sqrt((Math.pow(rX, 2) * Math.pow(rY, 2) - Math.pow(rX, 2) * Math.pow(currp.y, 2) - Math.pow(rY, 2) * Math.pow(currp.x, 2)) / (Math.pow(rX, 2) * Math.pow(currp.y, 2) + Math.pow(rY, 2) * Math.pow(currp.x, 2)));\n\n if (isNaN(s)) {\n s = 0;\n }\n\n var cpp = new Point(s * rX * currp.y / rY, s * -rY * currp.x / rX); // cx, cy\n\n var centp = new Point((current.x + currentPoint.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, (current.y + currentPoint.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y); // initial angle\n\n var a1 = vectorsAngle([1, 0], [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY]); // θ1\n // angle delta\n\n var u = [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY];\n var v = [(-currp.x - cpp.x) / rX, (-currp.y - cpp.y) / rY];\n var ad = vectorsAngle(u, v); // Δθ\n\n if (vectorsRatio(u, v) <= -1) {\n ad = Math.PI;\n }\n\n if (vectorsRatio(u, v) >= 1) {\n ad = 0;\n }\n\n return {\n currentPoint,\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n };\n }\n\n pathA(ctx, boundingBox) {\n var {\n pathParser\n } = this;\n var {\n currentPoint,\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n } = PathElement.pathA(pathParser); // for markers\n\n var dir = 1 - sweepFlag ? 1.0 : -1.0;\n var ah = a1 + dir * (ad / 2.0);\n var halfWay = new Point(centp.x + rX * Math.cos(ah), centp.y + rY * Math.sin(ah));\n pathParser.addMarkerAngle(halfWay, ah - dir * Math.PI / 2);\n pathParser.addMarkerAngle(currentPoint, ah - dir * Math.PI);\n boundingBox.addPoint(currentPoint.x, currentPoint.y); // TODO: this is too naive, make it better\n\n if (ctx && !isNaN(a1) && !isNaN(ad)) {\n var r = rX > rY ? rX : rY;\n var sx = rX > rY ? 1 : rX / rY;\n var sy = rX > rY ? rY / rX : 1;\n ctx.translate(centp.x, centp.y);\n ctx.rotate(xAxisRotation);\n ctx.scale(sx, sy);\n ctx.arc(0, 0, r, a1, a1 + ad, Boolean(1 - sweepFlag));\n ctx.scale(1 / sx, 1 / sy);\n ctx.rotate(-xAxisRotation);\n ctx.translate(-centp.x, -centp.y);\n }\n }\n\n static pathZ(pathParser) {\n pathParser.current = pathParser.start;\n }\n\n pathZ(ctx, boundingBox) {\n PathElement.pathZ(this.pathParser);\n\n if (ctx) {\n // only close path if it is not a straight line\n if (boundingBox.x1 !== boundingBox.x2 && boundingBox.y1 !== boundingBox.y2) {\n ctx.closePath();\n }\n }\n }\n\n}\n\nclass GlyphElement extends PathElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'glyph';\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber();\n this.unicode = this.getAttribute('unicode').getString();\n this.arabicForm = this.getAttribute('arabic-form').getString();\n }\n\n}\n\nclass TextElement extends RenderedElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, new.target === TextElement ? true : captureTextNodes);\n this.type = 'text';\n this.x = 0;\n this.y = 0;\n this.measureCache = -1;\n }\n\n setContext(ctx) {\n var fromMeasure = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n super.setContext(ctx, fromMeasure);\n var textBaseline = this.getStyle('dominant-baseline').getTextBaseline() || this.getStyle('alignment-baseline').getTextBaseline();\n\n if (textBaseline) {\n ctx.textBaseline = textBaseline;\n }\n }\n\n initializeCoordinates() {\n this.x = 0;\n this.y = 0;\n this.leafTexts = [];\n this.textChunkStart = 0;\n this.minX = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n }\n\n getBoundingBox(ctx) {\n if (this.type !== 'text') {\n return this.getTElementBoundingBox(ctx);\n } // first, calculate child positions\n\n\n this.initializeCoordinates();\n this.adjustChildCoordinatesRecursive(ctx);\n var boundingBox = null; // then calculate bounding box\n\n this.children.forEach((_, i) => {\n var childBoundingBox = this.getChildBoundingBox(ctx, this, this, i);\n\n if (!boundingBox) {\n boundingBox = childBoundingBox;\n } else {\n boundingBox.addBoundingBox(childBoundingBox);\n }\n });\n return boundingBox;\n }\n\n getFontSize() {\n var {\n document,\n parent\n } = this;\n var inheritFontSize = Font.parse(document.ctx.font).fontSize;\n var fontSize = parent.getStyle('font-size').getNumber(inheritFontSize);\n return fontSize;\n }\n\n getTElementBoundingBox(ctx) {\n var fontSize = this.getFontSize();\n return new BoundingBox(this.x, this.y - fontSize, this.x + this.measureText(ctx), this.y);\n }\n\n getGlyph(font, text, i) {\n var char = text[i];\n var glyph = null;\n\n if (font.isArabic) {\n var len = text.length;\n var prevChar = text[i - 1];\n var nextChar = text[i + 1];\n var arabicForm = 'isolated';\n\n if ((i === 0 || prevChar === ' ') && i < len - 1 && nextChar !== ' ') {\n arabicForm = 'terminal';\n }\n\n if (i > 0 && prevChar !== ' ' && i < len - 1 && nextChar !== ' ') {\n arabicForm = 'medial';\n }\n\n if (i > 0 && prevChar !== ' ' && (i === len - 1 || nextChar === ' ')) {\n arabicForm = 'initial';\n }\n\n if (typeof font.glyphs[char] !== 'undefined') {\n // NEED TEST\n var maybeGlyph = font.glyphs[char];\n glyph = maybeGlyph instanceof GlyphElement ? maybeGlyph : maybeGlyph[arabicForm];\n }\n } else {\n glyph = font.glyphs[char];\n }\n\n if (!glyph) {\n glyph = font.missingGlyph;\n }\n\n return glyph;\n }\n\n getText() {\n return '';\n }\n\n getTextFromNode(node) {\n var textNode = node || this.node;\n var childNodes = Array.from(textNode.parentNode.childNodes);\n var index = childNodes.indexOf(textNode);\n var lastIndex = childNodes.length - 1;\n var text = compressSpaces( // textNode.value\n // || textNode.text\n textNode.textContent || '');\n\n if (index === 0) {\n text = trimLeft(text);\n }\n\n if (index === lastIndex) {\n text = trimRight(text);\n }\n\n return text;\n }\n\n renderChildren(ctx) {\n if (this.type !== 'text') {\n this.renderTElementChildren(ctx);\n return;\n } // first, calculate child positions\n\n\n this.initializeCoordinates();\n this.adjustChildCoordinatesRecursive(ctx); // then render\n\n this.children.forEach((_, i) => {\n this.renderChild(ctx, this, this, i);\n });\n var {\n mouse\n } = this.document.screen; // Do not calc bounding box if mouse is not working.\n\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(this, this.getBoundingBox(ctx));\n }\n }\n\n renderTElementChildren(ctx) {\n var {\n document,\n parent\n } = this;\n var renderText = this.getText();\n var customFont = parent.getStyle('font-family').getDefinition();\n\n if (customFont) {\n var {\n unitsPerEm\n } = customFont.fontFace;\n var ctxFont = Font.parse(document.ctx.font);\n var fontSize = parent.getStyle('font-size').getNumber(ctxFont.fontSize);\n var fontStyle = parent.getStyle('font-style').getString(ctxFont.fontStyle);\n var scale = fontSize / unitsPerEm;\n var text = customFont.isRTL ? renderText.split('').reverse().join('') : renderText;\n var dx = toNumbers(parent.getAttribute('dx').getString());\n var len = text.length;\n\n for (var i = 0; i < len; i++) {\n var glyph = this.getGlyph(customFont, text, i);\n ctx.translate(this.x, this.y);\n ctx.scale(scale, -scale);\n var lw = ctx.lineWidth;\n ctx.lineWidth = ctx.lineWidth * unitsPerEm / fontSize;\n\n if (fontStyle === 'italic') {\n ctx.transform(1, 0, .4, 1, 0, 0);\n }\n\n glyph.render(ctx);\n\n if (fontStyle === 'italic') {\n ctx.transform(1, 0, -.4, 1, 0, 0);\n }\n\n ctx.lineWidth = lw;\n ctx.scale(1 / scale, -1 / scale);\n ctx.translate(-this.x, -this.y);\n this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / unitsPerEm;\n\n if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n this.x += dx[i];\n }\n }\n\n return;\n }\n\n var {\n x,\n y\n } = this; // NEED TEST\n // if (ctx.paintOrder === 'stroke') {\n // \tif (ctx.strokeStyle) {\n // \t\tctx.strokeText(renderText, x, y);\n // \t}\n // \tif (ctx.fillStyle) {\n // \t\tctx.fillText(renderText, x, y);\n // \t}\n // } else {\n\n if (ctx.fillStyle) {\n ctx.fillText(renderText, x, y);\n }\n\n if (ctx.strokeStyle) {\n ctx.strokeText(renderText, x, y);\n } // }\n\n }\n\n applyAnchoring() {\n if (this.textChunkStart >= this.leafTexts.length) {\n return;\n } // This is basically the \"Apply anchoring\" part of https://www.w3.org/TR/SVG2/text.html#TextLayoutAlgorithm.\n // The difference is that we apply the anchoring as soon as a chunk is finished. This saves some extra looping.\n // Vertical text is not supported.\n\n\n var firstElement = this.leafTexts[this.textChunkStart];\n var textAnchor = firstElement.getStyle('text-anchor').getString('start');\n var isRTL = false; // we treat RTL like LTR\n\n var shift = 0;\n\n if (textAnchor === 'start' && !isRTL || textAnchor === 'end' && isRTL) {\n shift = firstElement.x - this.minX;\n } else if (textAnchor === 'end' && !isRTL || textAnchor === 'start' && isRTL) {\n shift = firstElement.x - this.maxX;\n } else {\n shift = firstElement.x - (this.minX + this.maxX) / 2;\n }\n\n for (var i = this.textChunkStart; i < this.leafTexts.length; i++) {\n this.leafTexts[i].x += shift;\n } // start new chunk\n\n\n this.minX = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n this.textChunkStart = this.leafTexts.length;\n }\n\n adjustChildCoordinatesRecursive(ctx) {\n this.children.forEach((_, i) => {\n this.adjustChildCoordinatesRecursiveCore(ctx, this, this, i);\n });\n this.applyAnchoring();\n }\n\n adjustChildCoordinatesRecursiveCore(ctx, textParent, parent, i) {\n var child = parent.children[i];\n\n if (child.children.length > 0) {\n child.children.forEach((_, i) => {\n textParent.adjustChildCoordinatesRecursiveCore(ctx, textParent, child, i);\n });\n } else {\n // only leafs are relevant\n this.adjustChildCoordinates(ctx, textParent, parent, i);\n }\n }\n\n adjustChildCoordinates(ctx, textParent, parent, i) {\n var child = parent.children[i];\n\n if (typeof child.measureText !== 'function') {\n return child;\n }\n\n ctx.save();\n child.setContext(ctx, true);\n var xAttr = child.getAttribute('x');\n var yAttr = child.getAttribute('y');\n var dxAttr = child.getAttribute('dx');\n var dyAttr = child.getAttribute('dy');\n var customFont = child.getStyle('font-family').getDefinition();\n var isRTL = Boolean(customFont) && customFont.isRTL;\n\n if (i === 0) {\n // First children inherit attributes from parent(s). Positional attributes\n // are only inherited from a parent to it's first child.\n if (!xAttr.hasValue()) {\n xAttr.setValue(child.getInheritedAttribute('x'));\n }\n\n if (!yAttr.hasValue()) {\n yAttr.setValue(child.getInheritedAttribute('y'));\n }\n\n if (!dxAttr.hasValue()) {\n dxAttr.setValue(child.getInheritedAttribute('dx'));\n }\n\n if (!dyAttr.hasValue()) {\n dyAttr.setValue(child.getInheritedAttribute('dy'));\n }\n }\n\n var width = child.measureText(ctx);\n\n if (isRTL) {\n textParent.x -= width;\n }\n\n if (xAttr.hasValue()) {\n // an \"x\" attribute marks the start of a new chunk\n textParent.applyAnchoring();\n child.x = xAttr.getPixels('x');\n\n if (dxAttr.hasValue()) {\n child.x += dxAttr.getPixels('x');\n }\n } else {\n if (dxAttr.hasValue()) {\n textParent.x += dxAttr.getPixels('x');\n }\n\n child.x = textParent.x;\n }\n\n textParent.x = child.x;\n\n if (!isRTL) {\n textParent.x += width;\n }\n\n if (yAttr.hasValue()) {\n child.y = yAttr.getPixels('y');\n\n if (dyAttr.hasValue()) {\n child.y += dyAttr.getPixels('y');\n }\n } else {\n if (dyAttr.hasValue()) {\n textParent.y += dyAttr.getPixels('y');\n }\n\n child.y = textParent.y;\n }\n\n textParent.y = child.y; // update the current chunk and it's bounds\n\n textParent.leafTexts.push(child);\n textParent.minX = Math.min(textParent.minX, child.x, child.x + width);\n textParent.maxX = Math.max(textParent.maxX, child.x, child.x + width);\n child.clearContext(ctx);\n ctx.restore();\n return child;\n }\n\n getChildBoundingBox(ctx, textParent, parent, i) {\n var child = parent.children[i]; // not a text node?\n\n if (typeof child.getBoundingBox !== 'function') {\n return null;\n }\n\n var boundingBox = child.getBoundingBox(ctx);\n\n if (!boundingBox) {\n return null;\n }\n\n child.children.forEach((_, i) => {\n var childBoundingBox = textParent.getChildBoundingBox(ctx, textParent, child, i);\n boundingBox.addBoundingBox(childBoundingBox);\n });\n return boundingBox;\n }\n\n renderChild(ctx, textParent, parent, i) {\n var child = parent.children[i];\n child.render(ctx);\n child.children.forEach((_, i) => {\n textParent.renderChild(ctx, textParent, child, i);\n });\n }\n\n measureText(ctx) {\n var {\n measureCache\n } = this;\n\n if (~measureCache) {\n return measureCache;\n }\n\n var renderText = this.getText();\n var measure = this.measureTargetText(ctx, renderText);\n this.measureCache = measure;\n return measure;\n }\n\n measureTargetText(ctx, targetText) {\n if (!targetText.length) {\n return 0;\n }\n\n var {\n parent\n } = this;\n var customFont = parent.getStyle('font-family').getDefinition();\n\n if (customFont) {\n var fontSize = this.getFontSize();\n var text = customFont.isRTL ? targetText.split('').reverse().join('') : targetText;\n var dx = toNumbers(parent.getAttribute('dx').getString());\n var len = text.length;\n var _measure = 0;\n\n for (var i = 0; i < len; i++) {\n var glyph = this.getGlyph(customFont, text, i);\n _measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;\n\n if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n _measure += dx[i];\n }\n }\n\n return _measure;\n }\n\n if (!ctx.measureText) {\n return targetText.length * 10;\n }\n\n ctx.save();\n this.setContext(ctx, true);\n var {\n width: measure\n } = ctx.measureText(targetText);\n this.clearContext(ctx);\n ctx.restore();\n return measure;\n }\n /**\r\n * Inherits positional attributes from {@link TextElement} parent(s). Attributes\r\n * are only inherited from a parent to its first child.\r\n * @param name - The attribute name.\r\n * @returns The attribute value or null.\r\n */\n\n\n getInheritedAttribute(name) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n var current = this;\n\n while (current instanceof TextElement && current.isFirstChild()) {\n var parentAttr = current.parent.getAttribute(name);\n\n if (parentAttr.hasValue(true)) {\n return parentAttr.getValue('0');\n }\n\n current = current.parent;\n }\n\n return null;\n }\n\n}\n\nclass TSpanElement extends TextElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, new.target === TSpanElement ? true : captureTextNodes);\n this.type = 'tspan'; // if this node has children, then they own the text\n\n this.text = this.children.length > 0 ? '' : this.getTextFromNode();\n }\n\n getText() {\n return this.text;\n }\n\n}\n\nclass TextNode extends TSpanElement {\n constructor() {\n super(...arguments);\n this.type = 'textNode';\n }\n\n}\n\nclass SVGElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'svg';\n this.root = false;\n }\n\n setContext(ctx) {\n var _this$node$parentNode;\n\n var {\n document\n } = this;\n var {\n screen,\n window\n } = document;\n var canvas = ctx.canvas;\n screen.setDefaults(ctx);\n\n if (canvas.style && typeof ctx.font !== 'undefined' && window && typeof window.getComputedStyle !== 'undefined') {\n ctx.font = window.getComputedStyle(canvas).getPropertyValue('font');\n var fontSizeProp = new Property(document, 'fontSize', Font.parse(ctx.font).fontSize);\n\n if (fontSizeProp.hasValue()) {\n document.rootEmSize = fontSizeProp.getPixels('y');\n document.emSize = document.rootEmSize;\n }\n } // create new view port\n\n\n if (!this.getAttribute('x').hasValue()) {\n this.getAttribute('x', true).setValue(0);\n }\n\n if (!this.getAttribute('y').hasValue()) {\n this.getAttribute('y', true).setValue(0);\n }\n\n var {\n width,\n height\n } = screen.viewPort;\n\n if (!this.getStyle('width').hasValue()) {\n this.getStyle('width', true).setValue('100%');\n }\n\n if (!this.getStyle('height').hasValue()) {\n this.getStyle('height', true).setValue('100%');\n }\n\n if (!this.getStyle('color').hasValue()) {\n this.getStyle('color', true).setValue('black');\n }\n\n var refXAttr = this.getAttribute('refX');\n var refYAttr = this.getAttribute('refY');\n var viewBoxAttr = this.getAttribute('viewBox');\n var viewBox = viewBoxAttr.hasValue() ? toNumbers(viewBoxAttr.getString()) : null;\n var clip = !this.root && this.getStyle('overflow').getValue('hidden') !== 'visible';\n var minX = 0;\n var minY = 0;\n var clipX = 0;\n var clipY = 0;\n\n if (viewBox) {\n minX = viewBox[0];\n minY = viewBox[1];\n }\n\n if (!this.root) {\n width = this.getStyle('width').getPixels('x');\n height = this.getStyle('height').getPixels('y');\n\n if (this.type === 'marker') {\n clipX = minX;\n clipY = minY;\n minX = 0;\n minY = 0;\n }\n }\n\n screen.viewPort.setCurrent(width, height); // Default value of transform-origin is center only for root SVG elements\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform-origin\n\n if (this.node // is not temporary SVGElement\n && (!this.parent || ((_this$node$parentNode = this.node.parentNode) === null || _this$node$parentNode === void 0 ? void 0 : _this$node$parentNode.nodeName) === 'foreignObject') && this.getStyle('transform', false, true).hasValue() && !this.getStyle('transform-origin', false, true).hasValue()) {\n this.getStyle('transform-origin', true, true).setValue('50% 50%');\n }\n\n super.setContext(ctx);\n ctx.translate(this.getAttribute('x').getPixels('x'), this.getAttribute('y').getPixels('y'));\n\n if (viewBox) {\n width = viewBox[2];\n height = viewBox[3];\n }\n\n document.setViewBox({\n ctx,\n aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n width: screen.viewPort.width,\n desiredWidth: width,\n height: screen.viewPort.height,\n desiredHeight: height,\n minX,\n minY,\n refX: refXAttr.getValue(),\n refY: refYAttr.getValue(),\n clip,\n clipX,\n clipY\n });\n\n if (viewBox) {\n screen.viewPort.removeCurrent();\n screen.viewPort.setCurrent(width, height);\n }\n }\n\n clearContext(ctx) {\n super.clearContext(ctx);\n this.document.screen.viewPort.removeCurrent();\n }\n /**\r\n * Resize SVG to fit in given size.\r\n * @param width\r\n * @param height\r\n * @param preserveAspectRatio\r\n */\n\n\n resize(width) {\n var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : width;\n var preserveAspectRatio = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var widthAttr = this.getAttribute('width', true);\n var heightAttr = this.getAttribute('height', true);\n var viewBoxAttr = this.getAttribute('viewBox');\n var styleAttr = this.getAttribute('style');\n var originWidth = widthAttr.getNumber(0);\n var originHeight = heightAttr.getNumber(0);\n\n if (preserveAspectRatio) {\n if (typeof preserveAspectRatio === 'string') {\n this.getAttribute('preserveAspectRatio', true).setValue(preserveAspectRatio);\n } else {\n var preserveAspectRatioAttr = this.getAttribute('preserveAspectRatio');\n\n if (preserveAspectRatioAttr.hasValue()) {\n preserveAspectRatioAttr.setValue(preserveAspectRatioAttr.getString().replace(/^\\s*(\\S.*\\S)\\s*$/, '$1'));\n }\n }\n }\n\n widthAttr.setValue(width);\n heightAttr.setValue(height);\n\n if (!viewBoxAttr.hasValue()) {\n viewBoxAttr.setValue(\"0 0 \".concat(originWidth || width, \" \").concat(originHeight || height));\n }\n\n if (styleAttr.hasValue()) {\n var widthStyle = this.getStyle('width');\n var heightStyle = this.getStyle('height');\n\n if (widthStyle.hasValue()) {\n widthStyle.setValue(\"\".concat(width, \"px\"));\n }\n\n if (heightStyle.hasValue()) {\n heightStyle.setValue(\"\".concat(height, \"px\"));\n }\n }\n }\n\n}\n\nclass RectElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'rect';\n }\n\n path(ctx) {\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width', false, true).getPixels('x');\n var height = this.getStyle('height', false, true).getPixels('y');\n var rxAttr = this.getAttribute('rx');\n var ryAttr = this.getAttribute('ry');\n var rx = rxAttr.getPixels('x');\n var ry = ryAttr.getPixels('y');\n\n if (rxAttr.hasValue() && !ryAttr.hasValue()) {\n ry = rx;\n }\n\n if (ryAttr.hasValue() && !rxAttr.hasValue()) {\n rx = ry;\n }\n\n rx = Math.min(rx, width / 2.0);\n ry = Math.min(ry, height / 2.0);\n\n if (ctx) {\n var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n ctx.beginPath(); // always start the path so we don't fill prior paths\n\n if (height > 0 && width > 0) {\n ctx.moveTo(x + rx, y);\n ctx.lineTo(x + width - rx, y);\n ctx.bezierCurveTo(x + width - rx + KAPPA * rx, y, x + width, y + ry - KAPPA * ry, x + width, y + ry);\n ctx.lineTo(x + width, y + height - ry);\n ctx.bezierCurveTo(x + width, y + height - ry + KAPPA * ry, x + width - rx + KAPPA * rx, y + height, x + width - rx, y + height);\n ctx.lineTo(x + rx, y + height);\n ctx.bezierCurveTo(x + rx - KAPPA * rx, y + height, x, y + height - ry + KAPPA * ry, x, y + height - ry);\n ctx.lineTo(x, y + ry);\n ctx.bezierCurveTo(x, y + ry - KAPPA * ry, x + rx - KAPPA * rx, y, x + rx, y);\n ctx.closePath();\n }\n }\n\n return new BoundingBox(x, y, x + width, y + height);\n }\n\n getMarkers() {\n return null;\n }\n\n}\n\nclass CircleElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'circle';\n }\n\n path(ctx) {\n var cx = this.getAttribute('cx').getPixels('x');\n var cy = this.getAttribute('cy').getPixels('y');\n var r = this.getAttribute('r').getPixels();\n\n if (ctx && r > 0) {\n ctx.beginPath();\n ctx.arc(cx, cy, r, 0, Math.PI * 2, false);\n ctx.closePath();\n }\n\n return new BoundingBox(cx - r, cy - r, cx + r, cy + r);\n }\n\n getMarkers() {\n return null;\n }\n\n}\n\nclass EllipseElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'ellipse';\n }\n\n path(ctx) {\n var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);\n var rx = this.getAttribute('rx').getPixels('x');\n var ry = this.getAttribute('ry').getPixels('y');\n var cx = this.getAttribute('cx').getPixels('x');\n var cy = this.getAttribute('cy').getPixels('y');\n\n if (ctx && rx > 0 && ry > 0) {\n ctx.beginPath();\n ctx.moveTo(cx + rx, cy);\n ctx.bezierCurveTo(cx + rx, cy + KAPPA * ry, cx + KAPPA * rx, cy + ry, cx, cy + ry);\n ctx.bezierCurveTo(cx - KAPPA * rx, cy + ry, cx - rx, cy + KAPPA * ry, cx - rx, cy);\n ctx.bezierCurveTo(cx - rx, cy - KAPPA * ry, cx - KAPPA * rx, cy - ry, cx, cy - ry);\n ctx.bezierCurveTo(cx + KAPPA * rx, cy - ry, cx + rx, cy - KAPPA * ry, cx + rx, cy);\n ctx.closePath();\n }\n\n return new BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\n }\n\n getMarkers() {\n return null;\n }\n\n}\n\nclass LineElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'line';\n }\n\n getPoints() {\n return [new Point(this.getAttribute('x1').getPixels('x'), this.getAttribute('y1').getPixels('y')), new Point(this.getAttribute('x2').getPixels('x'), this.getAttribute('y2').getPixels('y'))];\n }\n\n path(ctx) {\n var [{\n x: x0,\n y: y0\n }, {\n x: x1,\n y: y1\n }] = this.getPoints();\n\n if (ctx) {\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n }\n\n return new BoundingBox(x0, y0, x1, y1);\n }\n\n getMarkers() {\n var [p0, p1] = this.getPoints();\n var a = p0.angleTo(p1);\n return [[p0, a], [p1, a]];\n }\n\n}\n\nclass PolylineElement extends PathElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'polyline';\n this.points = [];\n this.points = Point.parsePath(this.getAttribute('points').getString());\n }\n\n path(ctx) {\n var {\n points\n } = this;\n var [{\n x: x0,\n y: y0\n }] = points;\n var boundingBox = new BoundingBox(x0, y0);\n\n if (ctx) {\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n }\n\n points.forEach(_ref => {\n var {\n x,\n y\n } = _ref;\n boundingBox.addPoint(x, y);\n\n if (ctx) {\n ctx.lineTo(x, y);\n }\n });\n return boundingBox;\n }\n\n getMarkers() {\n var {\n points\n } = this;\n var lastIndex = points.length - 1;\n var markers = [];\n points.forEach((point, i) => {\n if (i === lastIndex) {\n return;\n }\n\n markers.push([point, point.angleTo(points[i + 1])]);\n });\n\n if (markers.length > 0) {\n markers.push([points[points.length - 1], markers[markers.length - 1][1]]);\n }\n\n return markers;\n }\n\n}\n\nclass PolygonElement extends PolylineElement {\n constructor() {\n super(...arguments);\n this.type = 'polygon';\n }\n\n path(ctx) {\n var boundingBox = super.path(ctx);\n var [{\n x,\n y\n }] = this.points;\n\n if (ctx) {\n ctx.lineTo(x, y);\n ctx.closePath();\n }\n\n return boundingBox;\n }\n\n}\n\nclass PatternElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'pattern';\n }\n\n createPattern(ctx, _, parentOpacityProp) {\n var width = this.getStyle('width').getPixels('x', true);\n var height = this.getStyle('height').getPixels('y', true); // render me using a temporary svg element\n\n var patternSvg = new SVGElement(this.document, null);\n patternSvg.attributes.viewBox = new Property(this.document, 'viewBox', this.getAttribute('viewBox').getValue());\n patternSvg.attributes.width = new Property(this.document, 'width', \"\".concat(width, \"px\"));\n patternSvg.attributes.height = new Property(this.document, 'height', \"\".concat(height, \"px\"));\n patternSvg.attributes.transform = new Property(this.document, 'transform', this.getAttribute('patternTransform').getValue());\n patternSvg.children = this.children;\n var patternCanvas = this.document.createCanvas(width, height);\n var patternCtx = patternCanvas.getContext('2d');\n var xAttr = this.getAttribute('x');\n var yAttr = this.getAttribute('y');\n\n if (xAttr.hasValue() && yAttr.hasValue()) {\n patternCtx.translate(xAttr.getPixels('x', true), yAttr.getPixels('y', true));\n }\n\n if (parentOpacityProp.hasValue()) {\n this.styles['fill-opacity'] = parentOpacityProp;\n } else {\n Reflect.deleteProperty(this.styles, 'fill-opacity');\n } // render 3x3 grid so when we transform there's no white space on edges\n\n\n for (var x = -1; x <= 1; x++) {\n for (var y = -1; y <= 1; y++) {\n patternCtx.save();\n patternSvg.attributes.x = new Property(this.document, 'x', x * patternCanvas.width);\n patternSvg.attributes.y = new Property(this.document, 'y', y * patternCanvas.height);\n patternSvg.render(patternCtx);\n patternCtx.restore();\n }\n }\n\n var pattern = ctx.createPattern(patternCanvas, 'repeat');\n return pattern;\n }\n\n}\n\nclass MarkerElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'marker';\n }\n\n render(ctx, point, angle) {\n if (!point) {\n return;\n }\n\n var {\n x,\n y\n } = point;\n var orient = this.getAttribute('orient').getString('auto');\n var markerUnits = this.getAttribute('markerUnits').getString('strokeWidth');\n ctx.translate(x, y);\n\n if (orient === 'auto') {\n ctx.rotate(angle);\n }\n\n if (markerUnits === 'strokeWidth') {\n ctx.scale(ctx.lineWidth, ctx.lineWidth);\n }\n\n ctx.save(); // render me using a temporary svg element\n\n var markerSvg = new SVGElement(this.document, null);\n markerSvg.type = this.type;\n markerSvg.attributes.viewBox = new Property(this.document, 'viewBox', this.getAttribute('viewBox').getValue());\n markerSvg.attributes.refX = new Property(this.document, 'refX', this.getAttribute('refX').getValue());\n markerSvg.attributes.refY = new Property(this.document, 'refY', this.getAttribute('refY').getValue());\n markerSvg.attributes.width = new Property(this.document, 'width', this.getAttribute('markerWidth').getValue());\n markerSvg.attributes.height = new Property(this.document, 'height', this.getAttribute('markerHeight').getValue());\n markerSvg.attributes.overflow = new Property(this.document, 'overflow', this.getAttribute('overflow').getValue());\n markerSvg.attributes.fill = new Property(this.document, 'fill', this.getAttribute('fill').getColor('black'));\n markerSvg.attributes.stroke = new Property(this.document, 'stroke', this.getAttribute('stroke').getValue('none'));\n markerSvg.children = this.children;\n markerSvg.render(ctx);\n ctx.restore();\n\n if (markerUnits === 'strokeWidth') {\n ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth);\n }\n\n if (orient === 'auto') {\n ctx.rotate(-angle);\n }\n\n ctx.translate(-x, -y);\n }\n\n}\n\nclass DefsElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'defs';\n }\n\n render() {// NOOP\n }\n\n}\n\nclass GElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'g';\n }\n\n getBoundingBox(ctx) {\n var boundingBox = new BoundingBox();\n this.children.forEach(child => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx));\n });\n return boundingBox;\n }\n\n}\n\nclass GradientElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.attributesToInherit = ['gradientUnits'];\n this.stops = [];\n var {\n stops,\n children\n } = this;\n children.forEach(child => {\n if (child.type === 'stop') {\n stops.push(child);\n }\n });\n }\n\n getGradientUnits() {\n return this.getAttribute('gradientUnits').getString('objectBoundingBox');\n }\n\n createGradient(ctx, element, parentOpacityProp) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n var stopsContainer = this;\n\n if (this.getHrefAttribute().hasValue()) {\n stopsContainer = this.getHrefAttribute().getDefinition();\n this.inheritStopContainer(stopsContainer);\n }\n\n var {\n stops\n } = stopsContainer;\n var gradient = this.getGradient(ctx, element);\n\n if (!gradient) {\n return this.addParentOpacity(parentOpacityProp, stops[stops.length - 1].color);\n }\n\n stops.forEach(stop => {\n gradient.addColorStop(stop.offset, this.addParentOpacity(parentOpacityProp, stop.color));\n });\n\n if (this.getAttribute('gradientTransform').hasValue()) {\n // render as transformed pattern on temporary canvas\n var {\n document\n } = this;\n var {\n MAX_VIRTUAL_PIXELS,\n viewPort\n } = document.screen;\n var [rootView] = viewPort.viewPorts;\n var rect = new RectElement(document, null);\n rect.attributes.x = new Property(document, 'x', -MAX_VIRTUAL_PIXELS / 3.0);\n rect.attributes.y = new Property(document, 'y', -MAX_VIRTUAL_PIXELS / 3.0);\n rect.attributes.width = new Property(document, 'width', MAX_VIRTUAL_PIXELS);\n rect.attributes.height = new Property(document, 'height', MAX_VIRTUAL_PIXELS);\n var group = new GElement(document, null);\n group.attributes.transform = new Property(document, 'transform', this.getAttribute('gradientTransform').getValue());\n group.children = [rect];\n var patternSvg = new SVGElement(document, null);\n patternSvg.attributes.x = new Property(document, 'x', 0);\n patternSvg.attributes.y = new Property(document, 'y', 0);\n patternSvg.attributes.width = new Property(document, 'width', rootView.width);\n patternSvg.attributes.height = new Property(document, 'height', rootView.height);\n patternSvg.children = [group];\n var patternCanvas = document.createCanvas(rootView.width, rootView.height);\n var patternCtx = patternCanvas.getContext('2d');\n patternCtx.fillStyle = gradient;\n patternSvg.render(patternCtx);\n return patternCtx.createPattern(patternCanvas, 'no-repeat');\n }\n\n return gradient;\n }\n\n inheritStopContainer(stopsContainer) {\n this.attributesToInherit.forEach(attributeToInherit => {\n if (!this.getAttribute(attributeToInherit).hasValue() && stopsContainer.getAttribute(attributeToInherit).hasValue()) {\n this.getAttribute(attributeToInherit, true).setValue(stopsContainer.getAttribute(attributeToInherit).getValue());\n }\n });\n }\n\n addParentOpacity(parentOpacityProp, color) {\n if (parentOpacityProp.hasValue()) {\n var colorProp = new Property(this.document, 'color', color);\n return colorProp.addOpacity(parentOpacityProp).getColor();\n }\n\n return color;\n }\n\n}\n\nclass LinearGradientElement extends GradientElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'linearGradient';\n this.attributesToInherit.push('x1', 'y1', 'x2', 'y2');\n }\n\n getGradient(ctx, element) {\n var isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n var boundingBox = isBoundingBoxUnits ? element.getBoundingBox(ctx) : null;\n\n if (isBoundingBoxUnits && !boundingBox) {\n return null;\n }\n\n if (!this.getAttribute('x1').hasValue() && !this.getAttribute('y1').hasValue() && !this.getAttribute('x2').hasValue() && !this.getAttribute('y2').hasValue()) {\n this.getAttribute('x1', true).setValue(0);\n this.getAttribute('y1', true).setValue(0);\n this.getAttribute('x2', true).setValue(1);\n this.getAttribute('y2', true).setValue(0);\n }\n\n var x1 = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('x1').getNumber() : this.getAttribute('x1').getPixels('x');\n var y1 = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('y1').getNumber() : this.getAttribute('y1').getPixels('y');\n var x2 = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('x2').getNumber() : this.getAttribute('x2').getPixels('x');\n var y2 = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('y2').getNumber() : this.getAttribute('y2').getPixels('y');\n\n if (x1 === x2 && y1 === y2) {\n return null;\n }\n\n return ctx.createLinearGradient(x1, y1, x2, y2);\n }\n\n}\n\nclass RadialGradientElement extends GradientElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'radialGradient';\n this.attributesToInherit.push('cx', 'cy', 'r', 'fx', 'fy', 'fr');\n }\n\n getGradient(ctx, element) {\n var isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n var boundingBox = element.getBoundingBox(ctx);\n\n if (isBoundingBoxUnits && !boundingBox) {\n return null;\n }\n\n if (!this.getAttribute('cx').hasValue()) {\n this.getAttribute('cx', true).setValue('50%');\n }\n\n if (!this.getAttribute('cy').hasValue()) {\n this.getAttribute('cy', true).setValue('50%');\n }\n\n if (!this.getAttribute('r').hasValue()) {\n this.getAttribute('r', true).setValue('50%');\n }\n\n var cx = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('cx').getNumber() : this.getAttribute('cx').getPixels('x');\n var cy = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('cy').getNumber() : this.getAttribute('cy').getPixels('y');\n var fx = cx;\n var fy = cy;\n\n if (this.getAttribute('fx').hasValue()) {\n fx = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('fx').getNumber() : this.getAttribute('fx').getPixels('x');\n }\n\n if (this.getAttribute('fy').hasValue()) {\n fy = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute('fy').getNumber() : this.getAttribute('fy').getPixels('y');\n }\n\n var r = isBoundingBoxUnits ? (boundingBox.width + boundingBox.height) / 2.0 * this.getAttribute('r').getNumber() : this.getAttribute('r').getPixels();\n var fr = this.getAttribute('fr').getPixels();\n return ctx.createRadialGradient(fx, fy, fr, cx, cy, r);\n }\n\n}\n\nclass StopElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'stop';\n var offset = Math.max(0, Math.min(1, this.getAttribute('offset').getNumber()));\n var stopOpacity = this.getStyle('stop-opacity');\n var stopColor = this.getStyle('stop-color', true);\n\n if (stopColor.getString() === '') {\n stopColor.setValue('#000');\n }\n\n if (stopOpacity.hasValue()) {\n stopColor = stopColor.addOpacity(stopOpacity);\n }\n\n this.offset = offset;\n this.color = stopColor.getColor();\n }\n\n}\n\nclass AnimateElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'animate';\n this.duration = 0;\n this.initialValue = null;\n this.initialUnits = '';\n this.removed = false;\n this.frozen = false;\n document.screen.animations.push(this);\n this.begin = this.getAttribute('begin').getMilliseconds();\n this.maxDuration = this.begin + this.getAttribute('dur').getMilliseconds();\n this.from = this.getAttribute('from');\n this.to = this.getAttribute('to');\n this.values = new Property(document, 'values', null);\n var valuesAttr = this.getAttribute('values');\n\n if (valuesAttr.hasValue()) {\n this.values.setValue(valuesAttr.getString().split(';'));\n }\n }\n\n getProperty() {\n var attributeType = this.getAttribute('attributeType').getString();\n var attributeName = this.getAttribute('attributeName').getString();\n\n if (attributeType === 'CSS') {\n return this.parent.getStyle(attributeName, true);\n }\n\n return this.parent.getAttribute(attributeName, true);\n }\n\n calcValue() {\n var {\n initialUnits\n } = this;\n var {\n progress,\n from,\n to\n } = this.getProgress(); // tween value linearly\n\n var newValue = from.getNumber() + (to.getNumber() - from.getNumber()) * progress;\n\n if (initialUnits === '%') {\n newValue *= 100.0; // numValue() returns 0-1 whereas properties are 0-100\n }\n\n return \"\".concat(newValue).concat(initialUnits);\n }\n\n update(delta) {\n var {\n parent\n } = this;\n var prop = this.getProperty(); // set initial value\n\n if (!this.initialValue) {\n this.initialValue = prop.getString();\n this.initialUnits = prop.getUnits();\n } // if we're past the end time\n\n\n if (this.duration > this.maxDuration) {\n var fill = this.getAttribute('fill').getString('remove'); // loop for indefinitely repeating animations\n\n if (this.getAttribute('repeatCount').getString() === 'indefinite' || this.getAttribute('repeatDur').getString() === 'indefinite') {\n this.duration = 0;\n } else if (fill === 'freeze' && !this.frozen) {\n this.frozen = true;\n parent.animationFrozen = true;\n parent.animationFrozenValue = prop.getString();\n } else if (fill === 'remove' && !this.removed) {\n this.removed = true;\n prop.setValue(parent.animationFrozen ? parent.animationFrozenValue : this.initialValue);\n return true;\n }\n\n return false;\n }\n\n this.duration += delta; // if we're past the begin time\n\n var updated = false;\n\n if (this.begin < this.duration) {\n var newValue = this.calcValue(); // tween\n\n var typeAttr = this.getAttribute('type');\n\n if (typeAttr.hasValue()) {\n // for transform, etc.\n var type = typeAttr.getString();\n newValue = \"\".concat(type, \"(\").concat(newValue, \")\");\n }\n\n prop.setValue(newValue);\n updated = true;\n }\n\n return updated;\n }\n\n getProgress() {\n var {\n document,\n values\n } = this;\n var result = {\n progress: (this.duration - this.begin) / (this.maxDuration - this.begin)\n };\n\n if (values.hasValue()) {\n var p = result.progress * (values.getValue().length - 1);\n var lb = Math.floor(p);\n var ub = Math.ceil(p);\n result.from = new Property(document, 'from', parseFloat(values.getValue()[lb]));\n result.to = new Property(document, 'to', parseFloat(values.getValue()[ub]));\n result.progress = (p - lb) / (ub - lb);\n } else {\n result.from = this.from;\n result.to = this.to;\n }\n\n return result;\n }\n\n}\n\nclass AnimateColorElement extends AnimateElement {\n constructor() {\n super(...arguments);\n this.type = 'animateColor';\n }\n\n calcValue() {\n var {\n progress,\n from,\n to\n } = this.getProgress();\n var colorFrom = new RGBColor(from.getColor());\n var colorTo = new RGBColor(to.getColor());\n\n if (colorFrom.ok && colorTo.ok) {\n // tween color linearly\n var r = colorFrom.r + (colorTo.r - colorFrom.r) * progress;\n var g = colorFrom.g + (colorTo.g - colorFrom.g) * progress;\n var b = colorFrom.b + (colorTo.b - colorFrom.b) * progress; // ? alpha\n\n return \"rgb(\".concat(Math.floor(r), \", \").concat(Math.floor(g), \", \").concat(Math.floor(b), \")\");\n }\n\n return this.getAttribute('from').getColor();\n }\n\n}\n\nclass AnimateTransformElement extends AnimateElement {\n constructor() {\n super(...arguments);\n this.type = 'animateTransform';\n }\n\n calcValue() {\n var {\n progress,\n from,\n to\n } = this.getProgress(); // tween value linearly\n\n var transformFrom = toNumbers(from.getString());\n var transformTo = toNumbers(to.getString());\n var newValue = transformFrom.map((from, i) => {\n var to = transformTo[i];\n return from + (to - from) * progress;\n }).join(' ');\n return newValue;\n }\n\n}\n\nclass FontElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'font';\n this.glyphs = {};\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber();\n var {\n definitions\n } = document;\n var {\n children\n } = this;\n\n for (var child of children) {\n switch (child.type) {\n case 'font-face':\n {\n this.fontFace = child;\n var fontFamilyStyle = child.getStyle('font-family');\n\n if (fontFamilyStyle.hasValue()) {\n definitions[fontFamilyStyle.getString()] = this;\n }\n\n break;\n }\n\n case 'missing-glyph':\n this.missingGlyph = child;\n break;\n\n case 'glyph':\n {\n var glyph = child;\n\n if (glyph.arabicForm) {\n this.isRTL = true;\n this.isArabic = true;\n\n if (typeof this.glyphs[glyph.unicode] === 'undefined') {\n this.glyphs[glyph.unicode] = {};\n }\n\n this.glyphs[glyph.unicode][glyph.arabicForm] = glyph;\n } else {\n this.glyphs[glyph.unicode] = glyph;\n }\n\n break;\n }\n }\n }\n }\n\n render() {// NO RENDER\n }\n\n}\n\nclass FontFaceElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'font-face';\n this.ascent = this.getAttribute('ascent').getNumber();\n this.descent = this.getAttribute('descent').getNumber();\n this.unitsPerEm = this.getAttribute('units-per-em').getNumber();\n }\n\n}\n\nclass MissingGlyphElement extends PathElement {\n constructor() {\n super(...arguments);\n this.type = 'missing-glyph';\n this.horizAdvX = 0;\n }\n\n}\n\nclass TRefElement extends TextElement {\n constructor() {\n super(...arguments);\n this.type = 'tref';\n }\n\n getText() {\n var element = this.getHrefAttribute().getDefinition();\n\n if (element) {\n var firstChild = element.children[0];\n\n if (firstChild) {\n return firstChild.getText();\n }\n }\n\n return '';\n }\n\n}\n\nclass AElement extends TextElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'a';\n var {\n childNodes\n } = node;\n var firstChild = childNodes[0];\n var hasText = childNodes.length > 0 && Array.from(childNodes).every(node => node.nodeType === 3);\n this.hasText = hasText;\n this.text = hasText ? this.getTextFromNode(firstChild) : '';\n }\n\n getText() {\n return this.text;\n }\n\n renderChildren(ctx) {\n if (this.hasText) {\n // render as text element\n super.renderChildren(ctx);\n var {\n document,\n x,\n y\n } = this;\n var {\n mouse\n } = document.screen;\n var fontSize = new Property(document, 'fontSize', Font.parse(document.ctx.font).fontSize); // Do not calc bounding box if mouse is not working.\n\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(this, new BoundingBox(x, y - fontSize.getPixels('y'), x + this.measureText(ctx), y));\n }\n } else if (this.children.length > 0) {\n // render as temporary group\n var g = new GElement(this.document, null);\n g.children = this.children;\n g.parent = this;\n g.render(ctx);\n }\n }\n\n onClick() {\n var {\n window\n } = this.document;\n\n if (window) {\n window.open(this.getHrefAttribute().getString());\n }\n }\n\n onMouseMove() {\n var ctx = this.document.ctx;\n ctx.canvas.style.cursor = 'pointer';\n }\n\n}\n\nfunction ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\nclass TextPathElement extends TextElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'textPath';\n this.textWidth = 0;\n this.textHeight = 0;\n this.pathLength = -1;\n this.glyphInfo = null;\n this.letterSpacingCache = [];\n this.measuresCache = new Map([['', 0]]);\n var pathElement = this.getHrefAttribute().getDefinition();\n this.text = this.getTextFromNode();\n this.dataArray = this.parsePathData(pathElement);\n }\n\n getText() {\n return this.text;\n }\n\n path(ctx) {\n var {\n dataArray\n } = this;\n\n if (ctx) {\n ctx.beginPath();\n }\n\n dataArray.forEach(_ref => {\n var {\n type,\n points\n } = _ref;\n\n switch (type) {\n case PathParser.LINE_TO:\n if (ctx) {\n ctx.lineTo(points[0], points[1]);\n }\n\n break;\n\n case PathParser.MOVE_TO:\n if (ctx) {\n ctx.moveTo(points[0], points[1]);\n }\n\n break;\n\n case PathParser.CURVE_TO:\n if (ctx) {\n ctx.bezierCurveTo(points[0], points[1], points[2], points[3], points[4], points[5]);\n }\n\n break;\n\n case PathParser.QUAD_TO:\n if (ctx) {\n ctx.quadraticCurveTo(points[0], points[1], points[2], points[3]);\n }\n\n break;\n\n case PathParser.ARC:\n {\n var [cx, cy, rx, ry, theta, dTheta, psi, fs] = points;\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n\n if (ctx) {\n ctx.translate(cx, cy);\n ctx.rotate(psi);\n ctx.scale(scaleX, scaleY);\n ctx.arc(0, 0, r, theta, theta + dTheta, Boolean(1 - fs));\n ctx.scale(1 / scaleX, 1 / scaleY);\n ctx.rotate(-psi);\n ctx.translate(-cx, -cy);\n }\n\n break;\n }\n\n case PathParser.CLOSE_PATH:\n if (ctx) {\n ctx.closePath();\n }\n\n break;\n }\n });\n }\n\n renderChildren(ctx) {\n this.setTextData(ctx);\n ctx.save();\n var textDecoration = this.parent.getStyle('text-decoration').getString();\n var fontSize = this.getFontSize();\n var {\n glyphInfo\n } = this;\n var fill = ctx.fillStyle;\n\n if (textDecoration === 'underline') {\n ctx.beginPath();\n }\n\n glyphInfo.forEach((glyph, i) => {\n var {\n p0,\n p1,\n rotation,\n text: partialText\n } = glyph;\n ctx.save();\n ctx.translate(p0.x, p0.y);\n ctx.rotate(rotation);\n\n if (ctx.fillStyle) {\n ctx.fillText(partialText, 0, 0);\n }\n\n if (ctx.strokeStyle) {\n ctx.strokeText(partialText, 0, 0);\n }\n\n ctx.restore();\n\n if (textDecoration === 'underline') {\n if (i === 0) {\n ctx.moveTo(p0.x, p0.y + fontSize / 8);\n }\n\n ctx.lineTo(p1.x, p1.y + fontSize / 5);\n } // // To assist with debugging visually, uncomment following\n //\n // ctx.beginPath();\n // if (i % 2)\n // \tctx.strokeStyle = 'red';\n // else\n // \tctx.strokeStyle = 'green';\n // ctx.moveTo(p0.x, p0.y);\n // ctx.lineTo(p1.x, p1.y);\n // ctx.stroke();\n // ctx.closePath();\n\n });\n\n if (textDecoration === 'underline') {\n ctx.lineWidth = fontSize / 20;\n ctx.strokeStyle = fill;\n ctx.stroke();\n ctx.closePath();\n }\n\n ctx.restore();\n }\n\n getLetterSpacingAt() {\n var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return this.letterSpacingCache[idx] || 0;\n }\n\n findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, inputOffset, dy, c, charI) {\n var offset = inputOffset;\n var glyphWidth = this.measureText(ctx, c);\n\n if (c === ' ' && anchor === 'justify' && textFullWidth < fullPathWidth) {\n glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber;\n }\n\n if (charI > -1) {\n offset += this.getLetterSpacingAt(charI);\n }\n\n var splineStep = this.textHeight / 20;\n var p0 = this.getEquidistantPointOnPath(offset, splineStep, 0);\n var p1 = this.getEquidistantPointOnPath(offset + glyphWidth, splineStep, 0);\n var segment = {\n p0,\n p1\n };\n var rotation = p0 && p1 ? Math.atan2(p1.y - p0.y, p1.x - p0.x) : 0;\n\n if (dy) {\n var dyX = Math.cos(Math.PI / 2 + rotation) * dy;\n var dyY = Math.cos(-rotation) * dy;\n segment.p0 = _objectSpread$2(_objectSpread$2({}, p0), {}, {\n x: p0.x + dyX,\n y: p0.y + dyY\n });\n segment.p1 = _objectSpread$2(_objectSpread$2({}, p1), {}, {\n x: p1.x + dyX,\n y: p1.y + dyY\n });\n }\n\n offset += glyphWidth;\n return {\n offset,\n segment,\n rotation\n };\n }\n\n measureText(ctx, text) {\n var {\n measuresCache\n } = this;\n var targetText = text || this.getText();\n\n if (measuresCache.has(targetText)) {\n return measuresCache.get(targetText);\n }\n\n var measure = this.measureTargetText(ctx, targetText);\n measuresCache.set(targetText, measure);\n return measure;\n } // This method supposes what all custom fonts already loaded.\n // If some font will be loaded after this method call, <textPath> will not be rendered correctly.\n // You need to call this method manually to update glyphs cache.\n\n\n setTextData(ctx) {\n if (this.glyphInfo) {\n return;\n }\n\n var renderText = this.getText();\n var chars = renderText.split('');\n var spacesNumber = renderText.split(' ').length - 1;\n var dx = this.parent.getAttribute('dx').split().map(_ => _.getPixels('x'));\n var dy = this.parent.getAttribute('dy').getPixels('y');\n var anchor = this.parent.getStyle('text-anchor').getString('start');\n var thisSpacing = this.getStyle('letter-spacing');\n var parentSpacing = this.parent.getStyle('letter-spacing');\n var letterSpacing = 0;\n\n if (!thisSpacing.hasValue() || thisSpacing.getValue() === 'inherit') {\n letterSpacing = parentSpacing.getPixels();\n } else if (thisSpacing.hasValue()) {\n if (thisSpacing.getValue() !== 'initial' && thisSpacing.getValue() !== 'unset') {\n letterSpacing = thisSpacing.getPixels();\n }\n } // fill letter-spacing cache\n\n\n var letterSpacingCache = [];\n var textLen = renderText.length;\n this.letterSpacingCache = letterSpacingCache;\n\n for (var i = 0; i < textLen; i++) {\n letterSpacingCache.push(typeof dx[i] !== 'undefined' ? dx[i] : letterSpacing);\n }\n\n var dxSum = letterSpacingCache.reduce((acc, cur, i) => i === 0 ? 0 : acc + cur || 0, 0);\n var textWidth = this.measureText(ctx);\n var textFullWidth = Math.max(textWidth + dxSum, 0);\n this.textWidth = textWidth;\n this.textHeight = this.getFontSize();\n this.glyphInfo = [];\n var fullPathWidth = this.getPathLength();\n var startOffset = this.getStyle('startOffset').getNumber(0) * fullPathWidth;\n var offset = 0;\n\n if (anchor === 'middle' || anchor === 'center') {\n offset = -textFullWidth / 2;\n }\n\n if (anchor === 'end' || anchor === 'right') {\n offset = -textFullWidth;\n }\n\n offset += startOffset;\n chars.forEach((char, i) => {\n // Find such segment what distance between p0 and p1 is approx. width of glyph\n var {\n offset: nextOffset,\n segment,\n rotation\n } = this.findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, offset, dy, char, i);\n offset = nextOffset;\n\n if (!segment.p0 || !segment.p1) {\n return;\n } // const width = this.getLineLength(\n // \tsegment.p0.x,\n // \tsegment.p0.y,\n // \tsegment.p1.x,\n // \tsegment.p1.y\n // );\n // Note: Since glyphs are rendered one at a time, any kerning pair data built into the font will not be used.\n // Can foresee having a rough pair table built in that the developer can override as needed.\n // Or use \"dx\" attribute of the <text> node as a naive replacement\n // const kern = 0;\n // placeholder for future implementation\n // const midpoint = this.getPointOnLine(\n // \tkern + width / 2.0,\n // \tsegment.p0.x, segment.p0.y, segment.p1.x, segment.p1.y\n // );\n\n\n this.glyphInfo.push({\n // transposeX: midpoint.x,\n // transposeY: midpoint.y,\n text: chars[i],\n p0: segment.p0,\n p1: segment.p1,\n rotation\n });\n });\n }\n\n parsePathData(path) {\n this.pathLength = -1; // reset path length\n\n if (!path) {\n return [];\n }\n\n var pathCommands = [];\n var {\n pathParser\n } = path;\n pathParser.reset(); // convert l, H, h, V, and v to L\n\n while (!pathParser.isEnd()) {\n var {\n current\n } = pathParser;\n var startX = current ? current.x : 0;\n var startY = current ? current.y : 0;\n var command = pathParser.next();\n var nextCommandType = command.type;\n var points = [];\n\n switch (command.type) {\n case PathParser.MOVE_TO:\n this.pathM(pathParser, points);\n break;\n\n case PathParser.LINE_TO:\n nextCommandType = this.pathL(pathParser, points);\n break;\n\n case PathParser.HORIZ_LINE_TO:\n nextCommandType = this.pathH(pathParser, points);\n break;\n\n case PathParser.VERT_LINE_TO:\n nextCommandType = this.pathV(pathParser, points);\n break;\n\n case PathParser.CURVE_TO:\n this.pathC(pathParser, points);\n break;\n\n case PathParser.SMOOTH_CURVE_TO:\n nextCommandType = this.pathS(pathParser, points);\n break;\n\n case PathParser.QUAD_TO:\n this.pathQ(pathParser, points);\n break;\n\n case PathParser.SMOOTH_QUAD_TO:\n nextCommandType = this.pathT(pathParser, points);\n break;\n\n case PathParser.ARC:\n points = this.pathA(pathParser);\n break;\n\n case PathParser.CLOSE_PATH:\n PathElement.pathZ(pathParser);\n break;\n }\n\n if (command.type !== PathParser.CLOSE_PATH) {\n pathCommands.push({\n type: nextCommandType,\n points,\n start: {\n x: startX,\n y: startY\n },\n pathLength: this.calcLength(startX, startY, nextCommandType, points)\n });\n } else {\n pathCommands.push({\n type: PathParser.CLOSE_PATH,\n points: [],\n pathLength: 0\n });\n }\n }\n\n return pathCommands;\n }\n\n pathM(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathM(pathParser).point;\n points.push(x, y);\n }\n\n pathL(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathL(pathParser).point;\n points.push(x, y);\n return PathParser.LINE_TO;\n }\n\n pathH(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathH(pathParser).point;\n points.push(x, y);\n return PathParser.LINE_TO;\n }\n\n pathV(pathParser, points) {\n var {\n x,\n y\n } = PathElement.pathV(pathParser).point;\n points.push(x, y);\n return PathParser.LINE_TO;\n }\n\n pathC(pathParser, points) {\n var {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser);\n points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n\n pathS(pathParser, points) {\n var {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser);\n points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n return PathParser.CURVE_TO;\n }\n\n pathQ(pathParser, points) {\n var {\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser);\n points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n }\n\n pathT(pathParser, points) {\n var {\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser);\n points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\n return PathParser.QUAD_TO;\n }\n\n pathA(pathParser) {\n var {\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n } = PathElement.pathA(pathParser);\n\n if (sweepFlag === 0 && ad > 0) {\n ad -= 2 * Math.PI;\n }\n\n if (sweepFlag === 1 && ad < 0) {\n ad += 2 * Math.PI;\n }\n\n return [centp.x, centp.y, rX, rY, a1, ad, xAxisRotation, sweepFlag];\n }\n\n calcLength(x, y, commandType, points) {\n var len = 0;\n var p1 = null;\n var p2 = null;\n var t = 0;\n\n switch (commandType) {\n case PathParser.LINE_TO:\n return this.getLineLength(x, y, points[0], points[1]);\n\n case PathParser.CURVE_TO:\n // Approximates by breaking curve into 100 line segments\n len = 0.0;\n p1 = this.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n\n return len;\n\n case PathParser.QUAD_TO:\n // Approximates by breaking curve into 100 line segments\n len = 0.0;\n p1 = this.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]);\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n\n return len;\n\n case PathParser.ARC:\n {\n // Approximates by breaking curve into line segments\n len = 0.0;\n var start = points[4]; // 4 = theta\n\n var dTheta = points[5]; // 5 = dTheta\n\n var end = points[4] + dTheta;\n var inc = Math.PI / 180.0; // 1 degree resolution\n\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end);\n } // Note: for purpose of calculating arc length, not going to worry about rotating X-axis by angle psi\n\n\n p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0);\n\n if (dTheta < 0) {\n // clockwise\n for (t = start - inc; t > end; t -= inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n } else {\n // counter-clockwise\n for (t = start + inc; t < end; t += inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n }\n\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n return len;\n }\n }\n\n return 0;\n }\n\n getPointOnLine(dist, p1x, p1y, p2x, p2y) {\n var fromX = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : p1x;\n var fromY = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : p1y;\n var m = (p2y - p1y) / (p2x - p1x + PSEUDO_ZERO);\n var run = Math.sqrt(dist * dist / (1 + m * m));\n\n if (p2x < p1x) {\n run *= -1;\n }\n\n var rise = m * run;\n var pt = null;\n\n if (p2x === p1x) {\n // vertical line\n pt = {\n x: fromX,\n y: fromY + rise\n };\n } else if ((fromY - p1y) / (fromX - p1x + PSEUDO_ZERO) === m) {\n pt = {\n x: fromX + run,\n y: fromY + rise\n };\n } else {\n var ix = 0;\n var iy = 0;\n var len = this.getLineLength(p1x, p1y, p2x, p2y);\n\n if (len < PSEUDO_ZERO) {\n return null;\n }\n\n var u = (fromX - p1x) * (p2x - p1x) + (fromY - p1y) * (p2y - p1y);\n u /= len * len;\n ix = p1x + u * (p2x - p1x);\n iy = p1y + u * (p2y - p1y);\n var pRise = this.getLineLength(fromX, fromY, ix, iy);\n var pRun = Math.sqrt(dist * dist - pRise * pRise);\n run = Math.sqrt(pRun * pRun / (1 + m * m));\n\n if (p2x < p1x) {\n run *= -1;\n }\n\n rise = m * run;\n pt = {\n x: ix + run,\n y: iy + rise\n };\n }\n\n return pt;\n }\n\n getPointOnPath(distance) {\n var fullLen = this.getPathLength();\n var cumulativePathLength = 0;\n var p = null;\n\n if (distance < -0.00005 || distance - 0.00005 > fullLen) {\n return null;\n }\n\n var {\n dataArray\n } = this;\n\n for (var command of dataArray) {\n if (command && (command.pathLength < 0.00005 || cumulativePathLength + command.pathLength + 0.00005 < distance)) {\n cumulativePathLength += command.pathLength;\n continue;\n }\n\n var delta = distance - cumulativePathLength;\n var currentT = 0;\n\n switch (command.type) {\n case PathParser.LINE_TO:\n p = this.getPointOnLine(delta, command.start.x, command.start.y, command.points[0], command.points[1], command.start.x, command.start.y);\n break;\n\n case PathParser.ARC:\n {\n var start = command.points[4]; // 4 = theta\n\n var dTheta = command.points[5]; // 5 = dTheta\n\n var end = command.points[4] + dTheta;\n currentT = start + delta / command.pathLength * dTheta;\n\n if (dTheta < 0 && currentT < end || dTheta >= 0 && currentT > end) {\n break;\n }\n\n p = this.getPointOnEllipticalArc(command.points[0], command.points[1], command.points[2], command.points[3], currentT, command.points[6]);\n break;\n }\n\n case PathParser.CURVE_TO:\n currentT = delta / command.pathLength;\n\n if (currentT > 1) {\n currentT = 1;\n }\n\n p = this.getPointOnCubicBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3], command.points[4], command.points[5]);\n break;\n\n case PathParser.QUAD_TO:\n currentT = delta / command.pathLength;\n\n if (currentT > 1) {\n currentT = 1;\n }\n\n p = this.getPointOnQuadraticBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3]);\n break;\n }\n\n if (p) {\n return p;\n }\n\n break;\n }\n\n return null;\n }\n\n getLineLength(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n\n getPathLength() {\n if (this.pathLength === -1) {\n this.pathLength = this.dataArray.reduce((length, command) => command.pathLength > 0 ? length + command.pathLength : length, 0);\n }\n\n return this.pathLength;\n }\n\n getPointOnCubicBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n var x = p4x * CB1(pct) + p3x * CB2(pct) + p2x * CB3(pct) + p1x * CB4(pct);\n var y = p4y * CB1(pct) + p3y * CB2(pct) + p2y * CB3(pct) + p1y * CB4(pct);\n return {\n x,\n y\n };\n }\n\n getPointOnQuadraticBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y) {\n var x = p3x * QB1(pct) + p2x * QB2(pct) + p1x * QB3(pct);\n var y = p3y * QB1(pct) + p2y * QB2(pct) + p1y * QB3(pct);\n return {\n x,\n y\n };\n }\n\n getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) {\n var cosPsi = Math.cos(psi);\n var sinPsi = Math.sin(psi);\n var pt = {\n x: rx * Math.cos(theta),\n y: ry * Math.sin(theta)\n };\n return {\n x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n y: cy + (pt.x * sinPsi + pt.y * cosPsi)\n };\n } // TODO need some optimisations. possibly build cache only for curved segments?\n\n\n buildEquidistantCache(inputStep, inputPrecision) {\n var fullLen = this.getPathLength();\n var precision = inputPrecision || 0.25; // accuracy vs performance\n\n var step = inputStep || fullLen / 100;\n\n if (!this.equidistantCache || this.equidistantCache.step !== step || this.equidistantCache.precision !== precision) {\n // Prepare cache\n this.equidistantCache = {\n step,\n precision,\n points: []\n }; // Calculate points\n\n var s = 0;\n\n for (var l = 0; l <= fullLen; l += precision) {\n var p0 = this.getPointOnPath(l);\n var p1 = this.getPointOnPath(l + precision);\n\n if (!p0 || !p1) {\n continue;\n }\n\n s += this.getLineLength(p0.x, p0.y, p1.x, p1.y);\n\n if (s >= step) {\n this.equidistantCache.points.push({\n x: p0.x,\n y: p0.y,\n distance: l\n });\n s -= step;\n }\n }\n }\n }\n\n getEquidistantPointOnPath(targetDistance, step, precision) {\n this.buildEquidistantCache(step, precision);\n\n if (targetDistance < 0 || targetDistance - this.getPathLength() > 0.00005) {\n return null;\n }\n\n var idx = Math.round(targetDistance / this.getPathLength() * (this.equidistantCache.points.length - 1));\n return this.equidistantCache.points[idx] || null;\n }\n\n}\n\nvar dataUriRegex = /^\\s*data:(([^/,;]+\\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i;\nclass ImageElement extends RenderedElement {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'image';\n this.loaded = false;\n var href = this.getHrefAttribute().getString();\n\n if (!href) {\n return;\n }\n\n var isSvg = href.endsWith('.svg') || /^\\s*data:image\\/svg\\+xml/i.test(href);\n document.images.push(this);\n\n if (!isSvg) {\n void this.loadImage(href);\n } else {\n void this.loadSvg(href);\n }\n\n this.isSvg = isSvg;\n }\n\n loadImage(href) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n try {\n var image = yield _this.document.createImage(href);\n _this.image = image;\n } catch (err) {\n console.error(\"Error while loading image \\\"\".concat(href, \"\\\":\"), err);\n }\n\n _this.loaded = true;\n })();\n }\n\n loadSvg(href) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var match = dataUriRegex.exec(href);\n\n if (match) {\n var data = match[5];\n\n if (match[4] === 'base64') {\n _this2.image = atob(data);\n } else {\n _this2.image = decodeURIComponent(data);\n }\n } else {\n try {\n var response = yield _this2.document.fetch(href);\n var svg = yield response.text();\n _this2.image = svg;\n } catch (err) {\n console.error(\"Error while loading image \\\"\".concat(href, \"\\\":\"), err);\n }\n }\n\n _this2.loaded = true;\n })();\n }\n\n renderChildren(ctx) {\n var {\n document,\n image,\n loaded\n } = this;\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width').getPixels('x');\n var height = this.getStyle('height').getPixels('y');\n\n if (!loaded || !image || !width || !height) {\n return;\n }\n\n ctx.save();\n ctx.translate(x, y);\n\n if (this.isSvg) {\n var subDocument = document.canvg.forkString(ctx, this.image, {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true,\n ignoreClear: true,\n offsetX: 0,\n offsetY: 0,\n scaleWidth: width,\n scaleHeight: height\n });\n subDocument.document.documentElement.parent = this;\n void subDocument.render();\n } else {\n var _image = this.image;\n document.setViewBox({\n ctx,\n aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n width,\n desiredWidth: _image.width,\n height,\n desiredHeight: _image.height\n });\n\n if (this.loaded) {\n if (typeof _image.complete === 'undefined' || _image.complete) {\n ctx.drawImage(_image, 0, 0);\n }\n }\n }\n\n ctx.restore();\n }\n\n getBoundingBox() {\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width').getPixels('x');\n var height = this.getStyle('height').getPixels('y');\n return new BoundingBox(x, y, x + width, y + height);\n }\n\n}\n\nclass SymbolElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'symbol';\n }\n\n render(_) {// NO RENDER\n }\n\n}\n\nclass SVGFontLoader {\n constructor(document) {\n this.document = document;\n this.loaded = false;\n document.fonts.push(this);\n }\n\n load(fontFamily, url) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n try {\n var {\n document\n } = _this;\n var svgDocument = yield document.canvg.parser.load(url);\n var fonts = svgDocument.getElementsByTagName('font');\n Array.from(fonts).forEach(fontNode => {\n var font = document.createElement(fontNode);\n document.definitions[fontFamily] = font;\n });\n } catch (err) {\n console.error(\"Error while loading font \\\"\".concat(url, \"\\\":\"), err);\n }\n\n _this.loaded = true;\n })();\n }\n\n}\n\nclass StyleElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'style';\n var css = compressSpaces(Array.from(node.childNodes) // NEED TEST\n .map(_ => _.textContent).join('').replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, '') // remove comments\n .replace(/@import.*;/g, '') // remove imports\n );\n var cssDefs = css.split('}');\n cssDefs.forEach(_ => {\n var def = _.trim();\n\n if (!def) {\n return;\n }\n\n var cssParts = def.split('{');\n var cssClasses = cssParts[0].split(',');\n var cssProps = cssParts[1].split(';');\n cssClasses.forEach(_ => {\n var cssClass = _.trim();\n\n if (!cssClass) {\n return;\n }\n\n var props = document.styles[cssClass] || {};\n cssProps.forEach(cssProp => {\n var prop = cssProp.indexOf(':');\n var name = cssProp.substr(0, prop).trim();\n var value = cssProp.substr(prop + 1, cssProp.length - prop).trim();\n\n if (name && value) {\n props[name] = new Property(document, name, value);\n }\n });\n document.styles[cssClass] = props;\n document.stylesSpecificity[cssClass] = getSelectorSpecificity(cssClass);\n\n if (cssClass === '@font-face') {\n // && !nodeEnv\n var fontFamily = props['font-family'].getString().replace(/\"|'/g, '');\n var srcs = props.src.getString().split(',');\n srcs.forEach(src => {\n if (src.indexOf('format(\"svg\")') > 0) {\n var url = parseExternalUrl(src);\n\n if (url) {\n void new SVGFontLoader(document).load(fontFamily, url);\n }\n }\n });\n }\n });\n });\n }\n\n}\nStyleElement.parseExternalUrl = parseExternalUrl;\n\nclass UseElement extends RenderedElement {\n constructor() {\n super(...arguments);\n this.type = 'use';\n }\n\n setContext(ctx) {\n super.setContext(ctx);\n var xAttr = this.getAttribute('x');\n var yAttr = this.getAttribute('y');\n\n if (xAttr.hasValue()) {\n ctx.translate(xAttr.getPixels('x'), 0);\n }\n\n if (yAttr.hasValue()) {\n ctx.translate(0, yAttr.getPixels('y'));\n }\n }\n\n path(ctx) {\n var {\n element\n } = this;\n\n if (element) {\n element.path(ctx);\n }\n }\n\n renderChildren(ctx) {\n var {\n document,\n element\n } = this;\n\n if (element) {\n var tempSvg = element;\n\n if (element.type === 'symbol') {\n // render me using a temporary svg element in symbol cases (http://www.w3.org/TR/SVG/struct.html#UseElement)\n tempSvg = new SVGElement(document, null);\n tempSvg.attributes.viewBox = new Property(document, 'viewBox', element.getAttribute('viewBox').getString());\n tempSvg.attributes.preserveAspectRatio = new Property(document, 'preserveAspectRatio', element.getAttribute('preserveAspectRatio').getString());\n tempSvg.attributes.overflow = new Property(document, 'overflow', element.getAttribute('overflow').getString());\n tempSvg.children = element.children; // element is still the parent of the children\n\n element.styles.opacity = new Property(document, 'opacity', this.calculateOpacity());\n }\n\n if (tempSvg.type === 'svg') {\n var widthStyle = this.getStyle('width', false, true);\n var heightStyle = this.getStyle('height', false, true); // if symbol or svg, inherit width/height from me\n\n if (widthStyle.hasValue()) {\n tempSvg.attributes.width = new Property(document, 'width', widthStyle.getString());\n }\n\n if (heightStyle.hasValue()) {\n tempSvg.attributes.height = new Property(document, 'height', heightStyle.getString());\n }\n }\n\n var oldParent = tempSvg.parent;\n tempSvg.parent = this;\n tempSvg.render(ctx);\n tempSvg.parent = oldParent;\n }\n }\n\n getBoundingBox(ctx) {\n var {\n element\n } = this;\n\n if (element) {\n return element.getBoundingBox(ctx);\n }\n\n return null;\n }\n\n elementTransform() {\n var {\n document,\n element\n } = this;\n return Transform.fromElement(document, element);\n }\n\n get element() {\n if (!this.cachedElement) {\n this.cachedElement = this.getHrefAttribute().getDefinition();\n }\n\n return this.cachedElement;\n }\n\n}\n\nfunction imGet(img, x, y, width, _height, rgba) {\n return img[y * width * 4 + x * 4 + rgba];\n}\n\nfunction imSet(img, x, y, width, _height, rgba, val) {\n img[y * width * 4 + x * 4 + rgba] = val;\n}\n\nfunction m(matrix, i, v) {\n var mi = matrix[i];\n return mi * v;\n}\n\nfunction c(a, m1, m2, m3) {\n return m1 + Math.cos(a) * m2 + Math.sin(a) * m3;\n}\n\nclass FeColorMatrixElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'feColorMatrix';\n var matrix = toNumbers(this.getAttribute('values').getString());\n\n switch (this.getAttribute('type').getString('matrix')) {\n // http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement\n case 'saturate':\n {\n var s = matrix[0];\n /* eslint-disable array-element-newline */\n\n matrix = [0.213 + 0.787 * s, 0.715 - 0.715 * s, 0.072 - 0.072 * s, 0, 0, 0.213 - 0.213 * s, 0.715 + 0.285 * s, 0.072 - 0.072 * s, 0, 0, 0.213 - 0.213 * s, 0.715 - 0.715 * s, 0.072 + 0.928 * s, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1];\n /* eslint-enable array-element-newline */\n\n break;\n }\n\n case 'hueRotate':\n {\n var a = matrix[0] * Math.PI / 180.0;\n /* eslint-disable array-element-newline */\n\n matrix = [c(a, 0.213, 0.787, -0.213), c(a, 0.715, -0.715, -0.715), c(a, 0.072, -0.072, 0.928), 0, 0, c(a, 0.213, -0.213, 0.143), c(a, 0.715, 0.285, 0.140), c(a, 0.072, -0.072, -0.283), 0, 0, c(a, 0.213, -0.213, -0.787), c(a, 0.715, -0.715, 0.715), c(a, 0.072, 0.928, 0.072), 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1];\n /* eslint-enable array-element-newline */\n\n break;\n }\n\n case 'luminanceToAlpha':\n /* eslint-disable array-element-newline */\n matrix = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2125, 0.7154, 0.0721, 0, 0, 0, 0, 0, 0, 1];\n /* eslint-enable array-element-newline */\n\n break;\n }\n\n this.matrix = matrix;\n this.includeOpacity = this.getAttribute('includeOpacity').hasValue();\n }\n\n apply(ctx, _x, _y, width, height) {\n // assuming x==0 && y==0 for now\n var {\n includeOpacity,\n matrix\n } = this;\n var srcData = ctx.getImageData(0, 0, width, height);\n\n for (var y = 0; y < height; y++) {\n for (var x = 0; x < width; x++) {\n var r = imGet(srcData.data, x, y, width, height, 0);\n var g = imGet(srcData.data, x, y, width, height, 1);\n var b = imGet(srcData.data, x, y, width, height, 2);\n var a = imGet(srcData.data, x, y, width, height, 3);\n var nr = m(matrix, 0, r) + m(matrix, 1, g) + m(matrix, 2, b) + m(matrix, 3, a) + m(matrix, 4, 1);\n var ng = m(matrix, 5, r) + m(matrix, 6, g) + m(matrix, 7, b) + m(matrix, 8, a) + m(matrix, 9, 1);\n var nb = m(matrix, 10, r) + m(matrix, 11, g) + m(matrix, 12, b) + m(matrix, 13, a) + m(matrix, 14, 1);\n var na = m(matrix, 15, r) + m(matrix, 16, g) + m(matrix, 17, b) + m(matrix, 18, a) + m(matrix, 19, 1);\n\n if (includeOpacity) {\n nr = 0;\n ng = 0;\n nb = 0;\n na *= a / 255;\n }\n\n imSet(srcData.data, x, y, width, height, 0, nr);\n imSet(srcData.data, x, y, width, height, 1, ng);\n imSet(srcData.data, x, y, width, height, 2, nb);\n imSet(srcData.data, x, y, width, height, 3, na);\n }\n }\n\n ctx.clearRect(0, 0, width, height);\n ctx.putImageData(srcData, 0, 0);\n }\n\n}\n\nclass MaskElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'mask';\n }\n\n apply(ctx, element) {\n var {\n document\n } = this; // render as temp svg\n\n var x = this.getAttribute('x').getPixels('x');\n var y = this.getAttribute('y').getPixels('y');\n var width = this.getStyle('width').getPixels('x');\n var height = this.getStyle('height').getPixels('y');\n\n if (!width && !height) {\n var boundingBox = new BoundingBox();\n this.children.forEach(child => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx));\n });\n x = Math.floor(boundingBox.x1);\n y = Math.floor(boundingBox.y1);\n width = Math.floor(boundingBox.width);\n height = Math.floor(boundingBox.height);\n }\n\n var ignoredStyles = this.removeStyles(element, MaskElement.ignoreStyles);\n var maskCanvas = document.createCanvas(x + width, y + height);\n var maskCtx = maskCanvas.getContext('2d');\n document.screen.setDefaults(maskCtx);\n this.renderChildren(maskCtx); // convert mask to alpha with a fake node\n // TODO: refactor out apply from feColorMatrix\n\n new FeColorMatrixElement(document, {\n nodeType: 1,\n childNodes: [],\n attributes: [{\n nodeName: 'type',\n value: 'luminanceToAlpha'\n }, {\n nodeName: 'includeOpacity',\n value: 'true'\n }]\n }).apply(maskCtx, 0, 0, x + width, y + height);\n var tmpCanvas = document.createCanvas(x + width, y + height);\n var tmpCtx = tmpCanvas.getContext('2d');\n document.screen.setDefaults(tmpCtx);\n element.render(tmpCtx);\n tmpCtx.globalCompositeOperation = 'destination-in';\n tmpCtx.fillStyle = maskCtx.createPattern(maskCanvas, 'no-repeat');\n tmpCtx.fillRect(0, 0, x + width, y + height);\n ctx.fillStyle = tmpCtx.createPattern(tmpCanvas, 'no-repeat');\n ctx.fillRect(0, 0, x + width, y + height); // reassign mask\n\n this.restoreStyles(element, ignoredStyles);\n }\n\n render(_) {// NO RENDER\n }\n\n}\nMaskElement.ignoreStyles = ['mask', 'transform', 'clip-path'];\n\nvar noop = () => {// NOOP\n};\n\nclass ClipPathElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'clipPath';\n }\n\n apply(ctx) {\n var {\n document\n } = this;\n var contextProto = Reflect.getPrototypeOf(ctx);\n var {\n beginPath,\n closePath\n } = ctx;\n\n if (contextProto) {\n contextProto.beginPath = noop;\n contextProto.closePath = noop;\n }\n\n Reflect.apply(beginPath, ctx, []);\n this.children.forEach(child => {\n if (typeof child.path === 'undefined') {\n return;\n }\n\n var transform = typeof child.elementTransform !== 'undefined' ? child.elementTransform() : null; // handle <use />\n\n if (!transform) {\n transform = Transform.fromElement(document, child);\n }\n\n if (transform) {\n transform.apply(ctx);\n }\n\n child.path(ctx);\n\n if (contextProto) {\n contextProto.closePath = closePath;\n }\n\n if (transform) {\n transform.unapply(ctx);\n }\n });\n Reflect.apply(closePath, ctx, []);\n ctx.clip();\n\n if (contextProto) {\n contextProto.beginPath = beginPath;\n contextProto.closePath = closePath;\n }\n }\n\n render(_) {// NO RENDER\n }\n\n}\n\nclass FilterElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'filter';\n }\n\n apply(ctx, element) {\n // render as temp svg\n var {\n document,\n children\n } = this;\n var boundingBox = element.getBoundingBox(ctx);\n\n if (!boundingBox) {\n return;\n }\n\n var px = 0;\n var py = 0;\n children.forEach(child => {\n var efd = child.extraFilterDistance || 0;\n px = Math.max(px, efd);\n py = Math.max(py, efd);\n });\n var width = Math.floor(boundingBox.width);\n var height = Math.floor(boundingBox.height);\n var tmpCanvasWidth = width + 2 * px;\n var tmpCanvasHeight = height + 2 * py;\n\n if (tmpCanvasWidth < 1 || tmpCanvasHeight < 1) {\n return;\n }\n\n var x = Math.floor(boundingBox.x);\n var y = Math.floor(boundingBox.y);\n var ignoredStyles = this.removeStyles(element, FilterElement.ignoreStyles);\n var tmpCanvas = document.createCanvas(tmpCanvasWidth, tmpCanvasHeight);\n var tmpCtx = tmpCanvas.getContext('2d');\n document.screen.setDefaults(tmpCtx);\n tmpCtx.translate(-x + px, -y + py);\n element.render(tmpCtx); // apply filters\n\n children.forEach(child => {\n if (typeof child.apply === 'function') {\n child.apply(tmpCtx, 0, 0, tmpCanvasWidth, tmpCanvasHeight);\n }\n }); // render on me\n\n ctx.drawImage(tmpCanvas, 0, 0, tmpCanvasWidth, tmpCanvasHeight, x - px, y - py, tmpCanvasWidth, tmpCanvasHeight);\n this.restoreStyles(element, ignoredStyles);\n }\n\n render(_) {// NO RENDER\n }\n\n}\nFilterElement.ignoreStyles = ['filter', 'transform', 'clip-path'];\n\nclass FeDropShadowElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'feDropShadow';\n this.addStylesFromStyleDefinition();\n }\n\n apply(_, _x, _y, _width, _height) {// TODO: implement\n }\n\n}\n\nclass FeMorphologyElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'feMorphology';\n }\n\n apply(_, _x, _y, _width, _height) {// TODO: implement\n }\n\n}\n\nclass FeCompositeElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'feComposite';\n }\n\n apply(_, _x, _y, _width, _height) {// TODO: implement\n }\n\n}\n\nclass FeGaussianBlurElement extends Element {\n constructor(document, node, captureTextNodes) {\n super(document, node, captureTextNodes);\n this.type = 'feGaussianBlur';\n this.blurRadius = Math.floor(this.getAttribute('stdDeviation').getNumber());\n this.extraFilterDistance = this.blurRadius;\n }\n\n apply(ctx, x, y, width, height) {\n var {\n document,\n blurRadius\n } = this;\n var body = document.window ? document.window.document.body : null;\n var canvas = ctx.canvas; // StackBlur requires canvas be on document\n\n canvas.id = document.getUniqueId();\n\n if (body) {\n canvas.style.display = 'none';\n body.appendChild(canvas);\n }\n\n canvasRGBA(canvas, x, y, width, height, blurRadius);\n\n if (body) {\n body.removeChild(canvas);\n }\n }\n\n}\n\nclass TitleElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'title';\n }\n\n}\n\nclass DescElement extends Element {\n constructor() {\n super(...arguments);\n this.type = 'desc';\n }\n\n}\n\nvar elements = {\n 'svg': SVGElement,\n 'rect': RectElement,\n 'circle': CircleElement,\n 'ellipse': EllipseElement,\n 'line': LineElement,\n 'polyline': PolylineElement,\n 'polygon': PolygonElement,\n 'path': PathElement,\n 'pattern': PatternElement,\n 'marker': MarkerElement,\n 'defs': DefsElement,\n 'linearGradient': LinearGradientElement,\n 'radialGradient': RadialGradientElement,\n 'stop': StopElement,\n 'animate': AnimateElement,\n 'animateColor': AnimateColorElement,\n 'animateTransform': AnimateTransformElement,\n 'font': FontElement,\n 'font-face': FontFaceElement,\n 'missing-glyph': MissingGlyphElement,\n 'glyph': GlyphElement,\n 'text': TextElement,\n 'tspan': TSpanElement,\n 'tref': TRefElement,\n 'a': AElement,\n 'textPath': TextPathElement,\n 'image': ImageElement,\n 'g': GElement,\n 'symbol': SymbolElement,\n 'style': StyleElement,\n 'use': UseElement,\n 'mask': MaskElement,\n 'clipPath': ClipPathElement,\n 'filter': FilterElement,\n 'feDropShadow': FeDropShadowElement,\n 'feMorphology': FeMorphologyElement,\n 'feComposite': FeCompositeElement,\n 'feColorMatrix': FeColorMatrixElement,\n 'feGaussianBlur': FeGaussianBlurElement,\n 'title': TitleElement,\n 'desc': DescElement\n};\n\nfunction ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$1(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction createCanvas(width, height) {\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\n\nfunction createImage(_x) {\n return _createImage.apply(this, arguments);\n}\n\nfunction _createImage() {\n _createImage = _asyncToGenerator(function* (src) {\n var anonymousCrossOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var image = document.createElement('img');\n\n if (anonymousCrossOrigin) {\n image.crossOrigin = 'Anonymous';\n }\n\n return new Promise((resolve, reject) => {\n image.onload = () => {\n resolve(image);\n };\n\n image.onerror = (_event, _source, _lineno, _colno, error) => {\n reject(error);\n };\n\n image.src = src;\n });\n });\n return _createImage.apply(this, arguments);\n}\n\nclass Document {\n constructor(canvg) {\n var {\n rootEmSize = 12,\n emSize = 12,\n createCanvas = Document.createCanvas,\n createImage = Document.createImage,\n anonymousCrossOrigin\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.canvg = canvg;\n this.definitions = {};\n this.styles = {};\n this.stylesSpecificity = {};\n this.images = [];\n this.fonts = [];\n this.emSizeStack = [];\n this.uniqueId = 0;\n this.screen = canvg.screen;\n this.rootEmSize = rootEmSize;\n this.emSize = emSize;\n this.createCanvas = createCanvas;\n this.createImage = this.bindCreateImage(createImage, anonymousCrossOrigin);\n this.screen.wait(this.isImagesLoaded.bind(this));\n this.screen.wait(this.isFontsLoaded.bind(this));\n }\n\n bindCreateImage(createImage, anonymousCrossOrigin) {\n if (typeof anonymousCrossOrigin === 'boolean') {\n return (source, forceAnonymousCrossOrigin) => createImage(source, typeof forceAnonymousCrossOrigin === 'boolean' ? forceAnonymousCrossOrigin : anonymousCrossOrigin);\n }\n\n return createImage;\n }\n\n get window() {\n return this.screen.window;\n }\n\n get fetch() {\n return this.screen.fetch;\n }\n\n get ctx() {\n return this.screen.ctx;\n }\n\n get emSize() {\n var {\n emSizeStack\n } = this;\n return emSizeStack[emSizeStack.length - 1];\n }\n\n set emSize(value) {\n var {\n emSizeStack\n } = this;\n emSizeStack.push(value);\n }\n\n popEmSize() {\n var {\n emSizeStack\n } = this;\n emSizeStack.pop();\n }\n\n getUniqueId() {\n return \"canvg\".concat(++this.uniqueId);\n }\n\n isImagesLoaded() {\n return this.images.every(_ => _.loaded);\n }\n\n isFontsLoaded() {\n return this.fonts.every(_ => _.loaded);\n }\n\n createDocumentElement(document) {\n var documentElement = this.createElement(document.documentElement);\n documentElement.root = true;\n documentElement.addStylesFromStyleDefinition();\n this.documentElement = documentElement;\n return documentElement;\n }\n\n createElement(node) {\n var elementType = node.nodeName.replace(/^[^:]+:/, '');\n var ElementType = Document.elementTypes[elementType];\n\n if (typeof ElementType !== 'undefined') {\n return new ElementType(this, node);\n }\n\n return new UnknownElement(this, node);\n }\n\n createTextNode(node) {\n return new TextNode(this, node);\n }\n\n setViewBox(config) {\n this.screen.setViewBox(_objectSpread$1({\n document: this\n }, config));\n }\n\n}\nDocument.createCanvas = createCanvas;\nDocument.createImage = createImage;\nDocument.elementTypes = elements;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n/**\r\n * SVG renderer on canvas.\r\n */\n\nclass Canvg {\n /**\r\n * Main constructor.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG Document.\r\n * @param options - Rendering options.\r\n */\n constructor(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.parser = new Parser(options);\n this.screen = new Screen(ctx, options);\n this.options = options;\n var document = new Document(this, options);\n var documentElement = document.createDocumentElement(svg);\n this.document = document;\n this.documentElement = documentElement;\n }\n /**\r\n * Create Canvg instance from SVG source string or URL.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string or URL.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n static from(ctx, svg) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var options = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : {};\n var parser = new Parser(options);\n var svgDocument = yield parser.parse(svg);\n return new Canvg(ctx, svgDocument, options);\n })();\n }\n /**\r\n * Create Canvg instance from SVG source string.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n static fromString(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var parser = new Parser(options);\n var svgDocument = parser.parseFromString(svg);\n return new Canvg(ctx, svgDocument, options);\n }\n /**\r\n * Create new Canvg instance with inherited options.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string or URL.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n fork(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return Canvg.from(ctx, svg, _objectSpread(_objectSpread({}, this.options), options));\n }\n /**\r\n * Create new Canvg instance with inherited options.\r\n * @param ctx - Rendering context.\r\n * @param svg - SVG source string.\r\n * @param options - Rendering options.\r\n * @returns Canvg instance.\r\n */\n\n\n forkString(ctx, svg) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return Canvg.fromString(ctx, svg, _objectSpread(_objectSpread({}, this.options), options));\n }\n /**\r\n * Document is ready promise.\r\n * @returns Ready promise.\r\n */\n\n\n ready() {\n return this.screen.ready();\n }\n /**\r\n * Document is ready value.\r\n * @returns Is ready or not.\r\n */\n\n\n isReady() {\n return this.screen.isReady();\n }\n /**\r\n * Render only first frame, ignoring animations and mouse.\r\n * @param options - Rendering options.\r\n */\n\n\n render() {\n var _arguments2 = arguments,\n _this = this;\n\n return _asyncToGenerator(function* () {\n var options = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : {};\n\n _this.start(_objectSpread({\n enableRedraw: true,\n ignoreAnimation: true,\n ignoreMouse: true\n }, options));\n\n yield _this.ready();\n\n _this.stop();\n })();\n }\n /**\r\n * Start rendering.\r\n * @param options - Render options.\r\n */\n\n\n start() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var {\n documentElement,\n screen,\n options: baseOptions\n } = this;\n screen.start(documentElement, _objectSpread(_objectSpread({\n enableRedraw: true\n }, baseOptions), options));\n }\n /**\r\n * Stop rendering.\r\n */\n\n\n stop() {\n this.screen.stop();\n }\n /**\r\n * Resize SVG to fit in given size.\r\n * @param width\r\n * @param height\r\n * @param preserveAspectRatio\r\n */\n\n\n resize(width) {\n var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : width;\n var preserveAspectRatio = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this.documentElement.resize(width, height, preserveAspectRatio);\n }\n\n}\n\nexport { AElement, AnimateColorElement, AnimateElement, AnimateTransformElement, BoundingBox, CB1, CB2, CB3, CB4, Canvg, CircleElement, ClipPathElement, DefsElement, DescElement, Document, Element, EllipseElement, FeColorMatrixElement, FeCompositeElement, FeDropShadowElement, FeGaussianBlurElement, FeMorphologyElement, FilterElement, Font, FontElement, FontFaceElement, GElement, GlyphElement, GradientElement, ImageElement, LineElement, LinearGradientElement, MarkerElement, MaskElement, Matrix, MissingGlyphElement, Mouse, PSEUDO_ZERO, Parser, PathElement, PathParser, PatternElement, Point, PolygonElement, PolylineElement, Property, QB1, QB2, QB3, RadialGradientElement, RectElement, RenderedElement, Rotate, SVGElement, SVGFontLoader, Scale, Screen, Skew, SkewX, SkewY, StopElement, StyleElement, SymbolElement, TRefElement, TSpanElement, TextElement, TextPathElement, TitleElement, Transform, Translate, UnknownElement, UseElement, ViewPort, compressSpaces, Canvg as default, getSelectorSpecificity, normalizeAttributeName, normalizeColor, parseExternalUrl, index as presets, toNumbers, trimLeft, trimRight, vectorMagnitude, vectorsAngle, vectorsRatio };\n"]},"metadata":{},"sourceType":"module"}
|