{"version":3,"sources":["../../../../src/lib/i18n/translation.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n  useIntl,\n  type MessageDescriptor,\n  type MessageValues,\n} from \"./intl-context.js\";\n\ntype TranslationProps = MessageDescriptor & {\n  trailingSpace?: boolean;\n  values?: MessageValues;\n};\n\n/**\n * Translation component that gracefully degrades when no I18nProvider is present.\n *\n * - With I18nProvider: Uses react-intl for full i18n support (react-intl will be bundled)\n * - Without I18nProvider: Renders the defaultMessage with simple value interpolation (no react-intl bundled)\n */\nexport const Translation: React.FC<TranslationProps> = (props) => {\n  const { defaultMessage, id, description, trailingSpace, values } = props;\n  const i18n = useIntl();\n\n  // If I18nProvider is present, use react-intl's formatting\n  if (i18n) {\n    const str = i18n.formatMessage({ id, defaultMessage, description }, values);\n    return trailingSpace ? <>{str} </> : str;\n  }\n\n  // If no I18nProvider is present, render the defaultMessage with simple interpolation\n  if (!values) {\n    return trailingSpace ? <>{defaultMessage} </> : defaultMessage;\n  }\n\n  // Simple interpolation: split by placeholders and interleave with values\n  const parts: React.ReactNode[] = [];\n  let lastIndex = 0;\n  const regex = /\\{(\\w+)\\}/g;\n  let match;\n\n  while ((match = regex.exec(defaultMessage)) !== null) {\n    const [placeholder, key] = match;\n\n    // Add text before the placeholder\n    if (match.index > lastIndex) {\n      parts.push(defaultMessage.substring(lastIndex, match.index));\n    }\n\n    // Add the interpolated value or placeholder if not found\n    parts.push(values[key] ?? placeholder);\n    lastIndex = match.index + placeholder.length;\n  }\n\n  // Add remaining text\n  if (lastIndex < defaultMessage.length) {\n    parts.push(defaultMessage.substring(lastIndex));\n  }\n\n  return trailingSpace ? <>{parts} </> : parts;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2B2B;AAxB3B,0BAIO;AAaA,MAAM,cAA0C,CAAC,UAAU;AAChE,QAAM,EAAE,gBAAgB,IAAI,aAAa,eAAe,OAAO,IAAI;AACnE,QAAM,WAAO,6BAAQ;AAGrB,MAAI,MAAM;AACR,UAAM,MAAM,KAAK,cAAc,EAAE,IAAI,gBAAgB,YAAY,GAAG,MAAM;AAC1E,WAAO,gBAAgB,4EAAG;AAAA;AAAA,MAAI;AAAA,OAAC,IAAM;AAAA,EACvC;AAGA,MAAI,CAAC,QAAQ;AACX,WAAO,gBAAgB,4EAAG;AAAA;AAAA,MAAe;AAAA,OAAC,IAAM;AAAA,EAClD;AAGA,QAAM,QAA2B,CAAC;AAClC,MAAI,YAAY;AAChB,QAAM,QAAQ;AACd,MAAI;AAEJ,UAAQ,QAAQ,MAAM,KAAK,cAAc,OAAO,MAAM;AACpD,UAAM,CAAC,aAAa,GAAG,IAAI;AAG3B,QAAI,MAAM,QAAQ,WAAW;AAC3B,YAAM,KAAK,eAAe,UAAU,WAAW,MAAM,KAAK,CAAC;AAAA,IAC7D;AAGA,UAAM,KAAK,OAAO,GAAG,KAAK,WAAW;AACrC,gBAAY,MAAM,QAAQ,YAAY;AAAA,EACxC;AAGA,MAAI,YAAY,eAAe,QAAQ;AACrC,UAAM,KAAK,eAAe,UAAU,SAAS,CAAC;AAAA,EAChD;AAEA,SAAO,gBAAgB,4EAAG;AAAA;AAAA,IAAM;AAAA,KAAC,IAAM;AACzC;","names":[]}