{"version":3,"file":"image-tracer-nodejs.cjs","sources":["../../core/dist/index.mjs","../src/file-loader.ts","../src/image-tracer-nodejs-options.ts","../src/image-tracer-nodejs.ts","../src/index.ts"],"sourcesContent":["var RgbColorData;\n(function (RgbColorData) {\n    function toString(c) {\n        return `RgbColor(${c.r},${c.g},${c.b})`;\n    }\n    RgbColorData.toString = toString;\n})(RgbColorData || (RgbColorData = {}));\nclass RgbColor {\n    r;\n    g;\n    b;\n    a;\n    /**\n     * If the `a` value is below this value, a color is considered invisible.\n     */\n    static MINIMUM_A = 13; // that is 0.05\n    constructor(r = 0, g = 0, b = 0, a = 255) {\n        this.r = r;\n        this.g = g;\n        this.b = b;\n        this.a = a;\n    }\n    static fromRgbColorData(c) {\n        return new RgbColor(c.r, c.g, c.b, c.a ?? 255);\n    }\n    static createRandomColor() {\n        const color = new RgbColor();\n        color.randomize();\n        return color;\n    }\n    static fromPixelArray(pixelData, pixelIndex, isRgba = true) {\n        const color = new RgbColor();\n        color.setFromPixelArray(pixelData, pixelIndex, isRgba);\n        return color;\n    }\n    static fromHex(hex) {\n        const values = hex.substring(1).match(/.{1,2}/g)?.map(n => parseInt(n, 16));\n        return RgbColor.fromPixelArray(values, 0, values.length > 3);\n    }\n    static buildColorAverage(counter) {\n        const r = Math.floor(counter.r / counter.n);\n        const g = Math.floor(counter.g / counter.n);\n        const b = Math.floor(counter.b / counter.n);\n        const a = Math.floor(counter.a / counter.n);\n        return new RgbColor(r, g, b, a);\n    }\n    isInvisible() {\n        return this.a < RgbColor.MINIMUM_A;\n    }\n    hasOpacity() {\n        return this.a < 255;\n    }\n    setFromColorCounts(counter) {\n        this.r = Math.floor(counter.r / counter.n);\n        this.g = Math.floor(counter.g / counter.n);\n        this.b = Math.floor(counter.b / counter.n);\n        this.a = Math.floor(counter.a / counter.n);\n    }\n    randomize() {\n        this.r = Math.floor(Math.random() * 256);\n        this.g = Math.floor(Math.random() * 256);\n        this.b = Math.floor(Math.random() * 256);\n        this.a = Math.floor(Math.random() * 128) + 128;\n    }\n    setFromPixelArray(pixelData, pixelIndex, isRgba = true) {\n        const pixelWidth = isRgba ? 4 : 3;\n        const offset = pixelIndex * pixelWidth;\n        this.r = pixelData[offset + 0];\n        this.g = pixelData[offset + 1];\n        this.b = pixelData[offset + 2];\n        this.a = isRgba ? pixelData[offset + 3] : 255;\n    }\n    get [Symbol.toStringTag]() {\n        return `RgbaColor(${this.r},${this.g},${this.b},${this.a})`;\n    }\n    calculateDistanceToPixelInArray(pixelData, pixelIndex, isRgba = true) {\n        const a = isRgba ? pixelData[pixelIndex + 3] : 255;\n        // In my experience, https://en.wikipedia.org/wiki/Rectilinear_distance works better than https://en.wikipedia.org/wiki/Euclidean_distance\n        return Math.abs(this.r - pixelData[pixelIndex])\n            + Math.abs(this.g - pixelData[pixelIndex + 1])\n            + Math.abs(this.b - pixelData[pixelIndex + 2])\n            + Math.abs(this.a - a);\n    }\n    equals(color) {\n        return this.r === color.r\n            && this.g === color.g\n            && this.b === color.b\n            && this.a === (color.a ?? 255);\n    }\n    toCssColor() {\n        return !this.hasOpacity() ? `rgb(${this.r},${this.g},${this.b})` : `rgba(${this.r},${this.g},${this.b},${this.a})`;\n    }\n    toCssColorHex() {\n        const int = this.toInt32();\n        let hex = int.toString(16);\n        const leadingZeros = (this.hasOpacity() ? 8 : 6) - hex.length;\n        if (leadingZeros > 0) {\n            hex = '0'.repeat(leadingZeros) + hex;\n        }\n        return '#' + hex.toUpperCase();\n    }\n    toInt32() {\n        if (!this.hasOpacity()) {\n            return ((this.r << 16) | (this.g << 8) | (this.b)) >>> 0; // keep unsigned\n        }\n        return ((this.r << 24) | (this.g << 16) | (this.b << 8) | this.a) >>> 0; // keep unsigned\n    }\n}\n\nvar ColorDistanceBuffering;\n(function (ColorDistanceBuffering) {\n    ColorDistanceBuffering[\"OFF\"] = \"off\";\n    ColorDistanceBuffering[\"ON\"] = \"on\";\n    ColorDistanceBuffering[\"REASONABLE\"] = \"reasonable\";\n})(ColorDistanceBuffering || (ColorDistanceBuffering = {}));\nclass ColorIndex {\n    rows; // palette color index for each pixel in the image\n    palette;\n    options;\n    verbose;\n    constructor(imageData, options, quantizeFunction) {\n        this.options = options;\n        this.verbose = options.verbose ?? false;\n        this.palette = this.buildPalette(imageData, quantizeFunction);\n        this.verbose && console.time(' - Color Quantization');\n        this.rows = this.buildColorData(imageData, this.palette);\n        this.verbose && console.timeEnd(' - Color Quantization');\n    }\n    /**\n     * @param imageData\n     * @returns\n     */\n    buildPalette(imageData, quantizeFunction) {\n        const numberOfColors = Math.max(this.options.numberOfColors, 2);\n        const palette = quantizeFunction(imageData, numberOfColors);\n        if (this.options.verbose) {\n            console.log(`Created palette with ${palette.length} colors.`);\n        }\n        return palette.map(c => (c instanceof RgbColor) ? c : RgbColor.fromRgbColorData(c));\n    }\n    /**\n     * Using a form of k-means clustering repeated options.colorClusteringCycles times. http://en.wikipedia.org/wiki/Color_quantization\n     *\n     *\n     * @param imageData\n     * @returns\n     */\n    buildColorData(imageData, palette) {\n        let imageColorIndex;\n        const numberOfCycles = Math.max(this.options.colorClusteringCycles, 1);\n        for (let cycle = 1; cycle <= numberOfCycles; cycle++) {\n            const isLastCycle = cycle === numberOfCycles;\n            const nextImageColorIndex = this.runClusteringCycle(imageData, palette, isLastCycle);\n            const isFinished = isLastCycle || (imageColorIndex && this.colorIndexesEqual(imageColorIndex, nextImageColorIndex));\n            imageColorIndex = nextImageColorIndex;\n            if (isFinished) {\n                this.options.verbose && console.log(`Ran ${cycle} clustering cycles`);\n                break;\n            }\n        }\n        return imageColorIndex;\n    }\n    runClusteringCycle(imageData, palette, isLastCycle) {\n        const colorIndex = this.buildImageColorIndex(imageData, palette);\n        const colorCounts = this.buildColorCounts(imageData, colorIndex, palette.length);\n        const numPixels = imageData.width * imageData.height;\n        this.adjustPaletteToColorAverages(palette, colorCounts, numPixels, isLastCycle);\n        return colorIndex;\n    }\n    colorIndexesEqual(i1, i2) {\n        if (i1.length !== i2.length) {\n            return false;\n        }\n        for (let rowIx = 0; rowIx < i1.length; rowIx++) {\n            const row1 = i1[rowIx];\n            const row2 = i2[rowIx];\n            if (row1.length !== row2.length) {\n                return false;\n            }\n            for (let colIx = 0; colIx < row1.length; colIx++) {\n                if (row1[colIx] !== row2[colIx]) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    adjustPaletteToColorAverages(palette, colorCounters, numPixels, isLastCycle) {\n        for (let k = 0; k < palette.length; k++) {\n            const counter = colorCounters[k];\n            const colorBelowThreshold = this.options.minColorQuota > 0 && counter.n / numPixels < this.options.minColorQuota;\n            if (colorBelowThreshold && !isLastCycle) {\n                palette[k].randomize();\n            }\n            else if (counter.n > 0) {\n                palette[k].setFromColorCounts(counter);\n            }\n        }\n    }\n    /**\n     * Maps each pixel in the image to the palette index of the closest color.\n     *\n     * @param imageData\n     * @param palette\n     * @returns\n     */\n    buildImageColorIndex(imageData, palette) {\n        const bufferingMode = this.options.colorDistanceBuffering;\n        const useBuffer = bufferingMode === ColorDistanceBuffering.ON ||\n            (bufferingMode === ColorDistanceBuffering.REASONABLE && palette.length >= 32);\n        return useBuffer ?\n            this.buildImageColorIndexBuffered(imageData, palette) :\n            this.buildImageColorIndexUnbuffered(imageData, palette);\n    }\n    buildImageColorIndexUnbuffered(imageData, palette) {\n        const imageColorIndex = this.initColorIndexArray(imageData.width, imageData.height);\n        for (let h = 0; h < imageData.height; h++) {\n            for (let w = 0; w < imageData.width; w++) {\n                const pixelOffset = (h * imageData.width + w) * 4;\n                const closestColorIx = this.findClosestPaletteColorIx(imageData, pixelOffset, palette);\n                imageColorIndex[h + 1][w + 1] = closestColorIx;\n            }\n        }\n        return imageColorIndex;\n    }\n    buildImageColorIndexBuffered(imageData, palette) {\n        const imageColorIndex = this.initColorIndexArray(imageData.width, imageData.height);\n        const closestColorMap = [];\n        let skips = 0, distinctValues = 0;\n        for (let h = 0; h < imageData.height; h++) {\n            for (let w = 0; w < imageData.width; w++) {\n                const pixelOffset = (h * imageData.width + w) * 4;\n                const colorId = this.getPixelColorId(imageData, pixelOffset);\n                if (closestColorMap[colorId] !== undefined) {\n                    skips++;\n                }\n                else {\n                    closestColorMap[colorId] = this.findClosestPaletteColorIx(imageData, pixelOffset, palette);\n                    distinctValues++;\n                }\n                imageColorIndex[h + 1][w + 1] = closestColorMap[colorId];\n            }\n        }\n        this.verbose && console.log(`Buffered ${distinctValues} colors to skip ${skips} comparisons (`, Math.round(100 * skips / (skips + distinctValues)), '%)');\n        return imageColorIndex;\n    }\n    getPixelColorId(imageData, pixelOffset) {\n        return ((imageData.data[pixelOffset] << 24)\n            | (imageData.data[pixelOffset + 1] << 16)\n            | (imageData.data[pixelOffset + 2] << 8)\n            | (imageData.data[pixelOffset + 3])) >>> 0;\n    }\n    initColorIndexArray(imgWidth, imgHeight) {\n        const imageColorIndex = [];\n        for (let h = 0; h < imgHeight + 2; h++) {\n            imageColorIndex[h] = new Array(imgWidth + 2).fill(-1);\n        }\n        return imageColorIndex;\n    }\n    buildColorCounts(imageData, imageColorIndex, numberOfColors) {\n        const colorCounts = this.initColorCounts(numberOfColors);\n        for (let h = 0; h < imageData.height; h++) {\n            for (let w = 0; w < imageData.width; w++) {\n                const closestColorIx = imageColorIndex[h + 1][w + 1];\n                const colorCounter = colorCounts[closestColorIx];\n                const pixelOffset = (h * imageData.width + w) * 4;\n                colorCounter.r += imageData.data[pixelOffset];\n                colorCounter.g += imageData.data[pixelOffset + 1];\n                colorCounter.b += imageData.data[pixelOffset + 2];\n                colorCounter.a += imageData.data[pixelOffset + 3];\n                colorCounter.n++;\n            }\n        }\n        return colorCounts;\n    }\n    initColorCounts(numberOfColors) {\n        const colorCounts = [];\n        for (let i = 0; i < numberOfColors; i++) {\n            colorCounts[i] = { r: 0, g: 0, b: 0, a: 0, n: 0 };\n        }\n        return colorCounts;\n    }\n    /**\n     * find closest color from palette by measuring (rectilinear) color distance between this pixel and all palette colors\n     * @param palette\n     * @param color\n     * @param pixelOffset\n     * @returns\n     */\n    findClosestPaletteColorIx(imageData, pixelOffset, palette) {\n        let closestColorIx = 0;\n        let closestDistance = 1024; // 4 * 256 is the maximum RGBA distance\n        for (let colorIx = 0; colorIx < palette.length; colorIx++) {\n            const color = palette[colorIx];\n            const distance = color.calculateDistanceToPixelInArray(imageData.data, pixelOffset);\n            if (distance >= closestDistance) {\n                continue;\n            }\n            closestDistance = distance;\n            closestColorIx = colorIx;\n        }\n        return closestColorIx;\n    }\n}\n\nvar Trajectory;\n(function (Trajectory) {\n    Trajectory[Trajectory[\"RIGHT\"] = 0] = \"RIGHT\";\n    Trajectory[Trajectory[\"DOWN_RIGHT\"] = 1] = \"DOWN_RIGHT\";\n    Trajectory[Trajectory[\"DOWN\"] = 2] = \"DOWN\";\n    Trajectory[Trajectory[\"DOWN_LEFT\"] = 3] = \"DOWN_LEFT\";\n    Trajectory[Trajectory[\"LEFT\"] = 4] = \"LEFT\";\n    Trajectory[Trajectory[\"UP_LEFT\"] = 5] = \"UP_LEFT\";\n    Trajectory[Trajectory[\"UP\"] = 6] = \"UP\";\n    Trajectory[Trajectory[\"UP_RIGHT\"] = 7] = \"UP_RIGHT\";\n    Trajectory[Trajectory[\"NONE\"] = 0] = \"NONE\";\n})(Trajectory || (Trajectory = {}));\nvar InterpolationMode;\n(function (InterpolationMode) {\n    InterpolationMode[\"OFF\"] = \"off\";\n    InterpolationMode[\"INTERPOLATE\"] = \"interpolate\";\n})(InterpolationMode || (InterpolationMode = {}));\nclass PointInterpolator {\n    interpolate(mode, paths, enhanceRightAngle) {\n        const interpolatedPaths = [];\n        for (const path of paths) {\n            const interpolatedPoints = this.interpolatePointsUsingMode(mode, path.points, enhanceRightAngle);\n            const interpolatedPath = {\n                points: interpolatedPoints,\n                boundingBox: path.boundingBox,\n                childHoles: path.childHoles,\n                isHole: path.isHole\n            };\n            interpolatedPaths.push(interpolatedPath);\n        }\n        return interpolatedPaths;\n    }\n    interpolatePointsUsingMode(mode, edgePoints, enhanceRightAngle) {\n        switch (mode) {\n            case InterpolationMode.OFF:\n                return edgePoints.map((ep, ix) => this.trajectoryPointFromEdgePoint(edgePoints, ix));\n            default:\n            case InterpolationMode.INTERPOLATE:\n                return this.buildInterpolatedPoints(edgePoints, enhanceRightAngle);\n        }\n    }\n    trajectoryPointFromEdgePoint(points, pointIx) {\n        const edgePoint = points[pointIx];\n        const nextIx = (pointIx + 1) % points.length;\n        const nextPoint = points[nextIx];\n        return {\n            x: edgePoint.x,\n            y: edgePoint.y,\n            data: this.geTrajectory(edgePoint.x, edgePoint.y, nextPoint.x, nextPoint.y)\n        };\n    }\n    buildInterpolatedPoints(edgePoints, enhanceRightAngle) {\n        const interpolatedPoints = [];\n        for (let pointIx = 0; pointIx < edgePoints.length; pointIx++) {\n            if (enhanceRightAngle && this.isRightAngle(edgePoints, pointIx)) {\n                const cornerPoint = this.buildCornerPoint(edgePoints, pointIx);\n                this.updateLastPointTrajectory(interpolatedPoints, edgePoints[pointIx]);\n                interpolatedPoints.push(cornerPoint);\n            }\n            const midPoint = this.interpolateNextTwoPoints(edgePoints, pointIx);\n            interpolatedPoints.push(midPoint);\n        }\n        return interpolatedPoints;\n    }\n    updateLastPointTrajectory(points, referencePoint) {\n        if (points.length === 0) {\n            return;\n        }\n        const lastPointIx = points.length - 1;\n        const lastPoint = points[lastPointIx];\n        lastPoint.data = this.geTrajectory(lastPoint.x, lastPoint.y, referencePoint.x, referencePoint.y);\n    }\n    interpolateNextTwoPoints(points, pointIx) {\n        const totalPoints = points.length;\n        const nextIx1 = (pointIx + 1) % totalPoints;\n        const nextIx2 = (pointIx + 2) % totalPoints;\n        const currentPoint = points[pointIx];\n        const nextPoint = points[nextIx1];\n        const nextNextPoint = points[nextIx2];\n        const midX = (currentPoint.x + nextPoint.x) / 2;\n        const midY = (currentPoint.y + nextPoint.y) / 2;\n        const nextMidX = (nextPoint.x + nextNextPoint.x) / 2;\n        const nextMidY = (nextPoint.y + nextNextPoint.y) / 2;\n        return {\n            x: midX,\n            y: midY,\n            data: this.geTrajectory(midX, midY, nextMidX, nextMidY)\n        };\n    }\n    isRightAngle(points, pointIx) {\n        const totalPoints = points.length;\n        const currentPoint = points[pointIx];\n        const nextIx1 = (pointIx + 1) % totalPoints;\n        const nextIx2 = (pointIx + 2) % totalPoints;\n        const prevIx1 = (pointIx - 1 + totalPoints) % totalPoints;\n        const prevIx2 = (pointIx - 2 + totalPoints) % totalPoints;\n        return ((currentPoint.x === points[prevIx2].x) &&\n            (currentPoint.x === points[prevIx1].x) &&\n            (currentPoint.y === points[nextIx1].y) &&\n            (currentPoint.y === points[nextIx2].y)) || ((currentPoint.y === points[prevIx2].y) &&\n            (currentPoint.y === points[prevIx1].y) &&\n            (currentPoint.x === points[nextIx1].x) &&\n            (currentPoint.x === points[nextIx2].x));\n    }\n    buildCornerPoint(points, pointIx) {\n        const nextIx1 = (pointIx + 1) % points.length;\n        const currentPoint = points[pointIx];\n        const nextPoint = points[nextIx1];\n        const midX = (currentPoint.x + nextPoint.x) / 2;\n        const midY = (currentPoint.y + nextPoint.y) / 2;\n        const trajectory = this.geTrajectory(currentPoint.x, currentPoint.y, midX, midY);\n        return {\n            x: currentPoint.x,\n            y: currentPoint.y,\n            data: trajectory,\n        };\n    }\n    geTrajectory(x1, y1, x2, y2) {\n        if (x1 < x2) {\n            if (y1 < y2) {\n                return Trajectory.DOWN_RIGHT;\n            }\n            if (y1 > y2) {\n                return Trajectory.UP_RIGHT;\n            }\n            return Trajectory.RIGHT;\n        }\n        else if (x1 > x2) {\n            if (y1 < y2) {\n                return Trajectory.DOWN_LEFT;\n            }\n            if (y1 > y2) {\n                return Trajectory.UP_LEFT;\n            }\n            return Trajectory.LEFT;\n        }\n        else {\n            if (y1 < y2) {\n                return Trajectory.DOWN;\n            }\n            if (y1 > y2) {\n                return Trajectory.UP;\n            }\n        }\n        return Trajectory.NONE;\n    }\n}\n\nvar TrimMode;\n(function (TrimMode) {\n    TrimMode[\"OFF\"] = \"off\";\n    TrimMode[\"KEEP_RATIO\"] = \"ratio\";\n    TrimMode[\"ALL\"] = \"all\";\n})(TrimMode || (TrimMode = {}));\nvar FillStyle;\n(function (FillStyle) {\n    FillStyle[\"FILL\"] = \"fill\";\n    FillStyle[\"STROKE\"] = \"stroke\";\n    FillStyle[\"STROKE_FILL\"] = \"stroke+fill\";\n})(FillStyle || (FillStyle = {}));\nconst SvgDrawerDefaultOptions = {\n    strokeWidth: 1,\n    lineFilter: false,\n    scale: 1,\n    decimalPlaces: 1,\n    viewBox: true,\n    desc: false,\n    segmentEndpointRadius: 0,\n    curveControlPointRadius: 0,\n    fillStyle: FillStyle.STROKE_FILL,\n    trim: TrimMode.OFF,\n};\n\nvar CreatePaletteMode;\n(function (CreatePaletteMode) {\n    CreatePaletteMode[\"GENERATE\"] = \"generate\";\n    CreatePaletteMode[\"SAMPLE\"] = \"sample\";\n    CreatePaletteMode[\"SCAN\"] = \"scan\";\n    CreatePaletteMode[\"PALETTE\"] = \"palette\";\n})(CreatePaletteMode || (CreatePaletteMode = {}));\nvar LayeringMode;\n(function (LayeringMode) {\n    LayeringMode[LayeringMode[\"SEQUENTIAL\"] = 1] = \"SEQUENTIAL\";\n    LayeringMode[LayeringMode[\"PARALLEL\"] = 2] = \"PARALLEL\";\n})(LayeringMode || (LayeringMode = {}));\nvar Options;\n(function (Options) {\n    /**\n     * Create full options object from partial\n     */\n    function buildFrom(options) {\n        return Object.assign({}, defaultOptions, options ?? {});\n    }\n    Options.buildFrom = buildFrom;\n    const defaultOptions = Object.assign(SvgDrawerDefaultOptions, {\n        // Tracing\n        lineErrorMargin: 1,\n        curveErrorMargin: 1,\n        minShapeOutline: 8,\n        enhanceRightAngles: true,\n        // Color quantization\n        colorSamplingMode: CreatePaletteMode.SCAN,\n        palette: null,\n        numberOfColors: 16,\n        minColorQuota: 0,\n        colorClusteringCycles: 3,\n        colorDistanceBuffering: ColorDistanceBuffering.REASONABLE,\n        // Layering method\n        layeringMode: LayeringMode.PARALLEL,\n        interpolation: InterpolationMode.INTERPOLATE,\n        // Blur\n        blurRadius: 0,\n        blurDelta: 20,\n        sharpen: false,\n        sharpenThreshold: 20,\n    });\n    const asPresets = (o) => o;\n    Options.Presets = asPresets({\n        default: defaultOptions,\n        posterized1: { colorSamplingMode: CreatePaletteMode.GENERATE, numberOfColors: 2 },\n        posterized2: { numberOfColors: 4, blurRadius: 5 },\n        curvy: { lineErrorMargin: 0.01, lineFilter: true, enhanceRightAngles: false },\n        sharp: { curveErrorMargin: 0.01, lineFilter: false },\n        detailed: { minShapeOutline: 0, decimalPlaces: 2, lineErrorMargin: 0.5, curveErrorMargin: 0.5, numberOfColors: 64 },\n        smoothed: { blurRadius: 5, blurDelta: 64 },\n        grayscale: { colorSamplingMode: CreatePaletteMode.GENERATE, colorClusteringCycles: 1, numberOfColors: 7 },\n        fixedpalette: { colorSamplingMode: CreatePaletteMode.GENERATE, colorClusteringCycles: 1, numberOfColors: 27 },\n        randomsampling1: { colorSamplingMode: CreatePaletteMode.SAMPLE, numberOfColors: 8 },\n        randomsampling2: { colorSamplingMode: CreatePaletteMode.SAMPLE, numberOfColors: 64 },\n        artistic1: { colorSamplingMode: CreatePaletteMode.GENERATE, colorClusteringCycles: 1, minShapeOutline: 0, blurRadius: 5, blurDelta: 64, lineErrorMargin: 0.01, lineFilter: true, numberOfColors: 16, strokeWidth: 2 },\n        artistic2: { curveErrorMargin: 0.01, colorSamplingMode: CreatePaletteMode.GENERATE, colorClusteringCycles: 1, numberOfColors: 4, strokeWidth: 0 },\n        artistic3: { curveErrorMargin: 10, lineErrorMargin: 10, numberOfColors: 8 },\n        artistic4: { curveErrorMargin: 10, lineErrorMargin: 10, numberOfColors: 64, blurRadius: 5, blurDelta: 256, strokeWidth: 2 },\n        posterized3: {\n            lineErrorMargin: 1, curveErrorMargin: 1, minShapeOutline: 20, enhanceRightAngles: true, colorSamplingMode: CreatePaletteMode.GENERATE, numberOfColors: 3,\n            minColorQuota: 0, colorClusteringCycles: 3, blurRadius: 3, blurDelta: 20, strokeWidth: 0, lineFilter: false,\n            decimalPlaces: 1, palette: [{ r: 0, g: 0, b: 100, a: 255 }, { r: 255, g: 255, b: 255, a: 255 }]\n        }\n    });\n})(Options || (Options = {}));\n\nconst SPEC_PALETTE = [\n    { r: 0, g: 0, b: 0, a: 255 }, { r: 128, g: 128, b: 128, a: 255 }, { r: 0, g: 0, b: 128, a: 255 }, { r: 64, g: 64, b: 128, a: 255 },\n    { r: 192, g: 192, b: 192, a: 255 }, { r: 255, g: 255, b: 255, a: 255 }, { r: 128, g: 128, b: 192, a: 255 }, { r: 0, g: 0, b: 192, a: 255 },\n    { r: 128, g: 0, b: 0, a: 255 }, { r: 128, g: 64, b: 64, a: 255 }, { r: 128, g: 0, b: 128, a: 255 }, { r: 168, g: 168, b: 168, a: 255 },\n    { r: 192, g: 128, b: 128, a: 255 }, { r: 192, g: 0, b: 0, a: 255 }, { r: 255, g: 255, b: 255, a: 255 }, { r: 0, g: 128, b: 0, a: 255 }\n];\nclass DivRenderer {\n    // Helper function: Drawing all edge node layers into a container\n    drawLayersToDiv(edgeRasters, scale, parentId) {\n        scale = scale || 1;\n        var w, h, i, j, k;\n        // Preparing container\n        var div;\n        if (parentId) {\n            div = document.getElementById(parentId);\n            if (!div) {\n                div = document.createElement('div');\n                div.id = parentId;\n                document.body.appendChild(div);\n            }\n        }\n        else {\n            div = document.createElement('div');\n            document.body.appendChild(div);\n        }\n        // Layers loop\n        for (k in edgeRasters) {\n            if (!edgeRasters.hasOwnProperty(k)) {\n                continue;\n            }\n            // width, height\n            w = edgeRasters[k][0].length;\n            h = edgeRasters[k].length;\n            // Creating new canvas for every layer\n            const canvas = document.createElement('canvas');\n            canvas.width = w * scale;\n            canvas.height = h * scale;\n            const context = this.getCanvasContext(canvas);\n            // Drawing\n            const palette = SPEC_PALETTE;\n            for (j = 0; j < h; j++) {\n                for (i = 0; i < w; i++) {\n                    const colorIndex = edgeRasters[k][j][i] % palette.length;\n                    const color = palette[colorIndex];\n                    context.fillStyle = this.toRgbaLiteral(color);\n                    context.fillRect(i * scale, j * scale, scale, scale);\n                }\n            }\n            // Appending canvas to container\n            div.appendChild(canvas);\n        }\n    }\n    // Convert color object to rgba string\n    toRgbaLiteral(c) {\n        return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';\n    }\n    // TODO check duplication\n    getCanvasContext(canvas) {\n        const context = canvas.getContext('2d');\n        if (!context) {\n            throw new Error('Could not read canvas');\n        }\n        return context;\n    }\n}\n\nclass EdgeRasterBuilder {\n    /**\n     *\n     * Builds one layer for each color in the given color index.\n     *\n     * @param colorIndex\n     * @returns\n     */\n    static buildForColors(colorIndex) {\n        // Creating layers for each indexed color in arr\n        const rows = colorIndex.rows;\n        const height = rows.length;\n        const width = rows[0].length;\n        // Create layers\n        const edgeRasters = [];\n        for (let colorId = 0; colorId < colorIndex.palette.length; colorId++) {\n            edgeRasters[colorId] = [];\n            for (let h = 0; h < height; h++) {\n                edgeRasters[colorId][h] = new Array(width).fill(0);\n            }\n        }\n        // Looping through all pixels and calculating edge node type\n        let n1, n2, n3, n4, n5, n6, n7, n8;\n        for (let h = 1; h < height - 1; h++) {\n            for (let w = 1; w < width - 1; w++) {\n                // This pixel's indexed color\n                const colorId = rows[h][w];\n                /**\n                 * n1 n2 n3\n                 * n4    n5\n                 * n6 n7 n8\n                 */\n                n1 = rows[h - 1][w - 1] === colorId ? 1 : 0;\n                n2 = rows[h - 1][w] === colorId ? 1 : 0;\n                n3 = rows[h - 1][w + 1] === colorId ? 1 : 0;\n                n4 = rows[h][w - 1] === colorId ? 1 : 0;\n                n5 = rows[h][w + 1] === colorId ? 1 : 0;\n                n6 = rows[h + 1][w - 1] === colorId ? 1 : 0;\n                n7 = rows[h + 1][w] === colorId ? 1 : 0;\n                n8 = rows[h + 1][w + 1] === colorId ? 1 : 0;\n                // this pixel's type and looking back on previous pixels\n                const edgeRaster = edgeRasters[colorId];\n                edgeRaster[h + 1][w + 1] = 1 + n5 * 2 + n8 * 4 + n7 * 8;\n                if (!n4) {\n                    edgeRaster[h + 1][w] = 0 + 2 + n7 * 4 + n6 * 8;\n                }\n                if (!n2) {\n                    edgeRaster[h][w + 1] = 0 + n3 * 2 + n5 * 4 + 8;\n                }\n                if (!n1) {\n                    edgeRaster[h][w] = 0 + n2 * 2 + 4 + n4 * 8;\n                }\n            }\n        }\n        return edgeRasters;\n    }\n    // 2. Layer separation and edge detection\n    // Edge node types ( ▓: this layer or 1; ░: not this layer or 0 )\n    // 12  ░░  ▓░  ░▓  ▓▓  ░░  ▓░  ░▓  ▓▓  ░░  ▓░  ░▓  ▓▓  ░░  ▓░  ░▓  ▓▓\n    // 48  ░░  ░░  ░░  ░░  ░▓  ░▓  ░▓  ░▓  ▓░  ▓░  ▓░  ▓░  ▓▓  ▓▓  ▓▓  ▓▓\n    //     0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15\n    static buildForColor(colorData, colorId) {\n        // Creating layers for each indexed color in arr\n        const rows = colorData.rows;\n        const height = rows.length;\n        const width = rows[0].length;\n        // Create layer\n        const edgeRaster = [];\n        for (let j = 0; j < height; j++) {\n            edgeRaster[j] = new Array(width).fill(0);\n        }\n        // Looping through all pixels and calculating edge node type\n        for (let h = 1; h < height; h++) {\n            for (let w = 1; w < width; w++) {\n                /*\n                 * current pixel is at 4:\n                 *  ░░ of 1 2\n                 *  ░▓    8 4\n                 */\n                edgeRaster[h][w] = ((rows[h - 1][w - 1] === colorId ? 1 : 0) +\n                    (rows[h - 1][w] === colorId ? 2 : 0) +\n                    (rows[h][w - 1] === colorId ? 8 : 0) +\n                    (rows[h][w] === colorId ? 4 : 0));\n            }\n        }\n        return edgeRaster;\n    }\n}\n\n// Lookup tables for pathscan\n// pathscan_combined_lookup[ arr[py][px] ][ dir ] = [nextarrpypx, nextdir, deltapx, deltapy];\nconst PATH_SCAN_COMBINED_LOOKUP = [\n    [[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]],\n    [[0, 1, 0, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [0, 2, -1, 0]],\n    [[-1, -1, -1, -1], [-1, -1, -1, -1], [0, 1, 0, -1], [0, 0, 1, 0]],\n    [[0, 0, 1, 0], [-1, -1, -1, -1], [0, 2, -1, 0], [-1, -1, -1, -1]],\n    [[-1, -1, -1, -1], [0, 0, 1, 0], [0, 3, 0, 1], [-1, -1, -1, -1]],\n    [[13, 3, 0, 1], [13, 2, -1, 0], [7, 1, 0, -1], [7, 0, 1, 0]],\n    [[-1, -1, -1, -1], [0, 1, 0, -1], [-1, -1, -1, -1], [0, 3, 0, 1]],\n    [[0, 3, 0, 1], [0, 2, -1, 0], [-1, -1, -1, -1], [-1, -1, -1, -1]],\n    [[0, 3, 0, 1], [0, 2, -1, 0], [-1, -1, -1, -1], [-1, -1, -1, -1]],\n    [[-1, -1, -1, -1], [0, 1, 0, -1], [-1, -1, -1, -1], [0, 3, 0, 1]],\n    [[11, 1, 0, -1], [14, 0, 1, 0], [14, 3, 0, 1], [11, 2, -1, 0]],\n    [[-1, -1, -1, -1], [0, 0, 1, 0], [0, 3, 0, 1], [-1, -1, -1, -1]],\n    [[0, 0, 1, 0], [-1, -1, -1, -1], [0, 2, -1, 0], [-1, -1, -1, -1]],\n    [[-1, -1, -1, -1], [-1, -1, -1, -1], [0, 1, 0, -1], [0, 0, 1, 0]],\n    [[0, 1, 0, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [0, 2, -1, 0]],\n    [[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]] // arr[py][px]===15 is invalid\n];\nclass AreaScanner {\n    /**\n     * 3. Walking through an edge node array, discarding edge node types 0 and 15 and creating paths from the rest.\n     *  Walk directions: 0 > ; 1 ^ ; 2 < ; 3 v\n     * @param edgeRaster\n     * @returns\n     */\n    scan(edgeRaster, pathMinLength) {\n        const width = edgeRaster[0].length;\n        const height = edgeRaster.length;\n        const paths = [];\n        let pathIx = 0;\n        for (let h = 0; h < height; h++) {\n            for (let w = 0; w < width; w++) {\n                const edge = edgeRaster[h][w];\n                /**\n                 * 12  ░░  ▓▓\n                 * 84  ░▓  ▓░\n                 *     4   11\n                 */\n                if (edge !== 4 && edge !== 11) {\n                    // Other values are not important\n                    continue;\n                }\n                // Init\n                let px = w;\n                let py = h;\n                const pointedArea = {\n                    points: [],\n                    boundingBox: [px, py, px, py],\n                    childHoles: [],\n                    isHole: (edge === 11)\n                };\n                paths[pathIx] = pointedArea;\n                let areaClosed = false;\n                let direction = 1;\n                // Path points loop\n                while (!areaClosed) {\n                    const edgeType = edgeRaster[py][px];\n                    this.addPointToArea(pointedArea, px - 1, py - 1, edgeType);\n                    // Next: look up the replacement, direction and coordinate changes = clear this cell, turn if required, walk forward\n                    const lookupRow = PATH_SCAN_COMBINED_LOOKUP[edgeType][direction];\n                    edgeRaster[py][px] = lookupRow[0];\n                    direction = lookupRow[1];\n                    px += lookupRow[2];\n                    py += lookupRow[3];\n                    // Close path\n                    if (px - 1 === pointedArea.points[0].x &&\n                        py - 1 === pointedArea.points[0].y) {\n                        areaClosed = true;\n                        // Discarding paths shorter than pathMinLength\n                        if (pointedArea.points.length < pathMinLength) {\n                            paths.pop();\n                            continue;\n                        }\n                        if (pointedArea.isHole) {\n                            // Finding the parent shape for this hole\n                            const parentId = this.findParentId(pointedArea, paths, pathIx, width, height);\n                            paths[parentId].childHoles.push(pathIx);\n                        }\n                        pathIx++;\n                    }\n                }\n            }\n        }\n        return paths;\n    }\n    addPointToArea(area, x, y, edgeType) {\n        const point = { x, y, data: edgeType };\n        // Bounding box\n        if (x < area.boundingBox[0]) {\n            area.boundingBox[0] = x;\n        }\n        if (y < area.boundingBox[1]) {\n            area.boundingBox[1] = y;\n        }\n        if (x > area.boundingBox[2]) {\n            area.boundingBox[2] = x;\n        }\n        if (y > area.boundingBox[3]) {\n            area.boundingBox[3] = y;\n        }\n        return area.points.push(point);\n    }\n    findParentId(path, paths, maxPath, w, h) {\n        let parentId = 0;\n        let parentbbox = [-1, -1, w + 1, h + 1];\n        for (let parentIx = 0; parentIx < maxPath; parentIx++) {\n            const parentPath = paths[parentIx];\n            if (!parentPath.isHole\n                && this.boundingBoxIncludes(parentPath.boundingBox, path.boundingBox)\n                && this.boundingBoxIncludes(parentbbox, parentPath.boundingBox)\n                && this.pointInPolygon(path.points[0], parentPath.points)) {\n                parentId = parentIx;\n                parentbbox = parentPath.boundingBox;\n            }\n        }\n        return parentId;\n    }\n    boundingBoxIncludes(parentbbox, childbbox) {\n        return ((parentbbox[0] < childbbox[0]) &&\n            (parentbbox[1] < childbbox[1]) &&\n            (parentbbox[2] > childbbox[2]) &&\n            (parentbbox[3] > childbbox[3]));\n    }\n    // Point in polygon test\n    pointInPolygon(point, path) {\n        let isIn = false;\n        for (let i = 0, j = path.length - 1; i < path.length; j = i++) {\n            isIn = (((path[i].y > point.y) !== (path[j].y > point.y)) &&\n                (point.x < (path[j].x - path[i].x) * (point.y - path[i].y) / (path[j].y - path[i].y) + path[i].x))\n                ? !isIn : isIn;\n        }\n        return isIn;\n    }\n}\n\nvar SvgLineAttributes;\n(function (SvgLineAttributes) {\n    function toString(la) {\n        const str = `${la.type} ${la.x1} ${la.y1} ${la.x2} ${la.y2}`;\n        if (la.type === 'L') {\n            return str;\n        }\n        return str + ` ${la.x3} ${la.y3}`;\n    }\n    SvgLineAttributes.toString = toString;\n})(SvgLineAttributes || (SvgLineAttributes = {}));\nclass PathTracer {\n    // 5. tracepath() : recursively trying to fit straight and quadratic spline segments on the 8 direction internode path\n    // 5.1. Find sequences of points with only 2 segment types\n    // 5.2. Fit a straight line on the sequence\n    // 5.3. If the straight line fails (distance error > lineErrorMargin), find the point with the biggest error\n    // 5.4. Fit a quadratic spline through errorpoint (project this to get controlpoint), then measure errors on every point in the sequence\n    // 5.5. If the spline fails (distance error > curveErrorMargin), find the point with the biggest error, set splitpoint = fitting point\n    // 5.6. Split sequence and recursively apply 5.2. - 5.6. to startpoint-splitpoint and splitpoint-endpoint sequences\n    trace(path, lineErrorMargin, curveErrorMargin) {\n        const pathCommands = [];\n        const points = [].concat(path.points);\n        points.push(points[0]); // we want to end on the point we started on\n        for (let sequenceStartIx = 0; sequenceStartIx < points.length - 1;) {\n            const nextSequenceStartIx = this.findNextSequenceStartIx(points, sequenceStartIx);\n            const commandSequence = this.getPathCommandsOfSequence(points, lineErrorMargin, curveErrorMargin, sequenceStartIx, nextSequenceStartIx);\n            pathCommands.push(...commandSequence);\n            sequenceStartIx = nextSequenceStartIx;\n        }\n        return {\n            lineAttributes: pathCommands,\n            boundingBox: path.boundingBox,\n            childHoles: path.childHoles,\n            isHole: path.isHole\n        };\n    }\n    /**\n     * Find sequence of points with 2 trajectories.\n     *\n     * @param points\n     * @param startIx\n     * @returns The index where the next sequence starts\n     */\n    findNextSequenceStartIx(points, startIx) {\n        const startTrajectory = points[startIx].data;\n        let nextIx = startIx + 1;\n        let nextPoint = points[nextIx];\n        let secondTrajectory = null;\n        while ((nextPoint.data === startTrajectory ||\n            nextPoint.data === secondTrajectory ||\n            secondTrajectory === null) && nextIx < points.length - 1) {\n            if (nextPoint.data !== startTrajectory &&\n                secondTrajectory === null) {\n                secondTrajectory = nextPoint.data;\n            }\n            nextIx++;\n            nextPoint = points[nextIx];\n        }\n        // the very last point is same as start point and part of the last sequence, no matter its type \n        return (nextIx === points.length - 2) ? nextIx + 1 : nextIx;\n    }\n    // 5.2. - 5.6. recursively fitting a straight or quadratic line segment on this sequence of path nodes,\n    // called from tracepath()\n    getPathCommandsOfSequence(points, lineErrorMargin, curveErrorMargin, sequenceStartIx, sequenceEndIx) {\n        if (sequenceEndIx > points.length || sequenceEndIx < 0) {\n            return [];\n        }\n        const isLineResult = this.checkSequenceFitsLine(points, lineErrorMargin, sequenceStartIx, sequenceEndIx);\n        if (typeof isLineResult === 'object') {\n            return [isLineResult];\n        }\n        const isCurveResult = this.checkSequenceFitsCurve(points, curveErrorMargin, sequenceStartIx, sequenceEndIx, isLineResult);\n        if (typeof isCurveResult === 'object') {\n            return [isCurveResult];\n        }\n        // 5.5. If the spline fails (distance error>curveErrorMargin), find the point with the biggest error\n        const splitPoint = isLineResult;\n        const seqSplit1 = this.getPathCommandsOfSequence(points, lineErrorMargin, curveErrorMargin, sequenceStartIx, splitPoint);\n        const seqSplit2 = this.getPathCommandsOfSequence(points, lineErrorMargin, curveErrorMargin, splitPoint, sequenceEndIx);\n        return seqSplit1.concat(seqSplit2);\n    }\n    checkSequenceFitsLine(points, lineErrorMargin, sequenceStartIx, sequenceEndIx) {\n        const sequenceLength = sequenceEndIx - sequenceStartIx;\n        const startPoint = points[sequenceStartIx];\n        const endPoint = points[sequenceEndIx];\n        const gainX = (endPoint.x - startPoint.x) / sequenceLength;\n        const gainY = (endPoint.y - startPoint.y) / sequenceLength;\n        // 5.2. Fit a straight line on the sequence\n        let isStraightLine = true;\n        let maxDiffIx = sequenceStartIx;\n        let maxDiff = 0;\n        for (let pointIx = sequenceStartIx + 1; pointIx < sequenceEndIx; pointIx++) {\n            const subsequenceLength = pointIx - sequenceStartIx;\n            const expectedX = startPoint.x + subsequenceLength * gainX;\n            const expectedY = startPoint.y + subsequenceLength * gainY;\n            const point = points[pointIx];\n            const diff = (point.x - expectedX) * (point.x - expectedX) + (point.y - expectedY) * (point.y - expectedY);\n            if (diff > lineErrorMargin) {\n                isStraightLine = false;\n            }\n            if (diff > maxDiff) {\n                maxDiffIx = pointIx;\n                maxDiff = diff;\n            }\n        }\n        if (!isStraightLine) {\n            return maxDiffIx;\n        }\n        return {\n            type: 'L',\n            x1: startPoint.x,\n            y1: startPoint.y,\n            x2: endPoint.x,\n            y2: endPoint.y\n        };\n    }\n    checkSequenceFitsCurve(points, curveErrorMargin, sequenceStartIx, sequenceEndIx, turningPointIx) {\n        const sequenceLength = sequenceEndIx - sequenceStartIx;\n        const startPoint = points[sequenceStartIx];\n        const endPoint = points[sequenceEndIx];\n        let isCurve = true;\n        let maxDiff = 0;\n        let maxDiffIx = sequenceStartIx;\n        // 5.4. Fit a quadratic spline through this point, measure errors on every point in the sequence\n        // helpers and projecting to get control point\n        let subsequenceLength = turningPointIx - sequenceStartIx, t = subsequenceLength / sequenceLength, t1 = (1 - t) * (1 - t), t2 = 2 * (1 - t) * t, t3 = t * t;\n        const qControlPointX = (t1 * startPoint.x + t3 * endPoint.x - points[turningPointIx].x) / -t2;\n        const qControlPointY = (t1 * startPoint.y + t3 * endPoint.y - points[turningPointIx].y) / -t2;\n        // Check every point\n        for (let pointIx = sequenceStartIx + 1; pointIx != sequenceEndIx; pointIx = (pointIx + 1) % points.length) {\n            subsequenceLength = pointIx - sequenceStartIx;\n            t = subsequenceLength / sequenceLength;\n            t1 = (1 - t) * (1 - t);\n            t2 = 2 * (1 - t) * t;\n            t3 = t * t;\n            const px = t1 * startPoint.x + t2 * qControlPointX + t3 * endPoint.x;\n            const py = t1 * startPoint.y + t2 * qControlPointY + t3 * endPoint.y;\n            const point = points[pointIx];\n            const diff = (point.x - px) * (point.x - px) + (point.y - py) * (point.y - py);\n            if (diff > curveErrorMargin) {\n                isCurve = false;\n            }\n            if (diff > maxDiff) {\n                maxDiffIx = pointIx;\n                maxDiff = diff;\n            }\n        }\n        if (!isCurve) {\n            return maxDiffIx;\n        }\n        return {\n            type: 'Q',\n            x1: startPoint.x,\n            y1: startPoint.y,\n            x2: qControlPointX,\n            y2: qControlPointY,\n            x3: endPoint.x,\n            y3: endPoint.y\n        };\n    }\n}\n\nvar TraceDataTrimmer;\n(function (TraceDataTrimmer) {\n    function trim(traceData, strokeWidth, keepAspectRatio, verbose = false) {\n        const offsets = getOffsets(traceData, strokeWidth);\n        if (keepAspectRatio) {\n            applyAspectRatio(offsets, traceData);\n        }\n        if (offsets.minX === 0 &&\n            offsets.maxX === traceData.width &&\n            offsets.minY === 0 &&\n            offsets.maxY === traceData.height) {\n            return;\n        }\n        verbose && console.log(`Trimming x[${offsets.minX}|${offsets.maxX}]/${traceData.width}, y[${offsets.minY}|${offsets.maxY}]/${traceData.height}`);\n        updateData(traceData, offsets);\n    }\n    TraceDataTrimmer.trim = trim;\n    function getOffsets(traceData, strokeWidth) {\n        let minX = traceData.width, minY = traceData.height, maxX = 0, maxY = 0;\n        for (let colorId = 0; colorId < traceData.areasByColor.length; colorId++) {\n            const color = traceData.colors[colorId];\n            if (color.a === 0) {\n                continue;\n            }\n            const colorArea = traceData.areasByColor[colorId];\n            for (const area of colorArea) {\n                for (const line of area.lineAttributes) {\n                    const isLineQ = line.type === \"Q\";\n                    minX = Math.min(minX, line.x1, line.x2, isLineQ ? line.x3 : minX);\n                    maxX = Math.max(maxX, line.x1, line.x2, isLineQ ? line.x3 : 0);\n                    minY = Math.min(minY, line.y1, line.y2, isLineQ ? line.y3 : minY);\n                    maxY = Math.max(maxY, line.y1, line.y2, isLineQ ? line.y3 : 0);\n                }\n            }\n        }\n        const strokeBorder = Math.floor(strokeWidth / 2);\n        minX -= strokeBorder;\n        minY -= strokeBorder;\n        maxX += strokeBorder;\n        maxY += strokeBorder;\n        return { minX, maxX, minY, maxY };\n    }\n    function applyAspectRatio(offsets, traceData) {\n        const trimmedWidth = offsets.maxX - offsets.minX;\n        const trimmedHeight = offsets.maxY - offsets.minY;\n        const oldWidth = traceData.width;\n        const oldHeight = traceData.height;\n        const expectedTrimmedWidth = Math.ceil(trimmedHeight * oldWidth / oldHeight);\n        if (trimmedWidth === expectedTrimmedWidth) {\n            return;\n        }\n        if (expectedTrimmedWidth > trimmedWidth) {\n            const diff = (expectedTrimmedWidth - trimmedWidth) / 2;\n            offsets.minX -= Math.ceil(diff);\n            offsets.maxX += Math.floor(diff);\n            return;\n        }\n        const expectedTrimmedHeight = Math.ceil(trimmedWidth * oldHeight / oldWidth);\n        const diff = (expectedTrimmedHeight - trimmedHeight) / 2;\n        offsets.minY -= Math.ceil(diff);\n        offsets.maxY += Math.floor(diff);\n    }\n    function updateData(traceData, offsets) {\n        const { minX, maxX, minY, maxY } = offsets;\n        for (const colorArea of traceData.areasByColor) {\n            for (const area of colorArea) {\n                for (const lineAttribute of area.lineAttributes) {\n                    lineAttribute.x1 -= minX;\n                    lineAttribute.x2 -= minX;\n                    lineAttribute.y1 -= minY;\n                    lineAttribute.y2 -= minY;\n                    if (lineAttribute.type === 'Q') {\n                        lineAttribute.x3 -= minX;\n                        lineAttribute.y3 -= minY;\n                    }\n                }\n            }\n        }\n        traceData.height = maxY - minY;\n        traceData.width = maxX - minX;\n    }\n})(TraceDataTrimmer || (TraceDataTrimmer = {}));\n\nclass SvgDrawer {\n    options;\n    useStroke;\n    useFill;\n    constructor(options) {\n        this.options = Object.assign({}, SvgDrawerDefaultOptions, options);\n        this.useFill = [FillStyle.FILL, FillStyle.STROKE_FILL].includes(this.options.fillStyle);\n        this.useStroke = [FillStyle.STROKE, FillStyle.STROKE_FILL].includes(this.options.fillStyle);\n    }\n    fixValue(val) {\n        if (this.options.scale !== 1) {\n            val *= this.options.scale;\n        }\n        if (this.options.decimalPlaces === -1) {\n            return val;\n        }\n        return +val.toFixed(this.options.decimalPlaces);\n    }\n    draw(traceData) {\n        this.init(traceData);\n        const tags = [];\n        for (let colorId = 0; colorId < traceData.areasByColor.length; colorId++) {\n            for (let areaIx = 0; areaIx < traceData.areasByColor[colorId].length; areaIx++) {\n                if (traceData.areasByColor[colorId][areaIx].isHole) {\n                    continue;\n                }\n                tags.push(...this.buildSegmentTags(traceData, colorId, areaIx));\n            }\n        }\n        if (this.options.verbose) {\n            console.log(`Adding ${tags.length} <path> tags to SVG.`);\n        }\n        return this.buildSvgTag(traceData, tags);\n    }\n    init(traceData) {\n        if (this.options.trim !== TrimMode.OFF) {\n            const strokeWidth = (this.options.fillStyle === FillStyle.FILL) ? 0 : this.options.strokeWidth;\n            const keepAspectRatio = this.options.trim === TrimMode.KEEP_RATIO;\n            TraceDataTrimmer.trim(traceData, strokeWidth, keepAspectRatio, this.options.verbose);\n        }\n    }\n    /**\n     * Builds a <path> tag for each segment.\n     *\n     * @param traceData\n     * @param colorId\n     * @param segmentIx\n     * @returns\n     */\n    buildSegmentTags(traceData, colorId, segmentIx) {\n        const colorSegments = traceData.areasByColor[colorId];\n        const area = colorSegments[segmentIx];\n        const color = traceData.colors[colorId];\n        if (!this.isValidLine(color, area.lineAttributes)) {\n            return [];\n        }\n        const tags = [];\n        const desc = (this.options.desc ? this.getDescriptionAttribute(traceData, colorId, segmentIx) : '');\n        const tag = this.buildPathTag(area, colorSegments, color, desc);\n        tags.push(tag);\n        // Rendering control points\n        if (this.options.segmentEndpointRadius || this.options.curveControlPointRadius) {\n            const controlPoints = this.drawControlOutput(area, colorSegments);\n            tags.push(...controlPoints);\n        }\n        return tags;\n    }\n    isValidLine(color, lineAttributes) {\n        const passesLineFilter = !this.options.lineFilter || lineAttributes.length >= 3;\n        return !color.isInvisible() && passesLineFilter;\n    }\n    getDescriptionAttribute(traceData, colorId, segmentIx) {\n        const area = traceData.areasByColor[colorId][segmentIx];\n        const isHole = area.isHole ? 1 : 0;\n        const color = traceData.colors[colorId];\n        const colorStr = `r:${color.r} g:${color.g} b:${color.b}`;\n        return (this.options.desc ? (`desc=\"colorId:${colorId} segment:${segmentIx} ${colorStr} isHole:${isHole}\" `) : '');\n    }\n    buildPath(segment, colorSegments) {\n        const lines = segment.lineAttributes;\n        const pathStr = [];\n        // Creating non-hole path string\n        pathStr.push('M', this.fixValue(lines[0].x1), this.fixValue(lines[0].y1));\n        for (const line of lines) {\n            pathStr.push(line.type, this.fixValue(line.x2), this.fixValue(line.y2));\n            if ('x3' in line) {\n                pathStr.push(this.fixValue(line.x3), this.fixValue(line.y3));\n            }\n        }\n        pathStr.push('Z');\n        // Hole children\n        for (const holeIx of segment.childHoles) {\n            const holeSegments = colorSegments[holeIx];\n            const lastLine = holeSegments.lineAttributes[holeSegments.lineAttributes.length - 1];\n            pathStr.push('M');\n            // Creating hole path string\n            if (lastLine.type === 'Q') {\n                pathStr.push(this.fixValue(lastLine.x3), this.fixValue(lastLine.y3));\n            }\n            else {\n                pathStr.push(this.fixValue(lastLine.x2), this.fixValue(lastLine.y2));\n            }\n            for (const holeLine of holeSegments.lineAttributes.reverse()) {\n                pathStr.push(holeLine.type);\n                if (holeLine.type === 'Q') {\n                    pathStr.push(this.fixValue(holeLine.x2), this.fixValue(holeLine.y2));\n                }\n                pathStr.push(this.fixValue(holeLine.x1), this.fixValue(holeLine.y1));\n            }\n            pathStr.push('Z'); // Close path\n        }\n        return pathStr.join(' ');\n    }\n    drawControlOutput(segment, colorSegments) {\n        const tags = this.drawControlPoint(segment);\n        // Hole children control points\n        for (let holeIx of segment.childHoles) {\n            const holeSegment = colorSegments[holeIx];\n            const holeElements = this.drawControlPoint(holeSegment);\n            tags.push(...holeElements);\n        }\n        return tags;\n    }\n    drawControlPoint(segment) {\n        const tags = [];\n        for (const shape of segment.lineAttributes) {\n            const isCurve = ('x3' in shape);\n            if (this.options.segmentEndpointRadius) {\n                const endX = (isCurve) ? shape.x3 : shape.x2;\n                const endY = (isCurve) ? shape.y3 : shape.y2;\n                const endPoint = this.buildCircleTag(endX, endY, this.options.segmentEndpointRadius, 'white');\n                tags.push(endPoint);\n            }\n            if (isCurve && this.options.curveControlPointRadius) {\n                const controlColor = 'cyan';\n                const lineWidth = this.options.curveControlPointRadius * 0.2;\n                tags.push(this.buildCircleTag(shape.x2, shape.y2, this.options.curveControlPointRadius, controlColor), this.buildLineTag(shape.x1, shape.y1, shape.x2, shape.y2, controlColor, lineWidth), this.buildLineTag(shape.x2, shape.y2, shape.x3, shape.y3, controlColor, lineWidth));\n            }\n        }\n        return tags;\n    }\n    buildSvgTag(traceData, tags) {\n        const w = Math.ceil(traceData.width * this.options.scale);\n        const h = Math.ceil(traceData.height * this.options.scale);\n        const viewBox = (this.options.viewBox) ?\n            `viewBox=\"0 0 ${w} ${h}\"` :\n            `width=\"${w}\" height=\"${h}\"`;\n        const tagString = tags.join(\"\\n \");\n        return `<svg ${viewBox} version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" desc=\"Created with imagetracer-ts 1.0.2\" >\\n ${tagString}\\n</svg>`;\n    }\n    buildPathTag(area, colorSegments, color, desc = '') {\n        const d = this.buildPath(area, colorSegments);\n        const colorAttributes = this.buildColorAttributes(color, area);\n        return `<path ${desc}${colorAttributes}d=\"${d}\" />`;\n    }\n    buildCircleTag(x, y, r, fill) {\n        const cx = this.fixValue(x);\n        const cy = this.fixValue(y);\n        const strokeWidth = r * 0.2;\n        return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"${r}\" fill=\"${fill}\" stroke-width=\"${strokeWidth}\" stroke=\"black\" />`;\n    }\n    buildLineTag(x1, y1, x2, y2, color, strokeWidth) {\n        const tx1 = this.fixValue(x1), ty1 = this.fixValue(y1), tx2 = this.fixValue(x2), ty2 = this.fixValue(y2);\n        return `<line x1=\"${tx1}\" y1=\"${ty1}\" x2=\"${tx2}\" y2=\"${ty2}\" stroke-width=\"${strokeWidth}\" stroke=\"${color}\" />`;\n    }\n    buildColorAttributes(c, area) {\n        const colorString = this.colorToRgbString(c);\n        const fill = this.useFill ? colorString : 'none';\n        let attributes = `fill=\"${fill}\" `;\n        if (this.useStroke) {\n            attributes += `stroke=\"${colorString}\" stroke-width=\"${this.options.strokeWidth}\" `;\n        }\n        const opacity = (c.a / 255.0).toPrecision(1);\n        if (opacity !== '1') {\n            attributes += `opacity=\"${opacity}\" `;\n        }\n        return attributes;\n    }\n    colorToRgbString(color) {\n        return `rgb(${color.r},${color.g},${color.b})`;\n    }\n}\n\nfunction getColorQuantizeFunction(mode, palette = null) {\n    switch (mode) {\n        case CreatePaletteMode.GENERATE:\n            return (imageData, numberOfColors) => generatePalette(numberOfColors);\n        case CreatePaletteMode.SAMPLE:\n            return samplePaletteRandom;\n        case CreatePaletteMode.PALETTE:\n            if (!palette || palette.length === 0) {\n                throw new Error('No color palette in options but mode is set to palette');\n            }\n            return (imageData, numberOfColors) => palette.map(RgbColor.fromRgbColorData);\n        case CreatePaletteMode.SCAN:\n        default:\n            return samplePaletteDeterministic;\n    }\n}\n/**\n * Generating a palette with given number of colors\n */\nfunction generatePalette(numberOfColors) {\n    if (numberOfColors < 8) {\n        return generateGrayscalePalette(numberOfColors);\n    }\n    return generateColorCubePalette(numberOfColors);\n}\nfunction generateColorCubePalette(numberOfColors) {\n    const palette = [];\n    const colorsPerEdge = Math.floor(Math.pow(numberOfColors, 1 / 3)); // Number of points on each edge on the RGB color cube\n    const colorStep = Math.floor(255 / (colorsPerEdge - 1)); // distance between points\n    for (let numReds = 0, r = 0; numReds < colorsPerEdge; numReds++, r += colorStep) {\n        for (let numGreens = 0, g = 0; numGreens < colorsPerEdge; numGreens++, g += colorStep) {\n            for (let numBlues = 0, b = 0; numBlues < colorsPerEdge; numBlues++, b += colorStep) {\n                palette.push(new RgbColor(r, g, b));\n            }\n        }\n    }\n    const numRandomColors = numberOfColors - palette.length;\n    for (let i = 0; i < numRandomColors; i++) {\n        palette.push(RgbColor.createRandomColor());\n    }\n    return palette;\n}\nfunction generateGrayscalePalette(numberOfColors) {\n    const palette = [];\n    const grayStep = Math.floor(255 / (numberOfColors - 1));\n    for (let i = 0; i < numberOfColors; i++) {\n        const shade = i * grayStep;\n        const color = new RgbColor(shade, shade, shade);\n        palette.push(color);\n    }\n    return palette;\n}\n/**\n * Sampling a palette from imagedata\n */\nfunction samplePaletteRandom(imageData, numColors) {\n    const palette = [];\n    const numberOfPixels = imageData.data.length / 4;\n    for (let numberOfTries = 4 * numColors; numberOfTries > 0; numberOfTries--) {\n        const idx = Math.floor(Math.random() * numberOfPixels);\n        const color = RgbColor.fromPixelArray(imageData.data, idx);\n        if (palette.some(paletteColor => paletteColor.equals(color))) {\n            continue;\n        }\n        palette.push(color);\n        if (palette.length === numColors) {\n            break;\n        }\n    }\n    return palette;\n}\n/**\n * Get palette colors through deterministic sampling.\n *\n * Steps through the image along a rectangular grid.\n */\nfunction samplePaletteDeterministic(imageData, numColors) {\n    const palette = [];\n    const stepsPerRow = Math.ceil(Math.sqrt(numColors));\n    const stepSizeX = imageData.width / (stepsPerRow + 1);\n    const stepSizeY = imageData.height / (stepsPerRow + 1);\n    for (let stepY = 1; stepY <= stepsPerRow; stepY++) {\n        const widthOffset = stepY * stepSizeY * imageData.width;\n        for (let stepX = 1; stepX <= stepsPerRow; stepX++) {\n            const pixelIndex = Math.floor(widthOffset + (stepX * stepSizeX));\n            const color = RgbColor.fromPixelArray(imageData.data, pixelIndex);\n            if (palette.some(paletteColor => color.equals(paletteColor))) {\n                continue;\n            }\n            palette.push(color);\n            if (palette.length === numColors) {\n                break;\n            }\n        }\n    }\n    return palette;\n}\n\nvar ImageToRgba;\n(function (ImageToRgba) {\n    function process(imageData, isVerbose = false) {\n        if (isRgba(imageData)) {\n            return imageData;\n        }\n        isVerbose && console.log('Transforming image data from RGB to RGBA');\n        const numPixels = imageData.width * imageData.height;\n        const rgbaSize = numPixels * 4;\n        const rgbaData = new Uint8ClampedArray(rgbaSize);\n        for (let pixelIx = 0; pixelIx < numPixels; pixelIx++) {\n            const dataPixelOffset = pixelIx * 3;\n            const rgbaPixelOffset = pixelIx * 4;\n            rgbaData[rgbaPixelOffset + 0] = imageData.data[dataPixelOffset + 0];\n            rgbaData[rgbaPixelOffset + 1] = imageData.data[dataPixelOffset + 1];\n            rgbaData[rgbaPixelOffset + 2] = imageData.data[dataPixelOffset + 2];\n            rgbaData[rgbaPixelOffset + 3] = 255;\n        }\n        return {\n            width: imageData.width,\n            height: imageData.height,\n            colorSpace: imageData.colorSpace,\n            data: rgbaData\n        };\n    }\n    ImageToRgba.process = process;\n    function isRgba(imageData) {\n        const numPixels = imageData.width * imageData.height;\n        const rgbaSize = numPixels * 4;\n        return imageData.data.length >= rgbaSize;\n    }\n})(ImageToRgba || (ImageToRgba = {}));\n\n// Gaussian kernels for blur\nconst GAUSSIAN_KERNELS = [\n    [0.27901, 0.44198, 0.27901],\n    [0.135336, 0.228569, 0.272192, 0.228569, 0.135336],\n    [0.086776, 0.136394, 0.178908, 0.195843, 0.178908, 0.136394, 0.086776],\n    [0.063327, 0.093095, 0.122589, 0.144599, 0.152781, 0.144599, 0.122589, 0.093095, 0.063327],\n    [0.049692, 0.069304, 0.089767, 0.107988, 0.120651, 0.125194, 0.120651, 0.107988, 0.089767, 0.069304, 0.049692],\n];\nclass ImageBlurrer {\n    // Selective Gaussian blur for preprocessing\n    static blur(imageData, radius, delta) {\n        radius = Math.floor(radius);\n        if (radius < 1) {\n            return imageData;\n        }\n        if (radius > 5) {\n            radius = 5;\n        }\n        delta = Math.abs(delta);\n        if (delta > 1024) {\n            delta = 1024;\n        }\n        const kernel = GAUSSIAN_KERNELS[radius - 1];\n        const output = {\n            width: imageData.width,\n            height: imageData.height,\n            colorSpace: imageData.colorSpace,\n            data: new Uint8ClampedArray(imageData.width * imageData.height * 4)\n        };\n        ImageBlurrer.blurHorizontally(imageData, radius, kernel, output.data);\n        ImageBlurrer.blurVertically(output, radius, kernel);\n        ImageBlurrer.checkDelta(imageData, output.data, delta);\n        return output;\n    }\n    static blurHorizontally(imageData, radius, kernel, target) {\n        for (let rowIx = 0; rowIx < imageData.height; rowIx++) {\n            for (let colIx = 0; colIx < imageData.width; colIx++) {\n                const pixelId = rowIx * imageData.width + colIx;\n                let racc = 0, gacc = 0, bacc = 0, aacc = 0, wacc = 0;\n                // gauss kernel loop\n                for (let r = -radius; r <= radius; r++) {\n                    if ((colIx + r < 0) || (colIx + r >= imageData.width)) {\n                        continue;\n                    }\n                    // add weighted color values\n                    const idx = (pixelId + r) * 4;\n                    const ratio = kernel[r + radius];\n                    racc += imageData.data[idx + 0] * ratio;\n                    gacc += imageData.data[idx + 1] * ratio;\n                    bacc += imageData.data[idx + 2] * ratio;\n                    aacc += imageData.data[idx + 3] * ratio;\n                    wacc += ratio;\n                }\n                // The new pixel\n                const idx = pixelId * 4;\n                target[idx + 0] = Math.floor(racc / wacc);\n                target[idx + 1] = Math.floor(gacc / wacc);\n                target[idx + 2] = Math.floor(bacc / wacc);\n                target[idx + 3] = Math.floor(aacc / wacc);\n                target[idx + 0];\n            }\n        }\n    }\n    static blurVertically(image, radius, kernel) {\n        // work on copy\n        const inputData = new Uint8ClampedArray(image.data);\n        // vertical blur\n        for (let rowIx = 0; rowIx < image.height; rowIx++) {\n            for (let colIx = 0; colIx < image.width; colIx++) {\n                let racc = 0, gacc = 0, bacc = 0, aacc = 0, wacc = 0;\n                for (let r = -radius; r <= radius; r++) {\n                    const rowOffset = rowIx + r;\n                    if ((rowOffset < 0) || (rowOffset >= image.height)) {\n                        continue;\n                    }\n                    const idx = (rowOffset * image.width + colIx) * 4;\n                    const ratio = kernel[r + radius];\n                    racc += inputData[idx + 0] * ratio;\n                    gacc += inputData[idx + 1] * ratio;\n                    bacc += inputData[idx + 2] * ratio;\n                    aacc += inputData[idx + 3] * ratio;\n                    wacc += ratio;\n                }\n                // The new pixel\n                const idx = (rowIx * image.width + colIx) * 4;\n                image.data[idx + 0] = Math.floor(racc / wacc);\n                image.data[idx + 1] = Math.floor(gacc / wacc);\n                image.data[idx + 2] = Math.floor(bacc / wacc);\n                image.data[idx + 3] = Math.floor(aacc / wacc);\n            }\n        }\n    }\n    static checkDelta(original, target, delta) {\n        for (let rowIx = 0; rowIx < original.height; rowIx++) {\n            for (let colIx = 0; colIx < original.width; colIx++) {\n                const idx = (rowIx * original.width + colIx) * 4;\n                // d is the difference between the blurred and the original pixel\n                const d = Math.abs(target[idx + 0] - original.data[idx + 0])\n                    + Math.abs(target[idx + 1] - original.data[idx + 1])\n                    + Math.abs(target[idx + 2] - original.data[idx + 2])\n                    + Math.abs(target[idx + 3] - original.data[idx + 3]);\n                // selective blur: if d>delta, put the original pixel back\n                if (d > delta) {\n                    target[idx + 0] = original.data[idx];\n                    target[idx + 1] = original.data[idx + 1];\n                    target[idx + 2] = original.data[idx + 2];\n                    target[idx + 3] = original.data[idx + 3];\n                }\n            }\n        }\n    }\n}\n\nconst sharpenKernel = [\n    [0, -1, 0],\n    [-1, 5, -1],\n    [0, -1, 0],\n];\nfunction sharpen(imageData, threshold) {\n    const applicator = new ConvolutionApplicator(sharpenKernel);\n    return applicator.apply(imageData, threshold);\n}\nclass ConvolutionApplicator {\n    kernel;\n    kernelWeight;\n    constructor(kernel) {\n        this.kernel = kernel;\n        this.kernelWeight = kernel.flat().reduce((sum, v) => sum + v, 0);\n    }\n    apply(imageData, threshold) {\n        const res = new Uint8ClampedArray(4 * imageData.width * imageData.height);\n        for (let rowIx = 0; rowIx < imageData.height; rowIx++) {\n            for (let colIx = 0; colIx < imageData.width; colIx++) {\n                this.applyKernelToPixel(imageData, colIx, rowIx, res);\n            }\n        }\n        this.applyThreshold(imageData, res, threshold);\n        return {\n            width: imageData.width,\n            height: imageData.height,\n            colorSpace: imageData.colorSpace,\n            data: res,\n        };\n    }\n    applyKernelToPixel(image, x, y, target) {\n        const radius = Math.floor(this.kernel.length / 2);\n        const pixelIx = (y * image.width + x) * 4;\n        for (let channelIx = 0; channelIx < 4; channelIx++) {\n            let channelValue = 0;\n            let weight = 0;\n            for (let rowOffset = -radius; rowOffset <= radius; rowOffset++) {\n                if (y + rowOffset < 0 || y + rowOffset >= image.height) {\n                    continue;\n                }\n                for (let colOffset = -radius; colOffset <= radius; colOffset++) {\n                    if (x + colOffset < 0 || x + colOffset >= image.width) {\n                        continue;\n                    }\n                    const ix = ((y + rowOffset) * image.width + (x + colOffset)) * 4 + channelIx;\n                    const kernelValue = this.kernel[rowOffset + radius][colOffset + radius];\n                    channelValue += image.data[ix] * kernelValue;\n                    weight += kernelValue;\n                }\n            }\n            if (weight !== this.kernelWeight) {\n                channelValue *= (this.kernelWeight === 0) ? 0 : (weight / this.kernelWeight);\n            }\n            target[pixelIx + channelIx] = channelValue;\n        }\n    }\n    applyThreshold(image, target, threshold) {\n        if (threshold <= 0 || threshold === 1 || threshold >= 1024) {\n            return;\n        }\n        threshold = (threshold < 1) ? 1024 * threshold : threshold;\n        for (let ix = 0; ix < image.data.length; ix += 4) {\n            let diff = 0;\n            for (let channelIx = ix; channelIx < ix + 4; channelIx++) {\n                diff += Math.abs(image.data[channelIx] - target[channelIx]);\n            }\n            if (diff <= threshold) {\n                continue;\n            }\n            for (let channelIx = ix; channelIx < ix + 4; channelIx++) {\n                target[channelIx] = image.data[channelIx];\n            }\n        }\n    }\n}\n\nvar TraceData;\n(function (TraceData) {\n    function toString(td) {\n        const output = [];\n        for (let colorIx = 0; colorIx < td.areasByColor.length; colorIx++) {\n            const areas = td.areasByColor[colorIx];\n            if (areas.length === 0) {\n                continue;\n            }\n            output.push(td.colors[colorIx].toString());\n            for (const area of areas) {\n                const d = area.lineAttributes\n                    .map(la => SvgLineAttributes.toString(la))\n                    .join(' ');\n                output.push(d);\n            }\n        }\n        return output.join(\"\\n\");\n    }\n    TraceData.toString = toString;\n})(TraceData || (TraceData = {}));\nclass ImageTracer {\n    options;\n    colorQuantizeFunction;\n    constructor(options = null) {\n        this.options = Options.buildFrom(options);\n        this.colorQuantizeFunction = getColorQuantizeFunction(this.options.colorSamplingMode, this.options.palette);\n    }\n    /**\n     * Set a custom color quantize function.\n     */\n    setColorQuantizeFunction(fun) {\n        this.colorQuantizeFunction = fun;\n        return this;\n    }\n    /**\n     * Trace image data and render to SVG\n     *\n     * @param imageData\n     * @returns\n     */\n    traceImageToSvg(imageData) {\n        const drawer = new SvgDrawer(this.options);\n        return this.traceImage(imageData, drawer);\n    }\n    /**\n     * Allows to draw traced image with a custom renderer.\n     *\n     * @param imageData\n     * @param drawer\n     * @returns\n     */\n    traceImage(imageData, drawer = null) {\n        if (!drawer) {\n            drawer = new SvgDrawer(this.options);\n        }\n        const isVerbose = this.isVerbose();\n        isVerbose && console.time(' - Preprocessing time');\n        imageData = this.preProcessImage(imageData);\n        isVerbose && console.timeEnd(' - Preprocessing time');\n        isVerbose && console.time(' - Color indexing time');\n        const colorIndex = new ColorIndex(imageData, this.options, this.colorQuantizeFunction);\n        isVerbose && console.timeEnd(' - Color indexing time');\n        isVerbose && console.time(' - Trace time');\n        const traceData = this.imageDataToTraceData(imageData, colorIndex);\n        isVerbose && console.timeEnd(' - Trace time');\n        isVerbose && console.time(' - Draw time');\n        const output = drawer.draw(traceData);\n        isVerbose && console.timeEnd(' - Draw time');\n        return output;\n    }\n    isVerbose() {\n        return this.options.verbose ?? false;\n    }\n    preProcessImage(imageData) {\n        imageData = ImageToRgba.process(imageData, this.isVerbose());\n        // Selective Gaussian blur preprocessing\n        if (this.options.blurRadius > 0) {\n            imageData = ImageBlurrer.blur(imageData, this.options.blurRadius, this.options.blurDelta);\n        }\n        if (this.options.sharpen) {\n            imageData = sharpen(imageData, this.options.sharpenThreshold);\n        }\n        return imageData;\n    }\n    imageDataToTraceData(imageData, colorIndex) {\n        if (this.options.layeringMode === LayeringMode.SEQUENTIAL) {\n            return this.imageDataToTraceDataWithSequentialLayering(imageData, colorIndex);\n        }\n        else {\n            return this.imageDataToTraceDataWithParallelLayering(imageData, colorIndex);\n        }\n    }\n    imageDataToTraceDataWithSequentialLayering(imageData, colorIndex) {\n        const colorLayers = [];\n        const areaScanner = new AreaScanner();\n        const pathInterpolator = new PointInterpolator();\n        const pathTracer = new PathTracer();\n        for (let colorIx = 0; colorIx < colorIndex.palette.length; colorIx++) {\n            const edgeRaster = EdgeRasterBuilder.buildForColor(colorIndex, colorIx);\n            const areas = areaScanner.scan(edgeRaster, this.options.minShapeOutline);\n            const interpolatedPath = pathInterpolator.interpolate(this.options.interpolation, areas, this.options.enhanceRightAngles);\n            const outlinedAreas = interpolatedPath.map(path => pathTracer.trace(path, this.options.lineErrorMargin, this.options.curveErrorMargin));\n            colorLayers.push(outlinedAreas);\n        }\n        return {\n            areasByColor: colorLayers,\n            colors: colorIndex.palette,\n            width: colorIndex.rows[0].length - 2,\n            height: colorIndex.rows.length - 2\n        };\n    }\n    imageDataToTraceDataWithParallelLayering(imageData, colorIndex) {\n        // 2. Layer separation and edge detection\n        const edgeRaster = EdgeRasterBuilder.buildForColors(colorIndex);\n        // Optional edge node visualization\n        if (this.options.layerContainerId) {\n            const divRenderer = new DivRenderer();\n            divRenderer.drawLayersToDiv(edgeRaster, this.options.scale, this.options.layerContainerId);\n        }\n        // 3. Batch path scan\n        const areaScanner = new AreaScanner();\n        const areasByColor = edgeRaster.map(layer => areaScanner.scan(layer, this.options.minShapeOutline));\n        // 4. Batch interpolation\n        const pathInterpolator = new PointInterpolator();\n        const interpolation = this.options.interpolation;\n        const enhanceRightAngle = this.options.enhanceRightAngles;\n        const interpolatedAreasByColor = areasByColor.map(pathBatch => pathInterpolator.interpolate(interpolation, pathBatch, enhanceRightAngle));\n        // 5. Batch tracing and creating traceData object\n        const pathTracer = new PathTracer();\n        const traceMapper = (path) => pathTracer.trace(path, this.options.lineErrorMargin, this.options.curveErrorMargin);\n        const outlinedAreasByColor = interpolatedAreasByColor.map(pathBatch => pathBatch.map(traceMapper));\n        return {\n            areasByColor: outlinedAreasByColor,\n            colors: colorIndex.palette,\n            width: imageData.width,\n            height: imageData.height\n        };\n    }\n}\n\nexport { CreatePaletteMode, FillStyle, ImageTracer, InterpolationMode, LayeringMode, Options, RgbColor, RgbColorData, SvgDrawer, SvgDrawerDefaultOptions, TraceData, TrimMode };\n//# sourceMappingURL=index.mjs.map\n",null,null,null,null],"names":["RgbColorData","InterpolationMode","TrimMode","FillStyle","CreatePaletteMode","LayeringMode","Options","TraceData","fs","getFileTypInfo","OutputFormat","ImageTracerNodejsOptions","hideBin","path"],"mappings":"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CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,C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"}