{"version":3,"file":"parseSVGDefinitions.mjs","sources":["../../../../../src/scene/graphics/shared/svg/parseSVGDefinitions.ts"],"sourcesContent":["import { Color } from '../../../../color/Color';\nimport { warn } from '../../../../utils/logging/warn';\nimport { FillGradient } from '../fill/FillGradient';\nimport { parseSVGFloatAttribute } from './parseSVGFloatAttribute';\n\nimport type { Session } from './SVGParser';\n\n/**\n * Parses SVG gradient definitions and stores them in the session for later use.\n * Currently supports linear gradients and has placeholder support for radial gradients.\n * @param svg - The root SVG element to parse definitions from\n * @param session - The parsing session to store definitions in\n * @internal\n */\nexport function parseSVGDefinitions(svg: SVGElement, session: Session): void\n{\n    // Find all <defs> elements in the SVG\n    const definitions = svg.querySelectorAll('defs');\n\n    // Process each <defs> element\n    for (let i = 0; i < definitions.length; i++)\n    {\n        const definition = definitions[i];\n\n        // Process each child element in the <defs>\n        for (let j = 0; j < definition.children.length; j++)\n        {\n            const child = definition.children[j];\n\n            // Handle different types of gradient definitions\n            switch (child.nodeName.toLowerCase())\n            {\n                case 'lineargradient':\n                    // Store the parsed linear gradient in the session defs using the gradient's ID\n                    session.defs[child.id] = parseLinearGradient(child as SVGElement);\n                    break;\n                case 'radialgradient':\n                    session.defs[child.id] = parseRadialGradient(child as SVGElement);\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n}\n\n/**\n * Parses an SVG linear gradient element into a FillGradient.\n * @param child - The SVG linear gradient element to parse\n * @returns A FillGradient configured based on the SVG element\n */\nfunction parseLinearGradient(child: SVGElement): FillGradient\n{\n    // Parse the gradient vector coordinates (defaults: horizontal line from 0 to 1)\n    const x0 = parseSVGFloatAttribute(child, 'x1', 0);\n    const y0 = parseSVGFloatAttribute(child, 'y1', 0);\n    const x1 = parseSVGFloatAttribute(child, 'x2', 1);\n    const y1 = parseSVGFloatAttribute(child, 'y2', 0);\n\n    // Get the gradient coordinate system\n    const gradientUnit = child.getAttribute('gradientUnits') || 'objectBoundingBox';\n\n    // Create gradient with coordinates and space mapping\n    const gradient = new FillGradient(\n        x0,\n        y0,\n        x1,\n        y1,\n        gradientUnit === 'objectBoundingBox' ? 'local' : 'global'\n    );\n\n    // Process each gradient stop\n    for (let k = 0; k < child.children.length; k++)\n    {\n        const stop = child.children[k] as SVGElement;\n\n        // Get stop position (0-1) and color\n        const offset = parseSVGFloatAttribute(stop, 'offset', 0);\n        const color = Color.shared.setValue(stop.getAttribute('stop-color')).toNumber();\n\n        gradient.addColorStop(offset, color);\n    }\n\n    return gradient;\n}\n\n/**\n * Placeholder function for parsing SVG radial gradients.\n * Currently returns a simple horizontal linear gradient and logs a warning.\n * @param _child - The SVG radial gradient element (currently unused)\n * @returns A default linear gradient\n */\nfunction parseRadialGradient(_child: SVGElement): FillGradient\n{\n    // #if _DEBUG\n    warn('[SVG Parser] Radial gradients are not yet supported');\n    // #endif\n\n    return new FillGradient(0, 0, 1, 0);\n}\n"],"names":[],"mappings":";;;;;;AAcO,SAAS,mBAAA,CAAoB,KAAiB,OAAA,EACrD;AAEI,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,gBAAA,CAAiB,MAAM,CAAA;AAG/C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EACxC;AACI,IAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAGhC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAA,EAChD;AACI,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,QAAA,CAAS,CAAC,CAAA;AAGnC,MAAA,QAAQ,KAAA,CAAM,QAAA,CAAS,WAAA,EAAY;AACnC,QACI,KAAK,gBAAA;AAED,UAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,GAAI,oBAAoB,KAAmB,CAAA;AAChE,UAAA;AAAA,QACJ,KAAK,gBAAA;AACD,UAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,GAAI,oBAAoB,KAAmB,CAAA;AAChE,UAAA;AAAA,QACJ;AACI,UAAA;AAAA;AACR,IACJ;AAAA,EACJ;AACJ;AAOA,SAAS,oBAAoB,KAAA,EAC7B;AAEI,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAGhD,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,CAAa,eAAe,CAAA,IAAK,mBAAA;AAG5D,EAAA,MAAM,WAAW,IAAI,YAAA;AAAA,IACjB,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,EAAA;AAAA,IACA,YAAA,KAAiB,sBAAsB,OAAA,GAAU;AAAA,GACrD;AAGA,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAA,EAC3C;AACI,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAG7B,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AACvD,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,QAAA,CAAS,KAAK,YAAA,CAAa,YAAY,CAAC,CAAA,CAAE,QAAA,EAAS;AAE9E,IAAA,QAAA,CAAS,YAAA,CAAa,QAAQ,KAAK,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,QAAA;AACX;AAQA,SAAS,oBAAoB,MAAA,EAC7B;AAEI,EAAA,IAAA,CAAK,qDAAqD,CAAA;AAG1D,EAAA,OAAO,IAAI,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AACtC;;;;"}