PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/canvg/dist
Просмотр файла: index.cjs.map
{"version":3,"file":"index.cjs","sources":["../src/presets/offscreen.ts","../src/presets/node.ts","../src/util/string.ts","../src/util/styles.ts","../src/util/math.ts","../src/Property.ts","../src/ViewPort.ts","../src/Point.ts","../src/Mouse.ts","../src/Screen.ts","../src/Parser.ts","../src/Transform/Translate.ts","../src/Transform/Rotate.ts","../src/Transform/Scale.ts","../src/Transform/Matrix.ts","../src/Transform/Skew.ts","../src/Transform/SkewX.ts","../src/Transform/SkewY.ts","../src/Transform/Transform.ts","../src/Document/Element.ts","../src/Document/UnknownElement.ts","../src/Font.ts","../src/BoundingBox.ts","../src/Document/RenderedElement.ts","../src/Document/TextElement.ts","../src/Document/TSpanElement.ts","../src/Document/TextNode.ts","../src/PathParser.ts","../src/Document/PathElement.ts","../src/Document/SVGElement.ts","../src/Document/RectElement.ts","../src/Document/CircleElement.ts","../src/Document/EllipseElement.ts","../src/Document/LineElement.ts","../src/Document/PolylineElement.ts","../src/Document/PolygonElement.ts","../src/Document/PatternElement.ts","../src/Document/MarkerElement.ts","../src/Document/DefsElement.ts","../src/Document/GElement.ts","../src/Document/GradientElement.ts","../src/Document/LinearGradientElement.ts","../src/Document/RadialGradientElement.ts","../src/Document/StopElement.ts","../src/Document/AnimateElement.ts","../src/Document/AnimateColorElement.ts","../src/Document/AnimateTransformElement.ts","../src/Document/FontFaceElement.ts","../src/Document/GlyphElement.ts","../src/Document/MissingGlyphElement.ts","../src/Document/FontElement.ts","../src/Document/TRefElement.ts","../src/Document/AElement.ts","../src/Document/TextPathElement.ts","../src/Document/ImageElement.ts","../src/Document/SymbolElement.ts","../src/SVGFontLoader.ts","../src/Document/StyleElement.ts","../src/Document/UseElement.ts","../src/Document/FeColorMatrixElement.ts","../src/Document/MaskElement.ts","../src/Document/ClipPathElement.ts","../src/Document/FilterElement.ts","../src/Document/FeDropShadowElement.ts","../src/Document/FeMorphologyElement.ts","../src/Document/FeCompositeElement.ts","../src/Document/FeGaussianBlurElement.ts","../src/Document/TitleElement.ts","../src/Document/DescElement.ts","../src/Document/elements.ts","../src/Document/Document.ts","../src/Canvg.ts"],"sourcesContent":["import { DOMParser } from './types'\n\ninterface IConfig {\n /**\n * XML/HTML parser from string into DOM Document.\n */\n DOMParser?: DOMParser\n}\n\n/**\n * Options preset for `OffscreenCanvas`.\n * @param config - Preset requirements.\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\n * @returns Preset object.\n */\nexport function offscreen({ DOMParser: DOMParserFallback }: IConfig = {}) {\n const preset = {\n window: null,\n ignoreAnimation: true,\n ignoreMouse: true,\n DOMParser: DOMParserFallback,\n createCanvas(width: number, height: number) {\n return new OffscreenCanvas(width, height)\n },\n async createImage(url: string) {\n const response = await fetch(url)\n const blob = await response.blob()\n const img = await createImageBitmap(blob)\n\n return img\n }\n }\n\n if (typeof globalThis.DOMParser !== 'undefined'\n || typeof DOMParserFallback === 'undefined'\n ) {\n Reflect.deleteProperty(preset, 'DOMParser')\n }\n\n return preset\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DOMParser } from './types'\n\n/**\n * `node-canvas` exports.\n */\ninterface ICanvas {\n createCanvas(width: number, height: number): any\n loadImage(src: string): Promise<any>\n}\n\n/**\n * WHATWG-compatible `fetch` function.\n */\ntype Fetch = (input: any, config?: any) => Promise<any>\n\ninterface IConfig {\n /**\n * XML/HTML parser from string into DOM Document.\n */\n DOMParser: DOMParser\n /**\n * `node-canvas` exports.\n */\n canvas: ICanvas\n /**\n * WHATWG-compatible `fetch` function.\n */\n fetch: Fetch\n}\n\n/**\n * Options preset for `node-canvas`.\n * @param config - Preset requirements.\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\n * @param config.canvas - `node-canvas` exports.\n * @param config.fetch - WHATWG-compatible `fetch` function.\n * @returns Preset object.\n */\nexport function node({\n DOMParser,\n canvas,\n fetch\n}: IConfig) {\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","import { MatrixValue } from '../types'\n\n/**\n * HTML-safe compress white-spaces.\n * @param str - String to compress.\n * @returns String.\n */\nexport function compressSpaces(str: string) {\n return str.replace(/(?!\\u3000)\\s+/gm, ' ')\n}\n\n/**\n * HTML-safe left trim.\n * @param str - String to trim.\n * @returns String.\n */\nexport function trimLeft(str: string) {\n return str.replace(/^[\\n \\t]+/, '')\n}\n\n/**\n * HTML-safe right trim.\n * @param str - String to trim.\n * @returns String.\n */\nexport function trimRight(str: string) {\n return str.replace(/[\\n \\t]+$/, '')\n}\n\n/**\n * String to numbers array.\n * @param str - Numbers string.\n * @returns Numbers array.\n */\nexport function toNumbers(str: string) {\n const matches = str.match(/-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)/gm)\n\n return matches ? matches.map(parseFloat) : []\n}\n\n/**\n * String to matrix value.\n * @param str - Numbers string.\n * @returns Matrix value.\n */\nexport function toMatrixValue(str: string): MatrixValue {\n const numbers = toNumbers(str)\n const matrix = [\n numbers[0] || 0,\n numbers[1] || 0,\n numbers[2] || 0,\n numbers[3] || 0,\n numbers[4] || 0,\n numbers[5] || 0\n ] as const\n\n return matrix\n}\n\n// Microsoft Edge fix\nconst allUppercase = /^[A-Z-]+$/\n\n/**\n * Normalize attribute name.\n * @param name - Attribute name.\n * @returns Normalized attribute name.\n */\nexport function normalizeAttributeName(name: string) {\n if (allUppercase.test(name)) {\n return name.toLowerCase()\n }\n\n return name\n}\n\n/**\n * Parse external URL.\n * @param url - CSS url string.\n * @returns Parsed URL.\n */\nexport function parseExternalUrl(url: string): string {\n // single quotes [2]\n // v double quotes [3]\n // v v no quotes [4]\n // v v v\n const urlMatch = /url\\(('([^']+)'|\"([^\"]+)\"|([^'\")]+))\\)/.exec(url)\n\n if (!urlMatch) {\n return ''\n }\n\n return urlMatch[2] || urlMatch[3] || urlMatch[4] || ''\n}\n\n/**\n * Transform floats to integers in rgb colors.\n * @param color - Color to normalize.\n * @returns Normalized color.\n */\nexport function normalizeColor(color: string) {\n if (!color.startsWith('rgb')) {\n return color\n }\n\n let rgbParts = 3\n const normalizedColor = color.replace(\n /\\d+(\\.\\d+)?/g,\n (num, isFloat) => (rgbParts-- && isFloat\n ? String(Math.round(parseFloat(num)))\n : num)\n )\n\n return normalizedColor\n}\n","\n// slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js\nconst attributeRegex = /(\\[[^\\]]+\\])/g\nconst idRegex = /(#[^\\s+>~.[:]+)/g\nconst classRegex = /(\\.[^\\s+>~.[:]+)/g\nconst pseudoElementRegex = /(::[^\\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi\nconst pseudoClassWithBracketsRegex = /(:[\\w-]+\\([^)]*\\))/gi\nconst pseudoClassRegex = /(:[^\\s+>~.[:]+)/g\nconst elementRegex = /([^\\s+>~.[:]+)/g\n\nfunction findSelectorMatch(selector: string, regex: RegExp): [string, number] {\n const matches = regex.exec(selector)\n\n if (!matches) {\n return [selector, 0]\n }\n\n return [selector.replace(regex, ' '), matches.length]\n}\n\n/**\n * Measure selector specificity.\n * @param selector - Selector to measure.\n * @returns Specificity.\n */\nexport function getSelectorSpecificity(selector: string) {\n const specificity = [\n 0,\n 0,\n 0\n ]\n let currentSelector = selector\n .replace(/:not\\(([^)]*)\\)/g, ' $1 ')\n .replace(/{[\\s\\S]*/gm, ' ')\n let delta = 0;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, attributeRegex)\n specificity[1] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, idRegex)\n specificity[0] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, classRegex)\n specificity[1] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoElementRegex)\n specificity[2] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassWithBracketsRegex)\n specificity[1] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassRegex)\n specificity[1] += delta\n\n currentSelector = currentSelector\n .replace(/[*\\s+>~]/g, ' ')\n .replace(/[#.]/g, ' ');\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, elementRegex) // lgtm [js/useless-assignment-to-local]\n specificity[2] += delta\n\n return specificity.join('')\n}\n","import { VectorValue } from '../types'\n\nexport const PSEUDO_ZERO = .00000001\n\n/**\n * Vector magnitude.\n * @param v\n * @returns Number result.\n */\nexport function vectorMagnitude(v: VectorValue) {\n return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2))\n}\n\n/**\n * Ratio between two vectors.\n * @param u\n * @param v\n * @returns Number result.\n */\nexport function vectorsRatio(u: VectorValue, v: VectorValue) {\n return (u[0] * v[0] + u[1] * v[1]) / (vectorMagnitude(u) * vectorMagnitude(v))\n}\n\n/**\n * Angle between two vectors.\n * @param u\n * @param v\n * @returns Number result.\n */\nexport function vectorsAngle(u: VectorValue, v: VectorValue) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vectorsRatio(u, v))\n}\n\nexport function CB1(t: number) {\n return t * t * t\n}\n\nexport function CB2(t: number) {\n return 3 * t * t * (1 - t)\n}\n\nexport function CB3(t: number) {\n return 3 * t * (1 - t) * (1 - t)\n}\n\nexport function CB4(t: number) {\n return (1 - t) * (1 - t) * (1 - t)\n}\n\nexport function QB1(t: number) {\n return t * t\n}\n\nexport function QB2(t: number) {\n return 2 * t * (1 - t)\n}\n\nexport function QB3(t: number) {\n return (1 - t) * (1 - t)\n}\n","import RGBColor from 'rgbcolor'\nimport {\n compressSpaces,\n normalizeColor\n} from './util'\nimport { Axis } from './ViewPort'\nimport {\n Document,\n Element,\n PathElement,\n PatternElement,\n GradientElement\n} from './Document'\n\nexport class Property<T = unknown> {\n static empty(document: Document) {\n return new Property(document, 'EMPTY', '')\n }\n\n static readonly textBaselineMapping: Record<string, string> = {\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\n private isNormalizedColor = false\n\n constructor(\n private readonly document: Document,\n private readonly name: string,\n private value: T\n ) {}\n\n split(separator = ' ') {\n const {\n document,\n name\n } = this\n\n return compressSpaces(this.getString())\n .trim()\n .split(separator)\n .map(value => new Property<string>(document, name, value))\n }\n\n hasValue(zeroIsValue?: boolean) {\n const value = this.value as unknown\n\n return value !== null\n && value !== ''\n && (zeroIsValue || value !== 0)\n && typeof value !== 'undefined'\n }\n\n isString(regexp?: RegExp) {\n const { value } = this\n const 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 const 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: T) {\n this.value = value\n return this\n }\n\n getValue(def?: T) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return this.value\n }\n\n return def\n }\n\n getNumber(def?: T) {\n if (!this.hasValue()) {\n if (typeof def === 'undefined') {\n return 0\n }\n\n // @ts-expect-error Parse unknown value.\n return parseFloat(def)\n }\n\n const { value } = this\n // @ts-expect-error Parse unknown value.\n let n = parseFloat(value)\n\n if (this.isString(/%$/)) {\n n /= 100.0\n }\n\n return n\n }\n\n getString(def?: T) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return typeof this.value === 'undefined'\n ? ''\n : String(this.value)\n }\n\n return String(def)\n }\n\n getColor(def?: T) {\n let 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 as unknown as T\n\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(axis?: Axis, processPercent?: boolean): number\n getPixels(isFontSize?: boolean): number\n getPixels(axisOrIsFontSize?: Axis | boolean, processPercent = false): number {\n if (!this.hasValue()) {\n return 0\n }\n\n const [axis, isFontSize] = typeof axisOrIsFontSize === 'boolean'\n ? [undefined, axisOrIsFontSize]\n : [axisOrIsFontSize]\n const { viewPort } = this.document.screen\n\n switch (true) {\n case this.isString(/vmin$/):\n return this.getNumber()\n / 100.0\n * Math.min(\n viewPort.computeSize('x'),\n viewPort.computeSize('y')\n )\n\n case this.isString(/vmax$/):\n return this.getNumber()\n / 100.0\n * Math.max(\n viewPort.computeSize('x'),\n viewPort.computeSize('y')\n )\n\n case this.isString(/vw$/):\n return this.getNumber()\n / 100.0\n * viewPort.computeSize('x')\n\n case this.isString(/vh$/):\n return this.getNumber()\n / 100.0\n * viewPort.computeSize('y')\n\n case this.isString(/rem$/):\n return this.getNumber() * this.getRem(/* viewPort */)\n\n case this.isString(/em$/):\n return this.getNumber() * this.getEm(/* viewPort */)\n\n case this.isString(/ex$/):\n return this.getNumber() * this.getEm(/* viewPort */) / 2.0\n\n case this.isString(/px$/):\n return this.getNumber()\n\n case this.isString(/pt$/):\n return this.getNumber() * this.getDpi(/* viewPort */) * (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(/* viewPort */) / 2.54\n\n case this.isString(/mm$/):\n return this.getNumber() * this.getDpi(/* viewPort */) / 25.4\n\n case this.isString(/in$/):\n return this.getNumber() * this.getDpi(/* viewPort */)\n\n case this.isString(/%$/) && isFontSize:\n return this.getNumber() * this.getEm(/* viewPort */)\n\n case this.isString(/%$/):\n return this.getNumber() * viewPort.computeSize(axis)\n\n default: {\n const 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<T extends Element>() {\n const asString = this.getString()\n const match = /#([^)'\"]+)/.exec(asString)\n const name = match?.[1] || asString\n\n return this.document.definitions.get(name) as T | undefined\n }\n\n getFillStyleDefinition(element: Element | PathElement, opacity: Property) {\n let def = this.getDefinition<PatternElement & GradientElement>()\n\n if (!def) {\n return null\n }\n\n // gradient\n if (typeof def.createGradient === 'function' && 'getBoundingBox' in element) {\n return def.createGradient(\n this.document.ctx,\n element,\n opacity\n )\n }\n\n // pattern\n if (typeof def.createPattern === 'function') {\n if (def.getHrefAttribute().hasValue()) {\n const patternTransform = def.getAttribute('patternTransform')\n\n def = def.getHrefAttribute().getDefinition()\n\n if (def && patternTransform.hasValue()) {\n def.getAttribute('patternTransform', true).setValue(patternTransform.value)\n }\n }\n\n if (def) {\n return def.createPattern(this.document.ctx, element, opacity)\n }\n }\n\n return null\n }\n\n getTextBaseline() {\n if (!this.hasValue()) {\n return null\n }\n\n const key = this.getString()\n\n return Property.textBaselineMapping[key] || null\n }\n\n addOpacity(opacity: Property) {\n let value = this.getColor()\n const len = value.length\n let commas = 0\n\n // Simulate old RGBColor version, which can't parse rgba.\n for (let 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 const 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<string>(this.document, this.name, value)\n }\n}\n","\nexport interface IViewPortSize {\n width: number\n height: number\n}\n\nexport type Axis = 'x' | 'y'\n\nexport class ViewPort {\n static DEFAULT_VIEWPORT_WIDTH = 800\n static DEFAULT_VIEWPORT_HEIGHT = 600\n\n viewPorts: IViewPortSize[] = []\n\n clear() {\n this.viewPorts = []\n }\n\n setCurrent(width: number, height: number) {\n this.viewPorts.push({\n width,\n height\n })\n }\n\n removeCurrent() {\n this.viewPorts.pop()\n }\n\n getRoot() {\n const [root] = this.viewPorts\n\n if (!root) {\n return getDefault()\n }\n\n return root\n }\n\n getCurrent() {\n const { viewPorts } = this\n const current = viewPorts[viewPorts.length - 1]\n\n if (!current) {\n return getDefault()\n }\n\n return current\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?: number|Axis) {\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(\n Math.pow(this.width, 2) + Math.pow(this.height, 2)\n ) / Math.sqrt(2)\n }\n}\n\nfunction getDefault() {\n return {\n width: ViewPort.DEFAULT_VIEWPORT_WIDTH,\n height: ViewPort.DEFAULT_VIEWPORT_HEIGHT\n }\n}\n","import { MatrixValue } from './types'\nimport { toNumbers } from './util'\n\nexport class Point {\n static parse(point: string, defaultValue = 0) {\n const [x = defaultValue, y = defaultValue] = toNumbers(point)\n\n return new Point(x, y)\n }\n\n static parseScale(scale: string, defaultValue = 1) {\n const [x = defaultValue, y = x] = toNumbers(scale)\n\n return new Point(x, y)\n }\n\n static parsePath(path: string) {\n const points = toNumbers(path)\n const len = points.length\n const pathPoints: Point[] = []\n\n for (let i = 0; i < len; i += 2) {\n pathPoints.push(new Point(points[i], points[i + 1]))\n }\n\n return pathPoints\n }\n\n constructor(\n public x: number,\n public y: number\n ) {}\n\n angleTo(point: Point) {\n return Math.atan2(point.y - this.y, point.x - this.x)\n }\n\n applyTransform(transform: MatrixValue) {\n const {\n x,\n y\n } = this\n const xp = x * transform[0] + y * transform[2] + transform[4]\n const yp = x * transform[1] + y * transform[3] + transform[5]\n\n this.x = xp\n this.y = yp\n }\n}\n","import { RenderingContext2D } from './types'\nimport { BoundingBox } from './BoundingBox'\nimport { Point } from './Point'\nimport { Screen } from './Screen'\nimport { Element } from './Document'\n\ninterface IEventTarget {\n onClick?(): void\n onMouseMove?(): void\n}\n\nexport interface IEvent {\n type: string\n x: number\n y: number\n run(eventTarget: IEventTarget): void\n}\n\nexport class Mouse {\n private working = false\n private events: IEvent[] = []\n private eventElements: Element[] = []\n\n constructor(\n private readonly screen: Screen\n ) {\n this.onClick = this.onClick.bind(this)\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 const {\n screen,\n onClick,\n onMouseMove\n } = this\n const canvas = screen.ctx.canvas as HTMLCanvasElement\n\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 const canvas = this.screen.ctx.canvas as HTMLCanvasElement\n\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 const {\n screen: document,\n events,\n eventElements\n } = this\n const { style } = document.ctx.canvas as HTMLCanvasElement\n let element: Element | null | undefined\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (style) {\n style.cursor = ''\n }\n\n events.forEach(({ run }, i) => {\n element = eventElements[i]\n\n while (element) {\n run(element as IEventTarget)\n element = element.parent\n }\n })\n\n // done running, clear\n this.events = []\n this.eventElements = []\n }\n\n checkPath(element: Element, ctx: RenderingContext2D | null) {\n if (!this.working || !ctx) {\n return\n }\n\n const {\n events,\n eventElements\n } = this\n\n events.forEach(({ x, y }, i) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!eventElements[i] && ctx.isPointInPath && ctx.isPointInPath(x, y)) {\n eventElements[i] = element\n }\n })\n }\n\n checkBoundingBox(element: Element, boundingBox: BoundingBox | null) {\n if (!this.working || !boundingBox) {\n return\n }\n\n const {\n events,\n eventElements\n } = this\n\n events.forEach(({ x, y }, i) => {\n if (!eventElements[i] && boundingBox.isPointInBox(x, y)) {\n eventElements[i] = element\n }\n })\n }\n\n private mapXY(x: number, y: number) {\n const {\n window,\n ctx\n } = this.screen\n const point = new Point(x, y)\n let element = ctx.canvas as HTMLElement | null\n\n while (element) {\n point.x -= element.offsetLeft\n point.y -= element.offsetTop\n element = element.offsetParent as HTMLElement | null\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 private onClick(event: MouseEvent) {\n const {\n x,\n y\n } = this.mapXY(\n event.clientX,\n event.clientY\n )\n\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\n private onMouseMove(event: MouseEvent) {\n const {\n x,\n y\n } = this.mapXY(\n event.clientX,\n event.clientY\n )\n\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}\n","import requestAnimationFrame from 'raf'\nimport {\n RenderingContext2D,\n Fetch\n} from './types'\nimport {\n compressSpaces,\n toNumbers\n} from './util'\nimport { Property } from './Property'\nimport { ViewPort } from './ViewPort'\nimport { Mouse } from './Mouse'\nimport {\n Document,\n Element,\n AnimateElement\n} from './Document'\n\nexport interface IScreenOptions {\n /**\n * Window object.\n */\n window?: Window | null\n /**\n * WHATWG-compatible `fetch` function.\n */\n fetch?: Fetch\n}\n\nexport interface IScreenStartOptions {\n /**\n * Whether enable the redraw.\n */\n enableRedraw?: boolean\n /**\n * Ignore mouse events.\n */\n ignoreMouse?: boolean\n /**\n * Ignore animations.\n */\n ignoreAnimation?: boolean\n /**\n * Does not try to resize canvas.\n */\n ignoreDimensions?: boolean\n /**\n * Does not clear canvas.\n */\n ignoreClear?: boolean\n /**\n * Scales horizontally to width.\n */\n scaleWidth?: number\n /**\n * Scales vertically to height.\n */\n scaleHeight?: number\n /**\n * Draws at a x offset.\n */\n offsetX?: number\n /**\n * Draws at a y offset.\n */\n offsetY?: number\n /**\n * Will call the function on every frame, if it returns true, will redraw.\n */\n forceRedraw?(): boolean\n}\n\nexport interface IScreenViewBoxConfig {\n document: Document\n ctx: RenderingContext2D\n aspectRatio: string\n width: number\n desiredWidth: number\n height: number\n desiredHeight: number\n minX?: number\n minY?: number\n refX?: number\n refY?: number\n clip?: boolean\n clipX?: number\n clipY?: number\n}\n\nconst defaultWindow = typeof window !== 'undefined'\n ? window\n : null\nconst defaultFetch = typeof fetch !== 'undefined'\n ? fetch.bind(undefined) // `fetch` depends on context: `someObject.fetch(...)` will throw error.\n : undefined\n\nexport class Screen {\n static readonly defaultWindow = defaultWindow\n static readonly defaultFetch = defaultFetch\n static FRAMERATE = 30\n static MAX_VIRTUAL_PIXELS = 30000\n\n readonly window: Window | null\n readonly fetch: Fetch\n readonly viewPort = new ViewPort()\n readonly mouse = new Mouse(this)\n readonly animations: AnimateElement[] = []\n private readyPromise: Promise<void> | undefined\n private resolveReady: (() => void) | undefined\n private waits: (() => boolean)[] = []\n private frameDuration = 0\n private isReadyLock = false\n private isFirstRender = true\n private intervalId: number | null = null\n\n constructor(\n readonly ctx: RenderingContext2D,\n {\n fetch = defaultFetch,\n window = defaultWindow\n }: IScreenOptions = {}\n ) {\n this.window = window\n\n if (!fetch) {\n throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`)\n }\n\n this.fetch = fetch\n }\n\n wait(checker: () => boolean) {\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 const 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\n return isReadyLock\n }\n\n setDefaults(ctx: RenderingContext2D) {\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({\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 }: IScreenViewBoxConfig) {\n // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n const cleanAspectRatio = compressSpaces(aspectRatio).replace(/^defer\\s/, '') // ignore defer\n const [aspectRatioAlign, aspectRatioMeetOrSlice] = cleanAspectRatio.split(' ')\n const align = aspectRatioAlign || 'xMidYMid'\n const meetOrSlice = aspectRatioMeetOrSlice || 'meet'\n // calculate scale\n const scaleX = width / desiredWidth\n const scaleY = height / desiredHeight\n const scaleMin = Math.min(scaleX, scaleY)\n const scaleMax = Math.max(scaleX, scaleY)\n let finalDesiredWidth = desiredWidth\n let 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 const refXProp = new Property(document, 'refX', refX)\n const refYProp = new Property(document, 'refY', refY)\n const hasRefs = refXProp.hasValue() && refYProp.hasValue()\n\n if (hasRefs) {\n ctx.translate(\n -scaleMin * refXProp.getPixels('x'),\n -scaleMin * refYProp.getPixels('y')\n )\n }\n\n if (clip) {\n const scaledClipX = scaleMin * clipX\n const scaledClipY = scaleMin * clipY\n\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 const isMeetMinY = meetOrSlice === 'meet' && scaleMin === scaleY\n const isSliceMaxY = meetOrSlice === 'slice' && scaleMax === scaleY\n const isMeetMinX = meetOrSlice === 'meet' && scaleMin === scaleX\n const isSliceMaxX = meetOrSlice === 'slice' && scaleMax === scaleX\n\n if (align.startsWith('xMid') && (\n isMeetMinY || isSliceMaxY\n )) {\n ctx.translate(width / 2.0 - finalDesiredWidth / 2.0, 0)\n }\n\n if (align.endsWith('YMid') && (\n isMeetMinX || isSliceMaxX\n )) {\n ctx.translate(0, height / 2.0 - finalDesiredHeight / 2.0)\n }\n\n if (align.startsWith('xMax') && (\n isMeetMinY || isSliceMaxY\n )) {\n ctx.translate(width - finalDesiredWidth, 0)\n }\n\n if (align.endsWith('YMax') && (\n isMeetMinX || isSliceMaxX\n )) {\n ctx.translate(0, height - finalDesiredHeight)\n }\n }\n\n // scale\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 }\n\n // translate\n ctx.translate(-minX, -minY)\n }\n\n start(\n element: Element,\n {\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 }: IScreenStartOptions = {}\n ) {\n const { mouse } = this\n const frameDuration = 1000 / Screen.FRAMERATE\n\n this.isReadyLock = false\n this.frameDuration = frameDuration\n this.readyPromise = new Promise((resolve) => {\n this.resolveReady = resolve\n })\n\n if (this.isReady()) {\n this.render(\n element,\n ignoreDimensions,\n ignoreClear,\n scaleWidth,\n scaleHeight,\n offsetX,\n offsetY\n )\n }\n\n if (!enableRedraw) {\n return\n }\n\n let now = Date.now()\n let then = now\n let delta = 0\n const tick = () => {\n now = Date.now()\n delta = now - then\n\n if (delta >= frameDuration) {\n then = now - (delta % frameDuration)\n\n if (this.shouldUpdate(\n ignoreAnimation,\n forceRedraw\n )) {\n this.render(\n element,\n ignoreDimensions,\n ignoreClear,\n scaleWidth,\n scaleHeight,\n offsetX,\n offsetY\n )\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 private shouldUpdate(\n ignoreAnimation: boolean,\n forceRedraw: (() => boolean) | undefined\n ) {\n // need update from animations?\n if (!ignoreAnimation) {\n const { frameDuration } = this\n const shouldUpdate = this.animations.reduce(\n (shouldUpdate, animation) => animation.update(frameDuration) || shouldUpdate,\n false\n )\n\n if (shouldUpdate) {\n return true\n }\n }\n\n // need update from redraw?\n if (typeof forceRedraw === 'function' && forceRedraw()) {\n return true\n }\n\n if (!this.isReadyLock && this.isReady()) {\n return true\n }\n\n // need update from mouse events?\n if (this.mouse.hasEvents()) {\n return true\n }\n\n return false\n }\n\n private render(\n element: Element,\n ignoreDimensions: boolean,\n ignoreClear: boolean,\n scaleWidth: number | undefined,\n scaleHeight: number | undefined,\n offsetX: number | undefined,\n offsetY: number | undefined\n ) {\n const {\n viewPort,\n ctx,\n isFirstRender\n } = this\n const canvas = ctx.canvas as HTMLCanvasElement\n\n viewPort.clear()\n\n if (canvas.width && canvas.height) {\n viewPort.setCurrent(canvas.width, canvas.height)\n }\n\n const widthStyle = element.getStyle('width')\n const heightStyle = element.getStyle('height')\n\n if (!ignoreDimensions && (\n isFirstRender\n || typeof scaleWidth !== 'number' && typeof scaleHeight !== 'number'\n )) {\n // set canvas size\n if (widthStyle.hasValue()) {\n canvas.width = widthStyle.getPixels('x')\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (canvas.style) {\n canvas.style.width = `${canvas.width}px`\n }\n }\n\n if (heightStyle.hasValue()) {\n canvas.height = heightStyle.getPixels('y')\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (canvas.style) {\n canvas.style.height = `${canvas.height}px`\n }\n }\n }\n\n let cWidth = canvas.clientWidth || canvas.width\n let 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'\n || typeof scaleHeight === 'number'\n ) {\n const viewBox = toNumbers(element.getAttribute('viewBox').getString())\n let xRatio = 0\n let yRatio = 0\n\n if (typeof scaleWidth === 'number') {\n const widthStyle = element.getStyle('width')\n\n if (widthStyle.hasValue()) {\n xRatio = widthStyle.getPixels('x') / scaleWidth\n } else\n if (viewBox[2] && !isNaN(viewBox[2])) {\n xRatio = viewBox[2] / scaleWidth\n }\n }\n\n if (typeof scaleHeight === 'number') {\n const heightStyle = element.getStyle('height')\n\n if (heightStyle.hasValue()) {\n yRatio = heightStyle.getPixels('y') / scaleHeight\n } else\n if (viewBox[3] && !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\n const transformStyle = element.getStyle('transform', true, true)\n\n transformStyle.setValue(`${transformStyle.getString()} scale(${1.0 / xRatio}, ${1.0 / yRatio})`)\n }\n\n // clear and render\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","import { Fetch } from './types'\nimport { Screen } from './Screen'\n\ntype DOMParserConstructor = typeof DOMParser\n\nexport interface IParserOptions {\n /**\n * WHATWG-compatible `fetch` function.\n */\n fetch?: Fetch\n /**\n * XML/HTML parser from string into DOM Document.\n */\n DOMParser?: DOMParserConstructor\n}\n\nconst { defaultFetch } = Screen\nconst DefaultDOMParser = typeof DOMParser !== 'undefined'\n ? DOMParser\n : undefined\n\nexport class Parser {\n private readonly fetch: Fetch\n private readonly DOMParser: DOMParserConstructor\n\n constructor({\n fetch = defaultFetch,\n DOMParser = DefaultDOMParser\n }: IParserOptions = {}) {\n if (!fetch) {\n throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`)\n }\n\n if (!DOMParser) {\n throw new Error(`Can't find 'DOMParser' in 'globalThis', please provide it via options`)\n }\n\n this.fetch = fetch\n this.DOMParser = DOMParser\n }\n\n async parse(resource: string) {\n if (resource.startsWith('<')) {\n return this.parseFromString(resource)\n }\n\n return this.load(resource)\n }\n\n parseFromString(xml: string) {\n const parser = new this.DOMParser()\n\n try {\n return this.checkDocument(\n parser.parseFromString(xml, 'image/svg+xml')\n )\n } catch (err) {\n return this.checkDocument(\n parser.parseFromString(xml, 'text/xml')\n )\n }\n }\n\n private checkDocument(document: Document) {\n const parserError = document.getElementsByTagName('parsererror')[0]\n\n if (parserError) {\n throw new Error(parserError.textContent || 'Unknown parse error')\n }\n\n return document\n }\n\n async load(url: string) {\n const response = await this.fetch(url)\n const xml = await response.text()\n\n return this.parseFromString(xml)\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Document } from '../Document'\nimport { Point } from '../Point'\n\nexport class Translate {\n type = 'translate'\n private readonly point: Point\n\n constructor(\n _: Document,\n point: string\n ) {\n this.point = Point.parse(point)\n }\n\n apply(ctx: RenderingContext2D) {\n const {\n x,\n y\n } = this.point\n\n ctx.translate(\n x || 0.0,\n y || 0.0\n )\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n x,\n y\n } = this.point\n\n ctx.translate(\n -1.0 * x || 0.0,\n -1.0 * y || 0.0\n )\n }\n\n applyToPoint(point: Point) {\n const {\n x,\n y\n } = this.point\n\n point.applyTransform([\n 1,\n 0,\n 0,\n 1,\n x || 0.0,\n y || 0.0\n ])\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { toNumbers } from '../util'\nimport { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Point } from '../Point'\n\nexport class Rotate {\n type = 'rotate'\n private readonly angle: Property\n private readonly originX: Property\n private readonly originY: Property\n private readonly cx: number\n private readonly cy: number\n\n constructor(\n document: Document,\n rotate: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ) {\n const numbers = toNumbers(rotate)\n\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: RenderingContext2D) {\n const {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this\n const tx = cx + originX.getPixels('x')\n const ty = cy + originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.rotate(angle.getRadians())\n ctx.translate(-tx, -ty)\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this\n const tx = cx + originX.getPixels('x')\n const ty = cy + originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.rotate(-1.0 * angle.getRadians())\n ctx.translate(-tx, -ty)\n }\n\n applyToPoint(point: Point) {\n const {\n cx,\n cy,\n angle\n } = this\n const rad = angle.getRadians()\n\n point.applyTransform([\n 1,\n 0,\n 0,\n 1,\n cx || 0.0, // this.p.x\n cy || 0.0 // this.p.y\n ])\n point.applyTransform([\n Math.cos(rad),\n Math.sin(rad),\n -Math.sin(rad),\n Math.cos(rad),\n 0,\n 0\n ])\n point.applyTransform([\n 1,\n 0,\n 0,\n 1,\n -cx || 0.0, // -this.p.x\n -cy || 0.0 // -this.p.y\n ])\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { PSEUDO_ZERO } from '../util'\nimport { Document } from '../Document'\nimport { Point } from '../Point'\nimport { Property } from '../Property'\n\nexport class Scale {\n type = 'scale'\n private readonly scale: Point\n private readonly originX: Property\n private readonly originY: Property\n\n constructor(\n _: Document,\n scale: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ) {\n const scaleSize = Point.parseScale(scale)\n\n // Workaround for node-canvas\n if (scaleSize.x === 0\n || scaleSize.y === 0\n ) {\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: RenderingContext2D) {\n const {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.scale(x, y || x)\n ctx.translate(-tx, -ty)\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\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: Point) {\n const {\n x,\n y\n } = this.scale\n\n point.applyTransform([\n x || 0.0,\n 0,\n 0,\n y || 0.0,\n 0,\n 0\n ])\n }\n}\n","import { MatrixValue, RenderingContext2D } from '../types'\nimport { toMatrixValue } from '../util'\nimport { Document } from '../Document'\nimport { Point } from '../Point'\nimport { Property } from '../Property'\nimport { ITransform } from './types'\n\nexport class Matrix implements ITransform {\n type = 'matrix'\n protected matrix: MatrixValue\n private readonly originX: Property\n private readonly originY: Property\n\n constructor(\n _: Document,\n matrix: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ) {\n this.matrix = toMatrixValue(matrix)\n this.originX = transformOrigin[0]\n this.originY = transformOrigin[1]\n }\n\n apply(ctx: RenderingContext2D) {\n const {\n originX,\n originY,\n matrix\n } = this\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.transform(\n matrix[0],\n matrix[1],\n matrix[2],\n matrix[3],\n matrix[4],\n matrix[5]\n )\n ctx.translate(-tx, -ty)\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n originX,\n originY,\n matrix\n } = this\n const a = matrix[0]\n const b = matrix[2]\n const c = matrix[4]\n const d = matrix[1]\n const e = matrix[3]\n const f = matrix[5]\n const g = 0.0\n const h = 0.0\n const i = 1.0\n const det = 1 / (a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g))\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.transform(\n det * (e * i - f * h),\n det * (f * g - d * i),\n det * (c * h - b * i),\n det * (a * i - c * g),\n det * (b * f - c * e),\n det * (c * d - a * f)\n )\n ctx.translate(-tx, -ty)\n }\n\n applyToPoint(point: Point) {\n point.applyTransform(this.matrix)\n }\n}\n","import { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Matrix } from './Matrix'\n\nexport class Skew extends Matrix {\n override type = 'skew'\n protected readonly angle: Property\n\n constructor(\n document: Document,\n skew: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ) {\n super(document, skew, transformOrigin)\n\n this.angle = new Property(document, 'angle', skew)\n }\n}\n","import { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Skew } from './Skew'\n\nexport class SkewX extends Skew {\n override type = 'skewX'\n\n constructor(\n document: Document,\n skew: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ) {\n super(document, skew, transformOrigin)\n\n this.matrix = [\n 1,\n 0,\n Math.tan(this.angle.getRadians()),\n 1,\n 0,\n 0\n ]\n }\n}\n","import { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Skew } from './Skew'\n\nexport class SkewY extends Skew {\n override type = 'skewY'\n\n constructor(\n document: Document,\n skew: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ) {\n super(document, skew, transformOrigin)\n\n this.matrix = [\n 1,\n Math.tan(this.angle.getRadians()),\n 0,\n 1,\n 0,\n 0\n ]\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { compressSpaces } from '../util'\nimport { Property } from '../Property'\nimport { Point } from '../Point'\nimport { Document, Element } from '../Document'\nimport { ITransform } from './types'\nimport { Translate } from './Translate'\nimport { Rotate } from './Rotate'\nimport { Scale } from './Scale'\nimport { Matrix } from './Matrix'\nimport { SkewX } from './SkewX'\nimport { SkewY } from './SkewY'\n\nfunction parseTransforms(transform: string) {\n return compressSpaces(transform)\n .trim()\n .replace(/\\)([a-zA-Z])/g, ') $1')\n .replace(/\\)(\\s?,\\s?)/g, ') ')\n .split(/\\s(?=[a-z])/)\n}\n\nfunction parseTransform(transform: string) {\n const [type = '', value = ''] = transform.split('(')\n\n return [type.trim(), value.trim().replace(')', '')] as const\n}\n\ninterface ITransformConstructor {\n prototype: ITransform\n new (\n document: Document,\n value: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ): ITransform\n}\n\nexport class Transform {\n static fromElement(document: Document, element: Element) {\n const transformStyle = element.getStyle('transform', false, true)\n\n if (transformStyle.hasValue()) {\n const [transformOriginXProperty, transformOriginYProperty = transformOriginXProperty] = element.getStyle('transform-origin', false, true).split()\n\n if (transformOriginXProperty && transformOriginYProperty) {\n const transformOrigin = [transformOriginXProperty, transformOriginYProperty] as const\n\n return new Transform(\n document,\n transformStyle.getString(),\n transformOrigin\n )\n }\n }\n\n return null\n }\n\n static transformTypes: Record<string, ITransformConstructor> = {\n translate: Translate,\n rotate: Rotate,\n scale: Scale,\n matrix: Matrix,\n skewX: SkewX,\n skewY: SkewY\n }\n\n private readonly transforms: ITransform[] = []\n\n constructor(\n private readonly document: Document,\n transform: string,\n transformOrigin: readonly [Property<string>, Property<string>]\n ) {\n const data = parseTransforms(transform)\n\n data.forEach((transform) => {\n if (transform === 'none') {\n return\n }\n\n const [type, value] = parseTransform(transform)\n const TransformType = Transform.transformTypes[type]\n\n if (TransformType) {\n this.transforms.push(new TransformType(this.document, value, transformOrigin))\n }\n })\n }\n\n apply(ctx: RenderingContext2D) {\n this.transforms.forEach(transform => transform.apply(ctx))\n }\n\n unapply(ctx: RenderingContext2D) {\n this.transforms.forEach(transform => transform.unapply(ctx))\n }\n\n // TODO: applyToPoint unused ... remove?\n applyToPoint(point: Point) {\n this.transforms.forEach(transform => transform.applyToPoint(point))\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { normalizeAttributeName } from '../util'\nimport { Property } from '../Property'\nimport { Transform } from '../Transform'\nimport { Document } from './Document'\nimport { ClipPathElement } from './ClipPathElement'\nimport { MaskElement } from './MaskElement'\nimport { FilterElement } from './FilterElement'\n\nexport abstract class Element {\n static readonly ignoreChildTypes = ['title']\n\n readonly type: string = ''\n readonly attributes: Map<string, Property> = new Map()\n readonly styles: Map<string, Property> = new Map()\n readonly stylesSpecificity: Map<string, string> = new Map()\n animationFrozen = false\n animationFrozenValue = ''\n parent: Element | null = null\n children: Element[] = []\n\n constructor(\n protected readonly document: Document,\n protected readonly node?: HTMLElement,\n protected readonly captureTextNodes = false\n ) {\n if (!node || node.nodeType !== 1) { // ELEMENT_NODE\n return\n }\n\n // add attributes\n Array.from(node.attributes).forEach((attribute) => {\n const nodeName = normalizeAttributeName(attribute.nodeName)\n\n this.attributes.set(nodeName, new Property(document, nodeName, attribute.value))\n })\n\n this.addStylesFromStyleDefinition()\n\n // add inline styles\n if (this.getAttribute('style').hasValue()) {\n const styles = this.getAttribute('style')\n .getString()\n .split(';')\n .map(_ => _.trim())\n\n styles.forEach((style) => {\n if (!style) {\n return\n }\n\n const [name, value] = style.split(':').map(_ => _.trim())\n\n if (name) {\n this.styles.set(name, new Property(document, name, value))\n }\n })\n }\n\n const { definitions } = document\n const id = this.getAttribute('id')\n\n // add id\n if (id.hasValue()) {\n if (!definitions.has(id.getString())) {\n definitions.set(id.getString(), this)\n }\n }\n\n Array.from(node.childNodes).forEach((childNode: HTMLElement) => {\n if (childNode.nodeType === 1) {\n this.addChild(childNode) // ELEMENT_NODE\n } else\n if (captureTextNodes && (\n childNode.nodeType === 3\n || childNode.nodeType === 4\n )) {\n const 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: string, createIfNotExists = false): Property {\n const attr = this.attributes.get(name)\n\n if (!attr && createIfNotExists) {\n const attr = new Property(this.document, name, '')\n\n this.attributes.set(name, attr)\n\n return attr\n }\n\n return attr || Property.empty(this.document)\n }\n\n getHrefAttribute(): Property {\n let href: Property | undefined\n\n for (const [key, value] of this.attributes) {\n if (key === 'href' || key.endsWith(':href')) {\n href = value\n break\n }\n }\n\n return href || Property.empty(this.document)\n }\n\n getStyle(name: string, createIfNotExists = false, skipAncestors = false): Property {\n const style = this.styles.get(name)\n\n if (style) {\n return style\n }\n\n const attr = this.getAttribute(name)\n\n if (attr.hasValue()) {\n this.styles.set(name, attr) // move up to me to cache\n return attr\n }\n\n if (!skipAncestors) {\n const { parent } = this\n\n if (parent) {\n const parentStyle = parent.getStyle(name)\n\n if (parentStyle.hasValue()) {\n return parentStyle\n }\n }\n }\n\n if (createIfNotExists) {\n const style = new Property(this.document, name, '')\n\n this.styles.set(name, style)\n\n return style\n }\n\n return Property.empty(this.document)\n }\n\n render(ctx: RenderingContext2D) {\n // don't render display=none\n // don't render visibility=hidden\n if (this.getStyle('display').getString() === 'none'\n || this.getStyle('visibility').getString() === 'hidden'\n ) {\n return\n }\n\n ctx.save()\n\n if (this.getStyle('mask').hasValue()) { // mask\n const mask = this.getStyle('mask').getDefinition<MaskElement>()\n\n if (mask) {\n this.applyEffects(ctx)\n mask.apply(ctx, this)\n }\n } else\n if (this.getStyle('filter').getValue('none') !== 'none') { // filter\n const filter = this.getStyle('filter').getDefinition<FilterElement>()\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(_: RenderingContext2D) {\n // NO RENDER\n }\n\n protected applyEffects(ctx: RenderingContext2D) {\n // transform\n const transform = Transform.fromElement(this.document, this)\n\n if (transform) {\n transform.apply(ctx)\n }\n\n // clip\n const clipPathStyleProp = this.getStyle('clip-path', false, true)\n\n if (clipPathStyleProp.hasValue()) {\n const clip = clipPathStyleProp.getDefinition<ClipPathElement>()\n\n if (clip) {\n clip.apply(ctx)\n }\n }\n }\n\n clearContext(_: RenderingContext2D) {\n // NO RENDER\n }\n\n renderChildren(ctx: RenderingContext2D) {\n this.children.forEach((child) => {\n child.render(ctx)\n })\n }\n\n protected addChild(childNode: Element|HTMLElement) {\n const child = childNode instanceof Element\n ? childNode\n : this.document.createElement(childNode)\n\n child.parent = this\n\n if (!Element.ignoreChildTypes.includes(child.type)) {\n this.children.push(child)\n }\n }\n\n protected matchesSelector(selector: string) {\n const { node } = this\n\n if (typeof node.matches === 'function') {\n return node.matches(selector)\n }\n\n const styleClasses = node.getAttribute?.('class')\n\n if (!styleClasses || styleClasses === '') {\n return false\n }\n\n return styleClasses.split(' ').some(styleClass => `.${styleClass}` === selector)\n }\n\n addStylesFromStyleDefinition() {\n const {\n styles,\n stylesSpecificity\n } = this.document\n\n for (const [selector, style] of styles) {\n if (!selector.startsWith('@') && this.matchesSelector(selector)) {\n const specificity = stylesSpecificity.get(selector)\n\n if (style) {\n for (const [name, styleProp] of style) {\n let existingSpecificity = this.stylesSpecificity.get(name)\n\n if (typeof existingSpecificity === 'undefined') {\n existingSpecificity = '000'\n }\n\n if (specificity && specificity >= existingSpecificity) {\n if (styleProp) {\n this.styles.set(name, styleProp)\n }\n\n this.stylesSpecificity.set(name, specificity)\n }\n }\n }\n }\n }\n }\n\n protected removeStyles(element: Element, ignoreStyles: string[]) {\n const toRestore = ignoreStyles.reduce<[string, string][]>((toRestore, name) => {\n const styleProp = element.getStyle(name)\n\n if (!styleProp.hasValue()) {\n return toRestore\n }\n\n const value = styleProp.getString()\n\n styleProp.setValue('')\n\n return [...toRestore, [name, value]]\n }, [])\n\n return toRestore\n }\n\n protected restoreStyles(element: Element, styles: [string, string][]) {\n styles.forEach(([name, value]) => {\n element.getStyle(name, true).setValue(value)\n })\n }\n\n isFirstChild() {\n return this.parent?.children.indexOf(this) === 0\n }\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\n\nexport class UnknownElement extends Element {\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Element ${node.nodeName} not yet implemented.`)\n }\n }\n}\n","import { compressSpaces } from './util'\n\nfunction wrapFontFamily(fontFamily: string) {\n const trimmed = fontFamily.trim()\n\n return /^('|\")/.test(trimmed)\n ? trimmed\n : `\"${trimmed}\"`\n}\n\nfunction prepareFontFamily(fontFamily: string) {\n return typeof process === 'undefined'\n ? fontFamily\n : fontFamily\n .trim()\n .split(',')\n .map(wrapFontFamily)\n .join(',')\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n * @param fontStyle\n * @returns CSS font style.\n */\nfunction prepareFontStyle(fontStyle: string) {\n if (!fontStyle) {\n return ''\n }\n\n const 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\n if (/^oblique\\s+(-|)\\d+deg$/.test(targetFontStyle)) {\n return targetFontStyle\n }\n\n return ''\n }\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n * @param fontWeight\n * @returns CSS font weight.\n */\nfunction prepareFontWeight(fontWeight: string) {\n if (!fontWeight) {\n return ''\n }\n\n const 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\n if (/^[\\d.]+$/.test(targetFontWeight)) {\n return targetFontWeight\n }\n\n return ''\n }\n}\n\nexport class Font {\n static parse(\n font = '',\n inherit?: string | Font\n ) {\n let fontStyle = ''\n let fontVariant = ''\n let fontWeight = ''\n let fontSize = ''\n let fontFamily = ''\n const parts = compressSpaces(font).trim().split(' ')\n const set = {\n fontSize: false,\n fontStyle: false,\n fontWeight: false,\n fontVariant: false\n }\n\n parts.forEach((part) => {\n switch (true) {\n case !set.fontStyle && Font.styles.includes(part):\n\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\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\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\n if (part !== 'inherit') {\n fontSize = part.split('/')[0] || ''\n }\n\n set.fontStyle = true\n set.fontVariant = true\n set.fontWeight = true\n set.fontSize = true\n break\n\n default:\n\n if (part !== 'inherit') {\n fontFamily += part\n }\n }\n })\n\n return new Font(\n fontStyle,\n fontVariant,\n fontWeight,\n fontSize,\n fontFamily,\n inherit\n )\n }\n\n static readonly styles = 'normal|italic|oblique|inherit'\n static readonly variants = 'normal|small-caps|inherit'\n static readonly weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit'\n\n readonly fontFamily: string\n readonly fontSize: string\n readonly fontStyle: string\n readonly fontWeight: string\n readonly fontVariant: string\n\n constructor(\n fontStyle: string,\n fontVariant: string,\n fontWeight: string,\n fontSize: string,\n fontFamily: string,\n inherit?: string | Font\n ) {\n const inheritFont = inherit\n ? typeof inherit === 'string'\n ? Font.parse(inherit)\n : inherit\n : {} as Font\n\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 toString() {\n return [\n prepareFontStyle(this.fontStyle),\n this.fontVariant,\n prepareFontWeight(this.fontWeight),\n this.fontSize,\n // Wrap fontFamily only on nodejs and only for canvas.ctx\n prepareFontFamily(this.fontFamily)\n ].join(' ').trim()\n }\n}\n","\nexport class BoundingBox {\n constructor(\n public x1 = Number.NaN,\n public y1 = Number.NaN,\n public x2 = Number.NaN,\n public y2 = Number.NaN\n ) {\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: number | undefined, y: number | undefined) {\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: number) {\n this.addPoint(x, 0)\n }\n\n addY(y: number) {\n this.addPoint(0, y)\n }\n\n addBoundingBox(boundingBox: BoundingBox | null) {\n if (!boundingBox) {\n return\n }\n\n const {\n x1,\n y1,\n x2,\n y2\n } = boundingBox\n\n this.addPoint(x1, y1)\n this.addPoint(x2, y2)\n }\n\n private sumCubic(\n t: number,\n p0: number,\n p1: number,\n p2: number,\n p3: number\n ) {\n return (\n Math.pow(1 - t, 3) * p0\n + 3 * Math.pow(1 - t, 2) * t * p1\n + 3 * (1 - t) * Math.pow(t, 2) * p2\n + Math.pow(t, 3) * p3\n )\n }\n\n private bezierCurveAdd(\n forX: boolean,\n p0: number,\n p1: number,\n p2: number,\n p3: number\n ) {\n const b = 6 * p0 - 12 * p1 + 6 * p2\n const a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3\n const c = 3 * p1 - 3 * p0\n\n if (a === 0) {\n if (b === 0) {\n return\n }\n\n const 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 const b2ac = Math.pow(b, 2) - 4 * c * a\n\n if (b2ac < 0) {\n return\n }\n\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a)\n\n if (0 < t1 && t1 < 1) {\n if (forX) {\n this.addX(\n this.sumCubic(t1, p0, p1, p2, p3)\n )\n } else {\n this.addY(\n this.sumCubic(t1, p0, p1, p2, p3)\n )\n }\n }\n\n const 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 }\n\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n addBezierCurve(\n p0x: number,\n p0y: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number\n ) {\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(\n p0x: number,\n p0y: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number\n ) {\n const cp1x = p0x + 2 / 3 * (p1x - p0x) // CP1 = QP0 + 2/3 *(QP1-QP0)\n const cp1y = p0y + 2 / 3 * (p1y - p0y) // CP1 = QP0 + 2/3 *(QP1-QP0)\n const cp2x = cp1x + 1 / 3 * (p2x - p0x) // CP2 = CP1 + 1/3 *(QP2-QP0)\n const 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(\n x: number,\n y: number\n ) {\n const {\n x1,\n y1,\n x2,\n y2\n } = this\n\n return (\n x1 <= x\n && x <= x2\n && y1 <= y\n && y <= y2\n )\n }\n}\n","import { RenderingContext2D } from '../types'\nimport {\n PSEUDO_ZERO,\n toNumbers\n} from '../util'\nimport { Font } from '../Font'\nimport { Property } from '../Property'\nimport { Element } from './Element'\n\nexport abstract class RenderedElement extends Element {\n private modifiedEmSizeStack = false\n\n protected calculateOpacity() {\n let opacity = 1.0\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n let element: Element | null = this\n\n while (element) {\n const 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 override setContext(ctx: RenderingContext2D, fromMeasure = false) {\n if (!fromMeasure) { // causes stack overflow when measuring text with gradients\n // fill\n const fillStyleProp = this.getStyle('fill')\n const fillOpacityStyleProp = this.getStyle('fill-opacity')\n const strokeStyleProp = this.getStyle('stroke')\n const strokeOpacityProp = this.getStyle('stroke-opacity')\n\n if (fillStyleProp.isUrlDefinition()) {\n const fillStyle = fillStyleProp.getFillStyleDefinition(this, fillOpacityStyleProp)\n\n if (fillStyle) {\n ctx.fillStyle = fillStyle\n }\n } else\n if (fillStyleProp.hasValue()) {\n if (fillStyleProp.getString() === 'currentColor') {\n fillStyleProp.setValue(this.getStyle('color').getColor())\n }\n\n const fillStyle = fillStyleProp.getColor()\n\n if (fillStyle !== 'inherit') {\n ctx.fillStyle = fillStyle === 'none'\n ? 'rgba(0,0,0,0)'\n : fillStyle\n }\n }\n\n if (fillOpacityStyleProp.hasValue()) {\n const fillStyle = new Property(this.document, 'fill', ctx.fillStyle)\n .addOpacity(fillOpacityStyleProp)\n .getColor()\n\n ctx.fillStyle = fillStyle\n }\n\n // stroke\n if (strokeStyleProp.isUrlDefinition()) {\n const strokeStyle = strokeStyleProp.getFillStyleDefinition(this, strokeOpacityProp)\n\n if (strokeStyle) {\n ctx.strokeStyle = strokeStyle\n }\n } else\n if (strokeStyleProp.hasValue()) {\n if (strokeStyleProp.getString() === 'currentColor') {\n strokeStyleProp.setValue(this.getStyle('color').getColor())\n }\n\n const strokeStyle = strokeStyleProp.getString()\n\n if (strokeStyle !== 'inherit') {\n ctx.strokeStyle = strokeStyle === 'none'\n ? 'rgba(0,0,0,0)'\n : strokeStyle\n }\n }\n\n if (strokeOpacityProp.hasValue()) {\n const strokeStyle = new Property(this.document, 'stroke', ctx.strokeStyle)\n .addOpacity(strokeOpacityProp)\n .getString()\n\n ctx.strokeStyle = strokeStyle\n }\n\n const strokeWidthStyleProp = this.getStyle('stroke-width')\n\n if (strokeWidthStyleProp.hasValue()) {\n const newLineWidth = strokeWidthStyleProp.getPixels()\n\n ctx.lineWidth = !newLineWidth\n ? PSEUDO_ZERO // browsers don't respect 0 (or node-canvas? :-)\n : newLineWidth\n }\n\n const strokeLinecapStyleProp = this.getStyle('stroke-linecap')\n const strokeLinejoinStyleProp = this.getStyle('stroke-linejoin')\n const strokeMiterlimitProp = this.getStyle('stroke-miterlimit')\n // NEED TEST\n // const pointOrderStyleProp = this.getStyle('paint-order');\n const strokeDasharrayStyleProp = this.getStyle('stroke-dasharray')\n const strokeDashoffsetProp = this.getStyle('stroke-dashoffset')\n\n if (strokeLinecapStyleProp.hasValue()) {\n ctx.lineCap = strokeLinecapStyleProp.getString() as CanvasLineCap\n }\n\n if (strokeLinejoinStyleProp.hasValue()) {\n ctx.lineJoin = strokeLinejoinStyleProp.getString() as CanvasLineJoin\n }\n\n if (strokeMiterlimitProp.hasValue()) {\n ctx.miterLimit = strokeMiterlimitProp.getNumber()\n }\n\n // NEED TEST\n // if (pointOrderStyleProp.hasValue()) {\n // // ?\n // ctx.paintOrder = pointOrderStyleProp.getValue();\n // }\n\n if (strokeDasharrayStyleProp.hasValue() && strokeDasharrayStyleProp.getString() !== 'none') {\n const gaps = toNumbers(strokeDasharrayStyleProp.getString())\n\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\n const offset = strokeDashoffsetProp.getPixels()\n\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 }\n\n // font\n this.modifiedEmSizeStack = false\n\n if (typeof ctx.font !== 'undefined') {\n const fontStyleProp = this.getStyle('font')\n const fontStyleStyleProp = this.getStyle('font-style')\n const fontVariantStyleProp = this.getStyle('font-variant')\n const fontWeightStyleProp = this.getStyle('font-weight')\n const fontSizeStyleProp = this.getStyle('font-size')\n const fontFamilyStyleProp = this.getStyle('font-family')\n const font = new Font(\n fontStyleStyleProp.getString(),\n fontVariantStyleProp.getString(),\n fontWeightStyleProp.getString(),\n fontSizeStyleProp.hasValue()\n ? `${fontSizeStyleProp.getPixels(true)}px`\n : '',\n fontFamilyStyleProp.getString(),\n Font.parse(\n fontStyleProp.getString(),\n ctx.font\n )\n )\n\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\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)\n // opacity\n ctx.globalAlpha = this.calculateOpacity()\n }\n }\n\n override clearContext(ctx: RenderingContext2D) {\n super.clearContext(ctx)\n\n if (this.modifiedEmSizeStack) {\n this.document.popEmSize()\n }\n }\n}\n","import { RenderingContext2D } from '../types'\nimport {\n toNumbers,\n compressSpaces,\n trimLeft,\n trimRight\n} from '../util'\nimport { Font } from '../Font'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { Element } from './Element'\nimport { FontElement } from './FontElement'\nimport { ArabicForm, GlyphElement } from './GlyphElement'\nimport { RenderedElement } from './RenderedElement'\n\nexport class TextElement extends RenderedElement {\n override type = 'text'\n protected x = 0\n protected y = 0\n private leafTexts: TextElement[] = []\n private textChunkStart = 0\n private minX = Number.POSITIVE_INFINITY\n private maxX = Number.NEGATIVE_INFINITY\n private measureCache = -1\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(\n document,\n node,\n new.target === TextElement\n ? true\n : captureTextNodes\n )\n }\n\n override setContext(ctx: RenderingContext2D, fromMeasure = false) {\n super.setContext(ctx, fromMeasure)\n\n const textBaseline = this.getStyle('dominant-baseline').getTextBaseline()\n || this.getStyle('alignment-baseline').getTextBaseline()\n\n if (textBaseline) {\n ctx.textBaseline = textBaseline as CanvasTextBaseline\n }\n }\n\n protected 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: RenderingContext2D) {\n if (this.type !== 'text') {\n return this.getTElementBoundingBox(ctx)\n }\n\n // first, calculate child positions\n this.initializeCoordinates()\n this.adjustChildCoordinatesRecursive(ctx)\n\n let boundingBox: BoundingBox | null = null\n\n // then calculate bounding box\n this.children.forEach((_, i) => {\n const childBoundingBox = this.getChildBoundingBox(ctx, this, this, i)\n\n if (!boundingBox) {\n boundingBox = childBoundingBox\n } else {\n boundingBox.addBoundingBox(childBoundingBox)\n }\n })\n\n return boundingBox\n }\n\n protected getFontSize() {\n const {\n document,\n parent\n } = this\n const inheritFontSize = Font.parse(document.ctx.font).fontSize\n const fontSize = parent.getStyle('font-size').getNumber(inheritFontSize)\n\n return fontSize\n }\n\n protected getTElementBoundingBox(ctx: RenderingContext2D) {\n const fontSize = this.getFontSize()\n\n return new BoundingBox(\n this.x,\n this.y - fontSize,\n this.x + this.measureText(ctx),\n this.y\n )\n }\n\n getGlyph(\n font: FontElement,\n text: string,\n i: number\n ) {\n const char = text[i]\n let glyph: GlyphElement | undefined\n\n if (font.isArabic) {\n const len = text.length\n const prevChar = text[i - 1]\n const nextChar = text[i + 1]\n let arabicForm: 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 glyph = font.arabicGlyphs.get(char)?.get(arabicForm) || font.glyphs.get(char)\n } else {\n glyph = font.glyphs.get(char)\n }\n\n if (!glyph) {\n glyph = font.missingGlyph\n }\n\n return glyph\n }\n\n getText() {\n return ''\n }\n\n protected getTextFromNode(node?: ChildNode) {\n const textNode = node || this.node\n const childNodes = Array.from(textNode.parentNode.childNodes)\n const index = childNodes.indexOf(textNode)\n const lastIndex = childNodes.length - 1\n let text = compressSpaces(\n // textNode.value\n // || textNode.text\n textNode.textContent\n || ''\n )\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 override renderChildren(ctx: RenderingContext2D) {\n if (this.type !== 'text') {\n this.renderTElementChildren(ctx)\n return\n }\n\n // first, calculate child positions\n this.initializeCoordinates()\n this.adjustChildCoordinatesRecursive(ctx)\n\n // then render\n this.children.forEach((_, i) => {\n this.renderChild(ctx, this, this, i)\n })\n\n const { mouse } = this.document.screen\n\n // Do not calc bounding box if mouse is not working.\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(\n this,\n this.getBoundingBox(ctx)\n )\n }\n }\n\n protected renderTElementChildren(ctx: RenderingContext2D) {\n const {\n document,\n parent\n } = this\n const renderText = this.getText()\n const customFont = parent.getStyle('font-family').getDefinition<FontElement>()\n\n if (customFont) {\n const { unitsPerEm } = customFont.fontFace\n const ctxFont = Font.parse(document.ctx.font)\n const fontSize = parent.getStyle('font-size').getNumber(ctxFont.fontSize)\n const fontStyle = parent.getStyle('font-style').getString(ctxFont.fontStyle)\n const scale = fontSize / unitsPerEm\n const text = customFont.isRTL\n ? renderText.split('').reverse().join('')\n : renderText\n const dx = toNumbers(parent.getAttribute('dx').getString())\n const len = text.length\n\n for (let i = 0; i < len; i++) {\n const glyph = this.getGlyph(customFont, text, i)\n\n ctx.translate(this.x, this.y)\n ctx.scale(scale, -scale)\n\n const lw = ctx.lineWidth\n\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\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 const {\n x,\n y\n } = this\n\n // NEED TEST\n // if (ctx.paintOrder === 'stroke') {\n // if (ctx.strokeStyle) {\n // ctx.strokeText(renderText, x, y);\n // }\n\n // if (ctx.fillStyle) {\n // ctx.fillText(renderText, x, y);\n // }\n // } else {\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 protected applyAnchoring() {\n if (this.textChunkStart >= this.leafTexts.length) {\n return\n }\n\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 const firstElement = this.leafTexts[this.textChunkStart]\n const textAnchor = firstElement.getStyle('text-anchor').getString('start')\n const isRTL = false // we treat RTL like LTR\n let 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 (let i = this.textChunkStart; i < this.leafTexts.length; i++) {\n this.leafTexts[i].x += shift\n }\n\n // start new chunk\n this.minX = Number.POSITIVE_INFINITY\n this.maxX = Number.NEGATIVE_INFINITY\n this.textChunkStart = this.leafTexts.length\n }\n\n protected adjustChildCoordinatesRecursive(ctx: RenderingContext2D) {\n this.children.forEach((_, i) => {\n this.adjustChildCoordinatesRecursiveCore(ctx, this, this, i)\n })\n this.applyAnchoring()\n }\n\n protected adjustChildCoordinatesRecursiveCore(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ): void {\n const child = parent.children[i] as TextElement\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 protected adjustChildCoordinates(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ) {\n const child = parent.children[i] as TextElement\n\n if (typeof child.measureText !== 'function') {\n return child\n }\n\n ctx.save()\n child.setContext(ctx, true)\n\n const xAttr = child.getAttribute('x')\n const yAttr = child.getAttribute('y')\n const dxAttr = child.getAttribute('dx')\n const dyAttr = child.getAttribute('dy')\n const customFont = child.getStyle('font-family').getDefinition<FontElement>()\n const isRTL = Boolean(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 const 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\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\n\n // update the current chunk and it's bounds\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\n child.clearContext(ctx)\n ctx.restore()\n\n return child\n }\n\n protected getChildBoundingBox(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ) {\n const child = parent.children[i] as TextElement\n\n // not a text node?\n if (typeof child.getBoundingBox !== 'function') {\n return null\n }\n\n const boundingBox = child.getBoundingBox(ctx)\n\n if (boundingBox) {\n child.children.forEach((_, i) => {\n const childBoundingBox = textParent.getChildBoundingBox(ctx, textParent, child, i)\n\n boundingBox.addBoundingBox(childBoundingBox)\n })\n }\n\n return boundingBox\n }\n\n protected renderChild(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ) {\n const child = parent.children[i] as TextElement\n\n child.render(ctx)\n child.children.forEach((_, i) => {\n textParent.renderChild(ctx, textParent, child, i)\n })\n }\n\n protected measureText(ctx: RenderingContext2D) {\n const { measureCache } = this\n\n if (~measureCache) {\n return measureCache\n }\n\n const renderText = this.getText()\n const measure = this.measureTargetText(ctx, renderText)\n\n this.measureCache = measure\n\n return measure\n }\n\n protected measureTargetText(\n ctx: RenderingContext2D,\n targetText: string\n ) {\n if (!targetText.length) {\n return 0\n }\n\n const { parent } = this\n const customFont = parent.getStyle('font-family').getDefinition<FontElement>()\n\n if (customFont) {\n const fontSize = this.getFontSize()\n const text = customFont.isRTL\n ? targetText.split('').reverse().join('')\n : targetText\n const dx = toNumbers(parent.getAttribute('dx').getString())\n const len = text.length\n let measure = 0\n\n for (let i = 0; i < len; i++) {\n const glyph = this.getGlyph(customFont, text, i)\n\n measure += (glyph.horizAdvX || customFont.horizAdvX)\n * fontSize\n / 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 // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!ctx.measureText) {\n return targetText.length * 10\n }\n\n ctx.save()\n this.setContext(ctx, true)\n\n const { width: measure } = ctx.measureText(targetText)\n\n this.clearContext(ctx)\n ctx.restore()\n\n return measure\n }\n\n /**\n * Inherits positional attributes from {@link TextElement} parent(s). Attributes\n * are only inherited from a parent to its first child.\n * @param name - The attribute name.\n * @returns The attribute value or null.\n */\n protected getInheritedAttribute(name: string): string | null {\n // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n let current: Element | null = this\n\n while (current instanceof TextElement && current.isFirstChild() && current.parent) {\n const parentAttr = current.parent.getAttribute(name)\n\n if (parentAttr.hasValue(true)) {\n return parentAttr.getString('0')\n }\n\n current = current.parent\n }\n\n return null\n }\n}\n","import { Document } from './Document'\nimport { TextElement } from './TextElement'\n\nexport class TSpanElement extends TextElement {\n override type = 'tspan'\n protected readonly text: string\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(\n document,\n node,\n new.target === TSpanElement\n ? true\n : captureTextNodes\n )\n\n // if this node has children, then they own the text\n this.text = this.children.length > 0\n ? ''\n : this.getTextFromNode()\n }\n\n override getText() {\n return this.text\n }\n}\n","import { TSpanElement } from './TSpanElement'\n\nexport class TextNode extends TSpanElement {\n override type = 'textNode'\n}\n","import {\n SVGCommand,\n CommandM,\n CommandL,\n CommandH,\n CommandV,\n CommandZ,\n CommandQ,\n CommandT,\n CommandC,\n CommandS,\n CommandA\n} from 'svg-pathdata/lib/types'\nimport { SVGPathData } from 'svg-pathdata'\nimport { Point } from './Point'\n\nexport type CommandType = SVGCommand['type']\nexport type Command = { type: CommandType }\n & Omit<CommandM, 'type'>\n & Omit<CommandL, 'type'>\n & Omit<CommandH, 'type'>\n & Omit<CommandV, 'type'>\n & Omit<CommandZ, 'type'>\n & Omit<CommandQ, 'type'>\n & Omit<CommandT, 'type'>\n & Omit<CommandC, 'type'>\n & Omit<CommandS, 'type'>\n & Omit<CommandA, 'type'>\n\nexport class PathParser extends SVGPathData {\n control: Point = new Point(0, 0)\n start: Point = new Point(0, 0)\n current: Point = new Point(0, 0)\n command: Command | null = null\n override readonly commands: Command[] /* Babel fix: */ = this.commands\n private i = -1\n private previousCommand: Command | null = null\n private points: Point[] = []\n private angles: (number | null)[] = []\n\n constructor(path: string) {\n super(\n path\n // Fix spaces after signs.\n .replace(/([+\\-.])\\s+/gm, '$1')\n // Remove invalid part.\n .replace(/[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*/g, '')\n )\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 const {\n i,\n commands\n } = this\n\n return i >= commands.length - 1\n }\n\n next() {\n const command = this.commands[++this.i]\n\n this.previousCommand = this.command\n this.command = command\n\n return command\n }\n\n getPoint(xProp = 'x', yProp = 'y') {\n const point = new Point(\n this.command[xProp] as number,\n this.command[yProp] as number\n )\n\n return this.makeAbsolute(point)\n }\n\n getAsControlPoint(xProp?: string, yProp?: string) {\n const point = this.getPoint(xProp, yProp)\n\n this.control = point\n\n return point\n }\n\n getAsCurrentPoint(xProp?: string, yProp?: string) {\n const point = this.getPoint(xProp, yProp)\n\n this.current = point\n\n return point\n }\n\n getReflectedControlPoint() {\n const previousCommand = this.previousCommand.type\n\n if (previousCommand !== SVGPathData.CURVE_TO\n && previousCommand !== SVGPathData.SMOOTH_CURVE_TO\n && previousCommand !== SVGPathData.QUAD_TO\n && previousCommand !== SVGPathData.SMOOTH_QUAD_TO\n ) {\n return this.current\n }\n\n // reflect point\n const {\n current: {\n x: cx,\n y: cy\n },\n control: {\n x: ox,\n y: oy\n }\n } = this\n const point = new Point(2 * cx - ox, 2 * cy - oy)\n\n return point\n }\n\n makeAbsolute(point: Point) {\n if (this.command.relative) {\n const {\n x,\n y\n } = this.current\n\n point.x += x\n point.y += y\n }\n\n return point\n }\n\n addMarker(point: Point, from?: Point, priorTo?: Point) {\n const {\n points,\n angles\n } = this\n\n // if the last angle isn't filled in because we didn't have this point yet ...\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: Point, angle: number) {\n this.points.push(point)\n this.angles.push(angle)\n }\n\n getMarkerPoints() {\n return this.points\n }\n\n getMarkerAngles() {\n const { angles } = this\n const len = angles.length\n\n for (let i = 0; i < len; i++) {\n if (!angles[i]) {\n for (let 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","/* eslint-disable @typescript-eslint/member-ordering */\nimport { RenderingContext2D } from '../types'\nimport {\n vectorsRatio,\n vectorsAngle\n} from '../util'\nimport { Point } from '../Point'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathParser } from '../PathParser'\nimport { Document } from './Document'\nimport { RenderedElement } from './RenderedElement'\nimport { MarkerElement } from './MarkerElement'\n\nexport type Marker = [Point, number]\n\nexport class PathElement extends RenderedElement {\n override type = 'path'\n readonly pathParser: PathParser\n\n constructor(\n document: Document,\n node?: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.pathParser = new PathParser(this.getAttribute('d').getString())\n }\n\n path(ctx?: RenderingContext2D) {\n const { pathParser } = this\n const boundingBox = new BoundingBox()\n\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 default:\n }\n }\n\n return boundingBox\n }\n\n getBoundingBox(_ctx: RenderingContext2D) {\n return this.path()\n }\n\n getMarkers(): Marker[] {\n const { pathParser } = this\n const points = pathParser.getMarkerPoints()\n const angles = pathParser.getMarkerAngles()\n const markers = points.map((point, i): Marker => [point, angles[i]])\n\n return markers\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n this.path(ctx)\n this.document.screen.mouse.checkPath(this, ctx)\n\n const fillRuleStyleProp = this.getStyle('fill-rule')\n\n if (ctx.fillStyle !== '') {\n if (fillRuleStyleProp.getString('inherit') !== 'inherit') {\n ctx.fill(fillRuleStyleProp.getString() as CanvasFillRule)\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 const markers = this.getMarkers()\n\n if (markers) {\n const markersLastIndex = markers.length - 1\n const markerStartStyleProp = this.getStyle('marker-start')\n const markerMidStyleProp = this.getStyle('marker-mid')\n const markerEndStyleProp = this.getStyle('marker-end')\n\n if (markerStartStyleProp.isUrlDefinition()) {\n const marker = markerStartStyleProp.getDefinition<MarkerElement>()\n const [point, angle] = markers[0]\n\n marker.render(ctx, point, angle)\n }\n\n if (markerMidStyleProp.isUrlDefinition()) {\n const marker = markerMidStyleProp.getDefinition<MarkerElement>()\n\n for (let i = 1; i < markersLastIndex; i++) {\n const [point, angle] = markers[i]\n\n marker.render(ctx, point, angle)\n }\n }\n\n if (markerEndStyleProp.isUrlDefinition()) {\n const marker = markerEndStyleProp.getDefinition<MarkerElement>()\n const [point, angle] = markers[markersLastIndex]\n\n marker.render(ctx, point, angle)\n }\n }\n }\n\n static pathM(pathParser: PathParser) {\n const point = pathParser.getAsCurrentPoint()\n\n pathParser.start = pathParser.current\n\n return {\n point\n }\n }\n\n protected pathM(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const { point } = PathElement.pathM(pathParser)\n const {\n x,\n y\n } = point\n\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: PathParser) {\n const { current } = pathParser\n const point = pathParser.getAsCurrentPoint()\n\n return {\n current,\n point\n }\n }\n\n protected pathL(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point\n } = PathElement.pathL(pathParser)\n const {\n x,\n y\n } = point\n\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: PathParser) {\n const {\n current,\n command\n } = pathParser\n const point = new Point(\n (command.relative ? current.x : 0) + command.x,\n current.y\n )\n\n pathParser.current = point\n\n return {\n current,\n point\n }\n }\n\n protected pathH(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point\n } = PathElement.pathH(pathParser)\n const {\n x,\n y\n } = point\n\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: PathParser) {\n const {\n current,\n command\n } = pathParser\n const point = new Point(\n current.x,\n (command.relative ? current.y : 0) + command.y\n )\n\n pathParser.current = point\n\n return {\n current,\n point\n }\n }\n\n protected pathV(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point\n } = PathElement.pathV(pathParser)\n const {\n x,\n y\n } = point\n\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: PathParser) {\n const { current } = pathParser\n const point = pathParser.getPoint('x1', 'y1')\n const controlPoint = pathParser.getAsControlPoint('x2', 'y2')\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n point,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathC(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, point)\n boundingBox.addBezierCurve(\n current.x,\n current.y,\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.bezierCurveTo(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathS(pathParser: PathParser) {\n const { current } = pathParser\n const point = pathParser.getReflectedControlPoint()\n const controlPoint = pathParser.getAsControlPoint('x2', 'y2')\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n point,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathS(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, point)\n boundingBox.addBezierCurve(\n current.x,\n current.y,\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.bezierCurveTo(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathQ(pathParser: PathParser) {\n const { current } = pathParser\n const controlPoint = pathParser.getAsControlPoint('x1', 'y1')\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathQ(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, controlPoint)\n boundingBox.addQuadraticCurve(\n current.x,\n current.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.quadraticCurveTo(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathT(pathParser: PathParser) {\n const { current } = pathParser\n const controlPoint = pathParser.getReflectedControlPoint()\n\n pathParser.control = controlPoint\n\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathT(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, controlPoint)\n boundingBox.addQuadraticCurve(\n current.x,\n current.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.quadraticCurveTo(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathA(pathParser: PathParser) {\n const {\n current,\n command\n } = pathParser\n let {\n rX,\n rY,\n xRot,\n lArcFlag,\n sweepFlag\n } = command\n const xAxisRotation = xRot * (Math.PI / 180.0)\n const currentPoint = pathParser.getAsCurrentPoint()\n // Conversion from endpoint to center parameterization\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n // x1', y1'\n const currp = new Point(\n Math.cos(xAxisRotation) * (current.x - currentPoint.x) / 2.0\n + Math.sin(xAxisRotation) * (current.y - currentPoint.y) / 2.0,\n -Math.sin(xAxisRotation) * (current.x - currentPoint.x) / 2.0\n + Math.cos(xAxisRotation) * (current.y - currentPoint.y) / 2.0\n )\n // adjust radii\n const l =\n Math.pow(currp.x, 2) / Math.pow(rX, 2)\n + 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 }\n\n // cx', cy'\n let s = (lArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(\n (\n (Math.pow(rX, 2) * Math.pow(rY, 2))\n - (Math.pow(rX, 2) * Math.pow(currp.y, 2))\n - (Math.pow(rY, 2) * Math.pow(currp.x, 2))\n ) / (\n Math.pow(rX, 2) * Math.pow(currp.y, 2)\n + Math.pow(rY, 2) * Math.pow(currp.x, 2)\n )\n )\n\n if (isNaN(s)) {\n s = 0\n }\n\n const cpp = new Point(\n s * rX * currp.y / rY,\n s * -rY * currp.x / rX\n )\n // cx, cy\n const centp = new Point(\n (current.x + currentPoint.x) / 2.0\n + Math.cos(xAxisRotation) * cpp.x\n - Math.sin(xAxisRotation) * cpp.y,\n (current.y + currentPoint.y) / 2.0\n + Math.sin(xAxisRotation) * cpp.x\n + Math.cos(xAxisRotation) * cpp.y\n )\n // initial angle\n const a1 = vectorsAngle([1, 0], [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY]) // θ1\n // angle delta\n const u = [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY] as const\n const v = [(-currp.x - cpp.x) / rX, (-currp.y - cpp.y) / rY] as const\n let 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 protected pathA(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n currentPoint,\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n } = PathElement.pathA(pathParser)\n // for markers\n const dir = 1 - sweepFlag ? 1.0 : -1.0\n const ah = a1 + dir * (ad / 2.0)\n const halfWay = new Point(\n centp.x + rX * Math.cos(ah),\n centp.y + rY * Math.sin(ah)\n )\n\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 const r = rX > rY ? rX : rY\n const sx = rX > rY ? 1 : rX / rY\n const sy = rX > rY ? rY / rX : 1\n\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: PathParser) {\n pathParser.current = pathParser.start\n }\n\n protected pathZ(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\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\n && boundingBox.y1 !== boundingBox.y2\n ) {\n ctx.closePath()\n }\n }\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { toNumbers } from '../util'\nimport { Property } from '../Property'\nimport { Font } from '../Font'\nimport { RenderedElement } from './RenderedElement'\n\nexport class SVGElement extends RenderedElement {\n override type = 'svg'\n root = false\n\n override setContext(ctx: RenderingContext2D) {\n const { document } = this\n const {\n screen,\n window\n } = document\n const canvas = ctx.canvas\n\n screen.setDefaults(ctx)\n\n if ('style' in canvas\n && typeof ctx.font !== 'undefined'\n && window\n && typeof window.getComputedStyle !== 'undefined'\n ) {\n ctx.font = window.getComputedStyle(canvas).getPropertyValue('font')\n\n const fontSizeProp = new Property(\n document,\n 'fontSize',\n Font.parse(ctx.font).fontSize\n )\n\n if (fontSizeProp.hasValue()) {\n document.rootEmSize = fontSizeProp.getPixels('y')\n document.emSize = document.rootEmSize\n }\n }\n\n // create new view port\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 let {\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 const refXAttr = this.getAttribute('refX')\n const refYAttr = this.getAttribute('refY')\n const viewBoxAttr = this.getAttribute('viewBox')\n const viewBox = viewBoxAttr.hasValue()\n ? toNumbers(viewBoxAttr.getString())\n : null\n const clip = !this.root\n && this.getStyle('overflow').getValue('hidden') !== 'visible'\n let minX = 0\n let minY = 0\n let clipX = 0\n let 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)\n\n // 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 if (this.node // is not temporary SVGElement\n && (!this.parent || this.node.parentNode?.nodeName === 'foreignObject')\n && this.getStyle('transform', false, true).hasValue()\n && !this.getStyle('transform-origin', false, true).hasValue()\n ) {\n this.getStyle('transform-origin', true, true).setValue('50% 50%')\n }\n\n super.setContext(ctx)\n\n ctx.translate(\n this.getAttribute('x').getPixels('x'),\n this.getAttribute('y').getPixels('y')\n )\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() as number,\n refY: refYAttr.getValue() as number,\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 override clearContext(ctx: RenderingContext2D) {\n super.clearContext(ctx)\n\n this.document.screen.viewPort.removeCurrent()\n }\n\n /**\n * Resize SVG to fit in given size.\n * @param width\n * @param height\n * @param preserveAspectRatio\n */\n resize(\n width: number,\n height = width,\n preserveAspectRatio: boolean | string = false\n ) {\n const widthAttr = this.getAttribute('width', true)\n const heightAttr = this.getAttribute('height', true)\n const viewBoxAttr = this.getAttribute('viewBox')\n const styleAttr = this.getAttribute('style')\n const originWidth = widthAttr.getNumber(0)\n const originHeight = heightAttr.getNumber(0)\n\n if (preserveAspectRatio) {\n if (typeof preserveAspectRatio === 'string') {\n this.getAttribute('preserveAspectRatio', true).setValue(preserveAspectRatio)\n } else {\n const 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 ${originWidth || width} ${originHeight || height}`)\n }\n\n if (styleAttr.hasValue()) {\n const widthStyle = this.getStyle('width')\n const heightStyle = this.getStyle('height')\n\n if (widthStyle.hasValue()) {\n widthStyle.setValue(`${width}px`)\n }\n\n if (heightStyle.hasValue()) {\n heightStyle.setValue(`${height}px`)\n }\n }\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\n\nexport class RectElement extends PathElement {\n override type = 'rect'\n\n override path(ctx: RenderingContext2D) {\n const x = this.getAttribute('x').getPixels('x')\n const y = this.getAttribute('y').getPixels('y')\n const width = this.getStyle('width', false, true).getPixels('x')\n const height = this.getStyle('height', false, true).getPixels('y')\n const rxAttr = this.getAttribute('rx')\n const ryAttr = this.getAttribute('ry')\n let rx = rxAttr.getPixels('x')\n let 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 const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3)\n\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(\n x + width,\n y + height - ry + (KAPPA * ry),\n x + width - rx + (KAPPA * rx),\n y + height,\n x + width - rx,\n y + height\n )\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 override getMarkers() {\n return null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\n\nexport class CircleElement extends PathElement {\n override type = 'circle'\n\n override path(ctx: RenderingContext2D) {\n const cx = this.getAttribute('cx').getPixels('x')\n const cy = this.getAttribute('cy').getPixels('y')\n const 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(\n cx - r,\n cy - r,\n cx + r,\n cy + r\n )\n }\n\n override getMarkers() {\n return null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\n\nexport class EllipseElement extends PathElement {\n override type = 'ellipse'\n\n override path(ctx: RenderingContext2D) {\n const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3)\n const rx = this.getAttribute('rx').getPixels('x')\n const ry = this.getAttribute('ry').getPixels('y')\n const cx = this.getAttribute('cx').getPixels('x')\n const 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(\n cx + rx,\n cy + (KAPPA * ry),\n cx + (KAPPA * rx),\n cy + ry,\n cx,\n cy + ry\n )\n ctx.bezierCurveTo(\n cx - (KAPPA * rx),\n cy + ry,\n cx - rx,\n cy + (KAPPA * ry),\n cx - rx,\n cy\n )\n ctx.bezierCurveTo(\n cx - rx,\n cy - (KAPPA * ry),\n cx - (KAPPA * rx),\n cy - ry,\n cx,\n cy - ry\n )\n ctx.bezierCurveTo(\n cx + (KAPPA * rx),\n cy - ry,\n cx + rx,\n cy - (KAPPA * ry),\n cx + rx,\n cy\n )\n ctx.closePath()\n }\n\n return new BoundingBox(\n cx - rx,\n cy - ry,\n cx + rx,\n cy + ry\n )\n }\n\n override getMarkers() {\n return null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Point } from '../Point'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement, Marker } from './PathElement'\n\nexport class LineElement extends PathElement {\n override type = 'line'\n\n getPoints() {\n return [\n new Point(\n this.getAttribute('x1').getPixels('x'),\n this.getAttribute('y1').getPixels('y')\n ),\n new Point(\n this.getAttribute('x2').getPixels('x'),\n this.getAttribute('y2').getPixels('y')\n )\n ]\n }\n\n override path(ctx: RenderingContext2D) {\n const [\n {\n x: x0,\n y: y0\n },\n {\n x: x1,\n y: y1\n }\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(\n x0,\n y0,\n x1,\n y1\n )\n }\n\n override getMarkers(): Marker[] {\n const [p0, p1] = this.getPoints()\n const a = p0.angleTo(p1)\n\n return [[p0, a], [p1, a]]\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Point } from '../Point'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { PathElement, Marker } from './PathElement'\n\nexport class PolylineElement extends PathElement {\n override type = 'polyline'\n protected readonly points: Point[] = []\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.points = Point.parsePath(\n this.getAttribute('points').getString()\n )\n }\n\n override path(ctx: RenderingContext2D) {\n const { points } = this\n const [\n {\n x: x0,\n y: y0\n }\n ] = points\n const boundingBox = new BoundingBox(x0, y0)\n\n if (ctx) {\n ctx.beginPath()\n ctx.moveTo(x0, y0)\n }\n\n points.forEach(({\n x,\n y\n }) => {\n boundingBox.addPoint(x, y)\n\n if (ctx) {\n ctx.lineTo(x, y)\n }\n })\n\n return boundingBox\n }\n\n override getMarkers() {\n const { points } = this\n const lastIndex = points.length - 1\n const markers: Marker[] = []\n\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","import { RenderingContext2D } from '../types'\nimport { PolylineElement } from './PolylineElement'\n\nexport class PolygonElement extends PolylineElement {\n override type = 'polygon'\n\n override path(ctx: RenderingContext2D) {\n const boundingBox = super.path(ctx)\n const [\n {\n x,\n y\n }\n ] = this.points\n\n if (ctx) {\n ctx.lineTo(x, y)\n ctx.closePath()\n }\n\n return boundingBox\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Property } from '../Property'\nimport { Element } from './Element'\nimport { SVGElement } from './SVGElement'\n\nexport class PatternElement extends Element {\n override type = 'pattern'\n\n createPattern(\n ctx: RenderingContext2D,\n _: Element,\n parentOpacityProp: Property\n ) {\n const width = this.getStyle('width').getPixels('x', true)\n const height = this.getStyle('height').getPixels('y', true)\n // render me using a temporary svg element\n const patternSvg = new SVGElement(\n this.document,\n null\n )\n\n patternSvg.attributes.set('viewBox', new Property(\n this.document,\n 'viewBox',\n this.getAttribute('viewBox').getValue()\n ))\n patternSvg.attributes.set('width', new Property(\n this.document,\n 'width',\n `${width}px`\n ))\n patternSvg.attributes.set('height', new Property(\n this.document,\n 'height',\n `${height}px`\n ))\n patternSvg.attributes.set('transform', new Property(\n this.document,\n 'transform',\n this.getAttribute('patternTransform').getValue()\n ))\n patternSvg.children = this.children\n\n const patternCanvas = this.document.createCanvas(width, height)\n const patternCtx = patternCanvas.getContext('2d')\n const xAttr = this.getAttribute('x')\n const yAttr = this.getAttribute('y')\n\n if (xAttr.hasValue() && yAttr.hasValue()) {\n patternCtx.translate(\n xAttr.getPixels('x', true),\n yAttr.getPixels('y', true)\n )\n }\n\n if (parentOpacityProp.hasValue()) {\n this.styles.set('fill-opacity', parentOpacityProp)\n } else {\n this.styles.delete('fill-opacity')\n }\n\n // render 3x3 grid so when we transform there's no white space on edges\n for (let x = -1; x <= 1; x++) {\n for (let y = -1; y <= 1; y++) {\n patternCtx.save()\n patternSvg.attributes.set('x', new Property(\n this.document,\n 'x',\n x * patternCanvas.width\n ))\n patternSvg.attributes.set('y', new Property(\n this.document,\n 'y',\n y * patternCanvas.height\n ))\n patternSvg.render(patternCtx)\n patternCtx.restore()\n }\n }\n\n const pattern = ctx.createPattern(patternCanvas as CanvasImageSource, 'repeat')\n\n return pattern\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Point } from '../Point'\nimport { Property } from '../Property'\nimport { Element } from './Element'\nimport { SVGElement } from './SVGElement'\n\nexport class MarkerElement extends Element {\n override type = 'marker'\n\n override render(ctx: RenderingContext2D, point?: Point, angle?: number) {\n if (!point) {\n return\n }\n\n const {\n x,\n y\n } = point\n const orient = this.getAttribute('orient').getString('auto')\n const markerUnits = this.getAttribute('markerUnits').getString('strokeWidth')\n\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()\n\n // render me using a temporary svg element\n const markerSvg = new SVGElement(this.document)\n\n markerSvg.type = this.type\n markerSvg.attributes.set('viewBox', new Property(\n this.document,\n 'viewBox',\n this.getAttribute('viewBox').getValue()\n ))\n markerSvg.attributes.set('refX', new Property(\n this.document,\n 'refX',\n this.getAttribute('refX').getValue()\n ))\n markerSvg.attributes.set('refY', new Property(\n this.document,\n 'refY',\n this.getAttribute('refY').getValue()\n ))\n markerSvg.attributes.set('width', new Property(\n this.document,\n 'width',\n this.getAttribute('markerWidth').getValue()\n ))\n markerSvg.attributes.set('height', new Property(\n this.document,\n 'height',\n this.getAttribute('markerHeight').getValue()\n ))\n markerSvg.attributes.set('overflow', new Property(\n this.document,\n 'overflow',\n this.getAttribute('overflow').getValue()\n ))\n markerSvg.attributes.set('fill', new Property(\n this.document,\n 'fill',\n this.getAttribute('fill').getColor('black')\n ))\n markerSvg.attributes.set('stroke', new Property(\n this.document,\n 'stroke',\n this.getAttribute('stroke').getValue('none')\n ))\n markerSvg.children = this.children\n\n markerSvg.render(ctx)\n\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","import { Element } from './Element'\n\nexport class DefsElement extends Element {\n override type = 'defs'\n\n override render() {\n // NOOP\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\nimport { RenderedElement } from './RenderedElement'\n\nexport class GElement extends RenderedElement {\n override type = 'g'\n\n getBoundingBox(ctx: RenderingContext2D) {\n const boundingBox = new BoundingBox()\n\n this.children.forEach((child: PathElement) => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx))\n })\n\n return boundingBox\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Screen } from '../Screen'\nimport { Property } from '../Property'\nimport { Document } from './Document'\nimport { Element } from './Element'\nimport { PathElement } from './PathElement'\nimport { SVGElement } from './SVGElement'\nimport { RectElement } from './RectElement'\nimport { StopElement } from './StopElement'\nimport { GElement } from './GElement'\n\nexport abstract class GradientElement extends Element {\n readonly attributesToInherit = ['gradientUnits']\n\n protected readonly stops: StopElement[] = []\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const {\n stops,\n children\n } = this\n\n children.forEach((child) => {\n if (child.type === 'stop') {\n stops.push(child as StopElement)\n }\n })\n }\n\n abstract getGradient(ctx: RenderingContext2D, element: PathElement): CanvasGradient | null\n\n getGradientUnits() {\n return this.getAttribute('gradientUnits').getString('objectBoundingBox')\n }\n\n createGradient(\n ctx: RenderingContext2D,\n element: PathElement,\n parentOpacityProp: Property\n ) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n let stopsContainer = this\n\n if (this.getHrefAttribute().hasValue()) {\n stopsContainer = this.getHrefAttribute().getDefinition()\n this.inheritStopContainer(stopsContainer)\n }\n\n const { stops } = stopsContainer\n const gradient = this.getGradient(ctx, element)\n\n if (!gradient) {\n return this.addParentOpacity(\n parentOpacityProp,\n stops[stops.length - 1].color\n )\n }\n\n stops.forEach((stop: StopElement) => {\n gradient.addColorStop(\n stop.offset,\n this.addParentOpacity(\n parentOpacityProp,\n stop.color\n )\n )\n })\n\n if (this.getAttribute('gradientTransform').hasValue()) {\n // render as transformed pattern on temporary canvas\n const { document } = this\n const { MAX_VIRTUAL_PIXELS } = Screen\n const { viewPort } = document.screen\n const rootView = viewPort.getRoot()\n const rect = new RectElement(document)\n\n rect.attributes.set('x', new Property(\n document,\n 'x',\n -MAX_VIRTUAL_PIXELS / 3.0\n ))\n rect.attributes.set('y', new Property(\n document,\n 'y',\n -MAX_VIRTUAL_PIXELS / 3.0\n ))\n rect.attributes.set('width', new Property(\n document,\n 'width',\n MAX_VIRTUAL_PIXELS\n ))\n rect.attributes.set('height', new Property(\n document,\n 'height',\n MAX_VIRTUAL_PIXELS\n ))\n\n const group = new GElement(document)\n\n group.attributes.set('transform', new Property(\n document,\n 'transform',\n this.getAttribute('gradientTransform').getValue()\n ))\n group.children = [rect]\n\n const patternSvg = new SVGElement(document)\n\n patternSvg.attributes.set('x', new Property(\n document,\n 'x',\n 0\n ))\n patternSvg.attributes.set('y', new Property(\n document,\n 'y',\n 0\n ))\n patternSvg.attributes.set('width', new Property(\n document,\n 'width',\n rootView.width\n ))\n patternSvg.attributes.set('height', new Property(\n document,\n 'height',\n rootView.height\n ))\n patternSvg.children = [group]\n\n const patternCanvas = document.createCanvas(rootView.width, rootView.height)\n const patternCtx = patternCanvas.getContext('2d')\n\n patternCtx.fillStyle = gradient\n patternSvg.render(patternCtx)\n\n return patternCtx.createPattern(patternCanvas as CanvasImageSource, 'no-repeat')\n }\n\n return gradient\n }\n\n protected inheritStopContainer(stopsContainer: Element) {\n this.attributesToInherit.forEach((attributeToInherit) => {\n if (!this.getAttribute(attributeToInherit).hasValue()\n && stopsContainer.getAttribute(attributeToInherit).hasValue()\n ) {\n this.getAttribute(attributeToInherit, true)\n .setValue(stopsContainer.getAttribute(attributeToInherit).getValue())\n }\n })\n }\n\n protected addParentOpacity(parentOpacityProp: Property, color: string) {\n if (parentOpacityProp.hasValue()) {\n const colorProp = new Property(\n this.document,\n 'color',\n color\n )\n\n return colorProp.addOpacity(parentOpacityProp).getColor()\n }\n\n return color\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { PathElement } from './PathElement'\nimport { GradientElement } from './GradientElement'\n\nexport class LinearGradientElement extends GradientElement {\n override type = 'linearGradient'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.attributesToInherit.push(\n 'x1',\n 'y1',\n 'x2',\n 'y2'\n )\n }\n\n getGradient(ctx: RenderingContext2D, element: PathElement) {\n const isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox'\n const boundingBox = isBoundingBoxUnits\n ? element.getBoundingBox(ctx)\n : null\n\n if (isBoundingBoxUnits && !boundingBox) {\n return null\n }\n\n if (!this.getAttribute('x1').hasValue()\n && !this.getAttribute('y1').hasValue()\n && !this.getAttribute('x2').hasValue()\n && !this.getAttribute('y2').hasValue()\n ) {\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 const x1 = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('x1').getNumber()\n : this.getAttribute('x1').getPixels('x')\n const y1 = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('y1').getNumber()\n : this.getAttribute('y1').getPixels('y')\n const x2 = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('x2').getNumber()\n : this.getAttribute('x2').getPixels('x')\n const y2 = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('y2').getNumber()\n : 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","import { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { PathElement } from './PathElement'\nimport { GradientElement } from './GradientElement'\n\nexport class RadialGradientElement extends GradientElement {\n override type = 'radialGradient'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.attributesToInherit.push(\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr'\n )\n }\n\n getGradient(ctx: RenderingContext2D, element: PathElement) {\n const isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox'\n const 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 const cx = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('cx').getNumber()\n : this.getAttribute('cx').getPixels('x')\n const cy = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('cy').getNumber()\n : this.getAttribute('cy').getPixels('y')\n let fx = cx\n let fy = cy\n\n if (this.getAttribute('fx').hasValue()) {\n fx = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('fx').getNumber()\n : this.getAttribute('fx').getPixels('x')\n }\n\n if (this.getAttribute('fy').hasValue()) {\n fy = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('fy').getNumber()\n : this.getAttribute('fy').getPixels('y')\n }\n\n const r = isBoundingBoxUnits\n ? (boundingBox.width + boundingBox.height) / 2.0 * this.getAttribute('r').getNumber()\n : this.getAttribute('r').getPixels()\n const fr = this.getAttribute('fr').getPixels()\n\n return ctx.createRadialGradient(fx, fy, fr, cx, cy, r)\n }\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\n\nexport class StopElement extends Element {\n override type = 'stop'\n readonly offset: number\n readonly color: string\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const offset = Math.max(0, Math.min(1, this.getAttribute('offset').getNumber()))\n const stopOpacity = this.getStyle('stop-opacity')\n let 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","import { Property } from '../Property'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport interface IProgress {\n from: Property\n to: Property\n progress: number\n}\n\nexport class AnimateElement extends Element {\n override type = 'animate'\n protected readonly begin: number\n protected readonly maxDuration: number\n protected readonly from: Property\n protected readonly to: Property\n protected readonly values: Property<string[]>\n protected duration = 0\n protected initialValue: string | undefined\n protected initialUnits = ''\n protected removed = false\n protected frozen = false\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n document.screen.animations.push(this)\n\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<string[] | null>(document, 'values', null)\n\n const valuesAttr = this.getAttribute('values')\n\n if (valuesAttr.hasValue()) {\n this.values.setValue(valuesAttr.getString().split(';'))\n }\n }\n\n protected getProperty() {\n const attributeType = this.getAttribute('attributeType').getString()\n const 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 const { initialUnits } = this\n const {\n progress,\n from,\n to\n } = this.getProgress()\n // tween value linearly\n let 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 `${newValue}${initialUnits}`\n }\n\n update(delta: number) {\n const { parent } = this\n const prop = this.getProperty()\n\n // set initial value\n if (!this.initialValue) {\n this.initialValue = prop.getString()\n this.initialUnits = prop.getUnits()\n }\n\n // if we're past the end time\n if (this.duration > this.maxDuration) {\n const fill = this.getAttribute('fill').getString('remove')\n\n // loop for indefinitely repeating animations\n if (this.getAttribute('repeatCount').getString() === 'indefinite'\n || this.getAttribute('repeatDur').getString() === 'indefinite'\n ) {\n this.duration = 0\n } else\n if (fill === 'freeze' && !this.frozen) {\n this.frozen = true\n\n if (parent && prop) {\n parent.animationFrozen = true\n parent.animationFrozenValue = prop.getString()\n }\n } else\n if (fill === 'remove' && !this.removed) {\n this.removed = true\n\n if (parent && prop) {\n prop.setValue(\n parent.animationFrozen\n ? parent.animationFrozenValue\n : this.initialValue\n )\n }\n\n return true\n }\n\n return false\n }\n\n this.duration += delta\n\n // if we're past the begin time\n let updated = false\n\n if (this.begin < this.duration) {\n let newValue = this.calcValue() // tween\n const typeAttr = this.getAttribute('type')\n\n if (typeAttr.hasValue()) {\n // for transform, etc.\n const type = typeAttr.getString()\n\n newValue = `${type}(${newValue})`\n }\n\n prop.setValue(newValue)\n updated = true\n }\n\n return updated\n }\n\n getProgress(): IProgress {\n const {\n document,\n values\n } = this\n let progress = (this.duration - this.begin) / (this.maxDuration - this.begin)\n let from: Property\n let to: Property\n\n if (values.hasValue()) {\n const p = progress * (values.getValue().length - 1)\n const lb = Math.floor(p)\n const ub = Math.ceil(p)\n let value: string | undefined\n\n value = values.getValue()[lb]\n from = new Property(\n document,\n 'from',\n value ? parseFloat(value) : 0\n )\n\n value = values.getValue()[ub]\n to = new Property(\n document,\n 'to',\n value ? parseFloat(value) : 0\n )\n\n progress = (p - lb) / (ub - lb)\n } else {\n from = this.from\n to = this.to\n }\n\n return {\n progress,\n from,\n to\n }\n }\n}\n","import RGBColor from 'rgbcolor'\nimport { AnimateElement } from './AnimateElement'\n\nexport class AnimateColorElement extends AnimateElement {\n override type = 'animateColor'\n\n override calcValue() {\n const {\n progress,\n from,\n to\n } = this.getProgress()\n const colorFrom = new RGBColor(from.getColor())\n const colorTo = new RGBColor(to.getColor())\n\n if (colorFrom.ok && colorTo.ok) {\n // tween color linearly\n const r = colorFrom.r + (colorTo.r - colorFrom.r) * progress\n const g = colorFrom.g + (colorTo.g - colorFrom.g) * progress\n const b = colorFrom.b + (colorTo.b - colorFrom.b) * progress\n\n // ? alpha\n return `rgb(${\n Math.floor(r)\n }, ${\n Math.floor(g)\n }, ${\n Math.floor(b)\n })`\n }\n\n return this.getAttribute('from').getColor()\n }\n}\n","import { toNumbers } from '../util'\nimport { AnimateElement } from './AnimateElement'\n\nexport class AnimateTransformElement extends AnimateElement {\n override type = 'animateTransform'\n\n override calcValue() {\n const {\n progress,\n from,\n to\n } = this.getProgress()\n // tween value linearly\n const transformFrom = toNumbers(from.getString())\n const transformTo = toNumbers(to.getString())\n const newValue = transformFrom.map((from, i) => {\n const to = transformTo[i]\n\n return from + (to - from) * progress\n }).join(' ')\n\n return newValue\n }\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\n\nexport class FontFaceElement extends Element {\n override type = 'font-face'\n readonly ascent: number\n readonly descent: number\n readonly unitsPerEm: number\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\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","import { Document } from './Document'\nimport { PathElement } from './PathElement'\n\nexport type ArabicForm = 'isolated' | 'terminal' | 'medial' | 'initial'\n\nexport class GlyphElement extends PathElement {\n override type = 'glyph'\n readonly horizAdvX: number\n readonly unicode: string\n readonly arabicForm: ArabicForm | undefined\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber()\n this.unicode = this.getAttribute('unicode').getString()\n this.arabicForm = this.getAttribute('arabic-form').getString() as ArabicForm\n }\n}\n","import { GlyphElement } from './GlyphElement'\n\nexport class MissingGlyphElement extends GlyphElement {\n override type = 'missing-glyph'\n override readonly horizAdvX = 0\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\nimport { FontFaceElement } from './FontFaceElement'\nimport { MissingGlyphElement } from './MissingGlyphElement'\nimport { ArabicForm, GlyphElement } from './GlyphElement'\n\nexport class FontElement extends Element {\n override type = 'font'\n readonly isArabic: boolean = false\n readonly missingGlyph: MissingGlyphElement | undefined\n readonly glyphs: Map<string, GlyphElement> = new Map()\n readonly arabicGlyphs: Map<string, Map<ArabicForm, GlyphElement>> = new Map()\n readonly horizAdvX: number\n readonly isRTL: boolean = false\n readonly fontFace: FontFaceElement | undefined\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber()\n\n const { definitions } = document\n const { children } = this\n\n for (const child of children) {\n if (child instanceof FontFaceElement) {\n this.fontFace = child\n\n const fontFamilyStyle = child.getStyle('font-family')\n\n if (fontFamilyStyle.hasValue()) {\n definitions.set(fontFamilyStyle.getString(), this)\n }\n } else\n if (child instanceof MissingGlyphElement) {\n this.missingGlyph = child\n } else\n if (child instanceof GlyphElement) {\n if (child.arabicForm) {\n this.isRTL = true\n this.isArabic = true\n\n let arabicGlyph = this.arabicGlyphs.get(child.unicode)\n\n if (typeof arabicGlyph === 'undefined') {\n arabicGlyph = new Map()\n this.arabicGlyphs.set(child.unicode, arabicGlyph)\n }\n\n arabicGlyph.set(child.arabicForm, child)\n } else {\n this.glyphs.set(child.unicode, child)\n }\n }\n }\n }\n\n override render() {\n // NO RENDER\n }\n}\n","import { TextElement } from './TextElement'\n\nexport class TRefElement extends TextElement {\n override type = 'tref'\n\n override getText() {\n const element = this.getHrefAttribute().getDefinition()\n\n if (element) {\n const firstChild = element.children[0] as TextElement\n\n if (firstChild) {\n return firstChild.getText()\n }\n }\n\n return ''\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Property } from '../Property'\nimport { Font } from '../Font'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { TextElement } from './TextElement'\nimport { GElement } from './GElement'\n\nexport class AElement extends TextElement {\n override type = 'a'\n protected readonly hasText: boolean\n protected readonly text: string\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const { childNodes } = node\n const firstChild = childNodes[0]\n const hasText = childNodes.length > 0\n && Array.from(childNodes).every(node => node.nodeType === 3)\n\n this.hasText = hasText\n this.text = hasText\n ? this.getTextFromNode(firstChild)\n : ''\n }\n\n override getText() {\n return this.text\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n if (this.hasText) {\n // render as text element\n super.renderChildren(ctx)\n\n const {\n document,\n x,\n y\n } = this\n const { mouse } = document.screen\n const fontSize = new Property(\n document,\n 'fontSize',\n Font.parse(document.ctx.font).fontSize\n )\n\n // Do not calc bounding box if mouse is not working.\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(\n this,\n new BoundingBox(\n x,\n y - fontSize.getPixels('y'),\n x + this.measureText(ctx),\n y\n )\n )\n }\n } else\n if (this.children.length > 0) {\n // render as temporary group\n const g = new GElement(this.document)\n\n g.children = this.children\n g.parent = this\n g.render(ctx)\n }\n }\n\n onClick() {\n const { window } = this.document\n\n if (window) {\n window.open(this.getHrefAttribute().getString())\n }\n }\n\n onMouseMove() {\n const ctx = this.document.ctx as CanvasRenderingContext2D\n\n ctx.canvas.style.cursor = 'pointer'\n }\n}\n","import { RenderingContext2D } from '../types'\nimport {\n PSEUDO_ZERO,\n CB1,\n CB2,\n CB3,\n CB4,\n QB1,\n QB2,\n QB3\n} from '../util'\nimport { PathParser, CommandType } from '../PathParser'\nimport { Document } from './Document'\nimport { TextElement } from './TextElement'\nimport { PathElement } from './PathElement'\n\nexport interface IPoint {\n x: number\n y: number\n}\n\nexport interface IPathCommand {\n type: CommandType\n points: number[]\n start?: IPoint\n pathLength: number\n}\n\ninterface ICachedPoint extends IPoint {\n distance: number\n}\n\ninterface IEquidistantCache {\n step: number\n precision: number\n points: ICachedPoint[]\n}\n\ninterface IGlyphInfo {\n // transposeX: number;\n // transposeY: number;\n text: string\n rotation: number\n p0: ICachedPoint\n p1: ICachedPoint\n}\n\nexport class TextPathElement extends TextElement {\n override type = 'textPath'\n protected textWidth = 0\n protected textHeight = 0\n protected pathLength = -1\n protected glyphInfo: IGlyphInfo[] = null\n protected readonly text: string\n protected readonly dataArray: IPathCommand[]\n private letterSpacingCache: number[] = []\n private equidistantCache: IEquidistantCache\n private readonly measuresCache = new Map<string, number>([['', 0]])\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const pathElement = this.getHrefAttribute().getDefinition<PathElement>()\n\n this.text = this.getTextFromNode()\n this.dataArray = this.parsePathData(pathElement)\n }\n\n override getText() {\n return this.text\n }\n\n path(ctx: RenderingContext2D) {\n const { dataArray } = this\n\n if (ctx) {\n ctx.beginPath()\n }\n\n dataArray.forEach(({\n type,\n points\n }) => {\n switch (type) {\n case PathParser.LINE_TO:\n\n if (ctx) {\n ctx.lineTo(points[0], points[1])\n }\n\n break\n\n case PathParser.MOVE_TO:\n\n if (ctx) {\n ctx.moveTo(points[0], points[1])\n }\n\n break\n\n case PathParser.CURVE_TO:\n\n if (ctx) {\n ctx.bezierCurveTo(\n points[0],\n points[1],\n points[2],\n points[3],\n points[4],\n points[5]\n )\n }\n\n break\n\n case PathParser.QUAD_TO:\n\n if (ctx) {\n ctx.quadraticCurveTo(\n points[0],\n points[1],\n points[2],\n points[3]\n )\n }\n\n break\n\n case PathParser.ARC: {\n const [\n cx,\n cy,\n rx,\n ry,\n theta,\n dTheta,\n psi,\n fs\n ] = points\n const r = rx > ry ? rx : ry\n const scaleX = rx > ry ? 1 : rx / ry\n const 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\n if (ctx) {\n ctx.closePath()\n }\n\n break\n\n default:\n }\n })\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n this.setTextData(ctx)\n ctx.save()\n\n const textDecoration = this.parent.getStyle('text-decoration').getString()\n const fontSize = this.getFontSize()\n const { glyphInfo } = this\n const fill = ctx.fillStyle\n\n if (textDecoration === 'underline') {\n ctx.beginPath()\n }\n\n glyphInfo.forEach((glyph, i) => {\n const {\n p0,\n p1,\n rotation,\n text: partialText\n } = glyph\n\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 }\n\n // // To assist with debugging visually, uncomment following\n //\n // ctx.beginPath();\n // if (i % 2)\n // ctx.strokeStyle = 'red';\n // else\n // ctx.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 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 protected getLetterSpacingAt(idx = 0) {\n return this.letterSpacingCache[idx] || 0\n }\n\n protected findSegmentToFitChar(\n ctx: RenderingContext2D,\n anchor: string,\n textFullWidth: number,\n fullPathWidth: number,\n spacesNumber: number,\n inputOffset: number,\n dy: number,\n c: string,\n charI: number\n ) {\n let offset = inputOffset\n let glyphWidth = this.measureText(ctx, c)\n\n if (c === ' '\n && anchor === 'justify'\n && textFullWidth < fullPathWidth\n ) {\n glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber\n }\n\n if (charI > -1) {\n offset += this.getLetterSpacingAt(charI)\n }\n\n const splineStep = this.textHeight / 20\n const p0 = this.getEquidistantPointOnPath(offset, splineStep, 0)\n const p1 = this.getEquidistantPointOnPath(offset + glyphWidth, splineStep, 0)\n const segment = {\n p0,\n p1\n }\n const rotation = p0 && p1\n ? Math.atan2(\n p1.y - p0.y,\n p1.x - p0.x\n )\n : 0\n\n if (dy) {\n const dyX = Math.cos(Math.PI / 2 + rotation) * dy\n const dyY = Math.cos(-rotation) * dy\n\n segment.p0 = {\n ...p0,\n x: p0.x + dyX,\n y: p0.y + dyY\n }\n segment.p1 = {\n ...p1,\n x: p1.x + dyX,\n y: p1.y + dyY\n }\n }\n\n offset += glyphWidth\n\n return {\n offset,\n segment,\n rotation\n }\n }\n\n protected override measureText(\n ctx: RenderingContext2D,\n text?: string\n ) {\n const { measuresCache } = this\n const targetText = text || this.getText()\n\n if (measuresCache.has(targetText)) {\n return measuresCache.get(targetText)\n }\n\n const measure = this.measureTargetText(ctx, targetText)\n\n measuresCache.set(targetText, measure)\n\n return measure\n }\n\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 protected setTextData(ctx: RenderingContext2D) {\n if (this.glyphInfo) {\n return\n }\n\n const renderText = this.getText()\n const chars = renderText.split('')\n const spacesNumber = renderText.split(' ').length - 1\n const dx = this.parent.getAttribute('dx').split().map(_ => _.getPixels('x'))\n const dy = this.parent.getAttribute('dy').getPixels('y')\n const anchor = this.parent.getStyle('text-anchor').getString('start')\n const thisSpacing = this.getStyle('letter-spacing')\n const parentSpacing = this.parent.getStyle('letter-spacing')\n let letterSpacing = 0\n\n if (!thisSpacing.hasValue()\n || thisSpacing.getValue() === 'inherit'\n ) {\n letterSpacing = parentSpacing.getPixels()\n } else\n if (thisSpacing.hasValue()) {\n if (thisSpacing.getValue() !== 'initial'\n && thisSpacing.getValue() !== 'unset'\n ) {\n letterSpacing = thisSpacing.getPixels()\n }\n }\n\n // fill letter-spacing cache\n const letterSpacingCache: number[] = []\n const textLen = renderText.length\n\n this.letterSpacingCache = letterSpacingCache\n\n for (let i = 0; i < textLen; i++) {\n letterSpacingCache.push(\n typeof dx[i] !== 'undefined'\n ? dx[i]\n : letterSpacing\n )\n }\n\n const dxSum = letterSpacingCache.reduce(\n (acc, cur, i) => (\n i === 0\n ? 0\n : acc + cur || 0\n ),\n 0\n )\n const textWidth = this.measureText(ctx)\n const textFullWidth = Math.max(textWidth + dxSum, 0)\n\n this.textWidth = textWidth\n this.textHeight = this.getFontSize()\n this.glyphInfo = []\n\n const fullPathWidth = this.getPathLength()\n const startOffset = this.getStyle('startOffset').getNumber(0) * fullPathWidth\n let offset = 0\n\n if (anchor === 'middle'\n || anchor === 'center'\n ) {\n offset = -textFullWidth / 2\n }\n\n if (anchor === 'end'\n || anchor === 'right'\n ) {\n offset = -textFullWidth\n }\n\n offset += startOffset\n\n chars.forEach((char, i) => {\n // Find such segment what distance between p0 and p1 is approx. width of glyph\n const {\n offset: nextOffset,\n segment,\n rotation\n } = this.findSegmentToFitChar(\n ctx,\n anchor,\n textFullWidth,\n fullPathWidth,\n spacesNumber,\n offset,\n dy,\n char,\n i\n )\n\n offset = nextOffset\n\n if (!segment.p0 || !segment.p1) {\n return\n }\n\n // const width = this.getLineLength(\n // segment.p0.x,\n // segment.p0.y,\n // segment.p1.x,\n // segment.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 // kern + width / 2.0,\n // segment.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\n protected parsePathData(path: PathElement) {\n this.pathLength = -1 // reset path length\n\n if (!path) {\n return []\n }\n\n const pathCommands: IPathCommand[] = []\n const { pathParser } = path\n\n pathParser.reset()\n\n // convert l, H, h, V, and v to L\n while (!pathParser.isEnd()) {\n const { current } = pathParser\n const startX = current ? current.x : 0\n const startY = current ? current.y : 0\n const command = pathParser.next()\n let nextCommandType: CommandType = command.type\n let points: number[] = []\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 default:\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 protected pathM(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathM(pathParser).point\n\n points.push(x, y)\n }\n\n protected pathL(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathL(pathParser).point\n\n points.push(x, y)\n\n return PathParser.LINE_TO\n }\n\n protected pathH(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathH(pathParser).point\n\n points.push(x, y)\n\n return PathParser.LINE_TO\n }\n\n protected pathV(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathV(pathParser).point\n\n points.push(x, y)\n\n return PathParser.LINE_TO\n }\n\n protected pathC(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser)\n\n points.push(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n\n protected pathS(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser)\n\n points.push(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n return PathParser.CURVE_TO\n }\n\n protected pathQ(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser)\n\n points.push(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n\n protected pathT(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser)\n\n points.push(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n return PathParser.QUAD_TO\n }\n\n protected pathA(\n pathParser: PathParser\n ) {\n let {\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 [\n centp.x,\n centp.y,\n rX,\n rY,\n a1,\n ad,\n xAxisRotation,\n sweepFlag\n ]\n }\n\n protected calcLength(\n x: number,\n y: number,\n commandType: CommandType,\n points: number[]\n ) {\n let len = 0\n let p1: IPoint = null\n let p2: IPoint = null\n let 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(\n 0,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3],\n points[4],\n points[5]\n )\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnCubicBezier(\n t,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3],\n points[4],\n points[5]\n )\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(\n 0,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3]\n )\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnQuadraticBezier(\n t,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3]\n )\n len += this.getLineLength(\n p1.x,\n p1.y,\n p2.x,\n p2.y\n )\n p1 = p2\n }\n\n return len\n\n case PathParser.ARC: {\n // Approximates by breaking curve into line segments\n len = 0.0\n\n const start = points[4]\n // 4 = theta\n const dTheta = points[5]\n // 5 = dTheta\n const end = points[4] + dTheta\n let inc = Math.PI / 180.0\n\n // 1 degree resolution\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end)\n }\n\n // Note: for purpose of calculating arc length, not going to worry about rotating X-axis by angle psi\n p1 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n start,\n 0\n )\n\n if (dTheta < 0) { // clockwise\n for (t = start - inc; t > end; t -= inc) {\n p2 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n t,\n 0\n )\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y)\n p1 = p2\n }\n } else { // counter-clockwise\n for (t = start + inc; t < end; t += inc) {\n p2 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n t,\n 0\n )\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y)\n p1 = p2\n }\n }\n\n p2 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n end,\n 0\n )\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y)\n\n return len\n }\n\n default:\n }\n\n return 0\n }\n\n protected getPointOnLine(\n dist: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n fromX = p1x,\n fromY = p1y\n ) {\n const m = (p2y - p1y) / ((p2x - p1x) + PSEUDO_ZERO)\n let run = Math.sqrt(dist * dist / (1 + m * m))\n\n if (p2x < p1x) {\n run *= -1\n }\n\n let rise = m * run\n let pt: IPoint = null\n\n if (p2x === p1x) { // vertical line\n pt = {\n x: fromX,\n y: fromY + rise\n }\n } else\n if ((fromY - p1y) / ((fromX - p1x) + PSEUDO_ZERO) === m) {\n pt = {\n x: fromX + run,\n y: fromY + rise\n }\n } else {\n let ix = 0\n let iy = 0\n const len = this.getLineLength(p1x, p1y, p2x, p2y)\n\n if (len < PSEUDO_ZERO) {\n return null\n }\n\n let u =\n ((fromX - p1x) * (p2x - p1x))\n + ((fromY - p1y) * (p2y - p1y))\n\n u /= len * len\n ix = p1x + u * (p2x - p1x)\n iy = p1y + u * (p2y - p1y)\n\n const pRise = this.getLineLength(fromX, fromY, ix, iy)\n const pRun = Math.sqrt(dist * dist - pRise * pRise)\n\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 protected getPointOnPath(distance: number) {\n const fullLen = this.getPathLength()\n let cumulativePathLength = 0\n let p: IPoint = null\n\n if (distance < -0.00005\n || distance - 0.00005 > fullLen\n ) {\n return null\n }\n\n const { dataArray } = this\n\n for (const command of dataArray) {\n if (command\n && (\n command.pathLength < 0.00005\n || cumulativePathLength + command.pathLength + 0.00005 < distance\n )\n ) {\n cumulativePathLength += command.pathLength\n continue\n }\n\n const delta = distance - cumulativePathLength\n let currentT = 0\n\n switch (command.type) {\n case PathParser.LINE_TO:\n p = this.getPointOnLine(\n delta,\n command.start.x,\n command.start.y,\n command.points[0],\n command.points[1],\n command.start.x,\n command.start.y\n )\n break\n\n case PathParser.ARC: {\n const start = command.points[4]\n // 4 = theta\n const dTheta = command.points[5]\n // 5 = dTheta\n const end = command.points[4] + dTheta\n\n currentT = start + delta / command.pathLength * dTheta\n\n if (dTheta < 0 && currentT < end\n || dTheta >= 0 && currentT > end\n ) {\n break\n }\n\n p = this.getPointOnEllipticalArc(\n command.points[0],\n command.points[1],\n command.points[2],\n command.points[3],\n currentT,\n command.points[6]\n )\n break\n }\n\n case PathParser.CURVE_TO:\n\n currentT = delta / command.pathLength\n\n if (currentT > 1) {\n currentT = 1\n }\n\n p = this.getPointOnCubicBezier(\n currentT,\n command.start.x,\n command.start.y,\n command.points[0],\n command.points[1],\n command.points[2],\n command.points[3],\n command.points[4],\n command.points[5]\n )\n break\n\n case PathParser.QUAD_TO:\n\n currentT = delta / command.pathLength\n\n if (currentT > 1) {\n currentT = 1\n }\n\n p = this.getPointOnQuadraticBezier(\n currentT,\n command.start.x,\n command.start.y,\n command.points[0],\n command.points[1],\n command.points[2],\n command.points[3]\n )\n break\n\n default:\n }\n\n if (p) {\n return p\n }\n\n break\n }\n\n return null\n }\n\n protected getLineLength(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n ) {\n return Math.sqrt(\n (x2 - x1) * (x2 - x1)\n + (y2 - y1) * (y2 - y1)\n )\n }\n\n protected getPathLength() {\n if (this.pathLength === -1) {\n this.pathLength = this.dataArray.reduce<number>(\n (length, command: IPathCommand) => (\n command.pathLength > 0\n ? length + command.pathLength\n : length\n ),\n 0\n )\n }\n\n return this.pathLength\n }\n\n protected getPointOnCubicBezier(\n pct: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number\n ): IPoint {\n const x = p4x * CB1(pct) + p3x * CB2(pct) + p2x * CB3(pct) + p1x * CB4(pct)\n const y = p4y * CB1(pct) + p3y * CB2(pct) + p2y * CB3(pct) + p1y * CB4(pct)\n\n return {\n x,\n y\n }\n }\n\n protected getPointOnQuadraticBezier(\n pct: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number\n ): IPoint {\n const x = p3x * QB1(pct) + p2x * QB2(pct) + p1x * QB3(pct)\n const y = p3y * QB1(pct) + p2y * QB2(pct) + p1y * QB3(pct)\n\n return {\n x,\n y\n }\n }\n\n protected getPointOnEllipticalArc(\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n theta: number,\n psi: number\n ): IPoint {\n const cosPsi = Math.cos(psi)\n const sinPsi = Math.sin(psi)\n const pt = {\n x: rx * Math.cos(theta),\n y: ry * Math.sin(theta)\n }\n\n return {\n x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n y: cy + (pt.x * sinPsi + pt.y * cosPsi)\n }\n }\n\n // TODO need some optimisations. possibly build cache only for curved segments?\n protected buildEquidistantCache(\n inputStep: number,\n inputPrecision: number\n ) {\n const fullLen = this.getPathLength()\n const precision = inputPrecision || 0.25 // accuracy vs performance\n const step = inputStep || fullLen / 100\n\n if (!this.equidistantCache\n || this.equidistantCache.step !== step\n || this.equidistantCache.precision !== precision\n ) {\n // Prepare cache\n this.equidistantCache = {\n step,\n precision,\n points: []\n }\n\n // Calculate points\n let s = 0\n\n for (let l = 0; l <= fullLen; l += precision) {\n const p0 = this.getPointOnPath(l)\n const 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 protected getEquidistantPointOnPath(\n targetDistance: number,\n step?: number,\n precision?: number\n ) {\n this.buildEquidistantCache(step, precision)\n\n if (targetDistance < 0\n || targetDistance - this.getPathLength() > 0.00005\n ) {\n return null\n }\n\n const idx = Math.round(\n targetDistance\n / this.getPathLength()\n * (this.equidistantCache.points.length - 1)\n )\n\n return this.equidistantCache.points[idx] || null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { RenderedElement } from './RenderedElement'\n\n// groups: 1: mime-type (+ charset), 2: mime-type (w/o charset), 3: charset, 4: base64?, 5: body\nconst dataUriRegex = /^\\s*data:(([^/,;]+\\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i\n\nexport class ImageElement extends RenderedElement {\n override type = 'image'\n loaded = false\n protected image: CanvasImageSource | string | undefined\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const href = this.getHrefAttribute().getString()\n\n if (!href) {\n return\n }\n\n const isSvg = href.endsWith('.svg') || /^\\s*data:image\\/svg\\+xml/i.test(href)\n\n document.images.push(this)\n\n if (!isSvg) {\n void this.loadImage(href)\n } else {\n void this.loadSvg(href)\n }\n }\n\n protected async loadImage(href: string) {\n try {\n const image = await this.document.createImage(href)\n\n this.image = image\n } catch (err) {\n console.error(`Error while loading image \"${href}\":`, err)\n }\n\n this.loaded = true\n }\n\n protected async loadSvg(href: string) {\n const match = dataUriRegex.exec(href)\n\n if (match) {\n const data = match[5]\n\n if (data) {\n if (match[4] === 'base64') {\n this.image = atob(data)\n } else {\n this.image = decodeURIComponent(data)\n }\n }\n } else {\n try {\n const response = await this.document.fetch(href)\n const svg = await response.text()\n\n this.image = svg\n } catch (err) {\n console.error(`Error while loading image \"${href}\":`, err)\n }\n }\n\n this.loaded = true\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n const {\n document,\n image,\n loaded\n } = this\n const x = this.getAttribute('x').getPixels('x')\n const y = this.getAttribute('y').getPixels('y')\n const width = this.getStyle('width').getPixels('x')\n const height = this.getStyle('height').getPixels('y')\n\n if (!loaded || !image\n || !width || !height\n ) {\n return\n }\n\n ctx.save()\n ctx.translate(x, y)\n\n if (typeof image === 'string') {\n const subDocument = document.canvg.forkString(\n ctx,\n image,\n {\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 )\n const { documentElement } = subDocument.document\n\n if (documentElement) {\n documentElement.parent = this\n }\n\n void subDocument.render()\n } else {\n document.setViewBox({\n ctx,\n aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n width,\n desiredWidth: image.width as number,\n height,\n desiredHeight: image.height as number\n })\n\n if (this.loaded) {\n if (!('complete' in image) || image.complete) {\n ctx.drawImage(image, 0, 0)\n }\n }\n }\n\n ctx.restore()\n }\n\n getBoundingBox() {\n const x = this.getAttribute('x').getPixels('x')\n const y = this.getAttribute('y').getPixels('y')\n const width = this.getStyle('width').getPixels('x')\n const height = this.getStyle('height').getPixels('y')\n\n return new BoundingBox(x, y, x + width, y + height)\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { RenderedElement } from './RenderedElement'\n\nexport class SymbolElement extends RenderedElement {\n override type = 'symbol'\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { Document } from './Document'\n\nexport class SVGFontLoader {\n loaded = false\n\n constructor(\n private readonly document: Document\n ) {\n document.fonts.push(this)\n }\n\n async load(fontFamily: string, url: string) {\n try {\n const { document } = this\n const svgDocument = await document.canvg.parser.load(url)\n const fonts = svgDocument.getElementsByTagName('font')\n\n Array.from(fonts).forEach((fontNode: HTMLElement) => {\n const font = document.createElement(fontNode)\n\n document.definitions.set(fontFamily, font)\n })\n } catch (err) {\n console.error(`Error while loading font \"${url}\":`, err)\n }\n\n this.loaded = true\n }\n}\n","import {\n compressSpaces,\n getSelectorSpecificity,\n parseExternalUrl\n} from '../util'\nimport { Property } from '../Property'\nimport { SVGFontLoader } from '../SVGFontLoader'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport class StyleElement extends Element {\n static readonly parseExternalUrl = parseExternalUrl\n\n override type = 'style'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const css = compressSpaces(\n Array.from(node.childNodes)\n // NEED TEST\n .map(_ => _.textContent)\n .join('')\n .replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, '') // remove comments\n .replace(/@import.*;/g, '') // remove imports\n )\n const cssDefs = css.split('}')\n\n cssDefs.forEach((_) => {\n const def = _.trim()\n\n if (!def) {\n return\n }\n\n const cssParts = def.split('{')\n const cssClasses = cssParts[0].split(',')\n const cssProps = cssParts[1].split(';')\n\n cssClasses.forEach((_) => {\n const cssClass = _.trim()\n\n if (!cssClass) {\n return\n }\n\n const props = document.styles.get(cssClass) || new Map<string, Property>()\n\n cssProps.forEach((cssProp) => {\n const prop = cssProp.indexOf(':')\n const name = cssProp.substr(0, prop).trim()\n const value = cssProp.substr(prop + 1, cssProp.length - prop).trim()\n\n if (name && value) {\n props.set(name, new Property(document, name, value))\n }\n })\n\n document.styles.set(cssClass, props)\n document.stylesSpecificity.set(cssClass, getSelectorSpecificity(cssClass))\n\n if (cssClass === '@font-face') { // && !nodeEnv\n const fontFamily = props.get('font-family').getString().replace(/\"|'/g, '')\n const srcs = props.get('src').getString().split(',')\n\n srcs.forEach((src) => {\n if (src.indexOf('format(\"svg\")') > 0) {\n const url = parseExternalUrl(src)\n\n if (url) {\n void new SVGFontLoader(document).load(fontFamily, url)\n }\n }\n })\n }\n })\n })\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Property } from '../Property'\nimport { Transform } from '../Transform'\nimport { RenderedElement } from './RenderedElement'\nimport { PathElement } from './PathElement'\nimport { SVGElement } from './SVGElement'\n\nexport class UseElement extends RenderedElement {\n override type = 'use'\n private cachedElement: PathElement | undefined\n\n override setContext(ctx: RenderingContext2D) {\n super.setContext(ctx)\n\n const xAttr = this.getAttribute('x')\n const 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: RenderingContext2D) {\n const { element } = this\n\n if (element) {\n element.path(ctx)\n }\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n const {\n document,\n element\n } = this\n\n if (element) {\n let tempSvg: RenderedElement = 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)\n tempSvg.attributes.set('viewBox', new Property(\n document,\n 'viewBox',\n element.getAttribute('viewBox').getString()\n ))\n tempSvg.attributes.set('preserveAspectRatio', new Property(\n document,\n 'preserveAspectRatio',\n element.getAttribute('preserveAspectRatio').getString()\n ))\n tempSvg.attributes.set('overflow', new Property(\n document,\n 'overflow',\n element.getAttribute('overflow').getString()\n ))\n tempSvg.children = element.children\n\n // element is still the parent of the children\n element.styles.set('opacity', new Property(\n document,\n 'opacity',\n this.calculateOpacity()\n ))\n }\n\n if (tempSvg.type === 'svg') {\n const widthStyle = this.getStyle('width', false, true)\n const heightStyle = this.getStyle('height', false, true)\n\n // if symbol or svg, inherit width/height from me\n if (widthStyle.hasValue()) {\n tempSvg.attributes.set('width', new Property(\n document,\n 'width',\n widthStyle.getString()\n ))\n }\n\n if (heightStyle.hasValue()) {\n tempSvg.attributes.set('height', new Property(\n document,\n 'height',\n heightStyle.getString()\n ))\n }\n }\n\n const oldParent = tempSvg.parent\n\n tempSvg.parent = this\n tempSvg.render(ctx)\n tempSvg.parent = oldParent\n }\n }\n\n getBoundingBox(ctx: CanvasRenderingContext2D) {\n const { element } = this\n\n if (element) {\n return element.getBoundingBox(ctx)\n }\n\n return null\n }\n\n elementTransform() {\n const {\n document,\n element\n } = this\n\n if (!element) {\n return null\n }\n\n return Transform.fromElement(document, element)\n }\n\n protected get element() {\n if (!this.cachedElement) {\n this.cachedElement = this.getHrefAttribute().getDefinition()\n }\n\n return this.cachedElement\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { toNumbers } from '../util'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nfunction imGet(\n img: Uint8ClampedArray,\n x: number,\n y: number,\n width: number,\n _height: number,\n rgba: number\n) {\n return img[y * width * 4 + x * 4 + rgba]\n}\n\nfunction imSet(\n img: Uint8ClampedArray,\n x: number,\n y: number,\n width: number,\n _height: number,\n rgba: number,\n val: number\n) {\n img[y * width * 4 + x * 4 + rgba] = val\n}\n\nfunction m(\n matrix: number[],\n i: number,\n v: number\n) {\n const mi = matrix[i]\n\n return mi * v\n}\n\nfunction c(\n a: number,\n m1: number,\n m2: number,\n m3: number\n) {\n return m1 + Math.cos(a) * m2 + Math.sin(a) * m3\n}\n\nexport class FeColorMatrixElement extends Element {\n override type = 'feColorMatrix'\n protected readonly matrix: number[]\n protected readonly includeOpacity: boolean\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n let matrix = toNumbers(this.getAttribute('values').getString())\n\n switch (this.getAttribute('type').getString('matrix')) { // http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement\n case 'saturate': {\n const s = matrix[0]\n\n /* eslint-disable array-element-newline */\n matrix = [\n 0.213 + 0.787 * s, 0.715 - 0.715 * s, 0.072 - 0.072 * s, 0, 0,\n 0.213 - 0.213 * s, 0.715 + 0.285 * s, 0.072 - 0.072 * s, 0, 0,\n 0.213 - 0.213 * s, 0.715 - 0.715 * s, 0.072 + 0.928 * s, 0, 0,\n 0, 0, 0, 1, 0,\n 0, 0, 0, 0, 1\n ]\n /* eslint-enable array-element-newline */\n break\n }\n\n case 'hueRotate': {\n const a = matrix[0] * Math.PI / 180.0\n\n /* eslint-disable array-element-newline */\n matrix = [\n 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,\n 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,\n 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,\n 0, 0, 0, 1, 0,\n 0, 0, 0, 0, 1\n ]\n /* eslint-enable array-element-newline */\n break\n }\n\n case 'luminanceToAlpha':\n /* eslint-disable array-element-newline */\n matrix = [\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0.2125, 0.7154, 0.0721, 0, 0,\n 0, 0, 0, 0, 1\n ]\n /* eslint-enable array-element-newline */\n break\n\n default:\n }\n\n this.matrix = matrix\n this.includeOpacity = this.getAttribute('includeOpacity').hasValue()\n }\n\n apply(\n ctx: RenderingContext2D,\n _x: number,\n _y: number,\n width: number,\n height: number\n ) {\n // assuming x==0 && y==0 for now\n const {\n includeOpacity,\n matrix\n } = this\n const srcData = ctx.getImageData(0, 0, width, height)\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const r = imGet(srcData.data, x, y, width, height, 0)\n const g = imGet(srcData.data, x, y, width, height, 1)\n const b = imGet(srcData.data, x, y, width, height, 2)\n const a = imGet(srcData.data, x, y, width, height, 3)\n let nr = m(matrix, 0, r) + m(matrix, 1, g) + m(matrix, 2, b) + m(matrix, 3, a) + m(matrix, 4, 1)\n let ng = m(matrix, 5, r) + m(matrix, 6, g) + m(matrix, 7, b) + m(matrix, 8, a) + m(matrix, 9, 1)\n let nb = m(matrix, 10, r) + m(matrix, 11, g) + m(matrix, 12, b) + m(matrix, 13, a) + m(matrix, 14, 1)\n let 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","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { Element } from './Element'\nimport { PathElement } from './PathElement'\nimport { FeColorMatrixElement } from './FeColorMatrixElement'\n\nexport class MaskElement extends Element {\n static ignoreStyles = [\n 'mask',\n 'transform',\n 'clip-path'\n ]\n\n override type = 'mask'\n\n apply(ctx: RenderingContext2D, element: Element) {\n const { document } = this\n // render as temp svg\n let x = this.getAttribute('x').getPixels('x')\n let y = this.getAttribute('y').getPixels('y')\n let width = this.getStyle('width').getPixels('x')\n let height = this.getStyle('height').getPixels('y')\n\n if (!width && !height) {\n const boundingBox = new BoundingBox()\n\n this.children.forEach((child: PathElement) => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx))\n })\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 const ignoredStyles = this.removeStyles(element, MaskElement.ignoreStyles)\n const maskCanvas = document.createCanvas(x + width, y + height)\n const maskCtx = maskCanvas.getContext('2d')\n\n document.screen.setDefaults(maskCtx)\n this.renderChildren(maskCtx)\n\n // convert mask to alpha with a fake node\n // TODO: refactor out apply from feColorMatrix\n new FeColorMatrixElement(\n document,\n ({\n nodeType: 1,\n childNodes: [],\n attributes: [\n {\n nodeName: 'type',\n value: 'luminanceToAlpha'\n },\n {\n nodeName: 'includeOpacity',\n value: 'true'\n }\n ]\n }) as unknown as HTMLElement\n ).apply(maskCtx, 0, 0, x + width, y + height)\n\n const tmpCanvas = document.createCanvas(x + width, y + height)\n const tmpCtx = tmpCanvas.getContext('2d')\n\n document.screen.setDefaults(tmpCtx)\n element.render(tmpCtx)\n\n tmpCtx.globalCompositeOperation = 'destination-in'\n tmpCtx.fillStyle = maskCtx.createPattern(maskCanvas as CanvasImageSource, 'no-repeat')\n tmpCtx.fillRect(0, 0, x + width, y + height)\n\n ctx.fillStyle = tmpCtx.createPattern(tmpCanvas as CanvasImageSource, 'no-repeat')\n ctx.fillRect(0, 0, x + width, y + height)\n\n // reassign mask\n this.restoreStyles(element, ignoredStyles)\n }\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Transform } from '../Transform'\nimport { Element } from './Element'\nimport { UseElement } from './UseElement'\n\nconst noop = () => {\n // NOOP\n}\n\nexport class ClipPathElement extends Element {\n override type = 'clipPath'\n\n apply(ctx: RenderingContext2D) {\n const { document } = this\n const contextProto = Reflect.getPrototypeOf(ctx) as RenderingContext2D | null\n const {\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\n this.children.forEach((child: Element | UseElement) => {\n if (!('path' in child)) {\n return\n }\n\n let transform = 'elementTransform' in child\n ? child.elementTransform()\n : 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\n Reflect.apply(closePath, ctx, [])\n ctx.clip()\n\n if (contextProto) {\n contextProto.beginPath = beginPath\n contextProto.closePath = closePath\n }\n }\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Element } from './Element'\nimport { PathElement } from './PathElement'\nimport { FeGaussianBlurElement } from './FeGaussianBlurElement'\n\nexport class FilterElement extends Element {\n static ignoreStyles = [\n 'filter',\n 'transform',\n 'clip-path'\n ]\n\n override type = 'filter'\n\n apply(ctx: RenderingContext2D, element: Element | PathElement) {\n // render as temp svg\n const {\n document,\n children\n } = this\n const boundingBox = 'getBoundingBox' in element\n ? element.getBoundingBox(ctx)\n : null\n\n if (!boundingBox) {\n return\n }\n\n let px = 0\n let py = 0\n\n children.forEach((child: FeGaussianBlurElement) => {\n const efd = child.extraFilterDistance || 0\n\n px = Math.max(px, efd)\n py = Math.max(py, efd)\n })\n\n const width = Math.floor(boundingBox.width)\n const height = Math.floor(boundingBox.height)\n const tmpCanvasWidth = width + 2 * px\n const tmpCanvasHeight = height + 2 * py\n\n if (tmpCanvasWidth < 1 || tmpCanvasHeight < 1) {\n return\n }\n\n const x = Math.floor(boundingBox.x)\n const y = Math.floor(boundingBox.y)\n const ignoredStyles = this.removeStyles(element, FilterElement.ignoreStyles)\n const tmpCanvas = document.createCanvas(tmpCanvasWidth, tmpCanvasHeight)\n const tmpCtx = tmpCanvas.getContext('2d')\n\n document.screen.setDefaults(tmpCtx)\n tmpCtx.translate(-x + px, -y + py)\n element.render(tmpCtx)\n\n // apply filters\n children.forEach((child: FeGaussianBlurElement) => {\n if (typeof child.apply === 'function') {\n child.apply(\n tmpCtx,\n 0,\n 0,\n tmpCanvasWidth,\n tmpCanvasHeight\n )\n }\n })\n\n // render on me\n ctx.drawImage(\n tmpCanvas,\n 0,\n 0,\n tmpCanvasWidth,\n tmpCanvasHeight,\n x - px,\n y - py,\n tmpCanvasWidth,\n tmpCanvasHeight\n )\n\n this.restoreStyles(element, ignoredStyles)\n }\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport class FeDropShadowElement extends Element {\n override type = 'feDropShadow'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.addStylesFromStyleDefinition()\n }\n\n apply(\n _: RenderingContext2D,\n _x: number,\n _y: number,\n _width: number,\n _height: number\n ) {\n // TODO: implement\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Element } from './Element'\n\nexport class FeMorphologyElement extends Element {\n override type = 'feMorphology'\n\n apply(\n _: RenderingContext2D,\n _x: number,\n _y: number,\n _width: number,\n _height: number\n ) {\n // TODO: implement\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Element } from './Element'\n\nexport class FeCompositeElement extends Element {\n override type = 'feComposite'\n\n apply(\n _: RenderingContext2D,\n _x: number,\n _y: number,\n _width: number,\n _height: number\n ) {\n // TODO: implement\n }\n}\n","import { canvasRGBA } from 'stackblur-canvas'\nimport { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport class FeGaussianBlurElement extends Element {\n override type = 'feGaussianBlur'\n readonly extraFilterDistance: number\n protected readonly blurRadius: number\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.blurRadius = Math.floor(this.getAttribute('stdDeviation').getNumber())\n this.extraFilterDistance = this.blurRadius\n }\n\n apply(\n ctx: RenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n const {\n document,\n blurRadius\n } = this\n const body = document.window\n ? document.window.document.body\n : null\n const canvas = ctx.canvas as HTMLCanvasElement\n\n // StackBlur requires canvas be on document\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","import { Element } from './Element'\n\nexport class TitleElement extends Element {\n override type = 'title'\n}\n","import { Element } from './Element'\n\nexport class DescElement extends Element {\n override type = 'desc'\n}\n","import { Element } from './Element'\nimport { UnknownElement } from './UnknownElement'\nimport { RenderedElement } from './RenderedElement'\nimport { PathElement } from './PathElement'\nimport { SVGElement } from './SVGElement'\nimport { RectElement } from './RectElement'\nimport { CircleElement } from './CircleElement'\nimport { EllipseElement } from './EllipseElement'\nimport { LineElement } from './LineElement'\nimport { PolylineElement } from './PolylineElement'\nimport { PolygonElement } from './PolygonElement'\nimport { PatternElement } from './PatternElement'\nimport { MarkerElement } from './MarkerElement'\nimport { DefsElement } from './DefsElement'\nimport { GradientElement } from './GradientElement'\nimport { LinearGradientElement } from './LinearGradientElement'\nimport { RadialGradientElement } from './RadialGradientElement'\nimport { StopElement } from './StopElement'\nimport { AnimateElement } from './AnimateElement'\nimport { AnimateColorElement } from './AnimateColorElement'\nimport { AnimateTransformElement } from './AnimateTransformElement'\nimport { FontElement } from './FontElement'\nimport { FontFaceElement } from './FontFaceElement'\nimport { MissingGlyphElement } from './MissingGlyphElement'\nimport { GlyphElement } from './GlyphElement'\nimport { TextElement } from './TextElement'\nimport { TSpanElement } from './TSpanElement'\nimport { TRefElement } from './TRefElement'\nimport { AElement } from './AElement'\nimport { TextPathElement } from './TextPathElement'\nimport { ImageElement } from './ImageElement'\nimport { GElement } from './GElement'\nimport { SymbolElement } from './SymbolElement'\nimport { StyleElement } from './StyleElement'\nimport { UseElement } from './UseElement'\nimport { MaskElement } from './MaskElement'\nimport { ClipPathElement } from './ClipPathElement'\nimport { FilterElement } from './FilterElement'\nimport { FeDropShadowElement } from './FeDropShadowElement'\nimport { FeMorphologyElement } from './FeMorphologyElement'\nimport { FeCompositeElement } from './FeCompositeElement'\nimport { FeColorMatrixElement } from './FeColorMatrixElement'\nimport { FeGaussianBlurElement } from './FeGaussianBlurElement'\nimport { TitleElement } from './TitleElement'\nimport { DescElement } from './DescElement'\n\nexport const 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\ntype Elements = typeof elements\n\nexport type AnyElement = Elements[keyof Elements]\n\nexport {\n Element,\n UnknownElement,\n RenderedElement,\n PathElement,\n SVGElement,\n RectElement,\n CircleElement,\n EllipseElement,\n LineElement,\n PolylineElement,\n PolygonElement,\n PatternElement,\n MarkerElement,\n DefsElement,\n GradientElement,\n LinearGradientElement,\n RadialGradientElement,\n StopElement,\n AnimateElement,\n AnimateColorElement,\n AnimateTransformElement,\n FontElement,\n FontFaceElement,\n MissingGlyphElement,\n GlyphElement,\n TextElement,\n TSpanElement,\n TRefElement,\n AElement,\n TextPathElement,\n ImageElement,\n GElement,\n SymbolElement,\n StyleElement,\n UseElement,\n MaskElement,\n ClipPathElement,\n FilterElement,\n FeDropShadowElement,\n FeMorphologyElement,\n FeCompositeElement,\n FeColorMatrixElement,\n FeGaussianBlurElement,\n TitleElement,\n DescElement\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { Canvg } from '../Canvg'\nimport { IScreenViewBoxConfig, Screen } from '../Screen'\nimport { Property } from '../Property'\nimport { SVGFontLoader } from '../SVGFontLoader'\nimport { Element } from './Element'\nimport { UnknownElement } from './UnknownElement'\nimport { TextNode } from './TextNode'\nimport { ImageElement } from './ImageElement'\nimport { SVGElement } from './SVGElement'\nimport {\n AnyElement,\n elements as elementTypes\n} from './elements'\n\n/**\n * Function to create new canvas.\n */\nexport type CreateCanvas = (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas & {\n getContext(contextId: '2d'): OffscreenCanvasRenderingContext2D\n}\n\n/**\n * Function to create new image.\n */\nexport type CreateImage = (src: string, anonymousCrossOrigin?: boolean) => Promise<CanvasImageSource>\n\nexport interface IDocumentOptions {\n /**\n * Default `rem` size.\n */\n rootEmSize?: number\n /**\n * Default `em` size.\n */\n emSize?: number\n /**\n * Function to create new canvas.\n */\n createCanvas?: CreateCanvas\n /**\n * Function to create new image.\n */\n createImage?: CreateImage\n /**\n * Load images anonymously.\n */\n anonymousCrossOrigin?: boolean\n}\n\nexport type IViewBoxConfig = Omit<IScreenViewBoxConfig, 'document'>\n\ntype DOMDocument = typeof window.document\n\nfunction createCanvas(width: number, height: number) {\n const canvas = document.createElement('canvas')\n\n canvas.width = width\n canvas.height = height\n\n return canvas\n}\n\nasync function createImage(src: string, anonymousCrossOrigin = false) {\n const image = document.createElement('img')\n\n if (anonymousCrossOrigin) {\n image.crossOrigin = 'Anonymous'\n }\n\n return new Promise<HTMLImageElement>((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\nconst DEFAULT_EM_SIZE = 12\n\nexport class Document {\n static readonly createCanvas = createCanvas\n static readonly createImage = createImage\n static readonly elementTypes: Record<string, AnyElement> = elementTypes\n\n rootEmSize: number\n documentElement?: SVGElement\n readonly screen: Screen\n readonly createCanvas: CreateCanvas\n readonly createImage: CreateImage\n readonly definitions: Map<string, Element> = new Map()\n readonly styles: Map<string, Map<string, Property>> = new Map()\n readonly stylesSpecificity: Map<string, string> = new Map()\n readonly images: ImageElement[] = []\n readonly fonts: SVGFontLoader[] = []\n private readonly emSizeStack: number[] = []\n private uniqueId = 0\n\n constructor(\n readonly canvg: Canvg,\n {\n rootEmSize = DEFAULT_EM_SIZE,\n emSize = DEFAULT_EM_SIZE,\n createCanvas = Document.createCanvas,\n createImage = Document.createImage,\n anonymousCrossOrigin\n }: IDocumentOptions = {}\n ) {\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\n this.screen.wait(() => this.isImagesLoaded())\n this.screen.wait(() => this.isFontsLoaded())\n }\n\n private bindCreateImage(createImage: CreateImage, anonymousCrossOrigin?: boolean) {\n if (typeof anonymousCrossOrigin === 'boolean') {\n return (source: string, forceAnonymousCrossOrigin?: boolean) => createImage(\n source,\n typeof forceAnonymousCrossOrigin === 'boolean'\n ? forceAnonymousCrossOrigin\n : anonymousCrossOrigin\n )\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 const { emSizeStack } = this\n\n return emSizeStack[emSizeStack.length - 1] || DEFAULT_EM_SIZE\n }\n\n set emSize(value: number) {\n const { emSizeStack } = this\n\n emSizeStack.push(value)\n }\n\n popEmSize() {\n const { emSizeStack } = this\n\n emSizeStack.pop()\n }\n\n getUniqueId() {\n return `canvg${++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: DOMDocument) {\n const documentElement = this.createElement<SVGElement>(document.documentElement)\n\n documentElement.root = true\n documentElement.addStylesFromStyleDefinition()\n\n this.documentElement = documentElement\n\n return documentElement\n }\n\n createElement<T extends Element>(node: HTMLElement) {\n const elementType = node.nodeName.replace(/^[^:]+:/, '')\n const ElementType = Document.elementTypes[elementType]\n\n if (ElementType) {\n return new ElementType(this, node) as T\n }\n\n return new UnknownElement(this, node) as T\n }\n\n createTextNode(node: HTMLElement) {\n return new TextNode(this, node)\n }\n\n setViewBox(config: IViewBoxConfig) {\n this.screen.setViewBox({\n document: this,\n ...config\n })\n }\n}\n","import { RenderingContext2D } from './types'\nimport { IParserOptions, Parser } from './Parser'\nimport {\n IScreenOptions,\n IScreenStartOptions,\n Screen\n} from './Screen'\nimport {\n IDocumentOptions,\n Document,\n SVGElement\n} from './Document'\n\ntype DOMDocument = typeof window.document\n\nexport interface IOptions extends IParserOptions,\n IScreenOptions,\n IScreenStartOptions,\n IDocumentOptions {}\n\n/**\n * SVG renderer on canvas.\n */\nexport class Canvg {\n /**\n * Create Canvg instance from SVG source string or URL.\n * @param ctx - Rendering context.\n * @param svg - SVG source string or URL.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n static async from(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n const parser = new Parser(options)\n const svgDocument = await parser.parse(svg)\n\n return new Canvg(ctx, svgDocument, options)\n }\n\n /**\n * Create Canvg instance from SVG source string.\n * @param ctx - Rendering context.\n * @param svg - SVG source string.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n static fromString(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n const parser = new Parser(options)\n const svgDocument = parser.parseFromString(svg)\n\n return new Canvg(ctx, svgDocument, options)\n }\n\n /**\n * XML/HTML parser instance.\n */\n readonly parser: Parser\n /**\n * Screen instance.\n */\n readonly screen: Screen\n /**\n * Canvg Document.\n */\n readonly document: Document\n private readonly documentElement: SVGElement\n private readonly options: IOptions\n\n /**\n * Main constructor.\n * @param ctx - Rendering context.\n * @param svg - SVG Document.\n * @param options - Rendering options.\n */\n constructor(\n ctx: RenderingContext2D,\n svg: DOMDocument,\n options: IOptions = {}\n ) {\n this.parser = new Parser(options)\n this.screen = new Screen(ctx, options)\n this.options = options\n\n const document = new Document(this, options)\n const documentElement = document.createDocumentElement(svg)\n\n this.document = document\n this.documentElement = documentElement\n }\n\n /**\n * Create new Canvg instance with inherited options.\n * @param ctx - Rendering context.\n * @param svg - SVG source string or URL.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n fork(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n return Canvg.from(ctx, svg, {\n ...this.options,\n ...options\n })\n }\n\n /**\n * Create new Canvg instance with inherited options.\n * @param ctx - Rendering context.\n * @param svg - SVG source string.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n forkString(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n return Canvg.fromString(ctx, svg, {\n ...this.options,\n ...options\n })\n }\n\n /**\n * Document is ready promise.\n * @returns Ready promise.\n */\n ready() {\n return this.screen.ready()\n }\n\n /**\n * Document is ready value.\n * @returns Is ready or not.\n */\n isReady() {\n return this.screen.isReady()\n }\n\n /**\n * Render only first frame, ignoring animations and mouse.\n * @param options - Rendering options.\n */\n async render(options: IScreenStartOptions = {}) {\n this.start({\n enableRedraw: true,\n ignoreAnimation: true,\n ignoreMouse: true,\n ...options\n })\n\n await this.ready()\n\n this.stop()\n }\n\n /**\n * Start rendering.\n * @param options - Render options.\n */\n start(options: IScreenStartOptions = {}) {\n const {\n documentElement,\n screen,\n options: baseOptions\n } = this\n\n screen.start(documentElement, {\n enableRedraw: true,\n ...baseOptions,\n ...options\n })\n }\n\n /**\n * Stop rendering.\n */\n stop() {\n this.screen.stop()\n }\n\n /**\n * Resize SVG to fit in given size.\n * @param width\n * @param height\n * @param preserveAspectRatio\n */\n resize(\n width: number,\n height = width,\n preserveAspectRatio: boolean | string = false\n ) {\n this.documentElement.resize(width, height, preserveAspectRatio)\n }\n}\n"],"names":["offscreen","DOMParser","DOMParserFallback","preset","window","ignoreAnimation","ignoreMouse","createCanvas","width","height","OffscreenCanvas","createImage","url","response","fetch","blob","img","createImageBitmap","globalThis","Reflect","deleteProperty","node","canvas","loadImage","compressSpaces","str","replace","trimLeft","trimRight","toNumbers","matches","match","map","parseFloat","toMatrixValue","numbers","matrix","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","length","getSelectorSpecificity","specificity","currentSelector","delta","join","PSEUDO_ZERO","vectorMagnitude","v","sqrt","pow","vectorsRatio","u","vectorsAngle","acos","CB1","t","CB2","CB3","CB4","QB1","QB2","QB3","Property","empty","document","split","separator","getString","trim","value","hasValue","zeroIsValue","isString","regexp","result","isUrlDefinition","isPixels","asString","endsWith","setValue","getValue","def","getNumber","n","getColor","isNormalizedColor","getDpi","getRem","rootEmSize","getEm","emSize","getUnits","getPixels","axisOrIsFontSize","processPercent","axis","isFontSize","undefined","viewPort","screen","min","computeSize","max","getMilliseconds","getRadians","PI","getDefinition","definitions","get","getFillStyleDefinition","element","opacity","createGradient","ctx","createPattern","getHrefAttribute","patternTransform","getAttribute","getTextBaseline","key","textBaselineMapping","addOpacity","len","commas","i","RGBColor","ok","alpha","toRGBA","ViewPort","clear","viewPorts","setCurrent","push","removeCurrent","pop","getRoot","root","getDefault","getCurrent","current","d","DEFAULT_VIEWPORT_WIDTH","DEFAULT_VIEWPORT_HEIGHT","Point","parse","point","defaultValue","x","y","parseScale","scale","parsePath","path","points","pathPoints","angleTo","atan2","applyTransform","transform","xp","yp","Mouse","isWorking","working","start","onClick","onMouseMove","onclick","onmousemove","stop","hasEvents","events","runEvents","eventElements","style","cursor","forEach","run","parent","checkPath","isPointInPath","checkBoundingBox","boundingBox","isPointInBox","mapXY","offsetLeft","offsetTop","offsetParent","scrollX","scrollY","event","clientX","clientY","type","eventTarget","bind","defaultWindow","defaultFetch","Screen","wait","checker","waits","ready","readyPromise","Promise","resolve","isReady","isReadyLock","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","mouse","frameDuration","FRAMERATE","render","now","Date","then","tick","shouldUpdate","intervalId","requestAnimationFrame","cancel","animations","reduce","animation","update","isFirstRender","widthStyle","getStyle","heightStyle","cWidth","clientWidth","cHeight","clientHeight","viewBox","xRatio","yRatio","isNaN","transformStyle","clearRect","Error","MAX_VIRTUAL_PIXELS","DefaultDOMParser","Parser","resource","parseFromString","load","xml","parser","checkDocument","err","parserError","getElementsByTagName","textContent","text","Translate","apply","unapply","applyToPoint","Rotate","cx","cy","originX","originY","angle","tx","ty","rotate","rad","cos","sin","transformOrigin","Scale","scaleSize","Matrix","a","b","c","e","f","g","h","det","Skew","skew","SkewX","tan","SkewY","parseTransforms","parseTransform","Transform","fromElement","transformOriginXProperty","transformOriginYProperty","transforms","data","TransformType","transformTypes","skewX","skewY","Element","createIfNotExists","attr","attributes","set","href","skipAncestors","styles","parentStyle","save","mask","applyEffects","filter","setContext","renderChildren","clearContext","restore","clipPathStyleProp","children","child","addChild","childNode","createElement","ignoreChildTypes","includes","matchesSelector","styleClasses","some","styleClass","addStylesFromStyleDefinition","stylesSpecificity","styleProp","existingSpecificity","removeStyles","ignoreStyles","toRestore","restoreStyles","isFirstChild","indexOf","captureTextNodes","Map","animationFrozen","animationFrozenValue","nodeType","Array","from","attribute","nodeName","id","has","childNodes","textNode","createTextNode","getText","UnknownElement","wrapFontFamily","fontFamily","trimmed","prepareFontFamily","process","prepareFontStyle","fontStyle","targetFontStyle","prepareFontWeight","fontWeight","targetFontWeight","Font","font","inherit","fontVariant","fontSize","parts","part","variants","weights","toString","inheritFont","BoundingBox","x1","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","Number","NaN","RenderedElement","calculateOpacity","opacityStyle","fromMeasure","fillStyleProp","fillOpacityStyleProp","strokeStyleProp","strokeOpacityProp","fillStyle","strokeWidthStyleProp","newLineWidth","lineWidth","strokeLinecapStyleProp","strokeLinejoinStyleProp","strokeMiterlimitProp","strokeDasharrayStyleProp","strokeDashoffsetProp","gaps","setLineDash","webkitLineDash","mozDash","offset","lineDashOffset","webkitLineDashOffset","mozDashOffset","modifiedEmSizeStack","fontStyleProp","fontStyleStyleProp","fontVariantStyleProp","fontWeightStyleProp","fontSizeStyleProp","fontFamilyStyleProp","globalAlpha","popEmSize","TextElement","textBaseline","initializeCoordinates","leafTexts","textChunkStart","POSITIVE_INFINITY","maxX","NEGATIVE_INFINITY","getBoundingBox","getTElementBoundingBox","adjustChildCoordinatesRecursive","childBoundingBox","getChildBoundingBox","getFontSize","inheritFontSize","measureText","getGlyph","char","glyph","isArabic","prevChar","nextChar","arabicForm","arabicGlyphs","glyphs","missingGlyph","getTextFromNode","parentNode","index","lastIndex","renderTElementChildren","renderChild","renderText","customFont","unitsPerEm","fontFace","ctxFont","isRTL","reverse","dx","lw","horizAdvX","fillText","strokeText","applyAnchoring","firstElement","textAnchor","shift","adjustChildCoordinatesRecursiveCore","textParent","adjustChildCoordinates","xAttr","yAttr","dxAttr","dyAttr","Boolean","getInheritedAttribute","measureCache","measure","measureTargetText","targetText","parentAttr","TSpanElement","TextNode","PathParser","SVGPathData","reset","command","previousCommand","control","angles","isEnd","commands","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","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","_ctx","getMarkers","markers","fillRuleStyleProp","fill","setTransform","stroke","markersLastIndex","markerStartStyleProp","markerMidStyleProp","markerEndStyleProp","marker","controlPoint","currentPoint","bezierCurveTo","quadraticCurveTo","rX","rY","xRot","lArcFlag","sweepFlag","xAxisRotation","currp","l","s","cpp","centp","a1","ad","dir","ah","halfWay","r","sx","sy","arc","SVGElement","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","delete","pattern","MarkerElement","orient","markerUnits","markerSvg","DefsElement","GElement","GradientElement","getGradientUnits","stopsContainer","inheritStopContainer","stops","gradient","getGradient","addParentOpacity","addColorStop","rootView","rect","group","attributesToInherit","attributeToInherit","colorProp","LinearGradientElement","isBoundingBoxUnits","createLinearGradient","RadialGradientElement","fx","fy","fr","createRadialGradient","StopElement","stopOpacity","stopColor","AnimateElement","getProperty","attributeType","attributeName","calcValue","initialUnits","progress","to","getProgress","newValue","prop","initialValue","duration","maxDuration","frozen","removed","updated","begin","typeAttr","values","p","lb","floor","ub","ceil","valuesAttr","AnimateColorElement","colorFrom","colorTo","AnimateTransformElement","transformFrom","transformTo","FontFaceElement","ascent","descent","GlyphElement","unicode","MissingGlyphElement","FontElement","fontFamilyStyle","arabicGlyph","TRefElement","firstChild","AElement","hasText","open","TextPathElement","dataArray","theta","dTheta","psi","fs","setTextData","textDecoration","glyphInfo","rotation","partialText","getLetterSpacingAt","idx","letterSpacingCache","findSegmentToFitChar","anchor","textFullWidth","fullPathWidth","spacesNumber","inputOffset","dy","charI","glyphWidth","splineStep","textHeight","getEquidistantPointOnPath","segment","dyX","dyY","measuresCache","chars","thisSpacing","parentSpacing","letterSpacing","textLen","dxSum","acc","cur","textWidth","getPathLength","startOffset","nextOffset","parsePathData","pathLength","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","pathElement","dataUriRegex","ImageElement","image","console","error","loaded","loadSvg","atob","decodeURIComponent","svg","subDocument","canvg","forkString","documentElement","complete","drawImage","isSvg","images","SymbolElement","SVGFontLoader","svgDocument","fonts","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","_x","_y","includeOpacity","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","canvasRGBA","removeChild","TitleElement","DescElement","elements","anonymousCrossOrigin","crossOrigin","reject","onload","onerror","_event","_source","_lineno","_colno","DEFAULT_EM_SIZE","Document","bindCreateImage","source","forceAnonymousCrossOrigin","emSizeStack","uniqueId","isImagesLoaded","isFontsLoaded","createDocumentElement","elementType","ElementType","elementTypes","config","Canvg","options","fromString","fork","baseOptions"],"mappings":"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"}Выполнить команду
Для локальной разработки. Не используйте в интернете!