{"version":3,"sources":["../../../../frontend/src/components/core/plugins/codeBar/CodeBarGenerator.ts","../../../../frontend/src/components/core/plugins/codeBar/CodeBar.tsx"],"names":["barcodeCache","buildCacheKey","options","calculateEanCheckDigit","digits","nums","sum","i","weight","checkDigit","CodeBarChecksumError","message","normalizeEanValue","value","format","autoFixChecksum","expectedLength","onlyDigits","body","providedCheckDigit","correctCheckDigit","generateCodeBarAsBase64","width","height","displayValue","text","fontOptions","fontSize","textMargin","textAlign","textPosition","background","lineColor","margin","marginTop","marginBottom","marginLeft","marginRight","cacheKey","normalizedValue","isBrowser","canvas","createCanvas","e","JsBarcode","dataUrl","error","styles","StyleSheet","CodeBar","style","resolutionScale","rest","resolveCodeBarSrc","jsx","View","Image","CodeBar_default"],"mappings":"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","file":"index.cjs","sourcesContent":["import JsBarcode from \"jsbarcode\"\n\nexport type CodeBarFormat =\n  | \"CODE128\"\n  | \"CODE128A\"\n  | \"CODE128B\"\n  | \"CODE128C\"\n  | \"EAN13\"\n  | \"EAN8\"\n  | \"EAN5\"\n  | \"EAN2\"\n  | \"UPC\"\n  | \"CODE39\"\n  | \"ITF14\"\n  | \"ITF\"\n  | \"MSI\"\n  | \"MSI10\"\n  | \"MSI11\"\n  | \"MSI1010\"\n  | \"MSI1110\"\n  | \"pharmacode\"\n  | \"codabar\"\n\nexport interface CodeBarOptions {\n  value: string\n  format?: CodeBarFormat\n  width?: number \n  height?: number \n  displayValue?: boolean\n  text?: string \n  fontOptions?: string \n  fontSize?: number\n  textMargin?: number\n  textAlign?: \"left\" | \"center\" | \"right\"\n  textPosition?: \"top\" | \"bottom\"\n  background?: string\n  lineColor?: string\n  margin?: number\n  marginTop?: number\n  marginBottom?: number\n  marginLeft?: number\n  marginRight?: number\n  /**\n   * Por defecto, si el checksum (dígito verificador) de un valor EAN13/EAN8/UPC\n   * es incorrecto, se lanza un error explícito en vez de corregirlo en\n   * silencio. Poné `autoFixChecksum: true` si preferís que se recalcule y\n   * reemplace automáticamente (se sigue avisando por consola con un warn).\n   */\n  autoFixChecksum?: boolean\n}\n\n\n// (igual que se hace con los charts).\nconst barcodeCache = new Map<string, string>()\n\nconst buildCacheKey = (options: CodeBarOptions): string => JSON.stringify(options)\n\n/**\n * Calcula el dígito verificador (checksum) para códigos EAN/UPC según el\n * algoritmo estándar GS1 (módulo 10, pesos alternados 3-1).\n * `digits` debe ser el número SIN el dígito de control (12 dígitos para\n * EAN13/UPC, 7 para EAN8).\n */\nconst calculateEanCheckDigit = (digits: string): string => {\n  const nums = digits.split(\"\").map(Number)\n  // El peso se aplica de derecha a izquierda: el último dígito (el más\n  // cercano al checksum) tiene peso 3.\n  let sum = 0\n  for (let i = 0; i < nums.length; i++) {\n    const weight = (nums.length - i) % 2 === 0 ? 1 : 3\n    sum += nums[i] * weight\n  }\n  const checkDigit = (10 - (sum % 10)) % 10\n  return String(checkDigit)\n}\n\n/**\n * Error específico para checksums EAN/UPC inválidos, para poder\n * distinguirlo si hace falta (instanceof CodeBarChecksumError) y para que\n * el mensaje llegue tal cual hasta la UI (ver CodeBar.tsx).\n */\nexport class CodeBarChecksumError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = \"CodeBarChecksumError\"\n  }\n}\n\n/**\n * Valida el checksum de un valor EAN13, EAN8 o UPC antes de pasarlo a\n * JsBarcode.\n *\n * Comportamiento por defecto (autoFixChecksum = false): si el valor viene\n * con la longitud completa pero el dígito verificador es incorrecto, se\n * lanza un CodeBarChecksumError explícito en vez de corregirlo en\n * silencio — un checksum equivocado suele indicar un dato mal generado\n * río arriba, y taparlo con una corrección automática puede esconder ese\n * bug en vez de mostrarlo.\n *\n * Si se pasa autoFixChecksum = true, se recalcula y reemplaza el dígito\n * verificador incorrecto (se avisa igual por consola con un warn).\n *\n * En ambos casos, si el valor viene \"sin calcular\" (un dígito menos que lo\n * esperado), se completa automáticamente con el checksum calculado: esto\n * no es una corrección de un dato erróneo, sino una forma soportada de\n * pasar el código sin el dígito de control.\n */\nconst normalizeEanValue = (\n  value: string,\n  format: CodeBarFormat,\n  autoFixChecksum: boolean,\n): string => {\n  const expectedLengths: Partial<Record<CodeBarFormat, number>> = {\n    EAN13: 13,\n    EAN8: 8,\n    UPC: 12,\n  }\n\n  const expectedLength = expectedLengths[format]\n  if (!expectedLength) return value // no es un formato con checksum conocido acá\n\n  const onlyDigits = value.replace(/\\D/g, \"\")\n\n  // Si vino sin el dígito verificador (un dígito menos), lo calculamos y completamos.\n  if (onlyDigits.length === expectedLength - 1) {\n    const checkDigit = calculateEanCheckDigit(onlyDigits)\n    return onlyDigits + checkDigit\n  }\n\n  // Si vino con la longitud completa, verificamos que el checksum sea correcto.\n  if (onlyDigits.length === expectedLength) {\n    const body = onlyDigits.slice(0, -1)\n    const providedCheckDigit = onlyDigits.slice(-1)\n    const correctCheckDigit = calculateEanCheckDigit(body)\n\n    if (providedCheckDigit !== correctCheckDigit) {\n      if (autoFixChecksum) {\n        console.warn(\n          `El dígito verificador de \"${value}\" para ${format} es incorrecto ` +\n            `(esperado ${correctCheckDigit}, recibido ${providedCheckDigit}). Se corrige automáticamente (autoFixChecksum=true).`,\n        )\n        return body + correctCheckDigit\n      }\n\n      throw new CodeBarChecksumError(\n        `Dígito verificador inválido para \"${value}\" (${format}): se esperaba ${correctCheckDigit}, ` +\n          `se recibió ${providedCheckDigit}. Pasá autoFixChecksum={true} si preferís que se corrija automáticamente.`,\n      )\n    }\n  }\n\n  // Cualquier otra longitud la dejamos pasar tal cual: JsBarcode se encargará\n  // de validar y, si corresponde, lanzar su propio error.\n  return value\n}\n\n/**\n * Genera un código de barras como PNG en base64 (data URL).\n * Funciona tanto en browser (canvas nativo) como en Node (paquete `canvas`),\n * de forma análoga a como QRGenerator resuelve el logo sobre canvas.\n */\nexport const generateCodeBarAsBase64 = async ({\n  value,\n  format = \"CODE128\",\n  width = 2,\n  height = 100,\n  displayValue = true,\n  text,\n  fontOptions = \"\",\n  fontSize = 20,\n  textMargin = 2,\n  textAlign = \"center\",\n  textPosition = \"bottom\",\n  background = \"#ffffff\",\n  lineColor = \"#000000\",\n  margin = 10,\n  marginTop,\n  marginBottom,\n  marginLeft,\n  marginRight,\n  autoFixChecksum = false,\n}: CodeBarOptions): Promise<string> => {\n  const cacheOptions = {\n    value,\n    format,\n    width,\n    height,\n    displayValue,\n    text,\n    fontOptions,\n    fontSize,\n    textMargin,\n    textAlign,\n    textPosition,\n    background,\n    lineColor,\n    margin,\n    marginTop,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    autoFixChecksum,\n  }\n  const cacheKey = buildCacheKey(cacheOptions)\n  if (barcodeCache.has(cacheKey)) return barcodeCache.get(cacheKey)!\n\n  // Se valida/normaliza el checksum ANTES del try/catch genérico y sin\n  // atraparlo acá: si el checksum es inválido (y autoFixChecksum es\n  // false), queremos que el error suba tal cual hasta quien llamó a esta\n  // función, en vez de quedar silenciado como un \"\" genérico. CodeBar.tsx\n  // ya tiene su propio try/catch y muestra error.message.\n  const normalizedValue = normalizeEanValue(value, format, autoFixChecksum)\n\n  try {\n    const isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\"\n\n    let canvas: any\n\n    if (isBrowser) {\n      canvas = document.createElement(\"canvas\")\n    } else {\n      try {\n        const { createCanvas } = await import(\"canvas\")\n        // JsBarcode setea el tamaño real del canvas internamente,\n        // el valor inicial acá es solo un placeholder.\n        canvas = createCanvas(100, 100)\n      } catch (e) {\n        throw new Error(\n          `Canvas no disponible en entorno Node (¿falta instalar el paquete \"canvas\"?): ${\n            e instanceof Error ? e.message : String(e)\n          }`,\n        )\n      }\n    }\n\n    JsBarcode(canvas, normalizedValue, {\n      format,\n      width,\n      height,\n      displayValue,\n      text,\n      fontOptions,\n      fontSize,\n      textMargin,\n      textAlign,\n      textPosition,\n      background,\n      lineColor,\n      margin,\n      marginTop,\n      marginBottom,\n      marginLeft,\n      marginRight,\n    })\n\n    const dataUrl = canvas.toDataURL(\"image/png\")\n\n    if (!dataUrl || dataUrl === \"data:,\" || !dataUrl.startsWith(\"data:image\")) {\n      throw new Error(`Data URL generada es inválida: ${dataUrl}`)\n    }\n\n    barcodeCache.set(cacheKey, dataUrl)\n    return dataUrl\n  } catch (error) {\n    // Se loguea acá para tener el detalle en consola/servidor, pero el\n    // error se re-lanza (no se traga como \"\") para que quien llamó pueda\n    // mostrar el mensaje real en vez de un genérico \"no se pudo generar\".\n    console.error(\"Error generando código de barras:\", error)\n    throw error instanceof Error ? error : new Error(String(error))\n  }\n}","import React from \"react\"\nimport { Image, StyleSheet, View } from \"@react-pdf/renderer\"\nimport {\n  generateCodeBarAsBase64,\n  type CodeBarFormat,\n  type CodeBarOptions,\n} from \"./CodeBarGenerator\"\n\ntype ViewBaseProps = React.ComponentProps<typeof View>\n\ninterface CodeBarProps extends Omit<ViewBaseProps, \"style\">, Omit<CodeBarOptions, \"value\"> {\n  value: string\n  width?: number // ancho renderizado del <Image> en el PDF\n  height?: number // alto renderizado del <Image> en el PDF\n  style?: any\n  format?: CodeBarFormat\n  /**\n   * Factor por el que se multiplican el width/height internos con los que\n   * JsBarcode genera el canvas (por defecto width: 2, height: 100), antes\n   * de escalarlo al tamaño final del <Image> en el PDF. Subirlo genera un\n   * PNG de mayor resolución, evitando que se vea pixelado al imprimirse o\n   * hacer zoom. Por ejemplo, resolutionScale={3} genera el canvas al\n   * triple de resolución. Default: 3.\n   */\n  resolutionScale?: number\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    margin: 10,\n  },\n})\n\nconst CodeBar: React.FC<CodeBarProps> = ({\n  value,\n  format = \"CODE128\",\n  width = 200,\n  height = 80,\n  style,\n  displayValue = true,\n  text,\n  fontOptions,\n  fontSize,\n  textMargin,\n  textAlign,\n  textPosition,\n  background = \"#ffffff\",\n  lineColor = \"#000000\",\n  margin,\n  marginTop,\n  marginBottom,\n  marginLeft,\n  marginRight,\n  autoFixChecksum = false,\n  resolutionScale = 3,\n  ...rest\n}) => {\n  // Se pasa como factory function: `@react-pdf/renderer` acepta que `src` sea\n  // una función (la invoca y espera su resultado) o directamente una\n  // promesa — ver `resolveSource` en `@react-pdf/layout` — mismo enfoque que\n  // ChartJS/QR. Nada de useState/useEffect/loading-state acá: ese patrón es\n  // para un ciclo de vida de UI en el browser (montaje, re-render por\n  // interacción), pero `generatePDF` corre en el backend (incluso en un\n  // worker thread) haciendo un único render de punta a punta, así que lo\n  // único que hace falta es resolver el data URL antes de serializar el PDF.\n  const resolveCodeBarSrc = async (): Promise<string> =>\n    generateCodeBarAsBase64({\n      value,\n      format,\n      // width/height acá controlan el módulo/alto internos de JsBarcode, no\n      // el tamaño final del <Image> (ese lo define el width/height del\n      // componente, más abajo). Se multiplican por resolutionScale para que\n      // el canvas nazca en mayor resolución y no se vea pixelado al\n      // escalarlo/imprimirlo, sin cambiar el tamaño final en el PDF.\n      width: 2 * resolutionScale,\n      height: 100 * resolutionScale,\n      displayValue,\n      text,\n      fontOptions,\n      // Si no se pasa fontSize/textMargin explícito, se escalan junto con\n      // las barras (mismos defaults que usa JsBarcode: fontSize 20,\n      // textMargin 2) para que el texto no quede desproporcionadamente\n      // chico frente a un canvas generado en mayor resolución.\n      fontSize: fontSize ?? 20 * resolutionScale,\n      textMargin: textMargin ?? 2 * resolutionScale,\n      textAlign,\n      textPosition,\n      background,\n      lineColor,\n      margin,\n      marginTop,\n      marginBottom,\n      marginLeft,\n      marginRight,\n      autoFixChecksum,\n    })\n\n  return (\n    <View style={[styles.container, style]} {...rest}>\n      <Image src={resolveCodeBarSrc} style={{ width, height }} cache={false} />\n    </View>\n  )\n}\n\nexport default CodeBar"]}