{"version":3,"sources":["../src/context.tsx","../src/roughSVG.tsx","../src/renderer.ts","../src/constants.ts","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/geometry.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/scan-line-hachure.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/hachure-filler.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/zigzag-filler.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/hatch-filler.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/dot-filler.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/dashed-filler.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/zigzag-line-filler.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/fillers/filler.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/math.js","../../../node_modules/.pnpm/path-data-parser@0.1.0_patch_hash=4rhp5kl5f7kwcibkmwkhuggxfy/node_modules/path-data-parser/lib/parser.js","../../../node_modules/.pnpm/path-data-parser@0.1.0_patch_hash=4rhp5kl5f7kwcibkmwkhuggxfy/node_modules/path-data-parser/lib/absolutize.js","../../../node_modules/.pnpm/path-data-parser@0.1.0_patch_hash=4rhp5kl5f7kwcibkmwkhuggxfy/node_modules/path-data-parser/lib/normalize.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/renderer.js","../../../node_modules/.pnpm/points-on-curve@0.2.0/node_modules/points-on-curve/lib/curve-to-bezier.js","../../../node_modules/.pnpm/points-on-curve@0.2.0/node_modules/points-on-curve/lib/index.js","../../../node_modules/.pnpm/points-on-path@0.2.1/node_modules/points-on-path/lib/index.js","../../../node_modules/.pnpm/roughjs@4.5.2_patch_hash=ccgdz2z4p5772c6hci3dehxkyq/node_modules/roughjs/bin/generator.js","../src/utils.ts","../src/shape.ts","../src/props.ts"],"sourcesContent":["import type { ContextBridge } from 'its-fine'\nimport type { RoughSVGProps } from './types'\nimport { FiberProvider, useContextBridge } from 'its-fine'\nimport { RoughSVG } from './roughSVG'\n\nfunction WithBridgeRoughSVG({ children, ...restProps }: RoughSVGProps) {\n  const Bridge: ContextBridge = useContextBridge()\n  return (\n    <RoughSVG {...restProps}>\n      <Bridge>{children}</Bridge>\n    </RoughSVG>\n  )\n}\n\nexport function WCRoughSVG(props: RoughSVGProps) {\n  return (\n    <FiberProvider>\n      <WithBridgeRoughSVG {...props} />\n    </FiberProvider>\n  )\n}\n","import type { Options, RoughSVGProps } from './types'\nimport { createElement, useEffect, useRef, useState } from 'react'\nimport { LegacyRoot } from 'react-reconciler/constants.js'\nimport { createReconciler } from './renderer'\n\nexport function RoughSVG({\n  containerType = 'div',\n  children,\n  options = {},\n  ...restProps\n}: RoughSVGProps) {\n  const containerRef = useRef<HTMLDivElement>(null)\n  const mountNodeRef = useRef<any>(null)\n  const optionsRef = useRef<Options>(options)\n  const [reconciler] = useState(() => createReconciler(optionsRef))\n\n  useEffect(() => {\n    if (containerRef.current && !mountNodeRef.current) {\n      mountNodeRef.current = reconciler.createContainer(\n        containerRef.current,\n        LegacyRoot,\n        null,\n        false,\n        false,\n        '',\n        () => {},\n        null,\n      )\n    }\n    optionsRef.current = options || {}\n    if (mountNodeRef.current) {\n      reconciler.updateContainer(children, mountNodeRef.current, null)\n    }\n  }, [children, reconciler, options])\n\n  useEffect(() => {\n    return () => {\n      reconciler.updateContainer(null, mountNodeRef.current, null)\n    }\n  }, [reconciler])\n\n  return createElement(containerType, { ref: containerRef, ...restProps })\n}\n","import type { MutableRefObject } from 'react'\nimport type {\n  HostConfig,\n  HostContext,\n  Instance,\n  InstanceProps,\n  InstanceWithRRF,\n  Options,\n} from './types'\nimport Reconciler from 'react-reconciler'\nimport * as ReactReconcilerConstants from 'react-reconciler/constants.js'\nimport {\n  DATA_RRF_GROUP,\n  HTML_NAMESPACE,\n  SVG_NAMESPACE,\n  SVG_SHAPE_MAP,\n} from './constants'\nimport { diffProps } from './props'\nimport { isFun, isReact19 } from './utils'\n\nconst UPDATE_SIGNAL = {}\n\n// @ts-expect-error for React 19\nlet currentUpdatePriority: number = ReactReconcilerConstants.NoEventPriority\n\nfunction createInstance(type: string, _props: InstanceProps, root: Element, hostContext: HostContext) {\n  const ownerDocument = root.ownerDocument\n  const { namespace, inDefs } = hostContext\n  let domElement: Instance\n  if (namespace === SVG_NAMESPACE || type === 'svg') {\n    // roughjs renders a shape as a fill path(if fill is not none) and a stroke path(if stroke is not none)\n    // so we need to wrap the shape in a g element\n    if (!inDefs && type in SVG_SHAPE_MAP) {\n      domElement = ownerDocument.createElementNS(SVG_NAMESPACE, 'g')\n      domElement.setAttribute(DATA_RRF_GROUP, '')\n    }\n    else {\n      domElement = ownerDocument.createElementNS(SVG_NAMESPACE, type)\n    }\n  }\n  else {\n    domElement = ownerDocument.createElement(type)\n  }\n  (domElement as InstanceWithRRF)._rrf_inDefs = inDefs\n  return domElement\n}\n\nfunction removeChild(parent: Instance, child: Instance) {\n  return parent.removeChild(child)\n}\n\nfunction appendChild(parent: Instance, child: Instance) {\n  return child && parent.appendChild(child)\n}\n\nfunction insertBefore(parent: Instance, child: Instance, beforeChild: Instance) {\n  return parent.insertBefore(child, beforeChild)\n}\n\nexport function createReconciler(optionsRef: MutableRefObject<Options>): Reconciler.Reconciler<Instance, Instance, void, Instance, Instance> {\n  return Reconciler<\n    HostConfig['type'],\n    HostConfig['props'],\n    HostConfig['container'],\n    HostConfig['instance'],\n    HostConfig['textInstance'],\n    HostConfig['suspenseInstance'],\n    HostConfig['hydratableInstance'],\n    HostConfig['publicInstance'],\n    HostConfig['hostContext'],\n    HostConfig['updatePayload'],\n    HostConfig['childSet'],\n    HostConfig['timeoutHandle'],\n    HostConfig['noTimeout']\n  >({\n    createInstance,\n    removeChild,\n    appendChild,\n    appendInitialChild: appendChild,\n    insertBefore,\n    supportsMutation: true,\n    isPrimaryRenderer: false,\n    supportsPersistence: false,\n    supportsHydration: false,\n    noTimeout: -1,\n    appendChildToContainer: (container, child) => {\n      container.appendChild(child as Instance)\n    },\n    removeChildFromContainer: (container, child) => {\n      container.removeChild(child as Instance)\n    },\n    insertInContainerBefore: (container, child, beforeChild) => {\n      container.insertBefore(child as Instance, beforeChild as Instance)\n    },\n    getRootHostContext: root => ({\n      namespace: root.namespaceURI || '',\n      inDefs: false,\n    }),\n    getChildHostContext: (parentHostContext, type) => {\n      const { namespace, inDefs } = parentHostContext\n      if (type === 'svg') {\n        return { namespace: SVG_NAMESPACE, inDefs }\n      }\n      if (namespace === SVG_NAMESPACE && type === 'foreignObject') {\n        return { namespace: HTML_NAMESPACE, inDefs }\n      }\n      if (type === 'defs') {\n        return { namespace, inDefs: true }\n      }\n      return parentHostContext\n    },\n    finalizeInitialChildren(instance, type, props) {\n      diffProps(\n        type,\n        instance as InstanceWithRRF,\n        props,\n        null,\n        optionsRef.current,\n      )\n      return false\n    },\n    prepareUpdate(_instance, _type, _oldProps, _newProps, _rootContainer) {\n      return UPDATE_SIGNAL\n    },\n    commitUpdate(...args) {\n      let instance\n      let type\n      let oldProps\n      let newProps\n      let _\n      if (isReact19()) {\n        [instance, type, oldProps, newProps] = args\n      }\n      else {\n        [instance, _, type, oldProps, newProps] = args\n      }\n      diffProps(\n        type as string,\n        instance as InstanceWithRRF,\n        newProps,\n        oldProps as InstanceProps | null,\n        optionsRef.current,\n      )\n    },\n    commitTextUpdate(textInstance, _oldText: string, newText: string): void {\n      (<any>textInstance).nodeValue = newText\n    },\n    commitMount() {},\n    getPublicInstance: (instance) => {\n      if (instance?.hasAttribute(DATA_RRF_GROUP)) {\n        const firstChild = instance.children[0]\n        if (firstChild?.tagName === 'path') {\n          return firstChild as SVGElement\n        }\n      }\n      return instance!\n    },\n    prepareForCommit: () => null,\n    preparePortalMount: () => {},\n    resetAfterCommit: () => {},\n    shouldSetTextContent: () => false,\n    clearContainer: () => false,\n    hideInstance() {},\n    unhideInstance() {},\n    createTextInstance: (text, container) =>\n      container.ownerDocument.createTextNode(text),\n    hideTextInstance: () => {},\n    unhideTextInstance: () => {},\n    getCurrentEventPriority: () => {\n      return typeof currentUpdatePriority === 'number'\n        ? currentUpdatePriority\n        : ReactReconcilerConstants.DefaultEventPriority\n    },\n    beforeActiveInstanceBlur: () => {},\n    afterActiveInstanceBlur: () => {},\n    detachDeletedInstance: () => {},\n    scheduleTimeout: (isFun(setTimeout) ? setTimeout : undefined) as any,\n    cancelTimeout: (isFun(clearTimeout) ? clearTimeout : undefined) as any,\n    getInstanceFromNode: () => null,\n    prepareScopeUpdate: () => {},\n    getInstanceFromScope: () => null,\n    // @ts-expect-error these hooks are undocumented, remove @ts-ignore in the future\n    setCurrentUpdatePriority: (newPriority: number) => {\n      currentUpdatePriority = newPriority\n    },\n    getCurrentUpdatePriority: () => {\n      return currentUpdatePriority\n    },\n    resolveUpdatePriority: () => {\n      return (\n        currentUpdatePriority || ReactReconcilerConstants.DefaultEventPriority\n      )\n    },\n    shouldAttemptEagerTransition: () => false,\n    requestPostPaintCallback: () => {},\n    maySuspendCommit: () => false,\n    preloadInstance: () => true,\n    startSuspendingCommit: () => {},\n    suspendInstance: () => {},\n    waitForCommitToBeReady: () => null,\n    NotPendingTransition: null,\n    resetFormInstance: () => {},\n  })\n}\n","import type { SVGShape } from './types'\n\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'\nexport const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'\n\nexport const IS_NON_DIMENSIONAL\n  = /acit|ex(?:[sgnp]|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i\nexport const ON_ANI = /^on(Ani|Tra|Tou|BeforeInp|Compo)/\nexport const CAMEL_REPLACE = /[A-Z0-9]/g\nexport const CAMEL_PROPS\n  = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?![HWU])|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/\n\nexport const SVG_PATH_PROPS: SVGShape = {\n  type: 'path',\n  d: '',\n}\nexport const SVG_CIRCLE_PROPS: SVGShape = {\n  type: 'circle',\n  cx: 0,\n  cy: 0,\n  r: 0,\n}\nexport const SVG_LINE_PROPS: SVGShape = {\n  type: 'line',\n  x1: 0,\n  y1: 0,\n  x2: 0,\n  y2: 0,\n}\nexport const SVG_RECT_PROPS: SVGShape = {\n  type: 'rect',\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n}\nexport const SVG_ELLIPSE_PROPS: SVGShape = {\n  type: 'ellipse',\n  cx: 0,\n  cy: 0,\n  rx: 0,\n  ry: 0,\n}\nexport const SVG_POLYGON_PROPS: SVGShape = {\n  type: 'polygon',\n  points: '',\n}\nexport const SVG_POLYLINE_PROPS: SVGShape = {\n  type: 'polyline',\n  points: '',\n}\n\nexport const SVG_SHAPE_MAP: { [key in SVGShape['type']]: SVGShape } = {\n  path: SVG_PATH_PROPS,\n  circle: SVG_CIRCLE_PROPS,\n  line: SVG_LINE_PROPS,\n  rect: SVG_RECT_PROPS,\n  ellipse: SVG_ELLIPSE_PROPS,\n  polygon: SVG_POLYGON_PROPS,\n  polyline: SVG_POLYLINE_PROPS,\n}\n\nexport const FILL_CSS_VARIABLE = '--rrf-fill-color'\nexport const FILL_OPACITY_CSS_VARIABLE = '--rrf-fill-opacity'\n\nexport const DATA_RRF_GROUP = 'data-rrf-group'\n","export function rotatePoints(points, center, degrees) {\n    if (points && points.length) {\n        const [cx, cy] = center;\n        const angle = (Math.PI / 180) * degrees;\n        const cos = Math.cos(angle);\n        const sin = Math.sin(angle);\n        points.forEach((p) => {\n            const [x, y] = p;\n            p[0] = ((x - cx) * cos) - ((y - cy) * sin) + cx;\n            p[1] = ((x - cx) * sin) + ((y - cy) * cos) + cy;\n        });\n    }\n}\nexport function rotateLines(lines, center, degrees) {\n    const points = [];\n    lines.forEach((line) => points.push(...line));\n    rotatePoints(points, center, degrees);\n}\nexport function lineLength(line) {\n    const p1 = line[0];\n    const p2 = line[1];\n    return Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));\n}\n","import { rotatePoints, rotateLines } from '../geometry';\nexport function polygonHachureLines(polygonList, o) {\n    const angle = o.hachureAngle + 90;\n    let gap = o.hachureGap;\n    if (gap < 0) {\n        gap = o.strokeWidth * 4;\n    }\n    gap = Math.max(gap, 0.1);\n    const rotationCenter = [0, 0];\n    if (angle) {\n        for (const polygon of polygonList) {\n            rotatePoints(polygon, rotationCenter, angle);\n        }\n    }\n    const lines = straightHachureLines(polygonList, gap);\n    if (angle) {\n        for (const polygon of polygonList) {\n            rotatePoints(polygon, rotationCenter, -angle);\n        }\n        rotateLines(lines, rotationCenter, -angle);\n    }\n    return lines;\n}\nfunction straightHachureLines(polygonList, gap) {\n    const vertexArray = [];\n    for (const polygon of polygonList) {\n        const vertices = [...polygon];\n        if (vertices[0].join(',') !== vertices[vertices.length - 1].join(',')) {\n            vertices.push([vertices[0][0], vertices[0][1]]);\n        }\n        if (vertices.length > 2) {\n            vertexArray.push(vertices);\n        }\n    }\n    const lines = [];\n    gap = Math.max(gap, 0.1);\n    // Create sorted edges table\n    const edges = [];\n    for (const vertices of vertexArray) {\n        for (let i = 0; i < vertices.length - 1; i++) {\n            const p1 = vertices[i];\n            const p2 = vertices[i + 1];\n            if (p1[1] !== p2[1]) {\n                const ymin = Math.min(p1[1], p2[1]);\n                edges.push({\n                    ymin,\n                    ymax: Math.max(p1[1], p2[1]),\n                    x: ymin === p1[1] ? p1[0] : p2[0],\n                    islope: (p2[0] - p1[0]) / (p2[1] - p1[1]),\n                });\n            }\n        }\n    }\n    edges.sort((e1, e2) => {\n        if (e1.ymin < e2.ymin) {\n            return -1;\n        }\n        if (e1.ymin > e2.ymin) {\n            return 1;\n        }\n        if (e1.x < e2.x) {\n            return -1;\n        }\n        if (e1.x > e2.x) {\n            return 1;\n        }\n        if (e1.ymax === e2.ymax) {\n            return 0;\n        }\n        return (e1.ymax - e2.ymax) / Math.abs((e1.ymax - e2.ymax));\n    });\n    if (!edges.length) {\n        return lines;\n    }\n    // Start scanning\n    let activeEdges = [];\n    let y = edges[0].ymin;\n    while (activeEdges.length || edges.length) {\n        if (edges.length) {\n            let ix = -1;\n            for (let i = 0; i < edges.length; i++) {\n                if (edges[i].ymin > y) {\n                    break;\n                }\n                ix = i;\n            }\n            const removed = edges.splice(0, ix + 1);\n            removed.forEach((edge) => {\n                activeEdges.push({ s: y, edge });\n            });\n        }\n        activeEdges = activeEdges.filter((ae) => {\n            if (ae.edge.ymax <= y) {\n                return false;\n            }\n            return true;\n        });\n        activeEdges.sort((ae1, ae2) => {\n            if (ae1.edge.x === ae2.edge.x) {\n                return 0;\n            }\n            return (ae1.edge.x - ae2.edge.x) / Math.abs((ae1.edge.x - ae2.edge.x));\n        });\n        // fill between the edges\n        if (activeEdges.length > 1) {\n            for (let i = 0; i < activeEdges.length; i = i + 2) {\n                const nexti = i + 1;\n                if (nexti >= activeEdges.length) {\n                    break;\n                }\n                const ce = activeEdges[i].edge;\n                const ne = activeEdges[nexti].edge;\n                lines.push([\n                    [Math.round(ce.x), y],\n                    [Math.round(ne.x), y],\n                ]);\n            }\n        }\n        y += gap;\n        activeEdges.forEach((ae) => {\n            ae.edge.x = ae.edge.x + (gap * ae.edge.islope);\n        });\n    }\n    return lines;\n}\n","import { polygonHachureLines } from './scan-line-hachure';\nexport class HachureFiller {\n    constructor(helper) {\n        this.helper = helper;\n    }\n    fillPolygons(polygonList, o) {\n        return this._fillPolygons(polygonList, o);\n    }\n    _fillPolygons(polygonList, o) {\n        const lines = polygonHachureLines(polygonList, o);\n        const ops = this.renderLines(lines, o);\n        return { type: 'fillSketch', ops };\n    }\n    renderLines(lines, o) {\n        const ops = [];\n        for (const line of lines) {\n            ops.push(...this.helper.doubleLineOps(line[0][0], line[0][1], line[1][0], line[1][1], o));\n        }\n        return ops;\n    }\n}\n","import { HachureFiller } from './hachure-filler';\nimport { polygonHachureLines } from './scan-line-hachure';\nimport { lineLength } from '../geometry';\nexport class ZigZagFiller extends HachureFiller {\n    fillPolygons(polygonList, o) {\n        let gap = o.hachureGap;\n        if (gap < 0) {\n            gap = o.strokeWidth * 4;\n        }\n        gap = Math.max(gap, 0.1);\n        const o2 = Object.assign({}, o, { hachureGap: gap });\n        const lines = polygonHachureLines(polygonList, o2);\n        const zigZagAngle = (Math.PI / 180) * o.hachureAngle;\n        const zigzagLines = [];\n        const dgx = gap * 0.5 * Math.cos(zigZagAngle);\n        const dgy = gap * 0.5 * Math.sin(zigZagAngle);\n        for (const [p1, p2] of lines) {\n            if (lineLength([p1, p2])) {\n                zigzagLines.push([\n                    [p1[0] - dgx, p1[1] + dgy],\n                    [...p2],\n                ], [\n                    [p1[0] + dgx, p1[1] - dgy],\n                    [...p2],\n                ]);\n            }\n        }\n        const ops = this.renderLines(zigzagLines, o);\n        return { type: 'fillSketch', ops };\n    }\n}\n","import { HachureFiller } from './hachure-filler';\nexport class HatchFiller extends HachureFiller {\n    fillPolygons(polygonList, o) {\n        const set = this._fillPolygons(polygonList, o);\n        const o2 = Object.assign({}, o, { hachureAngle: o.hachureAngle + 90 });\n        const set2 = this._fillPolygons(polygonList, o2);\n        set.ops = set.ops.concat(set2.ops);\n        return set;\n    }\n}\n","import { lineLength } from '../geometry';\nimport { polygonHachureLines } from './scan-line-hachure';\nexport class DotFiller {\n    constructor(helper) {\n        this.helper = helper;\n    }\n    fillPolygons(polygonList, o) {\n        o = Object.assign({}, o, { hachureAngle: 0 });\n        const lines = polygonHachureLines(polygonList, o);\n        return this.dotsOnLines(lines, o);\n    }\n    dotsOnLines(lines, o) {\n        const ops = [];\n        let gap = o.hachureGap;\n        if (gap < 0) {\n            gap = o.strokeWidth * 4;\n        }\n        gap = Math.max(gap, 0.1);\n        let fweight = o.fillWeight;\n        if (fweight < 0) {\n            fweight = o.strokeWidth / 2;\n        }\n        const ro = gap / 4;\n        for (const line of lines) {\n            const length = lineLength(line);\n            const dl = length / gap;\n            const count = Math.ceil(dl) - 1;\n            const offset = length - (count * gap);\n            const x = ((line[0][0] + line[1][0]) / 2) - (gap / 4);\n            const minY = Math.min(line[0][1], line[1][1]);\n            for (let i = 0; i < count; i++) {\n                const y = minY + offset + (i * gap);\n                const cx = (x - ro) + Math.random() * 2 * ro;\n                const cy = (y - ro) + Math.random() * 2 * ro;\n                const el = this.helper.ellipse(cx, cy, fweight, fweight, o);\n                ops.push(...el.ops);\n            }\n        }\n        return { type: 'fillSketch', ops };\n    }\n}\n","import { lineLength } from '../geometry';\nimport { polygonHachureLines } from './scan-line-hachure';\nexport class DashedFiller {\n    constructor(helper) {\n        this.helper = helper;\n    }\n    fillPolygons(polygonList, o) {\n        const lines = polygonHachureLines(polygonList, o);\n        return { type: 'fillSketch', ops: this.dashedLine(lines, o) };\n    }\n    dashedLine(lines, o) {\n        const offset = o.dashOffset < 0 ? (o.hachureGap < 0 ? (o.strokeWidth * 4) : o.hachureGap) : o.dashOffset;\n        const gap = o.dashGap < 0 ? (o.hachureGap < 0 ? (o.strokeWidth * 4) : o.hachureGap) : o.dashGap;\n        const ops = [];\n        lines.forEach((line) => {\n            const length = lineLength(line);\n            const count = Math.floor(length / (offset + gap));\n            const startOffset = (length + gap - (count * (offset + gap))) / 2;\n            let p1 = line[0];\n            let p2 = line[1];\n            if (p1[0] > p2[0]) {\n                p1 = line[1];\n                p2 = line[0];\n            }\n            const alpha = Math.atan((p2[1] - p1[1]) / (p2[0] - p1[0]));\n            for (let i = 0; i < count; i++) {\n                const lstart = i * (offset + gap);\n                const lend = lstart + offset;\n                const start = [p1[0] + (lstart * Math.cos(alpha)) + (startOffset * Math.cos(alpha)), p1[1] + lstart * Math.sin(alpha) + (startOffset * Math.sin(alpha))];\n                const end = [p1[0] + (lend * Math.cos(alpha)) + (startOffset * Math.cos(alpha)), p1[1] + (lend * Math.sin(alpha)) + (startOffset * Math.sin(alpha))];\n                ops.push(...this.helper.doubleLineOps(start[0], start[1], end[0], end[1], o));\n            }\n        });\n        return ops;\n    }\n}\n","import { lineLength } from '../geometry';\nimport { polygonHachureLines } from './scan-line-hachure';\nexport class ZigZagLineFiller {\n    constructor(helper) {\n        this.helper = helper;\n    }\n    fillPolygons(polygonList, o) {\n        const gap = o.hachureGap < 0 ? (o.strokeWidth * 4) : o.hachureGap;\n        const zo = o.zigzagOffset < 0 ? gap : o.zigzagOffset;\n        o = Object.assign({}, o, { hachureGap: gap + zo });\n        const lines = polygonHachureLines(polygonList, o);\n        return { type: 'fillSketch', ops: this.zigzagLines(lines, zo, o) };\n    }\n    zigzagLines(lines, zo, o) {\n        const ops = [];\n        lines.forEach((line) => {\n            const length = lineLength(line);\n            const count = Math.round(length / (2 * zo));\n            let p1 = line[0];\n            let p2 = line[1];\n            if (p1[0] > p2[0]) {\n                p1 = line[1];\n                p2 = line[0];\n            }\n            const alpha = Math.atan((p2[1] - p1[1]) / (p2[0] - p1[0]));\n            for (let i = 0; i < count; i++) {\n                const lstart = i * 2 * zo;\n                const lend = (i + 1) * 2 * zo;\n                const dz = Math.sqrt(2 * Math.pow(zo, 2));\n                const start = [p1[0] + (lstart * Math.cos(alpha)), p1[1] + lstart * Math.sin(alpha)];\n                const end = [p1[0] + (lend * Math.cos(alpha)), p1[1] + (lend * Math.sin(alpha))];\n                const middle = [start[0] + dz * Math.cos(alpha + Math.PI / 4), start[1] + dz * Math.sin(alpha + Math.PI / 4)];\n                ops.push(...this.helper.doubleLineOps(start[0], start[1], middle[0], middle[1], o), ...this.helper.doubleLineOps(middle[0], middle[1], end[0], end[1], o));\n            }\n        });\n        return ops;\n    }\n}\n","import { HachureFiller } from './hachure-filler';\nimport { ZigZagFiller } from './zigzag-filler';\nimport { HatchFiller } from './hatch-filler';\nimport { DotFiller } from './dot-filler';\nimport { DashedFiller } from './dashed-filler';\nimport { ZigZagLineFiller } from './zigzag-line-filler';\nconst fillers = {};\nexport function getFiller(o, helper) {\n    let fillerName = o.fillStyle || 'hachure';\n    if (!fillers[fillerName]) {\n        switch (fillerName) {\n            case 'zigzag':\n                if (!fillers[fillerName]) {\n                    fillers[fillerName] = new ZigZagFiller(helper);\n                }\n                break;\n            case 'cross-hatch':\n                if (!fillers[fillerName]) {\n                    fillers[fillerName] = new HatchFiller(helper);\n                }\n                break;\n            case 'dots':\n                if (!fillers[fillerName]) {\n                    fillers[fillerName] = new DotFiller(helper);\n                }\n                break;\n            case 'dashed':\n                if (!fillers[fillerName]) {\n                    fillers[fillerName] = new DashedFiller(helper);\n                }\n                break;\n            case 'zigzag-line':\n                if (!fillers[fillerName]) {\n                    fillers[fillerName] = new ZigZagLineFiller(helper);\n                }\n                break;\n            case 'hachure':\n            default:\n                fillerName = 'hachure';\n                if (!fillers[fillerName]) {\n                    fillers[fillerName] = new HachureFiller(helper);\n                }\n                break;\n        }\n    }\n    return fillers[fillerName];\n}\n","export function randomSeed() {\n    return Math.floor(Math.random() * 2 ** 31);\n}\nexport class Random {\n    constructor(seed) {\n        this.seed = seed;\n    }\n    next() {\n        if (this.seed) {\n            return ((2 ** 31 - 1) & (this.seed = Math.imul(48271, this.seed))) / 2 ** 31;\n        }\n        else {\n            return Math.random();\n        }\n    }\n}\n","const PARAMS = { A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0 };\n\nconst isWsp = (c) => {\n    const codePoint = c.codePointAt(0);\n    return (\n        codePoint === 0x20 ||\n        codePoint === 0x9 ||\n        codePoint === 0xd ||\n        codePoint === 0xa\n    );\n};\n\nconst isDigit = (c) => {\n    const codePoint = c.codePointAt(0);\n    if (codePoint === null || codePoint === undefined) {\n        return false;\n    }\n    return 48 <= codePoint && codePoint <= 57;\n};\n\nconst readNumber = (string, cursor) => {\n    let i = cursor;\n    let value = '';\n    let state = 'none';\n    for (; i < string.length; i += 1) {\n      const c = string[i];\n      if (c === '+' || c === '-') {\n        if (state === 'none') {\n          state = 'sign';\n          value += c;\n          continue;\n        }\n        if (state === 'e') {\n          state = 'exponent_sign';\n          value += c;\n          continue;\n        }\n      }\n      if (isDigit(c)) {\n        if (state === 'none' || state === 'sign' || state === 'whole') {\n          state = 'whole';\n          value += c;\n          continue;\n        }\n        if (state === 'decimal_point' || state === 'decimal') {\n          state = 'decimal';\n          value += c;\n          continue;\n        }\n        if (state === 'e' || state === 'exponent_sign' || state === 'exponent') {\n          state = 'exponent';\n          value += c;\n          continue;\n        }\n      }\n      if (c === '.') {\n        if (state === 'none' || state === 'sign' || state === 'whole') {\n          state = 'decimal_point';\n          value += c;\n          continue;\n        }\n      }\n      if (c === 'E' || c === 'e') {\n        if (\n          state === 'whole' ||\n          state === 'decimal_point' ||\n          state === 'decimal'\n        ) {\n          state = 'e';\n          value += c;\n          continue;\n        }\n      }\n      break;\n    }\n    const number = Number.parseFloat(value);\n    if (Number.isNaN(number)) {\n      return [cursor, null];\n    } else {\n      // step back to delegate iteration to parent loop\n      return [i - 1, number];\n    }\n};\n  \nconst isKey = (c) => {\n    return c in PARAMS;\n};\n\nexport function parsePath(d) {\n    const pathData = [];\n    let key = null;\n    let data = [];\n    let argsCount = 0;\n    let canHaveComma = false;\n    let hadComma = false;\n    for (let i = 0; i < d.length; i += 1) {\n        const c = d.charAt(i);\n        if (isWsp(c)) {\n            continue;\n        }\n        // allow comma only between arguments\n        if (canHaveComma && c === ',') {\n            if (hadComma) {\n            break;\n            }\n            hadComma = true;\n            continue;\n        }\n        if (isKey(c)) {\n            if (hadComma) {\n                return pathData;\n            }\n            if (key === null || key === undefined) {\n                // moveto should be leading key\n                if (c !== 'M' && c !== 'm') {\n                    return pathData;\n                }\n            } else {\n                // stop if previous key arguments are not flushed\n                if (data.length !== 0) {\n                    return pathData;\n                }\n            }\n            key = c;\n            data = [];\n            argsCount = PARAMS[key];\n            canHaveComma = false;\n            // flush key without arguments\n            if (argsCount === 0) {\n                pathData.push({ key, data });\n            }\n            continue;\n        }\n        // avoid parsing arguments if no key detected\n        if (key === null || key === undefined) {\n            return pathData;\n        }\n        // read next argument\n        let newCursor = i;\n        let number = null;\n        if (key === 'A' || key === 'a') {\n            const position = data.length;\n            if (position === 0 || position === 1) {\n                // allow only positive number without sign as first two arguments\n                if (c !== '+' && c !== '-') {\n                    [newCursor, number] = readNumber(d, i);\n                }\n            }\n            if (position === 2 || position === 5 || position === 6) {\n                [newCursor, number] = readNumber(d, i);\n            }\n            if (position === 3 || position === 4) {\n                // read flags\n                if (c === '0') {\n                    number = 0;\n                }\n                if (c === '1') {\n                    number = 1;\n                }\n            }\n        } else {\n            [newCursor, number] = readNumber(d, i);\n        }\n        if (number === null || number === undefined) {\n            return pathData;\n        }\n        data.push(number);\n        canHaveComma = true;\n        hadComma = false;\n        i = newCursor;\n        // flush arguments when necessary count is reached\n        if (data.length === argsCount) {\n            pathData.push({ key, data });\n            // subsequent moveto coordinates are threated as implicit lineto commands\n            if (key === 'M') {\n                key = 'L';\n            }\n            if (key === 'm') {\n                key = 'l';\n            }\n            data = [];\n        }\n    }\n    return pathData;\n}\nexport function serialize(segments) {\n    const tokens = [];\n    for (const { key, data } of segments) {\n        tokens.push(key);\n        switch (key) {\n            case 'C':\n            case 'c':\n                tokens.push(data[0], `${data[1]},`, data[2], `${data[3]},`, data[4], data[5]);\n                break;\n            case 'S':\n            case 's':\n            case 'Q':\n            case 'q':\n                tokens.push(data[0], `${data[1]},`, data[2], data[3]);\n                break;\n            default:\n                tokens.push(...data);\n                break;\n        }\n    }\n    return tokens.join(' ');\n}\n","// Translate relative commands to absolute commands\nexport function absolutize(segments) {\n    let cx = 0, cy = 0;\n    let subx = 0, suby = 0;\n    const out = [];\n    for (const { key, data } of segments) {\n        switch (key) {\n            case 'M':\n                out.push({ key: 'M', data: [...data] });\n                [cx, cy] = data;\n                [subx, suby] = data;\n                break;\n            case 'm':\n                cx += data[0];\n                cy += data[1];\n                out.push({ key: 'M', data: [cx, cy] });\n                subx = cx;\n                suby = cy;\n                break;\n            case 'L':\n                out.push({ key: 'L', data: [...data] });\n                [cx, cy] = data;\n                break;\n            case 'l':\n                cx += data[0];\n                cy += data[1];\n                out.push({ key: 'L', data: [cx, cy] });\n                break;\n            case 'C':\n                out.push({ key: 'C', data: [...data] });\n                cx = data[4];\n                cy = data[5];\n                break;\n            case 'c': {\n                const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n                out.push({ key: 'C', data: newdata });\n                cx = newdata[4];\n                cy = newdata[5];\n                break;\n            }\n            case 'Q':\n                out.push({ key: 'Q', data: [...data] });\n                cx = data[2];\n                cy = data[3];\n                break;\n            case 'q': {\n                const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n                out.push({ key: 'Q', data: newdata });\n                cx = newdata[2];\n                cy = newdata[3];\n                break;\n            }\n            case 'A':\n                out.push({ key: 'A', data: [...data] });\n                cx = data[5];\n                cy = data[6];\n                break;\n            case 'a':\n                cx += data[5];\n                cy += data[6];\n                out.push({ key: 'A', data: [data[0], data[1], data[2], data[3], data[4], cx, cy] });\n                break;\n            case 'H':\n                out.push({ key: 'H', data: [...data] });\n                cx = data[0];\n                break;\n            case 'h':\n                cx += data[0];\n                out.push({ key: 'H', data: [cx] });\n                break;\n            case 'V':\n                out.push({ key: 'V', data: [...data] });\n                cy = data[0];\n                break;\n            case 'v':\n                cy += data[0];\n                out.push({ key: 'V', data: [cy] });\n                break;\n            case 'S':\n                out.push({ key: 'S', data: [...data] });\n                cx = data[2];\n                cy = data[3];\n                break;\n            case 's': {\n                const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n                out.push({ key: 'S', data: newdata });\n                cx = newdata[2];\n                cy = newdata[3];\n                break;\n            }\n            case 'T':\n                out.push({ key: 'T', data: [...data] });\n                cx = data[0];\n                cy = data[1];\n                break;\n            case 't':\n                cx += data[0];\n                cy += data[1];\n                out.push({ key: 'T', data: [cx, cy] });\n                break;\n            case 'Z':\n            case 'z':\n                out.push({ key: 'Z', data: [] });\n                cx = subx;\n                cy = suby;\n                break;\n        }\n    }\n    return out;\n}\n","// Normalize path to include only M, L, C, and Z commands\nexport function normalize(segments) {\n    const out = [];\n    let lastType = '';\n    let cx = 0, cy = 0;\n    let subx = 0, suby = 0;\n    let lcx = 0, lcy = 0;\n    for (const { key, data } of segments) {\n        switch (key) {\n            case 'M':\n                out.push({ key: 'M', data: [...data] });\n                [cx, cy] = data;\n                [subx, suby] = data;\n                break;\n            case 'C':\n                out.push({ key: 'C', data: [...data] });\n                cx = data[4];\n                cy = data[5];\n                lcx = data[2];\n                lcy = data[3];\n                break;\n            case 'L':\n                out.push({ key: 'L', data: [...data] });\n                [cx, cy] = data;\n                break;\n            case 'H':\n                cx = data[0];\n                out.push({ key: 'L', data: [cx, cy] });\n                break;\n            case 'V':\n                cy = data[0];\n                out.push({ key: 'L', data: [cx, cy] });\n                break;\n            case 'S': {\n                let cx1 = 0, cy1 = 0;\n                if (lastType === 'C' || lastType === 'S') {\n                    cx1 = cx + (cx - lcx);\n                    cy1 = cy + (cy - lcy);\n                }\n                else {\n                    cx1 = cx;\n                    cy1 = cy;\n                }\n                out.push({ key: 'C', data: [cx1, cy1, ...data] });\n                lcx = data[0];\n                lcy = data[1];\n                cx = data[2];\n                cy = data[3];\n                break;\n            }\n            case 'T': {\n                const [x, y] = data;\n                let x1 = 0, y1 = 0;\n                if (lastType === 'Q' || lastType === 'T') {\n                    x1 = cx + (cx - lcx);\n                    y1 = cy + (cy - lcy);\n                }\n                else {\n                    x1 = cx;\n                    y1 = cy;\n                }\n                const cx1 = cx + 2 * (x1 - cx) / 3;\n                const cy1 = cy + 2 * (y1 - cy) / 3;\n                const cx2 = x + 2 * (x1 - x) / 3;\n                const cy2 = y + 2 * (y1 - y) / 3;\n                out.push({ key: 'C', data: [cx1, cy1, cx2, cy2, x, y] });\n                lcx = x1;\n                lcy = y1;\n                cx = x;\n                cy = y;\n                break;\n            }\n            case 'Q': {\n                const [x1, y1, x, y] = data;\n                const cx1 = cx + 2 * (x1 - cx) / 3;\n                const cy1 = cy + 2 * (y1 - cy) / 3;\n                const cx2 = x + 2 * (x1 - x) / 3;\n                const cy2 = y + 2 * (y1 - y) / 3;\n                out.push({ key: 'C', data: [cx1, cy1, cx2, cy2, x, y] });\n                lcx = x1;\n                lcy = y1;\n                cx = x;\n                cy = y;\n                break;\n            }\n            case 'A': {\n                const r1 = Math.abs(data[0]);\n                const r2 = Math.abs(data[1]);\n                const angle = data[2];\n                const largeArcFlag = data[3];\n                const sweepFlag = data[4];\n                const x = data[5];\n                const y = data[6];\n                if (r1 === 0 || r2 === 0) {\n                    out.push({ key: 'C', data: [cx, cy, x, y, x, y] });\n                    cx = x;\n                    cy = y;\n                }\n                else {\n                    if (cx !== x || cy !== y) {\n                        const curves = arcToCubicCurves(cx, cy, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\n                        curves.forEach(function (curve) {\n                            out.push({ key: 'C', data: curve });\n                        });\n                        cx = x;\n                        cy = y;\n                    }\n                }\n                break;\n            }\n            case 'Z':\n                out.push({ key: 'Z', data: [] });\n                cx = subx;\n                cy = suby;\n                break;\n        }\n        lastType = key;\n    }\n    return out;\n}\nfunction degToRad(degrees) {\n    return (Math.PI * degrees) / 180;\n}\nfunction rotate(x, y, angleRad) {\n    const X = x * Math.cos(angleRad) - y * Math.sin(angleRad);\n    const Y = x * Math.sin(angleRad) + y * Math.cos(angleRad);\n    return [X, Y];\n}\nfunction arcToCubicCurves(x1, y1, x2, y2, r1, r2, angle, largeArcFlag, sweepFlag, recursive) {\n    const angleRad = degToRad(angle);\n    let params = [];\n    let f1 = 0, f2 = 0, cx = 0, cy = 0;\n    if (recursive) {\n        [f1, f2, cx, cy] = recursive;\n    }\n    else {\n        [x1, y1] = rotate(x1, y1, -angleRad);\n        [x2, y2] = rotate(x2, y2, -angleRad);\n        const x = (x1 - x2) / 2;\n        const y = (y1 - y2) / 2;\n        let h = (x * x) / (r1 * r1) + (y * y) / (r2 * r2);\n        if (h > 1) {\n            h = Math.sqrt(h);\n            r1 = h * r1;\n            r2 = h * r2;\n        }\n        const sign = (largeArcFlag === sweepFlag) ? -1 : 1;\n        const r1Pow = r1 * r1;\n        const r2Pow = r2 * r2;\n        const left = r1Pow * r2Pow - r1Pow * y * y - r2Pow * x * x;\n        const right = r1Pow * y * y + r2Pow * x * x;\n        const k = sign * Math.sqrt(Math.abs(left / right));\n        cx = k * r1 * y / r2 + (x1 + x2) / 2;\n        cy = k * -r2 * x / r1 + (y1 + y2) / 2;\n        f1 = Math.asin(parseFloat(((y1 - cy) / r2).toFixed(9)));\n        f2 = Math.asin(parseFloat(((y2 - cy) / r2).toFixed(9)));\n        if (x1 < cx) {\n            f1 = Math.PI - f1;\n        }\n        if (x2 < cx) {\n            f2 = Math.PI - f2;\n        }\n        if (f1 < 0) {\n            f1 = Math.PI * 2 + f1;\n        }\n        if (f2 < 0) {\n            f2 = Math.PI * 2 + f2;\n        }\n        if (sweepFlag && f1 > f2) {\n            f1 = f1 - Math.PI * 2;\n        }\n        if (!sweepFlag && f2 > f1) {\n            f2 = f2 - Math.PI * 2;\n        }\n    }\n    let df = f2 - f1;\n    if (Math.abs(df) > (Math.PI * 120 / 180)) {\n        const f2old = f2;\n        const x2old = x2;\n        const y2old = y2;\n        if (sweepFlag && f2 > f1) {\n            f2 = f1 + (Math.PI * 120 / 180) * (1);\n        }\n        else {\n            f2 = f1 + (Math.PI * 120 / 180) * (-1);\n        }\n        x2 = cx + r1 * Math.cos(f2);\n        y2 = cy + r2 * Math.sin(f2);\n        params = arcToCubicCurves(x2, y2, x2old, y2old, r1, r2, angle, 0, sweepFlag, [f2, f2old, cx, cy]);\n    }\n    df = f2 - f1;\n    const c1 = Math.cos(f1);\n    const s1 = Math.sin(f1);\n    const c2 = Math.cos(f2);\n    const s2 = Math.sin(f2);\n    const t = Math.tan(df / 4);\n    const hx = 4 / 3 * r1 * t;\n    const hy = 4 / 3 * r2 * t;\n    const m1 = [x1, y1];\n    const m2 = [x1 + hx * s1, y1 - hy * c1];\n    const m3 = [x2 + hx * s2, y2 - hy * c2];\n    const m4 = [x2, y2];\n    m2[0] = 2 * m1[0] - m2[0];\n    m2[1] = 2 * m1[1] - m2[1];\n    if (recursive) {\n        return [m2, m3, m4].concat(params);\n    }\n    else {\n        params = [m2, m3, m4].concat(params);\n        const curves = [];\n        for (let i = 0; i < params.length; i += 3) {\n            const r1 = rotate(params[i][0], params[i][1], angleRad);\n            const r2 = rotate(params[i + 1][0], params[i + 1][1], angleRad);\n            const r3 = rotate(params[i + 2][0], params[i + 2][1], angleRad);\n            curves.push([r1[0], r1[1], r2[0], r2[1], r3[0], r3[1]]);\n        }\n        return curves;\n    }\n}\n","import { getFiller } from './fillers/filler.js';\nimport { Random } from './math.js';\nimport { parsePath, normalize, absolutize } from 'path-data-parser';\nconst helper = {\n    randOffset,\n    randOffsetWithRange,\n    ellipse,\n    doubleLineOps: doubleLineFillOps,\n};\nexport function line(x1, y1, x2, y2, o) {\n    return { type: 'path', ops: _doubleLine(x1, y1, x2, y2, o) };\n}\nexport function linearPath(points, close, o) {\n    const len = (points || []).length;\n    if (len > 2) {\n        const ops = [];\n        for (let i = 0; i < (len - 1); i++) {\n            ops.push(..._doubleLine(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1], o));\n        }\n        if (close) {\n            ops.push(..._doubleLine(points[len - 1][0], points[len - 1][1], points[0][0], points[0][1], o));\n        }\n        return { type: 'path', ops };\n    }\n    else if (len === 2) {\n        return line(points[0][0], points[0][1], points[1][0], points[1][1], o);\n    }\n    return { type: 'path', ops: [] };\n}\nexport function polygon(points, o) {\n    return linearPath(points, true, o);\n}\nexport function rectangle(x, y, width, height, o) {\n    const points = [\n        [x, y],\n        [x + width, y],\n        [x + width, y + height],\n        [x, y + height],\n    ];\n    return polygon(points, o);\n}\nexport function curve(points, o) {\n    let o1 = _curveWithOffset(points, 1 * (1 + o.roughness * 0.2), o);\n    if (!o.disableMultiStroke) {\n        const o2 = _curveWithOffset(points, 1.5 * (1 + o.roughness * 0.22), cloneOptionsAlterSeed(o));\n        o1 = o1.concat(o2);\n    }\n    return { type: 'path', ops: o1 };\n}\nexport function ellipse(x, y, width, height, o) {\n    const params = generateEllipseParams(width, height, o);\n    return ellipseWithParams(x, y, o, params).opset;\n}\nexport function generateEllipseParams(width, height, o) {\n    const psq = Math.sqrt(Math.PI * 2 * Math.sqrt((Math.pow(width / 2, 2) + Math.pow(height / 2, 2)) / 2));\n    const stepCount = Math.ceil(Math.max(o.curveStepCount, (o.curveStepCount / Math.sqrt(200)) * psq));\n    const increment = (Math.PI * 2) / stepCount;\n    let rx = Math.abs(width / 2);\n    let ry = Math.abs(height / 2);\n    const curveFitRandomness = 1 - o.curveFitting;\n    rx += _offsetOpt(rx * curveFitRandomness, o);\n    ry += _offsetOpt(ry * curveFitRandomness, o);\n    return { increment, rx, ry };\n}\nexport function ellipseWithParams(x, y, o, ellipseParams) {\n    const [ap1, cp1] = _computeEllipsePoints(ellipseParams.increment, x, y, ellipseParams.rx, ellipseParams.ry, 1, ellipseParams.increment * _offset(0.1, _offset(0.4, 1, o), o), o);\n    let o1 = _curve(ap1, null, o);\n    if ((!o.disableMultiStroke) && (o.roughness !== 0)) {\n        const [ap2] = _computeEllipsePoints(ellipseParams.increment, x, y, ellipseParams.rx, ellipseParams.ry, 1.5, 0, o);\n        const o2 = _curve(ap2, null, o);\n        o1 = o1.concat(o2);\n    }\n    return {\n        estimatedPoints: cp1,\n        opset: { type: 'path', ops: o1 },\n    };\n}\nexport function arc(x, y, width, height, start, stop, closed, roughClosure, o) {\n    const cx = x;\n    const cy = y;\n    let rx = Math.abs(width / 2);\n    let ry = Math.abs(height / 2);\n    rx += _offsetOpt(rx * 0.01, o);\n    ry += _offsetOpt(ry * 0.01, o);\n    let strt = start;\n    let stp = stop;\n    while (strt < 0) {\n        strt += Math.PI * 2;\n        stp += Math.PI * 2;\n    }\n    if ((stp - strt) > (Math.PI * 2)) {\n        strt = 0;\n        stp = Math.PI * 2;\n    }\n    const ellipseInc = (Math.PI * 2) / o.curveStepCount;\n    const arcInc = Math.min(ellipseInc / 2, (stp - strt) / 2);\n    const ops = _arc(arcInc, cx, cy, rx, ry, strt, stp, 1, o);\n    if (!o.disableMultiStroke) {\n        const o2 = _arc(arcInc, cx, cy, rx, ry, strt, stp, 1.5, o);\n        ops.push(...o2);\n    }\n    if (closed) {\n        if (roughClosure) {\n            ops.push(..._doubleLine(cx, cy, cx + rx * Math.cos(strt), cy + ry * Math.sin(strt), o), ..._doubleLine(cx, cy, cx + rx * Math.cos(stp), cy + ry * Math.sin(stp), o));\n        }\n        else {\n            ops.push({ op: 'lineTo', data: [cx, cy] }, { op: 'lineTo', data: [cx + rx * Math.cos(strt), cy + ry * Math.sin(strt)] });\n        }\n    }\n    return { type: 'path', ops };\n}\nexport function svgPath(path, o) {\n    const segments = normalize(absolutize(parsePath(path)));\n    const ops = [];\n    let first = [0, 0];\n    let current = [0, 0];\n    for (const { key, data } of segments) {\n        switch (key) {\n            case 'M': {\n                const ro = 1 * (o.maxRandomnessOffset || 0);\n                const pv = o.preserveVertices;\n                ops.push({ op: 'move', data: data.map((d) => d + (pv ? 0 : _offsetOpt(ro, o))) });\n                current = [data[0], data[1]];\n                first = [data[0], data[1]];\n                break;\n            }\n            case 'L':\n                ops.push(..._doubleLine(current[0], current[1], data[0], data[1], o));\n                current = [data[0], data[1]];\n                break;\n            case 'C': {\n                const [x1, y1, x2, y2, x, y] = data;\n                ops.push(..._bezierTo(x1, y1, x2, y2, x, y, current, o));\n                current = [x, y];\n                break;\n            }\n            case 'Z':\n                ops.push(..._doubleLine(current[0], current[1], first[0], first[1], o));\n                current = [first[0], first[1]];\n                break;\n        }\n    }\n    return { type: 'path', ops };\n}\n// Fills\nexport function solidFillPolygon(polygonList, o) {\n    const ops = [];\n    for (const points of polygonList) {\n        if (points.length) {\n            const offset = o.maxRandomnessOffset || 0;\n            const len = points.length;\n            if (len > 2) {\n                ops.push({ op: 'move', data: [points[0][0] + _offsetOpt(offset, o), points[0][1] + _offsetOpt(offset, o)] });\n                for (let i = 1; i < len; i++) {\n                    ops.push({ op: 'lineTo', data: [points[i][0] + _offsetOpt(offset, o), points[i][1] + _offsetOpt(offset, o)] });\n                }\n            }\n        }\n    }\n    return { type: 'fillPath', ops };\n}\nexport function patternFillPolygons(polygonList, o) {\n    return getFiller(o, helper).fillPolygons(polygonList, o);\n}\nexport function patternFillArc(x, y, width, height, start, stop, o) {\n    const cx = x;\n    const cy = y;\n    let rx = Math.abs(width / 2);\n    let ry = Math.abs(height / 2);\n    rx += _offsetOpt(rx * 0.01, o);\n    ry += _offsetOpt(ry * 0.01, o);\n    let strt = start;\n    let stp = stop;\n    while (strt < 0) {\n        strt += Math.PI * 2;\n        stp += Math.PI * 2;\n    }\n    if ((stp - strt) > (Math.PI * 2)) {\n        strt = 0;\n        stp = Math.PI * 2;\n    }\n    const increment = (stp - strt) / o.curveStepCount;\n    const points = [];\n    for (let angle = strt; angle <= stp; angle = angle + increment) {\n        points.push([cx + rx * Math.cos(angle), cy + ry * Math.sin(angle)]);\n    }\n    points.push([cx + rx * Math.cos(stp), cy + ry * Math.sin(stp)]);\n    points.push([cx, cy]);\n    return patternFillPolygons([points], o);\n}\nexport function randOffset(x, o) {\n    return _offsetOpt(x, o);\n}\nexport function randOffsetWithRange(min, max, o) {\n    return _offset(min, max, o);\n}\nexport function doubleLineFillOps(x1, y1, x2, y2, o) {\n    return _doubleLine(x1, y1, x2, y2, o, true);\n}\n// Private helpers\nfunction cloneOptionsAlterSeed(ops) {\n    const result = Object.assign({}, ops);\n    result.randomizer = undefined;\n    if (ops.seed) {\n        result.seed = ops.seed + 1;\n    }\n    return result;\n}\nfunction random(ops) {\n    if (!ops.randomizer) {\n        ops.randomizer = new Random(ops.seed || 0);\n    }\n    return ops.randomizer.next();\n}\nfunction _offset(min, max, ops, roughnessGain = 1) {\n    return ops.roughness * roughnessGain * ((random(ops) * (max - min)) + min);\n}\nfunction _offsetOpt(x, ops, roughnessGain = 1) {\n    return _offset(-x, x, ops, roughnessGain);\n}\nfunction _doubleLine(x1, y1, x2, y2, o, filling = false) {\n    const singleStroke = filling ? o.disableMultiStrokeFill : o.disableMultiStroke;\n    const o1 = _line(x1, y1, x2, y2, o, true, false);\n    if (singleStroke) {\n        return o1;\n    }\n    const o2 = _line(x1, y1, x2, y2, o, true, true);\n    return o1.concat(o2);\n}\nfunction _line(x1, y1, x2, y2, o, move, overlay) {\n    const lengthSq = Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2);\n    const length = Math.sqrt(lengthSq);\n    let roughnessGain = 1;\n    if (length < 200) {\n        roughnessGain = 1;\n    }\n    else if (length > 500) {\n        roughnessGain = 0.4;\n    }\n    else {\n        roughnessGain = (-0.0016668) * length + 1.233334;\n    }\n    let offset = o.maxRandomnessOffset || 0;\n    if ((offset * offset * 100) > lengthSq) {\n        offset = length / 10;\n    }\n    const halfOffset = offset / 2;\n    const divergePoint = 0.2 + random(o) * 0.2;\n    let midDispX = o.bowing * o.maxRandomnessOffset * (y2 - y1) / 200;\n    let midDispY = o.bowing * o.maxRandomnessOffset * (x1 - x2) / 200;\n    midDispX = _offsetOpt(midDispX, o, roughnessGain);\n    midDispY = _offsetOpt(midDispY, o, roughnessGain);\n    const ops = [];\n    const randomHalf = () => _offsetOpt(halfOffset, o, roughnessGain);\n    const randomFull = () => _offsetOpt(offset, o, roughnessGain);\n    const preserveVertices = o.preserveVertices;\n    if (move) {\n        if (overlay) {\n            ops.push({\n                op: 'move', data: [\n                    x1 + (preserveVertices ? 0 : randomHalf()),\n                    y1 + (preserveVertices ? 0 : randomHalf()),\n                ],\n            });\n        }\n        else {\n            ops.push({\n                op: 'move', data: [\n                    x1 + (preserveVertices ? 0 : _offsetOpt(offset, o, roughnessGain)),\n                    y1 + (preserveVertices ? 0 : _offsetOpt(offset, o, roughnessGain)),\n                ],\n            });\n        }\n    }\n    if (overlay) {\n        ops.push({\n            op: 'bcurveTo',\n            data: [\n                midDispX + x1 + (x2 - x1) * divergePoint + randomHalf(),\n                midDispY + y1 + (y2 - y1) * divergePoint + randomHalf(),\n                midDispX + x1 + 2 * (x2 - x1) * divergePoint + randomHalf(),\n                midDispY + y1 + 2 * (y2 - y1) * divergePoint + randomHalf(),\n                x2 + (preserveVertices ? 0 : randomHalf()),\n                y2 + (preserveVertices ? 0 : randomHalf()),\n            ],\n        });\n    }\n    else {\n        ops.push({\n            op: 'bcurveTo',\n            data: [\n                midDispX + x1 + (x2 - x1) * divergePoint + randomFull(),\n                midDispY + y1 + (y2 - y1) * divergePoint + randomFull(),\n                midDispX + x1 + 2 * (x2 - x1) * divergePoint + randomFull(),\n                midDispY + y1 + 2 * (y2 - y1) * divergePoint + randomFull(),\n                x2 + (preserveVertices ? 0 : randomFull()),\n                y2 + (preserveVertices ? 0 : randomFull()),\n            ],\n        });\n    }\n    return ops;\n}\nfunction _curveWithOffset(points, offset, o) {\n    const ps = [];\n    ps.push([\n        points[0][0] + _offsetOpt(offset, o),\n        points[0][1] + _offsetOpt(offset, o),\n    ]);\n    ps.push([\n        points[0][0] + _offsetOpt(offset, o),\n        points[0][1] + _offsetOpt(offset, o),\n    ]);\n    for (let i = 1; i < points.length; i++) {\n        ps.push([\n            points[i][0] + _offsetOpt(offset, o),\n            points[i][1] + _offsetOpt(offset, o),\n        ]);\n        if (i === (points.length - 1)) {\n            ps.push([\n                points[i][0] + _offsetOpt(offset, o),\n                points[i][1] + _offsetOpt(offset, o),\n            ]);\n        }\n    }\n    return _curve(ps, null, o);\n}\nfunction _curve(points, closePoint, o) {\n    const len = points.length;\n    const ops = [];\n    if (len > 3) {\n        const b = [];\n        const s = 1 - o.curveTightness;\n        ops.push({ op: 'move', data: [points[1][0], points[1][1]] });\n        for (let i = 1; (i + 2) < len; i++) {\n            const cachedVertArray = points[i];\n            b[0] = [cachedVertArray[0], cachedVertArray[1]];\n            b[1] = [cachedVertArray[0] + (s * points[i + 1][0] - s * points[i - 1][0]) / 6, cachedVertArray[1] + (s * points[i + 1][1] - s * points[i - 1][1]) / 6];\n            b[2] = [points[i + 1][0] + (s * points[i][0] - s * points[i + 2][0]) / 6, points[i + 1][1] + (s * points[i][1] - s * points[i + 2][1]) / 6];\n            b[3] = [points[i + 1][0], points[i + 1][1]];\n            ops.push({ op: 'bcurveTo', data: [b[1][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][1]] });\n        }\n        if (closePoint && closePoint.length === 2) {\n            const ro = o.maxRandomnessOffset;\n            ops.push({ op: 'lineTo', data: [closePoint[0] + _offsetOpt(ro, o), closePoint[1] + _offsetOpt(ro, o)] });\n        }\n    }\n    else if (len === 3) {\n        ops.push({ op: 'move', data: [points[1][0], points[1][1]] });\n        ops.push({\n            op: 'bcurveTo',\n            data: [\n                points[1][0], points[1][1],\n                points[2][0], points[2][1],\n                points[2][0], points[2][1],\n            ],\n        });\n    }\n    else if (len === 2) {\n        ops.push(..._doubleLine(points[0][0], points[0][1], points[1][0], points[1][1], o));\n    }\n    return ops;\n}\nfunction _computeEllipsePoints(increment, cx, cy, rx, ry, offset, overlap, o) {\n    const coreOnly = o.roughness === 0;\n    const corePoints = [];\n    const allPoints = [];\n    if (coreOnly) {\n        increment = increment / 4;\n        allPoints.push([\n            cx + rx * Math.cos(-increment),\n            cy + ry * Math.sin(-increment),\n        ]);\n        for (let angle = 0; angle <= Math.PI * 2; angle = angle + increment) {\n            const p = [\n                cx + rx * Math.cos(angle),\n                cy + ry * Math.sin(angle),\n            ];\n            corePoints.push(p);\n            allPoints.push(p);\n        }\n        allPoints.push([\n            cx + rx * Math.cos(0),\n            cy + ry * Math.sin(0),\n        ]);\n        allPoints.push([\n            cx + rx * Math.cos(increment),\n            cy + ry * Math.sin(increment),\n        ]);\n    }\n    else {\n        const radOffset = _offsetOpt(0.5, o) - (Math.PI / 2);\n        allPoints.push([\n            _offsetOpt(offset, o) + cx + 0.9 * rx * Math.cos(radOffset - increment),\n            _offsetOpt(offset, o) + cy + 0.9 * ry * Math.sin(radOffset - increment),\n        ]);\n        const endAngle = Math.PI * 2 + radOffset - 0.01;\n        for (let angle = radOffset; angle < endAngle; angle = angle + increment) {\n            const p = [\n                _offsetOpt(offset, o) + cx + rx * Math.cos(angle),\n                _offsetOpt(offset, o) + cy + ry * Math.sin(angle),\n            ];\n            corePoints.push(p);\n            allPoints.push(p);\n        }\n        allPoints.push([\n            _offsetOpt(offset, o) + cx + rx * Math.cos(radOffset + Math.PI * 2 + overlap * 0.5),\n            _offsetOpt(offset, o) + cy + ry * Math.sin(radOffset + Math.PI * 2 + overlap * 0.5),\n        ]);\n        allPoints.push([\n            _offsetOpt(offset, o) + cx + 0.98 * rx * Math.cos(radOffset + overlap),\n            _offsetOpt(offset, o) + cy + 0.98 * ry * Math.sin(radOffset + overlap),\n        ]);\n        allPoints.push([\n            _offsetOpt(offset, o) + cx + 0.9 * rx * Math.cos(radOffset + overlap * 0.5),\n            _offsetOpt(offset, o) + cy + 0.9 * ry * Math.sin(radOffset + overlap * 0.5),\n        ]);\n    }\n    return [allPoints, corePoints];\n}\nfunction _arc(increment, cx, cy, rx, ry, strt, stp, offset, o) {\n    const radOffset = strt + _offsetOpt(0.1, o);\n    const points = [];\n    points.push([\n        _offsetOpt(offset, o) + cx + 0.9 * rx * Math.cos(radOffset - increment),\n        _offsetOpt(offset, o) + cy + 0.9 * ry * Math.sin(radOffset - increment),\n    ]);\n    for (let angle = radOffset; angle <= stp; angle = angle + increment) {\n        points.push([\n            _offsetOpt(offset, o) + cx + rx * Math.cos(angle),\n            _offsetOpt(offset, o) + cy + ry * Math.sin(angle),\n        ]);\n    }\n    points.push([\n        cx + rx * Math.cos(stp),\n        cy + ry * Math.sin(stp),\n    ]);\n    points.push([\n        cx + rx * Math.cos(stp),\n        cy + ry * Math.sin(stp),\n    ]);\n    return _curve(points, null, o);\n}\nfunction _bezierTo(x1, y1, x2, y2, x, y, current, o) {\n    const ops = [];\n    const ros = [o.maxRandomnessOffset || 1, (o.maxRandomnessOffset || 1) + 0.3];\n    let f = [0, 0];\n    const iterations = o.disableMultiStroke ? 1 : 2;\n    const preserveVertices = o.preserveVertices;\n    for (let i = 0; i < iterations; i++) {\n        if (i === 0) {\n            ops.push({ op: 'move', data: [current[0], current[1]] });\n        }\n        else {\n            ops.push({ op: 'move', data: [current[0] + (preserveVertices ? 0 : _offsetOpt(ros[0], o)), current[1] + (preserveVertices ? 0 : _offsetOpt(ros[0], o))] });\n        }\n        f = preserveVertices ? [x, y] : [x + _offsetOpt(ros[i], o), y + _offsetOpt(ros[i], o)];\n        ops.push({\n            op: 'bcurveTo',\n            data: [\n                x1 + _offsetOpt(ros[i], o), y1 + _offsetOpt(ros[i], o),\n                x2 + _offsetOpt(ros[i], o), y2 + _offsetOpt(ros[i], o),\n                f[0], f[1],\n            ],\n        });\n    }\n    return ops;\n}\n","function clone(p) {\n    return [...p];\n}\nexport function curveToBezier(pointsIn, curveTightness = 0) {\n    const len = pointsIn.length;\n    if (len < 3) {\n        throw new Error('A curve must have at least three points.');\n    }\n    const out = [];\n    if (len === 3) {\n        out.push(clone(pointsIn[0]), clone(pointsIn[1]), clone(pointsIn[2]), clone(pointsIn[2]));\n    }\n    else {\n        const points = [];\n        points.push(pointsIn[0], pointsIn[0]);\n        for (let i = 1; i < pointsIn.length; i++) {\n            points.push(pointsIn[i]);\n            if (i === (pointsIn.length - 1)) {\n                points.push(pointsIn[i]);\n            }\n        }\n        const b = [];\n        const s = 1 - curveTightness;\n        out.push(clone(points[0]));\n        for (let i = 1; (i + 2) < points.length; i++) {\n            const cachedVertArray = points[i];\n            b[0] = [cachedVertArray[0], cachedVertArray[1]];\n            b[1] = [cachedVertArray[0] + (s * points[i + 1][0] - s * points[i - 1][0]) / 6, cachedVertArray[1] + (s * points[i + 1][1] - s * points[i - 1][1]) / 6];\n            b[2] = [points[i + 1][0] + (s * points[i][0] - s * points[i + 2][0]) / 6, points[i + 1][1] + (s * points[i][1] - s * points[i + 2][1]) / 6];\n            b[3] = [points[i + 1][0], points[i + 1][1]];\n            out.push(b[1], b[2], b[3]);\n        }\n    }\n    return out;\n}\n","// distance between 2 points\nfunction distance(p1, p2) {\n    return Math.sqrt(distanceSq(p1, p2));\n}\n// distance between 2 points squared\nfunction distanceSq(p1, p2) {\n    return Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2);\n}\n// Sistance squared from a point p to the line segment vw\nfunction distanceToSegmentSq(p, v, w) {\n    const l2 = distanceSq(v, w);\n    if (l2 === 0) {\n        return distanceSq(p, v);\n    }\n    let t = ((p[0] - v[0]) * (w[0] - v[0]) + (p[1] - v[1]) * (w[1] - v[1])) / l2;\n    t = Math.max(0, Math.min(1, t));\n    return distanceSq(p, lerp(v, w, t));\n}\nfunction lerp(a, b, t) {\n    return [\n        a[0] + (b[0] - a[0]) * t,\n        a[1] + (b[1] - a[1]) * t,\n    ];\n}\n// Adapted from https://seant23.wordpress.com/2010/11/12/offset-bezier-curves/\nfunction flatness(points, offset) {\n    const p1 = points[offset + 0];\n    const p2 = points[offset + 1];\n    const p3 = points[offset + 2];\n    const p4 = points[offset + 3];\n    let ux = 3 * p2[0] - 2 * p1[0] - p4[0];\n    ux *= ux;\n    let uy = 3 * p2[1] - 2 * p1[1] - p4[1];\n    uy *= uy;\n    let vx = 3 * p3[0] - 2 * p4[0] - p1[0];\n    vx *= vx;\n    let vy = 3 * p3[1] - 2 * p4[1] - p1[1];\n    vy *= vy;\n    if (ux < vx) {\n        ux = vx;\n    }\n    if (uy < vy) {\n        uy = vy;\n    }\n    return ux + uy;\n}\nfunction getPointsOnBezierCurveWithSplitting(points, offset, tolerance, newPoints) {\n    const outPoints = newPoints || [];\n    if (flatness(points, offset) < tolerance) {\n        const p0 = points[offset + 0];\n        if (outPoints.length) {\n            const d = distance(outPoints[outPoints.length - 1], p0);\n            if (d > 1) {\n                outPoints.push(p0);\n            }\n        }\n        else {\n            outPoints.push(p0);\n        }\n        outPoints.push(points[offset + 3]);\n    }\n    else {\n        // subdivide\n        const t = .5;\n        const p1 = points[offset + 0];\n        const p2 = points[offset + 1];\n        const p3 = points[offset + 2];\n        const p4 = points[offset + 3];\n        const q1 = lerp(p1, p2, t);\n        const q2 = lerp(p2, p3, t);\n        const q3 = lerp(p3, p4, t);\n        const r1 = lerp(q1, q2, t);\n        const r2 = lerp(q2, q3, t);\n        const red = lerp(r1, r2, t);\n        getPointsOnBezierCurveWithSplitting([p1, q1, r1, red], 0, tolerance, outPoints);\n        getPointsOnBezierCurveWithSplitting([red, r2, q3, p4], 0, tolerance, outPoints);\n    }\n    return outPoints;\n}\nexport function simplify(points, distance) {\n    return simplifyPoints(points, 0, points.length, distance);\n}\n// Ramer–Douglas–Peucker algorithm\n// https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm\nfunction simplifyPoints(points, start, end, epsilon, newPoints) {\n    const outPoints = newPoints || [];\n    // find the most distance point from the endpoints\n    const s = points[start];\n    const e = points[end - 1];\n    let maxDistSq = 0;\n    let maxNdx = 1;\n    for (let i = start + 1; i < end - 1; ++i) {\n        const distSq = distanceToSegmentSq(points[i], s, e);\n        if (distSq > maxDistSq) {\n            maxDistSq = distSq;\n            maxNdx = i;\n        }\n    }\n    // if that point is too far, split\n    if (Math.sqrt(maxDistSq) > epsilon) {\n        simplifyPoints(points, start, maxNdx + 1, epsilon, outPoints);\n        simplifyPoints(points, maxNdx, end, epsilon, outPoints);\n    }\n    else {\n        if (!outPoints.length) {\n            outPoints.push(s);\n        }\n        outPoints.push(e);\n    }\n    return outPoints;\n}\nexport function pointsOnBezierCurves(points, tolerance = 0.15, distance) {\n    const newPoints = [];\n    const numSegments = (points.length - 1) / 3;\n    for (let i = 0; i < numSegments; i++) {\n        const offset = i * 3;\n        getPointsOnBezierCurveWithSplitting(points, offset, tolerance, newPoints);\n    }\n    if (distance && distance > 0) {\n        return simplifyPoints(newPoints, 0, newPoints.length, distance);\n    }\n    return newPoints;\n}\n","import { pointsOnBezierCurves, simplify } from 'points-on-curve';\nimport { parsePath, absolutize, normalize } from 'path-data-parser';\nexport function pointsOnPath(path, tolerance, distance) {\n    const segments = parsePath(path);\n    const normalized = normalize(absolutize(segments));\n    const sets = [];\n    let currentPoints = [];\n    let start = [0, 0];\n    let pendingCurve = [];\n    const appendPendingCurve = () => {\n        if (pendingCurve.length >= 4) {\n            currentPoints.push(...pointsOnBezierCurves(pendingCurve, tolerance));\n        }\n        pendingCurve = [];\n    };\n    const appendPendingPoints = () => {\n        appendPendingCurve();\n        if (currentPoints.length) {\n            sets.push(currentPoints);\n            currentPoints = [];\n        }\n    };\n    for (const { key, data } of normalized) {\n        switch (key) {\n            case 'M':\n                appendPendingPoints();\n                start = [data[0], data[1]];\n                currentPoints.push(start);\n                break;\n            case 'L':\n                appendPendingCurve();\n                currentPoints.push([data[0], data[1]]);\n                break;\n            case 'C':\n                if (!pendingCurve.length) {\n                    const lastPoint = currentPoints.length ? currentPoints[currentPoints.length - 1] : start;\n                    pendingCurve.push([lastPoint[0], lastPoint[1]]);\n                }\n                pendingCurve.push([data[0], data[1]]);\n                pendingCurve.push([data[2], data[3]]);\n                pendingCurve.push([data[4], data[5]]);\n                break;\n            case 'Z':\n                appendPendingCurve();\n                currentPoints.push([start[0], start[1]]);\n                break;\n        }\n    }\n    appendPendingPoints();\n    if (!distance) {\n        return sets;\n    }\n    const out = [];\n    for (const set of sets) {\n        const simplifiedSet = simplify(set, distance);\n        if (simplifiedSet.length) {\n            out.push(simplifiedSet);\n        }\n    }\n    return out;\n}\n","import { line, solidFillPolygon, patternFillPolygons, rectangle, ellipseWithParams, generateEllipseParams, linearPath, arc, patternFillArc, curve, svgPath } from './renderer.js';\nimport { randomSeed } from './math.js';\nimport { curveToBezier } from 'points-on-curve/lib/curve-to-bezier.js';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { pointsOnPath } from 'points-on-path';\nconst NOS = 'none';\nexport class RoughGenerator {\n    constructor(config) {\n        this.defaultOptions = {\n            maxRandomnessOffset: 2,\n            roughness: 1,\n            bowing: 1,\n            stroke: '#000',\n            strokeWidth: 1,\n            curveTightness: 0,\n            curveFitting: 0.95,\n            curveStepCount: 9,\n            fillStyle: 'hachure',\n            fillWeight: -1,\n            hachureAngle: -41,\n            hachureGap: -1,\n            dashOffset: -1,\n            dashGap: -1,\n            zigzagOffset: -1,\n            seed: 0,\n            disableMultiStroke: false,\n            disableMultiStrokeFill: false,\n            preserveVertices: false,\n            fixedDecimalPlaceDigits: 3\n        };\n        this.config = config || {};\n        if (this.config.options) {\n            this.defaultOptions = this._o(this.config.options);\n        }\n    }\n    static newSeed() {\n        return randomSeed();\n    }\n    _o(options) {\n        return options ? Object.assign({}, this.defaultOptions, options) : this.defaultOptions;\n    }\n    _d(shape, sets, options) {\n        return { shape, sets: sets || [], options: options || this.defaultOptions };\n    }\n    line(x1, y1, x2, y2, options) {\n        const o = this._o(options);\n        return this._d('line', [line(x1, y1, x2, y2, o)], o);\n    }\n    rectangle(x, y, width, height, options) {\n        const o = this._o(options);\n        const paths = [];\n        const outline = rectangle(x, y, width, height, o);\n        if (o.fill) {\n            const points = [[x, y], [x + width, y], [x + width, y + height], [x, y + height]];\n            if (o.fillStyle === 'solid') {\n                paths.push(solidFillPolygon([points], o));\n            }\n            else {\n                paths.push(patternFillPolygons([points], o));\n            }\n        }\n        if (o.stroke !== NOS) {\n            paths.push(outline);\n        }\n        return this._d('rectangle', paths, o);\n    }\n    ellipse(x, y, width, height, options) {\n        const o = this._o(options);\n        const paths = [];\n        const ellipseParams = generateEllipseParams(width, height, o);\n        const ellipseResponse = ellipseWithParams(x, y, o, ellipseParams);\n        if (o.fill) {\n            if (o.fillStyle === 'solid') {\n                const shape = ellipseWithParams(x, y, o, ellipseParams).opset;\n                shape.type = 'fillPath';\n                paths.push(shape);\n            }\n            else {\n                paths.push(patternFillPolygons([ellipseResponse.estimatedPoints], o));\n            }\n        }\n        if (o.stroke !== NOS) {\n            paths.push(ellipseResponse.opset);\n        }\n        return this._d('ellipse', paths, o);\n    }\n    circle(x, y, diameter, options) {\n        const ret = this.ellipse(x, y, diameter, diameter, options);\n        ret.shape = 'circle';\n        return ret;\n    }\n    linearPath(points, options) {\n        const o = this._o(options);\n        return this._d('linearPath', [linearPath(points, false, o)], o);\n    }\n    arc(x, y, width, height, start, stop, closed = false, options) {\n        const o = this._o(options);\n        const paths = [];\n        const outline = arc(x, y, width, height, start, stop, closed, true, o);\n        if (closed && o.fill) {\n            if (o.fillStyle === 'solid') {\n                const fillOptions = Object.assign({}, o);\n                fillOptions.disableMultiStroke = true;\n                const shape = arc(x, y, width, height, start, stop, true, false, fillOptions);\n                shape.type = 'fillPath';\n                paths.push(shape);\n            }\n            else {\n                paths.push(patternFillArc(x, y, width, height, start, stop, o));\n            }\n        }\n        if (o.stroke !== NOS) {\n            paths.push(outline);\n        }\n        return this._d('arc', paths, o);\n    }\n    curve(points, options) {\n        const o = this._o(options);\n        const paths = [];\n        const outline = curve(points, o);\n        if (o.fill && o.fill !== NOS && points.length >= 3) {\n            const bcurve = curveToBezier(points);\n            const polyPoints = pointsOnBezierCurves(bcurve, 10, (1 + o.roughness) / 2);\n            if (o.fillStyle === 'solid') {\n                paths.push(solidFillPolygon([polyPoints], o));\n            }\n            else {\n                paths.push(patternFillPolygons([polyPoints], o));\n            }\n        }\n        if (o.stroke !== NOS) {\n            paths.push(outline);\n        }\n        return this._d('curve', paths, o);\n    }\n    polygon(points, options) {\n        const o = this._o(options);\n        const paths = [];\n        const outline = linearPath(points, true, o);\n        if (o.fill) {\n            if (o.fillStyle === 'solid') {\n                paths.push(solidFillPolygon([points], o));\n            }\n            else {\n                paths.push(patternFillPolygons([points], o));\n            }\n        }\n        if (o.stroke !== NOS) {\n            paths.push(outline);\n        }\n        return this._d('polygon', paths, o);\n    }\n    path(d, options) {\n        const o = this._o(options);\n        const paths = [];\n        if (!d) {\n            return this._d('path', paths, o);\n        }\n        d = (d || '').replace(/\\n/g, ' ').replace(/(-\\s)/g, '-').replace('/(\\s\\s)/g', ' ');\n        const hasFill = o.fill && o.fill !== 'transparent' && o.fill !== NOS;\n        const hasStroke = o.stroke !== NOS;\n        const simplified = !!(o.simplification && (o.simplification < 1));\n        const distance = simplified ? (4 - 4 * (o.simplification)) : ((1 + o.roughness) / 2);\n        const sets = pointsOnPath(d, 1, distance);\n        if (hasFill) {\n            if (o.fillStyle === 'solid') {\n                paths.push(solidFillPolygon(sets, o));\n            }\n            else {\n                paths.push(patternFillPolygons(sets, o));\n            }\n        }\n        if (hasStroke) {\n            if (simplified) {\n                sets.forEach((set) => {\n                    paths.push(linearPath(set, false, o));\n                });\n            }\n            else {\n                paths.push(svgPath(d, o));\n            }\n        }\n        return this._d('path', paths, o);\n    }\n    opsToPath(drawing, fixedDecimals) {\n        let path = '';\n        for (const item of drawing.ops) {\n            const data = ((typeof fixedDecimals === 'number') && fixedDecimals >= 0) ? (item.data.map((d) => +d.toFixed(fixedDecimals))) : item.data;\n            switch (item.op) {\n                case 'move':\n                    path += `M${data[0]} ${data[1]} `;\n                    break;\n                case 'bcurveTo':\n                    path += `C${data[0]} ${data[1]}, ${data[2]} ${data[3]}, ${data[4]} ${data[5]} `;\n                    break;\n                case 'lineTo':\n                    path += `L${data[0]} ${data[1]} `;\n                    break;\n            }\n        }\n        return path.trim();\n    }\n    toPaths(drawable) {\n        const sets = drawable.sets || [];\n        const o = drawable.options || this.defaultOptions;\n        const paths = [];\n        for (const drawing of sets) {\n            let path = null;\n            switch (drawing.type) {\n                case 'path':\n                    path = {\n                        type: 'path',\n                        d: this.opsToPath(drawing, o.fixedDecimalPlaceDigits),\n                        stroke: o.stroke,\n                        strokeWidth: o.strokeWidth,\n                        fill: NOS,\n                    };\n                    break;\n                case 'fillPath':\n                    path = {\n                        type: 'fillPath',\n                        d: this.opsToPath(drawing, o.fixedDecimalPlaceDigits),\n                        stroke: NOS,\n                        strokeWidth: 0,\n                        fill: o.fill || NOS,\n                    };\n                    break;\n                case 'fillSketch':\n                    path = this.fillSketch(drawing, o);\n                    break;\n            }\n            if (path) {\n                paths.push(path);\n            }\n        }\n        return paths;\n    }\n    fillSketch(drawing, o) {\n        let fweight = o.fillWeight;\n        if (fweight < 0) {\n            fweight = o.strokeWidth / 2;\n        }\n        return {\n            type: 'fillSketch',\n            d: this.opsToPath(drawing, o.fixedDecimalPlaceDigits),\n            stroke: o.fill || NOS,\n            strokeWidth: fweight,\n            fill: NOS,\n        };\n    }\n}\n","import type { InstanceProps } from './types'\nimport React from 'react'\n\nexport const isFun = (val: any) => typeof val === 'function'\n\nexport function shallowEqual(options1: InstanceProps | undefined | null, options2: InstanceProps | undefined | null) {\n  if (options1 === options2) {\n    return true\n  }\n  if (options1 == null || options2 == null) {\n    return false\n  }\n  const keys1 = Object.keys(options1)\n  const keys2 = Object.keys(options2)\n\n  if (keys1.length !== keys2.length) {\n    return false\n  }\n\n  return keys1.every(key => options1[key] === options2[key])\n}\n\nconst pointSplit = /\\s+|\\s*,\\s*/\nexport function parsePoints(points: string) {\n  const pts: [number, number][] = []\n  const coord = points.split(pointSplit)\n  for (let i = 0; i < coord.length; i += 2) {\n    pts.push([+coord[i], +coord[i + 1]])\n  }\n  return pts\n}\n\nexport function isReact19() {\n  return React.version.startsWith('19.')\n}\n","import type { PathInfo } from 'roughjs/bin/core'\nimport type {\n  InstanceProps,\n  InstanceWithRRF,\n  Options,\n  RoughOptions,\n  SVGShapeProps,\n} from './types'\nimport { RoughGenerator } from 'roughjs/bin/generator'\nimport {\n  FILL_CSS_VARIABLE,\n  FILL_OPACITY_CSS_VARIABLE,\n  SVG_NAMESPACE,\n} from './constants'\nimport { diffNormalizedProps } from './props'\nimport { parsePoints, shallowEqual } from './utils'\n\ntype Drawable = ReturnType<RoughGenerator['path']>\n\nfunction getDrawable(generator: RoughGenerator, props: SVGShapeProps, options: RoughOptions): Drawable | null {\n  switch (props.type) {\n    case 'path': {\n      const { d, fill, stroke } = props\n      if (!d) {\n        return null\n      }\n      return generator.path(d, {\n        fill,\n        stroke,\n        ...options,\n      })\n    }\n    case 'circle': {\n      const { cx, cy, r, fill, stroke } = props\n      return generator.circle(cx, cy, r * 2, {\n        fill,\n        stroke,\n        ...options,\n      })\n    }\n    case 'line': {\n      const { x1, y1, x2, y2, stroke } = props\n      return generator.line(x1, y1, x2, y2, {\n        stroke,\n        ...options,\n      })\n    }\n    case 'rect': {\n      const { x, y, width, height, fill, stroke } = props\n      return generator.rectangle(x, y, width, height, {\n        fill,\n        stroke,\n        ...options,\n      })\n    }\n    case 'ellipse': {\n      const { cx, cy, rx, ry, fill, stroke } = props\n      return generator.ellipse(cx, cy, rx * 2, ry * 2, {\n        fill,\n        stroke,\n        ...options,\n      })\n    }\n    case 'polygon': {\n      const { points, fill, stroke } = props\n      const pts = parsePoints(points)\n      return generator.polygon(pts, {\n        fill,\n        stroke,\n        ...options,\n      })\n    }\n    case 'polyline': {\n      const { points, fill, stroke } = props\n      const pts = parsePoints(points)\n      return generator.linearPath(pts, {\n        fill,\n        stroke,\n        ...options,\n      })\n    }\n    default:\n      return null\n  }\n}\n\nfunction getRoughOptions(options: Options, shapeProps: SVGShapeProps, props: InstanceProps): RoughOptions {\n  if (typeof options === 'function') {\n    const { stroke, fill, fillOpacity, ...shape } = shapeProps\n    return options(shape, props)\n  }\n  return options\n}\n\nfunction normalizePathInfo(pathInfo: PathInfo, shapeProps: SVGShapeProps, options: RoughOptions) {\n  const { type, strokeWidth, fill, ...rest } = pathInfo\n  const pathProps: InstanceProps = rest\n  if (type === 'fillSketch') {\n    const { fillOpacity } = shapeProps\n    pathProps['stroke-opacity'] = fillOpacity || `var(${FILL_OPACITY_CSS_VARIABLE})`\n    pathProps['stroke-width'] = strokeWidth\n    pathProps.fill = fill\n  }\n  else {\n    if (type === 'path') {\n      const { strokeLineDash, strokeLineDashOffset } = options\n      if (strokeLineDash) {\n        pathProps['stroke-dasharray'] = strokeLineDash.join(' ')\n      }\n      if (strokeLineDashOffset) {\n        pathProps['stroke-dashoffset'] = strokeLineDashOffset\n      }\n    }\n    if (fill !== `var(${FILL_CSS_VARIABLE})`) {\n      pathProps.fill = fill\n    }\n  }\n  return pathProps\n}\n\nexport function diffShape(domElement: SVGElement, prevShapeProps: SVGShapeProps | null, nextShapeProps: SVGShapeProps, props: InstanceProps, options: Options) {\n  const roughOptions = getRoughOptions(options, nextShapeProps, props)\n  const prevRoughOptions = (<any>domElement)._rrf_options\n  if (\n    shallowEqual(prevShapeProps, nextShapeProps)\n    && shallowEqual(prevRoughOptions, roughOptions)\n  ) {\n    return\n  }\n  (<any>domElement)._rrf_options = roughOptions\n  const generator = new RoughGenerator()\n  const drawable = getDrawable(generator, nextShapeProps, roughOptions)\n  let pathInfos: PathInfo[] = []\n  if (drawable) {\n    pathInfos = generator\n      .toPaths(drawable)\n      .filter(({ fill, stroke }) => fill !== 'none' || stroke !== 'none')\n  }\n\n  const { children } = domElement\n\n  const end = Math.max(pathInfos.length, domElement.children.length)\n  for (let i = 0; i < end; i++) {\n    if (i >= pathInfos.length) {\n      domElement.removeChild(domElement.lastElementChild!)\n      continue\n    }\n    if (i >= children.length) {\n      domElement.appendChild(\n        domElement.ownerDocument.createElementNS(SVG_NAMESPACE, 'path'),\n      )\n    }\n    const child = children[i]\n    const pathProps = normalizePathInfo(\n      pathInfos[i],\n      nextShapeProps,\n      roughOptions,\n    )\n    diffNormalizedProps(\n      child as InstanceWithRRF,\n      (child as any)._pathProps || {},\n      pathProps,\n    );\n    (child as any)._pathProps = pathProps\n  }\n}\n","// The MIT License (MIT)\n\n// Copyright (c) 2015-present Jason Miller\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// almost all code is from preact, modified for react-rough-fiber\nimport type {\n  InstanceProps,\n  InstanceWithRRF,\n  Options,\n  RRFEvent,\n  SVGShape,\n  SVGShapeProps,\n  SVGShapeType,\n} from './types'\nimport {\n  CAMEL_PROPS,\n  CAMEL_REPLACE,\n  FILL_CSS_VARIABLE,\n  FILL_OPACITY_CSS_VARIABLE,\n  IS_NON_DIMENSIONAL,\n  ON_ANI,\n  SVG_SHAPE_MAP,\n} from './constants'\nimport { diffShape } from './shape'\n\nexport function normalizeProps(\n  type: string,\n  props: InstanceProps,\n  inDefs: boolean,\n): [InstanceProps, SVGShapeProps | null] {\n  const normalizedProps: InstanceProps = {}\n  const isShapeType = type in SVG_SHAPE_MAP\n  const shapeProps: SVGShapeProps | null = isShapeType\n    ? {\n        fill: `var(${FILL_CSS_VARIABLE})`,\n        ...SVG_SHAPE_MAP[type as SVGShapeType],\n      }\n    : null\n\n  for (let propName in props) {\n    let value: any = props[propName as keyof typeof props]\n\n    if (!inDefs && shapeProps) {\n      if (\n        propName !== 'type'\n        && propName in SVG_SHAPE_MAP[type as SVGShapeType]\n      ) {\n        const propValue\n          = propName === 'd' || propName === 'points'\n            ? value\n            : Number(value) || 0\n        shapeProps[propName as keyof SVGShape] = propValue\n        continue\n      }\n      if (\n        propName === 'fill'\n        || propName === 'stroke'\n        || propName === 'fillOpacity'\n      ) {\n        shapeProps[propName] = value\n      }\n    }\n\n    if (\n      (propName === 'value' && 'defaultValue' in props && value == null)\n      // Emulate React's behavior of not rendering the contents of noscript tags on the client.\n      || (propName === 'children' && type === 'noscript')\n      || propName === 'class'\n      || propName === 'className'\n    ) {\n      // Skip applying value if it is null/undefined and we already set\n      // a default value\n      continue\n    }\n\n    const lowerCased = propName.toLowerCase()\n    if (\n      propName === 'defaultValue'\n      && 'value' in props\n      && props.value == null\n    ) {\n      // `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\n      // `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\n      propName = 'value'\n    }\n    else if (propName === 'download' && value === true) {\n      // Calling `setAttribute` with a truthy value will lead to it being\n      // passed as a stringified value, e.g. `download=\"true\"`. React\n      // converts it to an empty string instead, otherwise the attribute\n      // value will be used as the file name and the file will be called\n      // \"true\" upon downloading it.\n      value = ''\n    }\n    else if (lowerCased === 'ondoubleclick') {\n      propName = 'ondblclick'\n    }\n    else if (lowerCased === 'onfocus') {\n      propName = 'onfocusin'\n    }\n    else if (lowerCased === 'onblur') {\n      propName = 'onfocusout'\n    }\n    else if (ON_ANI.test(propName)) {\n      propName = lowerCased\n    }\n    else if (!type.includes('-') && CAMEL_PROPS.test(propName)) {\n      propName = propName.replace(CAMEL_REPLACE, '-$&').toLowerCase()\n    }\n    else if (value === null) {\n      value = undefined\n    }\n\n    normalizedProps[propName] = value\n  }\n\n  if (\n    props['class' as keyof typeof props]\n    && !props['className' as keyof typeof props]\n  ) {\n    normalizedProps.class = props['class' as keyof typeof props]\n    Object.defineProperty(normalizedProps, 'className', {\n      enumerable: false,\n      configurable: true,\n      get() {\n        return this.class\n      },\n    })\n  }\n  else if (\n    props['className' as keyof typeof props]\n    && !props['class' as keyof typeof props]\n  ) {\n    normalizedProps.class = normalizedProps['className' as keyof typeof props]\n      = props['className' as keyof typeof props]\n  }\n  else if (\n    props['class' as keyof typeof props]\n    && props['className' as keyof typeof props]\n  ) {\n    normalizedProps.class = normalizedProps.className\n      = props['className' as keyof typeof props]\n  }\n\n  // a trick for roughjs to set fill\n  // when fillStyle !== solid, roughjs will use stroke to draw the shape fill content\n  // In this situation, we need to set the fill color to be the same as the stroke color.\n  // we use CSS variable to set the fill color\n  // if an svg/g element has a fill color, we set it to css variable FILL_CSS_VARIABLE\n  let fill = normalizedProps.fill\n  let fillOpacity = normalizedProps['fill-opacity']\n  if ('style' in normalizedProps) {\n    const style = normalizedProps.style\n    if (style) {\n      if ('fill' in style) {\n        fill = style.fill\n        if (shapeProps) {\n          shapeProps.fill = style.fill\n        }\n      }\n      if ('fillOpacity' in style) {\n        fillOpacity = style.fillOpacity\n        if (shapeProps) {\n          shapeProps.fillOpacity = style.fillOpacity\n        }\n      }\n    }\n  }\n  // the default value for \"fill\" is black\n  if (!fill && type === 'svg') {\n    fill = '#000'\n  }\n  if (!fillOpacity && type === 'svg') {\n    fillOpacity = 1\n  }\n  if (!isShapeType) {\n    normalizedProps.style = {\n      ...normalizedProps.style,\n    }\n    if (fill) {\n      normalizedProps.style[FILL_CSS_VARIABLE] = fill\n    }\n    if (fillOpacity) {\n      normalizedProps.style[FILL_OPACITY_CSS_VARIABLE] = fillOpacity\n    }\n  }\n\n  return [normalizedProps, shapeProps]\n}\n\nexport function diffNormalizedProps(\n  domElement: InstanceWithRRF,\n  prevProps: InstanceProps,\n  nextProps: InstanceProps,\n) {\n  for (const propName in prevProps) {\n    if (\n      propName !== 'children'\n      && propName !== 'key'\n      && !(propName in nextProps)\n    ) {\n      setProperty(\n        domElement,\n        propName,\n        null,\n        prevProps[propName as keyof typeof prevProps],\n      )\n    }\n  }\n\n  for (const propName in nextProps) {\n    const prevProp = prevProps[propName as keyof typeof prevProps]\n    const nextProp = nextProps[propName as keyof typeof nextProps]\n    if (propName === 'children') {\n      if (typeof nextProp === 'number' || typeof nextProp === 'string') {\n        domElement.textContent = nextProp.toString()\n      }\n    }\n    else if (\n      propName !== 'key'\n      && propName !== 'value'\n      && propName !== 'checked'\n      && prevProp !== nextProp\n    ) {\n      setProperty(domElement, propName, nextProp, prevProp)\n    }\n  }\n}\n\nexport function diffProps(\n  type: string,\n  domElement: InstanceWithRRF,\n  newProps: InstanceProps,\n  oldProps: InstanceProps | null,\n  options: Options,\n) {\n  const inDefs = domElement._rrf_inDefs\n  type = type.toLowerCase()\n  const [nextProps, nextShapeProps] = normalizeProps(type, newProps, inDefs)\n  const [prevProps, prevShapeProps] = oldProps\n    ? normalizeProps(type, oldProps, inDefs)\n    : [{}, null]\n\n  if (!inDefs && type in SVG_SHAPE_MAP) {\n    diffShape(\n      domElement as SVGElement,\n      prevShapeProps,\n      nextShapeProps!,\n      newProps,\n      options,\n    )\n  }\n\n  diffNormalizedProps(domElement, prevProps, nextProps)\n}\n\nfunction setStyle(style: CSSStyleDeclaration, key: string, value: any) {\n  if (key[0] === '-') {\n    style.setProperty(key, value == null ? '' : value)\n  }\n  else if (value == null) {\n    (<any>style)[key] = ''\n  }\n  else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n    (<any>style)[key] = value\n  }\n  else {\n    (<any>style)[key] = `${value}px`\n  }\n}\n\nexport function setProperty(\n  domElement: InstanceWithRRF,\n  name: string,\n  value: any,\n  oldValue: any,\n) {\n  let useCapture\n\n  if (name === 'style') {\n    if (typeof value == 'string') {\n      domElement.style.cssText = value\n    }\n    else {\n      if (typeof oldValue == 'string') {\n        domElement.style.cssText = oldValue = ''\n      }\n\n      if (oldValue) {\n        for (name in oldValue) {\n          if (!(value && name in value)) {\n            setStyle(domElement.style, name, '')\n          }\n        }\n      }\n\n      if (value) {\n        for (name in value) {\n          if (!oldValue || value[name] !== oldValue[name]) {\n            setStyle(domElement.style, name, value[name])\n          }\n        }\n      }\n    }\n  }\n  // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n  else if (name[0] === 'o' && name[1] === 'n') {\n    useCapture = name !== (name = name.replace(/Capture$/, ''))\n\n    // Infer correct casing for DOM built-in events:\n    if (name.toLowerCase() in domElement)\n      name = name.toLowerCase().slice(2)\n    else name = name.slice(2)\n\n    if (!domElement._rrf_listeners)\n      domElement._rrf_listeners = {}\n    domElement._rrf_listeners[name + useCapture] = value\n\n    if (value) {\n      if (!oldValue) {\n        const handler = useCapture ? eventProxyCapture : eventProxy\n        domElement.addEventListener(name, handler, useCapture)\n      }\n    }\n    else {\n      const handler = useCapture ? eventProxyCapture : eventProxy\n      domElement.removeEventListener(name, handler, useCapture)\n    }\n  }\n  else if (name !== 'dangerouslySetInnerHTML') {\n    if (\n      name !== 'width'\n      && name !== 'height'\n      && name !== 'href'\n      && name !== 'list'\n      && name !== 'form'\n      // Default value in browsers is `-1` and an empty string is\n      // cast to `0` instead\n      && name !== 'tabIndex'\n      && name !== 'download'\n      && name in domElement\n    ) {\n      try {\n        (<any>domElement)[name] = value == null ? '' : value\n        return\n      }\n      // eslint-disable-next-line unused-imports/no-unused-vars\n      catch (e) {\n      }\n    }\n\n    // aria- and data- attributes have no boolean representation.\n    // A `false` value is different from the attribute not being\n    // present, so we can't remove it. For non-boolean aria\n    // attributes we could treat false as a removal, but the\n    // amount of exceptions would cost too many bytes. On top of\n    // that other frameworks generally stringify `false`.\n\n    if (typeof value === 'function') {\n      // never serialize functions as attribute values\n    }\n    else if (value != null && (value !== false || name[4] === '-')) {\n      domElement.setAttribute(name, value)\n    }\n    else {\n      domElement.removeAttribute(name)\n    }\n  }\n}\n\nfunction eventProxy(this: InstanceWithRRF, e: Event) {\n  const event = e as RRFEvent\n  event.persist = () => {}\n  return this._rrf_listeners[e.type + false](event)\n}\n\nfunction eventProxyCapture(this: InstanceWithRRF, e: Event) {\n  const event = e as RRFEvent\n  event.persist = () => {}\n  return this._rrf_listeners[e.type + true](event)\n}\n"],"mappings":"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","names":["line","polygon","helper","line","helper","line","helper","line","helper","line","helper","curve","r1","r2","distance","distance","distance"]}