{"version":3,"sources":["../src/index.ts","../src/commands.ts","../src/getPaths.ts","../src/getSvg.ts","../src/convertRoundedRectToPath.ts","../src/defaultConfig.ts","../src/resizePlugin.ts","../src/inlineUsePlugin.ts","../src/moveGroupOpacityToElementsPlugin.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","type XastElement = {\n    name: string;\n    attributes?: Record<string, string>;\n};\n\ntype Visitor = {\n    element?: {\n        enter?: (node: XastElement) => void;\n    };\n};\n\ntype SvgoCustomPlugin = {\n    name: string;\n    description: string;\n    fn: () => Visitor;\n};\n\nexport const convertRoundedRectToPath: SvgoCustomPlugin = {\n    name: 'convertRoundedRectToPath',\n    description: 'Convert only rounded <rect> elements to <path>.',\n    fn: () => {\n        return {\n            element: {\n                enter: (node: XastElement) => {\n                    if (node.name !== 'rect' || node.attributes == null) {\n                        return;\n                    }\n\n                    const attrs = node.attributes;\n\n                    const x = toNumber(attrs.x, 0);\n                    const y = toNumber(attrs.y, 0);\n                    const width = toNumber(attrs.width, null);\n                    const height = toNumber(attrs.height, null);\n\n                    if (\n                        width == null ||\n                        height == null ||\n                        !Number.isFinite(width) ||\n                        !Number.isFinite(height) ||\n                        width <= 0 ||\n                        height <= 0\n                    ) {\n                        return;\n                    }\n\n                    const hasRx = attrs.rx != null;\n                    const hasRy = attrs.ry != null;\n\n                    // Only process rects that explicitly have rounded corners.\n                    if (!hasRx && !hasRy) {\n                        return;\n                    }\n\n                    let rx = hasRx ? toNumber(attrs.rx, 0) : null;\n                    let ry = hasRy ? toNumber(attrs.ry, 0) : null;\n\n                    // SVG behavior:\n                    // - if only rx is set, ry = rx\n                    // - if only ry is set, rx = ry\n                    if (rx != null && ry == null) {\n                        ry = rx;\n                    } else if (rx == null && ry != null) {\n                        rx = ry;\n                    }\n\n                    rx = clamp(rx ?? 0, 0, width / 2);\n                    ry = clamp(ry ?? 0, 0, height / 2);\n\n                    // Skip non-rounded rects, including rx=\"0\"/ry=\"0\".\n                    if (rx <= 0 && ry <= 0) {\n                        return;\n                    }\n\n                    const d = buildRoundedRectPath(x, y, width, height, rx, ry);\n\n                    node.name = 'path';\n                    node.attributes = {\n                        ...attrs,\n                        d,\n                    };\n\n                    delete node.attributes.x;\n                    delete node.attributes.y;\n                    delete node.attributes.width;\n                    delete node.attributes.height;\n                    delete node.attributes.rx;\n                    delete node.attributes.ry;\n                },\n            },\n        };\n    },\n};\n\nfunction toNumber<Fallback extends number | null>(value: string | undefined, fallback: Fallback): number | Fallback {\n    if (value == null) {\n        return fallback;\n    }\n\n    const num = Number.parseFloat(String(value).trim());\n    return Number.isFinite(num) ? num : fallback;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n    return Math.max(min, Math.min(max, value));\n}\n\nfunction buildRoundedRectPath(\n    x: number,\n    y: number,\n    width: number,\n    height: number,\n    rx: number,\n    ry: number,\n): string {\n    const x2 = x + width;\n    const y2 = y + height;\n\n    return [\n        'M', fmt(x + rx), fmt(y),\n        'H', fmt(x2 - rx),\n        'A', fmt(rx), fmt(ry), '0', '0', '1', fmt(x2), fmt(y + ry),\n        'V', fmt(y2 - ry),\n        'A', fmt(rx), fmt(ry), '0', '0', '1', fmt(x2 - rx), fmt(y2),\n        'H', fmt(x + rx),\n        'A', fmt(rx), fmt(ry), '0', '0', '1', fmt(x), fmt(y2 - ry),\n        'V', fmt(y + ry),\n        'A', fmt(rx), fmt(ry), '0', '0', '1', fmt(x + rx), fmt(y),\n        'Z',\n    ].join(' ');\n}\n\nfunction fmt(value: number): string {\n    return Number.parseFloat(value.toFixed(6)).toString();\n}","import { type Config } from 'svgo';\nimport { ResizeParams } from \"./resizePlugin\";\nimport { convertRoundedRectToPath } from \"./convertRoundedRectToPath\";\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: 'removeAttrs',\n                params: {\n                    attrs: [\n                        'overflow',\n                        'filter'\n                    ]\n                }\n            },\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            convertRoundedRectToPath,\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 type { CustomPlugin } from \"svgo\";\nimport type { XastNode } from \"svgo/lib/types\";\n\nexport const inlineUsePlugin: CustomPlugin = {\n    name: 'inlineUse',\n    fn: () => {\n        const defsMap = new Map();\n        function collectDefs(node: XastNode) {\n            if (node.type === \"element\" || node.type === \"root\") {\n                if (node.type === \"element\" && node.name === 'defs' && Array.isArray(node.children)) {\n                    node.children = node.children.filter((defEl) => {\n                        if(defEl.type !== \"element\" || defEl.name !== 'path') {\n                            return true;\n                        }\n                        const {id, ...attributes} = defEl?.attributes ?? {};\n                        if (id) {\n                            defsMap.set(id, {...defEl, attributes });\n                            return false;\n                        }\n                        return true;\n                    });\n                } else if (Array.isArray(node.children)) {\n                    for (const child of node.children) {\n                        collectDefs(child);\n                    }\n                }\n            }\n\n        }\n        return {\n            root: {\n                enter(rootNode) {\n                    collectDefs(rootNode);\n                },\n            },\n            element: {\n                enter(node, parentNode) {\n                    if (node.name !== 'use') return;\n                    const href = node.attributes.href || node.attributes['xlink:href'];\n                    if (!href || !href.startsWith('#')) return;\n                    const id = href.slice(1);\n                    const defEl = defsMap.get(id);\n                    if (!defEl) return;\n\n                    // shallow clone of defEl + merge attributes\n                    const clone = {\n                        name: defEl.name,\n                        type: defEl.type,\n                        attributes: { ...defEl.attributes, ...node.attributes },\n                        children: defEl.children\n                    };\n\n                    // replace <use> в parentNode.children\n                    const idx = parentNode.children.indexOf(node);\n                    if (idx >= 0) {\n                        parentNode.children.splice(idx, 1, clone);\n                    }\n                }\n            }\n        };\n    }\n}\n","import type { CustomPlugin } from \"svgo\";\nimport { XastElement } from \"svgo/lib/types\";\n\nexport const name = 'moveGroupAttrsToElems';\nexport const description =\n    'moves some group attributes to the content elements';\n\nconst opacityAttibutes = [\"opacity\", \"fill-opacity\", \"stroke-opacity\"];\n\nexport const moveGroupOpacityToElementsPlugin: CustomPlugin = {\n    name: 'inlineUse',\n    fn: () => {\n        return {\n            element: {\n                enter: (node) => {\n                    if (\n                        node.name === 'g' &&\n                        node.children.length !== 0\n                    ) {\n\n                        const mergers = opacityAttibutes\n                            .map((opacityAttibute) => getMergeOpacity(node, opacityAttibute))\n                            .filter(Boolean) as Array<(node: XastElement) => void>;\n\n                        for (const child of node.children) {\n\n                            if (child.type === 'element') {\n                                mergers.forEach((merge)=> merge(child));\n                            }\n                        }\n\n                        opacityAttibutes.forEach((opacityAttibute)=>{\n                            delete node.attributes[opacityAttibute];\n                        })\n                    }\n                },\n            },\n        };\n    }\n}\n\nfunction getMergeOpacity(parent: XastElement, attributeName: string) {\n    if (!(attributeName in parent.attributes)) return null;\n    const parentValue = parent.attributes[attributeName];\n    const parsedParentValue = Number.parseFloat(parentValue);\n    return (node: XastElement) => {\n        if (node.type === 'element') {\n            const value = node.attributes[attributeName];\n            node.attributes[attributeName] = (value !== null && value !== undefined)\n                ? String(Number.parseFloat(node.attributes[attributeName]) * parsedParentValue)\n                : parentValue;\n\n        }\n    }\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 { inlineUsePlugin } from \"./inlineUsePlugin\";\nimport { commands } from \"./commands\";\nimport { moveGroupOpacityToElementsPlugin } from \"./moveGroupOpacityToElementsPlugin\";\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            inlineUsePlugin,\n            moveGroupOpacityToElementsPlugin,\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\ntype CollectableAttribute = typeof commands[number][\"attribute\"];\ntype InheritedAttributes = Partial<Record<CollectableAttribute, string>>;\n\nconst pickCollectableAttributes = (attributes: Record<string, string>): InheritedAttributes => {\n    const pickedAttributes: InheritedAttributes = {};\n    commands.forEach(({ attribute }) => {\n        if (attributes[attribute] !== undefined) {\n            pickedAttributes[attribute] = attributes[attribute];\n        }\n    });\n    return pickedAttributes;\n};\n\nconst collectPaths = (\n    node: XastChild | XastRoot,\n    context: CollectPathsContext,\n    inheritedAttributes: InheritedAttributes = {},\n) => {\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 effectiveAttributes = {\n            ...inheritedAttributes,\n            ...node.attributes,\n        };\n        const d = node.attributes.d;\n        const commandsArray: string[] = [];\n\n        commands.forEach(({ code, toCommand, attribute }) => {\n            if (attribute in effectiveAttributes) {\n                const commandValue = toCommand(effectiveAttributes[attribute] as string);\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\n    const childrenInheritedAttributes = (\n        node.type === \"element\" && ['g', 'svg'].includes(node.name)\n    )\n        ? { ...inheritedAttributes, ...pickCollectableAttributes(node.attributes) }\n        : inheritedAttributes;\n\n    if (\"children\" in node) {\n        node.children.forEach((node) => collectPaths(node, context, childrenInheritedAttributes));\n    }\n};\n"],"mappings":"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","names":["d","node"]}