PageSourceSearch

https://localpdf.online/app/assets/StudioEditWorkspace-CDw6sP0i.js

js localpdf.online collected 2026-09-24 14:26:16 UTC 60,175 bytes, 1 lines download raw bytes

1import{i as Ft,r as i,j as t,k as _e}from"./vendor-react-C_xdI0Ng.js";import{n as Be,c as Wt,g as $t,S as Ht,a as Vt}from"./StudioDialog-Bz_0GjSD.js";import{u as Je,b as A,p as Bt,t as Kt,m as Yt}from"./index-BLFiW9lJ.js";import{P as Gt,a as Xt}from"./protect-errors-CmaV3kPR.js";import{d as qt}from"./preview-service-CXJMbUqg.js";import{u as Zt}from"./history-store-CgRrFfE0.js";import{i as Jt}from"./feature-flag-QAeryYXU.js";import{L as F}from"./linear-icon-BS_Bu1OG.js";import"./infer-source-text-style-CB_Q6F8k.js";import"./vendor-icons-CmfhFn4k.js";function Ke(a){return a.replace(/\s+/gu," ").trim()}function Qt(a,s){const e=Math.max(.012,Math.min(a.widthRatio,s.widthRatio)*.12);return Math.abs(a.xRatio-s.xRatio)<=e}function Ye(a){if(a.length<2)return a;const s=new Set;for(let e=0;e<a.length;e+=1)for(let o=0;o<a.length;o+=1){if(e===o)continue;const d=a[e],p=a[o];if(s.has(d.id)||s.has(p.id)||!Qt(d,p))continue;const m=p.yRatio-d.yRatio,C=Math.max(.004,d.heightRatio*2.5);if(Math.abs(m)>C)continue;const x=Ke(d.text),k=Ke(p.text);if(!x||!k){s.add(d.id);continue}const L=(()=>{const c=Math.min(x.length,k.length);let u=0;for(;u<c&&x[u]===k[u];)u+=1;return u})();if(!(k.startsWith(x)||x.startsWith(k)||L>=12))continue;if(Math.abs(m)<=Math.max(.001,d.heightRatio*.15)){x.length<k.length?s.add(d.id):k.length<x.length?s.add(p.id):m>0&&s.add(d.id);continue}m<=0||s.add(d.id)}return a.filter(e=>!s.has(e.id))}function en(a,s,e=.004){const o=a.xRatio+a.widthRatio/2,d=a.yRatio+a.heightRatio/2;return o>=s.x-e&&o<=s.x+s.w+e&&d>=s.y-e&&d<=s.y+s.h+e}function tn(a,s){const e=s.filter(o=>o.type==="text"&&o.originalRect).map(o=>o.originalRect);return e.length===0?a:a.filter(o=>!e.some(d=>en(o,d)))}async function nn(a,s,e,o){const d={id:crypto.randomUUID(),type:"COMMAND",payload:{type:"GET_PDF_TEXT_LAYER",payload:{fileId:s,pageNumber:e}}},p=await a.workerOrchestrator.dispatch(d,void 0,o);if(p.payload.type==="TEXT_LAYER_RESULT")return p.payload.payload.spans;if(p.payload.type==="ERROR"){const m=new Error(p.payload.payload.message);throw m.code=p.payload.payload.code,m}throw new Error("Unexpected worker response for text layer request")}async function Ge(a,s,e){return[]}const Xe={execute:(a,s)=>{if(a.type==="APPLY_TEXT_EDITS")for(const e of a.payload.entries)s(e.docId,e.pageId,{fileId:e.nextFileId,pageIndex:e.pageIndex,thumbnailUrl:e.nextThumbnailUrl})},undo:(a,s)=>{if(a.type==="APPLY_TEXT_EDITS")for(const e of a.payload.entries)s(e.docId,e.pageId,{fileId:e.prevFileId,pageIndex:e.pageIndex,thumbnailUrl:e.prevThumbnailUrl})}},an=!0,sn={userId:"studio-user",plan:"pro",entitlements:["pdf.merge","pdf.split","pdf.compress","pdf.ocr","pdf.rotate","pdf.delete_pages","pdf.edit","pdf.to_image","office.convert","pdf.protect.encrypt","pdf.protect.unlock"]};function on(a,s){const e=[];for(const o of s){const d=a.find(m=>m.id===o.docId);if(!d)continue;const p=d.pages.findIndex(m=>m.id===o.pageId);p<0||e.push({docId:d.id,docName:d.name,page:d.pages[p],indexInDoc:p})}return e}function ln(a,s){const e=a.trim();if(!e)return null;const o=Math.max(12,Math.min(96,Math.round(s||30))),d=Math.max(20,Math.round(o*.8)),p=Math.max(12,Math.round(o*.45)),m=document.createElement("canvas"),C=m.getContext("2d");if(!C)return null;C.font=`italic ${o}px "Times New Roman", Times, serif`;const x=C.measureText(e),k=Math.max(x.width,o*1.6),L=Math.max(o*.78,x.actualBoundingBoxAscent||0),v=Math.max(o*.24,x.actualBoundingBoxDescent||0),h=Math.max(180,Math.ceil(k+d*2)),c=Math.max(80,Math.ceil(L+v+p*2));m.width=h,m.height=c;const u=m.getContext("2d");return u?(u.clearRect(0,0,h,c),u.font=`italic ${o}px "Times New Roman", Times, serif`,u.fillStyle="#0f172a",u.textAlign="left",u.textBaseline="alphabetic",u.fillText(e,d,p+L),{dataUrl:m.toDataURL("image/png"),width:h,height:c}):null}function qe(a){const s=a.width>0&&a.height>0?a.width/a.height:3,e=.28,o=e/Math.max(.2,s);return{id:crypto.randomUUID(),type:"image",x:.36,y:.72,w:Math.min(.5,Math.max(.08,e)),h:Math.min(.35,Math.max(.04,o)),opacity:1,dataUrl:a.dataUrl,signatureSource:a.signatureSource,typedSignatureMeta:a.typedSignatureMeta}}function rn(a){const s=Ft(),{runtime:e}=Je(),o=A(n=>n.documents),d=A(n=>n.selection),p=A(n=>n.activeDocumentId),m=A(n=>n.interactionMode),C=A(n=>n.studioViewScale),x=A(n=>n.studioViewPosition),k=A(n=>n.updatePage),L=A(n=>n.updateDocument),v=A(n=>n.editSession),h=A(n=>n.clearEditSession),c=A(n=>n.updateEditSessionTool),u=A(n=>n.syncEditSessionTarget),I=A(n=>n.whiteoutColor),M=A(n=>n.setWhiteoutColor);A(n=>n.saveUndoStack),A(n=>n.saveRedoStack);const P=A(n=>n.pushSaveUndo),W=A(n=>n.popSaveUndo),D=A(n=>n.pushSaveRedo),G=A(n=>n.popSaveRedo),X=A(n=>n.clearSaveStacks),H=A(n=>n.commandUndoStack),V=A(n=>n.commandRedoStack),R=A(n=>
1n.pushCommandUndo),J=A(n=>n.popCommandUndo),ne=A(n=>n.pushCommandRedo),Q=A(n=>n.popCommandRedo),ae=Zt(n=>n.createCheckpoint),[le,ie]=i.useState((v==null?void 0:v.activeTool)??null),[Ie,me]=i.useState("edit"),[N,re]=i.useState(!1),[j,z]=i.useState([]),q=i.useRef([]),[pe,ye]=i.useState([[]]),[Z,he]=i.useState(0),[se,l]=i.useState(null),[b,f]=i.useState(null),[U,T]=i.useState(!1),[$,ee]=i.useState(null),[E,_]=i.useState("idle"),[Ne,ze]=i.useState([]),[Qe,et]=i.useState(!1),[tt,nt]=i.useState("line"),[Ee,Fe]=i.useState(!1),[at,st]=i.useState("type"),[Ae,ot]=i.useState(""),[Pe,it]=i.useState(30),[lt,rt]=i.useState("#111827"),[dt,ct]=i.useState(3),[pt,ut]=i.useState("#fff176"),[mt,ht]=i.useState("highlight"),[gt,ft]=i.useState(5),[xt,yt]=i.useState("rectangle"),[bt,St]=i.useState("#2563eb"),[vt,jt]=i.useState(2),[wt,It]=i.useState(!1),[Nt,Ct]=i.useState({fontFamily:"sora",fontSize:18,fontWeight:"normal",fontStyle:"normal",lineHeight:1.2,letterSpacing:0,color:"#0f172a",backgroundColor:"transparent"}),[kt,We]=i.useState({text:"CONFIDENTIAL",color:"#1e293b",fontSize:30,fontFamily:"sora",fontWeight:"bold",fontStyle:"normal",opacity:.32,rotation:-30,repeatEnabled:!0,repeatCols:3,repeatRows:4,repeatGapX:.2,repeatGapY:.16}),[Et,Tt]=i.useState({permissionsOnly:!0,userPassword:"",ownerPassword:"",keyLength:256,printing:"full",copying:!1,modifying:!1,annotating:!1,fillingForms:!0,contentAccessibility:!0,documentAssembly:!1}),be=i.useMemo(()=>on(o,d),[o,d]),te=i.useMemo(()=>o.find(n=>n.id===p)??null,[p,o]),g=i.useMemo(()=>{if(v){const n=o.find(O=>O.id===v.docId),r=n==null?void 0:n.pages.find(O=>O.id===v.pageId),y=r?(n==null?void 0:n.pages.findIndex(O=>O.id===r.id))??-1:-1;if(n&&r&&y>=0)return{docId:n.id,docName:n.name,page:r,indexInDoc:y}}return be[0]?be[0]:te&&te.pages[0]?{docId:te.id,docName:te.name,page:te.pages[0],indexInDoc:0}:null},[te,o,v,be]),Te=be.length>1;i.useEffect(()=>{if(v!=null&&v.activeTool){if(v.activeTool==="shapes"){ie("annotate"),c("annotate");return}v.activeTool!==le&&ie(v.activeTool)}},[v==null?void 0:v.activeTool,le,c]),i.useEffect(()=>{g&&u({docId:g.docId,pageId:g.page.id,pageIndex:g.page.pageIndex,workingFileId:g.page.fileId})},[g==null?void 0:g.docId,g==null?void 0:g.page.fileId,g==null?void 0:g.page.id,g==null?void 0:g.page.pageIndex,u]),i.useEffect(()=>{!Te&&Ee&&Fe(!1)},[Ee,Te]);const[Ce]=i.useState(()=>crypto.randomUUID()),Se=i.useCallback((n,r="ui")=>{const y=n==="shapes"?"annotate":n;ie(y),y!=="text"&&re(!1),c(y),e.telemetry.track({type:"STUDIO_EDIT_TOOL_SELECTED",runId:Ce,toolId:"studio.edit",tool:y,method:r})},[c,e,Ce]),ke=j.length>0||Z>0||!!($&&$.value!==$.initialValue),K=i.useCallback(n=>{z(r=>{const y=typeof n=="function"?n(r):n;return q.current=y,y})},[]);i.useEffect(()=>{q.current=j},[j]),i.useEffect(()=>{const n=r=>{ke&&(r.preventDefault(),r.returnValue="")};return window.addEventListener("beforeunload",n),()=>window.removeEventListener("beforeunload",n)},[ke]),i.useEffect(()=>{K([]),ye([[]]),he(0),l(null),ee(null),_("idle"),X()},[g==null?void 0:g.page.id,g==null?void 0:g.page.pageIndex,X,K]),i.useEffect(()=>{if(!g)return;const n=new AbortController;return(async()=>{try{const r=await nn(e,g.page.fileId,g.page.pageIndex+1,n.signal);if(n.signal.aborted)return;const y=Ye(Be(r.length>0?r:await Ge(e,g.page.fileId,g.page.pageIndex+1)));if(n.signal.aborted)return;ze(y),y.length===0&&f(a.noTextLayer)}catch{if(n.signal.aborted)return;try{const y=Ye(Be(await Ge(e,g.page.fileId,g.page.pageIndex+1)));if(n.signal.aborted)return;ze(y),y.length===0&&f(a.noTextLayer)}catch{if(n.signal.aborted)return;f(a.noTextLayer)}}})(),()=>n.abort()},[g==null?void 0:g.page.id,g==null?void 0:g.page.fileId,g==null?void 0:g.page.pageIndex,e,a.noTextLayer]);const de=i.useCallback(n=>{ye(r=>[...r.slice(0,Z+1),n]),he(r=>r+1)},[Z]),ve=i.useCallback(n=>{const r=[...q.current,n];K(r),de(r),l(n.id),ee(null)},[de,K]),Mt=i.useCallback(n=>{const r=qe({...n,signatureSource:"upload"});ve(r),ie("sign")},[ve]),De=i.useCallback(n=>{const r=(n.value||a.sign||"Signature").trim()||"Signature",y=ln(r,n.fontSize);y&&(ve(qe({...y,signatureSource:"typed",typedSignatureMeta:{baseFontSize:Math.max(12,Math.min(96,Math.round(n.fontSize||30))),sourceWidth:y.width,sourceHeight:y.height}})),ie("sign"))},[ve,a.sign]),At=i.useCallback(()=>{De({value:Ae||"Signature",fontSize:Pe})},[De,Pe,Ae]),Pt=i.useCallback(n=>{const r=q.current.filter(S=>S.type==="form-field"&&S.formType===n).length+1,y=n==="text"?{w:.32,h:.06}:n==="multiline"?{w:.34,h:.24}:n==="dropdown"?{w:.3,h:.07}:{w:.1,h:.06},O={id:crypto.randomUUID(),type:"form-field",formType:n,name:`${n}_field_${r}`,x:n==="text"?.34:n==="multiline"?.33:n==="dropdown"?.34:.4,y:.74,w:y.w,h:y.h,defaultValue:n==="checkbox"?"Off":n==="dropdown"?"Option 1":"",options:n==="dropdown"?["Option 1","Option 2","Option 3"]:void 0,required:!1,fontSize:12,opacity:1};ve(O),ie("forms")},[ve]),Re=i.useCallback(()=>
1{if(Z<=0)return;const n=Z-1;he(n),K(pe[n]??[]),l(null),ee(null)},[pe,Z,K]),Oe=i.useCallback(()=>{if(Z>=pe.length-1)return;const n=Z+1;he(n),K(pe[n]??[]),l(null),ee(null)},[pe,Z,K]),$e=i.useCallback(()=>{if(!se)return;const n=j.filter(r=>r.id!==se);K(n),de(n),l(null),ee(null)},[j,de,se,K]),Dt=i.useCallback((n,r,y)=>{let O;if(r==="delete"){const S=j.filter(Y=>Y.id!==n);K(S),de(S),l(null)}else if(r==="duplicate"){const S=j.find(Y=>Y.id===n);if(S){const Y="x"in S?S.x+.02:0,ce="y"in S?S.y+.02:0,oe=[...j,{...S,id:crypto.randomUUID(),..."x"in S?{x:Y,y:ce}:{}}];K(oe),de(oe)}}else r==="update"&&y&&(K(S=>S.map(Y=>Y.id===n?{...Y,...y}:Y)),O=Object.keys(y)[0]);e.telemetry.track({type:"STUDIO_EDIT_FLOATING_MENU_ACTION",runId:Ce,toolId:"studio.edit",action:r,changeType:O})},[j,de,e.telemetry,Ce,K]),Rt=i.useCallback(()=>{$&&($.value!==$.initialValue&&de(j),_(se?"selected":"idle"),ee(null))},[j,de,se,$]);i.useEffect(()=>{if(!se)return;const n=q.current.find(r=>r.id===se&&r.type==="watermark");n&&We({text:n.text,color:n.color,fontSize:n.fontSize,fontFamily:n.fontFamily,fontWeight:n.fontWeight,fontStyle:n.fontStyle,opacity:n.opacity,rotation:n.rotation,repeatEnabled:n.repeatEnabled,repeatCols:n.repeatCols,repeatRows:n.repeatRows,repeatGapX:n.repeatGapX,repeatGapY:n.repeatGapY})},[se,j]);const Le=async()=>{if(!g)return;const n=q.current,r=Ee&&Te?be:[g];let y=0,O=0;T(!0),_("saving"),f(null);const S=crypto.randomUUID();try{const Y=[],ce=[],oe=new Map;for(const w of r)try{const ue=w.page.fileId,je=w.page.thumbnailUrl,fe={id:crypto.randomUUID(),type:"COMMAND",payload:{type:"APPLY_STUDIO_TEXT_EDITS",payload:{fileId:w.page.fileId,pageIndex:w.page.pageIndex,elements:n}}},B=await e.workerOrchestrator.dispatch(fe);if(B.payload.type==="ERROR"){const xe=new Error(B.payload.payload.message);throw xe.code=B.payload.payload.code,xe}if(B.payload.type!=="STUDIO_TEXT_EDITS_APPLIED")throw new Error("Unexpected worker response for studio text edits");B.payload.payload.overflowDetected&&(y+=1),!B.payload.payload.trueReplaceApplied&&B.payload.payload.trueReplaceFallbackReason&&e.telemetry.track({type:"STUDIO_EDIT_GUARDRAIL",runId:S,toolId:"studio.edit.text",fileId:w.page.fileId,pageIndex:w.page.pageIndex,code:`STUDIO_TRUE_REPLACE_FALLBACK_${B.payload.payload.trueReplaceFallbackReason}`,message:"True replace fallback path used"});const He=B.payload.payload.redactVerify;if(He){const xe=Bt(He,S);Kt(e.telemetry,xe),oe.set(w.docId,Yt(oe.get(w.docId)??null,xe))}else oe.has(w.docId)||oe.set(w.docId,null);
1const zt=qt.getPdfPagePreview(e,B.payload.payload.outputId,w.page.pageIndex+1,{scale:2}),Ue=await Promise.race([zt,new Promise(xe=>setTimeout(()=>xe(null),8e3))]),Ve=(Ue==null?void 0:Ue.thumbnailUrl)??w.page.thumbnailUrl;k(w.docId,w.page.id,{fileId:B.payload.payload.outputId,pageIndex:w.page.pageIndex,thumbnailUrl:Ve}),ce.push({docId:w.docId,pageId:w.page.id,pageIndex:w.page.pageIndex,prevFileId:ue,prevThumbnailUrl:je,nextFileId:B.payload.payload.outputId,nextThumbnailUrl:Ve})}catch(ue){O+=1;const je=ue instanceof Error?ue.message:a.saveFailed,fe=ue,B=typeof fe.code=="string"?fe.code:void 0;B!=null&&B.startsWith("STUDIO_EDIT_")&&e.telemetry.track({type:"STUDIO_EDIT_GUARDRAIL",runId:S,toolId:"studio.edit.text",fileId:w.page.fileId,pageIndex:w.page.pageIndex,code:B,message:typeof fe.message=="string"?fe.message:je}),Y.push(je)}if(O>0&&O===r.length)throw new Error(Y[0]??a.saveFailed);for(const[w,ue]of oe)L(w,{lastRedactVerify:ue??void 0});_(O>0?"error":"saved"),ee(null),l(null),K([]),ye([[]]),he(0),ce.length>0&&an&&R({id:crypto.randomUUID(),type:"APPLY_TEXT_EDITS",timestamp:Date.now(),payload:{entries:ce}}),await ae(e.vfs,"edit_save",r.length>1?`Saved inline edits (${r.length} pages)`:"Saved inline edits"),e.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:S,toolId:"studio.edit.text",action:"apply",scope:r.length>1?"selection":"single",pagesTotal:r.length,pagesSucceeded:r.length-O,pagesFailed:O,overflowCount:y,message:O>0?a.partialSaveFailed:a.changesApplied});const ge=Array.from(oe.values()).some(w=>w&&!w.passed);if(r.length>1){const w=`${a.changesAppliedSelection} ${r.length}`,ue=y>0?` ${a.overflowWarning}`:"",je=O>0?` ${a.partialSaveFailed}`:"";f(`${w}.${ue}${je}${ge?" Redaction checks incomplete — PDF download allowed, certificate only when all pass.":""}`.trim())}else{const w=y>0?`${a.changesApplied} ${a.overflowWarning}`:a.changesApplied;f(ge?`${w} Redaction checks incomplete — PDF download allowed, certificate only when all pass.`:w)}}catch(Y){_("error");const ce=Y instanceof Error?Y.message:a.saveFailed,oe=O>0?O:r.length,ge=Y,w=typeof ge.code=="string"?ge.code:void 0;w!=null&&w.startsWith("STUDIO_EDIT_")&&e.telemetry.track({type:"STUDIO_EDIT_GUARDRAIL",runId:S,toolId:"studio.edit.text",fileId:g.page.fileId,pageIndex:g.page.pageIndex,code:w,message:typeof ge.message=="string"?ge.message:ce}),e.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:S,toolId:"studio.edit.text",action:"apply",scope:r.length>1?"selection":"single",pagesTotal:r.length,pagesSucceeded:Math.max(0,r.length-oe),pagesFailed:oe,overflowCount:y,message:ce}),f(`${a.saveFailed}${ce?` ${ce}`:""}`.trim())}finally{T(!1)}},Ot=i.useCallback(async n=>{const r=(te==null?void 0:te.id)??(g==null?void 0:g.docId)??null,y=r?o.find(S=>S.id===r)??null:null,O=Array.from(new Set(((y==null?void 0:y.pages)??[]).map(S=>S.fileId)));if(O.length===0){f(a.saveFailed);return}T(!0);try{const S=await e.runner.execute("protect-pdf",{inputIds:O,options:{...n,studioContext:{mode:"document",documentId:r,selectedPages:[]}}},sn);if(S.type==="TOOL_ERROR"){if(S.code===Gt){f(Xt);return}f(S.message||a.saveFailed);return}if(S.type==="TOOL_ACCESS_DENIED"){f(S.details??S.reason);return}s("/studio",{state:{source:"studio",studioToolResult:{toolId:"protect-pdf",outputIds:S.outputIds,studioContext:{mode:"document",documentId:r,selectedPages:[]}},studioReturnContext:{activeDocumentId:p,selection:d,interactionMode:m,viewScale:C,viewPosition:x}}})}finally{T(!1)}},[te==null?void 0:te.id,p,o,m,s,g==null?void 0:g.docId,e.runner,d,x,C,a.saveFailed]),Lt=i.useCallback(()=>{{const n=J();if(!n||U)return;const r=crypto.randomUUID();T(!0);try{Xe.undo(n,k),ne(n),f(a.saveReverted),_("saved"),e.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:r,toolId:"studio.edit.text",action:"undo",scope:n.payload.entries.length>1?"selection":"single",pagesTotal:n.payload.entries.length,pagesSucceeded:n.payload.entries.length,pagesFailed:0,message:a.saveReverted})}finally{T(!1)}}},[J,ne,W,D,U,e,a.saveReverted,k]),Ut=i.useCallback(()=>{{const n=Q();if(!n||U)return;R(n);const r=crypto.randomUUID();T(!0);try{Xe.execute(n,k),f(n.payload.entries.length>1?`${a.changesAppliedSelection} ${n.payload.entries.length}.`:a.changesApplied),_("saved"),e.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:r,toolId:"studio.edit.text",action:"redo",scope:n.payload.entries.length>
11?"selection":"single",pagesTotal:n.payload.entries.length,pagesSucceeded:n.payload.entries.length,pagesFailed:0,message:n.payload.entries.length>1?`${a.changesAppliedSelection} ${n.payload.entries.length}.`:a.changesApplied})}finally{T(!1)}}},[Q,R,G,P,e,a.changesApplied,a.changesAppliedSelection,k]);i.useEffect(()=>{const n=r=>{const y=r.target;if(y&&(y.tagName==="INPUT"||y.tagName==="TEXTAREA"||y.isContentEditable))return;const S=r.key.toLowerCase();(r.key==="Delete"||r.key==="Backspace")&&!$?$e():(r.ctrlKey||r.metaKey)&&S==="z"?(r.preventDefault(),r.shiftKey?Oe():Re()):(r.ctrlKey||r.metaKey)&&S==="s"?(r.preventDefault(),!U&&(Z>0||ke)&&Le()):!r.ctrlKey&&!r.metaKey&&!r.shiftKey&&(S==="v"||S==="t"?Se("text"):S==="a"?Se("annotate"):S==="w"&&Se("watermark"))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[$e,Oe,Re,Le,U,Z,ke,$,Se]);const _t=i.useMemo(()=>Jt()?tn(Ne,j):Ne,[j,Ne]);return{runId:Ce,navigate:s,tool:le,setTool:Se,elements:j,setElements:K,pushHistory:de,undo:Re,redo:Oe,history:pe,historyIndex:Z,selectedElementId:se,setSelectedElementId:l,handleElementAction:Dt,message:b,setMessage:f,isApplying:U,textEditor:$,setTextEditor:ee,commitTextEditor:Rt,inlineUiState:E,setInlineUiState:_,textLayerSpans:_t,isSelectMode:Qe,setIsSelectMode:et,textSelectionMode:tt,setTextSelectionMode:nt,textInteractionMode:Ie,setTextInteractionMode:me,textAddMode:N,setTextAddMode:re,annotateColor:pt,setAnnotateColor:ut,annotateMode:mt,setAnnotateMode:ht,annotateStrokeWidth:gt,setAnnotateStrokeWidth:ft,signMode:at,setSignMode:st,signTypedValue:Ae,setSignTypedValue:ot,signTypedFontSize:Pe,setSignTypedFontSize:it,signDrawColor:lt,setSignDrawColor:rt,signDrawStrokeWidth:dt,setSignDrawStrokeWidth:ct,shapePreset:xt,setShapePreset:yt,shapeColor:bt,setShapeColor:St,shapeStrokeWidth:vt,setShapeStrokeWidth:jt,watermarkOptions:kt,setWatermarkOptions:We,applyToSelection:Ee,setApplyToSelection:Fe,hasDirtyChanges:ke,canApplyToSelection:Te,applyChanges:Le,undoLastSave:Lt,redoLastSave:Ut,isFormsComposerOpen:wt,setFormsComposerOpen:It,whiteoutColor:I,setWhiteoutColor:M,textStyle:Nt,setTextStyle:Ct,protectOptions:Et,setProtectOptions:Tt,addTypedSignature:De,addImageSignature:Mt,insertTypedSignature:At,addFormField:Pt,protectAndReturnToStudio:Ot,clearEditSession:h,preview:g,selectedPages:be,activeDocument:te,saveUndoStack:H,saveRedoStack:V}}const dn=[{id:"text",icon:"text",label:"Text"},{id:"annotate",icon:"highlighter",label:"Annotate"},{id:"sign",icon:"signature",label:"Sign"},{id:"whiteout",icon:"eraser",label:"Whiteout"},{id:"watermark",icon:"stamp",label:"Watermark"},{id:"forms",icon:"file-input",label:"Forms"},{id:"protect",icon:"lock",label:"Protect"}];function cn({ui:a,tool:s,textInteractionMode:e,onSelectTool:o,onToggleTextInteractionMode:d}){return t.jsxs("div",{className:"studio-editor-left-toolbar",children:[t.jsx("div",{className:"studio-editor-toolbar-label",children:"Tools"}),dn.map(({id:p,icon:m,label:C})=>t.jsxs("button",{type:"button",className:`studio-edit-tool-btn${s===p?" active":""}`,onClick:()=>o(p),title:C,"aria-label":C,"aria-pressed":s===p,children:[t.jsx(F,{name:m,size:16}),t.jsx("span",{style:{fontSize:9,lineHeight:1,letterSpacing:.1,marginTop:1},children:C})]},p)),s==="text"&&t.jsxs(t.Fragment,{children:[t.jsx("div",{style:{width:28,height:1,background:"var(--border)",margin:"3px auto"}}),t.jsxs("button",{type:"button",className:`studio-edit-tool-btn${e==="move"?" active":""}`,onClick:d,title:a.moveText,"aria-label":a.moveText,"aria-pressed":e==="move",children:[t.jsx(F,{name:"move",size:16}),t.jsx("span",{style:{fontSize:9,lineHeight:1},children:"Move"})]})]})]})}const pn=["#b9f86a","#fff176","#ffb74d","#ff8a65","#ff80ab","#80deea"];function un({mode:a,shapePreset:s,strokeWidth:e,color:o,onColorChange:d,onModeChange:p,onShapePresetChange:m,onStrokeWidthChange:C,onInsertPen:x,onClearPen:k,hasPendingPenDraft:L=!1,onDelete:v,onDuplicate:h}){return t.jsxs("div",{className:"ep",children:[t.jsx("div",{className:"ep-section-title",children:"Annotate"}),t.jsx("div",{className:"ep-seg",children:["highlight","pen","shapes"].map(c=>t.jsx("button",{type:"button",className:`ep-seg-btn${a===c?" ep-seg-btn--on":""}`,onClick:()=>p(c),children:c==="highlight"?"Marker":c==="pen"?"Pen":"Shapes"},c))}),a==="shapes"&&t.jsx("div",{className:"ep-seg",children:["rectangle","line","arrow"].map(c=>t.jsx("button",{type:"button",className:`ep-seg-btn${s===c?" ep-seg-btn--on":""}`,onClick:()=>m(c),children:c.charAt(0).toUpperCase()+c.slice(1)},c))}),a==="highlight"&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"ep-section-title",style:{marginTop:4},children:"Color"}),t.jsx("div",{className:"ep-swatches",children:pn.map(c=>t.jsx("button",{type:"button",className:`ep-swatch${o.toLowerCase()===c.toLowerCase()?" ep-swatch--on":""}`,style:{background:c},onClick:()=>d(c),title:c},c))})]}),t.jsxs("label",{className:"ep-color-row",children:[t.jsx("div",{className:"ep-color-preview",style:{background:o},children:t.jsx("input",{type:"color",value:o,onChange:c=>d(c.target.value)})}),t.jsx("span",{className:"ep-color-value",children:o}),t.jsx("span",{className:"ep-color-name",children:"Custom"})]}),(a==="pen"||a==="shapes")&&t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:a==="pen"?"Pen size":"Thickness"}),t.jsxs("div",{className:"ep-row",style:{gap:8},children:[t.jsx("input",{type:"range",min:1,max:18,step:1,value:e,onCh
1ange:c=>C(Math.max(1,Math.min(18,Number(c.target.value)||5))),className:"ep-range"}),t.jsx("span",{className:"ep-range-val",children:e})]})]}),a==="pen"&&t.jsxs("div",{className:"ep-row",style:{marginTop:4},children:[t.jsx("button",{type:"button",className:"ep-action-btn ep-action-btn--primary",onClick:x,disabled:!L,style:{flex:1},children:"Insert"}),t.jsx("button",{type:"button",className:"ep-action-btn",onClick:k,disabled:!L,style:{flex:1},children:"Clear"})]}),(h||v)&&t.jsxs("div",{className:"ep-actions",children:[h&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:h,children:[t.jsx(F,{name:"copy",size:12})," Duplicate"]}),v&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:v,children:[t.jsx(F,{name:"x",size:12})," Delete"]})]})]})}const mn=[{type:"text",label:"Text"},{type:"multiline",label:"Multi"},{type:"checkbox",label:"Check"},{type:"radio",label:"Radio"},{type:"dropdown",label:"Select"}];function hn({onAddField:a,selectedField:s,onUpdateSelectedField:e,canvasWidth:o,canvasHeight:d,onDelete:p,onDuplicate:m}){const C=Math.max(1,Math.round(o)),x=Math.max(1,Math.round(d)),k=s?Math.max(1,Math.round(s.w*C)):0,L=s?Math.max(1,Math.round(s.h*x)):0,v=(s==null?void 0:s.formType)==="dropdown"?s.options&&s.options.length>0?s.options:["Option 1"]:[];return t.jsxs("div",{className:"ep",children:[t.jsx("div",{className:"ep-section-title",children:"Forms"}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Add field"}),t.jsx("div",{className:"ep-seg ep-seg--wrap",children:mn.map(({type:h,label:c})=>t.jsx("button",{type:"button",className:"ep-seg-btn",onClick:()=>a(h),children:c},h))})]}),s&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"ep-section-title",style:{marginTop:4},children:"Selected field"}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Name"}),t.jsx("input",{className:"ep-input",value:s.name,onChange:h=>e({name:h.target.value}),placeholder:"field_name"})]}),t.jsxs("div",{className:"ep-row",children:[t.jsxs("div",{className:"ep-field ep-field--grow",children:[t.jsx("span",{className:"ep-field-label",children:"Width px"}),t.jsx("input",{className:"ep-input ep-input--num",type:"number",min:12,max:C,value:k,onChange:h=>{const c=Number(h.target.value);Number.isFinite(c)&&e({w:Math.max(.02,Math.min(.95,c/C))})}})]}),t.jsxs("div",{className:"ep-field ep-field--grow",children:[t.jsx("span",{className:"ep-field-label",children:"Height px"}),t.jsx("input",{className:"ep-input ep-input--num",type:"number",min:12,max:Math.round(x*.6),value:L,onChange:h=>{const c=Number(h.target.value);Number.isFinite(c)&&e({h:Math.max(.02,Math.min(.6,c/x))})}})]})]}),s.formType==="dropdown"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Options count"}),t.jsx("input",{className:"ep-input ep-input--num",type:"number",min:1,max:50,value:v.length||1,onChange:h=>{const c=Math.max(1,Math.min(50,Math.round(Number(h.target.value)))),u=Array.from({length:c},(I,M)=>{var P;return((P=s.options)==null?void 0:P[M])??`Option ${M+1}`});e({options:u,defaultValue:u.includes(s.defaultValue)?s.defaultValue:u[0]??""})}})]}),v.map((h,c)=>t.jsxs("div",{className:"ep-field",children:[t.jsxs("span",{className:"ep-field-label",children:["Option ",c+1]}),t.jsx("input",{className:"ep-input",value:h,onChange:u=>{const M=v.map((P,W)=>W===c?u.target.value:P).map((P,W)=>P.trim()||`Option ${W+1}`);e({options:M,defaultValue:M.includes(s.defaultValue)?s.defaultValue:M[0]??""})}})]},c))]})]}),(m||p)&&t.jsxs("div",{className:"ep-actions",children:[m&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:m,children:[t.jsx(F,{name:"copy",size:12})," Duplicate"]}),p&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:p,children:[t.jsx(F,{name:"x",size:12})," Delete"]})]})]})}function gn({onOptionsChange:a,ui:s}){const[e,o]=i.useState(!0),[d,p]=i.useState(""),[m,C]=i.useState(""),[x,k]=i.useState(!1),[L,v]=i.useState(256),[h,c]=i.useState("business"),[u,I]=i.useState(!1),[M,P]=i.useState("full"),[W,D]=i.useState(!1),[G,X]=i.useState(!1),[H,V]=i.useState(!1),[R,J]=i.useState(!0),[ne,Q]=i.useState(!0),[ae,le]=i.useState(!1),ie=i.useMemo(()=>!e&&d.trim().length===0?s.protectPasswordRequired:null,[e,s.protectPasswordRequired,d]);i.useEffect(()=>{a({permissionsOnly:e,userPassword:e?"":d.trim(),ownerPassword:x?m.trim():"",keyLength:L,printing:M,copying:W,modifying:G,annotating:H,fillingForms:R,contentAccessibility:ne,documentAssembly:ae})},[H,ne,W,ae,R,L,G,a,m,e,M,x,d]);const Ie=N=>{c(N),N==="basic"?(P("full"),D(!0),X(!1),V(!0),J(!0),Q(!0),le(!1),v(128)):N==="business"?(P("full"),D(!1),X(!1),V(!1),J(!0),Q(!0),le(!1),v(256)):N==="confidential"&&(P("none"),D(!1),X(!1),V(!1),J(!1),Q(!0),le(!1),v(256))},me=()=>c("custom");return t.jsxs("div",{className:"ep",children:[t.jsx("div",{className:"ep-section-title",children:"Protect"}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Preset"}),t.jsx("div",{className:"ep-seg ep-seg--wrap",children:["basic","business","confidential"].map(N=>t.jsx("button",{type:"button",className:`ep-seg-btn${h===N?" ep-seg-btn--on":""}`,onClick:()=>Ie(N),children:N.charAt(0).toUpperCase()+N.slice(1)},N))})]}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Encryption"}),t.jsxs("select",{className:"ep-select",value:L,onChange:N=>
1{me(),v(Number(N.target.value)===128?128:256)},children:[t.jsx("option",{value:256,children:"AES-256"}),t.jsx("option",{value:128,children:"AES-128"})]})]}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Printing"}),t.jsxs("select",{className:"ep-select",value:M,onChange:N=>{me();const re=N.target.value;P(re==="none"||re==="low"?re:"full")},children:[t.jsx("option",{value:"full",children:"High resolution"}),t.jsx("option",{value:"low",children:"Low resolution"}),t.jsx("option",{value:"none",children:"No printing"})]})]}),t.jsx("div",{className:"ep-section-title",style:{marginTop:4},children:"Access"}),t.jsxs("div",{className:"ep-toggles",children:[t.jsxs("label",{className:"ep-toggle-row",children:[t.jsx("input",{type:"checkbox",checked:e,onChange:N=>{o(N.target.checked),N.target.checked&&p("")}}),t.jsx("span",{children:"Restrictions only (no password to open)"})]}),t.jsxs("label",{className:"ep-toggle-row",children:[t.jsx("input",{type:"checkbox",checked:x,onChange:N=>k(N.target.checked)}),t.jsx("span",{children:"Separate owner password"})]})]}),!e&&t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Open password"}),t.jsx("input",{type:"password",value:d,onChange:N=>p(N.target.value),placeholder:"Required to open",className:"ep-input"}),ie&&t.jsx("span",{style:{fontSize:11,color:"var(--red)"},children:ie})]}),x&&t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Owner password"}),t.jsx("input",{type:"password",value:m,onChange:N=>C(N.target.value),placeholder:"Required to change restrictions",className:"ep-input"})]}),t.jsx("button",{type:"button",className:"ep-action-btn",onClick:()=>I(N=>!N),children:u?"Hide advanced":"Advanced permissions"}),u&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"ep-section-title",children:"Permissions"}),t.jsx("div",{className:"ep-toggles",children:[{label:"Copy text",checked:W,onChange:D},{label:"Modify",checked:G,onChange:X},{label:"Annotate",checked:H,onChange:V},{label:"Fill forms",checked:R,onChange:J},{label:"Accessibility",checked:ne,onChange:Q},{label:"Assembly",checked:ae,onChange:le}].map(({label:N,checked:re,onChange:j})=>t.jsxs("label",{className:"ep-toggle-row",children:[t.jsx("input",{type:"checkbox",checked:re,onChange:z=>{me(),j(z.target.checked)}}),t.jsx("span",{children:N})]},N))})]})]})}function fn({options:a,onOptionsChange:s}){const e=(o,d)=>s({...a,[o]:d});return t.jsxs("div",{className:"ep",children:[t.jsx("div",{className:"ep-section-title",children:"Watermark"}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Text"}),t.jsx("input",{type:"text",value:a.text,onChange:o=>e("text",o.target.value),placeholder:"CONFIDENTIAL",className:"ep-input"})]}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Font"}),t.jsxs("select",{className:"ep-select",value:a.fontFamily,onChange:o=>e("fontFamily",o.target.value),children:[t.jsx("option",{value:"sora",children:"Helvetica"}),t.jsx("option",{value:"times",children:"Times"}),t.jsx("option",{value:"mono",children:"Courier"}),t.jsx("option",{value:"roboto",children:"Roboto"}),t.jsx("option",{value:"noto",children:"Noto Sans"}),t.jsx("option",{value:"noto-arabic",children:"Noto Arabic"}),t.jsx("option",{value:"noto-cjk",children:"Noto CJK"}),t.jsx("option",{value:"noto-devanagari",children:"Noto Devanagari"})]})]}),t.jsxs("div",{className:"ep-row",children:[t.jsxs("div",{className:"ep-field ep-field--grow",children:[t.jsx("span",{className:"ep-field-label",children:"Size"}),t.jsx("input",{type:"number",min:8,max:120,value:a.fontSize,onChange:o=>e("fontSize",Math.max(8,Math.min(120,Number(o.target.value)||30))),className:"ep-input ep-input--num"})]}),t.jsx("button",{type:"button",className:`ep-fmt-btn${a.fontWeight==="bold"?" ep-fmt-btn--on":""}`,onClick:()=>e("fontWeight",a.fontWeight==="bold"?"normal":"bold"),children:t.jsx("b",{children:"B"})}),t.jsx("button",{type:"button",className:`ep-fmt-btn${a.fontStyle==="italic"?" ep-fmt-btn--on":""}`,onClick:()=>e("fontStyle",a.fontStyle==="italic"?"normal":"italic"),children:t.jsx("i",{children:"I"})})]}),t.jsx("div",{className:"ep-section-title",style:{marginTop:4},children:"Appearance"}),t.jsxs("div",{className:"ep-row",children:[t.jsxs("div",{className:"ep-field ep-field--grow",children:[t.jsx("span",{className:"ep-field-label",children:"Opacity"}
1),t.jsx("input",{type:"number",min:.05,max:1,step:.05,value:a.opacity,onChange:o=>e("opacity",Math.max(.05,Math.min(1,Number(o.target.value)||.25))),className:"ep-input ep-input--num"})]}),t.jsxs("div",{className:"ep-field ep-field--grow",children:[t.jsx("span",{className:"ep-field-label",children:"Rotation°"}),t.jsx("input",{type:"number",min:-180,max:180,value:a.rotation,onChange:o=>e("rotation",Math.max(-180,Math.min(180,Number(o.target.value)||0))),className:"ep-input ep-input--num"})]})]}),t.jsxs("label",{className:"ep-color-row",children:[t.jsx("div",{className:"ep-color-preview",style:{background:a.color},children:t.jsx("input",{type:"color",value:a.color,onChange:o=>e("color",o.target.value)})}),t.jsx("span",{className:"ep-color-value",children:a.color}),t.jsx("span",{className:"ep-color-name",children:"Color"})]}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Repeat"}),t.jsxs("div",{className:"ep-seg",children:[t.jsx("button",{type:"button",className:`ep-seg-btn${a.repeatEnabled?" ep-seg-btn--on":""}`,onClick:()=>e("repeatEnabled",!0),children:"On"}),t.jsx("button",{type:"button",className:`ep-seg-btn${a.repeatEnabled?"":" ep-seg-btn--on"}`,onClick:()=>e("repeatEnabled",!1),children:"Off"})]})]})]})}const xn=["#ffffff","#f8f9fa","#f1f3f5","#fff8e1","#fef3c7","#000000"];function yn({color:a="#ffffff",onColorChange:s,onDelete:e,onDuplicate:o}){return t.jsxs("div",{className:"ep",children:[t.jsx("div",{className:"ep-section-title",children:"Whiteout"}),t.jsx("div",{className:"ep-section-title",style:{marginTop:4},children:"Color"}),t.jsx("div",{className:"ep-swatches",children:xn.map(d=>t.jsx("button",{type:"button",className:`ep-swatch${a.toLowerCase()===d.toLowerCase()?" ep-swatch--on":""}`,style:{background:d},onClick:()=>s(d),title:d},d))}),t.jsxs("label",{className:"ep-color-row",children:[t.jsx("div",{className:"ep-color-preview",style:{background:a},children:t.jsx("input",{type:"color",value:a,onChange:d=>s(d.target.value)})}),t.jsx("span",{className:"ep-color-value",children:a}),t.jsx("span",{className:"ep-color-name",children:"Custom"})]}),(o||e)&&t.jsxs("div",{className:"ep-actions",children:[o&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:o,children:[t.jsx(F,{name:"copy",size:12})," Duplicate"]}),e&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:e,children:[t.jsx(F,{name:"x",size:12})," Delete"]})]})]})}function Ze({label:a,value:s,onChange:e,allowTransparent:o=!1}){const d=s==="transparent"||s==="none"||s==="",p=d||!/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(s)?"#ffffff":s;return t.jsxs("label",{className:"ep-color-row",children:[t.jsx("div",{className:"ep-color-preview",style:{background:d?"repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 10px 10px":s},children:t.jsx("input",{type:"color",value:p,onChange:m=>e(m.target.value)})}),t.jsx("span",{className:"ep-color-value",children:d?"none":s}),t.jsx("span",{className:"ep-color-name",children:a}),o&&!d&&t.jsx("button",{type:"button",className:"ep-fmt-btn",style:{marginLeft:4,fontSize:10,padding:"2px 6px"},onClick:m=>{m.preventDefault(),e("transparent")},children:"Clear"})]})}function bn({addTextBoxLabel:a,addTextBoxActiveLabel:s,textAddMode:e,onToggleTextAddMode:o,fontFamily:d,fontSize:p,fontWeight:m,fontStyle:C,lineHeight:x,letterSpacing:k,color:L,backgroundColor:v,onStyleChange:h,onDelete:c,onDuplicate:u}){return t.jsxs("div",{className:"ep",children:[t.jsx("button",{type:"button",className:`ep-select${e?" ep-fmt-btn--on":""}`,onClick:o,style:{marginBottom:8,cursor:"pointer",fontWeight:e?600:400},children:e?s:a}),t.jsx("div",{className:"ep-section-title",children:"Typography"}),t.jsxs("select",{className:"ep-select",value:d,onChange:I=>h({fontFamily:I.target.value}),children:[t.jsx("option",{value:"roboto",children:"Roboto"}),t.jsx("option",{value:"noto",children:"Noto Sans"}),t.jsx("option",{value:"noto-arabic",children:"Noto Arabic"}),t.jsx("option",{value:"noto-cjk",children:"Noto CJK"}),t.jsx("option",{value:"noto-devanagari",children:"Noto Devanagari"}),t.jsx("option",{value:"sora",children:"Helvetica"}),t.jsx("option",{value:"times",children:"Times New Roman"}),t.jsx("option",{value:"mono",children:"Courier"})]}),t.jsxs("div",{className:"ep-row",children:[t.jsxs("div",{className:"ep-field ep-field--grow",children:[t.jsx("span",{className:"ep-field-label",children:"Size"}),t.jsx("input",{type:"number",min:8,max:96,value:p,onChange:I=>h({fontSize:Wt(Number(I.target.value)||16,8,96)}),className:"ep-input ep-input--num"})]}),t.jsx("button",{type:"button",className:`ep-fmt-btn${m==="bold"?" ep-fmt-btn--on":""}`,onClick:()=>
1h({fontWeight:m==="bold"?"normal":"bold"}),title:"Bold",children:t.jsx("b",{children:"B"})}),t.jsx("button",{type:"button",className:`ep-fmt-btn${C==="italic"?" ep-fmt-btn--on":""}`,onClick:()=>h({fontStyle:C==="italic"?"normal":"italic"}),title:"Italic",children:t.jsx("i",{children:"I"})})]}),t.jsx("div",{className:"ep-section-title",style:{marginTop:4},children:"Spacing"}),t.jsxs("div",{className:"ep-row",children:[t.jsxs("div",{className:"ep-field ep-field--grow",title:"Line height",children:[t.jsxs("span",{className:"ep-field-label",children:[t.jsx(F,{name:"move-vertical",size:11}),"Line"]}),t.jsx("input",{type:"number",min:.8,max:3,step:.1,value:x,onChange:I=>h({lineHeight:Number(I.target.value)||1.2}),className:"ep-input ep-input--num"})]}),t.jsxs("div",{className:"ep-field ep-field--grow",title:"Letter spacing",children:[t.jsxs("span",{className:"ep-field-label",children:[t.jsx(F,{name:"move-horizontal",size:11}),"Letter"]}),t.jsx("input",{type:"number",min:-2,max:10,step:.5,value:k,onChange:I=>h({letterSpacing:Number(I.target.value)||0}),className:"ep-input ep-input--num"})]})]}),t.jsx("div",{className:"ep-section-title",style:{marginTop:4},children:"Color"}),t.jsxs("div",{className:"ep-colors",children:[t.jsx(Ze,{label:"Text",value:L,onChange:I=>h({color:I})}),t.jsx(Ze,{label:"BG",value:v,allowTransparent:!0,onChange:I=>h({backgroundColor:I})})]}),(u||c)&&t.jsxs("div",{className:"ep-actions",children:[u&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:u,children:[t.jsx(F,{name:"copy",size:12}),"Duplicate"]}),c&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:c,children:[t.jsx(F,{name:"x",size:12}),"Delete"]})]})]})}function Sn(a){return new Promise((s,e)=>{const o=new FileReader;o.onload=()=>s(String(o.result||"")),o.onerror=()=>e(new Error("Failed to read file")),o.readAsDataURL(a)})}function vn(a){return new Promise((s,e)=>{const o=new Image;o.onload=()=>s({width:o.naturalWidth||o.width,height:o.naturalHeight||o.height}),o.onerror=()=>e(new Error("Failed to decode image")),o.src=a})}function jn({mode:a,typedValue:s,typedFontSize:e,drawColor:o,drawStrokeWidth:d,onModeChange:p,onTypedValueChange:m,onTypedFontSizeChange:C,onDrawColorChange:x,onDrawStrokeWidthChange:k,onInsertTyped:L,onInsertDrawn:v,onClearDrawn:h,onUploadImage:c,hasPendingDrawnSignature:u=!1,onDelete:I,onDuplicate:M}){const P=i.useRef(null),W=async D=>{var X;const G=(X=D.target.files)==null?void 0:X[0];if(D.target.value="",!!G)try{const H=await Sn(G);if(!H.startsWith("data:image/"))return;const V=await vn(H);c({dataUrl:H,width:V.width,height:V.height})}catch{}};return t.jsxs("div",{className:"ep",children:[t.jsx("div",{className:"ep-section-title",children:"Sign"}),t.jsxs("div",{className:"ep-seg",children:[t.jsx("button",{type:"button",className:`ep-seg-btn${a==="type"?" ep-seg-btn--on":""}`,onClick:()=>p("type"),children:"Type"}),t.jsx("button",{type:"button",className:`ep-seg-btn${a==="draw"?" ep-seg-btn--on":""}`,onClick:()=>p("draw"),children:"Draw"})]}),a==="type"?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Signature text"}),t.jsx("input",{type:"text",value:s,onChange:D=>m(D.target.value),placeholder:"Your name",className:"ep-input"})]}),t.jsx("div",{className:"ep-row",children:t.jsxs("div",{className:"ep-field ep-field--grow",children:[t.jsx("span",{className:"ep-field-label",children:"Size"}),t.jsx("input",{type:"number",min:12,max:96,value:e,onChange:D=>C(Math.max(12,Math.min(96,Number(D.target.value)||30))),className:"ep-input ep-input--num"})]})}),t.jsx("button",{type:"button",className:"ep-action-btn ep-action-btn--primary",onClick:L,style:{marginTop:4},children:"Insert signature"})]}):t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"ep-color-row",children:[t.jsx("div",{className:"ep-color-preview",style:{background:o},children:t.jsx("input",{type:"color",value:o,onChange:D=>x(D.target.value)})}),t.jsx("span",{className:"ep-color-value",children:o}),t.jsx("span",{className:"ep-color-name",children:"Color"})]}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Pen size"}),t.jsxs("div",{className:"ep-row",style:{gap:8},children:[t.jsx("input",{type:"range",min:1,max:12,step:1,value:d,onChange:D=>k(Math.max(1,Math.min(12,Number(D.target.value)||3))),className:"ep-range"}),t.jsx("span",{className:"ep-range-val",children:d})]})]}),t.jsx("p",{style:{fontSize:11,color:"var(--text-dim)",margin:0},children:"Draw directly on the page"}),t.jsxs("div",{className:"ep-row",style:{marginTop:4},children:[t.jsx("button",{type:"button",className:"ep-action-btn ep-action-btn--primary",onClick:v,disabled:!u,style:{flex:1},children:"Insert"}),t.jsx("button",{type:"button",className:"ep-action-btn",onClick:h,disabled:!u,style:{flex:1},children:"Clear"})]})]}),t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:()=>{var D;return(D=P.current)==null?void 0:D.click()},children:[t.jsx(F,{name:"upload",size:12}),"Upload image"]}),t.jsx("input",{ref:P,type:"file",accept:"image/png,image/jpeg,image/webp,image/gif",style:{display:"none"},"aria-hidden":"true",tabIndex:-1,onChange:W}),(M||I)&&t.jsxs("div",{className:"ep-actions",children:[M&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:M,children:[t.jsx(F,{name:"copy",size:12})," Duplicate"]}),I&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:I,children:[t.jsx(F,{name:"x",size:12})," Delete"]})]})]})}const wn=.35,In=6,Me=1.25;function we(a){return Math.min(In,Math.max(wn,a))}function Nn(a,s=1){const{runtime:e}=Je(),[o,d]=i.useState(s),p=i.useRef(null),m=i.useCallback((h,c,u,I="button")=>{if(!p.current)return;const M=p.current,P=M.getBoundingClientRect(),W=h-P.left,D=c-P.top,G=o,X=u==="in"?Me:1/Me,H=we(G*X);if(Math.abs(H-G)<1e-4)return;const V=M.scrollLeft,R=M.scrollTop,J=(W+V)/G,ne=(D+R)/G,Q=J*H-W,ae=ne*H-D;d(H),e.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:I,scaleLevel:H}),requestAnimationFrame(()=>{p.current&&(p.current.scrollLeft=Q,p.current.scrollTop=ae)})},[o,e.telemetry]),C=i.useCallback((h,c)=>{if(h!==void 0&&c!==void 0)m(h,c,"in");else if(p.current){const u=p.current.getBoundingClientRect();m(u.left+u.width/2,u.top+u.height/2,"in")}else d(u=>we(u*Me))},[m]),x=i.useCallback((h,c)=>{if(h!==void 0&&c!==void 0)m(h,c,"out");else if(p.current){const u=p.current.getBoundingClientRect();m(u.left+u.width/2,u.top+u.height/2,"out")}else d(u=>we(u/Me))},[m]),k=i.useCallback((h,c,u=48)=>{if(!p.current)return;const I=p.current.getBoundingClientRect(),M=Math.max(1,I.width-u*2),P=Math.max(1,I.height-u*2),W=we(Math.min(M/h,P/c));d(W),e.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:"preset",preset:"fitPage",scaleLevel:W})},[e.telemetry,a]),L=i.useCallback((h,c=48)=>{if(!p.current)return;const u=p.current.getBoundingClientRect(),I=Math.max(1,u.width-c*2),M=we(I/h);d(M),e.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:"preset",preset:"fitWidth",scaleLevel:M})},[e.telemetry,a]),v=i.useCallback(()=>{const h=we(1);d(h),e.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:"preset",preset:"100",scaleLevel:h})},[e.telemetry,a]);return{zoomLevel:o,setZoomLevel:d,containerRef:p,zoomIn:C,zoomOut:x,zoomAtScreenPoint:m,fitToPage:k,fitToWidth:L,zoomToHundred:v}}function Ln({onClose:a}={}){var ye,Z,he,se;const s=i.useMemo(()=>$t(),[]),e=rn(s),o=Nn(e.runId||"unknown",1),d=i.useRef(null),p=i.useRef(null),m=i.useRef(null),C=i.useRef(null),[x,k]=i.useState({width:620,height:840}),[L,v]=i.useState(!1),[h,c]=i.useState(!1),[u,I]=i.useState(null),M=e.tool!==null&&["text","forms","sign","protect","watermark","whiteout","annotate"].includes(e.tool);i.useEffect(()=>{if(!e.message)return;const l=window.setTimeout(()=>{e.setMessage(null)},5e3);return()=>{window.clearTimeout(l)}},[e.message,e.setMessage]),i.useEffect(()=>{e.preview||(e.clearEditSession(),a?a():e.navigate("/studio"))},[e.clearEditSession,e.navigate,e.preview,a]),i.useEffect(()=>{var f;const l=(f=e.preview)==null?void 0:f.page.thumbnailUrl;if(!l){k({width:620,height:840});return}const b=new Image;b.onload=()=>
1{const U=b.naturalWidth||620,T=b.naturalHeight||840,E=Math.min(620/U,840/T),_=Math.max(240,Math.round(U*E)),Ne=Math.max(320,Math.round(T*E));k({width:_,height:Ne})},b.onerror=()=>{k({width:620,height:840})},b.src=l},[(ye=e.preview)==null?void 0:ye.page.thumbnailUrl]),i.useEffect(()=>{var U;const l=(U=e.preview)==null?void 0:U.page.id;if(!l){C.current=null;return}const b=`${l}:${x.width}`;if(C.current===b)return;let f=window.requestAnimationFrame(()=>{o.fitToWidth(x.width),C.current=b});return()=>{window.cancelAnimationFrame(f)}},[x.width,(Z=e.preview)==null?void 0:Z.page.id,o]);const P=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="form-field")??null:null,W=l=>{if(!P)return;const b=e.elements.map(f=>f.id===P.id&&f.type==="form-field"?{...f,...l}:f);e.setElements(b),e.pushHistory(b)},D=((he=e.protectOptions)==null?void 0:he.permissionsOnly)===!0,G=typeof((se=e.protectOptions)==null?void 0:se.userPassword)=="string"?e.protectOptions.userPassword:"",X=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="watermark")??null:null,H=l=>{if(e.setWatermarkOptions(l),!X)return;const b=e.elements.map(f=>f.id===X.id&&f.type==="watermark"?{...f,...l}:f);e.setElements(b),e.pushHistory(b)},V=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="image"):void 0,R=(V==null?void 0:V.signatureSource)==="typed"&&V.typedSignatureMeta?V:void 0,J=e.historyIndex>0||e.hasDirtyChanges||L||h,ne=i.useCallback(()=>{e.tool==="sign"&&e.signMode==="draw"&&_e.flushSync(()=>{var l;(l=m.current)==null||l.commitPendingSignDraft()})},[e.signMode,e.tool]),Q=i.useCallback(()=>{e.tool==="annotate"&&e.annotateMode==="pen"&&_e.flushSync(()=>{var l;(l=m.current)==null||l.commitPendingAnnotatePenDraft()})},[e.annotateMode,e.tool]),ae=i.useCallback(()=>{ne(),Q(),e.applyChanges()},[Q,ne,e.applyChanges]),le=i.useCallback(()=>{if(e.hasDirtyChanges){I(()=>()=>{e.clearEditSession(),a?a():e.navigate("/studio")});return}e.clearEditSession(),a?a():e.navigate("/studio")},[e,a,s.unsavedConfirm]);if(i.useEffect(()=>{const l=b=>{const f=b.key.toLowerCase();!(b.ctrlKey||b.metaKey)||f!=="s"||e.tool==="protect"||e.isApplying||!J||(b.preventDefault(),b.stopPropagation(),ae())};return window.addEventListener("keydown",l,!0),()=>window.removeEventListener("keydown",l,!0)},[e.isApplying,e.tool,ae,J]),i.useEffect(()=>{if(e.tool!=="sign"||e.signMode!=="type"||!(R!=null&&R.typedSignatureMeta))return;const l=R.typedSignatureMeta,b=R.w/Math.max(1e-4,.28),f=Math.max(12,Math.min(96,Math.round(l.baseFontSize*b)));f!==e.signTypedFontSize&&e.setSignTypedFontSize(f)},[e,R]),!e.preview)return null;const ie=x.width*o.zoomLevel,Ie=x.height*o.zoomLevel,me=40,N=Math.max(x.width,ie)+me*2,re=Math.max(x.height,Ie)+me*2,j=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="text"):void 0,z=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="rect"):void 0,q=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="stroke"):void 0,pe=e.tool==="text"?t.jsx(bn,{title:s.text,addTextBoxLabel:s.addTextBox,addTextBoxActiveLabel:s.addTextBoxActive,textAddMode:e.textAddMode,onToggleTextAddMode:()=>e.setTextAddMode(!e.textAddMode),fontFamilyLabel:s.textFontFamily,fontSizeLabel:s.textFontSize,textColorLabel:s.textColor,bgColorLabel:s.textBackgroundColor,fontFamily:(j==null?void 0:j.fontFamily)??e.textStyle.fontFamily,fontSize:(j==null?void 0:j.fontSize)??e.textStyle.fontSize,fontWeight:(j==null?void 0:j.fontWeight)??e.textStyle.fontWeight,fontStyle:(j==null?void 0:j.fontStyle)??e.textStyle.fontStyle,lineHeight:(j==null?void 0:j.lineHeight)??e.textStyle.lineHeight,letterSpacing:(j==null?void 0:j.letterSpacing)??e.textStyle.letterSpacing,color:(j==null?void 0:j.color)??e.textStyle.color,backgroundColor:(()=>{const l=`${e.selectedElementId}_bg`,b=e.elements.find(f=>f.id===l&&f.type==="rect");return(b==null?void 0:b.fill)??e.textStyle.backgroundColor})(),onStyleChange:l=>{if(e.selectedElementId){if(e.handleElementAction(e.selectedElementId,"update",l),l.backgroundColor!==void 0){const b=String(l.backgroundColor),f=e.selectedElementId,U=`${f}_bg`,T=e.elements.find(E=>E.id===f&&E.type==="text"),$=e.elements.some(E=>E.id===U&&E.type==="rect");if(!(b.trim()!==""&&b!=="transparent"&&b!=="none"))$&&e.setElements(e.elements.filter(E=>E.id!==U));else if($)e.setElements(e.elements.map(E=>E.id===U&&E.type==="rect"?{...E,fill:b}:E));else if(T){const E=Math.min(.0025,Math.max(8e-4,T.w*.03)),_=Math.min(9e-4,Math.max(3e-4,T.h*.04));e.setElements([...e.elements,{id:U,type:"rect",x:Math.max(0,T.x-E),y:Math.max(0,T.y-_),w:T.w+E*2,h:T.h+_*2,fill:b,stroke:"transparent",strokeWidth:0,opacity:1}])}}}else e.setTextStyle({...e.textStyle,...l})},onDelete:e.selectedElementId?()=>{const l=`${e.selectedElementId}_bg`;if(e.elements.some(f=>f.id===l)){const f=e.elements.filter(U=>U.id!==e.selectedElementId&&U.id!==l);e.setElements(f),e.pushHistory(f),e.setSelectedElementId(null)}else e.handleElementAction(e.selectedElementId,"delete")}:void 0,onDuplicate:e.selectedElementId?()=>{const l=e.elements.find($=>
1$.id===e.selectedElementId);if(!l)return;const b=crypto.randomUUID(),f="x"in l?l.x+.05:.05,U="y"in l?l.y+.05:.05,T=[...e.elements,{...l,id:b,x:f,y:U}];e.setElements(T),e.pushHistory(T),e.setSelectedElementId(b)}:void 0}):e.tool==="forms"?t.jsx(hn,{onAddField:e.addFormField,selectedField:P,onUpdateSelectedField:W,canvasWidth:x.width,canvasHeight:x.height,onDelete:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"delete"):void 0,onDuplicate:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"duplicate"):void 0}):e.tool==="sign"?t.jsx(jn,{title:s.sign,mode:e.signMode,typedValue:e.signTypedValue,typedFontSize:e.signTypedFontSize,drawColor:e.signDrawColor,drawStrokeWidth:e.signDrawStrokeWidth,onModeChange:e.setSignMode,onTypedValueChange:e.setSignTypedValue,onTypedFontSizeChange:l=>{const b=Math.max(12,Math.min(96,Math.round(l||30)));if(e.signMode==="type"&&(R!=null&&R.typedSignatureMeta)){const f=Math.max(12,Math.min(96,Math.round(e.signTypedFontSize||30))),U=b/f,T=Math.max(.05,R.w/Math.max(.01,R.h)),$=Math.max(.04,1-R.x),ee=Math.max(.02,1-R.y);let E=Math.max(.04,R.w*U),_=E/T;_>ee&&(_=ee,E=_*T),E>$&&(E=$,_=E/T),_<.02&&(_=.02,E=_*T),E<.04&&(E=.04,_=E/T),e.handleElementAction(R.id,"update",{w:E,h:_})}e.setSignTypedFontSize(b)},onDrawColorChange:e.setSignDrawColor,onDrawStrokeWidthChange:e.setSignDrawStrokeWidth,onInsertTyped:e.insertTypedSignature,onInsertDrawn:()=>{ne()},onClearDrawn:()=>{var l;(l=m.current)==null||l.clearPendingSignDraft()},onUploadImage:e.addImageSignature,hasPendingDrawnSignature:L,onDelete:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"delete"):void 0,onDuplicate:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"duplicate"):void 0}):e.tool==="protect"?t.jsx(gn,{ui:s,onOptionsChange:e.setProtectOptions}):e.tool==="watermark"?t.jsx(fn,{options:e.watermarkOptions,onOptionsChange:H}):e.tool==="whiteout"?t.jsx(yn,{title:s.whiteout,customColorLabel:s.whiteoutCustomColor,color:(z==null?void 0:z.fill)??e.whiteoutColor,onColorChange:l=>{z?e.handleElementAction(z.id,"update",{fill:l}):e.setWhiteoutColor(l)},onDelete:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"delete"):void 0,onDuplicate:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"duplicate"):void 0}):e.tool==="annotate"?t.jsx(un,{title:s.annotate,highlightLabel:s.annotateHighlight,markerLabel:s.annotateMarker,penLabel:s.annotatePen,shapesLabel:s.shapes,shapeLabel:s.shapeRectangle,lineLabel:s.shapeLine,arrowLabel:s.shapeArrow,shapeThicknessLabel:s.shapeThickness,penSizeLabel:s.annotatePenSize,customColorLabel:s.annotateCustomColor,color:z?z.fill||z.stroke:q?q.color:e.annotateMode==="shapes"?e.shapeColor:e.annotateColor,mode:e.annotateMode,shapePreset:e.shapePreset,strokeWidth:z?z.strokeWidth:q?q.width:e.annotateMode==="shapes"?e.shapeStrokeWidth:e.annotateStrokeWidth,onColorChange:l=>{if(z){e.handleElementAction(z.id,"update",{fill:z.fill!=="transparent"?l:"transparent",stroke:z.stroke!=="transparent"?l:"transparent"});return}if(q){e.handleElementAction(q.id,"update",{color:l});return}if(e.annotateMode==="shapes"){e.setShapeColor(l);return}e.setAnnotateColor(l)},onModeChange:e.setAnnotateMode,onShapePresetChange:e.setShapePreset,onStrokeWidthChange:l=>{if(z){e.handleElementAction(z.id,"update",{strokeWidth:l});return}if(q){e.handleElementAction(q.id,"update",{width:l});return}if(e.annotateMode==="shapes"){e.setShapeStrokeWidth(l);return}e.setAnnotateStrokeWidth(l)},onInsertPen:()=>{Q()},onClearPen:()=>{var l;(l=m.current)==null||l.clearPendingAnnotatePenDraft()},hasPendingPenDraft:h,onDelete:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"delete"):void 0,onDuplicate:e.selectedElementId?()=>e.handleElementAction(e.selectedElementId,"duplicate"):void 0}):null;return t.jsxs(t.Fragment,{children:[t.jsxs("section",{className:"studio-edit-shell",translate:"no",style:{display:"flex",flexDirection:"column",height:"100%"},children:[t.jsxs("div",{className:"studio-edit-meta",children:[t.jsxs("button",{type:"button",className:"studio-edit-back-btn",onClick:le,title:s.backToCanvas,children:[t.jsx(F,{name:"chevron-left",size:16}),t.jsx("span",{children:s.backToCanvas})]}),t.jsx("span",{className:"studio-viewport-bar-divider"}),t.jsx("button",{type:"button","data-testid":"studio-edit-undo-btn",className:"studio-edit-btn-cancel",onClick:e.undo,disabled:e.isApplying||e.historyIndex<=0,title:s.undo,style:{padding:"4px 8px"},children:s.undo}),t.jsx("button",{type:"button","data-testid":"studio-edit-redo-btn",className:"studio-edit-btn-cancel",onClick:e.redo,disabled:e.isApplying||e.historyIndex>=e.history.length-1,title:s.redo,style:{padding:"4px 8px"},children:s.redo}),t.jsx("span",{className:"studio-viewport-bar-divider"}),t.jsx("span",{className:"studio-edit-page-badge",children:e.preview.docName}),t.jsx("div",{style:{flex:1}}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:2},children:[t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>o.zoomOut(),title:"Zoom Out",children:t.jsx(F,{name:"minus",size:13})}),t.jsxs("span",{style:{fontSize:12,minWidth:40,textAlign:"center",color:"var(--text-muted)",fontVariantNumeric:"tabular-nums"},children:[Math.round(o.zoomLevel*100),"%"]}),t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>o.zoomIn(),title:"Zoom In",children:t.jsx(F,{name:"plus",size:13})}),t.jsx("span",{className:"studio-viewport-bar-divider"}),t.jsx("button",{type:"button",className:"studio-floating-btn",style:{padding:"0 8px",width:"auto"},onClick:()=>o.zoomToHundred(),title:"100%",children:"1:1"}),t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>o.fitToPage(x.width,x.height),title:"Fit to Page",children:t.jsx(F,{name:"maximize",size:13})}),t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>o.fitToWidth(x.width),title:"Fit to Width",children:t.jsx(F,{name:"move-horizontal",size:13})})]}),e.saveUndoStack.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"studio-viewport-bar-divider"}),t.jsx("button",{type:"button",className:"studio-edit-btn-cancel",onClick:e.undoLastSave,disabled:e.isApplying,"aria-label":s.undoSave,style:{padding:"4px 10px"},children:s.undoSave})]}),e.saveRedoStack.length>0&&t.jsx("button",{type:"button",className:"studio-edit-btn-cancel",onClick:e.redoLastSave,disabled:e.isApplying,"aria-label":s.redoSave,style:{padding:"4px 10px"},children:s.redoSave})]}),t.jsxs("div",{className:"studio-edit-workspace-body",style:{"--studio-edit-workspace-columns":M?"88px 340px minmax(0, 1fr)":"88px minmax(0, 1fr)"},children:[t.jsx("div",{className:"studio-edit-tool-rail",children:t.jsx(cn,{ui:s,tool:e.tool,textInteractionMode:e.textInteractionMode,onSelectTool:e.setTool,onToggleTextInteractionMode:()=>{e.setTextInteractionMode(e.textInteractionMode==="move"?"edit":"move")}})}),pe&&t.jsx("div",{className:"studio-edit-settings-rail",children:pe}),t.jsx("div",{className:"studio-edit-canvas-stage",style:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},children:t.jsx("div",{ref:o.containerRef,className:"studio-edit-canvas-wrap custom-scrollbar",style:{flex:1,overflow:"auto",width:"100%",display:"flex",justifyContent:"center"},children:t.jsx("div",{style:{width:N,height:re,display:"flex",justifyContent:"center",alignItems:"center",flexShrink:0},children:t.jsxs("div",{ref:p,className:"studio-edit-canvas-surface",style:{width:x.width,height:x.height,position:"relative",transform:`scale(${o.zoomLevel})`,transformOrigin:"center center",flexShrink:0},children:[t.jsx("img",{ref:d,src:e.preview.page.thumbnailUrl,alt:`Page ${e.preview.page.pageIndex+1}`,className:"studio-edit-page-image",crossOrigin:"anonymous",draggable:!1,style:{width:"100%",height:"100%",position:"absolute",inset:0}}),t.jsx(Ht,{ref:m,page:e.preview.page,width:x.width,height:x.height,activeTool:e.tool,onActiveToolChange:e.setTool,textLayerSpans:e.textLayerSpans,isSelectMode:e.isSelectMode,setIsSelectMode:e.setIsSelectMode,textSelectionMode:e.textSelectionMode,onTextSelectionModeChange:e.setTextSelectionMode,textInteractionMode:e.textInteractionMode,textAddMode:e.textAddMode,onTextAddModeChange:e.setTextAddMode,annotateColor:e.annotateColor,annotateMode:e.annotateMode,annotateStrokeWidth:e.annotateMode==="shapes"?e.shapeStrokeWidth:e.annotateStrokeWidth,signMode:e.signMode,signColor:e.signDrawColor,signStrokeWidth:e.signDrawStrokeWidth,onPendingSignDraftChange:v,onPendingAnnotatePenDraftChange:c,shapePreset:e.shapePreset,shapeColor:e.shapeColor,shapeStrokeWidth:e.shapeStrokeWidth,whiteoutColor:e.whiteoutColor,watermarkOptions:e.watermarkOptions,elements:e.elements,onElementsChange:e.setElements,onPushHistory:e.pushHistory,selectedElementId:e.selectedElementId,onSelectedElementIdChange:e.setSelectedElementId,textEditor:e.textEditor,onTextEditorChange:e.setTextEditor,onInlineUiStateChange:e.setInlineUiState,onMessageChange:e.setMessage,onFinish:()=>{e.textEditor&&e.commitTextEditor(),ae()},onDiscard:()=>
1{if(e.hasDirtyChanges){I(()=>()=>{a?a():e.navigate("/studio")});return}a?a():e.navigate("/studio")}})]})})})}),e.message&&t.jsxs("div",{className:"studio-edit-message-overlay",children:[t.jsx("p",{className:"studio-edit-message-text",children:e.message}),t.jsx("button",{type:"button",className:"studio-edit-message-close",onClick:()=>e.setMessage(null),children:"×"})]})]}),typeof document<"u"&&_e.createPortal(t.jsx("div",{className:"studio-edit-bottom-save-wrap",children:t.jsx("button",{type:"button","data-testid":"studio-edit-save-btn",className:"studio-edit-btn-apply studio-edit-fixed-save-btn",onClick:e.tool==="protect"?()=>{e.protectAndReturnToStudio(e.protectOptions)}:ae,disabled:e.isApplying||(e.tool==="protect"?!D&&!G.trim():!J),children:e.isApplying?e.tool==="protect"?"Protecting...":s.saving:e.tool==="protect"?s.protect:s.save})}),document.body)]}),u&&t.jsx(Vt,{type:"confirm",title:s.unsavedConfirm,confirmLabel:"Discard",onConfirm:()=>{u(),I(null)},onCancel:()=>I(null)})]})}export{Ln as StudioEditWorkspace};

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.