{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import type {\r\n  ReactNode,\r\n  PropsWithChildren,\r\n} from \"react\";\r\nimport {\r\n  Children,\r\n  isValidElement,\r\n  cloneElement,\r\n  Fragment,\r\n} from \"react\";\r\n\r\ntype TCallableComponent = (props: unknown) => ReactNode;\r\n\r\nconst isCallableComponent = (type: unknown): type is TCallableComponent => {\r\n  return typeof type === \"function\" &&\r\n    !type.prototype?.render &&\r\n    type !== Fragment;\r\n};\r\n\r\nconst SHORT_WORDS = [\r\n  \"в\", \"во\", \"без\", \"до\", \"из\", \"к\", \"ко\", \"на\", \"по\", \"о\", \"от\", \"перед\",\r\n  \"при\", \"через\", \"с\", \"у\", \"над\", \"за\", \"и\", \"да\", \"ни\", \"но\", \"или\", \"ли\",\r\n  \"же\", \"бы\", \"б\", \"ль\", \"ли\", \"разве\", \"ведь\", \"вот\", \"вон\", \"ка\", \"то\",\r\n  \"не\", \"ни\", \"а\", \"что\", \"как\", \"это\", \"этот\", \"такой\", \"такая\", \"такое\",\r\n  \"такие\", \"все\", \"всё\", \"весь\", \"вся\", \"всю\", \"всех\", \"всем\", \"всеми\",\r\n  \"тот\", \"та\", \"те\", \"тех\", \"тем\", \"теми\", \"сей\", \"сего\", \"сему\", \"сим\",\r\n  \"се\", \"оный\", \"оного\", \"оному\", \"оным\", \"оном\", \"она\", \"оне\", \"они\",\r\n  \"кои\", \"кая\",\r\n  \"a\", \"an\", \"the\",\r\n  \"and\", \"or\", \"but\", \"nor\", \"for\", \"so\", \"yet\",\r\n  \"as\", \"if\", \"than\", \"that\", \"till\", \"until\", \"when\", \"where\", \"whether\", \"while\",\r\n  \"at\", \"by\", \"in\", \"of\", \"on\", \"to\", \"with\", \"from\", \"into\", \"upon\", \"among\", \"about\",\r\n  \"vs.\", \"v.\", \"versus\",\r\n  \"etc.\", \"e.g.\", \"i.e.\", \"cf.\",\r\n];\r\n\r\n/**\r\n * Получает текст с неразрывными пробелами\r\n * @param text{String}\r\n * @returns {String}\r\n */\r\nconst getStrWithSpaces = (text: string): string => {\r\n\r\n  const result = text\r\n    .replace(/\\s+/g, \" \")\r\n    .replaceAll(\" - \", \"\\u00A0—\\u00A0\")\r\n    .replaceAll(\" -- \", \"\\u00A0—\\u00A0\");\r\n\r\n  const tokens = result.split(/([\\s\\-]+)/);\r\n\r\n  for (let i = 0; i < tokens.length - 2; i++) {\r\n\r\n    if (tokens[i] === \" \") {\r\n      continue;\r\n    }\r\n\r\n    const currentWord = tokens[i].toLowerCase().replace(/[^a-zа-яё]/g, \"\");\r\n    const nextWord = tokens[i + 2].toLowerCase().replace(/[^a-zа-яё]/g, \"\");\r\n\r\n    // Если текущее или следующее слово - короткое, заменяем пробел на неразрывный\r\n    if (SHORT_WORDS.includes(currentWord) || SHORT_WORDS.includes(nextWord)) {\r\n      if (tokens[i + 1] === \" \") {\r\n        tokens[i + 1] = \"\\u00A0\";\r\n      } else if (/^\\s+$/.test(tokens[i + 1])) {\r\n        tokens[i + 1] = tokens[i + 1].replace(/\\s/g, \"\\u00A0\");\r\n      }\r\n    }\r\n  }\r\n\r\n  return tokens.join(\"\");\r\n};\r\n\r\n/**\r\n * Получает дочерние компоненты с исправленным текстом\r\n * @param children{ReactNode}\r\n * @returns {ReactElement}\r\n */\r\nconst getFormattedChildren = (children: ReactNode): ReactNode => {\r\n  return Children.map(children, (child) => {\r\n\r\n    switch (true) {\r\n      // Обработка строк и чисел\r\n      case typeof child === \"string\" || typeof child === \"number\": {\r\n        return getStrWithSpaces(child.toString());\r\n      }\r\n\r\n      // Пропускаем null, undefined, boolean\r\n      case !isValidElement(child): {\r\n        return child;\r\n      }\r\n\r\n      // Обработка Fragment (чтобы не ломать структуру)\r\n      case (isValidElement(child) && child.type === Fragment): {\r\n        const props = (child?.props ?? {}) as PropsWithChildren<Record<string, unknown>>;\r\n        return cloneElement(child, props, getFormattedChildren(props.children));\r\n      }\r\n\r\n      // Обработка обычных элементов и компонентов\r\n      case (isValidElement<PropsWithChildren<Record<string, unknown>>>(child)): {\r\n        const { children: childChildren, ...restProps } = child.props;\r\n\r\n        // Если это компонент (функция), вызываем его с props и форматируем children\r\n        if (isCallableComponent(child.type)) {\r\n          try {\r\n            const renderedChild = child.type(child.props);\r\n            return getFormattedChildren(renderedChild);\r\n          } catch (e) {\r\n            console.warn(\"[Text] Failed to render component:\", e);\r\n            return child;\r\n          }\r\n        }\r\n\r\n        // Если это обычный элемент (div, span и т.д.), форматируем его children\r\n        return cloneElement(child, restProps, getFormattedChildren(childChildren));\r\n      }\r\n      default:\r\n        return child;\r\n    }\r\n  });\r\n};\r\n\r\nexport {\r\n  getFormattedChildren,\r\n  getStrWithSpaces,\r\n};\r\n"],"names":["isCallableComponent","type","prototype","render","Fragment","SHORT_WORDS","getStrWithSpaces","text","result","replace","replaceAll","tokens","split","i","length","currentWord","toLowerCase","nextWord","includes","test","join","getFormattedChildren","children","Children","map","child","toString","isValidElement","props","cloneElement","childChildren","restProps","renderedChild","e","console","warn"],"mappings":"iEAaA,MAAMA,oBAAuBC,aACbA,OAAS,aACpBA,KAAKC,WAAWC,QACjBF,OAASG,SAGb,MAAMC,YAAc,CAClB,IAAK,KAAM,MAAO,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,QAChE,MAAO,QAAS,IAAK,IAAK,MAAO,KAAM,IAAK,KAAM,KAAM,KAAM,MAAO,KACrE,KAAM,KAAM,IAAK,KAAM,KAAM,QAAS,OAAQ,MAAO,MAAO,KAAM,KAClE,KAAM,KAAM,IAAK,MAAO,MAAO,MAAO,OAAQ,QAAS,QAAS,QAChE,QAAS,MAAO,MAAO,OAAQ,MAAO,MAAO,OAAQ,OAAQ,QAC7D,MAAO,KAAM,KAAM,MAAO,MAAO,OAAQ,MAAO,OAAQ,OAAQ,MAChE,KAAM,OAAQ,QAAS,QAAS,OAAQ,OAAQ,MAAO,MAAO,MAC9D,MAAO,MACP,IAAK,KAAM,MACX,MAAO,KAAM,MAAO,MAAO,MAAO,KAAM,MACxC,KAAM,KAAM,OAAQ,OAAQ,OAAQ,QAAS,OAAQ,QAAS,UAAW,QACzE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,OAAQ,OAAQ,OAAQ,QAAS,QAC7E,MAAO,KAAM,SACb,OAAQ,OAAQ,OAAQ;;;;;GAQ1B,MAAMC,iBAAoBC,OAExB,MAAMC,OAASD,KACZE,QAAQ,OAAQ,KAChBC,WAAW,MAAO,OAClBA,WAAW,OAAQ,OAEtB,MAAMC,OAASH,OAAOI,MAAM,aAE5B,IAAK,IAAIC,EAAI,EAAGA,EAAIF,OAAOG,OAAS,EAAGD,IAAK,CAE1C,GAAIF,OAAOE,KAAO,IAChB,SAGF,MAAME,YAAcJ,OAAOE,GAAGG,cAAcP,QAAQ,cAAe,IACnE,MAAMQ,SAAWN,OAAOE,EAAI,GAAGG,cAAcP,QAAQ,cAAe;8EAGpE;GAAIJ,YAAYa,SAASH,cAAgBV,YAAYa,SAASD,UAC5D,GAAIN,OAAOE,EAAI,KAAO,IACpBF,OAAOE,EAAI,GAAK,SACX,GAAI,QAAQM,KAAKR,OAAOE,EAAI,IACjCF,OAAOE,EAAI,GAAKF,OAAOE,EAAI,GAAGJ,QAAQ,MAAO,IAGnD,CAEA,OAAOE,OAAOS,KAAK;;;;;GAQrB,MAAMC,qBAAwBC,UACrBC,SAASC,IAAIF,SAAWG,QAE7B,OAAQ;;AAEN,YAAYA,QAAU,iBAAmBA,QAAU,SACjD,OAAOnB,iBAAiBmB,MAAMC;sCAIhC;KAAMC,eAAeF,OACnB,OAAOA;iDAIT;KAAME,eAAeF,QAAUA,MAAMxB,OAASG,SAAW,CACvD,MAAMwB,MAASH,OAAOG,OAAS,CAAA,EAC/B,OAAOC,aAAaJ,MAAOG,MAAOP,qBAAqBO,MAAMN,UAC/D;4CAGA;KAAMK,eAA2DF,OAAS,CACxE,MAAQH,SAAUQ,iBAAkBC,WAAcN,MAAMG;4EAGxD;GAAI5B,oBAAoByB,MAAMxB,MAC5B,IACE,MAAM+B,cAAgBP,MAAMxB,KAAKwB,MAAMG,OACvC,OAAOP,qBAAqBW,cAC9B,CAAE,MAAOC,GACPC,QAAQC,KAAK,qCAAsCF,GACnD,OAAOR,KACT;wEAIF;OAAOI,aAAaJ,MAAOM,UAAWV,qBAAqBS,eAC7D,CACA,QACE,OAAOL"}