{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import \"./style.pcss\";\r\n\r\nimport { getMergedObj } from \"@web3r/flowerkit/obj\";\r\nimport type {\r\n  FC, ReactNode, ReactElement, PropsWithChildren,\r\n} from \"react\";\r\nimport {\r\n  Children,\r\n  cloneElement,\r\n  isValidElement,\r\n  useMemo,\r\n} from \"react\";\r\nimport { Translation } from \"react-i18next\";\r\nimport type { ILocale, TTranslation } from \"./config/types\";\r\nimport { useMessage, getIsAttr, getUserAttrs } from \"./lib\";\r\nimport { constants } from \"../../constants\";\r\nimport type { IComponentBaseProps } from \"../../types/components\";\r\nimport { useCN } from \"../../utils/react/useCN\";\r\nimport { useLocalisationPlugin } from \"../../utils/react/useLocalisationPlugin\";\r\nimport { useSSGRender } from \"../../utils/react/useSSGRender\";\r\n\r\n\r\n/**\r\n * Вывод данных локализации\r\n * @returns {ReactNode}\r\n */\r\nconst Message: FC<ILocale & PropsWithChildren<TTranslation>> = ({\r\n  fn,\r\n  code,\r\n  options,\r\n  instance,\r\n  attr,\r\n  children,\r\n}): ReactNode => {\r\n\r\n  const { message } = useMessage({\r\n    fn, code, instance, options,\r\n  });\r\n\r\n  const isAttr = getIsAttr(attr);\r\n\r\n  if (isAttr && !!children) { // перевод только указанного атрибута для единственного дочернего элемента\r\n\r\n    return Children\r\n      .toArray(children)\r\n      .filter((child) => isValidElement(child))\r\n      .map((child, index) => {\r\n\r\n        const userAttrs = typeof attr === \"string\" ? getUserAttrs({\r\n          [attr]: message,\r\n        }) : getUserAttrs(Object.fromEntries((attr as string[]).map((str) => [ str, message ])));\r\n\r\n        const currentProps: PropsWithChildren<typeof child.props & {\r\n          key: number;\r\n        }> = {\r\n          ...(child?.props ?? {}),\r\n          key: index,\r\n        };\r\n\r\n        const computedProps = getMergedObj(currentProps, userAttrs);\r\n\r\n        return cloneElement(child, computedProps, currentProps.children);\r\n      });\r\n  } else { // возвращение перевода как дочернего текста\r\n    return message;\r\n  }\r\n};\r\n\r\n\r\n/**\r\n * Компонент вывода локали\r\n * @returns {ReactElement}\r\n */\r\nconst Locale: FC<IComponentBaseProps & ILocale> = (props): ReactElement => {\r\n\r\n  const {\r\n    baseClass = \"locale\",\r\n    extraClasses = {},\r\n    extraAttrs = {},\r\n    children,\r\n    code,\r\n    attr,\r\n    options = {},\r\n    ns,\r\n  } = props;\r\n\r\n  const { getCN } = useCN(baseClass);\r\n\r\n  const { isLoading, isError, isReady } = useLocalisationPlugin(code);\r\n\r\n  const utilClasses = useMemo<string[]>(() => {\r\n    switch (true) {\r\n      case isReady: {\r\n        return [ constants.stateClasses.translated ];\r\n      }\r\n      case isError: {\r\n        return [ constants.stateClasses.translationError ];\r\n      }\r\n      case isLoading:\r\n      default: {\r\n        return [ constants.stateClasses.translationLoading ];\r\n      }\r\n    }\r\n  }, [ isLoading, isError, isReady ]);\r\n\r\n  const metaAttr = useMemo<string>(() => {\r\n    return JSON.stringify({\r\n      code,\r\n      options,\r\n      attr,\r\n    });\r\n  }, [ code, options, attr ]);\r\n\r\n  const SSGComponent = useSSGRender(\"data-js-locale\", props, \"ins\", baseClass);\r\n\r\n  if (SSGComponent) {\r\n    return SSGComponent;\r\n  }\r\n\r\n  return (\r\n    <ins data-js-locale={metaAttr} className={getCN(\"\", extraClasses, utilClasses)} {...extraAttrs}>\r\n      {isLoading && children}\r\n      {isReady && (\r\n        <Translation ns={ns}>\r\n          {(t, instance) => (\r\n            <Message\r\n              attr={attr}\r\n              instance={instance.i18n}\r\n              fn={t}\r\n              code={code}\r\n              options={options}\r\n            >\r\n              {children}\r\n            </Message>\r\n          )}\r\n        </Translation>\r\n      )}\r\n    </ins>\r\n  );\r\n\r\n};\r\n\r\nexport type { ILocale };\r\nexport { Locale };\r\n"],"names":["Message","fn","code","options","instance","attr","children","message","useMessage","isAttr","getIsAttr","Children","toArray","filter","child","isValidElement","map","index","userAttrs","getUserAttrs","Object","fromEntries","str","currentProps","props","key","computedProps","getMergedObj","cloneElement","Locale","baseClass","extraClasses","extraAttrs","ns","getCN","useCN","isLoading","isError","isReady","useLocalisationPlugin","utilClasses","useMemo","constants","stateClasses","translated","translationError","translationLoading","metaAttr","JSON","stringify","SSGComponent","useSSGRender","_jsxs","className","_jsx","Translation","t","i18n"],"mappings":"yeA0BA,MAAMA,QAAyD,EAC7DC,MACAC,UACAC,gBACAC,kBACAC,UACAC,sBAGA,MAAMC,QAAEA,SAAYC,WAAW,CAC7BP,MAAIC,UAAME,kBAAUD,kBAGtB,MAAMM,OAASC,UAAUL,MAEzB,GAAII,UAAYH;;AAEd,OAAOK,SACJC,QAAQN,UACRO,OAAQC,OAAUC,eAAeD,QACjCE,IAAI,CAACF,MAAOG,SAEX,MAAMC,iBAAmBb,OAAS,SAAWc,aAAa,CACxDd,CAACA,MAAOE,UACLY,aAAaC,OAAOC,YAAahB,KAAkBW,IAAKM,KAAQ,CAAEA,IAAKf,YAE5E,MAAMgB,aAED,IACCT,OAAOU,OAAS,GACpBC,IAAKR,OAGP,MAAMS,cAAgBC,aAAaJ,aAAcL;AAEjD,OAAOU,aAAad,MAAOY,cAAeH,aAAajB;;AAG3D,OAAOC;;;;GASX,MAAMsB,OAA6CL,QAEjD,MAAMM,UACJA,UAAY,SAAQC,aACpBA,aAAe,CAAA,EAAEC,WACjBA,WAAa,CAAA,EAAE1B,SACfA,SAAQJ,KACRA,KAAIG,KACJA,KAAIF,QACJA,QAAU,CAAA,EAAE8B,GACZA,IACET,MAEJ,MAAMU,MAAEA,OAAUC,MAAML,WAExB,MAAMM,UAAEA,UAASC,QAAEA,QAAOC,QAAEA,SAAYC,sBAAsBrC,MAE9D,MAAMsC,YAAcC,QAAkB,KACpC,OAAQ,MACN,KAAKH,QACH,MAAO,CAAEI,UAAUC,aAAaC,YAElC,KAAKP,QACH,MAAO,CAAEK,UAAUC,aAAaE,kBAElC,KAAKT,UACL,QACE,MAAO,CAAEM,UAAUC,aAAaG,sBAGnC,CAAEV,UAAWC,QAASC,UAEzB,MAAMS,SAAWN,QAAgB,IACxBO,KAAKC,UAAU,CACpB/C,UACAC,gBACAE,YAED,CAAEH,KAAMC,QAASE,OAEpB,MAAM6C,aAAeC,aAAa,iBAAkB3B,MAAO,MAAOM,WAElE,GAAIoB,aACF,OAAOA;AAGT,OACEE,KAAA,MAAA,CAAK,iBAAgBL,SAAUM,UAAWnB,MAAM,GAAIH,aAAcS,gBAAkBR,WAAU1B,SAAA,CAC3F8B,WAAa9B,SACbgC,SACCgB,IAACC,YAAW,CAACtB,GAAIA,GAAG3B,SACjB,CAACkD,EAAGpD,WACHkD,IAACtD,QAAO,CACNK,KAAMA,KACND,SAAUA,SAASqD,KACnBxD,GAAIuD,EACJtD,KAAMA,KACNC,QAASA,QAAQG,SAEhBA"}