/** * @file PickupCodeBarcode.jsx * @description Штрих-код для кода выдачи (самовывоз) в карточке доставки клиента. * * Рисуется SVG-ом на клиенте, без картинок и внешних библиотек: PWA работает офлайн, * а на печати и на экране полосы остаются резкими при любом размере. * Значение — тот же код выдачи, который клиент называет вслух. */ import React from "react"; import { code128Bars } from "./barcodeCode128"; /** Тихая зона по стандарту — не меньше 10 модулей с каждой стороны. */ const QUIET_ZONE_MODULES = 10; /** Высота полос и подписи в «единицах» viewBox — масштабируется вместе с SVG. */ const BAR_HEIGHT = 56; const TEXT_HEIGHT = 18; export const PickupCodeBarcode = ({ value, showText = true, className = "" }) => { const code = String(value ?? "").trim(); if (!code) return null; const bars = code128Bars(code); const modules = bars.reduce((sum, bar) => sum + bar.width, 0); const width = modules + QUIET_ZONE_MODULES * 2; const height = BAR_HEIGHT + (showText ? TEXT_HEIGHT : 0); let x = QUIET_ZONE_MODULES; const rects = []; bars.forEach((bar, index) => { if (bar.black) { rects.push(); } x += bar.width; }); return ( {rects} {showText ? ( {code} ) : null} ); };