{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import \"./style.pcss\";\r\n\r\nimport type { FC, ReactElement } from \"react\";\r\nimport { useState, useEffect, useMemo } from \"react\";\r\nimport type { IIcon } from \"./config/types\";\r\nimport { getIconHref } from \"./utils/getIconHref\";\r\nimport { getSvgAttrs } from \"./utils/getSvgAttrs\";\r\nimport { constants } from \"../../constants\";\r\nimport type { IComponentBaseProps } from \"../../types/components\";\r\nimport { getExtraSizes } from \"../../utils/getExtraSizes\";\r\nimport { getSanitizedHTML } from \"../../utils/getSanitizedHTML\";\r\nimport { useCN } from \"../../utils/react/useCN\";\r\n\r\nconst fallbackSize = constants.defaultSizes[0];\r\n\r\n/**\r\n * Компонент иконки\r\n * @returns {ReactElement}\r\n */\r\nconst Icon: FC<IComponentBaseProps & IIcon> = ({\r\n  baseClass = \"icon\",\r\n  extraClasses = {},\r\n  extraAttrs = {},\r\n  children = null,\r\n  size = fallbackSize,\r\n  src = \"\",\r\n  type = \"asset\",\r\n  style = \"outlined\",\r\n  width,\r\n  height,\r\n}): ReactElement => {\r\n\r\n  const { getCN } = useCN(baseClass);\r\n\r\n  const [ source, setSource ] = useState<string>(() => getIconHref(src, type));\r\n\r\n  useEffect(() => {\r\n    setSource(getIconHref(src, type));\r\n  }, [ src, type ]);\r\n\r\n  const renderProps = useMemo(() => {\r\n    if (children) {\r\n      return { children };\r\n    }\r\n\r\n    switch (type) {\r\n      case \"asset\": {\r\n        const fallbackAttrs = getSvgAttrs(size);\r\n        const w = width || fallbackAttrs.width;\r\n        const h = height || fallbackAttrs.height;\r\n        const attrs = (!!w && !!h) ? `width=${w} height=${h}` : ``;\r\n        const svg = `<svg ${attrs} class=\"${getCN(\"src\")}\"><use href=\"${source}\" /></svg>`;\r\n        return {\r\n          dangerouslySetInnerHTML: {\r\n            __html: getSanitizedHTML(svg),\r\n          },\r\n        };\r\n      }\r\n\r\n      case \"material\": {\r\n        return {\r\n          children: (\r\n            <span className={getCN(\"src\", {}, [ `material-symbols-${style}` ])}>\r\n              {source}\r\n            </span>\r\n          ),\r\n        };\r\n      }\r\n\r\n      default:\r\n        console.error(`[Icon] Please check the \"src\" prop (\"${src}\"), failed to set icon content`);\r\n        return {};\r\n    }\r\n  }, [ children, type, src, getCN, source, style, size ]);\r\n\r\n  return (\r\n    <span role={\"presentation\"} className={getCN(\"\", getExtraSizes({ size, extraClasses }))} {...renderProps} {...extraAttrs} />\r\n  );\r\n};\r\n\r\nexport type { IIcon };\r\nexport { Icon };\r\n"],"names":["fallbackSize","constants","defaultSizes","Icon","baseClass","extraClasses","extraAttrs","children","size","src","type","style","width","height","getCN","useCN","source","setSource","useState","getIconHref","useEffect","renderProps","useMemo","fallbackAttrs","getSvgAttrs","w","h","attrs","svg","dangerouslySetInnerHTML","__html","getSanitizedHTML","_jsx","className","console","error","role","getExtraSizes"],"mappings":"2YAaA,MAAMA,aAAeC,UAAUC,aAAa;;;;GAM5C,MAAMC,KAAwC,EAC5CC,oBAAY,OACZC,0BAAe,CAAA,EACfC,sBAAa,CAAA,EACbC,kBAAW,KACXC,UAAOR,aACPS,QAAM,GACNC,UAAO,QACPC,YAAQ,WACRC,YACAC,kBAGA,MAAMC,MAAEA,OAAUC,MAAMX,WAExB,MAAQY,OAAQC,WAAcC,SAAiB,IAAMC,YAAYV,IAAKC,OAEtEU,UAAU,KACRH,UAAUE,YAAYV,IAAKC,QAC1B,CAAED,IAAKC,OAEV,MAAMW,YAAcC,QAAQ,KAC1B,GAAIf,SACF,MAAO,CAAEA,mBAGX,OAAQG,MACN,IAAK,QAAS,CACZ,MAAMa,cAAgBC,YAAYhB,MAClC,MAAMiB,EAAIb,OAASW,cAAcX,MACjC,MAAMc,EAAIb,QAAUU,cAAcV,OAClC,MAAMc,QAAWF,KAAOC,EAAK,SAASD,YAAYC,IAAM,GACxD,MAAME,IAAM,QAAQD,gBAAgBb,MAAM,sBAAsBE,mBAChE,MAAO,CACLa,wBAAyB,CACvBC,OAAQC,iBAAiBH,MAG/B,CAEA,IAAK,WACH,MAAO,CACLrB,SACEyB,IAAA,OAAA,CAAMC,UAAWnB,MAAM,MAAO,CAAA,EAAI,CAAE,oBAAoBH,UAAWJ,SAChES,UAMT,QACEkB,QAAQC,MAAM,wCAAwC1B,qCACtD,MAAO,CAAA,IAEV,CAAEF,SAAUG,KAAMD,IAAKK,MAAOE,OAAQL,MAAOH;AAEhD,OACEwB,IAAA,OAAA,CAAMI,KAAM,eAAgBH,UAAWnB,MAAM,GAAIuB,cAAc,CAAE7B,UAAMH,gCAAsBgB,eAAiBf"}