{"version":3,"sources":["../../src/SvgThemed.tsx"],"sourcesContent":["import React, {\n  Children,\n  cloneElement,\n  forwardRef,\n  isValidElement,\n} from \"react\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type { SvgThemedProps } from \"./types\";\n\nconst resolveToken = (value: any, theme: any) => {\n  if (typeof value === \"string\" && value.startsWith(\"$\")) {\n    const token = value.slice(1);\n\n    // Mapping for common tokens used in display packages\n    const tokenMap: Record<string, any> = {\n      colors_core_text_primary: theme.colors.content.primary,\n      colors_core_text_secondary: theme.colors.content.secondary,\n      colors_core_text_tertiary: theme.colors.content.tertiary,\n      colors_core_text_brand: theme.colors.content.brand.primary,\n      colors_core_text_success: theme.colors.content.success.primary,\n      colors_core_text_warning: theme.colors.content.warning.primary,\n      colors_core_text_alert: theme.colors.content.alert.primary,\n      colors_core_text_neutral: theme.colors.content.neutral.primary,\n      colors_control_faint_bg: theme.colors.control.mono.secondary.bg,\n    };\n\n    return tokenMap[token] || value;\n  }\n  return value;\n};\n\nconst processChildren = (\n  children: React.ReactNode,\n  theme: any\n): React.ReactNode => {\n  return Children.map(children, (child) => {\n    if (!isValidElement(child)) return child;\n\n    const props: any = { ...(child.props as any) };\n    const themeableProps = [\"fill\", \"stroke\", \"stopColor\", \"color\"];\n\n    themeableProps.forEach((prop) => {\n      if (props[prop]) {\n        props[prop] = resolveToken(props[prop], theme);\n      }\n    });\n\n    if (props.children) {\n      props.children = processChildren(props.children, theme);\n    }\n\n    return cloneElement(child, props);\n  });\n};\n\nexport const SvgThemed = forwardRef<SVGSVGElement, SvgThemedProps>(\n  (\n    {\n      children,\n      themeMode,\n      themeProductContext,\n      testID,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n    const themedChildren = processChildren(children, theme);\n\n    return (\n      <svg ref={ref} data-testid={dataTestId || testID} {...props}>\n        {themedChildren}\n      </svg>\n    );\n  }\n);\n\nSvgThemed.displayName = \"SvgThemed\";\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,wBAAwB;AAiE3B;AA9DN,IAAM,eAAe,CAAC,OAAY,UAAe;AAC/C,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG,GAAG;AACtD,UAAM,QAAQ,MAAM,MAAM,CAAC;AAG3B,UAAM,WAAgC;AAAA,MACpC,0BAA0B,MAAM,OAAO,QAAQ;AAAA,MAC/C,4BAA4B,MAAM,OAAO,QAAQ;AAAA,MACjD,2BAA2B,MAAM,OAAO,QAAQ;AAAA,MAChD,wBAAwB,MAAM,OAAO,QAAQ,MAAM;AAAA,MACnD,0BAA0B,MAAM,OAAO,QAAQ,QAAQ;AAAA,MACvD,0BAA0B,MAAM,OAAO,QAAQ,QAAQ;AAAA,MACvD,wBAAwB,MAAM,OAAO,QAAQ,MAAM;AAAA,MACnD,0BAA0B,MAAM,OAAO,QAAQ,QAAQ;AAAA,MACvD,yBAAyB,MAAM,OAAO,QAAQ,KAAK,UAAU;AAAA,IAC/D;AAEA,WAAO,SAAS,KAAK,KAAK;AAAA,EAC5B;AACA,SAAO;AACT;AAEA,IAAM,kBAAkB,CACtB,UACA,UACoB;AACpB,SAAO,SAAS,IAAI,UAAU,CAAC,UAAU;AACvC,QAAI,CAAC,eAAe,KAAK,EAAG,QAAO;AAEnC,UAAM,QAAa,EAAE,GAAI,MAAM,MAAc;AAC7C,UAAM,iBAAiB,CAAC,QAAQ,UAAU,aAAa,OAAO;AAE9D,mBAAe,QAAQ,CAAC,SAAS;AAC/B,UAAI,MAAM,IAAI,GAAG;AACf,cAAM,IAAI,IAAI,aAAa,MAAM,IAAI,GAAG,KAAK;AAAA,MAC/C;AAAA,IACF,CAAC;AAED,QAAI,MAAM,UAAU;AAClB,YAAM,WAAW,gBAAgB,MAAM,UAAU,KAAK;AAAA,IACxD;AAEA,WAAO,aAAa,OAAO,KAAK;AAAA,EAClC,CAAC;AACH;AAEO,IAAM,YAAY;AAAA,EACvB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,MAAM,IAAI,iBAAiB,EAAE,WAAW,oBAAoB,CAAC;AACrE,UAAM,iBAAiB,gBAAgB,UAAU,KAAK;AAEtD,WACE,oBAAC,SAAI,KAAU,eAAa,cAAc,QAAS,GAAG,OACnD,0BACH;AAAA,EAEJ;AACF;AAEA,UAAU,cAAc;","names":[]}