esvn-react-barcode-print 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/helpers/print-helper.ts","../src/components/preview-print.tsx","../src/components/setting-print.tsx","../src/components/modal-preview-print.tsx","../src/components/modal-barcode-print.tsx"],"sourcesContent":["/* eslint-disable indent */\nexport * from './types'\nexport * from './helpers/print-helper'\nexport * from './components/preview-print'\nexport * from './components/setting-print'\nexport * from './components/modal-preview-print'\nexport * from './components/modal-barcode-print'\n","/* eslint-disable indent */\nimport JsBarcode from 'jsbarcode'\nimport qrcode from 'qrcode-generator'\nimport { IBarcodePrintItem, IPrintField, ISettingPrint } from '../types'\n\nexport const getOrganizationName = (): string => {\n try {\n const dataLocal = localStorage.getItem('organization')\n const organization = JSON.parse(dataLocal && dataLocal !== 'undefined' ? dataLocal : 'null')\n return organization?.text || organization?.label || organization?.name || ''\n } catch {\n return ''\n }\n}\n\nexport const generateBarcodeHtml = (\n value: string,\n printType: number,\n height = 24\n): string => {\n if (!value) { value = '000000' }\n\n if (printType === 1) {\n // QR Code\n try {\n const qr = qrcode(0, 'M')\n qr.addData(value)\n qr.make()\n return `<div class=\"code-wrapper qr-wrapper\">${qr.createSvgTag({ cellSize: 2, margin: 0, scalable: true })}</div>`\n } catch (e) {\n return `<div style=\"font-size: 10px; text-align: center; word-break: break-word;\">${value}</div>`\n }\n }\n\n // Barcode CODE128\n try {\n const len = value.length\n let barWidth = 1.3\n if (len <= 6) {\n barWidth = 2.2\n } else if (len <= 10) {\n barWidth = 1.7\n } else if (len <= 15) {\n barWidth = 1.3\n } else if (len <= 20) {\n barWidth = 1.05\n } else {\n barWidth = 0.85\n }\n\n const svgNode = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n JsBarcode(svgNode, value, {\n format: 'CODE128',\n width: barWidth,\n height,\n displayValue: false,\n margin: 0\n })\n svgNode.setAttribute('preserveAspectRatio', 'none')\n\n return `\n <div class=\"code-wrapper barcode-wrapper\">\n <div class=\"barcode-svg-box\">\n ${svgNode.outerHTML}\n </div>\n </div>\n `\n } catch (e) {\n return `<div style=\"font-size: 10px; text-align: center; word-break: break-word;\">${value}</div>`\n }\n}\n\nexport const renderSingleLabelHtml = (\n item: IBarcodePrintItem,\n settings: ISettingPrint,\n companyNameDefault?: string,\n barcodeHeight = 22\n): string => {\n const {\n printType = 0,\n hinge = false,\n fields = []\n } = settings\n\n const alignClass = hinge ? 'text-right' : 'text-left'\n const currentOrgName = item.companyName || companyNameDefault || getOrganizationName()\n\n if (fields && fields.length > 0) {\n const renderedFields = fields\n .filter((f) => f.enabled)\n .map((field) => {\n if (field.type === 'barcode') {\n const barcodeContent = generateBarcodeHtml(item.code || '', printType, barcodeHeight)\n if (field.offsetX && field.offsetX > 0) {\n return `<div style=\"padding-left: ${field.offsetX}px !important;\">${barcodeContent}</div>`\n }\n return barcodeContent\n }\n\n let rawVal = ''\n if (field.type === 'custom') {\n rawVal = field.customValue || field.label || ''\n } else if (field.key === 'companyName' || field.id === 'companyName') {\n rawVal = currentOrgName\n } else if (field.key === 'price' || field.id === 'unitPrice') {\n rawVal = item.price !== undefined ? Number(item.price).toLocaleString('vi-VN') : '0'\n } else {\n rawVal = (item as any)[field.key] || (item as any)[field.id] || ''\n }\n\n if (!rawVal && field.type !== 'custom') {\n return ''\n }\n\n const prefix = field.prefix || ''\n const suffix = field.suffix || ''\n const displayVal = `${prefix}${rawVal}${suffix}`\n\n const isBold = field.bold !== false\n const isItalic = !!field.italic\n const isUnderline = !!field.underline\n const textColor = field.color || '#000000'\n const customFontSize = field.fontSize ? `${field.fontSize}px` : undefined\n const offsetLeft = field.offsetX && field.offsetX > 0 ? `${field.offsetX}px` : undefined\n\n const styleRules = [\n `font-weight: ${isBold ? 700 : 400} !important`,\n isItalic ? 'font-style: italic !important' : '',\n isUnderline ? 'text-decoration: underline !important' : '',\n `color: ${textColor} !important`,\n customFontSize ? `font-size: ${customFontSize} !important` : '',\n offsetLeft ? `padding-left: ${offsetLeft} !important` : ''\n ]\n .filter(Boolean)\n .join('; ')\n\n return `<div class=\"lbl-dynamic ${alignClass}\" style=\"${styleRules};\">${displayVal}</div>`\n })\n .join('')\n\n return `<div class=\"stamp-item\">${renderedFields}</div>`\n }\n\n // Fallback\n const companyHtml = settings.companyName && currentOrgName ? `<div class=\"lbl-company ${alignClass}\">${currentOrgName}</div>` : ''\n const codeHtml = settings.productCode ? `<div class=\"lbl-code ${alignClass}\">${item.code || ''}</div>` : ''\n const nameHtml = settings.productName ? `<div class=\"lbl-name ${alignClass}\">${item.name || ''}</div>` : ''\n const barcodeHtml = generateBarcodeHtml(item.code || '', printType, barcodeHeight)\n const priceHtml = settings.unitPrice ? `<div class=\"lbl-price ${alignClass}\">Giá: ${item.price !== undefined ? Number(item.price).toLocaleString('vi-VN') : '0'}</div>` : ''\n\n return `<div class=\"stamp-item\">${companyHtml}${codeHtml}${nameHtml}${barcodeHtml}${priceHtml}</div>`\n}\n\nexport const getPaperSizeLabel = (paperSize?: number, stampNumber?: number): string => {\n switch (Number(paperSize)) {\n case 1:\n return 'Khổ giấy 2 tem (80x22mm)'\n case 2:\n return 'Khổ giấy 3 tem (105x22mm)'\n case 3:\n return 'Khổ giấy A5 (40 tem - Tomy 108)'\n case 4:\n return 'Khổ giấy A4 (65 tem - Tomy 145)'\n case 0:\n default:\n return `Khổ giấy tùy chọn (${stampNumber || 3} tem/hàng)`\n }\n}\n\nexport const generatePrintDocument = (\n settings: ISettingPrint,\n items: IBarcodePrintItem[],\n isTest = false,\n isPreview = false\n): { html: string; totalStamps: number; paperLabel: string; uniqueProducts: number } => {\n let labelList: IBarcodePrintItem[] = []\n const orgName = getOrganizationName()\n\n if (isTest) {\n const sampleItem: IBarcodePrintItem =\n items.length > 0\n ? { ...items[0], companyName: orgName }\n : { code: 'SP-001', name: 'Sản phẩm mẫu', price: 100000, companyName: orgName }\n labelList = [sampleItem]\n } else {\n items.forEach((item) => {\n const qty = Math.max(1, Number(item.printQuantity || item.quantity || 1))\n for (let i = 0; i < qty; i++) {\n labelList.push({ ...item, companyName: orgName })\n }\n })\n }\n\n const paperSize = Number(settings.paperSize ?? 2)\n const stampNumber = Math.max(1, Number(settings.stampNumber || 3))\n const paperLabel = getPaperSizeLabel(paperSize, stampNumber)\n\n if (labelList.length === 0) {\n return { html: '', totalStamps: 0, paperLabel, uniqueProducts: items.length }\n }\n\n let cols = 3\n let pageSizeCss = '105mm auto'\n let pageMargin = '0'\n let labelWidth = '33mm'\n let labelHeight = '22mm'\n let labelGap = '1.5mm'\n let bodyPadding = '1mm'\n let stampPadding = '2px 4px'\n let dynamicFontSize = '8px'\n let barcodeHeight = 16\n let sheetWidth = '105mm'\n let sheetMinHeight = '60mm'\n let sheetPadding = '2mm 1mm'\n let stampsPerPage = 999999\n\n if (isTest) {\n // In thử: phóng to tem như mẫu preview để xem rõ chi tiết\n cols = 1\n pageSizeCss = 'auto'\n pageMargin = '10mm'\n labelWidth = '75mm'\n labelHeight = 'auto'\n labelGap = '0'\n bodyPadding = '0'\n stampPadding = '10px 14px'\n dynamicFontSize = '12.5px'\n barcodeHeight = 42\n sheetWidth = '90mm'\n sheetMinHeight = '60mm'\n sheetPadding = '6mm'\n stampsPerPage = 1\n } else {\n switch (paperSize) {\n case 1: // 2 tem (80x22mm)\n cols = 2\n pageSizeCss = '80mm auto'\n pageMargin = '0'\n labelWidth = '38mm'\n labelHeight = '22mm'\n labelGap = '2mm'\n bodyPadding = '1mm'\n stampPadding = '2px 4px'\n dynamicFontSize = '8px'\n barcodeHeight = 18\n sheetWidth = '80mm'\n sheetMinHeight = '60mm'\n sheetPadding = '2mm 1mm'\n stampsPerPage = 999999\n break\n case 2: // 3 tem (105x22mm)\n cols = 3\n pageSizeCss = '105mm auto'\n pageMargin = '0'\n labelWidth = '33mm'\n labelHeight = '22mm'\n labelGap = '1.5mm'\n bodyPadding = '1mm'\n stampPadding = '1px 3px'\n dynamicFontSize = '7.5px'\n barcodeHeight = 16\n sheetWidth = '105mm'\n sheetMinHeight = '60mm'\n sheetPadding = '2mm 1mm'\n stampsPerPage = 999999\n break\n case 3: // A5 40 tem (Tomy 108)\n cols = 5\n pageSizeCss = 'A5 portrait'\n pageMargin = '6mm 4mm'\n labelWidth = '27mm'\n labelHeight = '22mm'\n labelGap = '1.5mm'\n bodyPadding = '0'\n stampPadding = '2px 3px'\n dynamicFontSize = '7.5px'\n barcodeHeight = 16\n sheetWidth = '148mm'\n sheetMinHeight = '210mm'\n sheetPadding = '6mm 4mm'\n stampsPerPage = 40\n break\n case 4: // A4 65 tem (Tomy 145)\n cols = 5\n pageSizeCss = 'A4 portrait'\n pageMargin = '8mm 5mm'\n labelWidth = '38mm'\n labelHeight = '20mm'\n labelGap = '1.5mm'\n bodyPadding = '0'\n stampPadding = '2px 4px'\n dynamicFontSize = '8px'\n barcodeHeight = 18\n sheetWidth = '210mm'\n sheetMinHeight = '297mm'\n sheetPadding = '8mm 5mm'\n stampsPerPage = 65\n break\n case 0: // Tùy chọn\n default:\n cols = stampNumber\n pageSizeCss = 'auto'\n pageMargin = '5mm'\n labelWidth = `${Math.floor(100 / cols)}%`\n labelHeight = '22mm'\n labelGap = '3mm'\n bodyPadding = '2mm'\n stampPadding = '4px 6px'\n dynamicFontSize = '9.5px'\n barcodeHeight = 26\n sheetWidth = '210mm'\n sheetMinHeight = '297mm'\n sheetPadding = '8mm 6mm'\n stampsPerPage = 999999\n break\n }\n }\n\n let printDocument = ''\n\n if (isPreview) {\n const pages: { items: IBarcodePrintItem[]; emptyCount: number }[] = []\n\n if (stampsPerPage < 999999) {\n for (let i = 0; i < labelList.length; i += stampsPerPage) {\n const chunk = labelList.slice(i, i + stampsPerPage)\n const emptyCount = stampsPerPage - chunk.length\n pages.push({ items: chunk, emptyCount })\n }\n } else {\n pages.push({ items: labelList, emptyCount: 0 })\n }\n\n const pagesHtml = pages.map((page, pageIndex) => {\n const pageLabelsHtml = page.items\n .map((item) => renderSingleLabelHtml(item, settings, orgName, barcodeHeight))\n .join('')\n\n let emptySlotsHtml = ''\n if (page.emptyCount > 0) {\n emptySlotsHtml = Array(page.emptyCount)\n .fill(0)\n .map(() => '<div class=\"empty-slot\" title=\"Vị trí tem trống trên decal\"></div>')\n .join('')\n }\n\n const pageIndicator = pages.length > 1 ? `<div class=\"page-indicator\">Trang ${pageIndex + 1} / ${pages.length} (${page.items.length} tem)</div>` : ''\n\n return `\n <div class=\"page-wrapper\">\n ${pageIndicator}\n <div class=\"preview-sheet-wrapper\">\n <div class=\"print-container\">\n ${pageLabelsHtml}\n ${emptySlotsHtml}\n </div>\n </div>\n </div>\n `\n }).join('')\n\n printDocument = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <title>Xem trước bản in</title>\n <style>\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n background: #e9ecef;\n color: #000;\n padding: 24px 16px 40px 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-height: 100vh;\n transform-origin: top center;\n }\n .page-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-bottom: 28px;\n }\n .page-indicator {\n font-size: 12px;\n font-weight: 600;\n color: #495057;\n margin-bottom: 8px;\n background: #ffffff;\n padding: 4px 14px;\n border-radius: 20px;\n box-shadow: 0 1px 4px rgba(0,0,0,0.08);\n border: 1px solid #ced4da;\n }\n .preview-sheet-wrapper {\n background: #ffffff;\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.04);\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: ${sheetPadding};\n width: ${sheetWidth};\n min-height: ${sheetMinHeight};\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n }\n .print-container {\n display: grid;\n grid-template-columns: repeat(${cols}, ${paperSize === 0 && !isTest ? '1fr' : labelWidth});\n gap: ${labelGap};\n justify-content: ${isTest ? 'flex-start' : 'center'};\n }\n .stamp-item {\n width: 100%;\n min-height: ${isTest ? '48mm' : labelHeight === 'auto' ? '22mm' : labelHeight};\n height: ${labelHeight === 'auto' ? 'auto' : labelHeight};\n padding: ${stampPadding};\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n overflow: hidden;\n border: 1px solid #d8d6de;\n border-radius: 3px;\n background: #fff;\n box-sizing: border-box;\n }\n .empty-slot {\n width: 100%;\n min-height: ${labelHeight === 'auto' ? '22mm' : labelHeight};\n height: ${labelHeight === 'auto' ? '22mm' : labelHeight};\n border: 1px dashed #e2e5eb;\n border-radius: 3px;\n background: #fafbfc;\n box-sizing: border-box;\n }\n .text-left {\n text-align: left;\n justify-content: flex-start;\n }\n .text-right {\n text-align: right;\n justify-content: flex-end;\n }\n .lbl-dynamic, .lbl-company, .lbl-code, .lbl-name, .lbl-price {\n font-size: ${dynamicFontSize};\n line-height: 1.2;\n word-break: break-word;\n white-space: normal;\n margin-bottom: 2px;\n }\n .code-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 2px 0;\n width: 100%;\n }\n .barcode-svg-box {\n width: 82%;\n max-width: 82%;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n }\n .barcode-svg-box svg {\n width: 100%;\n height: ${barcodeHeight}px;\n }\n .qr-wrapper svg {\n width: ${barcodeHeight + 6}px;\n height: ${barcodeHeight + 6}px;\n }\n </style>\n </head>\n <body>\n ${pagesHtml}\n </body>\n </html>\n `\n } else {\n const labelsHtml = labelList\n .map((item) => renderSingleLabelHtml(item, settings, orgName, barcodeHeight))\n .join('')\n\n printDocument = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <title>In mã vạch</title>\n <style>\n @page {\n size: ${pageSizeCss};\n margin: ${pageMargin};\n }\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n color-adjust: exact !important;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n background: #fff;\n color: #000;\n padding: ${bodyPadding};\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n }\n .print-container {\n display: grid;\n grid-template-columns: repeat(${cols}, ${paperSize === 0 && !isTest ? '1fr' : labelWidth});\n gap: ${labelGap};\n justify-content: ${isTest ? 'flex-start' : 'center'};\n }\n .stamp-item {\n width: 100%;\n min-height: ${isTest ? '48mm' : labelHeight === 'auto' ? '22mm' : labelHeight};\n padding: ${stampPadding};\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n page-break-inside: avoid;\n break-inside: avoid;\n overflow: hidden;\n border: 1px solid #d8d6de;\n border-radius: 4px;\n background: #fff;\n }\n .text-left {\n text-align: left;\n justify-content: flex-start;\n }\n .text-right {\n text-align: right;\n justify-content: flex-end;\n }\n .lbl-dynamic, .lbl-company, .lbl-code, .lbl-name, .lbl-price {\n font-size: ${dynamicFontSize};\n line-height: 1.2;\n word-break: break-word;\n white-space: normal;\n margin-bottom: 2px;\n }\n .code-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 2px 0;\n width: 100%;\n }\n .barcode-svg-box {\n width: 82%;\n max-width: 82%;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n }\n .barcode-svg-box svg {\n width: 100%;\n height: ${barcodeHeight}px;\n }\n .qr-wrapper svg {\n width: ${barcodeHeight + 6}px;\n height: ${barcodeHeight + 6}px;\n }\n </style>\n </head>\n <body>\n <div class=\"print-container\">\n ${labelsHtml}\n </div>\n </body>\n </html>\n `\n }\n\n return { html: printDocument, totalStamps: labelList.length, paperLabel, uniqueProducts: items.length }\n}\n\nexport const executePrint = (\n settings: ISettingPrint,\n items: IBarcodePrintItem[],\n isTest = false\n) => {\n const { html, totalStamps } = generatePrintDocument(settings, items, isTest, false)\n\n if (totalStamps === 0) {\n return\n }\n\n let iframe = document.getElementById('print-barcode-iframe') as HTMLIFrameElement\n if (!iframe) {\n iframe = document.createElement('iframe')\n iframe.id = 'print-barcode-iframe'\n iframe.style.position = 'fixed'\n iframe.style.right = '0'\n iframe.style.bottom = '0'\n iframe.style.width = '0'\n iframe.style.height = '0'\n iframe.style.border = 'none'\n document.body.appendChild(iframe)\n }\n\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document\n if (iframeDoc) {\n iframeDoc.open()\n iframeDoc.write(html)\n iframeDoc.close()\n\n setTimeout(() => {\n iframe.contentWindow?.focus()\n iframe.contentWindow?.print()\n }, 250)\n }\n}\n","/* eslint-disable indent */\nimport { QRCodeCanvas } from 'qrcode.react'\nimport { Fragment, useRef, useState } from 'react'\nimport Barcode from 'react-barcode'\nimport { UseFormSetValue, UseFormWatch } from 'react-hook-form'\nimport { IPrintField, ISettingPrint } from '../types'\n\ninterface IFProps {\n watch: UseFormWatch<ISettingPrint>\n setValue?: UseFormSetValue<ISettingPrint>\n sampleItem?: Record<string, any>\n}\n\nexport const PreviewPrint = ({ watch, setValue, sampleItem }: IFProps) => {\n const printType = Number(watch('printType') ?? 0)\n const fields: IPrintField[] = watch('fields') ?? []\n\n const draggingRef = useRef<{ fieldId: string; startX: number; initialOffset: number } | null>(null)\n const [activeDragId, setActiveDragId] = useState<string | null>(null)\n\n const getOrgName = () => {\n try {\n const dataLocal = localStorage.getItem('organization')\n const organization = JSON.parse(dataLocal && dataLocal !== 'undefined' ? dataLocal : 'null')\n return organization?.text || organization?.label || organization?.name || 'Tên công ty'\n } catch {\n return 'Tên công ty'\n }\n }\n\n const sampleData: Record<string, string> = sampleItem || {\n companyName: getOrgName(),\n code: 'SP-001',\n productCode: 'SP-001',\n name: 'Sản phẩm mẫu',\n productName: 'Sản phẩm mẫu',\n price: '250.000',\n unitPrice: '250.000',\n unitName: 'Cái',\n origin: 'Việt Nam',\n categoryRootName: 'Danh mục mẫu',\n lotSerial: 'LOT-2026',\n specificationCode: 'SIZE-L'\n }\n\n const barcodeValue = sampleData.code || 'SP-001'\n const hinge = watch('hinge')\n\n const alignStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: hinge ? 'flex-end' : 'flex-start',\n alignItems: 'center',\n textAlign: hinge ? 'right' : 'left'\n }\n\n const handleMouseDown = (e: React.MouseEvent, field: IPrintField) => {\n if (!setValue) { return }\n e.preventDefault()\n e.stopPropagation()\n draggingRef.current = {\n fieldId: field.id,\n startX: e.clientX,\n initialOffset: field.offsetX || 0\n }\n setActiveDragId(field.id)\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!draggingRef.current) { return }\n const deltaX = moveEvent.clientX - draggingRef.current.startX\n const newOffset = Math.max(0, Math.min(180, Math.round(draggingRef.current.initialOffset + deltaX)))\n\n const currentFields = watch('fields') || []\n const updatedFields = currentFields.map((f) => (f.id === draggingRef.current?.fieldId ? { ...f, offsetX: newOffset } : f))\n setValue('fields', updatedFields)\n }\n\n const handleMouseUp = () => {\n draggingRef.current = null\n setActiveDragId(null)\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n }\n\n const renderCode = (field?: IPrintField) => {\n const offsetX = field?.offsetX || 0\n const containerStyle: React.CSSProperties = {\n ...alignStyle,\n marginTop: 4,\n marginBottom: 4,\n width: '100%',\n flexDirection: 'column',\n alignItems: hinge ? 'flex-end' : 'center',\n paddingLeft: offsetX > 0 ? `${offsetX}px` : undefined,\n cursor: setValue ? 'ew-resize' : 'default',\n position: 'relative'\n }\n\n if (printType === 0) {\n const len = barcodeValue.length\n let barWidth = 1.3\n if (len <= 6) {\n barWidth = 2.2\n } else if (len <= 10) {\n barWidth = 1.7\n } else if (len <= 15) {\n barWidth = 1.3\n } else if (len <= 20) {\n barWidth = 1.05\n } else {\n barWidth = 0.85\n }\n\n return (\n <div\n key=\"barcode-item\"\n onMouseDown={(e) => field && handleMouseDown(e, field)}\n title={setValue ? 'Kéo chuột sang trái/phải để dịch chuyển lề' : undefined}\n style={containerStyle}\n >\n <div\n style={{\n width: '82%',\n maxWidth: '220px',\n height: '42px',\n display: 'flex',\n justifyContent: 'center',\n overflow: 'hidden',\n outline: activeDragId === field?.id ? '1px dashed #7367f0' : 'none'\n }}\n >\n <Barcode\n value={barcodeValue}\n format=\"CODE128\"\n displayValue={false}\n margin={0}\n height={40}\n width={barWidth}\n />\n </div>\n </div>\n )\n }\n\n return (\n <div\n key=\"barcode-item\"\n onMouseDown={(e) => field && handleMouseDown(e, field)}\n title={setValue ? 'Kéo chuột sang trái/phải để dịch chuyển lề' : undefined}\n style={{\n ...alignStyle,\n minHeight: 80,\n marginTop: 4,\n marginBottom: 4,\n width: '100%',\n justifyContent: hinge ? 'flex-end' : 'center',\n paddingLeft: offsetX > 0 ? `${offsetX}px` : undefined,\n cursor: setValue ? 'ew-resize' : 'default'\n }}\n >\n <QRCodeCanvas value={barcodeValue} size={85} />\n </div>\n )\n }\n\n const renderDynamicFields = () => {\n if (!fields || fields.length === 0) {\n return (\n <>\n <div style={{ ...styles.codeText, ...alignStyle }}>SP-001</div>\n <div style={{ ...styles.normalText, ...alignStyle }}>Sản phẩm mẫu</div>\n {renderCode()}\n <div style={{ ...styles.price, ...alignStyle }}>Giá: 250.000</div>\n </>\n )\n }\n\n return fields\n .filter((f) => f.enabled)\n .map((field) => {\n if (field.type === 'barcode') {\n return renderCode(field)\n }\n\n const rawVal = field.type === 'custom' ? (field.customValue || field.label) : (sampleData[field.key] || sampleData[field.id] || field.label)\n\n const prefix = field.prefix || ''\n const suffix = field.suffix || ''\n const displayVal = `${prefix}${rawVal}${suffix}`\n\n const isBold = field.bold !== false\n const isItalic = !!field.italic\n const isUnderline = !!field.underline\n const textColor = field.color || '#111111'\n const customFontSize = field.fontSize || 13\n const offsetX = field.offsetX || 0\n\n const fieldStyle: React.CSSProperties = {\n ...styles.dynamicText,\n ...alignStyle,\n fontWeight: isBold ? 700 : 400,\n fontStyle: isItalic ? 'italic' : 'normal',\n textDecoration: isUnderline ? 'underline' : 'none',\n color: textColor,\n fontSize: `${customFontSize}px`,\n paddingLeft: offsetX > 0 ? `${offsetX}px` : undefined,\n cursor: setValue ? 'ew-resize' : 'default',\n userSelect: 'none',\n outline: activeDragId === field.id ? '1px dashed #7367f0' : 'none',\n borderRadius: '2px',\n transition: activeDragId === field.id ? 'none' : 'padding-left 0.1s ease'\n }\n\n return (\n <div\n key={field.id}\n style={fieldStyle}\n onMouseDown={(e) => handleMouseDown(e, field)}\n title={setValue ? 'Kéo chuột sang trái/phải để dịch chuyển lề' : undefined}\n >\n {displayVal}\n </div>\n )\n })\n }\n\n return (\n <Fragment>\n <div style={styles.previewBox}>\n {renderDynamicFields()}\n </div>\n </Fragment>\n )\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n previewBox: {\n width: '100%',\n maxWidth: 320,\n minHeight: 180,\n border: '1px solid #d8d6de',\n borderRadius: '4px',\n background: '#fff',\n padding: '12px 16px',\n boxSizing: 'border-box',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.06)',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n position: 'relative'\n },\n codeText: {\n fontSize: 14,\n fontWeight: 700,\n color: '#111',\n marginBottom: 2,\n lineHeight: 1.25,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n },\n normalText: {\n fontSize: 13,\n fontWeight: 500,\n color: '#333',\n lineHeight: 1.25,\n marginBottom: 4,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n },\n price: {\n fontSize: 13,\n fontWeight: 700,\n color: '#111',\n lineHeight: 1.25,\n marginTop: 4,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n },\n dynamicText: {\n fontSize: 13,\n color: '#111',\n lineHeight: 1.25,\n marginBottom: 2,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n }\n}\n","/* eslint-disable indent */\nimport * as Icon from 'becoxy-icons'\nimport { Fragment, useState } from 'react'\nimport { Control, Controller, FieldErrors, UseFormSetValue, UseFormWatch } from 'react-hook-form'\nimport {\n Button,\n ButtonGroup,\n Collapse,\n DropdownItem,\n DropdownMenu,\n DropdownToggle,\n Input,\n Label,\n UncontrolledDropdown\n} from 'reactstrap'\nimport { IExtraFieldOption, IPrintField, ISettingPrint } from '../types'\nimport { PreviewPrint } from './preview-print'\n\ninterface IFProps {\n control: Control<ISettingPrint, any>\n watch: UseFormWatch<ISettingPrint>\n setValue: UseFormSetValue<ISettingPrint>\n errors?: FieldErrors<ISettingPrint>\n availableExtraFields?: IExtraFieldOption[]\n t?: (key: string) => string\n}\n\nconst DEFAULT_EXTRA_FIELDS: IExtraFieldOption[] = [\n { id: 'unitName', key: 'unitName', label: 'Đơn vị tính', type: 'text', prefix: 'ĐVT: ' },\n { id: 'origin', key: 'origin', label: 'Xuất xứ', type: 'text', prefix: 'Xuất xứ: ' },\n { id: 'categoryRootName', key: 'categoryRootName', label: 'Nhóm hàng / Danh mục', type: 'text', prefix: 'Nhóm: ' },\n { id: 'specificationCode', key: 'specificationCode', label: 'Mã quy cách', type: 'text', prefix: 'Quy cách: ' },\n { id: 'lotSerial', key: 'lotSerial', label: 'Số lô / Serial', type: 'text', prefix: 'Lô: ' },\n { id: 'customText', key: 'custom', label: 'Văn bản tùy chỉnh', type: 'custom', customValue: 'Hàng chính hãng' }\n]\n\nconst COLOR_PRESETS = [\n { label: 'Đen', value: '#000000' },\n { label: 'Đỏ', value: '#dc3545' },\n { label: 'Xanh dương', value: '#0d6efd' },\n { label: 'Xanh lá', value: '#198754' },\n { label: 'Xám', value: '#6c757d' }\n]\n\nexport const SettingPrint = (props: IFProps) => {\n const { control, watch, setValue, availableExtraFields = DEFAULT_EXTRA_FIELDS, t = (s: string) => s } = props\n\n const [openPaperSection, setOpenPaperSection] = useState(true)\n const [openInfoSection, setOpenInfoSection] = useState(true)\n const [openCustomSection, setOpenCustomSection] = useState(false)\n\n const [expandedFieldId, setExpandedFieldId] = useState<string | null>(null)\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null)\n\n const fields: IPrintField[] = watch('fields') || []\n\n const handleToggleField = (index: number) => {\n const newFields = [...fields]\n newFields[index] = { ...newFields[index], enabled: !newFields[index].enabled }\n setValue('fields', newFields)\n }\n\n const handleMoveUp = (index: number) => {\n if (index <= 0) { return }\n const newFields = [...fields]\n const temp = newFields[index]\n newFields[index] = newFields[index - 1]\n newFields[index - 1] = temp\n setValue('fields', newFields)\n }\n\n const handleMoveDown = (index: number) => {\n if (index >= fields.length - 1) { return }\n const newFields = [...fields]\n const temp = newFields[index]\n newFields[index] = newFields[index + 1]\n newFields[index + 1] = temp\n setValue('fields', newFields)\n }\n\n const handleDeleteField = (index: number) => {\n const newFields = fields.filter((_, i) => i !== index)\n setValue('fields', newFields)\n }\n\n const handleAddField = (fieldTemplate: IExtraFieldOption) => {\n const exists = fields.find((f) => f.id === fieldTemplate.id)\n if (exists) {\n const newFields = fields.map((f) => (f.id === fieldTemplate.id ? { ...f, enabled: true } : f))\n setValue('fields', newFields)\n } else {\n const newField: IPrintField = {\n id: fieldTemplate.id,\n key: fieldTemplate.key,\n label: fieldTemplate.label,\n type: fieldTemplate.type,\n enabled: true,\n bold: false,\n prefix: fieldTemplate.prefix || '',\n customValue: fieldTemplate.customValue || ''\n }\n setValue('fields', [...fields, newField])\n }\n }\n\n const updateFieldProperty = (index: number, propName: keyof IPrintField, value: any) => {\n const newFields = [...fields]\n newFields[index] = { ...newFields[index], [propName]: value }\n setValue('fields', newFields)\n }\n\n const handleDragStart = (index: number) => {\n setDraggedIndex(index)\n }\n\n const handleDragOver = (e: React.DragEvent, index: number) => {\n e.preventDefault()\n if (draggedIndex === null || draggedIndex === index) { return }\n const newFields = [...fields]\n const item = newFields.splice(draggedIndex, 1)[0]\n newFields.splice(index, 0, item)\n setDraggedIndex(index)\n setValue('fields', newFields)\n }\n\n const handleDragEnd = () => {\n setDraggedIndex(null)\n }\n\n return (\n <Fragment>\n <div className=\"d-flex flex-column h-100\" style={{ gap: '16px', overflowY: 'auto', paddingRight: '4px' }}>\n {/* 1. Loại mã in */}\n <div className=\"border-bottom pb-1\">\n <div className=\"fw-bolder text-dark mb-75\">{t('Loại mã in')}</div>\n <Controller\n name=\"printType\"\n control={control}\n render={({ field: { value, onChange } }) => (\n <div className=\"d-flex\" style={{ gap: '20px' }}>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"printType\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 0}\n onChange={() => onChange(0)}\n />\n <span>{t('Mã vạch (Barcode)')}</span>\n </Label>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"printType\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 1}\n onChange={() => onChange(1)}\n />\n <span>{t('Mã QR')}</span>\n </Label>\n </div>\n )}\n />\n </div>\n\n {/* 2. Khổ giấy in */}\n <div className=\"border-bottom pb-1\">\n <div\n className=\"d-flex align-items-center justify-content-between cursor-pointer mb-75\"\n onClick={() => setOpenPaperSection(!openPaperSection)}\n >\n <span className=\"fw-bolder text-dark\">{t('Khổ giấy in')}</span>\n {openPaperSection ? <Icon.ChevronDown fontSize={16} /> : <Icon.ChevronRight fontSize={16} />}\n </div>\n\n <Collapse isOpen={openPaperSection}>\n <Controller\n name=\"paperSize\"\n control={control}\n render={({ field: { value, onChange } }) => (\n <div className=\"d-flex flex-column ps-1\" style={{ gap: '8px' }}>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 1}\n onChange={() => onChange(1)}\n />\n <span>{t('Khổ giấy 2 tem (80x22mm / 3.15x0.9 inch)')}</span>\n </Label>\n\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 2}\n onChange={() => onChange(2)}\n />\n <span>{t('Khổ giấy 3 tem (105x22mm / 4.2x0.9 inch)')}</span>\n </Label>\n\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 3}\n onChange={() => onChange(3)}\n />\n <span>{t('Khổ giấy A5 - Tổng 40 tem (Tomy 108)')}</span>\n </Label>\n\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 4}\n onChange={() => onChange(4)}\n />\n <span>{t('Khổ giấy A4 - Tổng 65 tem (Tomy 145)')}</span>\n </Label>\n\n <div className=\"d-flex align-items-center\">\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer me-1\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 0}\n onChange={() => onChange(0)}\n />\n <span>{t('Khổ giấy tùy chọn')}</span>\n </Label>\n\n {Number(value) === 0 && (\n <div className=\"d-flex align-items-center\">\n <Controller\n name=\"stampNumber\"\n control={control}\n render={({ field: { value: stampVal, onChange: onStampChange } }) => (\n <Input\n type=\"number\"\n min={1}\n max={10}\n className=\"form-control-sm text-center\"\n style={{ width: '60px' }}\n value={stampVal ?? 3}\n onChange={(e) => onStampChange(Math.max(1, Number(e.target.value) || 1))}\n />\n )}\n />\n <span className=\"ms-50 small text-muted\">{t('tem/hàng')}</span>\n </div>\n )}\n </div>\n </div>\n )}\n />\n </Collapse>\n </div>\n\n {/* 3. Danh sách trường thông tin in */}\n <div className=\"border-bottom pb-1\">\n <div\n className=\"d-flex align-items-center justify-content-between cursor-pointer mb-75\"\n onClick={() => setOpenInfoSection(!openInfoSection)}\n >\n <span className=\"fw-bolder text-dark\">{t('Thông tin trên tem')}</span>\n <div className=\"d-flex align-items-center\">\n <small className=\"text-muted me-50\" style={{ fontSize: '11px' }}>\n {t('(Kéo thả để đổi vị trí)')}\n </small>\n {openInfoSection ? <Icon.ChevronDown fontSize={16} /> : <Icon.ChevronRight fontSize={16} />}\n </div>\n </div>\n\n <Collapse isOpen={openInfoSection}>\n <div className=\"d-flex flex-column\" style={{ gap: '6px' }}>\n {fields.map((field, index) => {\n const isExpanded = expandedFieldId === field.id\n const isDragging = draggedIndex === index\n\n return (\n <div\n key={field.id}\n draggable\n onDragStart={() => handleDragStart(index)}\n onDragOver={(e) => handleDragOver(e, index)}\n onDragEnd={handleDragEnd}\n className=\"border rounded p-50\"\n style={{\n background: isDragging ? '#e8f0fe' : field.enabled ? '#fff' : '#f9f9f9',\n opacity: isDragging ? 0.6 : 1,\n transition: 'background 0.2s',\n boxShadow: isExpanded ? '0 2px 6px rgba(0,0,0,0.08)' : 'none'\n }}\n >\n <div className=\"d-flex align-items-center justify-content-between\">\n <div className=\"d-flex align-items-center\">\n <span\n className=\"cursor-move text-muted me-50 d-flex align-items-center\"\n title={t('Kéo để đổi thứ tự')}\n >\n <Icon.Menu fontSize={13} />\n </span>\n\n <Input\n type=\"checkbox\"\n id={`chk-field-${field.id}`}\n className=\"me-50 mt-0\"\n checked={field.enabled}\n onChange={() => handleToggleField(index)}\n />\n\n <Label\n htmlFor={`chk-field-${field.id}`}\n className={`mb-0 cursor-pointer ${field.enabled ? 'fw-bold text-dark' : 'text-muted'}`}\n style={{ fontSize: '13px' }}\n >\n {field.label}\n </Label>\n </div>\n\n <div className=\"d-flex align-items-center\" style={{ gap: '3px' }}>\n <Button\n color=\"flat-secondary\"\n className=\"btn-icon p-0\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => handleMoveUp(index)}\n disabled={index === 0}\n title={t('Di chuyển lên')}\n >\n <Icon.ArrowUp fontSize={12} />\n </Button>\n <Button\n color=\"flat-secondary\"\n className=\"btn-icon p-0\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => handleMoveDown(index)}\n disabled={index === fields.length - 1}\n title={t('Di chuyển xuống')}\n >\n <Icon.ArrowDown fontSize={12} />\n </Button>\n <Button\n color=\"flat-secondary\"\n className=\"btn-icon p-0\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => setExpandedFieldId(isExpanded ? null : field.id)}\n title={t('Tùy chỉnh định dạng')}\n >\n <Icon.Settings fontSize={12} className={isExpanded ? 'text-primary' : ''} />\n </Button>\n {field.type === 'custom' && (\n <Button\n color=\"flat-danger\"\n className=\"btn-icon p-0 text-danger\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => handleDeleteField(index)}\n title={t('Xóa trường')}\n >\n <Icon.Trash2 fontSize={12} />\n </Button>\n )}\n </div>\n </div>\n\n {isExpanded && (\n <div className=\"mt-50 pt-50 border-top ps-1 pe-50\">\n {field.type !== 'barcode' && (\n <div className=\"d-flex flex-column\" style={{ gap: '6px' }}>\n <div className=\"d-flex align-items-center justify-content-between\">\n <span className=\"small text-muted\">{t('Kiểu chữ')}:</span>\n <ButtonGroup size=\"sm\">\n <Button\n color={field.bold !== false ? 'primary' : 'outline-secondary'}\n className=\"btn-icon py-0 px-50\"\n onClick={() => updateFieldProperty(index, 'bold', field.bold === false)}\n title=\"In đậm (Bold)\"\n >\n <strong>B</strong>\n </Button>\n <Button\n color={field.italic ? 'primary' : 'outline-secondary'}\n className=\"btn-icon py-0 px-50\"\n onClick={() => updateFieldProperty(index, 'italic', !field.italic)}\n title=\"In nghiêng (Italic)\"\n >\n <em>I</em>\n </Button>\n <Button\n color={field.underline ? 'primary' : 'outline-secondary'}\n className=\"btn-icon py-0 px-50\"\n onClick={() => updateFieldProperty(index, 'underline', !field.underline)}\n title=\"Gạch chân (Underline)\"\n >\n <u>U</u>\n </Button>\n </ButtonGroup>\n </div>\n\n <div className=\"d-flex align-items-center justify-content-between\">\n <span className=\"small text-muted\">{t('Cỡ chữ (px)')}:</span>\n <div className=\"d-flex align-items-center\">\n <Button\n color=\"outline-secondary\"\n className=\"btn-icon p-0\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => updateFieldProperty(index, 'fontSize', Math.max(8, (field.fontSize || 13) - 1))}\n >\n <Icon.Minus fontSize={10} />\n </Button>\n <span className=\"mx-50 small fw-bold\" style={{ minWidth: '24px', textAlign: 'center' }}>\n {field.fontSize || 13}\n </span>\n <Button\n color=\"outline-secondary\"\n className=\"btn-icon p-0\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => updateFieldProperty(index, 'fontSize', Math.min(24, (field.fontSize || 13) + 1))}\n >\n <Icon.Plus fontSize={10} />\n </Button>\n </div>\n </div>\n\n <div className=\"d-flex align-items-center justify-content-between\">\n <span className=\"small text-muted\">{t('Màu chữ')}:</span>\n <div className=\"d-flex align-items-center\" style={{ gap: '4px' }}>\n {COLOR_PRESETS.map((colorItem) => (\n <div\n key={colorItem.value}\n onClick={() => updateFieldProperty(index, 'color', colorItem.value)}\n title={colorItem.label}\n style={{\n width: '16px',\n height: '16px',\n borderRadius: '50%',\n backgroundColor: colorItem.value,\n cursor: 'pointer',\n outline: (field.color || '#000000') === colorItem.value ? '2px solid #7367f0' : 'none',\n outlineOffset: '1px'\n }}\n />\n ))}\n </div>\n </div>\n\n <div className=\"d-flex align-items-center justify-content-between\">\n <span className=\"small text-muted\">{t('Tiền tố')}:</span>\n <Input\n type=\"text\"\n className=\"form-control-sm\"\n style={{ width: '120px' }}\n value={field.prefix || ''}\n onChange={(e) => updateFieldProperty(index, 'prefix', e.target.value)}\n placeholder=\"VD: Giá: \"\n />\n </div>\n\n {field.type === 'custom' && (\n <div className=\"d-flex align-items-center justify-content-between\">\n <span className=\"small text-muted\">{t('Nội dung')}:</span>\n <Input\n type=\"text\"\n className=\"form-control-sm\"\n style={{ width: '140px' }}\n value={field.customValue || ''}\n onChange={(e) => updateFieldProperty(index, 'customValue', e.target.value)}\n />\n </div>\n )}\n </div>\n )}\n\n <div className=\"d-flex align-items-center justify-content-between mt-50\">\n <span className=\"small text-muted\">{t('Lùi lề trái (px)')}:</span>\n <div className=\"d-flex align-items-center\">\n <Button\n color=\"outline-secondary\"\n className=\"btn-icon p-0\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => updateFieldProperty(index, 'offsetX', Math.max(0, (field.offsetX || 0) - 2))}\n >\n <Icon.Minus fontSize={10} />\n </Button>\n <span className=\"mx-50 small fw-bold\" style={{ minWidth: '24px', textAlign: 'center' }}>\n {field.offsetX || 0}\n </span>\n <Button\n color=\"outline-secondary\"\n className=\"btn-icon p-0\"\n style={{ width: '22px', height: '22px' }}\n onClick={() => updateFieldProperty(index, 'offsetX', Math.min(180, (field.offsetX || 0) + 2))}\n >\n <Icon.Plus fontSize={10} />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n })}\n\n <div className=\"mt-50\">\n <UncontrolledDropdown>\n <DropdownToggle color=\"outline-primary\" size=\"sm\" className=\"w-100 d-flex align-items-center justify-content-center\">\n <Icon.Plus fontSize={13} className=\"me-50\" />\n {t('Thêm trường thông tin khác')}\n </DropdownToggle>\n <DropdownMenu className=\"w-100\">\n {availableExtraFields.map((extra) => (\n <DropdownItem key={extra.id} onClick={() => handleAddField(extra)}>\n {extra.label}\n </DropdownItem>\n ))}\n </DropdownMenu>\n </UncontrolledDropdown>\n </div>\n </div>\n </Collapse>\n </div>\n\n {/* 4. Tùy chọn nâng cao */}\n <div className=\"border-bottom pb-1\">\n <div\n className=\"d-flex align-items-center justify-content-between cursor-pointer mb-75\"\n onClick={() => setOpenCustomSection(!openCustomSection)}\n >\n <span className=\"fw-bolder text-dark\">{t('Căn chỉnh lề')}</span>\n {openCustomSection ? <Icon.ChevronDown fontSize={16} /> : <Icon.ChevronRight fontSize={16} />}\n </div>\n\n <Collapse isOpen={openCustomSection}>\n <div className=\"d-flex flex-column ps-1\" style={{ gap: '8px' }}>\n <div className=\"d-flex align-items-center justify-content-between\">\n <span className=\"small text-dark\">{t('Căn lề chữ')}:</span>\n <Controller\n name=\"hinge\"\n control={control}\n render={({ field: { value, onChange } }) => (\n <div className=\"d-flex\" style={{ gap: '15px' }}>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer small\">\n <Input\n type=\"radio\"\n name=\"hinge\"\n className=\"me-50 mt-0\"\n checked={!value}\n onChange={() => onChange(false)}\n />\n <span>{t('Căn trái')}</span>\n </Label>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer small\">\n <Input\n type=\"radio\"\n name=\"hinge\"\n className=\"me-50 mt-0\"\n checked={!!value}\n onChange={() => onChange(true)}\n />\n <span>{t('Căn phải')}</span>\n </Label>\n </div>\n )}\n />\n </div>\n </div>\n </Collapse>\n </div>\n\n {/* 5. Xem trước mẫu in */}\n <div className=\"mb-1\">\n <div className=\"fw-bolder text-dark mb-1 d-flex align-items-center justify-content-between\">\n <span>{t('Xem trước mẫu in')}</span>\n <small className=\"text-muted fw-normal\" style={{ fontSize: '11px' }}>\n {t('(Kéo chuột trên dòng để dịch lề)')}\n </small>\n </div>\n <div className=\"d-flex justify-content-center\">\n <PreviewPrint watch={watch} setValue={setValue} />\n </div>\n </div>\n </div>\n </Fragment>\n )\n}\n","/* eslint-disable indent */\nimport * as Icon from 'becoxy-icons'\nimport { FC, useEffect, useRef, useState } from 'react'\nimport { Badge, Button, ButtonGroup, Modal, ModalBody, ModalFooter } from 'reactstrap'\nimport { generatePrintDocument } from '../helpers/print-helper'\nimport { IBarcodePrintItem, ISettingPrint } from '../types'\n\ninterface IFPropsModalPreview {\n isOpen: boolean\n toggle: () => void\n settings: ISettingPrint\n items: IBarcodePrintItem[]\n onPrint?: () => void\n t?: (key: string) => string\n}\n\nexport const ModalPreviewPrint: FC<IFPropsModalPreview> = ({\n isOpen,\n toggle,\n settings,\n items,\n onPrint,\n t = (s: string) => s\n}) => {\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const [zoom, setZoom] = useState(100)\n const [isSingleSample, setIsSingleSample] = useState(false)\n\n const { html, totalStamps, paperLabel, uniqueProducts } = generatePrintDocument(\n settings,\n items,\n isSingleSample,\n true\n )\n\n const updateIframeZoom = (zoomLevel: number) => {\n try {\n const doc = iframeRef.current?.contentDocument\n if (doc && doc.body) {\n ;(doc.body.style as any).zoom = `${zoomLevel}%`\n }\n } catch {\n // ignore\n }\n }\n\n useEffect(() => {\n updateIframeZoom(zoom)\n }, [zoom, html])\n\n const handleZoomIn = () => {\n setZoom((prev) => Math.min(200, prev + 10))\n }\n\n const handleZoomOut = () => {\n setZoom((prev) => Math.max(40, prev - 10))\n }\n\n const handleZoomReset = () => {\n setZoom(100)\n }\n\n return (\n <Modal\n isOpen={isOpen}\n toggle={toggle}\n className=\"modal-dialog-centered modal-xl\"\n contentClassName=\"p-0 overflow-hidden\"\n style={{ maxWidth: '92vw', width: '92vw', margin: 'auto' }}\n >\n <div className=\"modal-header d-flex align-items-center justify-content-between px-1_5 py-1 mb-0 border-bottom bg-white\">\n <div className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={18} className=\"text-primary me-50\" />\n <h5 className=\"modal-title m-0 fw-bolder text-dark\">{t('Xem trước bản in mã vạch')}</h5>\n </div>\n <div className=\"cursor-pointer\" onClick={toggle}>\n <Icon.X fontSize={20} />\n </div>\n </div>\n\n <div\n className=\"d-flex flex-wrap align-items-center justify-content-between px-1_5 py-75 border-bottom\"\n style={{ background: '#f8f9fa', gap: '8px' }}\n >\n <div className=\"d-flex flex-wrap align-items-center\" style={{ gap: '8px' }}>\n <Badge color=\"light-primary\" className=\"d-flex align-items-center px-1 py-50\">\n <span className=\"fw-normal me-50\">{t('Khổ giấy')}:</span>\n <span className=\"fw-bolder\">{paperLabel}</span>\n </Badge>\n\n <Badge color=\"light-success\" className=\"d-flex align-items-center px-1 py-50\">\n <span className=\"fw-normal me-50\">{t('Tổng số tem')}:</span>\n <span className=\"fw-bolder\">{totalStamps} tem</span>\n </Badge>\n\n <Badge color=\"light-secondary\" className=\"d-flex align-items-center px-1 py-50\">\n <span className=\"fw-normal me-50\">{t('Mặt hàng')}:</span>\n <span className=\"fw-bolder\">{uniqueProducts} sản phẩm</span>\n </Badge>\n </div>\n\n <div className=\"d-flex align-items-center\" style={{ gap: '10px' }}>\n <ButtonGroup size=\"sm\">\n <Button\n color={!isSingleSample ? 'primary' : 'outline-secondary'}\n onClick={() => setIsSingleSample(false)}\n >\n {t('Tất cả tem')} ({totalStamps})\n </Button>\n <Button\n color={isSingleSample ? 'primary' : 'outline-secondary'}\n onClick={() => setIsSingleSample(true)}\n >\n {t('1 tem phóng to')}\n </Button>\n </ButtonGroup>\n\n <div className=\"d-flex align-items-center border rounded bg-white px-50\" style={{ height: '31px' }}>\n <Button\n color=\"flat-secondary\"\n className=\"btn-icon p-0 me-50\"\n style={{ width: '22px', height: '22px' }}\n onClick={handleZoomOut}\n title={t('Thu nhỏ')}\n >\n <Icon.Minus fontSize={14} />\n </Button>\n\n <span\n className=\"fw-bold cursor-pointer text-center text-dark\"\n style={{ minWidth: '46px', fontSize: '12px' }}\n onClick={handleZoomReset}\n title={t('Đặt lại 100%')}\n >\n {zoom}%\n </span>\n\n <Button\n color=\"flat-secondary\"\n className=\"btn-icon p-0 ms-50\"\n style={{ width: '22px', height: '22px' }}\n onClick={handleZoomIn}\n title={t('Phóng to')}\n >\n <Icon.Plus fontSize={14} />\n </Button>\n </div>\n </div>\n </div>\n\n <ModalBody className=\"p-0 position-relative\" style={{ background: '#e9ecef' }}>\n <div style={{ height: '74vh', minHeight: '540px', width: '100%', overflow: 'hidden' }}>\n <iframe\n ref={iframeRef}\n title=\"barcode-print-preview\"\n srcDoc={html}\n onLoad={() => updateIframeZoom(zoom)}\n style={{\n width: '100%',\n height: '100%',\n border: 'none',\n display: 'block'\n }}\n />\n </div>\n </ModalBody>\n\n <ModalFooter className=\"d-flex justify-content-end align-items-center py-1 px-2 border-top bg-white\" style={{ gap: '10px' }}>\n {onPrint && (\n <Button\n color=\"primary\"\n onClick={onPrint}\n className=\"d-flex align-items-center\"\n >\n <Icon.Printer fontSize={14} className=\"me-50\" />\n {t('In')}\n </Button>\n )}\n <Button color=\"secondary\" outline onClick={toggle}>\n {t('Close')}\n </Button>\n </ModalFooter>\n </Modal>\n )\n}\n","/* eslint-disable indent */\nimport * as Icon from 'becoxy-icons'\nimport { FC, Fragment, ReactNode, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { Button, Col, Modal, ModalBody, Row } from 'reactstrap'\nimport Swal from 'sweetalert2'\nimport withReactContent from 'sweetalert2-react-content'\nimport { executePrint } from '../helpers/print-helper'\nimport { IBarcodePrintItem, IExtraFieldOption, IPrintField, ISettingPrint } from '../types'\nimport { ModalPreviewPrint } from './modal-preview-print'\nimport { SettingPrint } from './setting-print'\n\nconst MySwal = withReactContent(Swal)\n\nexport interface IModalBarcodePrintProps {\n isOpen: boolean\n toggle: () => void\n title?: string\n dataSelected: IBarcodePrintItem[]\n setDataSelected: (items: IBarcodePrintItem[]) => void\n dataItem?: IBarcodePrintItem | null\n defaultFields?: IPrintField[]\n availableExtraFields?: IExtraFieldOption[]\n renderTable?: (props: {\n selectedItems: IBarcodePrintItem[]\n setSelectedItems: (items: IBarcodePrintItem[]) => void\n }) => ReactNode\n children?: ReactNode\n windowSize?: any\n t?: (key: string) => string\n onPrintSuccess?: () => void\n notifyError?: (message: string) => void\n notifySuccess?: (message: string) => void\n}\n\nconst DEFAULT_PRINT_FIELDS: IPrintField[] = [\n { id: 'companyName', key: 'companyName', label: 'Tên công ty', type: 'text', enabled: false, bold: true },\n { id: 'productCode', key: 'code', label: 'Mã hàng', type: 'text', enabled: true, bold: true },\n { id: 'productName', key: 'name', label: 'Tên hàng', type: 'text', enabled: true, bold: false },\n { id: 'barcode', key: 'code', label: 'Mã vạch / Mã QR', type: 'barcode', enabled: true },\n { id: 'unitPrice', key: 'price', label: 'Giá bán', type: 'text', enabled: true, bold: true, prefix: 'Giá: ', suffix: '' }\n]\n\nexport const ModalBarcodePrint: FC<IModalBarcodePrintProps> = ({\n isOpen,\n toggle,\n title = 'In mã vạch / mã QR',\n dataSelected,\n setDataSelected,\n dataItem,\n defaultFields = DEFAULT_PRINT_FIELDS,\n availableExtraFields,\n renderTable,\n children,\n windowSize,\n t = (s: string) => s,\n onPrintSuccess,\n notifyError = (msg: string) => alert(msg),\n notifySuccess = (msg: string) => console.log(msg)\n}) => {\n const defaultValues: ISettingPrint = {\n printType: 0,\n paperSize: 2, // 3 tem (105x22mm)\n stampNumber: 3,\n productCode: true,\n productName: true,\n companyName: false,\n unitPrice: true,\n printSample: 3,\n hinge: false,\n fields: defaultFields\n }\n\n const [openPreviewModal, setOpenPreviewModal] = useState(false)\n\n const { control, watch, setValue, reset, getValues, formState: { errors } } = useForm<ISettingPrint>({\n mode: 'onChange',\n defaultValues\n })\n\n const handleTestPrint = () => {\n const settings = getValues()\n const targetItems = dataSelected.length > 0 ? dataSelected : (dataItem ? [dataItem] : [])\n executePrint(settings, targetItems, true)\n }\n\n const handleOpenPreview = () => {\n const targetItems = dataSelected.length > 0 ? dataSelected : (dataItem ? [dataItem] : [])\n if (targetItems.length === 0) {\n notifyError(t('Vui lòng chọn ít nhất một sản phẩm cần xem trước!'))\n return\n }\n setOpenPreviewModal(true)\n }\n\n const handleRealPrint = () => {\n if (dataSelected.length === 0 && !dataItem) {\n notifyError(t('Vui lòng chọn ít nhất một sản phẩm cần in mã vạch!'))\n return\n }\n const settings = getValues()\n const itemsToPrint = dataSelected.length > 0 ? dataSelected : [dataItem!]\n executePrint(settings, itemsToPrint, false)\n if (onPrintSuccess) {\n onPrintSuccess()\n }\n }\n\n const handleResetDefault = () => {\n MySwal.fire({\n title: t('Xác nhận'),\n text: t('Bạn có chắc chắn muốn thiết lập lại cấu hình in về mặc định không?'),\n icon: 'question',\n showCancelButton: true,\n confirmButtonText: t('Xác nhận'),\n cancelButtonText: t('Hủy'),\n customClass: {\n confirmButton: 'btn btn-primary',\n cancelButton: 'btn btn-secondary ms-1'\n },\n buttonsStyling: false\n }).then((result) => {\n if (result.isConfirmed || result.value) {\n reset(defaultValues)\n notifySuccess(t('Đã thiết lập lại cấu hình mặc định!'))\n }\n })\n }\n\n const renderFooterButtons = () => {\n return (\n <div className=\"d-flex align-items-center\" style={{ gap: '10px' }}>\n <Button color=\"primary\" onClick={handleResetDefault} className=\"d-flex align-items-center text-white\">\n <Icon.OutlineReply fontSize={14} className=\"me-50\" />\n {t('Thiết lập lại')}\n </Button>\n <Button color=\"info\" outline onClick={handleOpenPreview} className=\"d-flex align-items-center\">\n <Icon.Eye fontSize={14} className=\"me-50\" />\n {t('Xem trước')}\n </Button>\n <Button color=\"secondary\" outline onClick={handleTestPrint} className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={14} className=\"me-50\" />\n {t('In thử')}\n </Button>\n <Button color=\"primary\" onClick={handleRealPrint} className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={14} className=\"me-50\" />\n {t('In')}\n </Button>\n <Button color=\"secondary\" onClick={toggle} outline>\n {t('Close')}\n </Button>\n </div>\n )\n }\n\n return (\n <Fragment>\n <Modal\n isOpen={isOpen}\n toggle={toggle}\n className=\"modal-dialog-centered modal-fullscreen\"\n contentClassName=\"p-0 d-flex flex-column\"\n style={{ height: '100vh', maxHeight: '100vh' }}\n >\n <div className=\"modal-header d-flex align-items-center justify-content-between p-1 mb-0 border-bottom bg-white flex-shrink-0\">\n <div className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={18} className=\"text-primary me-50\" />\n <h5 className=\"modal-title m-0 fw-bolder text-dark\">{t(title)}</h5>\n </div>\n <div className=\"cursor-pointer\" onClick={toggle}>\n <Icon.X fontSize={20} />\n </div>\n </div>\n\n <ModalBody className=\"p-1 flex-grow-1 overflow-hidden\" style={{ background: '#f8f9fa' }}>\n <Row className=\"g-1 h-100\">\n {/* Cột 1: Tùy chỉnh in (4 cột) */}\n <Col lg={4} md={12} xs={12} className=\"h-100 overflow-hidden\">\n <div\n className=\"box d-flex flex-column h-100 p-1 border rounded\"\n style={{ background: '#fff' }}\n >\n <h5 className=\"m-0 fw-bolder mb-1 pb-50 border-bottom flex-shrink-0\">{t('Tùy chỉnh in')}</h5>\n <div className=\"flex-grow-1 overflow-auto pe-50\">\n <SettingPrint\n control={control}\n watch={watch}\n setValue={setValue}\n errors={errors}\n availableExtraFields={availableExtraFields}\n t={t}\n />\n </div>\n </div>\n </Col>\n\n {/* Cột 2: Bảng chọn dữ liệu (8 cột) */}\n <Col lg={8} md={12} xs={12} className=\"h-100 overflow-hidden\">\n <div\n className=\"box d-flex flex-column h-100 p-1 border rounded\"\n style={{ background: '#fff' }}\n >\n <h5 className=\"m-0 fw-bolder mb-1 pb-50 border-bottom flex-shrink-0\">{t('Danh sách cần in mã vạch')}</h5>\n <div className=\"mt-50 flex-grow-1 overflow-hidden d-flex flex-column\">\n {renderTable\n ? renderTable({\n selectedItems: dataSelected,\n setSelectedItems: setDataSelected\n })\n : children}\n </div>\n </div>\n </Col>\n </Row>\n </ModalBody>\n\n <div\n className=\"d-flex justify-content-end p-1 border-top flex-shrink-0\"\n style={{ boxShadow: '0 4px 24px 0 rgb(34 41 47 / 10%)', background: '#fff' }}\n >\n {renderFooterButtons()}\n </div>\n </Modal>\n\n <ModalPreviewPrint\n isOpen={openPreviewModal}\n toggle={() => setOpenPreviewModal(false)}\n settings={getValues()}\n items={dataSelected.length > 0 ? dataSelected : (dataItem ? [dataItem] : [])}\n onPrint={handleRealPrint}\n t={t}\n />\n </Fragment>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,uBAAsB;AACtB,8BAAmB;AAGZ,IAAM,sBAAsB,MAAc;AAC/C,MAAI;AACF,UAAM,YAAY,aAAa,QAAQ,cAAc;AACrD,UAAM,eAAe,KAAK,MAAM,aAAa,cAAc,cAAc,YAAY,MAAM;AAC3F,YAAO,6CAAc,UAAQ,6CAAc,WAAS,6CAAc,SAAQ;AAAA,EAC5E,SAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,IAAM,sBAAsB,CACjC,OACA,WACA,SAAS,OACE;AACX,MAAI,CAAC,OAAO;AAAE,YAAQ;AAAA,EAAS;AAE/B,MAAI,cAAc,GAAG;AAEnB,QAAI;AACF,YAAM,SAAK,wBAAAA,SAAO,GAAG,GAAG;AACxB,SAAG,QAAQ,KAAK;AAChB,SAAG,KAAK;AACR,aAAO,wCAAwC,GAAG,aAAa,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,KAAK,CAAC,CAAC;AAAA,IAC5G,SAAS,GAAG;AACV,aAAO,6EAA6E,KAAK;AAAA,IAC3F;AAAA,EACF;AAGA,MAAI;AACF,UAAM,MAAM,MAAM;AAClB,QAAI,WAAW;AACf,QAAI,OAAO,GAAG;AACZ,iBAAW;AAAA,IACb,WAAW,OAAO,IAAI;AACpB,iBAAW;AAAA,IACb,WAAW,OAAO,IAAI;AACpB,iBAAW;AAAA,IACb,WAAW,OAAO,IAAI;AACpB,iBAAW;AAAA,IACb,OAAO;AACL,iBAAW;AAAA,IACb;AAEA,UAAM,UAAU,SAAS,gBAAgB,8BAA8B,KAAK;AAC5E,yBAAAC,SAAU,SAAS,OAAO;AAAA,MACxB,QAAQ;AAAA,MACR,OAAO;AAAA,MACP;AAAA,MACA,cAAc;AAAA,MACd,QAAQ;AAAA,IACV,CAAC;AACD,YAAQ,aAAa,uBAAuB,MAAM;AAElD,WAAO;AAAA;AAAA;AAAA,YAGC,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,EAI3B,SAAS,GAAG;AACV,WAAO,6EAA6E,KAAK;AAAA,EAC3F;AACF;AAEO,IAAM,wBAAwB,CACnC,MACA,UACA,oBACA,gBAAgB,OACL;AACX,QAAM;AAAA,IACJ,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS,CAAC;AAAA,EACZ,IAAI;AAEJ,QAAM,aAAa,QAAQ,eAAe;AAC1C,QAAM,iBAAiB,KAAK,eAAe,sBAAsB,oBAAoB;AAErF,MAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,UAAM,iBAAiB,OACpB,OAAO,CAAC,MAAM,EAAE,OAAO,EACvB,IAAI,CAAC,UAAU;AACd,UAAI,MAAM,SAAS,WAAW;AAC5B,cAAM,iBAAiB,oBAAoB,KAAK,QAAQ,IAAI,WAAW,aAAa;AACpF,YAAI,MAAM,WAAW,MAAM,UAAU,GAAG;AACtC,iBAAO,6BAA6B,MAAM,OAAO,mBAAmB,cAAc;AAAA,QACpF;AACA,eAAO;AAAA,MACT;AAEA,UAAI,SAAS;AACb,UAAI,MAAM,SAAS,UAAU;AAC3B,iBAAS,MAAM,eAAe,MAAM,SAAS;AAAA,MAC/C,WAAW,MAAM,QAAQ,iBAAiB,MAAM,OAAO,eAAe;AACpE,iBAAS;AAAA,MACX,WAAW,MAAM,QAAQ,WAAW,MAAM,OAAO,aAAa;AAC5D,iBAAS,KAAK,UAAU,SAAY,OAAO,KAAK,KAAK,EAAE,eAAe,OAAO,IAAI;AAAA,MACnF,OAAO;AACL,iBAAU,KAAa,MAAM,GAAG,KAAM,KAAa,MAAM,EAAE,KAAK;AAAA,MAClE;AAEA,UAAI,CAAC,UAAU,MAAM,SAAS,UAAU;AACtC,eAAO;AAAA,MACT;AAEA,YAAM,SAAS,MAAM,UAAU;AAC/B,YAAM,SAAS,MAAM,UAAU;AAC/B,YAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;AAE9C,YAAM,SAAS,MAAM,SAAS;AAC9B,YAAM,WAAW,CAAC,CAAC,MAAM;AACzB,YAAM,cAAc,CAAC,CAAC,MAAM;AAC5B,YAAM,YAAY,MAAM,SAAS;AACjC,YAAM,iBAAiB,MAAM,WAAW,GAAG,MAAM,QAAQ,OAAO;AAChE,YAAM,aAAa,MAAM,WAAW,MAAM,UAAU,IAAI,GAAG,MAAM,OAAO,OAAO;AAE/E,YAAM,aAAa;AAAA,QACjB,gBAAgB,SAAS,MAAM,GAAG;AAAA,QAClC,WAAW,kCAAkC;AAAA,QAC7C,cAAc,0CAA0C;AAAA,QACxD,UAAU,SAAS;AAAA,QACnB,iBAAiB,cAAc,cAAc,gBAAgB;AAAA,QAC7D,aAAa,iBAAiB,UAAU,gBAAgB;AAAA,MAC1D,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,aAAO,2BAA2B,UAAU,YAAY,UAAU,MAAM,UAAU;AAAA,IACpF,CAAC,EACA,KAAK,EAAE;AAEV,WAAO,2BAA2B,cAAc;AAAA,EAClD;AAGA,QAAM,cAAc,SAAS,eAAe,iBAAiB,2BAA2B,UAAU,KAAK,cAAc,WAAW;AAChI,QAAM,WAAW,SAAS,cAAc,wBAAwB,UAAU,KAAK,KAAK,QAAQ,EAAE,WAAW;AACzG,QAAM,WAAW,SAAS,cAAc,wBAAwB,UAAU,KAAK,KAAK,QAAQ,EAAE,WAAW;AACzG,QAAM,cAAc,oBAAoB,KAAK,QAAQ,IAAI,WAAW,aAAa;AACjF,QAAM,YAAY,SAAS,YAAY,yBAAyB,UAAU,aAAU,KAAK,UAAU,SAAY,OAAO,KAAK,KAAK,EAAE,eAAe,OAAO,IAAI,GAAG,WAAW;AAE1K,SAAO,2BAA2B,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS;AAC/F;AAEO,IAAM,oBAAoB,CAAC,WAAoB,gBAAiC;AACrF,UAAQ,OAAO,SAAS,GAAG;AAAA,IAC3B,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO,wCAAsB,eAAe,CAAC;AAAA,EAC/C;AACF;AAEO,IAAM,wBAAwB,CACnC,UACA,OACA,SAAS,OACT,YAAY,UAC0E;AA9KxF;AA+KE,MAAI,YAAiC,CAAC;AACtC,QAAM,UAAU,oBAAoB;AAEpC,MAAI,QAAQ;AACV,UAAM,aACJ,MAAM,SAAS,IACX,EAAE,GAAG,MAAM,CAAC,GAAG,aAAa,QAAQ,IACpC,EAAE,MAAM,UAAU,MAAM,+BAAgB,OAAO,KAAQ,aAAa,QAAQ;AAClF,gBAAY,CAAC,UAAU;AAAA,EACzB,OAAO;AACL,UAAM,QAAQ,CAAC,SAAS;AACtB,YAAM,MAAM,KAAK,IAAI,GAAG,OAAO,KAAK,iBAAiB,KAAK,YAAY,CAAC,CAAC;AACxE,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,kBAAU,KAAK,EAAE,GAAG,MAAM,aAAa,QAAQ,CAAC;AAAA,MAClD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,YAAY,QAAO,cAAS,cAAT,YAAsB,CAAC;AAChD,QAAM,cAAc,KAAK,IAAI,GAAG,OAAO,SAAS,eAAe,CAAC,CAAC;AACjE,QAAM,aAAa,kBAAkB,WAAW,WAAW;AAE3D,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO,EAAE,MAAM,IAAI,aAAa,GAAG,YAAY,gBAAgB,MAAM,OAAO;AAAA,EAC9E;AAEA,MAAI,OAAO;AACX,MAAI,cAAc;AAClB,MAAI,aAAa;AACjB,MAAI,aAAa;AACjB,MAAI,cAAc;AAClB,MAAI,WAAW;AACf,MAAI,cAAc;AAClB,MAAI,eAAe;AACnB,MAAI,kBAAkB;AACtB,MAAI,gBAAgB;AACpB,MAAI,aAAa;AACjB,MAAI,iBAAiB;AACrB,MAAI,eAAe;AACnB,MAAI,gBAAgB;AAEpB,MAAI,QAAQ;AAEV,WAAO;AACP,kBAAc;AACd,iBAAa;AACb,iBAAa;AACb,kBAAc;AACd,eAAW;AACX,kBAAc;AACd,mBAAe;AACf,sBAAkB;AAClB,oBAAgB;AAChB,iBAAa;AACb,qBAAiB;AACjB,mBAAe;AACf,oBAAgB;AAAA,EAClB,OAAO;AACL,YAAQ,WAAW;AAAA,MACnB,KAAK;AACH,eAAO;AACP,sBAAc;AACd,qBAAa;AACb,qBAAa;AACb,sBAAc;AACd,mBAAW;AACX,sBAAc;AACd,uBAAe;AACf,0BAAkB;AAClB,wBAAgB;AAChB,qBAAa;AACb,yBAAiB;AACjB,uBAAe;AACf,wBAAgB;AAChB;AAAA,MACF,KAAK;AACH,eAAO;AACP,sBAAc;AACd,qBAAa;AACb,qBAAa;AACb,sBAAc;AACd,mBAAW;AACX,sBAAc;AACd,uBAAe;AACf,0BAAkB;AAClB,wBAAgB;AAChB,qBAAa;AACb,yBAAiB;AACjB,uBAAe;AACf,wBAAgB;AAChB;AAAA,MACF,KAAK;AACH,eAAO;AACP,sBAAc;AACd,qBAAa;AACb,qBAAa;AACb,sBAAc;AACd,mBAAW;AACX,sBAAc;AACd,uBAAe;AACf,0BAAkB;AAClB,wBAAgB;AAChB,qBAAa;AACb,yBAAiB;AACjB,uBAAe;AACf,wBAAgB;AAChB;AAAA,MACF,KAAK;AACH,eAAO;AACP,sBAAc;AACd,qBAAa;AACb,qBAAa;AACb,sBAAc;AACd,mBAAW;AACX,sBAAc;AACd,uBAAe;AACf,0BAAkB;AAClB,wBAAgB;AAChB,qBAAa;AACb,yBAAiB;AACjB,uBAAe;AACf,wBAAgB;AAChB;AAAA,MACF,KAAK;AAAA;AAAA,MACL;AACE,eAAO;AACP,sBAAc;AACd,qBAAa;AACb,qBAAa,GAAG,KAAK,MAAM,MAAM,IAAI,CAAC;AACtC,sBAAc;AACd,mBAAW;AACX,sBAAc;AACd,uBAAe;AACf,0BAAkB;AAClB,wBAAgB;AAChB,qBAAa;AACb,yBAAiB;AACjB,uBAAe;AACf,wBAAgB;AAChB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB;AAEpB,MAAI,WAAW;AACb,UAAM,QAA8D,CAAC;AAErE,QAAI,gBAAgB,QAAQ;AAC1B,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,eAAe;AACxD,cAAM,QAAQ,UAAU,MAAM,GAAG,IAAI,aAAa;AAClD,cAAM,aAAa,gBAAgB,MAAM;AACzC,cAAM,KAAK,EAAE,OAAO,OAAO,WAAW,CAAC;AAAA,MACzC;AAAA,IACF,OAAO;AACL,YAAM,KAAK,EAAE,OAAO,WAAW,YAAY,EAAE,CAAC;AAAA,IAChD;AAEA,UAAM,YAAY,MAAM,IAAI,CAAC,MAAM,cAAc;AAC/C,YAAM,iBAAiB,KAAK,MACzB,IAAI,CAAC,SAAS,sBAAsB,MAAM,UAAU,SAAS,aAAa,CAAC,EAC3E,KAAK,EAAE;AAEV,UAAI,iBAAiB;AACrB,UAAI,KAAK,aAAa,GAAG;AACvB,yBAAiB,MAAM,KAAK,UAAU,EACnC,KAAK,CAAC,EACN,IAAI,MAAM,oFAAoE,EAC9E,KAAK,EAAE;AAAA,MACZ;AAEA,YAAM,gBAAgB,MAAM,SAAS,IAAI,qCAAqC,YAAY,CAAC,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,gBAAgB;AAEnJ,aAAO;AAAA;AAAA,YAED,aAAa;AAAA;AAAA;AAAA,gBAGT,cAAc;AAAA,gBACd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,IAK1B,CAAC,EAAE,KAAK,EAAE;AAEV,oBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBA6CK,YAAY;AAAA,uBACd,UAAU;AAAA,4BACL,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAOI,IAAI,KAAK,cAAc,KAAK,CAAC,SAAS,QAAQ,UAAU;AAAA,qBACjF,QAAQ;AAAA,iCACI,SAAS,eAAe,QAAQ;AAAA;AAAA;AAAA;AAAA,4BAIrC,SAAS,SAAS,gBAAgB,SAAS,SAAS,WAAW;AAAA,wBACnE,gBAAgB,SAAS,SAAS,WAAW;AAAA,yBAC5C,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAYT,gBAAgB,SAAS,SAAS,WAAW;AAAA,wBACjD,gBAAgB,SAAS,SAAS,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAe1C,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAwBlB,aAAa;AAAA;AAAA;AAAA,uBAGd,gBAAgB,CAAC;AAAA,wBAChB,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAK7B,SAAS;AAAA;AAAA;AAAA;AAAA,EAInB,OAAO;AACL,UAAM,aAAa,UAChB,IAAI,CAAC,SAAS,sBAAsB,MAAM,UAAU,SAAS,aAAa,CAAC,EAC3E,KAAK,EAAE;AAEV,oBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQE,WAAW;AAAA,wBACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAcT,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAMU,IAAI,KAAK,cAAc,KAAK,CAAC,SAAS,QAAQ,UAAU;AAAA,qBACjF,QAAQ;AAAA,iCACI,SAAS,eAAe,QAAQ;AAAA;AAAA;AAAA;AAAA,4BAIrC,SAAS,SAAS,gBAAgB,SAAS,SAAS,WAAW;AAAA,yBAClE,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAoBV,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAwBlB,aAAa;AAAA;AAAA;AAAA,uBAGd,gBAAgB,CAAC;AAAA,wBAChB,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAM3B,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtB;AAEA,SAAO,EAAE,MAAM,eAAe,aAAa,UAAU,QAAQ,YAAY,gBAAgB,MAAM,OAAO;AACxG;AAEO,IAAM,eAAe,CAC1B,UACA,OACA,SAAS,UACN;AArlBL;AAslBE,QAAM,EAAE,MAAM,YAAY,IAAI,sBAAsB,UAAU,OAAO,QAAQ,KAAK;AAElF,MAAI,gBAAgB,GAAG;AACrB;AAAA,EACF;AAEA,MAAI,SAAS,SAAS,eAAe,sBAAsB;AAC3D,MAAI,CAAC,QAAQ;AACX,aAAS,SAAS,cAAc,QAAQ;AACxC,WAAO,KAAK;AACZ,WAAO,MAAM,WAAW;AACxB,WAAO,MAAM,QAAQ;AACrB,WAAO,MAAM,SAAS;AACtB,WAAO,MAAM,QAAQ;AACrB,WAAO,MAAM,SAAS;AACtB,WAAO,MAAM,SAAS;AACtB,aAAS,KAAK,YAAY,MAAM;AAAA,EAClC;AAEA,QAAM,YAAY,OAAO,qBAAmB,YAAO,kBAAP,mBAAsB;AAClE,MAAI,WAAW;AACb,cAAU,KAAK;AACf,cAAU,MAAM,IAAI;AACpB,cAAU,MAAM;AAEhB,eAAW,MAAM;AA/mBrB,UAAAC,KAAA;AAgnBM,OAAAA,MAAA,OAAO,kBAAP,gBAAAA,IAAsB;AACtB,mBAAO,kBAAP,mBAAsB;AAAA,IACxB,GAAG,GAAG;AAAA,EACR;AACF;;;ACnnBA,oBAA6B;AAC7B,mBAA2C;AAC3C,2BAAoB;AAmIR;AAzHL,IAAM,eAAe,CAAC,EAAE,OAAO,UAAU,WAAW,MAAe;AAb1E;AAcE,QAAM,YAAY,QAAO,WAAM,WAAW,MAAjB,YAAsB,CAAC;AAChD,QAAM,UAAwB,WAAM,QAAQ,MAAd,YAAmB,CAAC;AAElD,QAAM,kBAAc,qBAA0E,IAAI;AAClG,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAwB,IAAI;AAEpE,QAAM,aAAa,MAAM;AACvB,QAAI;AACF,YAAM,YAAY,aAAa,QAAQ,cAAc;AACrD,YAAM,eAAe,KAAK,MAAM,aAAa,cAAc,cAAc,YAAY,MAAM;AAC3F,cAAO,6CAAc,UAAQ,6CAAc,WAAS,6CAAc,SAAQ;AAAA,IAC5E,SAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,aAAqC,cAAc;AAAA,IACvD,aAAa,WAAW;AAAA,IACxB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,aAAa;AAAA,IACb,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,mBAAmB;AAAA,EACrB;AAEA,QAAM,eAAe,WAAW,QAAQ;AACxC,QAAM,QAAQ,MAAM,OAAO;AAE3B,QAAM,aAAkC;AAAA,IACtC,SAAS;AAAA,IACT,gBAAgB,QAAQ,aAAa;AAAA,IACrC,YAAY;AAAA,IACZ,WAAW,QAAQ,UAAU;AAAA,EAC/B;AAEA,QAAM,kBAAkB,CAAC,GAAqB,UAAuB;AACnE,QAAI,CAAC,UAAU;AAAE;AAAA,IAAO;AACxB,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,gBAAY,UAAU;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,QAAQ,EAAE;AAAA,MACV,eAAe,MAAM,WAAW;AAAA,IAClC;AACA,oBAAgB,MAAM,EAAE;AAExB,UAAM,kBAAkB,CAAC,cAA0B;AACjD,UAAI,CAAC,YAAY,SAAS;AAAE;AAAA,MAAO;AACnC,YAAM,SAAS,UAAU,UAAU,YAAY,QAAQ;AACvD,YAAM,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,YAAY,QAAQ,gBAAgB,MAAM,CAAC,CAAC;AAEnG,YAAM,gBAAgB,MAAM,QAAQ,KAAK,CAAC;AAC1C,YAAM,gBAAgB,cAAc,IAAI,CAAC,MAAG;AAxElD,YAAAC;AAwEsD,iBAAE,SAAOA,MAAA,YAAY,YAAZ,gBAAAA,IAAqB,WAAU,EAAE,GAAG,GAAG,SAAS,UAAU,IAAI;AAAA,OAAE;AACzH,eAAS,UAAU,aAAa;AAAA,IAClC;AAEA,UAAM,gBAAgB,MAAM;AAC1B,kBAAY,UAAU;AACtB,sBAAgB,IAAI;AACpB,aAAO,oBAAoB,aAAa,eAAe;AACvD,aAAO,oBAAoB,WAAW,aAAa;AAAA,IACrD;AAEA,WAAO,iBAAiB,aAAa,eAAe;AACpD,WAAO,iBAAiB,WAAW,aAAa;AAAA,EAClD;AAEA,QAAM,aAAa,CAAC,UAAwB;AAC1C,UAAM,WAAU,+BAAO,YAAW;AAClC,UAAM,iBAAsC;AAAA,MAC1C,GAAG;AAAA,MACH,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,MACP,eAAe;AAAA,MACf,YAAY,QAAQ,aAAa;AAAA,MACjC,aAAa,UAAU,IAAI,GAAG,OAAO,OAAO;AAAA,MAC5C,QAAQ,WAAW,cAAc;AAAA,MACjC,UAAU;AAAA,IACZ;AAEA,QAAI,cAAc,GAAG;AACnB,YAAM,MAAM,aAAa;AACzB,UAAI,WAAW;AACf,UAAI,OAAO,GAAG;AACZ,mBAAW;AAAA,MACb,WAAW,OAAO,IAAI;AACpB,mBAAW;AAAA,MACb,WAAW,OAAO,IAAI;AACpB,mBAAW;AAAA,MACb,WAAW,OAAO,IAAI;AACpB,mBAAW;AAAA,MACb,OAAO;AACL,mBAAW;AAAA,MACb;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,aAAa,CAAC,MAAM,SAAS,gBAAgB,GAAG,KAAK;AAAA,UACrD,OAAO,WAAW,wFAA+C;AAAA,UACjE,OAAO;AAAA,UAEP;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,gBAAgB;AAAA,gBAChB,UAAU;AAAA,gBACV,SAAS,kBAAiB,+BAAO,MAAK,uBAAuB;AAAA,cAC/D;AAAA,cAEA;AAAA,gBAAC,qBAAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,kBACP,QAAO;AAAA,kBACP,cAAc;AAAA,kBACd,QAAQ;AAAA,kBACR,QAAQ;AAAA,kBACR,OAAO;AAAA;AAAA,cACT;AAAA;AAAA,UACF;AAAA;AAAA,QAxBI;AAAA,MAyBN;AAAA,IAEJ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,aAAa,CAAC,MAAM,SAAS,gBAAgB,GAAG,KAAK;AAAA,QACrD,OAAO,WAAW,wFAA+C;AAAA,QACjE,OAAO;AAAA,UACL,GAAG;AAAA,UACH,WAAW;AAAA,UACX,WAAW;AAAA,UACX,cAAc;AAAA,UACd,OAAO;AAAA,UACP,gBAAgB,QAAQ,aAAa;AAAA,UACrC,aAAa,UAAU,IAAI,GAAG,OAAO,OAAO;AAAA,UAC5C,QAAQ,WAAW,cAAc;AAAA,QACnC;AAAA,QAEA,sDAAC,8BAAa,OAAO,cAAc,MAAM,IAAI;AAAA;AAAA,MAdzC;AAAA,IAeN;AAAA,EAEJ;AAEA,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC,UAAU,OAAO,WAAW,GAAG;AAClC,aACE,4EACE;AAAA,oDAAC,SAAI,OAAO,EAAE,GAAG,OAAO,UAAU,GAAG,WAAW,GAAG,oBAAM;AAAA,QACzD,4CAAC,SAAI,OAAO,EAAE,GAAG,OAAO,YAAY,GAAG,WAAW,GAAG,yCAAY;AAAA,QAChE,WAAW;AAAA,QACZ,4CAAC,SAAI,OAAO,EAAE,GAAG,OAAO,OAAO,GAAG,WAAW,GAAG,6BAAY;AAAA,SAC9D;AAAA,IAEJ;AAEA,WAAO,OACJ,OAAO,CAAC,MAAM,EAAE,OAAO,EACvB,IAAI,CAAC,UAAU;AACd,UAAI,MAAM,SAAS,WAAW;AAC5B,eAAO,WAAW,KAAK;AAAA,MACzB;AAEA,YAAM,SAAS,MAAM,SAAS,WAAY,MAAM,eAAe,MAAM,QAAU,WAAW,MAAM,GAAG,KAAK,WAAW,MAAM,EAAE,KAAK,MAAM;AAEtI,YAAM,SAAS,MAAM,UAAU;AAC/B,YAAM,SAAS,MAAM,UAAU;AAC/B,YAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;AAE9C,YAAM,SAAS,MAAM,SAAS;AAC9B,YAAM,WAAW,CAAC,CAAC,MAAM;AACzB,YAAM,cAAc,CAAC,CAAC,MAAM;AAC5B,YAAM,YAAY,MAAM,SAAS;AACjC,YAAM,iBAAiB,MAAM,YAAY;AACzC,YAAM,UAAU,MAAM,WAAW;AAEjC,YAAM,aAAkC;AAAA,QACtC,GAAG,OAAO;AAAA,QACV,GAAG;AAAA,QACH,YAAY,SAAS,MAAM;AAAA,QAC3B,WAAW,WAAW,WAAW;AAAA,QACjC,gBAAgB,cAAc,cAAc;AAAA,QAC5C,OAAO;AAAA,QACP,UAAU,GAAG,cAAc;AAAA,QAC3B,aAAa,UAAU,IAAI,GAAG,OAAO,OAAO;AAAA,QAC5C,QAAQ,WAAW,cAAc;AAAA,QACjC,YAAY;AAAA,QACZ,SAAS,iBAAiB,MAAM,KAAK,uBAAuB;AAAA,QAC5D,cAAc;AAAA,QACd,YAAY,iBAAiB,MAAM,KAAK,SAAS;AAAA,MACnD;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO;AAAA,UACP,aAAa,CAAC,MAAM,gBAAgB,GAAG,KAAK;AAAA,UAC5C,OAAO,WAAW,wFAA+C;AAAA,UAEhE;AAAA;AAAA,QALI,MAAM;AAAA,MAMb;AAAA,IAEJ,CAAC;AAAA,EACL;AAEA,SACE,4CAAC,yBACC,sDAAC,SAAI,OAAO,OAAO,YAChB,8BAAoB,GACvB,GACF;AAEJ;AAEA,IAAM,SAA8C;AAAA,EAClD,YAAY;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,YAAY;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF;;;AChSA,WAAsB;AACtB,IAAAC,gBAAmC;AACnC,6BAAgF;AAChF,wBAUO;AAwHG,IAAAC,sBAAA;AA3GV,IAAM,uBAA4C;AAAA,EAChD,EAAE,IAAI,YAAY,KAAK,YAAY,OAAO,iCAAe,MAAM,QAAQ,QAAQ,aAAQ;AAAA,EACvF,EAAE,IAAI,UAAU,KAAK,UAAU,OAAO,qBAAW,MAAM,QAAQ,QAAQ,sBAAY;AAAA,EACnF,EAAE,IAAI,oBAAoB,KAAK,oBAAoB,OAAO,mCAAwB,MAAM,QAAQ,QAAQ,YAAS;AAAA,EACjH,EAAE,IAAI,qBAAqB,KAAK,qBAAqB,OAAO,qBAAe,MAAM,QAAQ,QAAQ,gBAAa;AAAA,EAC9G,EAAE,IAAI,aAAa,KAAK,aAAa,OAAO,0BAAkB,MAAM,QAAQ,QAAQ,UAAO;AAAA,EAC3F,EAAE,IAAI,cAAc,KAAK,UAAU,OAAO,uCAAqB,MAAM,UAAU,aAAa,2BAAkB;AAChH;AAEA,IAAM,gBAAgB;AAAA,EACpB,EAAE,OAAO,YAAO,OAAO,UAAU;AAAA,EACjC,EAAE,OAAO,gBAAM,OAAO,UAAU;AAAA,EAChC,EAAE,OAAO,wBAAc,OAAO,UAAU;AAAA,EACxC,EAAE,OAAO,cAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,UAAO,OAAO,UAAU;AACnC;AAEO,IAAM,eAAe,CAAC,UAAmB;AAC9C,QAAM,EAAE,SAAS,OAAO,UAAU,uBAAuB,sBAAsB,IAAI,CAAC,MAAc,EAAE,IAAI;AAExG,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,IAAI;AAC7D,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAS,IAAI;AAC3D,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAS,KAAK;AAEhE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAwB,IAAI;AAC1E,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAwB,IAAI;AAEpE,QAAM,SAAwB,MAAM,QAAQ,KAAK,CAAC;AAElD,QAAM,oBAAoB,CAAC,UAAkB;AAC3C,UAAM,YAAY,CAAC,GAAG,MAAM;AAC5B,cAAU,KAAK,IAAI,EAAE,GAAG,UAAU,KAAK,GAAG,SAAS,CAAC,UAAU,KAAK,EAAE,QAAQ;AAC7E,aAAS,UAAU,SAAS;AAAA,EAC9B;AAEA,QAAM,eAAe,CAAC,UAAkB;AACtC,QAAI,SAAS,GAAG;AAAE;AAAA,IAAO;AACzB,UAAM,YAAY,CAAC,GAAG,MAAM;AAC5B,UAAM,OAAO,UAAU,KAAK;AAC5B,cAAU,KAAK,IAAI,UAAU,QAAQ,CAAC;AACtC,cAAU,QAAQ,CAAC,IAAI;AACvB,aAAS,UAAU,SAAS;AAAA,EAC9B;AAEA,QAAM,iBAAiB,CAAC,UAAkB;AACxC,QAAI,SAAS,OAAO,SAAS,GAAG;AAAE;AAAA,IAAO;AACzC,UAAM,YAAY,CAAC,GAAG,MAAM;AAC5B,UAAM,OAAO,UAAU,KAAK;AAC5B,cAAU,KAAK,IAAI,UAAU,QAAQ,CAAC;AACtC,cAAU,QAAQ,CAAC,IAAI;AACvB,aAAS,UAAU,SAAS;AAAA,EAC9B;AAEA,QAAM,oBAAoB,CAAC,UAAkB;AAC3C,UAAM,YAAY,OAAO,OAAO,CAAC,GAAG,MAAM,MAAM,KAAK;AACrD,aAAS,UAAU,SAAS;AAAA,EAC9B;AAEA,QAAM,iBAAiB,CAAC,kBAAqC;AAC3D,UAAM,SAAS,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE;AAC3D,QAAI,QAAQ;AACV,YAAM,YAAY,OAAO,IAAI,CAAC,MAAO,EAAE,OAAO,cAAc,KAAK,EAAE,GAAG,GAAG,SAAS,KAAK,IAAI,CAAE;AAC7F,eAAS,UAAU,SAAS;AAAA,IAC9B,OAAO;AACL,YAAM,WAAwB;AAAA,QAC5B,IAAI,cAAc;AAAA,QAClB,KAAK,cAAc;AAAA,QACnB,OAAO,cAAc;AAAA,QACrB,MAAM,cAAc;AAAA,QACpB,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ,cAAc,UAAU;AAAA,QAChC,aAAa,cAAc,eAAe;AAAA,MAC5C;AACA,eAAS,UAAU,CAAC,GAAG,QAAQ,QAAQ,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,QAAM,sBAAsB,CAAC,OAAe,UAA6B,UAAe;AACtF,UAAM,YAAY,CAAC,GAAG,MAAM;AAC5B,cAAU,KAAK,IAAI,EAAE,GAAG,UAAU,KAAK,GAAG,CAAC,QAAQ,GAAG,MAAM;AAC5D,aAAS,UAAU,SAAS;AAAA,EAC9B;AAEA,QAAM,kBAAkB,CAAC,UAAkB;AACzC,oBAAgB,KAAK;AAAA,EACvB;AAEA,QAAM,iBAAiB,CAAC,GAAoB,UAAkB;AAC5D,MAAE,eAAe;AACjB,QAAI,iBAAiB,QAAQ,iBAAiB,OAAO;AAAE;AAAA,IAAO;AAC9D,UAAM,YAAY,CAAC,GAAG,MAAM;AAC5B,UAAM,OAAO,UAAU,OAAO,cAAc,CAAC,EAAE,CAAC;AAChD,cAAU,OAAO,OAAO,GAAG,IAAI;AAC/B,oBAAgB,KAAK;AACrB,aAAS,UAAU,SAAS;AAAA,EAC9B;AAEA,QAAM,gBAAgB,MAAM;AAC1B,oBAAgB,IAAI;AAAA,EACtB;AAEA,SACE,6CAAC,0BACC,wDAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,KAAK,QAAQ,WAAW,QAAQ,cAAc,MAAM,GAErG;AAAA,kDAAC,SAAI,WAAU,sBACb;AAAA,mDAAC,SAAI,WAAU,6BAA6B,YAAE,oBAAY,GAAE;AAAA,MAC5D;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL;AAAA,UACA,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,MACpC,8CAAC,SAAI,WAAU,UAAS,OAAO,EAAE,KAAK,OAAO,GAC3C;AAAA,0DAAC,2BAAM,WAAU,iDACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,OAAO,KAAK,MAAM;AAAA,kBAC3B,UAAU,MAAM,SAAS,CAAC;AAAA;AAAA,cAC5B;AAAA,cACA,6CAAC,UAAM,YAAE,2BAAmB,GAAE;AAAA,eAChC;AAAA,YACA,8CAAC,2BAAM,WAAU,iDACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,OAAO,KAAK,MAAM;AAAA,kBAC3B,UAAU,MAAM,SAAS,CAAC;AAAA;AAAA,cAC5B;AAAA,cACA,6CAAC,UAAM,YAAE,UAAO,GAAE;AAAA,eACpB;AAAA,aACF;AAAA;AAAA,MAEJ;AAAA,OACF;AAAA,IAGA,8CAAC,SAAI,WAAU,sBACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,oBAAoB,CAAC,gBAAgB;AAAA,UAEpD;AAAA,yDAAC,UAAK,WAAU,uBAAuB,YAAE,uBAAa,GAAE;AAAA,YACvD,mBAAmB,6CAAM,kBAAL,EAAiB,UAAU,IAAI,IAAK,6CAAM,mBAAL,EAAkB,UAAU,IAAI;AAAA;AAAA;AAAA,MAC5F;AAAA,MAEA,6CAAC,8BAAS,QAAQ,kBAChB;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL;AAAA,UACA,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,MACpC,8CAAC,SAAI,WAAU,2BAA0B,OAAO,EAAE,KAAK,MAAM,GAC3D;AAAA,0DAAC,2BAAM,WAAU,iDACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,OAAO,KAAK,MAAM;AAAA,kBAC3B,UAAU,MAAM,SAAS,CAAC;AAAA;AAAA,cAC5B;AAAA,cACA,6CAAC,UAAM,YAAE,oDAA0C,GAAE;AAAA,eACvD;AAAA,YAEA,8CAAC,2BAAM,WAAU,iDACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,OAAO,KAAK,MAAM;AAAA,kBAC3B,UAAU,MAAM,SAAS,CAAC;AAAA;AAAA,cAC5B;AAAA,cACA,6CAAC,UAAM,YAAE,oDAA0C,GAAE;AAAA,eACvD;AAAA,YAEA,8CAAC,2BAAM,WAAU,iDACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,OAAO,KAAK,MAAM;AAAA,kBAC3B,UAAU,MAAM,SAAS,CAAC;AAAA;AAAA,cAC5B;AAAA,cACA,6CAAC,UAAM,YAAE,qDAAsC,GAAE;AAAA,eACnD;AAAA,YAEA,8CAAC,2BAAM,WAAU,iDACf;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,OAAO,KAAK,MAAM;AAAA,kBAC3B,UAAU,MAAM,SAAS,CAAC;AAAA;AAAA,cAC5B;AAAA,cACA,6CAAC,UAAM,YAAE,qDAAsC,GAAE;AAAA,eACnD;AAAA,YAEA,8CAAC,SAAI,WAAU,6BACb;AAAA,4DAAC,2BAAM,WAAU,sDACf;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,SAAS,OAAO,KAAK,MAAM;AAAA,oBAC3B,UAAU,MAAM,SAAS,CAAC;AAAA;AAAA,gBAC5B;AAAA,gBACA,6CAAC,UAAM,YAAE,qCAAmB,GAAE;AAAA,iBAChC;AAAA,cAEC,OAAO,KAAK,MAAM,KACjB,8CAAC,SAAI,WAAU,6BACb;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL;AAAA,oBACA,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,UAAU,UAAU,cAAc,EAAE,MAC7D;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,KAAK;AAAA,wBACL,KAAK;AAAA,wBACL,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,OAAO;AAAA,wBACvB,OAAO,8BAAY;AAAA,wBACnB,UAAU,CAAC,MAAM,cAAc,KAAK,IAAI,GAAG,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC;AAAA;AAAA,oBACzE;AAAA;AAAA,gBAEJ;AAAA,gBACA,6CAAC,UAAK,WAAU,0BAA0B,YAAE,aAAU,GAAE;AAAA,iBAC1D;AAAA,eAEJ;AAAA,aACF;AAAA;AAAA,MAEJ,GACF;AAAA,OACF;AAAA,IAGA,8CAAC,SAAI,WAAU,sBACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,mBAAmB,CAAC,eAAe;AAAA,UAElD;AAAA,yDAAC,UAAK,WAAU,uBAAuB,YAAE,0BAAoB,GAAE;AAAA,YAC/D,8CAAC,SAAI,WAAU,6BACb;AAAA,2DAAC,WAAM,WAAU,oBAAmB,OAAO,EAAE,UAAU,OAAO,GAC3D,YAAE,6DAAyB,GAC9B;AAAA,cACC,kBAAkB,6CAAM,kBAAL,EAAiB,UAAU,IAAI,IAAK,6CAAM,mBAAL,EAAkB,UAAU,IAAI;AAAA,eAC3F;AAAA;AAAA;AAAA,MACF;AAAA,MAEA,6CAAC,8BAAS,QAAQ,iBAChB,wDAAC,SAAI,WAAU,sBAAqB,OAAO,EAAE,KAAK,MAAM,GACrD;AAAA,eAAO,IAAI,CAAC,OAAO,UAAU;AAC5B,gBAAM,aAAa,oBAAoB,MAAM;AAC7C,gBAAM,aAAa,iBAAiB;AAEpC,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,WAAS;AAAA,cACT,aAAa,MAAM,gBAAgB,KAAK;AAAA,cACxC,YAAY,CAAC,MAAM,eAAe,GAAG,KAAK;AAAA,cAC1C,WAAW;AAAA,cACX,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,YAAY,aAAa,YAAY,MAAM,UAAU,SAAS;AAAA,gBAC9D,SAAS,aAAa,MAAM;AAAA,gBAC5B,YAAY;AAAA,gBACZ,WAAW,aAAa,+BAA+B;AAAA,cACzD;AAAA,cAEA;AAAA,8DAAC,SAAI,WAAU,qDACb;AAAA,gEAAC,SAAI,WAAU,6BACb;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO,EAAE,oDAAmB;AAAA,wBAE5B,uDAAM,WAAL,EAAU,UAAU,IAAI;AAAA;AAAA,oBAC3B;AAAA,oBAEA;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,IAAI,aAAa,MAAM,EAAE;AAAA,wBACzB,WAAU;AAAA,wBACV,SAAS,MAAM;AAAA,wBACf,UAAU,MAAM,kBAAkB,KAAK;AAAA;AAAA,oBACzC;AAAA,oBAEA;AAAA,sBAAC;AAAA;AAAA,wBACC,SAAS,aAAa,MAAM,EAAE;AAAA,wBAC9B,WAAW,uBAAuB,MAAM,UAAU,sBAAsB,YAAY;AAAA,wBACpF,OAAO,EAAE,UAAU,OAAO;AAAA,wBAEzB,gBAAM;AAAA;AAAA,oBACT;AAAA,qBACF;AAAA,kBAEA,8CAAC,SAAI,WAAU,6BAA4B,OAAO,EAAE,KAAK,MAAM,GAC7D;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,wBACvC,SAAS,MAAM,aAAa,KAAK;AAAA,wBACjC,UAAU,UAAU;AAAA,wBACpB,OAAO,EAAE,uBAAe;AAAA,wBAExB,uDAAM,cAAL,EAAa,UAAU,IAAI;AAAA;AAAA,oBAC9B;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,wBACvC,SAAS,MAAM,eAAe,KAAK;AAAA,wBACnC,UAAU,UAAU,OAAO,SAAS;AAAA,wBACpC,OAAO,EAAE,2BAAiB;AAAA,wBAE1B,uDAAM,gBAAL,EAAe,UAAU,IAAI;AAAA;AAAA,oBAChC;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,wBACvC,SAAS,MAAM,mBAAmB,aAAa,OAAO,MAAM,EAAE;AAAA,wBAC9D,OAAO,EAAE,4CAAqB;AAAA,wBAE9B,uDAAM,eAAL,EAAc,UAAU,IAAI,WAAW,aAAa,iBAAiB,IAAI;AAAA;AAAA,oBAC5E;AAAA,oBACC,MAAM,SAAS,YACd;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAM;AAAA,wBACN,WAAU;AAAA,wBACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,wBACvC,SAAS,MAAM,kBAAkB,KAAK;AAAA,wBACtC,OAAO,EAAE,yBAAY;AAAA,wBAErB,uDAAM,aAAL,EAAY,UAAU,IAAI;AAAA;AAAA,oBAC7B;AAAA,qBAEJ;AAAA,mBACF;AAAA,gBAEC,cACC,8CAAC,SAAI,WAAU,qCACZ;AAAA,wBAAM,SAAS,aACd,8CAAC,SAAI,WAAU,sBAAqB,OAAO,EAAE,KAAK,MAAM,GACtD;AAAA,kEAAC,SAAI,WAAU,qDACb;AAAA,oEAAC,UAAK,WAAU,oBAAoB;AAAA,0BAAE,oBAAU;AAAA,wBAAE;AAAA,yBAAC;AAAA,sBACnD,8CAAC,iCAAY,MAAK,MAChB;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO,MAAM,SAAS,QAAQ,YAAY;AAAA,4BAC1C,WAAU;AAAA,4BACV,SAAS,MAAM,oBAAoB,OAAO,QAAQ,MAAM,SAAS,KAAK;AAAA,4BACtE,OAAM;AAAA,4BAEN,uDAAC,YAAO,eAAC;AAAA;AAAA,wBACX;AAAA,wBACA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO,MAAM,SAAS,YAAY;AAAA,4BAClC,WAAU;AAAA,4BACV,SAAS,MAAM,oBAAoB,OAAO,UAAU,CAAC,MAAM,MAAM;AAAA,4BACjE,OAAM;AAAA,4BAEN,uDAAC,QAAG,eAAC;AAAA;AAAA,wBACP;AAAA,wBACA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO,MAAM,YAAY,YAAY;AAAA,4BACrC,WAAU;AAAA,4BACV,SAAS,MAAM,oBAAoB,OAAO,aAAa,CAAC,MAAM,SAAS;AAAA,4BACvE,OAAM;AAAA,4BAEN,uDAAC,OAAE,eAAC;AAAA;AAAA,wBACN;AAAA,yBACF;AAAA,uBACF;AAAA,oBAEA,8CAAC,SAAI,WAAU,qDACb;AAAA,oEAAC,UAAK,WAAU,oBAAoB;AAAA,0BAAE,uBAAa;AAAA,wBAAE;AAAA,yBAAC;AAAA,sBACtD,8CAAC,SAAI,WAAU,6BACb;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAM;AAAA,4BACN,WAAU;AAAA,4BACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,4BACvC,SAAS,MAAM,oBAAoB,OAAO,YAAY,KAAK,IAAI,IAAI,MAAM,YAAY,MAAM,CAAC,CAAC;AAAA,4BAE7F,uDAAM,YAAL,EAAW,UAAU,IAAI;AAAA;AAAA,wBAC5B;AAAA,wBACA,6CAAC,UAAK,WAAU,uBAAsB,OAAO,EAAE,UAAU,QAAQ,WAAW,SAAS,GAClF,gBAAM,YAAY,IACrB;AAAA,wBACA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAM;AAAA,4BACN,WAAU;AAAA,4BACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,4BACvC,SAAS,MAAM,oBAAoB,OAAO,YAAY,KAAK,IAAI,KAAK,MAAM,YAAY,MAAM,CAAC,CAAC;AAAA,4BAE9F,uDAAM,WAAL,EAAU,UAAU,IAAI;AAAA;AAAA,wBAC3B;AAAA,yBACF;AAAA,uBACF;AAAA,oBAEA,8CAAC,SAAI,WAAU,qDACb;AAAA,oEAAC,UAAK,WAAU,oBAAoB;AAAA,0BAAE,iBAAS;AAAA,wBAAE;AAAA,yBAAC;AAAA,sBAClD,6CAAC,SAAI,WAAU,6BAA4B,OAAO,EAAE,KAAK,MAAM,GAC5D,wBAAc,IAAI,CAAC,cAClB;AAAA,wBAAC;AAAA;AAAA,0BAEC,SAAS,MAAM,oBAAoB,OAAO,SAAS,UAAU,KAAK;AAAA,0BAClE,OAAO,UAAU;AAAA,0BACjB,OAAO;AAAA,4BACL,OAAO;AAAA,4BACP,QAAQ;AAAA,4BACR,cAAc;AAAA,4BACd,iBAAiB,UAAU;AAAA,4BAC3B,QAAQ;AAAA,4BACR,UAAU,MAAM,SAAS,eAAe,UAAU,QAAQ,sBAAsB;AAAA,4BAChF,eAAe;AAAA,0BACjB;AAAA;AAAA,wBAXK,UAAU;AAAA,sBAYjB,CACD,GACH;AAAA,uBACF;AAAA,oBAEA,8CAAC,SAAI,WAAU,qDACb;AAAA,oEAAC,UAAK,WAAU,oBAAoB;AAAA,0BAAE,mBAAS;AAAA,wBAAE;AAAA,yBAAC;AAAA,sBAClD;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,OAAO,EAAE,OAAO,QAAQ;AAAA,0BACxB,OAAO,MAAM,UAAU;AAAA,0BACvB,UAAU,CAAC,MAAM,oBAAoB,OAAO,UAAU,EAAE,OAAO,KAAK;AAAA,0BACpE,aAAY;AAAA;AAAA,sBACd;AAAA,uBACF;AAAA,oBAEC,MAAM,SAAS,YACd,8CAAC,SAAI,WAAU,qDACb;AAAA,oEAAC,UAAK,WAAU,oBAAoB;AAAA,0BAAE,eAAU;AAAA,wBAAE;AAAA,yBAAC;AAAA,sBACnD;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAK;AAAA,0BACL,WAAU;AAAA,0BACV,OAAO,EAAE,OAAO,QAAQ;AAAA,0BACxB,OAAO,MAAM,eAAe;AAAA,0BAC5B,UAAU,CAAC,MAAM,oBAAoB,OAAO,eAAe,EAAE,OAAO,KAAK;AAAA;AAAA,sBAC3E;AAAA,uBACF;AAAA,qBAEJ;AAAA,kBAGF,8CAAC,SAAI,WAAU,2DACb;AAAA,kEAAC,UAAK,WAAU,oBAAoB;AAAA,wBAAE,6BAAkB;AAAA,sBAAE;AAAA,uBAAC;AAAA,oBAC3D,8CAAC,SAAI,WAAU,6BACb;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAM;AAAA,0BACN,WAAU;AAAA,0BACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,0BACvC,SAAS,MAAM,oBAAoB,OAAO,WAAW,KAAK,IAAI,IAAI,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,0BAE1F,uDAAM,YAAL,EAAW,UAAU,IAAI;AAAA;AAAA,sBAC5B;AAAA,sBACA,6CAAC,UAAK,WAAU,uBAAsB,OAAO,EAAE,UAAU,QAAQ,WAAW,SAAS,GAClF,gBAAM,WAAW,GACpB;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAM;AAAA,0BACN,WAAU;AAAA,0BACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,0BACvC,SAAS,MAAM,oBAAoB,OAAO,WAAW,KAAK,IAAI,MAAM,MAAM,WAAW,KAAK,CAAC,CAAC;AAAA,0BAE5F,uDAAM,WAAL,EAAU,UAAU,IAAI;AAAA;AAAA,sBAC3B;AAAA,uBACF;AAAA,qBACF;AAAA,mBACF;AAAA;AAAA;AAAA,YAvNG,MAAM;AAAA,UAyNb;AAAA,QAEJ,CAAC;AAAA,QAED,6CAAC,SAAI,WAAU,SACb,wDAAC,0CACC;AAAA,wDAAC,oCAAe,OAAM,mBAAkB,MAAK,MAAK,WAAU,0DAC1D;AAAA,yDAAM,WAAL,EAAU,UAAU,IAAI,WAAU,SAAQ;AAAA,YAC1C,EAAE,+CAA4B;AAAA,aACjC;AAAA,UACA,6CAAC,kCAAa,WAAU,SACrB,+BAAqB,IAAI,CAAC,UACzB,6CAAC,kCAA4B,SAAS,MAAM,eAAe,KAAK,GAC7D,gBAAM,SADU,MAAM,EAEzB,CACD,GACH;AAAA,WACF,GACF;AAAA,SACF,GACF;AAAA,OACF;AAAA,IAGA,8CAAC,SAAI,WAAU,sBACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,qBAAqB,CAAC,iBAAiB;AAAA,UAEtD;AAAA,yDAAC,UAAK,WAAU,uBAAuB,YAAE,6BAAc,GAAE;AAAA,YACxD,oBAAoB,6CAAM,kBAAL,EAAiB,UAAU,IAAI,IAAK,6CAAM,mBAAL,EAAkB,UAAU,IAAI;AAAA;AAAA;AAAA,MAC7F;AAAA,MAEA,6CAAC,8BAAS,QAAQ,mBAChB,uDAAC,SAAI,WAAU,2BAA0B,OAAO,EAAE,KAAK,MAAM,GAC3D,wDAAC,SAAI,WAAU,qDACb;AAAA,sDAAC,UAAK,WAAU,mBAAmB;AAAA,YAAE,2BAAY;AAAA,UAAE;AAAA,WAAC;AAAA,QACpD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL;AAAA,YACA,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,MACpC,8CAAC,SAAI,WAAU,UAAS,OAAO,EAAE,KAAK,OAAO,GAC3C;AAAA,4DAAC,2BAAM,WAAU,uDACf;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,SAAS,CAAC;AAAA,oBACV,UAAU,MAAM,SAAS,KAAK;AAAA;AAAA,gBAChC;AAAA,gBACA,6CAAC,UAAM,YAAE,kBAAU,GAAE;AAAA,iBACvB;AAAA,cACA,8CAAC,2BAAM,WAAU,uDACf;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,SAAS,CAAC,CAAC;AAAA,oBACX,UAAU,MAAM,SAAS,IAAI;AAAA;AAAA,gBAC/B;AAAA,gBACA,6CAAC,UAAM,YAAE,oBAAU,GAAE;AAAA,iBACvB;AAAA,eACF;AAAA;AAAA,QAEJ;AAAA,SACF,GACF,GACF;AAAA,OACF;AAAA,IAGA,8CAAC,SAAI,WAAU,QACb;AAAA,oDAAC,SAAI,WAAU,8EACb;AAAA,qDAAC,UAAM,YAAE,iCAAkB,GAAE;AAAA,QAC7B,6CAAC,WAAM,WAAU,wBAAuB,OAAO,EAAE,UAAU,OAAO,GAC/D,YAAE,oEAAkC,GACvC;AAAA,SACF;AAAA,MACA,6CAAC,SAAI,WAAU,iCACb,uDAAC,gBAAa,OAAc,UAAoB,GAClD;AAAA,OACF;AAAA,KACF,GACF;AAEJ;;;AC5kBA,IAAAC,QAAsB;AACtB,IAAAC,gBAAgD;AAChD,IAAAC,qBAA0E;AAqElE,IAAAC,sBAAA;AAxDD,IAAM,oBAA6C,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,IAAI,CAAC,MAAc;AACrB,MAAM;AACJ,QAAM,gBAAY,sBAA0B,IAAI;AAEhD,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAS,GAAG;AACpC,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAE1D,QAAM,EAAE,MAAM,aAAa,YAAY,eAAe,IAAI;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,mBAAmB,CAAC,cAAsB;AApClD;AAqCI,QAAI;AACF,YAAM,OAAM,eAAU,YAAV,mBAAmB;AAC/B,UAAI,OAAO,IAAI,MAAM;AACnB;AAAC,QAAC,IAAI,KAAK,MAAc,OAAO,GAAG,SAAS;AAAA,MAC9C;AAAA,IACF,SAAQ;AAAA,IAER;AAAA,EACF;AAEA,+BAAU,MAAM;AACd,qBAAiB,IAAI;AAAA,EACvB,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,QAAM,eAAe,MAAM;AACzB,YAAQ,CAAC,SAAS,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC;AAAA,EAC5C;AAEA,QAAM,gBAAgB,MAAM;AAC1B,YAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC;AAAA,EAC3C;AAEA,QAAM,kBAAkB,MAAM;AAC5B,YAAQ,GAAG;AAAA,EACb;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MACV,kBAAiB;AAAA,MACjB,OAAO,EAAE,UAAU,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AAAA,MAEzD;AAAA,sDAAC,SAAI,WAAU,0GACb;AAAA,wDAAC,SAAI,WAAU,6BACb;AAAA,yDAAM,eAAL,EAAa,UAAU,IAAI,WAAU,sBAAqB;AAAA,YAC3D,6CAAC,QAAG,WAAU,uCAAuC,YAAE,iDAA0B,GAAE;AAAA,aACrF;AAAA,UACA,6CAAC,SAAI,WAAU,kBAAiB,SAAS,QACvC,uDAAM,SAAL,EAAO,UAAU,IAAI,GACxB;AAAA,WACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,YAAY,WAAW,KAAK,MAAM;AAAA,YAE3C;AAAA,4DAAC,SAAI,WAAU,uCAAsC,OAAO,EAAE,KAAK,MAAM,GACvE;AAAA,8DAAC,4BAAM,OAAM,iBAAgB,WAAU,wCACrC;AAAA,gEAAC,UAAK,WAAU,mBAAmB;AAAA,sBAAE,oBAAU;AAAA,oBAAE;AAAA,qBAAC;AAAA,kBAClD,6CAAC,UAAK,WAAU,aAAa,sBAAW;AAAA,mBAC1C;AAAA,gBAEA,8CAAC,4BAAM,OAAM,iBAAgB,WAAU,wCACrC;AAAA,gEAAC,UAAK,WAAU,mBAAmB;AAAA,sBAAE,uBAAa;AAAA,oBAAE;AAAA,qBAAC;AAAA,kBACrD,8CAAC,UAAK,WAAU,aAAa;AAAA;AAAA,oBAAY;AAAA,qBAAI;AAAA,mBAC/C;AAAA,gBAEA,8CAAC,4BAAM,OAAM,mBAAkB,WAAU,wCACvC;AAAA,gEAAC,UAAK,WAAU,mBAAmB;AAAA,sBAAE,kBAAU;AAAA,oBAAE;AAAA,qBAAC;AAAA,kBAClD,8CAAC,UAAK,WAAU,aAAa;AAAA;AAAA,oBAAe;AAAA,qBAAS;AAAA,mBACvD;AAAA,iBACF;AAAA,cAEA,8CAAC,SAAI,WAAU,6BAA4B,OAAO,EAAE,KAAK,OAAO,GAC9D;AAAA,8DAAC,kCAAY,MAAK,MAChB;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO,CAAC,iBAAiB,YAAY;AAAA,sBACrC,SAAS,MAAM,kBAAkB,KAAK;AAAA,sBAErC;AAAA,0BAAE,sBAAY;AAAA,wBAAE;AAAA,wBAAG;AAAA,wBAAY;AAAA;AAAA;AAAA,kBAClC;AAAA,kBACA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO,iBAAiB,YAAY;AAAA,sBACpC,SAAS,MAAM,kBAAkB,IAAI;AAAA,sBAEpC,YAAE,mBAAgB;AAAA;AAAA,kBACrB;AAAA,mBACF;AAAA,gBAEA,8CAAC,SAAI,WAAU,2DAA0D,OAAO,EAAE,QAAQ,OAAO,GAC/F;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAM;AAAA,sBACN,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,sBACvC,SAAS;AAAA,sBACT,OAAO,EAAE,cAAS;AAAA,sBAElB,uDAAM,aAAL,EAAW,UAAU,IAAI;AAAA;AAAA,kBAC5B;AAAA,kBAEA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,UAAU,QAAQ,UAAU,OAAO;AAAA,sBAC5C,SAAS;AAAA,sBACT,OAAO,EAAE,6BAAc;AAAA,sBAEtB;AAAA;AAAA,wBAAK;AAAA;AAAA;AAAA,kBACR;AAAA,kBAEA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAM;AAAA,sBACN,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,sBACvC,SAAS;AAAA,sBACT,OAAO,EAAE,aAAU;AAAA,sBAEnB,uDAAM,YAAL,EAAU,UAAU,IAAI;AAAA;AAAA,kBAC3B;AAAA,mBACF;AAAA,iBACF;AAAA;AAAA;AAAA,QACF;AAAA,QAEA,6CAAC,gCAAU,WAAU,yBAAwB,OAAO,EAAE,YAAY,UAAU,GAC1E,uDAAC,SAAI,OAAO,EAAE,QAAQ,QAAQ,WAAW,SAAS,OAAO,QAAQ,UAAU,SAAS,GAClF;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAM;AAAA,YACN,QAAQ;AAAA,YACR,QAAQ,MAAM,iBAAiB,IAAI;AAAA,YACnC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA;AAAA,QACF,GACF,GACF;AAAA,QAEA,8CAAC,kCAAY,WAAU,+EAA8E,OAAO,EAAE,KAAK,OAAO,GACvH;AAAA,qBACC;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,SAAS;AAAA,cACT,WAAU;AAAA,cAEV;AAAA,6DAAM,eAAL,EAAa,UAAU,IAAI,WAAU,SAAQ;AAAA,gBAC7C,EAAE,IAAI;AAAA;AAAA;AAAA,UACT;AAAA,UAEF,6CAAC,6BAAO,OAAM,aAAY,SAAO,MAAC,SAAS,QACxC,YAAE,OAAO,GACZ;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACxLA,IAAAC,QAAsB;AACtB,IAAAC,gBAAkD;AAClD,IAAAC,0BAAwB;AACxB,IAAAC,qBAAmD;AACnD,yBAAiB;AACjB,uCAA6B;AA8HrB,IAAAC,sBAAA;AAxHR,IAAM,aAAS,iCAAAC,SAAiB,mBAAAC,OAAI;AAuBpC,IAAM,uBAAsC;AAAA,EAC1C,EAAE,IAAI,eAAe,KAAK,eAAe,OAAO,qBAAe,MAAM,QAAQ,SAAS,OAAO,MAAM,KAAK;AAAA,EACxG,EAAE,IAAI,eAAe,KAAK,QAAQ,OAAO,iBAAW,MAAM,QAAQ,SAAS,MAAM,MAAM,KAAK;AAAA,EAC5F,EAAE,IAAI,eAAe,KAAK,QAAQ,OAAO,kBAAY,MAAM,QAAQ,SAAS,MAAM,MAAM,MAAM;AAAA,EAC9F,EAAE,IAAI,WAAW,KAAK,QAAQ,OAAO,8BAAmB,MAAM,WAAW,SAAS,KAAK;AAAA,EACvF,EAAE,IAAI,aAAa,KAAK,SAAS,OAAO,iBAAW,MAAM,QAAQ,SAAS,MAAM,MAAM,MAAM,QAAQ,YAAS,QAAQ,GAAG;AAC1H;AAEO,IAAM,oBAAiD,CAAC;AAAA,EAC7D;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,IAAI,CAAC,MAAc;AAAA,EACnB;AAAA,EACA,cAAc,CAAC,QAAgB,MAAM,GAAG;AAAA,EACxC,gBAAgB,CAAC,QAAgB,QAAQ,IAAI,GAAG;AAClD,MAAM;AACJ,QAAM,gBAA+B;AAAA,IACnC,WAAW;AAAA,IACX,WAAW;AAAA;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAEA,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,KAAK;AAE9D,QAAM,EAAE,SAAS,OAAO,UAAU,OAAO,WAAW,WAAW,EAAE,OAAO,EAAE,QAAI,iCAAuB;AAAA,IACnG,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,MAAM;AAC5B,UAAM,WAAW,UAAU;AAC3B,UAAM,cAAc,aAAa,SAAS,IAAI,eAAgB,WAAW,CAAC,QAAQ,IAAI,CAAC;AACvF,iBAAa,UAAU,aAAa,IAAI;AAAA,EAC1C;AAEA,QAAM,oBAAoB,MAAM;AAC9B,UAAM,cAAc,aAAa,SAAS,IAAI,eAAgB,WAAW,CAAC,QAAQ,IAAI,CAAC;AACvF,QAAI,YAAY,WAAW,GAAG;AAC5B,kBAAY,EAAE,iGAAmD,CAAC;AAClE;AAAA,IACF;AACA,wBAAoB,IAAI;AAAA,EAC1B;AAEA,QAAM,kBAAkB,MAAM;AAC5B,QAAI,aAAa,WAAW,KAAK,CAAC,UAAU;AAC1C,kBAAY,EAAE,gGAAoD,CAAC;AACnE;AAAA,IACF;AACA,UAAM,WAAW,UAAU;AAC3B,UAAM,eAAe,aAAa,SAAS,IAAI,eAAe,CAAC,QAAS;AACxE,iBAAa,UAAU,cAAc,KAAK;AAC1C,QAAI,gBAAgB;AAClB,qBAAe;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,qBAAqB,MAAM;AAC/B,WAAO,KAAK;AAAA,MACV,OAAO,EAAE,kBAAU;AAAA,MACnB,MAAM,EAAE,yIAAoE;AAAA,MAC5E,MAAM;AAAA,MACN,kBAAkB;AAAA,MAClB,mBAAmB,EAAE,kBAAU;AAAA,MAC/B,kBAAkB,EAAE,UAAK;AAAA,MACzB,aAAa;AAAA,QACX,eAAe;AAAA,QACf,cAAc;AAAA,MAChB;AAAA,MACA,gBAAgB;AAAA,IAClB,CAAC,EAAE,KAAK,CAAC,WAAW;AAClB,UAAI,OAAO,eAAe,OAAO,OAAO;AACtC,cAAM,aAAa;AACnB,sBAAc,EAAE,mFAAqC,CAAC;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,sBAAsB,MAAM;AAChC,WACE,8CAAC,SAAI,WAAU,6BAA4B,OAAO,EAAE,KAAK,OAAO,GAC9D;AAAA,oDAAC,6BAAO,OAAM,WAAU,SAAS,oBAAoB,WAAU,wCAC7D;AAAA,qDAAM,oBAAL,EAAkB,UAAU,IAAI,WAAU,SAAQ;AAAA,QAClD,EAAE,8BAAe;AAAA,SACpB;AAAA,MACA,8CAAC,6BAAO,OAAM,QAAO,SAAO,MAAC,SAAS,mBAAmB,WAAU,6BACjE;AAAA,qDAAM,WAAL,EAAS,UAAU,IAAI,WAAU,SAAQ;AAAA,QACzC,EAAE,qBAAW;AAAA,SAChB;AAAA,MACA,8CAAC,6BAAO,OAAM,aAAY,SAAO,MAAC,SAAS,iBAAiB,WAAU,6BACpE;AAAA,qDAAM,eAAL,EAAa,UAAU,IAAI,WAAU,SAAQ;AAAA,QAC7C,EAAE,aAAQ;AAAA,SACb;AAAA,MACA,8CAAC,6BAAO,OAAM,WAAU,SAAS,iBAAiB,WAAU,6BAC1D;AAAA,qDAAM,eAAL,EAAa,UAAU,IAAI,WAAU,SAAQ;AAAA,QAC7C,EAAE,IAAI;AAAA,SACT;AAAA,MACA,6CAAC,6BAAO,OAAM,aAAY,SAAS,QAAQ,SAAO,MAC/C,YAAE,OAAO,GACZ;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,8CAAC,0BACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,WAAU;AAAA,QACV,kBAAiB;AAAA,QACjB,OAAO,EAAE,QAAQ,SAAS,WAAW,QAAQ;AAAA,QAE7C;AAAA,wDAAC,SAAI,WAAU,gHACb;AAAA,0DAAC,SAAI,WAAU,6BACb;AAAA,2DAAM,eAAL,EAAa,UAAU,IAAI,WAAU,sBAAqB;AAAA,cAC3D,6CAAC,QAAG,WAAU,uCAAuC,YAAE,KAAK,GAAE;AAAA,eAChE;AAAA,YACA,6CAAC,SAAI,WAAU,kBAAiB,SAAS,QACvC,uDAAM,SAAL,EAAO,UAAU,IAAI,GACxB;AAAA,aACF;AAAA,UAEA,6CAAC,gCAAU,WAAU,mCAAkC,OAAO,EAAE,YAAY,UAAU,GACpF,wDAAC,0BAAI,WAAU,aAEb;AAAA,yDAAC,0BAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,WAAU,yBACpC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,YAAY,OAAO;AAAA,gBAE5B;AAAA,+DAAC,QAAG,WAAU,wDAAwD,YAAE,sBAAc,GAAE;AAAA,kBACxF,6CAAC,SAAI,WAAU,mCACb;AAAA,oBAAC;AAAA;AAAA,sBACC;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA;AAAA,kBACF,GACF;AAAA;AAAA;AAAA,YACF,GACF;AAAA,YAGA,6CAAC,0BAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,WAAU,yBACpC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,YAAY,OAAO;AAAA,gBAE5B;AAAA,+DAAC,QAAG,WAAU,wDAAwD,YAAE,0CAA0B,GAAE;AAAA,kBACpG,6CAAC,SAAI,WAAU,wDACZ,wBACG,YAAY;AAAA,oBACV,eAAe;AAAA,oBACf,kBAAkB;AAAA,kBACpB,CAAC,IACD,UACN;AAAA;AAAA;AAAA,YACF,GACF;AAAA,aACF,GACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,WAAW,oCAAoC,YAAY,OAAO;AAAA,cAE1E,8BAAoB;AAAA;AAAA,UACvB;AAAA;AAAA;AAAA,IACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,QAAQ,MAAM,oBAAoB,KAAK;AAAA,QACvC,UAAU,UAAU;AAAA,QACpB,OAAO,aAAa,SAAS,IAAI,eAAgB,WAAW,CAAC,QAAQ,IAAI,CAAC;AAAA,QAC1E,SAAS;AAAA,QACT;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":["qrcode","JsBarcode","_a","_a","Barcode","import_react","import_jsx_runtime","Icon","import_react","import_reactstrap","import_jsx_runtime","Icon","import_react","import_react_hook_form","import_reactstrap","import_jsx_runtime","withReactContent","Swal"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/helpers/print-helper.ts","../src/components/preview-print.tsx","../src/components/setting-print.tsx","../src/components/modal-preview-print.tsx","../src/components/modal-barcode-print.tsx"],"sourcesContent":["/* eslint-disable indent */\nexport * from './types'\nexport * from './helpers/print-helper'\nexport * from './components/preview-print'\nexport * from './components/setting-print'\nexport * from './components/modal-preview-print'\nexport * from './components/modal-barcode-print'\n","/* eslint-disable indent */\nimport JsBarcode from 'jsbarcode'\nimport qrcode from 'qrcode-generator'\nimport { IBarcodePrintItem, IPrintField, ISettingPrint } from '../types'\n\nexport const getOrganizationName = (): string => {\n try {\n const dataLocal = localStorage.getItem('organization')\n const organization = JSON.parse(dataLocal && dataLocal !== 'undefined' ? dataLocal : 'null')\n return organization?.text || organization?.label || organization?.name || ''\n } catch {\n return ''\n }\n}\n\nexport const generateBarcodeHtml = (\n value: string,\n printType: number,\n height = 24\n): string => {\n if (!value) { value = '000000' }\n\n if (printType === 1) {\n // QR Code\n try {\n const qr = qrcode(0, 'M')\n qr.addData(value)\n qr.make()\n return `<div class=\"code-wrapper qr-wrapper\">${qr.createSvgTag({ cellSize: 2, margin: 0, scalable: true })}</div>`\n } catch (e) {\n return `<div style=\"font-size: 10px; text-align: center; word-break: break-word;\">${value}</div>`\n }\n }\n\n // Barcode CODE128\n try {\n const len = value.length\n let barWidth = 1.3\n if (len <= 6) {\n barWidth = 2.2\n } else if (len <= 10) {\n barWidth = 1.7\n } else if (len <= 15) {\n barWidth = 1.3\n } else if (len <= 20) {\n barWidth = 1.05\n } else {\n barWidth = 0.85\n }\n\n const svgNode = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n JsBarcode(svgNode, value, {\n format: 'CODE128',\n width: barWidth,\n height,\n displayValue: false,\n margin: 0\n })\n svgNode.setAttribute('preserveAspectRatio', 'none')\n\n return `\n <div class=\"code-wrapper barcode-wrapper\">\n <div class=\"barcode-svg-box\">\n ${svgNode.outerHTML}\n </div>\n </div>\n `\n } catch (e) {\n return `<div style=\"font-size: 10px; text-align: center; word-break: break-word;\">${value}</div>`\n }\n}\n\nexport const renderSingleLabelHtml = (\n item: IBarcodePrintItem,\n settings: ISettingPrint,\n companyNameDefault?: string,\n barcodeHeight = 22\n): string => {\n const {\n printType = 0,\n hinge = false,\n fields = []\n } = settings\n\n const alignClass = hinge ? 'text-right' : 'text-left'\n const currentOrgName = item.companyName || companyNameDefault || getOrganizationName()\n\n if (fields && fields.length > 0) {\n const renderedFields = fields\n .filter((f) => f.enabled)\n .map((field) => {\n if (field.type === 'barcode') {\n const barcodeContent = generateBarcodeHtml(item.code || '', printType, barcodeHeight)\n if (field.offsetX && field.offsetX > 0) {\n return `<div style=\"padding-left: ${field.offsetX}px !important;\">${barcodeContent}</div>`\n }\n return barcodeContent\n }\n\n let rawVal = ''\n if (field.type === 'custom') {\n rawVal = field.customValue || field.label || ''\n } else if (field.key === 'companyName' || field.id === 'companyName') {\n rawVal = currentOrgName\n } else if (field.key === 'price' || field.id === 'unitPrice') {\n rawVal = item.price !== undefined ? Number(item.price).toLocaleString('vi-VN') : '0'\n } else {\n rawVal = (item as any)[field.key] || (item as any)[field.id] || ''\n }\n\n if (!rawVal && field.type !== 'custom') {\n return ''\n }\n\n const prefix = field.prefix || ''\n const suffix = field.suffix || ''\n const displayVal = `${prefix}${rawVal}${suffix}`\n\n const isBold = field.bold !== false\n const isItalic = !!field.italic\n const isUnderline = !!field.underline\n const textColor = field.color || '#000000'\n const customFontSize = field.fontSize ? `${field.fontSize}px` : undefined\n const offsetLeft = field.offsetX && field.offsetX > 0 ? `${field.offsetX}px` : undefined\n\n const styleRules = [\n `font-weight: ${isBold ? 700 : 400} !important`,\n isItalic ? 'font-style: italic !important' : '',\n isUnderline ? 'text-decoration: underline !important' : '',\n `color: ${textColor} !important`,\n customFontSize ? `font-size: ${customFontSize} !important` : '',\n offsetLeft ? `padding-left: ${offsetLeft} !important` : ''\n ]\n .filter(Boolean)\n .join('; ')\n\n return `<div class=\"lbl-dynamic ${alignClass}\" style=\"${styleRules};\">${displayVal}</div>`\n })\n .join('')\n\n return `<div class=\"stamp-item\">${renderedFields}</div>`\n }\n\n // Fallback\n const companyHtml = settings.companyName && currentOrgName ? `<div class=\"lbl-company ${alignClass}\">${currentOrgName}</div>` : ''\n const codeHtml = settings.productCode ? `<div class=\"lbl-code ${alignClass}\">${item.code || ''}</div>` : ''\n const nameHtml = settings.productName ? `<div class=\"lbl-name ${alignClass}\">${item.name || ''}</div>` : ''\n const barcodeHtml = generateBarcodeHtml(item.code || '', printType, barcodeHeight)\n const priceHtml = settings.unitPrice ? `<div class=\"lbl-price ${alignClass}\">Giá: ${item.price !== undefined ? Number(item.price).toLocaleString('vi-VN') : '0'}</div>` : ''\n\n return `<div class=\"stamp-item\">${companyHtml}${codeHtml}${nameHtml}${barcodeHtml}${priceHtml}</div>`\n}\n\nexport const getPaperSizeLabel = (paperSize?: number, stampNumber?: number): string => {\n switch (Number(paperSize)) {\n case 1:\n return 'Khổ giấy 2 tem (80x22mm)'\n case 2:\n return 'Khổ giấy 3 tem (105x22mm)'\n case 3:\n return 'Khổ giấy A5 (40 tem - Tomy 108)'\n case 4:\n return 'Khổ giấy A4 (65 tem - Tomy 145)'\n case 0:\n default:\n return `Khổ giấy tùy chọn (${stampNumber || 3} tem/hàng)`\n }\n}\n\nexport const generatePrintDocument = (\n settings: ISettingPrint,\n items: IBarcodePrintItem[],\n isTest = false,\n isPreview = false\n): { html: string; totalStamps: number; paperLabel: string; uniqueProducts: number } => {\n let labelList: IBarcodePrintItem[] = []\n const orgName = getOrganizationName()\n\n if (isTest) {\n const sampleItem: IBarcodePrintItem =\n items.length > 0\n ? { ...items[0], companyName: orgName }\n : { code: 'SP-001', name: 'Sản phẩm mẫu', price: 100000, companyName: orgName }\n labelList = [sampleItem]\n } else {\n items.forEach((item) => {\n const qty = Math.max(1, Number(item.printQuantity || item.quantity || 1))\n for (let i = 0; i < qty; i++) {\n labelList.push({ ...item, companyName: orgName })\n }\n })\n }\n\n const paperSize = Number(settings.paperSize ?? 2)\n const stampNumber = Math.max(1, Number(settings.stampNumber || 3))\n const paperLabel = getPaperSizeLabel(paperSize, stampNumber)\n\n if (labelList.length === 0) {\n return { html: '', totalStamps: 0, paperLabel, uniqueProducts: items.length }\n }\n\n let cols = 3\n let pageSizeCss = '105mm auto'\n let pageMargin = '0'\n let labelWidth = '33mm'\n let labelHeight = '22mm'\n let labelGap = '1.5mm'\n let bodyPadding = '1mm'\n let stampPadding = '2px 4px'\n let dynamicFontSize = '8px'\n let barcodeHeight = 16\n let sheetWidth = '105mm'\n let sheetMinHeight = '60mm'\n let sheetPadding = '2mm 1mm'\n let stampsPerPage = 999999\n\n if (isTest) {\n // In thử: phóng to tem như mẫu preview để xem rõ chi tiết\n cols = 1\n pageSizeCss = 'auto'\n pageMargin = '10mm'\n labelWidth = '75mm'\n labelHeight = 'auto'\n labelGap = '0'\n bodyPadding = '0'\n stampPadding = '10px 14px'\n dynamicFontSize = '12.5px'\n barcodeHeight = 42\n sheetWidth = '90mm'\n sheetMinHeight = '60mm'\n sheetPadding = '6mm'\n stampsPerPage = 1\n } else {\n switch (paperSize) {\n case 1: // 2 tem (80x22mm)\n cols = 2\n pageSizeCss = '80mm auto'\n pageMargin = '0'\n labelWidth = '38mm'\n labelHeight = '22mm'\n labelGap = '2mm'\n bodyPadding = '1mm'\n stampPadding = '2px 4px'\n dynamicFontSize = '8px'\n barcodeHeight = 18\n sheetWidth = '80mm'\n sheetMinHeight = '60mm'\n sheetPadding = '2mm 1mm'\n stampsPerPage = 999999\n break\n case 2: // 3 tem (105x22mm)\n cols = 3\n pageSizeCss = '105mm auto'\n pageMargin = '0'\n labelWidth = '33mm'\n labelHeight = '22mm'\n labelGap = '1.5mm'\n bodyPadding = '1mm'\n stampPadding = '1px 3px'\n dynamicFontSize = '7.5px'\n barcodeHeight = 16\n sheetWidth = '105mm'\n sheetMinHeight = '60mm'\n sheetPadding = '2mm 1mm'\n stampsPerPage = 999999\n break\n case 3: // A5 40 tem (Tomy 108)\n cols = 5\n pageSizeCss = 'A5 portrait'\n pageMargin = '6mm 4mm'\n labelWidth = '27mm'\n labelHeight = '22mm'\n labelGap = '1.5mm'\n bodyPadding = '0'\n stampPadding = '2px 3px'\n dynamicFontSize = '7.5px'\n barcodeHeight = 16\n sheetWidth = '148mm'\n sheetMinHeight = '210mm'\n sheetPadding = '6mm 4mm'\n stampsPerPage = 40\n break\n case 4: // A4 65 tem (Tomy 145)\n cols = 5\n pageSizeCss = 'A4 portrait'\n pageMargin = '8mm 5mm'\n labelWidth = '38mm'\n labelHeight = '20mm'\n labelGap = '1.5mm'\n bodyPadding = '0'\n stampPadding = '2px 4px'\n dynamicFontSize = '8px'\n barcodeHeight = 18\n sheetWidth = '210mm'\n sheetMinHeight = '297mm'\n sheetPadding = '8mm 5mm'\n stampsPerPage = 65\n break\n case 0: // Tùy chọn\n default:\n cols = stampNumber\n pageSizeCss = 'auto'\n pageMargin = '5mm'\n labelWidth = `${Math.floor(100 / cols)}%`\n labelHeight = '22mm'\n labelGap = '3mm'\n bodyPadding = '2mm'\n stampPadding = '4px 6px'\n dynamicFontSize = '9.5px'\n barcodeHeight = 26\n sheetWidth = '210mm'\n sheetMinHeight = '297mm'\n sheetPadding = '8mm 6mm'\n stampsPerPage = 999999\n break\n }\n }\n\n let printDocument = ''\n\n if (isPreview) {\n const pages: { items: IBarcodePrintItem[]; emptyCount: number }[] = []\n\n if (stampsPerPage < 999999) {\n for (let i = 0; i < labelList.length; i += stampsPerPage) {\n const chunk = labelList.slice(i, i + stampsPerPage)\n const emptyCount = stampsPerPage - chunk.length\n pages.push({ items: chunk, emptyCount })\n }\n } else {\n pages.push({ items: labelList, emptyCount: 0 })\n }\n\n const pagesHtml = pages.map((page, pageIndex) => {\n const pageLabelsHtml = page.items\n .map((item) => renderSingleLabelHtml(item, settings, orgName, barcodeHeight))\n .join('')\n\n let emptySlotsHtml = ''\n if (page.emptyCount > 0) {\n emptySlotsHtml = Array(page.emptyCount)\n .fill(0)\n .map(() => '<div class=\"empty-slot\" title=\"Vị trí tem trống trên decal\"></div>')\n .join('')\n }\n\n const pageIndicator = pages.length > 1 ? `<div class=\"page-indicator\">Trang ${pageIndex + 1} / ${pages.length} (${page.items.length} tem)</div>` : ''\n\n return `\n <div class=\"page-wrapper\">\n ${pageIndicator}\n <div class=\"preview-sheet-wrapper\">\n <div class=\"print-container\">\n ${pageLabelsHtml}\n ${emptySlotsHtml}\n </div>\n </div>\n </div>\n `\n }).join('')\n\n printDocument = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <title>Xem trước bản in</title>\n <style>\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n background: #e9ecef;\n color: #000;\n padding: 24px 16px 40px 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-height: 100vh;\n transform-origin: top center;\n }\n .page-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-bottom: 28px;\n }\n .page-indicator {\n font-size: 12px;\n font-weight: 600;\n color: #495057;\n margin-bottom: 8px;\n background: #ffffff;\n padding: 4px 14px;\n border-radius: 20px;\n box-shadow: 0 1px 4px rgba(0,0,0,0.08);\n border: 1px solid #ced4da;\n }\n .preview-sheet-wrapper {\n background: #ffffff;\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.12), 0 2px 6px rgba(0, 0, 0, 0.04);\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: ${sheetPadding};\n width: ${sheetWidth};\n min-height: ${sheetMinHeight};\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n }\n .print-container {\n display: grid;\n grid-template-columns: repeat(${cols}, ${paperSize === 0 && !isTest ? '1fr' : labelWidth});\n gap: ${labelGap};\n justify-content: ${isTest ? 'flex-start' : 'center'};\n }\n .stamp-item {\n width: 100%;\n min-height: ${isTest ? '48mm' : labelHeight === 'auto' ? '22mm' : labelHeight};\n height: ${labelHeight === 'auto' ? 'auto' : labelHeight};\n padding: ${stampPadding};\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n overflow: hidden;\n border: 1px solid #d8d6de;\n border-radius: 3px;\n background: #fff;\n box-sizing: border-box;\n }\n .empty-slot {\n width: 100%;\n min-height: ${labelHeight === 'auto' ? '22mm' : labelHeight};\n height: ${labelHeight === 'auto' ? '22mm' : labelHeight};\n border: 1px dashed #e2e5eb;\n border-radius: 3px;\n background: #fafbfc;\n box-sizing: border-box;\n }\n .text-left {\n text-align: left;\n justify-content: flex-start;\n }\n .text-right {\n text-align: right;\n justify-content: flex-end;\n }\n .lbl-dynamic, .lbl-company, .lbl-code, .lbl-name, .lbl-price {\n font-size: ${dynamicFontSize};\n line-height: 1.2;\n word-break: break-word;\n white-space: normal;\n margin-bottom: 2px;\n }\n .code-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 2px 0;\n width: 100%;\n }\n .barcode-svg-box {\n width: 82%;\n max-width: 82%;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n }\n .barcode-svg-box svg {\n width: 100%;\n height: ${barcodeHeight}px;\n }\n .qr-wrapper svg {\n width: ${barcodeHeight + 6}px;\n height: ${barcodeHeight + 6}px;\n }\n </style>\n </head>\n <body>\n ${pagesHtml}\n </body>\n </html>\n `\n } else {\n const labelsHtml = labelList\n .map((item) => renderSingleLabelHtml(item, settings, orgName, barcodeHeight))\n .join('')\n\n printDocument = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <title>In mã vạch</title>\n <style>\n @page {\n size: ${pageSizeCss};\n margin: ${pageMargin};\n }\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n color-adjust: exact !important;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n background: #fff;\n color: #000;\n padding: ${bodyPadding};\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n }\n .print-container {\n display: grid;\n grid-template-columns: repeat(${cols}, ${paperSize === 0 && !isTest ? '1fr' : labelWidth});\n gap: ${labelGap};\n justify-content: ${isTest ? 'flex-start' : 'center'};\n }\n .stamp-item {\n width: 100%;\n min-height: ${isTest ? '48mm' : labelHeight === 'auto' ? '22mm' : labelHeight};\n padding: ${stampPadding};\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n page-break-inside: avoid;\n break-inside: avoid;\n overflow: hidden;\n border: 1px solid #d8d6de;\n border-radius: 4px;\n background: #fff;\n }\n .text-left {\n text-align: left;\n justify-content: flex-start;\n }\n .text-right {\n text-align: right;\n justify-content: flex-end;\n }\n .lbl-dynamic, .lbl-company, .lbl-code, .lbl-name, .lbl-price {\n font-size: ${dynamicFontSize};\n line-height: 1.2;\n word-break: break-word;\n white-space: normal;\n margin-bottom: 2px;\n }\n .code-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 2px 0;\n width: 100%;\n }\n .barcode-svg-box {\n width: 82%;\n max-width: 82%;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n }\n .barcode-svg-box svg {\n width: 100%;\n height: ${barcodeHeight}px;\n }\n .qr-wrapper svg {\n width: ${barcodeHeight + 6}px;\n height: ${barcodeHeight + 6}px;\n }\n </style>\n </head>\n <body>\n <div class=\"print-container\">\n ${labelsHtml}\n </div>\n </body>\n </html>\n `\n }\n\n return { html: printDocument, totalStamps: labelList.length, paperLabel, uniqueProducts: items.length }\n}\n\nexport const executePrint = (\n settings: ISettingPrint,\n items: IBarcodePrintItem[],\n isTest = false\n) => {\n const { html, totalStamps } = generatePrintDocument(settings, items, isTest, false)\n\n if (totalStamps === 0) {\n return\n }\n\n let iframe = document.getElementById('print-barcode-iframe') as HTMLIFrameElement\n if (!iframe) {\n iframe = document.createElement('iframe')\n iframe.id = 'print-barcode-iframe'\n iframe.style.position = 'fixed'\n iframe.style.right = '0'\n iframe.style.bottom = '0'\n iframe.style.width = '0'\n iframe.style.height = '0'\n iframe.style.border = 'none'\n document.body.appendChild(iframe)\n }\n\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document\n if (iframeDoc) {\n iframeDoc.open()\n iframeDoc.write(html)\n iframeDoc.close()\n\n setTimeout(() => {\n iframe.contentWindow?.focus()\n iframe.contentWindow?.print()\n }, 250)\n }\n}\n","/* eslint-disable indent */\nimport { IPrintField, ISettingPrint } from '../types'\nimport { QRCodeCanvas } from 'qrcode.react'\nimport { Fragment, useRef, useState } from 'react'\nimport Barcode from 'react-barcode'\nimport { UseFormSetValue, UseFormWatch } from 'react-hook-form'\n\nexport interface IPreviewPrintProps {\n watch: UseFormWatch<ISettingPrint>\n setValue?: UseFormSetValue<ISettingPrint>\n sampleData?: Record<string, string>\n}\n//#region MODAL XEM TRƯỚC MẪU IN (DATNV)\nexport const PreviewPrint = ({ watch, setValue, sampleData }: IPreviewPrintProps) => {\n const printType = Number(watch('printType') ?? 0)\n const fields: IPrintField[] = watch('fields') ?? []\n\n const draggingRef = useRef<{ fieldId: string; startX: number; initialOffset: number } | null>(null)\n const [activeDragId, setActiveDragId] = useState<string | null>(null)\n\n // Lấy tên công ty / tổ chức đang chọn trong hệ thống\n const getOrgName = () => {\n try {\n const dataLocal = localStorage.getItem('organization')\n const organization = JSON.parse(dataLocal && dataLocal !== 'undefined' ? dataLocal : 'null')\n return organization?.text || organization?.label || organization?.name || 'Tên công ty'\n } catch {\n return 'Tên công ty'\n }\n }\n\n const effectiveSampleData: Record<string, string> = {\n ...(sampleData || {}),\n companyName: getOrgName(),\n code: 'SOMI',\n productCode: 'SOMI',\n name: 'Áo sơ mi nam',\n productName: 'Áo sơ mi nam',\n price: '250.000',\n unitPrice: '250.000',\n unitName: 'Cái',\n origin: 'Việt Nam',\n categoryRootName: 'Thời trang nam',\n groupProductName: 'Thời trang nam',\n lotSerial: 'LOT-2026',\n specificationCode: 'SIZE-L'\n }\n\n const barcodeValue = 'Hang-01'\n const hinge = watch('hinge')\n\n const alignStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: hinge ? 'flex-end' : 'flex-start',\n alignItems: 'center',\n textAlign: hinge ? 'right' : 'left'\n }\n\n // Mouse handlers for dragging offset\n const handleMouseDown = (e: React.MouseEvent, field: IPrintField) => {\n if (!setValue) { return }\n e.preventDefault()\n e.stopPropagation()\n draggingRef.current = {\n fieldId: field.id,\n startX: e.clientX,\n initialOffset: field.offsetX || 0\n }\n setActiveDragId(field.id)\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!draggingRef.current) { return }\n const deltaX = moveEvent.clientX - draggingRef.current.startX\n const newOffset = Math.max(0, Math.min(180, Math.round(draggingRef.current.initialOffset + deltaX)))\n\n const currentFields = watch('fields') || []\n const updatedFields = currentFields.map((f) => (f.id === draggingRef.current?.fieldId ? { ...f, offsetX: newOffset } : f)\n )\n setValue('fields', updatedFields)\n }\n\n const handleMouseUp = () => {\n draggingRef.current = null\n setActiveDragId(null)\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n }\n\n const renderCode = (field?: IPrintField) => {\n const offsetX = field?.offsetX || 0\n const containerStyle: React.CSSProperties = {\n ...alignStyle,\n marginTop: 4,\n marginBottom: 4,\n width: '100%',\n flexDirection: 'column',\n alignItems: hinge ? 'flex-end' : 'center',\n paddingLeft: offsetX > 0 ? `${offsetX}px` : undefined,\n cursor: setValue ? 'ew-resize' : 'default',\n position: 'relative'\n }\n\n if (printType === 0) {\n const len = barcodeValue.length\n let barWidth = 1.3\n if (len <= 6) {\n barWidth = 2.2\n } else if (len <= 10) {\n barWidth = 1.7\n } else if (len <= 15) {\n barWidth = 1.3\n } else if (len <= 20) {\n barWidth = 1.05\n } else {\n barWidth = 0.85\n }\n\n return (\n <div\n key=\"barcode-item\"\n onMouseDown={(e) => field && handleMouseDown(e, field)}\n title={setValue ? 'Kéo chuột sang trái/phải để dịch chuyển lề' : undefined}\n style={containerStyle}\n >\n <div\n style={{\n width: '82%',\n maxWidth: '220px',\n height: '42px',\n display: 'flex',\n justifyContent: 'center',\n overflow: 'hidden',\n outline: activeDragId === field?.id ? '1px dashed #7367f0' : 'none'\n }}\n >\n <Barcode\n value={barcodeValue}\n format=\"CODE128\"\n displayValue={false}\n margin={0}\n height={40}\n width={barWidth}\n />\n </div>\n </div>\n )\n }\n\n return (\n <div\n key=\"barcode-item\"\n onMouseDown={(e) => field && handleMouseDown(e, field)}\n title={setValue ? 'Kéo chuột sang trái/phải để dịch chuyển lề' : undefined}\n style={{\n ...alignStyle,\n minHeight: 80,\n marginTop: 4,\n marginBottom: 4,\n width: '100%',\n justifyContent: hinge ? 'flex-end' : 'center',\n paddingLeft: offsetX > 0 ? `${offsetX}px` : undefined,\n cursor: setValue ? 'ew-resize' : 'default'\n }}\n >\n <QRCodeCanvas value={barcodeValue} size={85} />\n </div>\n )\n }\n\n const renderDynamicFields = () => {\n if (!fields || fields.length === 0) {\n return (\n <>\n <div style={{ ...styles.codeText, ...alignStyle }}>SOMI</div>\n <div style={{ ...styles.normalText, ...alignStyle }}>Áo sơ mi nam</div>\n {renderCode()}\n <div style={{ ...styles.price, ...alignStyle }}>Giá: 250.000</div>\n </>\n )\n }\n\n return fields\n .filter((f) => f.enabled)\n .map((field) => {\n if (field.type === 'barcode') {\n return renderCode(field)\n }\n\n const rawVal = field.type === 'custom' ? (field.customValue || field.label) : (effectiveSampleData[field.key] || effectiveSampleData[field.id] || field.label)\n\n const prefix = field.prefix || ''\n const suffix = field.suffix || ''\n const displayVal = `${prefix}${rawVal}${suffix}`\n\n const isBold = field.bold !== false\n const isItalic = !!field.italic\n const isUnderline = !!field.underline\n const textColor = field.color || '#111111'\n const customFontSize = field.fontSize || 13\n const offsetX = field.offsetX || 0\n\n const fieldStyle: React.CSSProperties = {\n ...styles.dynamicText,\n ...alignStyle,\n fontWeight: isBold ? 700 : 400,\n fontStyle: isItalic ? 'italic' : 'normal',\n textDecoration: isUnderline ? 'underline' : 'none',\n color: textColor,\n fontSize: `${customFontSize}px`,\n paddingLeft: offsetX > 0 ? `${offsetX}px` : undefined,\n cursor: setValue ? 'ew-resize' : 'default',\n userSelect: 'none',\n outline: activeDragId === field.id ? '1px dashed #7367f0' : 'none',\n borderRadius: '2px',\n transition: activeDragId === field.id ? 'none' : 'padding-left 0.1s ease'\n }\n\n return (\n <div\n key={field.id}\n style={fieldStyle}\n onMouseDown={(e) => handleMouseDown(e, field)}\n title={setValue ? 'Kéo chuột sang trái/phải để dịch chuyển lề' : undefined}\n >\n {displayVal}\n </div>\n )\n })\n }\n\n return (\n <Fragment>\n <div style={styles.previewBox}>\n {renderDynamicFields()}\n </div>\n </Fragment>\n )\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n previewBox: {\n width: '100%',\n maxWidth: 320,\n minHeight: 180,\n border: '1px solid #d8d6de',\n borderRadius: '4px',\n background: '#fff',\n padding: '12px 16px',\n boxSizing: 'border-box',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.06)',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n position: 'relative'\n },\n codeText: {\n fontSize: 14,\n fontWeight: 700,\n color: '#111',\n marginBottom: 2,\n lineHeight: 1.25,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n },\n normalText: {\n fontSize: 13,\n fontWeight: 500,\n color: '#333',\n lineHeight: 1.25,\n marginBottom: 4,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n },\n price: {\n fontSize: 13,\n fontWeight: 700,\n color: '#111',\n lineHeight: 1.25,\n marginTop: 4,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n },\n dynamicText: {\n fontSize: 13,\n color: '#111',\n lineHeight: 1.25,\n marginBottom: 2,\n wordBreak: 'break-word',\n whiteSpace: 'normal'\n }\n}\n\nexport default PreviewPrint\n","/* eslint-disable indent */\nimport { IPrintField, ISettingPrint, IExtraFieldOption } from '../types'\nimport {\n ArrowDown,\n ArrowUp,\n ChevronDown,\n ChevronRight,\n Menu,\n Minus,\n Plus,\n Settings,\n Trash2\n} from 'becoxy-icons'\nimport { Fragment, useState } from 'react'\nimport { Control, Controller, FieldErrors, UseFormSetValue, UseFormWatch } from 'react-hook-form'\n\nimport {\n Button,\n ButtonGroup,\n Collapse,\n DropdownItem,\n DropdownMenu,\n DropdownToggle,\n Input,\n Label,\n UncontrolledDropdown\n} from 'reactstrap'\nimport PreviewPrint from './preview-print'\n\nexport interface ISettingPrintProps {\n control: Control<ISettingPrint, any>\n watch: UseFormWatch<ISettingPrint>\n setValue: UseFormSetValue<ISettingPrint>\n errors: FieldErrors<ISettingPrint>\n availableExtraFields?: IExtraFieldOption[]\n sampleData?: Record<string, string>\n t?: (key: string) => string\n}\n\nconst AVAILABLE_EXTRA_FIELDS = [\n { id: 'unitName', key: 'unitName', label: 'Đơn vị tính', type: 'text' as const, prefix: 'ĐVT: ' },\n { id: 'origin', key: 'origin', label: 'Xuất xứ', type: 'text' as const, prefix: 'Xuất xứ: ' },\n { id: 'categoryRootName', key: 'categoryRootName', label: 'Nhóm sản phẩm', type: 'text' as const, prefix: 'Nhóm: ' },\n { id: 'specificationCode', key: 'specificationCode', label: 'Mã quy cách', type: 'text' as const, prefix: 'Quy cách: ' },\n { id: 'lotSerial', key: 'lotSerial', label: 'Số lô / Serial', type: 'text' as const, prefix: 'Lô: ' },\n { id: 'customText', key: 'custom', label: 'Văn bản tùy chỉnh', type: 'custom' as const, customValue: 'Hàng chính hãng' }\n]\n\nconst COLOR_PRESETS = [\n { label: 'Đen', value: '#000000' },\n { label: 'Đỏ', value: '#dc3545' },\n { label: 'Xanh dương', value: '#0d6efd' },\n { label: 'Xanh lá', value: '#198754' },\n { label: 'Xám', value: '#6c757d' }\n]\n\nexport const SettingPrint = (props: ISettingPrintProps) => {\n const t = props.t || ((key: string) => key)\n const { control, watch, setValue, availableExtraFields, sampleData } = props\n\n const [openPaperSection, setOpenPaperSection] = useState(true)\n const [openInfoSection, setOpenInfoSection] = useState(true)\n const [openCustomSection, setOpenCustomSection] = useState(false)\n\n const [expandedFieldId, setExpandedFieldId] = useState<string | null>(null)\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null)\n\n const fields: IPrintField[] = watch('fields') || []\n\n const handleToggleField = (index: number) => {\n const newFields = [...fields]\n newFields[index] = { ...newFields[index], enabled: !newFields[index].enabled }\n setValue('fields', newFields)\n }\n\n const handleMoveUp = (index: number) => {\n if (index <= 0) { return }\n const newFields = [...fields]\n const temp = newFields[index]\n newFields[index] = newFields[index - 1]\n newFields[index - 1] = temp\n setValue('fields', newFields)\n }\n\n const handleMoveDown = (index: number) => {\n if (index >= fields.length - 1) { return }\n const newFields = [...fields]\n const temp = newFields[index]\n newFields[index] = newFields[index + 1]\n newFields[index + 1] = temp\n setValue('fields', newFields)\n }\n\n const handleDeleteField = (index: number) => {\n const newFields = fields.filter((_, i) => i !== index)\n setValue('fields', newFields)\n }\n\n const handleAddField = (fieldTemplate: any) => {\n const exists = fields.find((f) => f.id === fieldTemplate.id)\n if (exists) {\n const newFields = fields.map((f) => (f.id === fieldTemplate.id ? { ...f, enabled: true } : f))\n setValue('fields', newFields)\n return\n }\n\n const newId = fieldTemplate.id === 'customText' ? `custom_${Date.now()}` : fieldTemplate.id\n const newField: IPrintField = {\n id: newId,\n key: fieldTemplate.key,\n label: fieldTemplate.label,\n type: fieldTemplate.type,\n enabled: true,\n bold: false,\n italic: false,\n underline: false,\n color: '#000000',\n fontSize: 13,\n offsetX: 0,\n prefix: fieldTemplate.prefix,\n customValue: fieldTemplate.customValue || 'Nội dung tùy chỉnh'\n }\n\n setValue('fields', [...fields, newField], { shouldDirty: true, shouldTouch: true })\n if (fieldTemplate.type === 'custom') {\n setExpandedFieldId(newId)\n }\n }\n\n const updateFieldStyle = (index: number, patch: Partial<IPrintField>) => {\n const newFields = [...fields]\n newFields[index] = { ...newFields[index], ...patch }\n setValue('fields', newFields, { shouldDirty: true, shouldTouch: true })\n }\n\n\n // HTML5 Drag and Drop handlers\n const handleDragStart = (index: number) => {\n setDraggedIndex(index)\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (dropIndex: number) => {\n if (draggedIndex === null || draggedIndex === dropIndex) {\n setDraggedIndex(null)\n return\n }\n\n const newFields = [...fields]\n const draggedItem = newFields[draggedIndex]\n newFields.splice(draggedIndex, 1)\n newFields.splice(dropIndex, 0, draggedItem)\n\n setValue('fields', newFields)\n setDraggedIndex(null)\n }\n\n return (\n <Fragment>\n <div className=\"p-1 setting-print-container\" style={{ fontSize: '13px' }}>\n {/* 1. Loại tem in */}\n <div className=\"mb-2\">\n <div className=\"d-flex align-items-center mb-1\">\n <span className=\"fw-bolder text-dark me-2\">{t('Loại tem in')}</span>\n <Controller\n name=\"printType\"\n control={control}\n render={({ field: { value, onChange } }) => (\n <div className=\"d-flex align-items-center\" style={{ gap: '20px' }}>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n className=\"me-50 mt-0\"\n name=\"printType\"\n checked={Number(value) === 0}\n onChange={() => onChange(0)}\n />\n <span>{t('Mã vạch')}</span>\n </Label>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n className=\"me-50 mt-0\"\n name=\"printType\"\n checked={Number(value) === 1}\n onChange={() => onChange(1)}\n />\n <span>{t('Mã QR')}</span>\n </Label>\n </div>\n )}\n />\n </div>\n </div>\n\n {/* 2. Chọn khổ giấy */}\n <div className=\"mb-2\">\n <div\n className=\"d-flex align-items-center cursor-pointer fw-bolder text-dark mb-1\"\n onClick={() => setOpenPaperSection(!openPaperSection)}\n >\n {openPaperSection ? <ChevronDown fontSize={16} className=\"me-50\" /> : <ChevronRight fontSize={16} className=\"me-50\" />}\n <span>{t('Chọn khổ giấy')}</span>\n </div>\n\n <Collapse isOpen={openPaperSection}>\n <Controller\n name=\"paperSize\"\n control={control}\n render={({ field: { value, onChange } }) => (\n <div className=\"d-flex flex-column ps-1\" style={{ gap: '8px' }}>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 1}\n onChange={() => onChange(1)}\n />\n <span>{t('Khổ giấy 2 tem (80x22mm / 3.15x0.9 inch)')}</span>\n </Label>\n\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 2}\n onChange={() => onChange(2)}\n />\n <span>{t('Khổ giấy 3 tem (105x22mm / 4.2x0.9 inch)')}</span>\n </Label>\n\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 3}\n onChange={() => onChange(3)}\n />\n <span>{t('Khổ giấy A5 - Tổng 40 tem (Tomy 108)')}</span>\n </Label>\n\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 4}\n onChange={() => onChange(4)}\n />\n <span>{t('Khổ giấy A4 - Tổng 65 tem (Tomy 145)')}</span>\n </Label>\n\n <div className=\"d-flex align-items-center\">\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer me-1\">\n <Input\n type=\"radio\"\n name=\"paperSize\"\n className=\"me-50 mt-0\"\n checked={Number(value) === 0}\n onChange={() => onChange(0)}\n />\n <span>{t('Khổ giấy tùy chọn')}</span>\n </Label>\n\n {Number(value) === 0 && (\n <div className=\"d-flex align-items-center\">\n <Controller\n name=\"stampNumber\"\n control={control}\n render={({ field: { value: stampVal, onChange: onStampChange } }) => (\n <Input\n type=\"number\"\n min={1}\n max={10}\n className=\"form-control-sm me-50 text-center\"\n style={{ width: '60px' }}\n value={stampVal ?? 3}\n onChange={(e) => onStampChange(Number(e.target.value))}\n />\n )}\n />\n <span className=\"text-muted\" style={{ fontSize: '12px' }}>{t('tem/dòng')}</span>\n </div>\n )}\n </div>\n </div>\n )}\n />\n </Collapse>\n </div>\n\n {/* 3. Chọn thông tin hiển thị (Kéo thả & Định dạng Đậm/Nghiêng/Màu/Thụt lề) */}\n <div className=\"mb-2\">\n <div\n className=\"d-flex align-items-center justify-content-between cursor-pointer fw-bolder text-dark mb-1\"\n onClick={() => setOpenInfoSection(!openInfoSection)}\n >\n <div className=\"d-flex align-items-center\">\n {openInfoSection ? <ChevronDown fontSize={16} className=\"me-50\" /> : <ChevronRight fontSize={16} className=\"me-50\" />}\n <span>{t('Thông tin hiển thị & Định dạng')}</span>\n </div>\n </div>\n\n <Collapse isOpen={openInfoSection}>\n <div className=\"ps-1 pe-1\">\n <div className=\"d-flex flex-column mb-1\" style={{ gap: '6px' }}>\n {fields.map((field, idx) => {\n const isExpanded = expandedFieldId === field.id\n const isBold = field.bold !== false\n const isItalic = !!field.italic\n const isUnderline = !!field.underline\n const currentColor = field.color || '#000000'\n const currentFontSize = field.fontSize || 13\n const currentOffset = field.offsetX || 0\n\n return (\n <div\n key={field.id}\n className=\"border rounded overflow-hidden\"\n style={{\n background: field.enabled ? '#f8f9fa' : '#ffffff',\n borderColor: isExpanded ? '#7367f0' : field.enabled ? '#d8d6de' : '#ebe9f1'\n }}\n >\n {/* Dòng chính: Kéo thả + Checkbox + Tên + Nút chức năng */}\n <div\n draggable\n onDragStart={() => handleDragStart(idx)}\n onDragOver={handleDragOver}\n onDrop={() => handleDrop(idx)}\n className=\"d-flex align-items-center justify-content-between p-50\"\n style={{\n cursor: 'grab',\n userSelect: 'none',\n opacity: draggedIndex === idx ? 0.5 : 1\n }}\n >\n <div className=\"d-flex align-items-center\" style={{ gap: '8px' }}>\n <Menu fontSize={14} className=\"text-muted\" style={{ cursor: 'grab' }} />\n <Input\n type=\"checkbox\"\n checked={field.enabled}\n onChange={() => handleToggleField(idx)}\n className=\"mt-0\"\n />\n <span\n style={{\n fontWeight: isBold ? 700 : 400,\n fontStyle: isItalic ? 'italic' : 'normal',\n textDecoration: isUnderline ? 'underline' : 'none',\n color: field.enabled ? currentColor : '#888'\n }}\n >\n {field.type === 'custom' && field.customValue ? `Tùy chỉnh: \"${field.customValue}\"` : t(field.label)}\n </span>\n {currentOffset > 0 && (\n <span className=\"badge bg-light-primary text-primary\" style={{ fontSize: '10px', padding: '2px 4px' }}>\n +{currentOffset}px\n </span>\n )}\n </div>\n\n <div className=\"d-flex align-items-center\" style={{ gap: '6px' }}>\n {/* Nút mở rộng bảng tùy chỉnh style */}\n <Button\n size=\"sm\"\n color=\"flat-primary\"\n className=\"p-0 btn-icon\"\n style={{\n width: '26px',\n height: '26px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n background: isExpanded ? '#7367f0' : '#f0f0f5',\n color: isExpanded ? '#ffffff' : '#5e5873',\n border: 'none',\n boxShadow: isExpanded ? '0 2px 6px rgba(115, 103, 240, 0.4)' : 'none',\n transition: 'all 0.15s ease'\n }}\n onClick={(e) => {\n e.stopPropagation()\n setExpandedFieldId(isExpanded ? null : field.id)\n }}\n title={t('Tùy chỉnh định dạng & Lùi lề')}\n >\n <Settings fontSize={13} />\n </Button>\n\n <Button\n size=\"sm\"\n color=\"flat-secondary\"\n className=\"p-0 btn-icon\"\n style={{\n width: '26px',\n height: '26px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n background: '#f0f0f5',\n border: 'none'\n }}\n disabled={idx === 0}\n onClick={(e) => {\n e.stopPropagation()\n handleMoveUp(idx)\n }}\n title={t('Di chuyển lên')}\n >\n <ArrowUp fontSize={13} />\n </Button>\n\n <Button\n size=\"sm\"\n color=\"flat-secondary\"\n className=\"p-0 btn-icon\"\n style={{\n width: '26px',\n height: '26px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n background: '#f0f0f5',\n border: 'none'\n }}\n disabled={idx === fields.length - 1}\n onClick={(e) => {\n e.stopPropagation()\n handleMoveDown(idx)\n }}\n title={t('Di chuyển xuống')}\n >\n <ArrowDown fontSize={13} />\n </Button>\n\n {field.type === 'custom' || !['companyName', 'productCode', 'productName', 'barcode', 'unitPrice'].includes(field.id) ? (\n <Button\n size=\"sm\"\n color=\"flat-danger\"\n className=\"p-0 btn-icon\"\n style={{\n width: '26px',\n height: '26px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '6px',\n background: '#fce8e6',\n color: '#ea5455',\n border: 'none'\n }}\n onClick={(e) => {\n e.stopPropagation()\n handleDeleteField(idx)\n }}\n title={t('Xóa trường')}\n >\n <Trash2 fontSize={13} />\n </Button>\n ) : null}\n </div>\n </div>\n\n {/* Bảng con: Chỉnh In đậm, In nghiêng, Gạch chân, Màu sắc, Cỡ chữ, Thụt lề */}\n <Collapse isOpen={isExpanded}>\n <div className=\"p-1 border-top bg-white\" style={{ fontSize: '12px' }}>\n {field.type === 'custom' && (\n <div className=\"mb-1\">\n <span className=\"text-muted d-block mb-25 fw-bolder\">{t('Nội dung văn bản')}:</span>\n <Input\n type=\"text\"\n className=\"form-control-sm\"\n placeholder={t('Nhập nội dung (vd: Hotline: 1900..., Hàng chính hãng, v.v.)')}\n value={field.customValue || ''}\n onChange={(e) => updateFieldStyle(idx, { customValue: e.target.value })}\n />\n </div>\n )}\n\n {field.type !== 'barcode' && (\n <>\n {/* 1. Định dạng kiểu chữ */}\n <div className=\"d-flex align-items-center justify-content-between mb-1\">\n <span className=\"text-muted\">{t('Kiểu chữ')}:</span>\n <ButtonGroup size=\"sm\">\n <Button\n color={isBold ? 'primary' : 'outline-secondary'}\n className=\"px-50 py-25 fw-bolder\"\n onClick={() => updateFieldStyle(idx, { bold: !isBold })}\n title={t('In đậm')}\n >\n B\n </Button>\n <Button\n color={isItalic ? 'primary' : 'outline-secondary'}\n className=\"px-50 py-25 fst-italic\"\n onClick={() => updateFieldStyle(idx, { italic: !isItalic })}\n title={t('In nghiêng')}\n >\n I\n </Button>\n <Button\n color={isUnderline ? 'primary' : 'outline-secondary'}\n className=\"px-50 py-25 text-decoration-underline\"\n onClick={() => updateFieldStyle(idx, { underline: !isUnderline })}\n title={t('Gạch chân')}\n >\n U\n </Button>\n </ButtonGroup>\n </div>\n\n {/* 2. Cỡ chữ */}\n <div className=\"d-flex align-items-center justify-content-between mb-1\">\n <span className=\"text-muted\">{t('Cỡ chữ')}:</span>\n <div className=\"d-flex align-items-center\" style={{ gap: '4px' }}>\n <Button\n size=\"sm\"\n color=\"outline-secondary\"\n className=\"p-0 px-25 btn-icon\"\n onClick={() => updateFieldStyle(idx, { fontSize: Math.max(8, currentFontSize - 1) })}\n >\n <Minus fontSize={12} />\n </Button>\n <span className=\"fw-bolder px-50 text-center\" style={{ minWidth: '35px' }}>\n {currentFontSize}px\n </span>\n <Button\n size=\"sm\"\n color=\"outline-secondary\"\n className=\"p-0 px-25 btn-icon\"\n onClick={() => updateFieldStyle(idx, { fontSize: Math.min(24, currentFontSize + 1) })}\n >\n <Plus fontSize={12} />\n </Button>\n </div>\n </div>\n\n {/* 3. Màu chữ */}\n <div className=\"d-flex align-items-center justify-content-between mb-1\">\n <span className=\"text-muted\">{t('Màu chữ')}:</span>\n <div className=\"d-flex align-items-center\" style={{ gap: '6px' }}>\n {COLOR_PRESETS.map((c) => (\n <div\n key={c.value}\n onClick={(e) => {\n e.stopPropagation()\n updateFieldStyle(idx, { color: c.value })\n }}\n style={{\n width: '18px',\n height: '18px',\n borderRadius: '50%',\n background: c.value,\n cursor: 'pointer',\n border: currentColor === c.value ? '2px solid #7367f0' : '1px solid #ccc',\n boxShadow: currentColor === c.value ? '0 0 4px #7367f0' : 'none'\n }}\n title={c.label}\n />\n ))}\n <Input\n type=\"color\"\n value={currentColor}\n onChange={(e) => updateFieldStyle(idx, { color: e.target.value })}\n style={{ width: '24px', height: '22px', padding: 0, border: 'none', cursor: 'pointer' }}\n title={t('Màu tự chọn')}\n />\n </div>\n </div>\n </>\n )}\n\n {/* 4. Thụt lề / Lùi vào (offsetX) */}\n <div className=\"d-flex flex-column mt-50\">\n <div className=\"d-flex align-items-center justify-content-between mb-25\">\n <span className=\"text-muted\">{t('Lùi vào lề trái (Thụt lề)')}:</span>\n <span className=\"fw-bolder text-primary\">{currentOffset}px</span>\n </div>\n <div className=\"d-flex align-items-center\" style={{ gap: '8px' }}>\n <Input\n type=\"range\"\n min={0}\n max={120}\n step={2}\n value={currentOffset}\n onChange={(e) => updateFieldStyle(idx, { offsetX: Number(e.target.value) })}\n className=\"form-range flex-grow-1\"\n />\n {currentOffset > 0 && (\n <Button\n size=\"sm\"\n color=\"flat-secondary\"\n className=\"p-0 px-25 text-muted\"\n style={{ fontSize: '11px' }}\n onClick={() => updateFieldStyle(idx, { offsetX: 0 })}\n title={t('Đặt lại về 0')}\n >\n {t('Reset')}\n </Button>\n )}\n </div>\n <small className=\"text-muted\" style={{ fontSize: '11px' }}>\n 💡 {t('Bạn cũng có thể click & kéo chuột trực tiếp trên khung xem trước bên dưới.')}\n </small>\n </div>\n </div>\n </Collapse>\n </div>\n )\n })}\n </div>\n\n {/* Nút thêm trường thông tin */}\n <div className=\"d-flex justify-content-start mb-1\">\n <UncontrolledDropdown>\n <DropdownToggle color=\"primary\" outline size=\"sm\" className=\"d-flex align-items-center\">\n <Plus fontSize={14} className=\"me-50\" />\n {t('Thêm trường thông tin')}\n </DropdownToggle>\n <DropdownMenu>\n {(availableExtraFields || AVAILABLE_EXTRA_FIELDS).map((item) => (\n <DropdownItem\n key={item.id}\n onClick={() => handleAddField(item)}\n >\n {t(item.label)}\n </DropdownItem>\n ))}\n </DropdownMenu>\n </UncontrolledDropdown>\n </div>\n </div>\n </Collapse>\n </div>\n\n {/* 4. Tùy chỉnh giấy in */}\n <div className=\"mb-2\">\n <div\n className=\"d-flex align-items-center cursor-pointer fw-bolder text-dark mb-1\"\n onClick={() => setOpenCustomSection(!openCustomSection)}\n >\n {openCustomSection ? <ChevronDown fontSize={16} className=\"me-50\" /> : <ChevronRight fontSize={16} className=\"me-50\" />}\n <span>{t('Tùy chỉnh giấy in')}</span>\n </div>\n\n <Collapse isOpen={openCustomSection}>\n <div className=\"ps-1\">\n <div className=\"mb-1\">\n <span className=\"text-muted d-block mb-50\" style={{ fontSize: '12px' }}>{t('Căn lề nội dung tem')}</span>\n <Controller\n name=\"hinge\"\n control={control}\n render={({ field: { value, onChange } }) => (\n <div className=\"d-flex align-items-center\" style={{ gap: '20px' }}>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"hinge\"\n className=\"me-50 mt-0\"\n checked={!value}\n onChange={() => onChange(false)}\n />\n <span>{t('Căn trái')}</span>\n </Label>\n <Label className=\"d-flex align-items-center mb-0 cursor-pointer\">\n <Input\n type=\"radio\"\n name=\"hinge\"\n className=\"me-50 mt-0\"\n checked={!!value}\n onChange={() => onChange(true)}\n />\n <span>{t('Căn phải')}</span>\n </Label>\n </div>\n )}\n />\n </div>\n </div>\n </Collapse>\n </div>\n\n {/* 5. Xem trước mẫu in */}\n <div className=\"mb-1\">\n <div className=\"fw-bolder text-dark mb-1 d-flex align-items-center justify-content-between\">\n <span>{t('Xem trước mẫu in')}</span>\n <small className=\"text-muted fw-normal\" style={{ fontSize: '11px' }}>\n {t('(Kéo chuột trên dòng để dịch lề)')}\n </small>\n </div>\n <div className=\"d-flex justify-content-center\">\n <PreviewPrint watch={watch} setValue={setValue} sampleData={sampleData} />\n </div>\n </div>\n </div>\n </Fragment>\n )\n}\n\nexport default SettingPrint","/* eslint-disable indent */\nimport * as Icon from 'becoxy-icons'\nimport { FC, useEffect, useRef, useState } from 'react'\nimport { Badge, Button, ButtonGroup, Modal, ModalBody, ModalFooter } from 'reactstrap'\nimport { generatePrintDocument } from '../helpers/print-helper'\nimport { IBarcodePrintItem, ISettingPrint } from '../types'\n\ninterface IFPropsModalPreview {\n isOpen: boolean\n toggle: () => void\n settings: ISettingPrint\n items: IBarcodePrintItem[]\n onPrint?: () => void\n t?: (key: string) => string\n}\n\nexport const ModalPreviewPrint: FC<IFPropsModalPreview> = ({\n isOpen,\n toggle,\n settings,\n items,\n onPrint,\n t = (s: string) => s\n}) => {\n const iframeRef = useRef<HTMLIFrameElement>(null)\n\n const [zoom, setZoom] = useState(100)\n const [isSingleSample, setIsSingleSample] = useState(false)\n\n const { html, totalStamps, paperLabel, uniqueProducts } = generatePrintDocument(\n settings,\n items,\n isSingleSample,\n true\n )\n\n const updateIframeZoom = (zoomLevel: number) => {\n try {\n const doc = iframeRef.current?.contentDocument\n if (doc && doc.body) {\n ;(doc.body.style as any).zoom = `${zoomLevel}%`\n }\n } catch {\n // ignore\n }\n }\n\n useEffect(() => {\n updateIframeZoom(zoom)\n }, [zoom, html])\n\n const handleZoomIn = () => {\n setZoom((prev) => Math.min(200, prev + 10))\n }\n\n const handleZoomOut = () => {\n setZoom((prev) => Math.max(40, prev - 10))\n }\n\n const handleZoomReset = () => {\n setZoom(100)\n }\n\n return (\n <Modal\n isOpen={isOpen}\n toggle={toggle}\n className=\"modal-dialog-centered modal-xl\"\n contentClassName=\"p-0 overflow-hidden\"\n style={{ maxWidth: '92vw', width: '92vw', margin: 'auto' }}\n >\n <div className=\"modal-header d-flex align-items-center justify-content-between px-1_5 py-1 mb-0 border-bottom bg-white\">\n <div className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={18} className=\"text-primary me-50\" />\n <h5 className=\"modal-title m-0 fw-bolder text-dark\">{t('Xem trước bản in mã vạch')}</h5>\n </div>\n <div className=\"cursor-pointer\" onClick={toggle}>\n <Icon.X fontSize={20} />\n </div>\n </div>\n\n <div\n className=\"d-flex flex-wrap align-items-center justify-content-between px-1_5 py-75 border-bottom\"\n style={{ background: '#f8f9fa', gap: '8px' }}\n >\n <div className=\"d-flex flex-wrap align-items-center\" style={{ gap: '8px' }}>\n <Badge color=\"light-primary\" className=\"d-flex align-items-center px-1 py-50\">\n <span className=\"fw-normal me-50\">{t('Khổ giấy')}:</span>\n <span className=\"fw-bolder\">{paperLabel}</span>\n </Badge>\n\n <Badge color=\"light-success\" className=\"d-flex align-items-center px-1 py-50\">\n <span className=\"fw-normal me-50\">{t('Tổng số tem')}:</span>\n <span className=\"fw-bolder\">{totalStamps} tem</span>\n </Badge>\n\n <Badge color=\"light-secondary\" className=\"d-flex align-items-center px-1 py-50\">\n <span className=\"fw-normal me-50\">{t('Mặt hàng')}:</span>\n <span className=\"fw-bolder\">{uniqueProducts} sản phẩm</span>\n </Badge>\n </div>\n\n <div className=\"d-flex align-items-center\" style={{ gap: '10px' }}>\n <ButtonGroup size=\"sm\">\n <Button\n color={!isSingleSample ? 'primary' : 'outline-secondary'}\n onClick={() => setIsSingleSample(false)}\n >\n {t('Tất cả tem')} ({totalStamps})\n </Button>\n <Button\n color={isSingleSample ? 'primary' : 'outline-secondary'}\n onClick={() => setIsSingleSample(true)}\n >\n {t('1 tem phóng to')}\n </Button>\n </ButtonGroup>\n\n <div className=\"d-flex align-items-center border rounded bg-white px-50\" style={{ height: '31px' }}>\n <Button\n color=\"flat-secondary\"\n className=\"btn-icon p-0 me-50\"\n style={{ width: '22px', height: '22px' }}\n onClick={handleZoomOut}\n title={t('Thu nhỏ')}\n >\n <Icon.Minus fontSize={14} />\n </Button>\n\n <span\n className=\"fw-bold cursor-pointer text-center text-dark\"\n style={{ minWidth: '46px', fontSize: '12px' }}\n onClick={handleZoomReset}\n title={t('Đặt lại 100%')}\n >\n {zoom}%\n </span>\n\n <Button\n color=\"flat-secondary\"\n className=\"btn-icon p-0 ms-50\"\n style={{ width: '22px', height: '22px' }}\n onClick={handleZoomIn}\n title={t('Phóng to')}\n >\n <Icon.Plus fontSize={14} />\n </Button>\n </div>\n </div>\n </div>\n\n <ModalBody className=\"p-0 position-relative\" style={{ background: '#e9ecef' }}>\n <div style={{ height: '74vh', minHeight: '540px', width: '100%', overflow: 'hidden' }}>\n <iframe\n ref={iframeRef}\n title=\"barcode-print-preview\"\n srcDoc={html}\n onLoad={() => updateIframeZoom(zoom)}\n style={{\n width: '100%',\n height: '100%',\n border: 'none',\n display: 'block'\n }}\n />\n </div>\n </ModalBody>\n\n <ModalFooter className=\"d-flex justify-content-end align-items-center py-1 px-2 border-top bg-white\" style={{ gap: '10px' }}>\n {onPrint && (\n <Button\n color=\"primary\"\n onClick={onPrint}\n className=\"d-flex align-items-center\"\n >\n <Icon.Printer fontSize={14} className=\"me-50\" />\n {t('In')}\n </Button>\n )}\n <Button color=\"secondary\" outline onClick={toggle}>\n {t('Close')}\n </Button>\n </ModalFooter>\n </Modal>\n )\n}\n","/* eslint-disable indent */\nimport * as Icon from 'becoxy-icons'\nimport { FC, Fragment, ReactNode, useEffect, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { Button, Col, Modal, ModalBody, Row } from 'reactstrap'\nimport Swal from 'sweetalert2'\nimport withReactContent from 'sweetalert2-react-content'\nimport { executePrint } from '../helpers/print-helper'\nimport { IBarcodePrintItem, IExtraFieldOption, IPrintField, ISettingPrint } from '../types'\nimport { ModalPreviewPrint } from './modal-preview-print'\nimport { SettingPrint } from './setting-print'\n\nconst MySwal = withReactContent(Swal)\n\nexport interface IModalBarcodePrintProps {\n isOpen: boolean\n toggle: () => void\n title?: string\n dataSelected: IBarcodePrintItem[]\n setDataSelected: (items: IBarcodePrintItem[]) => void\n dataItem?: IBarcodePrintItem | null\n initialFields?: IPrintField[]\n defaultFields?: IPrintField[]\n availableExtraFields?: IExtraFieldOption[]\n sampleData?: Record<string, string>\n renderTable?: (props: {\n selectedItems: IBarcodePrintItem[]\n setSelectedItems: (items: IBarcodePrintItem[]) => void\n }) => ReactNode\n children?: ReactNode\n windowSize?: any\n t?: (key: string) => string\n onPrintSuccess?: () => void\n notifyError?: (message: string) => void\n notifySuccess?: (message: string) => void\n}\n\nconst DEFAULT_PRINT_FIELDS: IPrintField[] = [\n { id: 'companyName', key: 'companyName', label: 'Tên công ty', type: 'text', enabled: false, bold: true },\n { id: 'productCode', key: 'code', label: 'Mã hàng', type: 'text', enabled: true, bold: true },\n { id: 'productName', key: 'name', label: 'Tên hàng', type: 'text', enabled: true, bold: false },\n { id: 'barcode', key: 'code', label: 'Mã vạch / Mã QR', type: 'barcode', enabled: true },\n { id: 'unitPrice', key: 'price', label: 'Giá bán', type: 'text', enabled: true, bold: true, prefix: 'Giá: ', suffix: '' }\n]\n\nexport const ModalBarcodePrint: FC<IModalBarcodePrintProps> = ({\n isOpen,\n toggle,\n title = 'In mã vạch / mã QR',\n dataSelected,\n setDataSelected,\n dataItem,\n initialFields,\n defaultFields = DEFAULT_PRINT_FIELDS,\n availableExtraFields,\n sampleData,\n renderTable,\n children,\n windowSize,\n t = (s: string) => s,\n onPrintSuccess,\n notifyError = (msg: string) => alert(msg),\n notifySuccess = (msg: string) => console.log(msg)\n}) => {\n const effectiveDefaultFields: IPrintField[] = initialFields || defaultFields\n\n const defaultValues: ISettingPrint = {\n printType: 0,\n paperSize: 2, // 3 tem (105x22mm)\n stampNumber: 3,\n productCode: true,\n productName: true,\n companyName: false,\n unitPrice: true,\n printSample: 3,\n hinge: false,\n fields: effectiveDefaultFields\n }\n\n const [openPreviewModal, setOpenPreviewModal] = useState(false)\n\n const { control, watch, setValue, reset, getValues, formState: { errors } } = useForm<ISettingPrint>({\n mode: 'onChange',\n defaultValues\n })\n\n useEffect(() => {\n if (initialFields && initialFields.length > 0) {\n setValue('fields', initialFields)\n }\n }, [initialFields])\n\n const handleTestPrint = () => {\n const settings = getValues()\n const targetItems = dataSelected.length > 0 ? dataSelected : (dataItem ? [dataItem] : [])\n executePrint(settings, targetItems, true)\n }\n\n const handleOpenPreview = () => {\n const targetItems = dataSelected.length > 0 ? dataSelected : (dataItem ? [dataItem] : [])\n if (targetItems.length === 0) {\n notifyError(t('Vui lòng chọn ít nhất một sản phẩm cần xem trước!'))\n return\n }\n setOpenPreviewModal(true)\n }\n\n const handleRealPrint = () => {\n if (dataSelected.length === 0 && !dataItem) {\n notifyError(t('Vui lòng chọn ít nhất một sản phẩm cần in mã vạch!'))\n return\n }\n const settings = getValues()\n const itemsToPrint = dataSelected.length > 0 ? dataSelected : [dataItem!]\n executePrint(settings, itemsToPrint, false)\n if (onPrintSuccess) {\n onPrintSuccess()\n }\n }\n\n const handleResetDefault = () => {\n MySwal.fire({\n title: t('Xác nhận'),\n text: t('Bạn có chắc chắn muốn thiết lập lại cấu hình in về mặc định không?'),\n icon: 'question',\n showCancelButton: true,\n confirmButtonText: t('Xác nhận'),\n cancelButtonText: t('Hủy'),\n customClass: {\n confirmButton: 'btn btn-primary',\n cancelButton: 'btn btn-secondary ms-1'\n },\n buttonsStyling: false\n }).then((result) => {\n if (result.isConfirmed || result.value) {\n reset(defaultValues)\n notifySuccess(t('Đã thiết lập lại cấu hình mặc định!'))\n }\n })\n }\n\n const renderFooterButtons = () => {\n return (\n <div className=\"d-flex align-items-center\" style={{ gap: '10px' }}>\n <Button color=\"primary\" onClick={handleResetDefault} className=\"d-flex align-items-center text-white\">\n <Icon.OutlineReply fontSize={14} className=\"me-50\" />\n {t('Thiết lập lại')}\n </Button>\n <Button color=\"info\" outline onClick={handleOpenPreview} className=\"d-flex align-items-center\">\n <Icon.Eye fontSize={14} className=\"me-50\" />\n {t('Xem trước')}\n </Button>\n <Button color=\"secondary\" outline onClick={handleTestPrint} className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={14} className=\"me-50\" />\n {t('In thử')}\n </Button>\n <Button color=\"primary\" onClick={handleRealPrint} className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={14} className=\"me-50\" />\n {t('In')}\n </Button>\n <Button color=\"secondary\" onClick={toggle} outline>\n {t('Close')}\n </Button>\n </div>\n )\n }\n\n return (\n <Fragment>\n <Modal\n isOpen={isOpen}\n toggle={toggle}\n className=\"modal-dialog-centered modal-fullscreen\"\n contentClassName=\"p-0 d-flex flex-column\"\n style={{ height: '100vh', maxHeight: '100vh' }}\n >\n <div className=\"modal-header d-flex align-items-center justify-content-between p-1 mb-0 border-bottom bg-white flex-shrink-0\">\n <div className=\"d-flex align-items-center\">\n <Icon.Printer fontSize={18} className=\"text-primary me-50\" />\n <h5 className=\"modal-title m-0 fw-bolder text-dark\">{t(title)}</h5>\n </div>\n <div className=\"cursor-pointer\" onClick={toggle}>\n <Icon.X fontSize={20} />\n </div>\n </div>\n\n <ModalBody className=\"p-1 flex-grow-1 overflow-hidden\" style={{ background: '#f8f9fa' }}>\n <Row className=\"g-1 h-100\">\n {/* Cột 1: Tùy chỉnh in (4 cột) */}\n <Col lg={4} md={12} xs={12} className=\"h-100 overflow-hidden\">\n <div\n className=\"box d-flex flex-column h-100 p-1 border rounded\"\n style={{ background: '#fff' }}\n >\n <h5 className=\"m-0 fw-bolder mb-1 pb-50 border-bottom flex-shrink-0\">{t('Tùy chỉnh in')}</h5>\n <div className=\"flex-grow-1 overflow-auto pe-50\">\n <SettingPrint\n control={control}\n watch={watch}\n setValue={setValue}\n errors={errors}\n availableExtraFields={availableExtraFields}\n sampleData={sampleData}\n t={t}\n />\n </div>\n </div>\n </Col>\n\n {/* Cột 2: Bảng chọn dữ liệu (8 cột) */}\n <Col lg={8} md={12} xs={12} className=\"h-100 overflow-hidden\">\n <div\n className=\"box d-flex flex-column h-100 p-1 border rounded\"\n style={{ background: '#fff' }}\n >\n <h5 className=\"m-0 fw-bolder mb-1 pb-50 border-bottom flex-shrink-0\">{t('Danh sách cần in mã vạch')}</h5>\n <div className=\"mt-50 flex-grow-1 overflow-hidden d-flex flex-column\">\n {renderTable\n ? renderTable({\n selectedItems: dataSelected,\n setSelectedItems: setDataSelected\n })\n : children}\n </div>\n </div>\n </Col>\n </Row>\n </ModalBody>\n\n <div\n className=\"d-flex justify-content-end p-1 border-top flex-shrink-0\"\n style={{ boxShadow: '0 4px 24px 0 rgb(34 41 47 / 10%)', background: '#fff' }}\n >\n {renderFooterButtons()}\n </div>\n </Modal>\n\n <ModalPreviewPrint\n isOpen={openPreviewModal}\n toggle={() => setOpenPreviewModal(false)}\n settings={getValues()}\n items={dataSelected.length > 0 ? dataSelected : (dataItem ? [dataItem] : [])}\n onPrint={handleRealPrint}\n t={t}\n />\n </Fragment>\n )\n}\n"],"mappings":"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","names":["qrcode","JsBarcode","_a","_a","Barcode","import_react","import_jsx_runtime","import_react","import_reactstrap","import_jsx_runtime","Icon","import_react","import_react_hook_form","import_reactstrap","import_jsx_runtime","withReactContent","Swal"]}