{"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\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    createCanvas(width, height) {\n      return new OffscreenCanvas(width, height);\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  if (typeof DOMParser !== 'undefined' || typeof DOMParserFallback === 'undefined') {\n    Reflect.deleteProperty(preset, 'DOMParser');\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}\nvar index = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  offscreen: offscreen,\n  node: 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  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  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;\nfunction findSelectorMatch(selector, regex) {\n  var matches = regex.exec(selector);\n  if (!matches) {\n    return [selector, 0];\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\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}\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}\nlet Property = /*#__PURE__*/(() => {\n  class Property {\n    constructor(document, name, value) {\n      this.document = document;\n      this.name = name;\n      this.value = value;\n      this.isNormalizedColor = false;\n    }\n    static empty(document) {\n      return new Property(document, 'EMPTY', '');\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    hasValue(zeroIsValue) {\n      var {\n        value\n      } = this;\n      return value !== null && value !== '' && (zeroIsValue || value !== 0) && typeof value !== 'undefined';\n    }\n    isString(regexp) {\n      var {\n        value\n      } = this;\n      var result = typeof value === 'string';\n      if (!result || !regexp) {\n        return result;\n      }\n      return regexp.test(value);\n    }\n    isUrlDefinition() {\n      return this.isString(/^url\\(/);\n    }\n    isPixels() {\n      if (!this.hasValue()) {\n        return false;\n      }\n      var asString = this.getString();\n      switch (true) {\n        case asString.endsWith('px'):\n        case /^[0-9]+$/.test(asString):\n          return true;\n        default:\n          return false;\n      }\n    }\n    setValue(value) {\n      this.value = value;\n      return this;\n    }\n    getValue(def) {\n      if (typeof def === 'undefined' || this.hasValue()) {\n        return this.value;\n      }\n      return def;\n    }\n    getNumber(def) {\n      if (!this.hasValue()) {\n        if (typeof def === 'undefined') {\n          return 0;\n        }\n        return parseFloat(def);\n      }\n      var {\n        value\n      } = this;\n      var n = parseFloat(value);\n      if (this.isString(/%$/)) {\n        n /= 100.0;\n      }\n      return n;\n    }\n    getString(def) {\n      if (typeof def === 'undefined' || this.hasValue()) {\n        return typeof this.value === 'undefined' ? '' : String(this.value);\n      }\n      return String(def);\n    }\n    getColor(def) {\n      var color = this.getString(def);\n      if (this.isNormalizedColor) {\n        return color;\n      }\n      this.isNormalizedColor = true;\n      color = normalizeColor(color);\n      this.value = color;\n      return color;\n    }\n    getDpi() {\n      return 96.0; // TODO: compute?\n    }\n    getRem() {\n      return this.document.rootEmSize;\n    }\n    getEm() {\n      return this.document.emSize;\n    }\n    getUnits() {\n      return this.getString().replace(/[0-9.-]/g, '');\n    }\n    getPixels(axisOrIsFontSize) {\n      var processPercent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (!this.hasValue()) {\n        return 0;\n      }\n      var [axis, isFontSize] = typeof axisOrIsFontSize === 'boolean' ? [undefined, axisOrIsFontSize] : [axisOrIsFontSize];\n      var {\n        viewPort\n      } = this.document.screen;\n      switch (true) {\n        case this.isString(/vmin$/):\n          return this.getNumber() / 100.0 * Math.min(viewPort.computeSize('x'), viewPort.computeSize('y'));\n        case this.isString(/vmax$/):\n          return this.getNumber() / 100.0 * Math.max(viewPort.computeSize('x'), viewPort.computeSize('y'));\n        case this.isString(/vw$/):\n          return this.getNumber() / 100.0 * viewPort.computeSize('x');\n        case this.isString(/vh$/):\n          return this.getNumber() / 100.0 * viewPort.computeSize('y');\n        case this.isString(/rem$/):\n          return this.getNumber() * this.getRem();\n        case this.isString(/em$/):\n          return this.getNumber() * this.getEm();\n        case this.isString(/ex$/):\n          return this.getNumber() * this.getEm() / 2.0;\n        case this.isString(/px$/):\n          return this.getNumber();\n        case this.isString(/pt$/):\n          return this.getNumber() * this.getDpi() * (1.0 / 72.0);\n        case this.isString(/pc$/):\n          return this.getNumber() * 15;\n        case this.isString(/cm$/):\n          return this.getNumber() * this.getDpi() / 2.54;\n        case this.isString(/mm$/):\n          return this.getNumber() * this.getDpi() / 25.4;\n        case this.isString(/in$/):\n          return this.getNumber() * this.getDpi();\n        case this.isString(/%$/) && isFontSize:\n          return this.getNumber() * this.getEm();\n        case this.isString(/%$/):\n          return this.getNumber() * viewPort.computeSize(axis);\n        default:\n          {\n            var n = this.getNumber();\n            if (processPercent && n < 1.0) {\n              return n * viewPort.computeSize(axis);\n            }\n            return n;\n          }\n      }\n    }\n    getMilliseconds() {\n      if (!this.hasValue()) {\n        return 0;\n      }\n      if (this.isString(/ms$/)) {\n        return this.getNumber();\n      }\n      return this.getNumber() * 1000;\n    }\n    getRadians() {\n      if (!this.hasValue()) {\n        return 0;\n      }\n      switch (true) {\n        case this.isString(/deg$/):\n          return this.getNumber() * (Math.PI / 180.0);\n        case this.isString(/grad$/):\n          return this.getNumber() * (Math.PI / 200.0);\n        case this.isString(/rad$/):\n          return this.getNumber();\n        default:\n          return this.getNumber() * (Math.PI / 180.0);\n      }\n    }\n    getDefinition() {\n      var asString = this.getString();\n      var name = /#([^)'\"]+)/.exec(asString);\n      if (name) {\n        name = name[1];\n      }\n      if (!name) {\n        name = asString;\n      }\n      return this.document.definitions[name];\n    }\n    getFillStyleDefinition(element, opacity) {\n      var def = this.getDefinition();\n      if (!def) {\n        return null;\n      } // gradient\n\n      if (typeof def.createGradient === 'function') {\n        return def.createGradient(this.document.ctx, element, opacity);\n      } // pattern\n\n      if (typeof def.createPattern === 'function') {\n        if (def.getHrefAttribute().hasValue()) {\n          var patternTransform = def.getAttribute('patternTransform');\n          def = def.getHrefAttribute().getDefinition();\n          if (patternTransform.hasValue()) {\n            def.getAttribute('patternTransform', true).setValue(patternTransform.value);\n          }\n        }\n        return def.createPattern(this.document.ctx, element, opacity);\n      }\n      return null;\n    }\n    getTextBaseline() {\n      if (!this.hasValue()) {\n        return null;\n      }\n      return Property.textBaselineMapping[this.getString()];\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        if (commas === 3) {\n          break;\n        }\n      }\n      if (opacity.hasValue() && this.isString() && commas !== 3) {\n        var color = new RGBColor(value);\n        if (color.ok) {\n          color.alpha = opacity.getNumber();\n          value = color.toRGBA();\n        }\n      }\n      return new Property(this.document, this.name, value);\n    }\n  }\n  Property.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  return Property;\n})();\nclass ViewPort {\n  constructor() {\n    this.viewPorts = [];\n  }\n  clear() {\n    this.viewPorts = [];\n  }\n  setCurrent(width, height) {\n    this.viewPorts.push({\n      width,\n      height\n    });\n  }\n  removeCurrent() {\n    this.viewPorts.pop();\n  }\n  getCurrent() {\n    var {\n      viewPorts\n    } = this;\n    return viewPorts[viewPorts.length - 1];\n  }\n  get width() {\n    return this.getCurrent().width;\n  }\n  get height() {\n    return this.getCurrent().height;\n  }\n  computeSize(d) {\n    if (typeof d === 'number') {\n      return d;\n    }\n    if (d === 'x') {\n      return this.width;\n    }\n    if (d === 'y') {\n      return this.height;\n    }\n    return Math.sqrt(Math.pow(this.width, 2) + Math.pow(this.height, 2)) / Math.sqrt(2);\n  }\n}\nclass Point {\n  constructor(x, y) {\n    this.x = x;\n    this.y = y;\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  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  static parsePath(path) {\n    var points = toNumbers(path);\n    var len = points.length;\n    var pathPoints = [];\n    for (var i = 0; i < len; i += 2) {\n      pathPoints.push(new Point(points[i], points[i + 1]));\n    }\n    return pathPoints;\n  }\n  angleTo(point) {\n    return Math.atan2(point.y - this.y, point.x - this.x);\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}\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  isWorking() {\n    return this.working;\n  }\n  start() {\n    if (this.working) {\n      return;\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  stop() {\n    if (!this.working) {\n      return;\n    }\n    var canvas = this.screen.ctx.canvas;\n    this.working = false;\n    canvas.onclick = null;\n    canvas.onmousemove = null;\n  }\n  hasEvents() {\n    return this.working && this.events.length > 0;\n  }\n  runEvents() {\n    if (!this.working) {\n      return;\n    }\n    var {\n      screen: document,\n      events,\n      eventElements\n    } = this;\n    var {\n      style\n    } = document.ctx.canvas;\n    if (style) {\n      style.cursor = '';\n    }\n    events.forEach((_ref, i) => {\n      var {\n        run\n      } = _ref;\n      var element = eventElements[i];\n      while (element) {\n        run(element);\n        element = element.parent;\n      }\n    }); // done running, clear\n\n    this.events = [];\n    this.eventElements = [];\n  }\n  checkPath(element, ctx) {\n    if (!this.working || !ctx) {\n      return;\n    }\n    var {\n      events,\n      eventElements\n    } = this;\n    events.forEach((_ref2, i) => {\n      var {\n        x,\n        y\n      } = _ref2;\n      if (!eventElements[i] && ctx.isPointInPath && ctx.isPointInPath(x, y)) {\n        eventElements[i] = element;\n      }\n    });\n  }\n  checkBoundingBox(element, boundingBox) {\n    if (!this.working || !boundingBox) {\n      return;\n    }\n    var {\n      events,\n      eventElements\n    } = this;\n    events.forEach((_ref3, i) => {\n      var {\n        x,\n        y\n      } = _ref3;\n      if (!eventElements[i] && boundingBox.isPointInBox(x, y)) {\n        eventElements[i] = element;\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    while (element) {\n      point.x -= element.offsetLeft;\n      point.y -= element.offsetTop;\n      element = element.offsetParent;\n    }\n    if (window.scrollX) {\n      point.x += window.scrollX;\n    }\n    if (window.scrollY) {\n      point.y += window.scrollY;\n    }\n    return point;\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      run(eventTarget) {\n        if (eventTarget.onClick) {\n          eventTarget.onClick();\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      run(eventTarget) {\n        if (eventTarget.onMouseMove) {\n          eventTarget.onMouseMove();\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;\nlet Screen = /*#__PURE__*/(() => {\n  class 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    wait(checker) {\n      this.waits.push(checker);\n    }\n    ready() {\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      if (!this.readyPromise) {\n        return Promise.resolve();\n      }\n      return this.readyPromise;\n    }\n    isReady() {\n      if (this.isReadyLock) {\n        return true;\n      }\n      var isReadyLock = this.waits.every(_ => _());\n      if (isReadyLock) {\n        this.waits = [];\n        if (this.resolveReady) {\n          this.resolveReady();\n        }\n      }\n      this.isReadyLock = isReadyLock;\n      return isReadyLock;\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    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      if (meetOrSlice === 'meet') {\n        finalDesiredWidth *= scaleMin;\n        finalDesiredHeight *= scaleMin;\n      }\n      if (meetOrSlice === 'slice') {\n        finalDesiredWidth *= scaleMax;\n        finalDesiredHeight *= scaleMax;\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      if (hasRefs) {\n        ctx.translate(-scaleMin * refXProp.getPixels('x'), -scaleMin * refYProp.getPixels('y'));\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      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        if (align.startsWith('xMid') && (isMeetMinY || isSliceMaxY)) {\n          ctx.translate(width / 2.0 - finalDesiredWidth / 2.0, 0);\n        }\n        if (align.endsWith('YMid') && (isMeetMinX || isSliceMaxX)) {\n          ctx.translate(0, height / 2.0 - finalDesiredHeight / 2.0);\n        }\n        if (align.startsWith('xMax') && (isMeetMinY || isSliceMaxY)) {\n          ctx.translate(width - finalDesiredWidth, 0);\n        }\n        if (align.endsWith('YMax') && (isMeetMinX || isSliceMaxX)) {\n          ctx.translate(0, height - finalDesiredHeight);\n        }\n      } // scale\n\n      switch (true) {\n        case align === 'none':\n          ctx.scale(scaleX, scaleY);\n          break;\n        case meetOrSlice === 'meet':\n          ctx.scale(scaleMin, scaleMin);\n          break;\n        case meetOrSlice === 'slice':\n          ctx.scale(scaleMax, scaleMax);\n          break;\n      } // translate\n\n      ctx.translate(-minX, -minY);\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      if (this.isReady()) {\n        this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n      }\n      if (!enableRedraw) {\n        return;\n      }\n      var now = Date.now();\n      var then = now;\n      var delta = 0;\n      var tick = () => {\n        now = Date.now();\n        delta = now - then;\n        if (delta >= frameDuration) {\n          then = now - delta % frameDuration;\n          if (this.shouldUpdate(ignoreAnimation, forceRedraw)) {\n            this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY);\n            mouse.runEvents();\n          }\n        }\n        this.intervalId = requestAnimationFrame(tick);\n      };\n      if (!ignoreMouse) {\n        mouse.start();\n      }\n      this.intervalId = requestAnimationFrame(tick);\n    }\n    stop() {\n      if (this.intervalId) {\n        requestAnimationFrame.cancel(this.intervalId);\n        this.intervalId = null;\n      }\n      this.mouse.stop();\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        if (shouldUpdate) {\n          return true;\n        }\n      } // need update from redraw?\n\n      if (typeof forceRedraw === 'function' && forceRedraw()) {\n        return true;\n      }\n      if (!this.isReadyLock && this.isReady()) {\n        return true;\n      } // need update from mouse events?\n\n      if (this.mouse.hasEvents()) {\n        return true;\n      }\n      return false;\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      if (canvas.width && canvas.height) {\n        viewPort.setCurrent(canvas.width, canvas.height);\n      } else {\n        viewPort.setCurrent(CLIENT_WIDTH, CLIENT_HEIGHT);\n      }\n      var widthStyle = element.getStyle('width');\n      var heightStyle = element.getStyle('height');\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          if (canvas.style) {\n            canvas.style.width = \"\".concat(canvas.width, \"px\");\n          }\n        }\n        if (heightStyle.hasValue()) {\n          canvas.height = heightStyle.getPixels('y');\n          if (canvas.style) {\n            canvas.style.height = \"\".concat(canvas.height, \"px\");\n          }\n        }\n      }\n      var cWidth = canvas.clientWidth || canvas.width;\n      var cHeight = canvas.clientHeight || canvas.height;\n      if (ignoreDimensions && widthStyle.hasValue() && heightStyle.hasValue()) {\n        cWidth = widthStyle.getPixels('x');\n        cHeight = heightStyle.getPixels('y');\n      }\n      viewPort.setCurrent(cWidth, cHeight);\n      if (typeof offsetX === 'number') {\n        element.getAttribute('x', true).setValue(offsetX);\n      }\n      if (typeof offsetY === 'number') {\n        element.getAttribute('y', true).setValue(offsetY);\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        if (typeof scaleWidth === 'number') {\n          var _widthStyle = element.getStyle('width');\n          if (_widthStyle.hasValue()) {\n            xRatio = _widthStyle.getPixels('x') / scaleWidth;\n          } else if (!isNaN(viewBox[2])) {\n            xRatio = viewBox[2] / scaleWidth;\n          }\n        }\n        if (typeof scaleHeight === 'number') {\n          var _heightStyle = element.getStyle('height');\n          if (_heightStyle.hasValue()) {\n            yRatio = _heightStyle.getPixels('y') / scaleHeight;\n          } else if (!isNaN(viewBox[3])) {\n            yRatio = viewBox[3] / scaleHeight;\n          }\n        }\n        if (!xRatio) {\n          xRatio = yRatio;\n        }\n        if (!yRatio) {\n          yRatio = xRatio;\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      if (!ignoreClear) {\n        ctx.clearRect(0, 0, cWidth, cHeight);\n      }\n      element.render(ctx);\n      if (isFirstRender) {\n        this.isFirstRender = false;\n      }\n    }\n  }\n  Screen.defaultWindow = defaultWindow;\n  Screen.defaultFetch = defaultFetch$1;\n  return Screen;\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  parse(resource) {\n    var _this = this;\n    return _asyncToGenerator(function* () {\n      if (resource.startsWith('<')) {\n        return _this.parseFromString(resource);\n      }\n      return _this.load(resource);\n    })();\n  }\n  parseFromString(xml) {\n    var parser = new this.DOMParser();\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  checkDocument(document) {\n    var parserError = document.getElementsByTagName('parsererror')[0];\n    if (parserError) {\n      throw new Error(parserError.textContent);\n    }\n    return document;\n  }\n  load(url) {\n    var _this2 = this;\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}\nclass Translate {\n  constructor(_, point) {\n    this.type = 'translate';\n    this.point = null;\n    this.point = Point.parse(point);\n  }\n  apply(ctx) {\n    var {\n      x,\n      y\n    } = this.point;\n    ctx.translate(x || 0.0, y || 0.0);\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  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}\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  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  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  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}\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    this.scale = scaleSize;\n    this.originX = transformOrigin[0];\n    this.originY = transformOrigin[1];\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  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  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}\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  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  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  applyToPoint(point) {\n    point.applyTransform(this.matrix);\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}\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}\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}\nfunction parseTransforms(transform) {\n  return compressSpaces(transform).trim().replace(/\\)([a-zA-Z])/g, ') $1').replace(/\\)(\\s?,\\s?)/g, ') ').split(/\\s(?=[a-z])/);\n}\nfunction parseTransform(transform) {\n  var [type, value] = transform.split('(');\n  return [type.trim(), value.trim().replace(')', '')];\n}\nlet Transform = /*#__PURE__*/(() => {\n  class 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        var [type, value] = parseTransform(transform);\n        var TransformType = Transform.transformTypes[type];\n        if (typeof TransformType !== 'undefined') {\n          this.transforms.push(new TransformType(this.document, value, transformOrigin));\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      if (transformStyle.hasValue()) {\n        return new Transform(document, transformStyle.getString(), transformOrigin);\n      }\n      return null;\n    }\n    apply(ctx) {\n      var {\n        transforms\n      } = this;\n      var len = transforms.length;\n      for (var i = 0; i < len; i++) {\n        transforms[i].apply(ctx);\n      }\n    }\n    unapply(ctx) {\n      var {\n        transforms\n      } = this;\n      var len = transforms.length;\n      for (var i = len - 1; i >= 0; i--) {\n        transforms[i].unapply(ctx);\n      }\n    } // TODO: applyToPoint unused ... remove?\n\n    applyToPoint(point) {\n      var {\n        transforms\n      } = this;\n      var len = transforms.length;\n      for (var i = 0; i < len; i++) {\n        transforms[i].applyToPoint(point);\n      }\n    }\n  }\n  Transform.transformTypes = {\n    translate: Translate,\n    rotate: Rotate,\n    scale: Scale,\n    matrix: Matrix,\n    skewX: SkewX,\n    skewY: SkewY\n  };\n  return Transform;\n})();\nlet Element = /*#__PURE__*/(() => {\n  class 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 = Object.create(null);\n      this.styles = Object.create(null);\n      this.stylesSpecificity = Object.create(null);\n      this.animationFrozen = false;\n      this.animationFrozenValue = '';\n      this.parent = null;\n      this.children = [];\n      if (!node || node.nodeType !== 1) {\n        // ELEMENT_NODE\n        return;\n      } // add attributes\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          var [name, value] = style.split(':').map(_ => _.trim());\n          this.styles[name] = new Property(document, name, value);\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      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          if (textNode.getText().length > 0) {\n            this.addChild(textNode); // TEXT_NODE\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      if (!attr && createIfNotExists) {\n        var _attr = new Property(this.document, name, '');\n        this.attributes[name] = _attr;\n        return _attr;\n      }\n      return attr || Property.empty(this.document);\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      return Property.empty(this.document);\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      if (style) {\n        return style;\n      }\n      var attr = this.getAttribute(name);\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      if (!skipAncestors) {\n        var {\n          parent\n        } = this;\n        if (parent) {\n          var parentStyle = parent.getStyle(name);\n          if (parentStyle !== null && parentStyle !== void 0 && parentStyle.hasValue()) {\n            return parentStyle;\n          }\n        }\n      }\n      if (createIfNotExists) {\n        var _style = new Property(this.document, name, '');\n        this.styles[name] = _style;\n        return _style;\n      }\n      return style || Property.empty(this.document);\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      ctx.save();\n      if (this.getStyle('mask').hasValue()) {\n        // mask\n        var mask = this.getStyle('mask').getDefinition();\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        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      ctx.restore();\n    }\n    setContext(_) {// NO RENDER\n    }\n    applyEffects(ctx) {\n      // transform\n      var transform = Transform.fromElement(this.document, this);\n      if (transform) {\n        transform.apply(ctx);\n      } // clip\n\n      var clipPathStyleProp = this.getStyle('clip-path', false, true);\n      if (clipPathStyleProp.hasValue()) {\n        var clip = clipPathStyleProp.getDefinition();\n        if (clip) {\n          clip.apply(ctx);\n        }\n      }\n    }\n    clearContext(_) {// NO RENDER\n    }\n    renderChildren(ctx) {\n      this.children.forEach(child => {\n        child.render(ctx);\n      });\n    }\n    addChild(childNode) {\n      var child = childNode instanceof Element ? childNode : this.document.createElement(childNode);\n      child.parent = this;\n      if (!Element.ignoreChildTypes.includes(child.type)) {\n        this.children.push(child);\n      }\n    }\n    matchesSelector(selector) {\n      var _node$getAttribute;\n      var {\n        node\n      } = this;\n      if (typeof node.matches === 'function') {\n        return node.matches(selector);\n      }\n      var styleClasses = (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'class');\n      if (!styleClasses || styleClasses === '') {\n        return false;\n      }\n      return styleClasses.split(' ').some(styleClass => \".\".concat(styleClass) === selector);\n    }\n    addStylesFromStyleDefinition() {\n      var {\n        styles,\n        stylesSpecificity\n      } = this.document;\n      for (var selector in styles) {\n        if (!selector.startsWith('@') && this.matchesSelector(selector)) {\n          var style = styles[selector];\n          var specificity = stylesSpecificity[selector];\n          if (style) {\n            for (var name in style) {\n              var existingSpecificity = this.stylesSpecificity[name];\n              if (typeof existingSpecificity === 'undefined') {\n                existingSpecificity = '000';\n              }\n              if (specificity >= existingSpecificity) {\n                this.styles[name] = style[name];\n                this.stylesSpecificity[name] = specificity;\n              }\n            }\n          }\n        }\n      }\n    }\n    removeStyles(element, ignoreStyles) {\n      var toRestore = ignoreStyles.reduce((toRestore, name) => {\n        var styleProp = element.getStyle(name);\n        if (!styleProp.hasValue()) {\n          return toRestore;\n        }\n        var value = styleProp.getString();\n        styleProp.setValue('');\n        return [...toRestore, [name, value]];\n      }, []);\n      return toRestore;\n    }\n    restoreStyles(element, styles) {\n      styles.forEach(_ref => {\n        var [name, value] = _ref;\n        element.getStyle(name, true).setValue(value);\n      });\n    }\n    isFirstChild() {\n      var _this$parent;\n      return ((_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.children.indexOf(this)) === 0;\n    }\n  }\n  Element.ignoreChildTypes = ['title'];\n  return Element;\n})();\nclass UnknownElement extends Element {\n  constructor(document, node, captureTextNodes) {\n    super(document, node, captureTextNodes);\n  }\n}\nfunction wrapFontFamily(fontFamily) {\n  var trimmed = fontFamily.trim();\n  return /^('|\")/.test(trimmed) ? trimmed : \"\\\"\".concat(trimmed, \"\\\"\");\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\nfunction prepareFontStyle(fontStyle) {\n  if (!fontStyle) {\n    return '';\n  }\n  var targetFontStyle = fontStyle.trim().toLowerCase();\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    default:\n      if (/^oblique\\s+(-|)\\d+deg$/.test(targetFontStyle)) {\n        return targetFontStyle;\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\nfunction prepareFontWeight(fontWeight) {\n  if (!fontWeight) {\n    return '';\n  }\n  var targetFontWeight = fontWeight.trim().toLowerCase();\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    default:\n      if (/^[\\d.]+$/.test(targetFontWeight)) {\n        return targetFontWeight;\n      }\n      return '';\n  }\n}\nlet Font = /*#__PURE__*/(() => {\n  class 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    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            set.fontStyle = true;\n            break;\n          case !set.fontVariant && Font.variants.includes(part):\n            if (part !== 'inherit') {\n              fontVariant = part;\n            }\n            set.fontStyle = true;\n            set.fontVariant = true;\n            break;\n          case !set.fontWeight && Font.weights.includes(part):\n            if (part !== 'inherit') {\n              fontWeight = part;\n            }\n            set.fontStyle = true;\n            set.fontVariant = true;\n            set.fontWeight = true;\n            break;\n          case !set.fontSize:\n            if (part !== 'inherit') {\n              [fontSize] = part.split('/');\n            }\n            set.fontStyle = true;\n            set.fontVariant = true;\n            set.fontWeight = true;\n            set.fontSize = true;\n            break;\n          default:\n            if (part !== 'inherit') {\n              fontFamily += part;\n            }\n        }\n      });\n      return new Font(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit);\n    }\n    toString() {\n      return [prepareFontStyle(this.fontStyle), this.fontVariant, prepareFontWeight(this.fontWeight), this.fontSize,\n      // Wrap fontFamily only on nodejs and only for canvas.ctx\n      prepareFontFamily(this.fontFamily)].join(' ').trim();\n    }\n  }\n  Font.styles = 'normal|italic|oblique|inherit';\n  Font.variants = 'normal|small-caps|inherit';\n  Font.weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit';\n  return Font;\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  get x() {\n    return this.x1;\n  }\n  get y() {\n    return this.y1;\n  }\n  get width() {\n    return this.x2 - this.x1;\n  }\n  get height() {\n    return this.y2 - this.y1;\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      if (x < this.x1) {\n        this.x1 = x;\n      }\n      if (x > this.x2) {\n        this.x2 = x;\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      if (y < this.y1) {\n        this.y1 = y;\n      }\n      if (y > this.y2) {\n        this.y2 = y;\n      }\n    }\n  }\n  addX(x) {\n    this.addPoint(x, null);\n  }\n  addY(y) {\n    this.addPoint(null, y);\n  }\n  addBoundingBox(boundingBox) {\n    if (!boundingBox) {\n      return;\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  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  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    if (a === 0) {\n      if (b === 0) {\n        return;\n      }\n      var t = -c / b;\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      return;\n    }\n    var b2ac = Math.pow(b, 2) - 4 * c * a;\n    if (b2ac < 0) {\n      return;\n    }\n    var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\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    var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\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  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  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  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}\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  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  isEnd() {\n    var {\n      i,\n      commands\n    } = this;\n    return i >= commands.length - 1;\n  }\n  next() {\n    var command = this.commands[++this.i];\n    this.previousCommand = this.command;\n    this.command = command;\n    return command;\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  getAsControlPoint(xProp, yProp) {\n    var point = this.getPoint(xProp, yProp);\n    this.control = point;\n    return point;\n  }\n  getAsCurrentPoint(xProp, yProp) {\n    var point = this.getPoint(xProp, yProp);\n    this.current = point;\n    return point;\n  }\n  getReflectedControlPoint() {\n    var previousCommand = this.previousCommand.type;\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    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  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    return point;\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    this.addMarkerAngle(point, from ? from.angleTo(point) : null);\n  }\n  addMarkerAngle(point, angle) {\n    this.points.push(point);\n    this.angles.push(angle);\n  }\n  getMarkerPoints() {\n    return this.points;\n  }\n  getMarkerAngles() {\n    var {\n      angles\n    } = this;\n    var len = angles.length;\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    return angles;\n  }\n}\nclass RenderedElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.modifiedEmSizeStack = false;\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    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      element = element.parent;\n    }\n    return opacity;\n  }\n  setContext(ctx) {\n    var fromMeasure = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\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      if (fillStyleProp.isUrlDefinition()) {\n        var fillStyle = fillStyleProp.getFillStyleDefinition(this, fillOpacityStyleProp);\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        var _fillStyle = fillStyleProp.getColor();\n        if (_fillStyle !== 'inherit') {\n          ctx.fillStyle = _fillStyle === 'none' ? 'rgba(0,0,0,0)' : _fillStyle;\n        }\n      }\n      if (fillOpacityStyleProp.hasValue()) {\n        var _fillStyle2 = new Property(this.document, 'fill', ctx.fillStyle).addOpacity(fillOpacityStyleProp).getColor();\n        ctx.fillStyle = _fillStyle2;\n      } // stroke\n\n      if (strokeStyleProp.isUrlDefinition()) {\n        var strokeStyle = strokeStyleProp.getFillStyleDefinition(this, strokeOpacityProp);\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        var _strokeStyle = strokeStyleProp.getString();\n        if (_strokeStyle !== 'inherit') {\n          ctx.strokeStyle = _strokeStyle === 'none' ? 'rgba(0,0,0,0)' : _strokeStyle;\n        }\n      }\n      if (strokeOpacityProp.hasValue()) {\n        var _strokeStyle2 = new Property(this.document, 'stroke', ctx.strokeStyle).addOpacity(strokeOpacityProp).getString();\n        ctx.strokeStyle = _strokeStyle2;\n      }\n      var strokeWidthStyleProp = this.getStyle('stroke-width');\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      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      if (strokeLinecapStyleProp.hasValue()) {\n        ctx.lineCap = strokeLinecapStyleProp.getString();\n      }\n      if (strokeLinejoinStyleProp.hasValue()) {\n        ctx.lineJoin = strokeLinejoinStyleProp.getString();\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      if (strokeDasharrayStyleProp.hasValue() && strokeDasharrayStyleProp.getString() !== 'none') {\n        var gaps = toNumbers(strokeDasharrayStyleProp.getString());\n        if (typeof ctx.setLineDash !== 'undefined') {\n          ctx.setLineDash(gaps);\n        } else\n          // @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\n            // @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        var offset = strokeDashoffsetProp.getPixels();\n        if (typeof ctx.lineDashOffset !== 'undefined') {\n          ctx.lineDashOffset = offset;\n        } else\n          // @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\n            // @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    this.modifiedEmSizeStack = false;\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      if (fontSizeStyleProp.isPixels()) {\n        this.document.emSize = fontSizeStyleProp.getPixels();\n        this.modifiedEmSizeStack = true;\n      }\n    }\n    if (!fromMeasure) {\n      // effects\n      this.applyEffects(ctx); // opacity\n\n      ctx.globalAlpha = this.calculateOpacity();\n    }\n  }\n  clearContext(ctx) {\n    super.clearContext(ctx);\n    if (this.modifiedEmSizeStack) {\n      this.document.popEmSize();\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  path(ctx) {\n    var {\n      pathParser\n    } = this;\n    var boundingBox = new BoundingBox();\n    pathParser.reset();\n    if (ctx) {\n      ctx.beginPath();\n    }\n    while (!pathParser.isEnd()) {\n      switch (pathParser.next().type) {\n        case PathParser.MOVE_TO:\n          this.pathM(ctx, boundingBox);\n          break;\n        case PathParser.LINE_TO:\n          this.pathL(ctx, boundingBox);\n          break;\n        case PathParser.HORIZ_LINE_TO:\n          this.pathH(ctx, boundingBox);\n          break;\n        case PathParser.VERT_LINE_TO:\n          this.pathV(ctx, boundingBox);\n          break;\n        case PathParser.CURVE_TO:\n          this.pathC(ctx, boundingBox);\n          break;\n        case PathParser.SMOOTH_CURVE_TO:\n          this.pathS(ctx, boundingBox);\n          break;\n        case PathParser.QUAD_TO:\n          this.pathQ(ctx, boundingBox);\n          break;\n        case PathParser.SMOOTH_QUAD_TO:\n          this.pathT(ctx, boundingBox);\n          break;\n        case PathParser.ARC:\n          this.pathA(ctx, boundingBox);\n          break;\n        case PathParser.CLOSE_PATH:\n          this.pathZ(ctx, boundingBox);\n          break;\n      }\n    }\n    return boundingBox;\n  }\n  getBoundingBox(_) {\n    return this.path();\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  renderChildren(ctx) {\n    this.path(ctx);\n    this.document.screen.mouse.checkPath(this, ctx);\n    var fillRuleStyleProp = this.getStyle('fill-rule');\n    if (ctx.fillStyle !== '') {\n      if (fillRuleStyleProp.getString('inherit') !== 'inherit') {\n        ctx.fill(fillRuleStyleProp.getString());\n      } else {\n        ctx.fill();\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    var markers = this.getMarkers();\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      if (markerStartStyleProp.isUrlDefinition()) {\n        var marker = markerStartStyleProp.getDefinition();\n        var [point, angle] = markers[0];\n        marker.render(ctx, point, angle);\n      }\n      if (markerMidStyleProp.isUrlDefinition()) {\n        var _marker = markerMidStyleProp.getDefinition();\n        for (var i = 1; i < markersLastIndex; i++) {\n          var [_point, _angle] = markers[i];\n          _marker.render(ctx, _point, _angle);\n        }\n      }\n      if (markerEndStyleProp.isUrlDefinition()) {\n        var _marker2 = markerEndStyleProp.getDefinition();\n        var [_point2, _angle2] = markers[markersLastIndex];\n        _marker2.render(ctx, _point2, _angle2);\n      }\n    }\n  }\n  static pathM(pathParser) {\n    var point = pathParser.getAsCurrentPoint();\n    pathParser.start = pathParser.current;\n    return {\n      point\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    if (ctx) {\n      ctx.moveTo(x, y);\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  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    if (ctx) {\n      ctx.lineTo(x, y);\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  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    if (ctx) {\n      ctx.lineTo(x, y);\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  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    if (ctx) {\n      ctx.lineTo(x, y);\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  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    if (ctx) {\n      ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\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  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    if (ctx) {\n      ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\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  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    if (ctx) {\n      ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\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  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    if (ctx) {\n      ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y);\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    if (l > 1) {\n      rX *= Math.sqrt(l);\n      rY *= Math.sqrt(l);\n    } // cx', cy'\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    if (isNaN(s)) {\n      s = 0;\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    if (vectorsRatio(u, v) >= 1) {\n      ad = 0;\n    }\n    return {\n      currentPoint,\n      rX,\n      rY,\n      sweepFlag,\n      xAxisRotation,\n      centp,\n      a1,\n      ad\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  static pathZ(pathParser) {\n    pathParser.current = pathParser.start;\n  }\n  pathZ(ctx, boundingBox) {\n    PathElement.pathZ(this.pathParser);\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}\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}\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  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    if (textBaseline) {\n      ctx.textBaseline = textBaseline;\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  getBoundingBox(ctx) {\n    if (this.type !== 'text') {\n      return this.getTElementBoundingBox(ctx);\n    } // first, calculate child positions\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      if (!boundingBox) {\n        boundingBox = childBoundingBox;\n      } else {\n        boundingBox.addBoundingBox(childBoundingBox);\n      }\n    });\n    return boundingBox;\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  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  getGlyph(font, text, i) {\n    var char = text[i];\n    var glyph = null;\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      if ((i === 0 || prevChar === ' ') && i < len - 1 && nextChar !== ' ') {\n        arabicForm = 'terminal';\n      }\n      if (i > 0 && prevChar !== ' ' && i < len - 1 && nextChar !== ' ') {\n        arabicForm = 'medial';\n      }\n      if (i > 0 && prevChar !== ' ' && (i === len - 1 || nextChar === ' ')) {\n        arabicForm = 'initial';\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    if (!glyph) {\n      glyph = font.missingGlyph;\n    }\n    return glyph;\n  }\n  getText() {\n    return '';\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(\n    // textNode.value\n    // || textNode.text\n    textNode.textContent || '');\n    if (index === 0) {\n      text = trimLeft(text);\n    }\n    if (index === lastIndex) {\n      text = trimRight(text);\n    }\n    return text;\n  }\n  renderChildren(ctx) {\n    if (this.type !== 'text') {\n      this.renderTElementChildren(ctx);\n      return;\n    } // first, calculate child positions\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  renderTElementChildren(ctx) {\n    var {\n      document,\n      parent\n    } = this;\n    var renderText = this.getText();\n    var customFont = parent.getStyle('font-family').getDefinition();\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      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        if (fontStyle === 'italic') {\n          ctx.transform(1, 0, .4, 1, 0, 0);\n        }\n        glyph.render(ctx);\n        if (fontStyle === 'italic') {\n          ctx.transform(1, 0, -.4, 1, 0, 0);\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        if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n          this.x += dx[i];\n        }\n      }\n      return;\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    if (ctx.strokeStyle) {\n      ctx.strokeText(renderText, x, y);\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    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    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    for (var i = this.textChunkStart; i < this.leafTexts.length; i++) {\n      this.leafTexts[i].x += shift;\n    } // start new chunk\n\n    this.minX = Number.POSITIVE_INFINITY;\n    this.maxX = Number.NEGATIVE_INFINITY;\n    this.textChunkStart = this.leafTexts.length;\n  }\n  adjustChildCoordinatesRecursive(ctx) {\n    this.children.forEach((_, i) => {\n      this.adjustChildCoordinatesRecursiveCore(ctx, this, this, i);\n    });\n    this.applyAnchoring();\n  }\n  adjustChildCoordinatesRecursiveCore(ctx, textParent, parent, i) {\n    var child = parent.children[i];\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  adjustChildCoordinates(ctx, textParent, parent, i) {\n    var child = parent.children[i];\n    if (typeof child.measureText !== 'function') {\n      return child;\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    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      if (!yAttr.hasValue()) {\n        yAttr.setValue(child.getInheritedAttribute('y'));\n      }\n      if (!dxAttr.hasValue()) {\n        dxAttr.setValue(child.getInheritedAttribute('dx'));\n      }\n      if (!dyAttr.hasValue()) {\n        dyAttr.setValue(child.getInheritedAttribute('dy'));\n      }\n    }\n    var width = child.measureText(ctx);\n    if (isRTL) {\n      textParent.x -= width;\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      if (dxAttr.hasValue()) {\n        child.x += dxAttr.getPixels('x');\n      }\n    } else {\n      if (dxAttr.hasValue()) {\n        textParent.x += dxAttr.getPixels('x');\n      }\n      child.x = textParent.x;\n    }\n    textParent.x = child.x;\n    if (!isRTL) {\n      textParent.x += width;\n    }\n    if (yAttr.hasValue()) {\n      child.y = yAttr.getPixels('y');\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      child.y = textParent.y;\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  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    var boundingBox = child.getBoundingBox(ctx);\n    if (!boundingBox) {\n      return null;\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  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  measureText(ctx) {\n    var {\n      measureCache\n    } = this;\n    if (~measureCache) {\n      return measureCache;\n    }\n    var renderText = this.getText();\n    var measure = this.measureTargetText(ctx, renderText);\n    this.measureCache = measure;\n    return measure;\n  }\n  measureTargetText(ctx, targetText) {\n    if (!targetText.length) {\n      return 0;\n    }\n    var {\n      parent\n    } = this;\n    var customFont = parent.getStyle('font-family').getDefinition();\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      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        if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n          _measure += dx[i];\n        }\n      }\n      return _measure;\n    }\n    if (!ctx.measureText) {\n      return targetText.length * 10;\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  getInheritedAttribute(name) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n    var current = this;\n    while (current instanceof TextElement && current.isFirstChild()) {\n      var parentAttr = current.parent.getAttribute(name);\n      if (parentAttr.hasValue(true)) {\n        return parentAttr.getValue('0');\n      }\n      current = current.parent;\n    }\n    return null;\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  getText() {\n    return this.text;\n  }\n}\nclass TextNode extends TSpanElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'textNode';\n  }\n}\nclass SVGElement extends RenderedElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'svg';\n    this.root = false;\n  }\n  setContext(ctx) {\n    var _this$node$parentNode;\n    var {\n      document\n    } = this;\n    var {\n      screen,\n      window\n    } = document;\n    var canvas = ctx.canvas;\n    screen.setDefaults(ctx);\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      if (fontSizeProp.hasValue()) {\n        document.rootEmSize = fontSizeProp.getPixels('y');\n        document.emSize = document.rootEmSize;\n      }\n    } // create new view port\n\n    if (!this.getAttribute('x').hasValue()) {\n      this.getAttribute('x', true).setValue(0);\n    }\n    if (!this.getAttribute('y').hasValue()) {\n      this.getAttribute('y', true).setValue(0);\n    }\n    var {\n      width,\n      height\n    } = screen.viewPort;\n    if (!this.getStyle('width').hasValue()) {\n      this.getStyle('width', true).setValue('100%');\n    }\n    if (!this.getStyle('height').hasValue()) {\n      this.getStyle('height', true).setValue('100%');\n    }\n    if (!this.getStyle('color').hasValue()) {\n      this.getStyle('color', true).setValue('black');\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    if (viewBox) {\n      minX = viewBox[0];\n      minY = viewBox[1];\n    }\n    if (!this.root) {\n      width = this.getStyle('width').getPixels('x');\n      height = this.getStyle('height').getPixels('y');\n      if (this.type === 'marker') {\n        clipX = minX;\n        clipY = minY;\n        minX = 0;\n        minY = 0;\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    super.setContext(ctx);\n    ctx.translate(this.getAttribute('x').getPixels('x'), this.getAttribute('y').getPixels('y'));\n    if (viewBox) {\n      width = viewBox[2];\n      height = viewBox[3];\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    if (viewBox) {\n      screen.viewPort.removeCurrent();\n      screen.viewPort.setCurrent(width, height);\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  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    if (preserveAspectRatio) {\n      if (typeof preserveAspectRatio === 'string') {\n        this.getAttribute('preserveAspectRatio', true).setValue(preserveAspectRatio);\n      } else {\n        var preserveAspectRatioAttr = this.getAttribute('preserveAspectRatio');\n        if (preserveAspectRatioAttr.hasValue()) {\n          preserveAspectRatioAttr.setValue(preserveAspectRatioAttr.getString().replace(/^\\s*(\\S.*\\S)\\s*$/, '$1'));\n        }\n      }\n    }\n    widthAttr.setValue(width);\n    heightAttr.setValue(height);\n    if (!viewBoxAttr.hasValue()) {\n      viewBoxAttr.setValue(\"0 0 \".concat(originWidth || width, \" \").concat(originHeight || height));\n    }\n    if (styleAttr.hasValue()) {\n      var widthStyle = this.getStyle('width');\n      var heightStyle = this.getStyle('height');\n      if (widthStyle.hasValue()) {\n        widthStyle.setValue(\"\".concat(width, \"px\"));\n      }\n      if (heightStyle.hasValue()) {\n        heightStyle.setValue(\"\".concat(height, \"px\"));\n      }\n    }\n  }\n}\nclass RectElement extends PathElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'rect';\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    if (rxAttr.hasValue() && !ryAttr.hasValue()) {\n      ry = rx;\n    }\n    if (ryAttr.hasValue() && !rxAttr.hasValue()) {\n      rx = ry;\n    }\n    rx = Math.min(rx, width / 2.0);\n    ry = Math.min(ry, height / 2.0);\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    return new BoundingBox(x, y, x + width, y + height);\n  }\n  getMarkers() {\n    return null;\n  }\n}\nclass CircleElement extends PathElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'circle';\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    if (ctx && r > 0) {\n      ctx.beginPath();\n      ctx.arc(cx, cy, r, 0, Math.PI * 2, false);\n      ctx.closePath();\n    }\n    return new BoundingBox(cx - r, cy - r, cx + r, cy + r);\n  }\n  getMarkers() {\n    return null;\n  }\n}\nclass EllipseElement extends PathElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'ellipse';\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    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    return new BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);\n  }\n  getMarkers() {\n    return null;\n  }\n}\nclass LineElement extends PathElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'line';\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  path(ctx) {\n    var [{\n      x: x0,\n      y: y0\n    }, {\n      x: x1,\n      y: y1\n    }] = this.getPoints();\n    if (ctx) {\n      ctx.beginPath();\n      ctx.moveTo(x0, y0);\n      ctx.lineTo(x1, y1);\n    }\n    return new BoundingBox(x0, y0, x1, y1);\n  }\n  getMarkers() {\n    var [p0, p1] = this.getPoints();\n    var a = p0.angleTo(p1);\n    return [[p0, a], [p1, a]];\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  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    if (ctx) {\n      ctx.beginPath();\n      ctx.moveTo(x0, y0);\n    }\n    points.forEach(_ref => {\n      var {\n        x,\n        y\n      } = _ref;\n      boundingBox.addPoint(x, y);\n      if (ctx) {\n        ctx.lineTo(x, y);\n      }\n    });\n    return boundingBox;\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      markers.push([point, point.angleTo(points[i + 1])]);\n    });\n    if (markers.length > 0) {\n      markers.push([points[points.length - 1], markers[markers.length - 1][1]]);\n    }\n    return markers;\n  }\n}\nclass PolygonElement extends PolylineElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'polygon';\n  }\n  path(ctx) {\n    var boundingBox = super.path(ctx);\n    var [{\n      x,\n      y\n    }] = this.points;\n    if (ctx) {\n      ctx.lineTo(x, y);\n      ctx.closePath();\n    }\n    return boundingBox;\n  }\n}\nclass PatternElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'pattern';\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    if (xAttr.hasValue() && yAttr.hasValue()) {\n      patternCtx.translate(xAttr.getPixels('x', true), yAttr.getPixels('y', true));\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    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    var pattern = ctx.createPattern(patternCanvas, 'repeat');\n    return pattern;\n  }\n}\nclass MarkerElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'marker';\n  }\n  render(ctx, point, angle) {\n    if (!point) {\n      return;\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    if (orient === 'auto') {\n      ctx.rotate(angle);\n    }\n    if (markerUnits === 'strokeWidth') {\n      ctx.scale(ctx.lineWidth, ctx.lineWidth);\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    if (markerUnits === 'strokeWidth') {\n      ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth);\n    }\n    if (orient === 'auto') {\n      ctx.rotate(-angle);\n    }\n    ctx.translate(-x, -y);\n  }\n}\nclass DefsElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'defs';\n  }\n  render() {// NOOP\n  }\n}\nclass GElement extends RenderedElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'g';\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}\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  getGradientUnits() {\n    return this.getAttribute('gradientUnits').getString('objectBoundingBox');\n  }\n  createGradient(ctx, element, parentOpacityProp) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n    var stopsContainer = this;\n    if (this.getHrefAttribute().hasValue()) {\n      stopsContainer = this.getHrefAttribute().getDefinition();\n      this.inheritStopContainer(stopsContainer);\n    }\n    var {\n      stops\n    } = stopsContainer;\n    var gradient = this.getGradient(ctx, element);\n    if (!gradient) {\n      return this.addParentOpacity(parentOpacityProp, stops[stops.length - 1].color);\n    }\n    stops.forEach(stop => {\n      gradient.addColorStop(stop.offset, this.addParentOpacity(parentOpacityProp, stop.color));\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    return gradient;\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  addParentOpacity(parentOpacityProp, color) {\n    if (parentOpacityProp.hasValue()) {\n      var colorProp = new Property(this.document, 'color', color);\n      return colorProp.addOpacity(parentOpacityProp).getColor();\n    }\n    return color;\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  getGradient(ctx, element) {\n    var isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n    var boundingBox = isBoundingBoxUnits ? element.getBoundingBox(ctx) : null;\n    if (isBoundingBoxUnits && !boundingBox) {\n      return null;\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    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    if (x1 === x2 && y1 === y2) {\n      return null;\n    }\n    return ctx.createLinearGradient(x1, y1, x2, y2);\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  getGradient(ctx, element) {\n    var isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox';\n    var boundingBox = element.getBoundingBox(ctx);\n    if (isBoundingBoxUnits && !boundingBox) {\n      return null;\n    }\n    if (!this.getAttribute('cx').hasValue()) {\n      this.getAttribute('cx', true).setValue('50%');\n    }\n    if (!this.getAttribute('cy').hasValue()) {\n      this.getAttribute('cy', true).setValue('50%');\n    }\n    if (!this.getAttribute('r').hasValue()) {\n      this.getAttribute('r', true).setValue('50%');\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    if (this.getAttribute('fx').hasValue()) {\n      fx = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute('fx').getNumber() : this.getAttribute('fx').getPixels('x');\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    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}\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    if (stopColor.getString() === '') {\n      stopColor.setValue('#000');\n    }\n    if (stopOpacity.hasValue()) {\n      stopColor = stopColor.addOpacity(stopOpacity);\n    }\n    this.offset = offset;\n    this.color = stopColor.getColor();\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    if (valuesAttr.hasValue()) {\n      this.values.setValue(valuesAttr.getString().split(';'));\n    }\n  }\n  getProperty() {\n    var attributeType = this.getAttribute('attributeType').getString();\n    var attributeName = this.getAttribute('attributeName').getString();\n    if (attributeType === 'CSS') {\n      return this.parent.getStyle(attributeName, true);\n    }\n    return this.parent.getAttribute(attributeName, true);\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    if (initialUnits === '%') {\n      newValue *= 100.0; // numValue() returns 0-1 whereas properties are 0-100\n    }\n    return \"\".concat(newValue).concat(initialUnits);\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    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      return false;\n    }\n    this.duration += delta; // if we're past the begin time\n\n    var updated = false;\n    if (this.begin < this.duration) {\n      var newValue = this.calcValue(); // tween\n\n      var typeAttr = this.getAttribute('type');\n      if (typeAttr.hasValue()) {\n        // for transform, etc.\n        var type = typeAttr.getString();\n        newValue = \"\".concat(type, \"(\").concat(newValue, \")\");\n      }\n      prop.setValue(newValue);\n      updated = true;\n    }\n    return updated;\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    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    return result;\n  }\n}\nclass AnimateColorElement extends AnimateElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'animateColor';\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    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    return this.getAttribute('from').getColor();\n  }\n}\nclass AnimateTransformElement extends AnimateElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'animateTransform';\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}\nclass FontElement extends Element {\n  constructor(document, node, captureTextNodes) {\n    super(document, node, captureTextNodes);\n    this.type = 'font';\n    this.glyphs = Object.create(null);\n    this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber();\n    var {\n      definitions\n    } = document;\n    var {\n      children\n    } = this;\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            if (fontFamilyStyle.hasValue()) {\n              definitions[fontFamilyStyle.getString()] = this;\n            }\n            break;\n          }\n        case 'missing-glyph':\n          this.missingGlyph = child;\n          break;\n        case 'glyph':\n          {\n            var glyph = child;\n            if (glyph.arabicForm) {\n              this.isRTL = true;\n              this.isArabic = true;\n              if (typeof this.glyphs[glyph.unicode] === 'undefined') {\n                this.glyphs[glyph.unicode] = Object.create(null);\n              }\n              this.glyphs[glyph.unicode][glyph.arabicForm] = glyph;\n            } else {\n              this.glyphs[glyph.unicode] = glyph;\n            }\n            break;\n          }\n      }\n    }\n  }\n  render() {// NO RENDER\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}\nclass MissingGlyphElement extends PathElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'missing-glyph';\n    this.horizAdvX = 0;\n  }\n}\nclass TRefElement extends TextElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'tref';\n  }\n  getText() {\n    var element = this.getHrefAttribute().getDefinition();\n    if (element) {\n      var firstChild = element.children[0];\n      if (firstChild) {\n        return firstChild.getText();\n      }\n    }\n    return '';\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  getText() {\n    return this.text;\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  onClick() {\n    var {\n      window\n    } = this.document;\n    if (window) {\n      window.open(this.getHrefAttribute().getString());\n    }\n  }\n  onMouseMove() {\n    var ctx = this.document.ctx;\n    ctx.canvas.style.cursor = 'pointer';\n  }\n}\nfunction ownKeys$2(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread$2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\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  return target;\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  getText() {\n    return this.text;\n  }\n  path(ctx) {\n    var {\n      dataArray\n    } = this;\n    if (ctx) {\n      ctx.beginPath();\n    }\n    dataArray.forEach(_ref => {\n      var {\n        type,\n        points\n      } = _ref;\n      switch (type) {\n        case PathParser.LINE_TO:\n          if (ctx) {\n            ctx.lineTo(points[0], points[1]);\n          }\n          break;\n        case PathParser.MOVE_TO:\n          if (ctx) {\n            ctx.moveTo(points[0], points[1]);\n          }\n          break;\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          break;\n        case PathParser.QUAD_TO:\n          if (ctx) {\n            ctx.quadraticCurveTo(points[0], points[1], points[2], points[3]);\n          }\n          break;\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            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            break;\n          }\n        case PathParser.CLOSE_PATH:\n          if (ctx) {\n            ctx.closePath();\n          }\n          break;\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    if (textDecoration === 'underline') {\n      ctx.beginPath();\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      if (ctx.fillStyle) {\n        ctx.fillText(partialText, 0, 0);\n      }\n      if (ctx.strokeStyle) {\n        ctx.strokeText(partialText, 0, 0);\n      }\n      ctx.restore();\n      if (textDecoration === 'underline') {\n        if (i === 0) {\n          ctx.moveTo(p0.x, p0.y + fontSize / 8);\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    if (textDecoration === 'underline') {\n      ctx.lineWidth = fontSize / 20;\n      ctx.strokeStyle = fill;\n      ctx.stroke();\n      ctx.closePath();\n    }\n    ctx.restore();\n  }\n  getLetterSpacingAt() {\n    var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    return this.letterSpacingCache[idx] || 0;\n  }\n  findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, inputOffset, dy, c, charI) {\n    var offset = inputOffset;\n    var glyphWidth = this.measureText(ctx, c);\n    if (c === ' ' && anchor === 'justify' && textFullWidth < fullPathWidth) {\n      glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber;\n    }\n    if (charI > -1) {\n      offset += this.getLetterSpacingAt(charI);\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    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    offset += glyphWidth;\n    return {\n      offset,\n      segment,\n      rotation\n    };\n  }\n  measureText(ctx, text) {\n    var {\n      measuresCache\n    } = this;\n    var targetText = text || this.getText();\n    if (measuresCache.has(targetText)) {\n      return measuresCache.get(targetText);\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  setTextData(ctx) {\n    if (this.glyphInfo) {\n      return;\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    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    var letterSpacingCache = [];\n    var textLen = renderText.length;\n    this.letterSpacingCache = letterSpacingCache;\n    for (var i = 0; i < textLen; i++) {\n      letterSpacingCache.push(typeof dx[i] !== 'undefined' ? dx[i] : letterSpacing);\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    if (anchor === 'middle' || anchor === 'center') {\n      offset = -textFullWidth / 2;\n    }\n    if (anchor === 'end' || anchor === 'right') {\n      offset = -textFullWidth;\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      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      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  parsePathData(path) {\n    this.pathLength = -1; // reset path length\n\n    if (!path) {\n      return [];\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      switch (command.type) {\n        case PathParser.MOVE_TO:\n          this.pathM(pathParser, points);\n          break;\n        case PathParser.LINE_TO:\n          nextCommandType = this.pathL(pathParser, points);\n          break;\n        case PathParser.HORIZ_LINE_TO:\n          nextCommandType = this.pathH(pathParser, points);\n          break;\n        case PathParser.VERT_LINE_TO:\n          nextCommandType = this.pathV(pathParser, points);\n          break;\n        case PathParser.CURVE_TO:\n          this.pathC(pathParser, points);\n          break;\n        case PathParser.SMOOTH_CURVE_TO:\n          nextCommandType = this.pathS(pathParser, points);\n          break;\n        case PathParser.QUAD_TO:\n          this.pathQ(pathParser, points);\n          break;\n        case PathParser.SMOOTH_QUAD_TO:\n          nextCommandType = this.pathT(pathParser, points);\n          break;\n        case PathParser.ARC:\n          points = this.pathA(pathParser);\n          break;\n        case PathParser.CLOSE_PATH:\n          PathElement.pathZ(pathParser);\n          break;\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    return pathCommands;\n  }\n  pathM(pathParser, points) {\n    var {\n      x,\n      y\n    } = PathElement.pathM(pathParser).point;\n    points.push(x, y);\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  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  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  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  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  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  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  pathA(pathParser) {\n    var {\n      rX,\n      rY,\n      sweepFlag,\n      xAxisRotation,\n      centp,\n      a1,\n      ad\n    } = PathElement.pathA(pathParser);\n    if (sweepFlag === 0 && ad > 0) {\n      ad -= 2 * Math.PI;\n    }\n    if (sweepFlag === 1 && ad < 0) {\n      ad += 2 * Math.PI;\n    }\n    return [centp.x, centp.y, rX, rY, a1, ad, xAxisRotation, sweepFlag];\n  }\n  calcLength(x, y, commandType, points) {\n    var len = 0;\n    var p1 = null;\n    var p2 = null;\n    var t = 0;\n    switch (commandType) {\n      case PathParser.LINE_TO:\n        return this.getLineLength(x, y, points[0], points[1]);\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        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        return len;\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        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        return len;\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          p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0);\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          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    return 0;\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    if (p2x < p1x) {\n      run *= -1;\n    }\n    var rise = m * run;\n    var pt = null;\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      if (len < PSEUDO_ZERO) {\n        return null;\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      if (p2x < p1x) {\n        run *= -1;\n      }\n      rise = m * run;\n      pt = {\n        x: ix + run,\n        y: iy + rise\n      };\n    }\n    return pt;\n  }\n  getPointOnPath(distance) {\n    var fullLen = this.getPathLength();\n    var cumulativePathLength = 0;\n    var p = null;\n    if (distance < -0.00005 || distance - 0.00005 > fullLen) {\n      return null;\n    }\n    var {\n      dataArray\n    } = this;\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      var delta = distance - cumulativePathLength;\n      var currentT = 0;\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        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            if (dTheta < 0 && currentT < end || dTheta >= 0 && currentT > end) {\n              break;\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        case PathParser.CURVE_TO:\n          currentT = delta / command.pathLength;\n          if (currentT > 1) {\n            currentT = 1;\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        case PathParser.QUAD_TO:\n          currentT = delta / command.pathLength;\n          if (currentT > 1) {\n            currentT = 1;\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      if (p) {\n        return p;\n      }\n      break;\n    }\n    return null;\n  }\n  getLineLength(x1, y1, x2, y2) {\n    return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\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    return this.pathLength;\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  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  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  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    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      for (var l = 0; l <= fullLen; l += precision) {\n        var p0 = this.getPointOnPath(l);\n        var p1 = this.getPointOnPath(l + precision);\n        if (!p0 || !p1) {\n          continue;\n        }\n        s += this.getLineLength(p0.x, p0.y, p1.x, p1.y);\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  getEquidistantPointOnPath(targetDistance, step, precision) {\n    this.buildEquidistantCache(step, precision);\n    if (targetDistance < 0 || targetDistance - this.getPathLength() > 0.00005) {\n      return null;\n    }\n    var idx = Math.round(targetDistance / this.getPathLength() * (this.equidistantCache.points.length - 1));\n    return this.equidistantCache.points[idx] || null;\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    if (!href) {\n      return;\n    }\n    var isSvg = href.endsWith('.svg') || /^\\s*data:image\\/svg\\+xml/i.test(href);\n    document.images.push(this);\n    if (!isSvg) {\n      void this.loadImage(href);\n    } else {\n      void this.loadSvg(href);\n    }\n    this.isSvg = isSvg;\n  }\n  loadImage(href) {\n    var _this = this;\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      _this.loaded = true;\n    })();\n  }\n  loadSvg(href) {\n    var _this2 = this;\n    return _asyncToGenerator(function* () {\n      var match = dataUriRegex.exec(href);\n      if (match) {\n        var data = match[5];\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      _this2.loaded = true;\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    if (!loaded || !image || !width || !height) {\n      return;\n    }\n    ctx.save();\n    ctx.translate(x, y);\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      if (this.loaded) {\n        if (typeof _image.complete === 'undefined' || _image.complete) {\n          ctx.drawImage(_image, 0, 0);\n        }\n      }\n    }\n    ctx.restore();\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}\nclass SymbolElement extends RenderedElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'symbol';\n  }\n  render(_) {// NO RENDER\n  }\n}\nclass SVGFontLoader {\n  constructor(document) {\n    this.document = document;\n    this.loaded = false;\n    document.fonts.push(this);\n  }\n  load(fontFamily, url) {\n    var _this = this;\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      _this.loaded = true;\n    })();\n  }\n}\nlet StyleElement = /*#__PURE__*/(() => {\n  class 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        if (!def) {\n          return;\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          if (!cssClass) {\n            return;\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            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          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                if (url) {\n                  void new SVGFontLoader(document).load(fontFamily, url);\n                }\n              }\n            });\n          }\n        });\n      });\n    }\n  }\n  StyleElement.parseExternalUrl = parseExternalUrl;\n  return StyleElement;\n})();\nclass UseElement extends RenderedElement {\n  constructor() {\n    super(...arguments);\n    this.type = 'use';\n  }\n  setContext(ctx) {\n    super.setContext(ctx);\n    var xAttr = this.getAttribute('x');\n    var yAttr = this.getAttribute('y');\n    if (xAttr.hasValue()) {\n      ctx.translate(xAttr.getPixels('x'), 0);\n    }\n    if (yAttr.hasValue()) {\n      ctx.translate(0, yAttr.getPixels('y'));\n    }\n  }\n  path(ctx) {\n    var {\n      element\n    } = this;\n    if (element) {\n      element.path(ctx);\n    }\n  }\n  renderChildren(ctx) {\n    var {\n      document,\n      element\n    } = this;\n    if (element) {\n      var tempSvg = element;\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      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        if (heightStyle.hasValue()) {\n          tempSvg.attributes.height = new Property(document, 'height', heightStyle.getString());\n        }\n      }\n      var oldParent = tempSvg.parent;\n      tempSvg.parent = this;\n      tempSvg.render(ctx);\n      tempSvg.parent = oldParent;\n    }\n  }\n  getBoundingBox(ctx) {\n    var {\n      element\n    } = this;\n    if (element) {\n      return element.getBoundingBox(ctx);\n    }\n    return null;\n  }\n  elementTransform() {\n    var {\n      document,\n      element\n    } = this;\n    return Transform.fromElement(document, element);\n  }\n  get element() {\n    if (!this.cachedElement) {\n      this.cachedElement = this.getHrefAttribute().getDefinition();\n    }\n    return this.cachedElement;\n  }\n}\nfunction imGet(img, x, y, width, _height, rgba) {\n  return img[y * width * 4 + x * 4 + rgba];\n}\nfunction imSet(img, x, y, width, _height, rgba, val) {\n  img[y * width * 4 + x * 4 + rgba] = val;\n}\nfunction m(matrix, i, v) {\n  var mi = matrix[i];\n  return mi * v;\n}\nfunction c(a, m1, m2, m3) {\n  return m1 + Math.cos(a) * m2 + Math.sin(a) * m3;\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    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      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      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    this.matrix = matrix;\n    this.includeOpacity = this.getAttribute('includeOpacity').hasValue();\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    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        if (includeOpacity) {\n          nr = 0;\n          ng = 0;\n          nb = 0;\n          na *= a / 255;\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    ctx.clearRect(0, 0, width, height);\n    ctx.putImageData(srcData, 0, 0);\n  }\n}\nlet MaskElement = /*#__PURE__*/(() => {\n  class MaskElement extends Element {\n    constructor() {\n      super(...arguments);\n      this.type = 'mask';\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      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      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    render(_) {// NO RENDER\n    }\n  }\n  MaskElement.ignoreStyles = ['mask', 'transform', 'clip-path'];\n  return MaskElement;\n})();\nvar noop = () => {// NOOP\n};\nclass ClipPathElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'clipPath';\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    if (contextProto) {\n      contextProto.beginPath = noop;\n      contextProto.closePath = noop;\n    }\n    Reflect.apply(beginPath, ctx, []);\n    this.children.forEach(child => {\n      if (typeof child.path === 'undefined') {\n        return;\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      if (transform) {\n        transform.apply(ctx);\n      }\n      child.path(ctx);\n      if (contextProto) {\n        contextProto.closePath = closePath;\n      }\n      if (transform) {\n        transform.unapply(ctx);\n      }\n    });\n    Reflect.apply(closePath, ctx, []);\n    ctx.clip();\n    if (contextProto) {\n      contextProto.beginPath = beginPath;\n      contextProto.closePath = closePath;\n    }\n  }\n  render(_) {// NO RENDER\n  }\n}\nlet FilterElement = /*#__PURE__*/(() => {\n  class FilterElement extends Element {\n    constructor() {\n      super(...arguments);\n      this.type = 'filter';\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      if (!boundingBox) {\n        return;\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      if (tmpCanvasWidth < 1 || tmpCanvasHeight < 1) {\n        return;\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    render(_) {// NO RENDER\n    }\n  }\n  FilterElement.ignoreStyles = ['filter', 'transform', 'clip-path'];\n  return FilterElement;\n})();\nclass FeDropShadowElement extends Element {\n  constructor(document, node, captureTextNodes) {\n    super(document, node, captureTextNodes);\n    this.type = 'feDropShadow';\n    this.addStylesFromStyleDefinition();\n  }\n  apply(_, _x, _y, _width, _height) {// TODO: implement\n  }\n}\nclass FeMorphologyElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'feMorphology';\n  }\n  apply(_, _x, _y, _width, _height) {// TODO: implement\n  }\n}\nclass FeCompositeElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'feComposite';\n  }\n  apply(_, _x, _y, _width, _height) {// TODO: implement\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  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    if (body) {\n      canvas.style.display = 'none';\n      body.appendChild(canvas);\n    }\n    canvasRGBA(canvas, x, y, width, height, blurRadius);\n    if (body) {\n      body.removeChild(canvas);\n    }\n  }\n}\nclass TitleElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'title';\n  }\n}\nclass DescElement extends Element {\n  constructor() {\n    super(...arguments);\n    this.type = 'desc';\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};\nfunction ownKeys$1(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread$1(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\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  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}\nfunction createImage(_x) {\n  return _createImage.apply(this, arguments);\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    if (anonymousCrossOrigin) {\n      image.crossOrigin = 'Anonymous';\n    }\n    return new Promise((resolve, reject) => {\n      image.onload = () => {\n        resolve(image);\n      };\n      image.onerror = (_event, _source, _lineno, _colno, error) => {\n        reject(error);\n      };\n      image.src = src;\n    });\n  });\n  return _createImage.apply(this, arguments);\n}\nlet Document = /*#__PURE__*/(() => {\n  class 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 = Object.create(null);\n      this.styles = Object.create(null);\n      this.stylesSpecificity = Object.create(null);\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    bindCreateImage(createImage, anonymousCrossOrigin) {\n      if (typeof anonymousCrossOrigin === 'boolean') {\n        return (source, forceAnonymousCrossOrigin) => createImage(source, typeof forceAnonymousCrossOrigin === 'boolean' ? forceAnonymousCrossOrigin : anonymousCrossOrigin);\n      }\n      return createImage;\n    }\n    get window() {\n      return this.screen.window;\n    }\n    get fetch() {\n      return this.screen.fetch;\n    }\n    get ctx() {\n      return this.screen.ctx;\n    }\n    get emSize() {\n      var {\n        emSizeStack\n      } = this;\n      return emSizeStack[emSizeStack.length - 1];\n    }\n    set emSize(value) {\n      var {\n        emSizeStack\n      } = this;\n      emSizeStack.push(value);\n    }\n    popEmSize() {\n      var {\n        emSizeStack\n      } = this;\n      emSizeStack.pop();\n    }\n    getUniqueId() {\n      return \"canvg\".concat(++this.uniqueId);\n    }\n    isImagesLoaded() {\n      return this.images.every(_ => _.loaded);\n    }\n    isFontsLoaded() {\n      return this.fonts.every(_ => _.loaded);\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    createElement(node) {\n      var elementType = node.nodeName.replace(/^[^:]+:/, '');\n      var ElementType = Document.elementTypes[elementType];\n      if (typeof ElementType !== 'undefined') {\n        return new ElementType(this, node);\n      }\n      return new UnknownElement(this, node);\n    }\n    createTextNode(node) {\n      return new TextNode(this, node);\n    }\n    setViewBox(config) {\n      this.screen.setViewBox(_objectSpread$1({\n        document: this\n      }, config));\n    }\n  }\n  Document.createCanvas = createCanvas;\n  Document.createImage = createImage;\n  Document.elementTypes = elements;\n  return Document;\n})();\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\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  return target;\n}\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  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  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  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  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  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  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  render() {\n    var _arguments2 = arguments,\n      _this = this;\n    return _asyncToGenerator(function* () {\n      var options = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : {};\n      _this.start(_objectSpread({\n        enableRedraw: true,\n        ignoreAnimation: true,\n        ignoreMouse: true\n      }, options));\n      yield _this.ready();\n      _this.stop();\n    })();\n  }\n  /**\r\n   * Start rendering.\r\n   * @param options - Render options.\r\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  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  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}\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,"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","create","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"],"sources":["/root/rfcontavagas_hom/12.-Servidor-local-Docker/Front-Parking-Angular/node_modules/canvg/lib/index.es.js"],"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 = Object.create(null);\n    this.styles = Object.create(null);\n    this.stylesSpecificity = Object.create(null);\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 = Object.create(null);\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] = Object.create(null);\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 = Object.create(null);\n    this.styles = Object.create(null);\n    this.stylesSpecificity = Object.create(null);\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"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}