PageSourceSearch

https://carregamento3bs.lovable.app/assets/EtiquetasEstoquePage-DAVvlAXA.js

js carregamento3bs.lovable.app collected 2026-10-03 05:37:16 UTC 20,341 bytes, 139 lines download raw bytes

1import{u as B,r as k,j as e}from"./react-vendor-BorBU4Bs.js";import{a as z}from"./query-vendor-dlntIC_S.js";import{b as K,B as w,A as W,cd as O,K as F,an as U,ao as M,dv as G,M as Q,dV as T,n as J,P as X,o as L,N as Y,O as Z,Q as H,U as q,V as ee,s as E,D as te,i as ae,j as se,k as oe,L as S,I as y,J as ie,W as _,T as le}from"./index-DkhxOMdR.js";import{u as ne}from"./useLabelConfig-B0Or7kgL.js";import{g as R,e as r,f as $,b as re}from"./labelTemplate-DcdOT5Ix.js";import"./radix-vendor-CazrR58L.js";import"./charts-vendor-BxJanGhU.js";import"./supabase-vendor-BxTHC7hl.js";import"./xlsx-vendor-DOnNs5_d.js";import"./qr-vendor-Ca1-Dxvv.js";function de(t,s,i){const x=t.qrPayload&&t.qrPayload.length>0?t.qrPayload:`${s}/rastreabilidade?lote=${encodeURIComponent(t.lote||"")}&codigo=${encodeURIComponent(t.codigo||"")}`,d=re(x,600),n=t.emissao||new Date().toISOString().slice(0,10);return i?`
2  <div class="label compact">
3    <div class="c-qr">
4      <img src="${d}" alt="QR" />
5      <div class="c-cod">${r(t.codigo||"—")}</div>
6    </div>
7    <div class="c-body">
8      <div class="c-nome">${r(t.nome||"—")}</div>
9      <div class="c-grid">
10        <span><b>Lote:</b> ${r(t.lote||"—")}</span>
11        <span><b>Peso:</b> ${t.peso?r(`${t.peso} kg`):"—"}</span>
12        <span><b>Val.:</b> ${r($(t.validade))}</span>
13        <span><b>Emis.:</b> ${r($(n))}</span>
14        ${t.paletTotal?`<span><b>Palet:</b> ${r(String(t.paletIndex??1))} de ${r(String(t.paletTotal))}</span>`:""}
15        ${t.unidadesPorPalet?`<span><b>Qtd:</b> ${r(String(t.unidadesPorPalet))}</span>`:""}
16        ${t.ordem?`<span><b>OR:</b> ${r(t.ordem)}</span>`:""}
17        ${t.cliente?`<span class="c-full"><b>Cliente:</b> ${r(t.cliente)}</span>`:""}
18      </div>
19    </div>
20  </div>`:`
21  <div class="label amostra">
22    <header class="hd">
23      <div class="hd-eyebrow">CONTROLE DE ESTOQUE</div>
24      <div class="hd-title">ETIQUETA DE ESTOQUE</div>
25    </header>
26
27    <section class="id-block">
28      <div class="id-eyebrow">CÓDIGO DO PRODUTO</div>
29      <div class="id-code">${r(t.codigo||"—")}</div>
30    </section>
31
32    <section class="qr-block">
33      <div class="qr-frame">
34        <img src="${d}" alt="QR" />
35      </div>
36      <div class="qr-hint">Escaneie para ver a rastreabilidade</div>
37    </section>
38
39    <section class="info-grid">
40      <div class="info-cell info-full">
41        <div class="info-label">Produto</div>
42        <div class="info-value">${r(t.nome||"—")}</div>
43      </div>
44      ${t.paletTotal?`<div class="info-cell">
45        <div class="info-label">Palet</div>
46        <div class="info-value">${r(String(t.paletIndex??1))} de ${r(String(t.paletTotal))}</div>
47      </div>
48      <div class="info-cell">
49        <div class="info-label">Qtd. no palet</div>
50        <div class="info-value">${t.unidadesPorPalet?r(String(t.unidadesPorPalet)):"—"}</div>
51      </div>`:""}
52      ${t.ordem?`<div class="info-cell">
53        <div class="info-label">Recebimento</div>
54        <div class="info-value">${r(t.ordem)}</div>
55      </div>
56      <div class="info-cell">
57        <div class="info-label">Cliente</div>
58        <div class="info-value">${r(t.cliente||"—")}</div>
59      </div>`:""}
60      <div class="info-cell">
61        <div class="info-label">Lote</div>
62        <div class="info-value">${r(t.lote||"—")}</div>
63      </div>
64      <div class="info-cell">
65        <div class="info-label">Peso</div>
66        <div class="info-value">${t.peso?r(`${t.peso} kg`):"—"}</div>
67      </div>
68      <div class="info-cell">
69        <div class="info-label">Validade</div>
70        <div class="info-value">${r($(t.validade))}</div>
71      </div>
72      <div class="info-cell">
73        <div class="info-label">Emissão</div>
74        <div class="info-value">${r($(n))}</div>
75      </div>
76    </section>
77
78    <footer class="ft">
79      <div class="ft-cap">
80        <span class="ft-cap-label">Emissão</span>
81        <span class="ft-cap-value">${r($(n))}</span>
82      </div>
83      <div class="ft-brand">3BS · Estoque</div>
84    </footer>
85  </div>`}function ce(t){const s=Number.isFinite(t.margemEsquerda)?t.margemEsquerda:2,i=Number.isFinite(t.margemDireita)?t.margemDireita:2,x=Number.isFinite(t.margemSuperior)?t.margemSuperior:2,d=Number.isFinite(t.margemInferior)?t.margemInferior:2,n=Number(t.largura)>20?Number(t.largura):100,l=Number(t.altura)>20?Number(t.altura):150,f=n-s-i,h=l-x-d,b=Math.max(14,Math.min(h-8,28));return`
86  @page { size: ${n}mm ${l}mm; margin: ${x}mm ${i}mm ${d}mm ${s}mm; }
87  * { box-sizing: border-box; margin: 0; padding: 0; }
88  html, body { font-family: 'Segoe UI', 'Helvetica Neue', Arial, sans-serif; color: #000; background: #fff; }
89  body { display: flex; flex-direction: column; align-items: center; }
90  .label { width: ${f}mm; height: ${h}mm; overflow: hidden; page-break-after: always; }
91  .label:last-child { page-break-after: auto; }
92  .label.compact {
93    display: flex; align-items: stretch; gap: 2mm;
94    border: 1px solid #000; border-radius: 1.5mm; padding: 1.5mm 2mm;
95  }
96  .c-qr { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.6mm; flex: 0 0 auto; }
97  .c-qr img { width: ${b}mm; height: ${b}mm; display: block; image-rendering: pixelated; }
98  .c-cod { font-size: 8pt; font-weight: 800; letter-spacing: 0.3px; text-align: center; word-break: break-all; }
99  .c-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 0.8mm; }
100  .c-nome { font-size: 9pt; font-weight: 800; line-height: 1.1; text-transform: uppercase;
101    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
102  .c-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.4mm 1.5mm; font-size: 7pt; line-height: 1.2; }
103  .c-grid span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
104  .c-grid b { font-weight: 700; }
105  .c-grid .c-full { grid-column: 1 / -1; }
106  .label.amostra {
107    margin: 0 auto; padding: 2.5mm 3.5mm 2mm;
108    display: flex; flex-direction: column; align-items: stretch; gap: 1.8mm;
109  }
110  .hd { text-align: center; border-bottom: 1.5px solid #000; padding-bottom: 1mm; }
111  .hd-eyebrow { font-size: 6pt; font-weight: 600; letter-spacing: 2.5px; color: #555; text-transform: uppercase; }
112  .hd-title { margin-top: 0.4mm; font-size: 11pt; font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; }
113  .id-block { background: #000; color: #fff; border-radius: 1.5mm; padding: 1.6mm 2.5mm; text-align: center; }
114  .id-eyebrow { font-size: 6pt; font-weight: 700; letter-spacing: 2px; opacity: 0.8; text-transform: uppercase; }
115  .id-code { margin-top: 0.5mm; font-size: 17pt; font-weight: 800; line-height: 1; letter-spacing: 0.5px; word-break: break-all; }
116  .qr-block { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.8mm; flex: 0 0 auto; }
117  .qr-frame { padding: 1.2mm; border: 1px solid #000; border-radius: 1.5mm; background: #fff; display: flex; align-items: center; justify-content: center; }
118  .qr-frame img { width: 32mm; height: 32mm; display: block; image-rendering: pixelated; }
119  .qr-hint { font-size: 6.5pt; font-style: italic; color: #333; text-align: center; }
120  .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.2mm; }
121  .info-cell { border: 1px solid #000; border-radius: 1.2mm; padding: 1mm 1.6mm; min-height: 7mm; display: flex; flex-direction: column; justify-content: center; }
122  .info-cell.info-full { grid-column: 1 / -1; }
123  .info-label { font-size: 5.8pt; font-weight: 700; letter-spacing: 1px; color: #555; text-transform: uppercase; margin-bottom: 0.2mm; }
124  .info-value { font-size: 8pt; font-weight: 700; line-height: 1.1; word-break: break-word; }
125  .ft { margin-top: auto; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid #000; padding-top: 1mm; }
126  .ft-cap { display: flex; align-items: baseline; gap: 1.2mm; }
127  .ft-cap-label { font-size: 6pt; font-weight: 700; letter-spacing: 1px; color: #555; text-transform: uppercase; }
128  .ft-cap-value { font-size: 8pt; font-weight: 800; }
129  .ft-brand { font-size: 6pt; font-weight: 700; letter-spacing: 1.2px; color: #555; text-transform: uppercase; }
130  @media print { body { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }
131  `}function me(t,s,i){return`<!doctype html><html><head><meta charset="utf-8"><title>${r(t)}</title>
132<style>${ce(s)}</style></head>
133<body>
134  ${i}
135  <script>
136    window.addEventListener('load', () => { setTimeout(() => { window.print(); }, 350); });
137  <\/script>
138</body></html>`}function ue(t){const s=document.createElement("iframe");s.setAttribute("aria-hidden","true"),s.style.position="fixed",s.style.right="0",s.style.bottom="0",s.style.width="0",s.style.height="0",s.style.border="0",s.srcdoc=t,
138s.onload=()=>{try{const i=s.contentWindow;i&&(i.focus(),i.print())}catch{}setTimeout(()=>{try{s.remove()}catch{}},6e4)},document.body.appendChild(s)}function A(t,s){if(t.length===0)return;const i=R(),d=(Number(s.altura)>20?Number(s.altura):150)<110,n=t.map(h=>de(h,i,d)).join(`
139`),l=me(`Etiquetas de Estoque (${t.length})`,s,n),f=window.open("","_blank","width=520,height=780");if(f){f.document.write(l),f.document.close();return}ue(l)}const V=()=>({id:crypto.randomUUID(),codigo:"",nome:"",validade:"",lote:"",peso:"",copias:1});function pe({ordem:t,onClose:s,onPrint:i}){const[x,d]=k.useState("1"),[n,l]=k.useState(""),[f,h]=k.useState(0),{data:b=[]}=z({queryKey:["etiquetas-estoque:itens-or",t.id],queryFn:async()=>{const{data:u,error:v}=await E.from("recebimento_conferencia_itens").select("cod_produto, produto, lote, data_validade, peso_unitario, peso_total, quantidade").eq("ordem_recebimento_id",t.id);if(v)throw v;const I=u??[],N=new Map;return I.forEach(g=>{const D=`${g.cod_produto??""}|${g.lote??""}|${g.data_validade??""}`,P=N.get(D);P?(P.quantidade=(P.quantidade??0)+(Number(g.quantidade)||0),P.peso_total=(P.peso_total??0)+(Number(g.peso_total)||0)):N.set(D,{cod_produto:g.cod_produto??null,produto:g.produto??null,lote:g.lote??null,data_validade:g.data_validade??null,peso_unitario:g.peso_unitario!=null?Number(g.peso_unitario):null,peso_total:Number(g.peso_total)||0,quantidade:Number(g.quantidade)||0})}),Array.from(N.values())}}),C={cod_produto:t.cod_produto??null,produto:t.produto??null,lote:null,data_validade:null,peso_unitario:null,peso_total:null,quantidade:null},j=b.length>0?b:[C],a=j[Math.min(f,j.length-1)],o=Math.max(1,Number(x)||1),c=Math.max(0,Number(n)||0),m=a.peso_unitario!=null&&c>0?(a.peso_unitario*c).toFixed(3):a.peso_total!=null&&o>0?(Number(a.peso_total)/o).toFixed(3):"",p=()=>{const u=R(),v=String(a.cod_produto??"").trim(),I=[];for(let N=1;N<=o;N++)I.push({codigo:v,nome:a.produto??"",lote:a.lote,validade:a.data_validade,peso:m||null,ordem:T(t.numero_ordem),cliente:t.cliente??null,paletIndex:N,paletTotal:o,unidadesPorPalet:c||null,qrPayload:`${u}/rastreabilidade?lote=${encodeURIComponent(a.lote||"")}&codigo=${encodeURIComponent(v)}`});i(I)};return e.jsx(te,{open:!0,onOpenChange:u=>{u||s()},children:e.jsxs(ae,{className:"max-w-lg",children:[e.jsx(se,{children:e.jsxs(oe,{children:["Etiquetas · ",T(t.numero_ordem)]})}),e.jsxs("div",{className:"space-y-4",children:[j.length>1&&e.jsxs("div",{children:[e.jsx(S,{className:"text-xs",children:"Produto recebido"}),e.jsx("select",{className:"mt-1 w-full h-10 rounded-md border border-input bg-background px-3 text-sm",value:f,onChange:u=>h(Number(u.target.value)),children:j.map((u,v)=>e.jsxs("option",{value:v,children:[u.produto," ",u.lote?`· Lote ${u.lote}`:""]},v))})]}),e.jsxs("div",{className:"rounded-md border p-3 text-sm space-y-1",children:[e.jsx("p",{className:"font-semibold",children:a.produto||"—"}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["Cód. ",a.cod_produto||"—"," · Lote ",a.lote||"—"," · Validade ",$(a.data_validade)]}),e.jsxs("p",{className:"text-muted-foreground text-xs",children:["Cliente: ",t.cliente||"—"," · Qtd. c
139onferida: ",a.quantidade??"—"," · Peso total:"," ",a.peso_total!=null?`${Number(a.peso_total).toFixed(3)} kg`:"—"]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx(S,{className:"text-xs",children:"Qtd. de palets"}),e.jsx(y,{type:"number",min:1,value:x,onChange:u=>d(u.target.value)})]}),e.jsxs("div",{children:[e.jsx(S,{className:"text-xs",children:"Produtos por palet"}),e.jsx(y,{type:"number",min:0,value:n,onChange:u=>l(u.target.value),placeholder:"Ex: 40"})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Serão geradas ",o," etiqueta(s) — uma por palet",m?`, com ${m} kg por palet`:"","."]})]}),e.jsxs(ie,{children:[e.jsx(w,{variant:"outline",onClick:s,children:"Cancelar"}),e.jsxs(w,{onClick:p,children:[e.jsx(L,{className:"h-4 w-4 mr-1"})," Imprimir etiquetas"]})]})]})})}function xe(){return z({queryKey:["etiquetas-estoque:produtos"],queryFn:async()=>{const{data:t,error:s}=await E.from("estoque_itens").select("codigo, nome").eq("ativo",!0).order("nome");if(s)throw s;return t??[]}})}function fe(t){const s=t.trim();return z({enabled:s.length>0,queryKey:["etiquetas-estoque:lotes",s],queryFn:async()=>{const[i,x]=await Promise.all([E.from("amostras").select("lote, data_validade, data_coleta").eq("codigo_produto",s).not("lote","is",null).order("data_coleta",{ascending:!1}).limit(200),E.from("estoque_lancamentos").select("lote, data_evento").eq("codigo_produto",s).not("lote","is",null).order("data_evento",{ascending:!1}).limit(200)]),d=new Map;return(i.data??[]).forEach(n=>{const l=String(n.lote??"").trim();l&&(d.has(l)?!d.get(l).validade&&n.data_validade&&(d.get(l).validade=n.data_validade):d.set(l,{lote:l,validade:n.data_validade??null}))}),(x.data??[]).forEach(n=>{const l=String(n.lote??"").trim();l&&(d.has(l)||d.set(l,{lote:l,validade:null}))}),Array.from(d.values())}})}function ge({it:t,produtos:s,onChange:i,onPrint:x,onRemove:d,canRemove:n}){const{data:l=[]}=fe(t.codigo),f=a=>{const o={codigo:a},c=s.find(m=>{var p;return((p=m.codigo)==null?void 0:p.toLowerCase())===a.trim().toLowerCase()});c&&(o.nome=c.nome),a!==t.codigo&&(o.lote="",o.validade=""),i(o)},h=a=>{const o=a.replace(/[,\s]/g,""),c={lote:o},m=l.find(p=>p.lote===o);m!=null&&m.validade&&(c.validade=m.validade),i(c)},b=`produtos-${t.id}`,C=`lotes-${t.id}`,j=`nomes-${t.id}`;return e.jsxs(H,{children:[e.jsxs(_,{children:[e.jsx(y,{list:b,value:t.codigo,onChange:a=>f(a.target.value),placeholder:"Ex: 7074"}),e.jsx("datalist",{id:b,children:s.map(a=>e.jsx("option",{value:a.codigo,children:a.nome},a.codigo))})]}),e.jsxs(_,{children:[e.jsx(y,{list:j,value:t.nome,onChange:a=>{const o=a.target.value,c={nome:o},m=s.find(p=>{var u;return((u=p.nome)==null?void 0:u.toLowerCase())===o.trim().toLowerCase()});m&&(c.codigo=m.codigo),i(c)},placeholder:"Nome do produto"}),e.jsx("datalist",{id:j,children:s.map(a=>e.jsx("option",{value:a.nome,children:a.codigo},a.codigo))})]}),e.jsxs(_,{children:[e.jsx(y,{list:C,value:t.lote,onChange:a=>h(a.target.value),placeholder:l.length?"Selecione ou digite":"Digite o lote"}),e.jsx("datalist",{id:C,children:l.map(a=>e.jsx("option",{value:a.lote,children:a.validade?`Validade ${$(a.validade)}`:""},a.lote))})]}),e.jsx(_,{children:e.jsx(y,{type:"date",value:t.validade,onChange:a=>i({validade:a.target.value})})}),e.jsx(_,{children:e.jsx(y,{inputMode:"decimal",value:t.peso,onChange:a=>i({peso:a.target.value.replace(",",".")}),placeholder:"0,000"})}),e.jsx(_,{children:e.jsx(y,{type:"number",min:1,value:t.copias,onChange:a=>i({copias:Math.max(1,Number(a.target.value)||1)})})}),e.jsx(_,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end gap-1",children:[e.jsx(w,{variant:"outline",size:"sm",onClick:x,children:e.jsx(L,{className:"h-4 w-4"})}),e.jsx(w,{variant:"ghost",size:"sm",onClick:d,disabled:!n,children:e.jsx(le,{className:"h-4 w-4"})})]})})]})}function Ce(){const t=B(),{toast:s}=K(),{config:i}=ne(),{data:x=[]}=xe(),[d,n]=k.useState([V()]),[l,f]=k.useState(null),{data:h=[]}=z({queryKey:["etiquetas-estoque:ordens-fabrica"],queryFn:async()=>{const{data:a,error:o}=await E.from("ordens_recebimento").select("id, numero_ordem, produto, c
139od_produto, cliente, nf, nf_remessa, status, local_estoque, tipo, data_finalizacao, created_at").eq("excluida",!1).eq("status","finalizado").neq("tipo","nf_papel").not("local_estoque","is",null).ilike("local_estoque","FABRICA%").order("numero_ordem",{ascending:!1}).limit(40);if(o)throw o;return a??[]}}),b=(a,o)=>{n(c=>c.map(m=>m.id===a?{...m,...o}:m))},C=a=>{const c=`${R()}/rastreabilidade?lote=${encodeURIComponent(a.lote||"")}&codigo=${encodeURIComponent(a.codigo||"")}`;return{codigo:a.codigo,nome:a.nome,lote:a.lote,peso:a.peso,validade:a.validade,qrPayload:c}},j=a=>{const c=(a?[a]:d).filter(p=>p.codigo.trim()||p.nome.trim()||p.lote.trim());if(c.length===0){s({title:"Nada para imprimir",description:"Preencha pelo menos uma etiqueta.",variant:"destructive"});return}const m=[];c.forEach(p=>{const u=Math.max(1,Number(p.copias)||1);for(let v=0;v<u;v++)m.push(C(p))}),A(m,i)};return e.jsxs("div",{className:"max-w-6xl mx-auto",children:[e.jsxs(w,{variant:"ghost",size:"sm",className:"-ml-2 mb-4",onClick:()=>t("/controle-estoque"),children:[e.jsx(W,{className:"h-4 w-4 mr-2"})," Voltar"]}),e.jsxs("div",{className:"flex flex-col items-center text-center gap-2 mb-6",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-xl bg-primary/20 text-primary",children:e.jsx(O,{className:"h-6 w-6"})}),e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:"Etiquetas de Estoque"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Gere e imprima etiquetas com Código, Nome, Validade, Lote e Peso"})]}),e.jsxs(F,{className:"mb-6",children:[e.jsxs(U,{className:"pb-2",children:[e.jsxs(M,{className:"text-base flex items-center gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-primary"})," Recebimentos da Fábrica finalizados"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Escolha uma OR finalizada e informe a quantidade de palets e de produtos por palet para imprimir as etiquetas."})]}),e.jsx(Q,{children:h.length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-2",children:"Nenhum recebimento da fábrica finalizado."}):e.jsx("div",{className:"max-h-72 overflow-y-auto divide-y",children:h.map(a=>e.jsxs("div",{className:"flex items-center justify-between gap-3 py-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-semibold text-sm",children:T(a.numero_ordem)}),e.jsx(J,{variant:"outline",className:"text-[10px]",children:a.local_estoque})]}),e.jsxs("p",{className:"text-xs text-muted-foreground truncate",children:[a.produto||"—"," · ",a.cliente||"—"," · NF ",a.nf||a.nf_remessa||"—"]})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>f(a),children:[e.jsx(O,{className:"h-4 w-4 mr-1"})," Etiquetas"]})]},a.id))})})]}),l&&e.jsx(pe,{ordem:l,onClose:()=>f(null),onPrint:a=>{A(a,i),f(null)}}),e.jsxs(F,{children:[e.jsxs(U,{className:"flex-row items-center justify-between space-y-0",children:[e.jsx(M,{className:"text-base",children:"Itens"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>n(a=>[...a,V()]),children:[e.jsx(X,{className:"h-4 w-4 mr-1"})," Adicionar"]}),e.jsxs(w,{size:"sm",onClick:()=>j(),children:[e.jsx(L,{className:"h-4 w-4 mr-1"})," Imprimir todas"]})]})]}),e.jsxs(Q,{children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs(Y,{children:[e.jsx(Z,{children:e.jsxs(H,{children:[e.jsx(q,{className:"w-[140px]",children:"Cód. Produto"}),e.jsx(q,{children:"Nome"}),e.jsx(q,{className:"w-[140px]",children:"Lote"}),e.jsx(q,{className:"w-[150px]",children:"Validade"}),e.jsx(q,{className:"w-[120px]",children:"Peso (kg)"}),e.jsx(q,{className:"w-[90px]",children:"Cópias"}),e.jsx(q,{className:"w-[150px] text-right",children:"Ações"})]})}),e.jsx(ee,{children:d.map(a=>e.jsx(ge,{it:a,produtos:x,onChange:o=>b(a.id,o),onPrint:()=>j(a),onRemove:()=>n(o=>o.length>1?o.filter(c=>c.id!==a.id):o),canRemove:d.length>1},a.id))})]})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:"Digite o código para preencher o nome automaticamente. Ao escolher um lote já cadastrado, a validade é preenchida."})]})]})]})}export{Ce as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.