{"version":3,"sources":["../src/index.ts","../src/commands.ts","../src/getPaths.ts","../src/getSvg.ts","../src/defaultConfig.ts","../src/resizePlugin.ts","../src/getSvgoConfig.ts"],"sourcesContent":["export { getPaths } from './getPaths';\nexport { getSvg } from './getSvg';\nexport { getSvgoConfig } from './getSvgoConfig';\nexport { defaultConfig } from './defaultConfig';\n\nexport type { SVGDConfig } from \"./defaultConfig\";\nexport type { ResizeParams } from \"./resizePlugin\";\nexport type { PathAttributes, Comand } from \"./commands\";\n","export interface PathAttributes {\n    d: string;\n    opacity?: string;\n    \"fill-opacity\"?: string;\n    \"stroke-opacity\"?: string;\n    stroke?: string;\n    fill?: string;\n    \"stroke-width\"?: string;\n    \"fill-rule\"?: string;\n}\n\nexport interface Comand {\n    code: string,\n    attribute: keyof PathAttributes,\n    regexp: string,\n    toAttribute: (codeValue: string) => string,\n    toCommand: (attributeValue: string) => string | null,\n}\n\nexport const commands: Comand[] = [\n    {\n        code: \"o\",\n        attribute: \"opacity\",\n        regexp: \"[\\\\d.]+\",\n        toAttribute: (codeValue) => codeValue,\n        toCommand: (attributeValue) => attributeValue,\n    },\n    {\n        code: \"of\",\n        attribute: \"fill-opacity\",\n        regexp: \"[\\\\d.]+\",\n        toAttribute: (codeValue) => codeValue,\n        toCommand: (attributeValue) => attributeValue,\n    },\n    {\n        code: \"os\",\n        attribute: \"stroke-opacity\",\n        regexp: \"[\\\\d.]+\",\n        toAttribute: (codeValue) => codeValue,\n        toCommand: (attributeValue) => attributeValue,\n    },\n    {\n        code: \"f\",\n        attribute: \"stroke\",\n        regexp: \"[#0-9a-zA-Z]+\",\n        toAttribute: (codeValue) => {\n            switch (codeValue) {\n                case 'c': return 'currentColor';\n                case 'n': return 'none';\n                default: return codeValue;\n            }\n        },\n        toCommand: (attributeValue) => {\n            switch (attributeValue) {\n                case 'currentColor': return 'c';\n                case 'none': return 'n';\n                default: return attributeValue;\n            }\n        },\n    },\n    {\n        code: \"F\",\n        attribute: \"fill\",\n        regexp: \"[#0-9a-zA-Z]+\",\n        toAttribute: (codeValue) => {\n            switch (codeValue) {\n                case 'c': return 'currentColor';\n                case 'n': return 'none';\n                default: return codeValue;\n            }\n        },\n        toCommand: (attributeValue) => {\n            switch (attributeValue) {\n                case 'currentColor': return null;\n                case 'none': return 'n';\n                default: return attributeValue;\n            }\n        },\n    },\n    {\n        code: \"w\",\n        attribute: \"stroke-width\",\n        regexp: \"[\\\\d.]+\",\n        toAttribute: (codeValue) => codeValue,\n        toCommand: (attributeValue) => attributeValue,\n    },\n    {\n        code: \"e\",\n        attribute: \"fill-rule\",\n        regexp: \"\",\n        toAttribute: () => 'evenodd',\n        toCommand: (attributeValue) => attributeValue === 'evenodd' ? '' : null,\n    }\n]\n","import { commands, PathAttributes } from \"./commands\";\n\n\nexport function getPaths(d: string): PathAttributes[] {\n    const paths: PathAttributes[] = [];\n    let attributes: Partial<PathAttributes> = {};\n\n    const pathCommands: string[] = d.split(new RegExp(\n        `(${commands.map(cmd => `${cmd.code}${cmd.regexp}`).join('|')})`\n    ));\n    pathCommands.forEach((text, i) => {\n        const isCommand = i % 2 === 1;\n        if (isCommand) {\n            commands.forEach(({ code, attribute, regexp, toAttribute }) => {\n                const match = text.match(new RegExp(`^${code}(${regexp})$`));\n                if (match) {\n                    attributes[attribute] = toAttribute(match[1]);\n                }\n            });\n            return;\n        }\n        const d = text.trim();\n        if (d) {\n            paths.push({ ...attributes, d });\n            attributes = {};\n        }\n    });\n\n    return paths;\n}\n","import { getPaths } from \"./getPaths\";\nimport type { ViewBox } from \"./resizePlugin\";\n\nexport function getSvg(d: string, viewbox?: ViewBox): string {\n    const svgParts = getPaths(d).map((attributes) => (\n        `<path ${attributes ? Object.entries(attributes).map(([k, v]) => `${k}=\"${v}\"`).join(' ') : ''} />`\n    ));\n    const { minX = 0, minY = 0, width = 24, height = 24 } = viewbox ?? {};\n    const content = svgParts.length ? `\n  ${svgParts.join(`\n  `)}\n` : '';\n    return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${minX} ${minY} ${width} ${height}\" width=\"${width}\" height=\"${height}\">${content}</svg>`;\n}\n","import { type Config } from 'svgo';\nimport { ResizeParams } from \"./resizePlugin\";\n\nexport interface SVGDConfig {\n    resize: ResizeParams;\n    colors?: boolean;\n    svgo: Config;\n}\n\nexport const defaultConfig: SVGDConfig = {\n    resize: {\n        targetViewBox: {\n            minX: 0,\n            minY: 0,\n            width: 24,\n            height: 24,\n        }\n    },\n    colors: false,\n    svgo: {\n        plugins: [\n            {\n                name: 'preset-default',\n                params: {\n                    overrides: {\n                        convertShapeToPath: false,\n                        convertColors: false,\n                        mergePaths: false,\n                        moveElemsAttrsToGroup: false,\n                        moveGroupAttrsToElems: false,\n                    },\n                },\n            },\n            {\n                name: \"inlineStyles\",\n                params: {\n                    onlyMatchedOnce: false,\n                }\n            },\n            {\n                name: \"convertStyleToAttrs\",\n            },\n            {\n                name: \"removeUselessStrokeAndFill\",\n                params: {\n                    stroke: true,\n                    fill: true,\n                    removeNone: true\n                }\n            },\n            {\n                name: 'convertColors',\n                params: {\n                    currentColor: false,\n                    names2hex: true,\n                    rgb2hex: true,\n                    shorthex: true,\n                    shortname: false,\n                },\n            },\n            {\n                name: 'convertShapeToPath',\n                params: {\n                    convertArcs: true,\n                },\n            },\n            {\n                name: 'mergePaths',\n                params: {\n                    force: true,\n                },\n            },\n            {\n                name: 'moveGroupAttrsToElems',\n            },\n            {\n                name: 'collapseGroups',\n            },\n            {\n                name: \"convertPathData\",\n            },\n            {\n                name: \"removeHiddenElems\",\n            },\n            {\n                name: \"removeUselessDefs\",\n            },\n        ],\n    }\n};\n","import type { CustomPlugin } from 'svgo';\nimport type { XastElement, XastRoot } from 'svgo/lib/types';\n\nexport interface ViewBox {\n    minX: number;\n    minY: number;\n    width: number;\n    height: number;\n}\n\nexport interface ResizeParams {\n    targetViewBox: ViewBox;\n    overrideSvgAttributes?: boolean;\n    preserveAspectRatio?: boolean;\n}\n\n/**\n * Resizes an SVG by wrapping its content in a <g> transform element.\n */\nexport function resizePlugin(params: ResizeParams): CustomPlugin {\n    return {\n        name: 'resizePlugin',\n        fn: (ast) => {\n            const svgNode = getSvgNode(ast);\n            if (!svgNode) return null;\n\n            const originalDims = getOriginalDimensions(svgNode);\n            const transform = computeTransformations(originalDims, params);\n            wrapChildrenInGroup(svgNode, transform);\n            overrideSvgAttributesIfNeeded(svgNode, params);\n\n            return null;\n        },\n    };\n}\n\nfunction getSvgNode(ast: XastRoot): XastElement | undefined {\n    return ast.children.find(\n        (node) => node.type === 'element' && node.name === 'svg'\n    ) as XastElement | undefined;\n}\n\n/**\n * Extracts original dimensions from an SVG node.\n */\nfunction getOriginalDimensions(svgNode: XastElement): ViewBox {\n    const viewBox = svgNode.attributes.viewBox;\n\n    if (viewBox) {\n        const [minX, minY, width, height] = viewBox.split(/[\\s,]+/).map(parseFloat);\n        return { minX, minY, width, height };\n    }\n\n    return {\n        minX: 0,\n        minY: 0,\n        width: parseFloat(svgNode.attributes.width ?? '100'),\n        height: parseFloat(svgNode.attributes.height ?? '100'),\n    };\n}\n\n/**\n * Computes the transformations (translate and scale) for resizing an SVG.\n */\nfunction computeTransformations(originalDims: ViewBox, params: ResizeParams): string {\n    const { targetViewBox, preserveAspectRatio = true } = params;\n    const { minX: origMinX, minY: origMinY, width: origWidth, height: origHeight } = originalDims;\n    const { minX, minY, width, height } = targetViewBox;\n\n    const scaleX = width / origWidth;\n    const scaleY = height / origHeight;\n    const scale = preserveAspectRatio ? Math.min(scaleX, scaleY) : NaN;\n\n    const translateX =\n        minX - origMinX * (preserveAspectRatio ? scale : scaleX) +\n        (preserveAspectRatio ? (width - origWidth * scale) / 2 : 0);\n\n    const translateY =\n        minY - origMinY * (preserveAspectRatio ? scale : scaleY) +\n        (preserveAspectRatio ? (height - origHeight * scale) / 2 : 0);\n\n    if (preserveAspectRatio) {\n        return `translate(${translateX}, ${translateY}) scale(${scale}, ${scale})`;\n    }\n    return `translate(${translateX}, ${translateY}) scale(${scaleX}, ${scaleY})`;\n}\n\n/**\n * Wraps the current children of an SVG node in a <g> element\n * with the specified transform attribute.\n */\nfunction wrapChildrenInGroup(svgNode: XastElement, transform: string): void {\n    const groupNode: XastElement = {\n        type: 'element',\n        name: 'g',\n        attributes: { transform },\n        children: [],\n    };\n\n    groupNode.children = svgNode.children.splice(0, svgNode.children.length);\n    svgNode.children.push(groupNode);\n}\n\n/**\n * Optionally overrides the SVG node attributes with the new viewBox\n * and removes width/height attributes.\n */\nfunction overrideSvgAttributesIfNeeded(svgNode: XastElement, params: ResizeParams): void {\n    const { overrideSvgAttributes = true, targetViewBox } = params;\n    if (!overrideSvgAttributes) return;\n\n    const { minX, minY, width, height } = targetViewBox;\n    svgNode.attributes.viewBox = `${minX} ${minY} ${width} ${height}`;\n    delete svgNode.attributes.width;\n    delete svgNode.attributes.height;\n}\n","import { defaultConfig } from \"./defaultConfig\";\nimport type { XastChild, XastRoot } from \"svgo/lib/types\";\nimport type { Config, CustomPlugin } from \"svgo\";\nimport { resizePlugin } from \"./resizePlugin\";\nimport { commands } from \"./commands\";\n\nexport const getSvgoConfig = (config = defaultConfig): Config => {\n    const plugins = (config.svgo.plugins ?? []);\n    const pluginsByColor = config.colors\n        ? plugins\n        : plugins.map((plugin) => (typeof plugin === \"object\" && plugin.name === \"convertColors\") ? {\n            ...plugin,\n            params: {\n                currentColor: true\n            }\n        } : plugin);\n    return {\n        ...config.svgo,\n        plugins: [\n            resizePlugin(config.resize),\n            ...pluginsByColor,\n            extractPathDPlugin(),\n        ],\n    };\n}\n\nexport const extractPathDPlugin = (): CustomPlugin => ({\n    name: 'extractPathD',\n    fn: (ast: XastRoot) => {\n        const collectPathsContext: CollectPathsContext = {\n            paths: [],\n            wasCommand: false,\n        }\n        collectPaths(ast, collectPathsContext);\n        ast.children = [{\n            type: \"text\",\n            value: collectPathsContext.paths.join(' ')\n        }];\n        return null;\n    },\n});\n\ninterface CollectPathsContext {\n    paths: string[];\n    wasCommand: boolean;\n}\n\nconst collectPaths = (node: XastChild | XastRoot, context: CollectPathsContext ) => {\n    if (\n        node.type === 'element' &&\n        !['path', 'g', 'svg', 'title'].includes(node.name)\n    ) {\n        throw new Error(`[SVGD ERROR] svg has other tag \"${node.name}\"`);\n    }\n    if (\n        node.type === 'element' &&\n        node.name === 'path' &&\n        node.attributes.d\n    ) {\n        const { attributes } = node;\n        const d = attributes.d;\n        const commandsArray: string[] = [];\n\n        commands.forEach(({ code, toCommand, attribute }) => {\n            if (attribute in attributes) {\n                const commandValue = toCommand(attributes[attribute]);\n                if (commandValue !== null) {\n                    commandsArray.push(`${code}${commandValue}`);\n                }\n            }\n        });\n\n        if (commandsArray.length) {\n            context.wasCommand = true;\n            context.paths.push(...commandsArray);\n        } else if (context.wasCommand) {\n            context.paths.push(\"o1\");\n        }\n        context.paths.push(d);\n    }\n    if (\"children\" in node) {\n        node.children.forEach((node) => collectPaths(node, context));\n    }\n};\n"],"mappings":"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","names":["d","node"]}