PageSourceSearch

https://askbina.ai/assets/AdminPDFMapper-CIXaADL8.js

js askbina.ai collected 2026-10-05 13:00:28 UTC 19,773 bytes, 1 lines download raw bytes

1import{r as d,aH as p,b as D,j as t,t as C,w as A,x as O,v as E,B as b}from"./index-CcMLSBG6.js";import{T as he}from"./TechnicalAdminLayout-BwhlunFu.js";import{I as U}from"./input-6C8gsjbZ.js";import{L}from"./label-6YVF-Fk-.js";import{S as ue,a as me,b as xe,c as fe,d as je}from"./select-DljSOX27.js";import{T as ye}from"./trash-2-ClxNGV40.js";import{S as be}from"./save-C6Q4YkbX.js";import{D as ve}from"./download-F0x-pNxA.js";import{E as Pe}from"./eye-Ccee6yyI.js";import"./lock-CkLMpw2q.js";import"./chart-no-axes-column-D2swLHl6.js";import"./dollar-sign-DMrgMiCk.js";import"./bot-C7e4-GsS.js";import"./wrench-C9-gyDf5.js";import"./map-pin-luXfVPf-.js";const z=[{id:"client_name_1",label:"שם לקוח 1",color:"#3b82f6",type:"text"},{id:"client_id_1",label:"ת.ז לקוח 1",color:"#10b981",type:"text"},{id:"client_phone_1",label:"נייד לקוח 1",color:"#ec4899",type:"text"},{id:"signature_1",label:"חתימה 1",color:"#f59e0b",type:"signature"},{id:"date",label:"תאריך מלא",color:"#8b5cf6",type:"text"},{id:"day",label:"יום",color:"#a855f7",type:"text"},{id:"month",label:"חודש",color:"#9333ea",type:"text"},{id:"year",label:"שנה",color:"#7c3aed",type:"text"},{id:"client_name_2",label:"שם לקוח 2",color:"#06b6d4",type:"text"},{id:"client_id_2",label:"ת.ז לקוח 2",color:"#14b8a6",type:"text"},{id:"client_phone_2",label:"נייד לקוח 2",color:"#d946ef",type:"text"},{id:"signature_2",label:"חתימה 2",color:"#f97316",type:"signature"},{id:"date_2",label:"תאריך מלא 2",color:"#fb923c",type:"text"},{id:"client_name_1_verification",label:"שם לווה 1 (אימות)",color:"#60a5fa",type:"text"},{id:"client_id_1_verification",label:"ת.ז לווה 1 (אימות)",color:"#34d399",type:"text"},{id:"client_name_2_verification",label:"שם לווה 2 (אימות)",color:"#22d3ee",type:"text"},{id:"client_id_2_verification",label:"ת.ז לווה 2 (אימות)",color:"#2dd4bf",type:"text"},{id:"advisor_name",label:"שם יועץ",color:"#ef4444",type:"text"},{id:"advisor_id",label:"ת.ז יועץ",color:"#dc2626",type:"text"},{id:"advisor_company",label:"חברת ייעוץ",color:"#b91c1c",type:"text"},{id:"advisor_company_id",label:"ח.פ יועץ",color:"#991b1b",type:"text"},{id:"advisor_signature",label:"חתימת יועץ",color:"#7f1d1d",type:"signature"},{id:"verification_date",label:"תאריך אימות",color:"#78716c",type:"text"}],V=[{value:"beinleumi",label:"בינלאומי"},{value:"discount",label:"דיסקונט"},{value:"hapoalim",label:"הפועלים"},{value:"leumi",label:"לאומי"},{value:"mizrahi",label:"מזרחי טפחות"}];function we(){const[j,T]=d.useState(""),[h,G]=d.useState(""),[u,N]=d.useState(0),[f,ee]=d.useState(1),[x,te]=d.useState("client_name_1"),[g,M]=d.useState({}),[v,W]=d.useState({width:595,height:842}),[$,J]=d.useState(""),[Y,ae]=d.useState([]),[X,P]=d.useState(!1),[w,se]=d.useState(null),[H,K]=d.useState(!1),y=d.useRef(null),R=d.useRef(null),q=d.useRef(null);d.useEffect(()=>{Q();const e=localStorage.getItem("pdfMapper_draft");if(e)try{const a=JSON.parse(e);a.selectedBank&&a.fields&&Object.keys(a.fields).length>0&&(G(a.selectedBank),M(a.fields),N(a.currentPage||0),T(a.pdfUrl||""),J(a.advisorSignatureUrl||""),p({title:"שוחזר טיוטה",description:"השינויים שביצעת שוחזרו אוטומטית"}))}catch(a){console.error("Failed to restore draft:",a)}},[]),d.useEffect(()=>{if(window.pdfjsLib){K(!0);return}const e=document.createElement("script");return e.src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js",e.onload=()=>{window.pdfjsLib.GlobalWorkerOptions.workerSrc="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js",K(!0)},e.onerror=()=>{p({title:"שגיאה",description:"לא ניתן לטעון את ספריית PDF",variant:"destructive"})},document.head.appendChild(e),()=>{e.parentNode&&e.parentNode.removeChild(e)}},[]);const Q=async()=>{try{const e=await D.entities.BankPDFFieldMapping.list();ae(e)}catch(e){console.error("Error loading mappings:",e)}},Z=async e=>{try{const a=await D.entities.BankPDFFieldMapping.filter({bank_name:e});if(a.length>0){const r=a[0];M(r.fields||{});const i=(l=>{const n={};
1return Object.values(l).flat().forEach(c=>{const o=c.page??0;n[o]=(n[o]||0)+1}),Object.keys(n).length>0?parseInt(Object.keys(n).reduce((c,o)=>n[c]>n[o]?c:o)):r.page_index||0})(r.fields||{});N(i),console.log("[PDFMapper] 📄 Loaded mapping, setting page to:",i),T(r.template_pdf_url||""),J(r.advisor_signature_sample_url||""),p({title:"מיפוי נטען",description:`נטען מיפוי קיים עבור ${r.bank_display_name} (עמוד ${i})`})}}catch(a){console.error("Error loading mapping:",a)}},re=e=>{localStorage.removeItem("pdfMapper_draft"),G(e),Z(e)},I=async(e,a)=>{console.log("[PDFMapper] 🎨 Rendering PDF page:",a);try{const r=await e.getPage(a+1),s=r.getViewport({scale:1}),i=y.current;if(!i){console.log("[PDFMapper] ❌ Canvas not available");return}i.width=s.width,i.height=s.height,W({width:s.width,height:s.height}),console.log("[PDFMapper] 📐 PDF Dimensions:",{width:s.width,height:s.height});const l=i.getContext("2d");await r.render({canvasContext:l,viewport:s}).promise,console.log("[PDFMapper] ✅ PDF rendered successfully"),k()}catch(r){console.error("[PDFMapper] ❌ Error rendering PDF page:",r),p({title:"שגיאה",description:"לא ניתן להציג את העמוד",variant:"destructive"})}},ne=async e=>{var r;const a=(r=e.target.files)==null?void 0:r[0];if(a){if(!H){p({title:"אנא המתן",description:"ספריית PDF עדיין נטענת...",variant:"destructive"});return}P(!0);try{const s=await D.integrations.Core.UploadFile({file:a});if(T(s.file_url),a.type==="application/pdf"){const l=await window.pdfjsLib.getDocument(s.file_url).promise;se(l),ee(l.numPages),N(0),console.log("[PDFMapper] 📚 PDF loaded with",l.numPages,"pages"),await I(l,0)}p({title:"קובץ הועלה בהצלחה",description:"כעת ניתן לקליק על השדות"})}catch(s){console.error("Error uploading file:",s),p({title:"שגיאה",description:"לא ניתן להעלות את הקובץ",variant:"destructive"})}finally{P(!1)}}},ie=e=>{if(!y.current)return;console.log("[PDFMapper] 🖱️ Canvas clicked on page:",u);const a=y.current.getBoundingClientRect(),r=e.clientX-a.left,s=e.clientY-a.top,i=r/a.width*v.width,l=v.height-s/a.height*v.height,n=z.find(F=>F.id===x),c=parseInt(u)||0,o={x:Math.round(i),y:Math.round(l),page:c,label:(n==null?void 0:n.label)||x};console.log("[PDFMapper] ✅ New field page set to:",c),(n==null?void 0:n.type)==="signature"?(o.width=120,o.height=40):o.fontSize=10,console.log("[PDFMapper] ➕ Adding field:",x,o),M(F=>{const _=F[x];return Array.isArray(_)?{...F,[x]:[..._,o]}:_?{...F,[x]:[_,o]}:{...F,[x]:[o]}});const S=(Array.isArray(g[x])?g[x].length:g[x]?1:0)+1;p({title:"שדה נוסף בהצלחה",description:`${n==null?void 0:n.label} #${S} → (${o.x}, ${o.y}) | עמוד ${c}`})},k=()=>{if(console.log("[PDFMapper] 🎯 Drawing markers, fields count:",Object.keys(g).length),!y.current){console.log("[PDFMapper] ❌ No canvas for markers");return}const e=y.current,a=e.getContext("2d");Object.entries(g).forEach(([r,s])=>{const i=z.find(n=>n.id===r);if(!i)return;const l=Array.isArray(s)?s:[s];l.forEach((n,c)=>{if((n.page??0)!==u)return;const m=n.x/v.width*e.width,S=e.height-n.y/v.height*e.height;if(a.fillStyle=i.color+"80",a.strokeStyle=i.color,a.lineWidth=2,i.type==="signature"){const _=(n.width||120)/v.width*e.width,B=(n.height||40)/v.height*e.height;a.fillRect(m,S-B,_,B),a.strokeRect(m,S-B,_,B)}else a.beginPath(),a.arc(m,S,5,0,2*Math.PI),a.fill(),a.stroke();a.fillStyle="#000",a.font="12px Arial";const F=l.length>1?`${i.label} [${c+1}]`:i.label;a.fillText(F,m+10,S-5)})}),console.log("[PDFMapper] ✅ Markers drawn")},le=async()=>{if(console.log("[PDFMapper] 🔄 Redrawing all"),!y.current)return;const e=y.current,a=e.getContext("2d");try{w?(await I(w,u),k()):R.current&&(a.clearRect(0,0,e.width,e.height),a.drawImage(R.current,0,0,e.width,e.height),k())}catch(r){console.error("[PDFMapper] ❌ Error in redrawAll:",r)}};d.useEffect(()=>{h&&g&&Object.keys(g).length>0&&(clearTimeout(q.current),q.current=setTimeout(()=>{const e={selectedBank:h,fields:g,currentPage:u,pdfUrl:j,advisorSignatureUrl:$,savedAt:new Date().toISOString()};localStorage.setItem("pdfMapper_draft",JSON.stringify(e)),console.log("[PDFMapper] 💾 Draft auto-saved to localStorage")},1e3))},[h,g,u,j,$]),d.useEffect(()=>{console.log("[PDFMapper] 📝 Fields changed"),j&&(w||R.current)&&le()},[g]),d.useEffect(()=>{console.log("[PDFMapper] 📄 Page or PDF changed, redrawing markers"),w?I(w,u).then(()=>{k()}):R.current&&k()},[u,w]);const oe=async()=>
1{if(!h||!j){p({title:"שגיאה",description:"נא לבחור בנק ולהעלות PDF",variant:"destructive"});return}P(!0);try{const e=V.find(l=>l.value===h),a=await D.entities.BankPDFFieldMapping.filter({bank_name:h}),r=l=>{const n={};return Object.values(l).flat().forEach(c=>{const o=c.page??0;n[o]=(n[o]||0)+1}),Object.keys(n).length>0?parseInt(Object.keys(n).reduce((c,o)=>n[c]>n[o]?c:o)):0},s={};Object.entries(g).forEach(([l,n])=>{const o=(Array.isArray(n)?n:n?[n]:[]).filter(m=>m&&m.x!==void 0&&m.y!==void 0).map(m=>({...m,page:m.page!==void 0&&m.page!==null?parseInt(m.page):0}));o.length>0&&(s[l]=o)}),console.log("[PDFMapper] 💾 Saving fields with explicit pages:",Object.entries(s).map(([l,n])=>`${l}: [${n.map(c=>`p${c.page}(${c.x},${c.y})`).join(", ")}]`).join(" | "));const i={bank_name:h,bank_display_name:(e==null?void 0:e.label)||h,template_pdf_url:j,page_index:r(s),fields:s,advisor_signature_sample_url:$||null,is_active:!0,last_tested:new Date().toISOString()};a.length>0?(await D.entities.BankPDFFieldMapping.update(a[0].id,i),p({title:"מיפוי עודכן",description:`המיפוי עבור ${e==null?void 0:e.label} עודכן בהצלחה (${Object.keys(s).length} שדות)`})):(await D.entities.BankPDFFieldMapping.create(i),p({title:"מיפוי נשמר",description:`המיפוי עבור ${e==null?void 0:e.label} נשמר בהצלחה`})),Q(),localStorage.removeItem("pdfMapper_draft"),console.log("[PDFMapper] ✅ Draft cleared after successful save")}catch(e){console.error("[PDFMapper] ❌ Save error:",e),p({title:"שגיאה",description:"לא ניתן לשמור את המיפוי",variant:"destructive"})}finally{P(!1)}},ce=(e,a=null)=>{console.log("[PDFMapper] 🗑️ Deleting field:",e,"instance:",a),M(r=>{const s={...r};if(a!==null&&Array.isArray(s[e])){const i=s[e].filter((l,n)=>n!==a);i.length===0?delete s[e]:s[e]=i}else delete s[e];return s})},de=(e,a,r)=>{const s=parseInt(r);if(console.log("[PDFMapper] 📄 Changing page:",e,"instance:",a,"raw input:",r,"parsed:",s),isNaN(s)){console.error("[PDFMapper] ❌ Invalid page number:",r);return}M(i=>{const l={...i};return Array.isArray(l[e])?l[e]=l[e].map((n,c)=>c===a?{...n,page:s}:n):l[e]&&(l[e]={...l[e],page:s}),console.log("[PDFMapper] ✅ Page updated for",e,"→ new page:",s),l})},pe=async e=>{var r;const a=(r=e.target.files)==null?void 0:r[0];if(a){P(!0);try{const s=await D.integrations.Core.UploadFile({file:a});J(s.file_url),p({title:"חתימת יועץ הועלתה",description:"החתימה תוכנס אוטומטית לכל המסמכים"})}catch{p({title:"שגיאה",description:"לא ניתן להעלות חתימה",variant:"destructive"})}finally{P(!1)}}},ge=()=>{const e={bank_name:h,page_index:u,fields:g},a=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),r=URL.createObjectURL(a),s=document.createElement("a");s.href=r,s.download=`${h}_mapping.json`,s.click()};return t.jsxs("div",{className:"space-y-6",dir:"rtl",children:[t.jsxs(C,{children:[t.jsx(A,{children:t.jsx(O,{children:"הגדרות בסיסיות"})}),t.jsxs(E,{className:"space-y-4",children:[t.jsxs("div",{children:[t.jsx(L,{children:"בחר בנק"}),t.jsxs(ue,{value:h,onValueChange:re,children:[t.jsx(me,{children:t.jsx(xe,{placeholder:"בחר בנק"})}),t.jsx(fe,{children:V.map(e=>t.jsx(je,{value:e.value,children:e.label},e.value))})]})]}),t.jsxs("div",{children:[t.jsx(L,{children:"העלה תבנית PDF או תמונה"}),t.jsx(U,{type:"file",accept:"application/pdf,image/*",onChange:ne,disabled:!H}),t.jsx("p",{className:"text-sm text-gray-500 mt-1",children:H?"תומך ב-PDF ישירות או תמונות PNG/JPG":"⏳ טוען ספריית PDF..."})]}),t.jsxs("div",{children:[t.jsxs(L,{children:["מספר עמוד (0 = ראשון) ",f>1&&t.jsxs("span",{className:"text-xs text-gray-400 font-normal",children:["— סה״כ ",f," עמודים"]})]}),t.jsx(U,{type:"number",value:u,onChange:e=>{const a=parseInt(e.target.value);isNaN(a)||N(Math.max(0,Math.min(f-1,a)))},min:"0",max:f-1,disabled:f<=1}),f>1&&t.jsxs("p",{className:"text-xs text-gray-400 mt-1",children:["ניתן להזין 0–",f-1]})]}),t.jsxs("div",{children:[t.jsx(L,{children:"העלה דוגמת חתימת יועץ (PNG עם רקע שקוף)"}),t.jsx(U,{type:"file",accept:"image/png,image/jpeg",onChange:pe}),$&&t.jsx("div",{className:"mt-2 p-2 border rounded bg-white",children:t.jsx("img",{src:$,alt:"חתימת יועץ",className:"h-12"})})]})]})]}),t.jsxs(C,{children:[t.jsx(A,{children:t.jsx(O,{children:"בחר שדה לסימון"})}),t.jsx(E,{children:t.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-2",children:z.map(e=>t.jsx(b,{variant:x===e.id?"default":"outline",onClick:()=>te(e.id),style:{borderColor:e.color,backgroundColor:x===e.id?e.color:"transparent",color:x===e.id?"white":e.color},children:e.label},e.id))})})]}),j&&t.jsxs(C,{children:[t.jsx(A,{children:t.jsx(O,{children:"לחץ על ה-PDF למיקום השדה"})}),t.jsxs(E,{children:[t.jsxs("div",{className:"relative border-2 border-gray-300 rounded-lg overflow-hidden",children:[!w&&t.jsx("img",{ref:R,src:j,alt:"Document Preview",style:{display:"none"},onLoad:e=>{const a=e.target;
1W({width:a.naturalWidth,height:a.naturalHeight});const r=y.current;if(r){r.width=a.naturalWidth,r.height=a.naturalHeight;const s=r.getContext("2d");console.log("[PDFMapper] 🖼️ Image loaded, drawing"),s.drawImage(a,0,0),k()}}}),t.jsx("canvas",{ref:y,onClick:ie,className:"w-full cursor-crosshair",style:{maxHeight:"800px"}})]}),w&&f>1&&t.jsxs("div",{className:"flex items-center justify-center gap-4 mt-4 p-3 bg-gray-50 rounded-lg",children:[t.jsx(b,{variant:"outline",size:"sm",onClick:()=>N(e=>Math.max(0,e-1)),disabled:u===0,children:"← עמוד קודם"}),t.jsxs("span",{className:"text-sm font-medium",children:["עמוד ",u+1," מתוך ",f]}),t.jsx(b,{variant:"outline",size:"sm",onClick:()=>N(e=>Math.min(f-1,e+1)),disabled:u===f-1,children:"עמוד הבא →"})]})]})]}),t.jsxs(C,{children:[t.jsx(A,{children:t.jsx(O,{children:"שדות שסומנו"})}),t.jsx(E,{children:t.jsxs("div",{className:"space-y-2",children:[Object.entries(g).map(([e,a])=>{const r=z.find(i=>i.id===e),s=Array.isArray(a)?a:[a];return t.jsxs("div",{className:"space-y-1",children:[t.jsxs("div",{className:"flex items-center gap-2 text-sm font-semibold text-gray-700",children:[t.jsx("div",{className:"w-3 h-3 rounded-full",style:{backgroundColor:r==null?void 0:r.color}}),r==null?void 0:r.label," (",s.length," מופעים)"]}),s.map((i,l)=>t.jsxs("div",{className:"flex items-center justify-between p-2 border rounded mr-6 bg-gray-50",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[t.jsxs("span",{className:"text-xs bg-gray-200 px-2 py-0.5 rounded",children:["#",l+1]}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"text-xs text-gray-600",children:"עמוד:"}),t.jsx(U,{type:"number",min:"0",max:f-1,value:i.page??0,onChange:n=>de(e,l,n.target.value),className:"w-16 h-6 text-xs px-1 py-0"})]}),t.jsxs("span",{className:"text-sm text-gray-600",children:["(",i.x,", ",i.y,")",i.width&&` - ${i.width}x${i.height}`]})]}),t.jsx(b,{variant:"ghost",size:"sm",onClick:()=>ce(e,l),children:t.jsx(ye,{className:"w-4 h-4"})})]},`${e}-${l}`))]},e)}),Object.keys(g).length===0&&t.jsx("p",{className:"text-gray-500 text-center py-4",children:"לא נוספו שדות עדיין. לחץ על ה-PDF כדי להוסיף שדות."})]})})]}),t.jsxs("div",{className:"flex gap-2 flex-wrap",children:[t.jsxs(b,{onClick:oe,disabled:X,className:"flex-1",children:[t.jsx(be,{className:"w-4 h-4 ml-2"}),"שמור מיפוי"]}),t.jsx(b,{onClick:async()=>{var e;if(!h||!j){p({title:"שגיאה",description:"בחר בנק והעלה PDF",variant:"destructive"});return}P(!0);try{const a=await D.asServiceRole.functions.invoke("analyzePOAFieldPositions",{pdfUrl:j,bankName:h});if((e=a.mapping)!=null&&e.fields)M(a.mapping.fields),p({title:"זיהוי הושלם",description:`AI זיהה ${Object.keys(a.mapping.fields).length} שדות`});else throw new Error(a.error||"לא ניתן לזהות שדות")}catch(a){console.error("[PDFMapper] AI זיהוי שגיאה:",a),p({title:"שגיאה",description:a.message||"בעיה בזיהוי AI",variant:"destructive"})}finally{P(!1)}},disabled:X,variant:"secondary",children:"⚡ זיהוי AI"}),t.jsxs(b,{onClick:ge,variant:"outline",children:[t.jsx(ve,{className:"w-4 h-4 ml-2"}),"ייצא JSON"]}),t.jsxs(b,{onClick:()=>{console.log("=== MAPPING DEBUG INFO ==="),console.log("Selected Bank:",h),console.log("Current Page:",u),console.log("PDF Dimensions:",v),console.log("Fields:",JSON.stringify(g,null,2)),p({title:"מידע מיפוי",description:`נשמר ב-console: ${Object.keys(g).length} שדות`})},variant:"outline",children:[t.jsx(Pe,{className:"w-4 h-4 ml-2"}),"הצג Debug"]})]}),Y.length>0&&t.jsxs(C,{children:[t.jsx(A,{children:t.jsx(O,{children:"מיפויים קיימים"})}),t.jsx(E,{children:t.jsx("div",{className:"space-y-2",children:Y.map(e=>t.jsxs("div",{className:"flex items-center justify-between p-3 border rounded",children:[t.jsxs("div",{children:[t.jsx("div",{className:"font-medium",children:e.bank_display_name}),t.jsxs("div",{className:"text-sm text-gray-500",children:[Object.keys(e.fields||{}).length," שדות | עמוד ",e.page_index]})]}),t.jsx(b,{variant:"outline",size:"sm",onClick:()=>{G(e.bank_name),Z(e.bank_name)},children:"טען"})]},e.id))})})]})]})}function Le(){return t.jsx(he,{currentPage:"AdminPDFMapper",children:t.jsxs("div",{className:"container mx-auto py-8",dir:"rtl",children:[t.jsxs("div",{className:"mb-6",children:[t.jsx("h1",{className:"text-3xl font-bold mb-2",children:"מיפוי קואורדינטות PDF"}),t.jsx("p",{className:"text-gray-600",children:"כלי למיפוי מדויק של שדות בתבניות ייפוי הכוח של הבנקים"})]}),t.jsxs(C,{className:"mb-6 bg-blue-50 border-blue-200",children:[t.jsx(A,{children:t.jsx(O,{className:"text-blue-900",children:"📋 הוראות שימוש"})}),t.jsxs(E,{className:"space-y-2 text-sm",children:[t.jsxs("p",{children:[t.jsx("strong",{children:"1."})," בחר בנק מהרשימה"]}),t.jsxs("p",{children:[t.jsx("strong",{children:"2."})," העלה את תבנית ה-PDF של הבנק (או תמונה של העמוד הרלוונטי)"]}),t.jsxs("p",{children:[t.jsx("strong",{children:"3."})," בחר סוג שדה (שם, ת.ז, חתימה, תאריך)"]}),t.jsxs("p",{children:[t.jsx("strong",{children:"4."})," לחץ במקום המדויק ב-PDF שבו צריך להופיע השדה"]}),t.jsxs("p",{children:[t.jsx("strong",{children:"5."})," חזור על שלבים 3-4 לכל השדות"]}),t.jsxs("p",{children:[t.jsx("strong",{children:"6."})," שמור את המיפוי"]}
1),t.jsx("p",{className:"text-blue-800 font-medium mt-4",children:"💡 טיפ: אפשר לטעון מיפוי קיים, לערוך ולשמור מחדש"})]})]}),t.jsx(we,{})]})})}export{Le 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.