PageSourceSearch

https://localpdf.online/app/assets/StudioEditWorkspace-Bw-PfBMm.js

js localpdf.online collected 2026-10-02 01:07:22 UTC 61,341 bytes, 1 lines download raw bytes

1import{i as Wt,r as i,j as t,k as He}from"./vendor-react-C_xdI0Ng.js";import{n as Xe,c as Ft,g as $t,S as Ht,a as Vt}from"./StudioDialog-Bz_0GjSD.js";import{u as nt,a as A,p as Bt,t as Kt,m as Yt}from"./index-DbFRh42P.js";import{P as Gt,a as Xt}from"./protect-errors-CmaV3kPR.js";import{d as qt}from"./preview-service-CUDLI67J.js";import{u as Zt}from"./history-store-Bah29A3T.js";import{i as Jt}from"./feature-flag-QAeryYXU.js";import{L as W}from"./linear-icon-BS_Bu1OG.js";import"./infer-source-text-style-CB_Q6F8k.js";import"./vendor-icons-CmfhFn4k.js";function qe(a){return a.replace(/\s+/gu," ").trim()}function Qt(a,s){const o=Math.max(.012,Math.min(a.widthRatio,s.widthRatio)*.12);return Math.abs(a.xRatio-s.xRatio)<=o}function Ze(a){if(a.length<2)return a;const s=new Set;for(let o=0;o<a.length;o+=1)for(let e=0;e<a.length;e+=1){if(o===e)continue;const r=a[o],p=a[e];if(s.has(r.id)||s.has(p.id)||!Qt(r,p))continue;const u=p.yRatio-r.yRatio,k=Math.max(.004,r.heightRatio*2.5);if(Math.abs(u)>k)continue;const w=qe(r.text),y=qe(p.text);if(!w||!y){s.add(r.id);continue}const O=(()=>{const c=Math.min(w.length,y.length);let g=0;for(;g<c&&w[g]===y[g];)g+=1;return g})();if(!(y.startsWith(w)||w.startsWith(y)||O>=12))continue;if(Math.abs(u)<=Math.max(.001,r.heightRatio*.15)){w.length<y.length?s.add(r.id):y.length<w.length?s.add(p.id):u>0&&s.add(r.id);continue}u<=0||s.add(r.id)}return a.filter(o=>!s.has(o.id))}function en(a,s,o=.004){const e=a.xRatio+a.widthRatio/2,r=a.yRatio+a.heightRatio/2;return e>=s.x-o&&e<=s.x+s.w+o&&r>=s.y-o&&r<=s.y+s.h+o}function tn(a,s){const o=s.filter(e=>e.type==="text"&&e.originalRect).map(e=>e.originalRect);return o.length===0?a:a.filter(e=>!o.some(r=>en(e,r)))}async function nn(a,s,o,e){const r={id:crypto.randomUUID(),type:"COMMAND",payload:{type:"GET_PDF_TEXT_LAYER",payload:{fileId:s,pageNumber:o}}},p=await a.workerOrchestrator.dispatch(r,void 0,e);if(p.payload.type==="TEXT_LAYER_RESULT")return p.payload.payload.spans;if(p.payload.type==="ERROR"){const u=new Error(p.payload.payload.message);throw u.code=p.payload.payload.code,u}throw new Error("Unexpected worker response for text layer request")}async function Je(a,s,o){return[]}const Qe={execute:(a,s)=>{if(a.type==="APPLY_TEXT_EDITS")for(const o of a.payload.entries)s(o.docId,o.pageId,{fileId:o.nextFileId,pageIndex:o.pageIndex,thumbnailUrl:o.nextThumbnailUrl})},undo:(a,s)=>{if(a.type==="APPLY_TEXT_EDITS")for(const o of a.payload.entries)s(o.docId,o.pageId,{fileId:o.prevFileId,pageIndex:o.pageIndex,thumbnailUrl:o.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 o=[];for(const e of s){const r=a.find(u=>u.id===e.docId);if(!r)continue;const p=r.pages.findIndex(u=>u.id===e.pageId);p<0||o.push({docId:r.id,docName:r.name,page:r.pages[p],indexInDoc:p})}return o}function ln(a,s){const o=a.trim();if(!o)return null;const e=Math.max(12,Math.min(96,Math.round(s||30))),r=Math.max(20,Math.round(e*.8)),p=Math.max(12,Math.round(e*.45)),u=document.createElement("canvas"),k=u.getContext("2d");if(!k)return null;k.font=`italic ${e}px "Times New Roman", Times, serif`;const w=k.measureText(o),y=Math.max(w.width,e*1.6),O=Math.max(e*.78,w.actualBoundingBoxAscent||0),b=Math.max(e*.24,w.actualBoundingBoxDescent||0),v=Math.max(180,Math.ceil(y+r*2)),c=Math.max(80,Math.ceil(O+b+p*2));u.width=v,u.height=c;const g=u.getContext("2d");return g?(g.clearRect(0,0,v,c),g.font=`italic ${e}px "Times New Roman", Times, serif`,g.fillStyle="#0f172a",g.textAlign="left",g.textBaseline="alphabetic",g.fillText(o,r,p+O),{dataUrl:u.toDataURL("image/png"),width:v,height:c}):null}function et(a){const s=a.width>0&&a.height>0?a.width/a.height:3,o=.28,e=o/Math.max(.2,s);return{id:crypto.randomUUID(),type:"image",x:.36,y:.72,w:Math.min(.5,Math.max(.08,o)),h:Math.min(.35,Math.max(.04,e)),opacity:1,dataUrl:a.dataUrl,signatureSource:a.signatureSource,typedSignatureMeta:a.typedSignatureMeta}}function rn(a){const s=Wt(),{runtime:o}=nt(),e=A(n=>n.documents),r=A(n=>n.selection),p=A(n=>n.activeDocumentId),u=A(n=>n.interactionMode),k=A(n=>n.studioViewScale),w=A(n=>n.studioViewPosition),y=A(n=>n.updatePage),O=A(n=>n.updateDocument),b=A(n=>n.editSession),v=A(n=>n.clearEditSession),c=A(n=>n.updateEditSessionTool),g=A(n=>n.syncEditSessionTarget),f=A(n=>n.whiteoutColor),P=A(n=>n.setWhiteoutColor);A(n=>n.saveUndoStack),A(n=>n.saveRedoStack);const M=A(n=>n.pushSaveUndo),U=A(n=>n.popSaveUndo),T=A(n=>n.pushSaveRedo),H=A(n=>n.popSaveRedo),V=A(n=>n.clearSaveStacks),Z=A(n=>n.commandUndoStack),B=A(n=>n.commandRedoStack),ne=A(n=>
1n.pushCommandUndo),ae=A(n=>n.popCommandUndo),se=A(n=>n.pushCommandRedo),oe=A(n=>n.popCommandRedo),J=Zt(n=>n.createCheckpoint),[D,Q]=i.useState((b==null?void 0:b.activeTool)??null),[xe,ue]=i.useState("edit"),[I,de]=i.useState(!1),[F,ke]=i.useState([]),me=i.useRef([]),[fe,Ee]=i.useState([[]]),[C,z]=i.useState(0),[$,ie]=i.useState(null),[Ae,K]=i.useState(null),[he,le]=i.useState(!1),[l,m]=i.useState(null),[j,R]=i.useState("idle"),[_,re]=i.useState([]),[ve,E]=i.useState(!1),[G,Oe]=i.useState("line"),[Pe,Ve]=i.useState(!1),[at,st]=i.useState("type"),[Le,ot]=i.useState(""),[Ue,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,Be]=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}),je=i.useMemo(()=>on(e,r),[e,r]),ee=i.useMemo(()=>e.find(n=>n.id===p)??null,[p,e]),h=i.useMemo(()=>{if(b){const n=e.find(L=>L.id===b.docId),d=n==null?void 0:n.pages.find(L=>L.id===b.pageId),x=d?(n==null?void 0:n.pages.findIndex(L=>L.id===d.id))??-1:-1;if(n&&d&&x>=0)return{docId:n.id,docName:n.name,page:d,indexInDoc:x}}return je[0]?je[0]:ee&&ee.pages[0]?{docId:ee.id,docName:ee.name,page:ee.pages[0],indexInDoc:0}:null},[ee,e,b,je]),De=je.length>1;i.useEffect(()=>{if(b!=null&&b.activeTool){if(b.activeTool==="shapes"){Q("annotate"),c("annotate");return}b.activeTool!==D&&Q(b.activeTool)}},[b==null?void 0:b.activeTool,D,c]),i.useEffect(()=>{h&&g({docId:h.docId,pageId:h.page.id,pageIndex:h.page.pageIndex,workingFileId:h.page.fileId})},[h==null?void 0:h.docId,h==null?void 0:h.page.fileId,h==null?void 0:h.page.id,h==null?void 0:h.page.pageIndex,g]),i.useEffect(()=>{!De&&Pe&&Ve(!1)},[Pe,De]);const[Te]=i.useState(()=>crypto.randomUUID()),we=i.useCallback((n,d="ui")=>{const x=n==="shapes"?"annotate":n;Q(x),x!=="text"&&de(!1),c(x),o.telemetry.track({type:"STUDIO_EDIT_TOOL_SELECTED",runId:Te,toolId:"studio.edit",tool:x,method:d})},[c,o,Te]),Me=F.length>0||C>0||!!(l&&l.value!==l.initialValue),X=i.useCallback(n=>{ke(d=>{const x=typeof n=="function"?n(d):n;return me.current=x,x})},[]);i.useEffect(()=>{me.current=F},[F]),i.useEffect(()=>{const n=d=>{Me&&(d.preventDefault(),d.returnValue="")};return window.addEventListener("beforeunload",n),()=>window.removeEventListener("beforeunload",n)},[Me]),i.useEffect(()=>{X([]),Ee([[]]),z(0),ie(null),m(null),R("idle"),V()},[h==null?void 0:h.page.id,h==null?void 0:h.page.pageIndex,V,X]),i.useEffect(()=>{if(!h)return;const n=new AbortController;return(async()=>{try{const d=await nn(o,h.page.fileId,h.page.pageIndex+1,n.signal);if(n.signal.aborted)return;const x=Ze(Xe(d.length>0?d:await Je(o,h.page.fileId,h.page.pageIndex+1)));if(n.signal.aborted)return;re(x),x.length===0&&K(a.noTextLayer)}catch{if(n.signal.aborted)return;try{const x=Ze(Xe(await Je(o,h.page.fileId,h.page.pageIndex+1)));if(n.signal.aborted)return;re(x),x.length===0&&K(a.noTextLayer)}catch{if(n.signal.aborted)return;K(a.noTextLayer)}}})(),()=>n.abort()},[h==null?void 0:h.page.id,h==null?void 0:h.page.fileId,h==null?void 0:h.page.pageIndex,o,a.noTextLayer]);const ce=i.useCallback(n=>{Ee(d=>[...d.slice(0,C+1),n]),z(d=>d+1)},[C]),Ie=i.useCallback(n=>{const d=[...me.current,n];X(d),ce(d),ie(n.id),m(null)},[ce,X]),Mt=i.useCallback(n=>{const d=et({...n,signatureSource:"upload"});Ie(d),Q("sign")},[Ie]),_e=i.useCallback(n=>{const d=(n.value||a.sign||"Signature").trim()||"Signature",x=ln(d,n.fontSize);x&&(Ie(et({...x,signatureSource:"typed",typedSignatureMeta:{baseFontSize:Math.max(12,Math.min(96,Math.round(n.fontSize||30))),sourceWidth:x.width,sourceHeight:x.height}})),Q("sign"))},[Ie,a.sign]),At=i.useCallback(()=>{_e({value:Le||"Signature",fontSize:Ue})},[_e,Ue,Le]),Pt=i.useCallback(n=>{const d=me.current.filter(S=>S.type==="form-field"&&S.formType===n).length+1,x=n==="text"?{w:.32,h:.06}:n==="multiline"?{w:.34,h:.24}:n==="dropdown"?{w:.3,h:.07}:{w:.1,h:.06},L={id:crypto.randomUUID(),type:"form-field",formType:n,name:`${n}_field_${d}`,x:n==="text"?.34:n==="multiline"?.33:n==="dropdown"?.34:.4,y:.74,w:x.w,h:x.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};Ie(L),Q("forms")},[Ie]),ze=i.useCallback(()=>
1{if(C<=0)return;const n=C-1;z(n),X(fe[n]??[]),ie(null),m(null)},[fe,C,X]),We=i.useCallback(()=>{if(C>=fe.length-1)return;const n=C+1;z(n),X(fe[n]??[]),ie(null),m(null)},[fe,C,X]),Ke=i.useCallback(()=>{if(!$)return;const n=F.filter(d=>d.id!==$);X(n),ce(n),ie(null),m(null)},[F,ce,$,X]),Dt=i.useCallback((n,d,x)=>{let L;if(d==="delete"){const S=F.filter(q=>q.id!==n);X(S),ce(S),ie(null)}else if(d==="duplicate"){const S=F.find(q=>q.id===n);if(S){const q="x"in S?S.x+.02:0,pe="y"in S?S.y+.02:0,te=[...F,{...S,id:crypto.randomUUID(),..."x"in S?{x:q,y:pe}:{}}];X(te),ce(te)}}else d==="update"&&x&&(X(S=>S.map(q=>q.id===n?{...q,...x}:q)),L=Object.keys(x)[0]);o.telemetry.track({type:"STUDIO_EDIT_FLOATING_MENU_ACTION",runId:Te,toolId:"studio.edit",action:d,changeType:L})},[F,ce,o.telemetry,Te,X]),Rt=i.useCallback(()=>{l&&(l.value!==l.initialValue&&ce(F),R($?"selected":"idle"),m(null))},[F,ce,$,l]);i.useEffect(()=>{if(!$)return;const n=me.current.find(d=>d.id===$&&d.type==="watermark");n&&Be({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})},[$,F]);const Fe=async()=>{if(!h)return;const n=me.current,d=Pe&&De?je:[h];let x=0,L=0;le(!0),R("saving"),K(null);const S=crypto.randomUUID();try{const q=[],pe=[],te=new Map;for(const N of d)try{const ge=N.page.fileId,Ne=N.page.thumbnailUrl,be={id:crypto.randomUUID(),type:"COMMAND",payload:{type:"APPLY_STUDIO_TEXT_EDITS",payload:{fileId:N.page.fileId,pageIndex:N.page.pageIndex,elements:n}}},Y=await o.workerOrchestrator.dispatch(be);if(Y.payload.type==="ERROR"){const Se=new Error(Y.payload.payload.message);throw Se.code=Y.payload.payload.code,Se}if(Y.payload.type!=="STUDIO_TEXT_EDITS_APPLIED")throw new Error("Unexpected worker response for studio text edits");Y.payload.payload.overflowDetected&&(x+=1),!Y.payload.payload.trueReplaceApplied&&Y.payload.payload.trueReplaceFallbackReason&&o.telemetry.track({type:"STUDIO_EDIT_GUARDRAIL",runId:S,toolId:"studio.edit.text",fileId:N.page.fileId,pageIndex:N.page.pageIndex,code:`STUDIO_TRUE_REPLACE_FALLBACK_${Y.payload.payload.trueReplaceFallbackReason}`,message:"True replace fallback path used"});const Ye=Y.payload.payload.redactVerify;if(Ye){const Se=Bt(Ye,S);Kt(o.telemetry,Se),te.set(N.docId,Yt(te.get(N.docId)??null,Se))}else te.has(N.docId)||te.set(N.docId,null);
1const zt=qt.getPdfPagePreview(o,Y.payload.payload.outputId,N.page.pageIndex+1,{scale:2}),$e=await Promise.race([zt,new Promise(Se=>setTimeout(()=>Se(null),8e3))]),Ge=($e==null?void 0:$e.thumbnailUrl)??N.page.thumbnailUrl;y(N.docId,N.page.id,{fileId:Y.payload.payload.outputId,pageIndex:N.page.pageIndex,thumbnailUrl:Ge}),pe.push({docId:N.docId,pageId:N.page.id,pageIndex:N.page.pageIndex,prevFileId:ge,prevThumbnailUrl:Ne,nextFileId:Y.payload.payload.outputId,nextThumbnailUrl:Ge})}catch(ge){L+=1;const Ne=ge instanceof Error?ge.message:a.saveFailed,be=ge,Y=typeof be.code=="string"?be.code:void 0;Y!=null&&Y.startsWith("STUDIO_EDIT_")&&o.telemetry.track({type:"STUDIO_EDIT_GUARDRAIL",runId:S,toolId:"studio.edit.text",fileId:N.page.fileId,pageIndex:N.page.pageIndex,code:Y,message:typeof be.message=="string"?be.message:Ne}),q.push(Ne)}if(L>0&&L===d.length)throw new Error(q[0]??a.saveFailed);for(const[N,ge]of te)O(N,{lastRedactVerify:ge??void 0});R(L>0?"error":"saved"),m(null),ie(null),X([]),Ee([[]]),z(0),pe.length>0&&an&&ne({id:crypto.randomUUID(),type:"APPLY_TEXT_EDITS",timestamp:Date.now(),payload:{entries:pe}}),await J(o.vfs,"edit_save",d.length>1?`Saved inline edits (${d.length} pages)`:"Saved inline edits"),o.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:S,toolId:"studio.edit.text",action:"apply",scope:d.length>1?"selection":"single",pagesTotal:d.length,pagesSucceeded:d.length-L,pagesFailed:L,overflowCount:x,message:L>0?a.partialSaveFailed:a.changesApplied});const ye=Array.from(te.values()).some(N=>N&&!N.passed);if(d.length>1){const N=`${a.changesAppliedSelection} ${d.length}`,ge=x>0?` ${a.overflowWarning}`:"",Ne=L>0?` ${a.partialSaveFailed}`:"";K(`${N}.${ge}${Ne}${ye?" Redaction checks incomplete — PDF download allowed, certificate only when all pass.":""}`.trim())}else{const N=x>0?`${a.changesApplied} ${a.overflowWarning}`:a.changesApplied;K(ye?`${N} Redaction checks incomplete — PDF download allowed, certificate only when all pass.`:N)}}catch(q){R("error");const pe=q instanceof Error?q.message:a.saveFailed,te=L>0?L:d.length,ye=q,N=typeof ye.code=="string"?ye.code:void 0;N!=null&&N.startsWith("STUDIO_EDIT_")&&o.telemetry.track({type:"STUDIO_EDIT_GUARDRAIL",runId:S,toolId:"studio.edit.text",fileId:h.page.fileId,pageIndex:h.page.pageIndex,code:N,message:typeof ye.message=="string"?ye.message:pe}),o.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:S,toolId:"studio.edit.text",action:"apply",scope:d.length>1?"selection":"single",pagesTotal:d.length,pagesSucceeded:Math.max(0,d.length-te),pagesFailed:te,overflowCount:x,message:pe}),K(`${a.saveFailed}${pe?` ${pe}`:""}`.trim())}finally{le(!1)}},Ot=i.useCallback(async n=>{const d=(ee==null?void 0:ee.id)??(h==null?void 0:h.docId)??null,x=d?e.find(S=>S.id===d)??null:null,L=Array.from(new Set(((x==null?void 0:x.pages)??[]).map(S=>S.fileId)));if(L.length===0){K(a.saveFailed);return}le(!0);try{const S=await o.runner.execute("protect-pdf",{inputIds:L,options:{...n,studioContext:{mode:"document",documentId:d,selectedPages:[]}}},sn);if(S.type==="TOOL_ERROR"){if(S.code===Gt){K(Xt);return}K(S.message||a.saveFailed);return}if(S.type==="TOOL_ACCESS_DENIED"){K(S.details??S.reason);return}s("/studio",{state:{source:"studio",studioToolResult:{toolId:"protect-pdf",outputIds:S.outputIds,studioContext:{mode:"document",documentId:d,selectedPages:[]}},studioReturnContext:{activeDocumentId:p,selection:r,interactionMode:u,viewScale:k,viewPosition:w}}})}finally{le(!1)}},[ee==null?void 0:ee.id,p,e,u,s,h==null?void 0:h.docId,o.runner,r,w,k,a.saveFailed]),Lt=i.useCallback(()=>{{const n=ae();if(!n||he)return;const d=crypto.randomUUID();le(!0);try{Qe.undo(n,y),se(n),K(a.saveReverted),R("saved"),o.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:d,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{le(!1)}}},[ae,se,U,T,he,o,a.saveReverted,y]),Ut=i.useCallback(()=>{{const n=oe();if(!n||he)return;ne(n);const d=crypto.randomUUID();le(!0);try{Qe.execute(n,y),K(n.payload.entries.length>1?`${a.changesAppliedSelection} ${n.payload.entries.length}.`:a.changesApplied),R("saved"),o.telemetry.track({type:"STUDIO_EDIT_SAVE_ACTION",runId:d,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{le(!1)}}},[oe,ne,H,M,o,a.changesApplied,a.changesAppliedSelection,y]);i.useEffect(()=>{const n=d=>{const x=d.target;if(x&&(x.tagName==="INPUT"||x.tagName==="TEXTAREA"||x.isContentEditable))return;const S=d.key.toLowerCase();(d.key==="Delete"||d.key==="Backspace")&&!l?Ke():(d.ctrlKey||d.metaKey)&&S==="z"?(d.preventDefault(),d.shiftKey?We():ze()):(d.ctrlKey||d.metaKey)&&S==="s"?(d.preventDefault(),!he&&(C>0||Me)&&Fe()):!d.ctrlKey&&!d.metaKey&&!d.shiftKey&&(S==="v"||S==="t"?we("text"):S==="a"?we("annotate"):S==="w"&&we("watermark"))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[Ke,We,ze,Fe,he,C,Me,l,we]);const _t=i.useMemo(()=>Jt()?tn(_,F):_,[F,_]);return{runId:Te,navigate:s,tool:D,setTool:we,elements:F,setElements:X,pushHistory:ce,undo:ze,redo:We,history:fe,historyIndex:C,selectedElementId:$,setSelectedElementId:ie,handleElementAction:Dt,message:Ae,setMessage:K,isApplying:he,textEditor:l,setTextEditor:m,commitTextEditor:Rt,inlineUiState:j,setInlineUiState:R,textLayerSpans:_t,isSelectMode:ve,setIsSelectMode:E,textSelectionMode:G,setTextSelectionMode:Oe,textInteractionMode:xe,setTextInteractionMode:ue,textAddMode:I,setTextAddMode:de,annotateColor:pt,setAnnotateColor:ut,annotateMode:mt,setAnnotateMode:ht,annotateStrokeWidth:gt,setAnnotateStrokeWidth:ft,signMode:at,setSignMode:st,signTypedValue:Le,setSignTypedValue:ot,signTypedFontSize:Ue,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:Be,applyToSelection:Pe,setApplyToSelection:Ve,hasDirtyChanges:Me,canApplyToSelection:De,applyChanges:Fe,undoLastSave:Lt,redoLastSave:Ut,isFormsComposerOpen:wt,setFormsComposerOpen:It,whiteoutColor:f,setWhiteoutColor:P,textStyle:Nt,setTextStyle:Ct,protectOptions:Et,setProtectOptions:Tt,addTypedSignature:_e,addImageSignature:Mt,insertTypedSignature:At,addFormField:Pt,protectAndReturnToStudio:Ot,clearEditSession:v,preview:h,selectedPages:je,activeDocument:ee,saveUndoStack:Z,saveRedoStack:B}}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:o,onSelectTool:e,onToggleTextInteractionMode:r}){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:u,label:k})=>t.jsxs("button",{type:"button",className:`studio-edit-tool-btn${s===p?" active":""}`,onClick:()=>e(p),title:k,"aria-label":k,"aria-pressed":s===p,children:[t.jsx(W,{name:u,size:16}),t.jsx("span",{style:{fontSize:9,lineHeight:1,letterSpacing:.1,marginTop:1},children:k})]},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${o==="move"?" active":""}`,onClick:r,title:a.moveText,"aria-label":a.moveText,"aria-pressed":o==="move",children:[t.jsx(W,{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:o,color:e,onColorChange:r,onModeChange:p,onShapePresetChange:u,onStrokeWidthChange:k,onInsertPen:w,onClearPen:y,hasPendingPenDraft:O=!1,onDelete:b,onDuplicate:v}){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:()=>u(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${e.toLowerCase()===c.toLowerCase()?" ep-swatch--on":""}`,style:{background:c},onClick:()=>r(c),title:c},c))})]}),t.jsxs("label",{className:"ep-color-row",children:[t.jsx("div",{className:"ep-color-preview",style:{background:e}
1,children:t.jsx("input",{type:"color",value:e,onChange:c=>r(c.target.value)})}),t.jsx("span",{className:"ep-color-value",children:e}),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:o,onChange:c=>k(Math.max(1,Math.min(18,Number(c.target.value)||5))),className:"ep-range"}),t.jsx("span",{className:"ep-range-val",children:o})]})]}),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:w,disabled:!O,style:{flex:1},children:"Insert"}),t.jsx("button",{type:"button",className:"ep-action-btn",onClick:y,disabled:!O,style:{flex:1},children:"Clear"})]}),(v||b)&&t.jsxs("div",{className:"ep-actions",children:[v&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:v,children:[t.jsx(W,{name:"copy",size:12})," Duplicate"]}),b&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:b,children:[t.jsx(W,{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:o,canvasWidth:e,canvasHeight:r,onDelete:p,onDuplicate:u}){const k=Math.max(1,Math.round(e)),w=Math.max(1,Math.round(r)),y=s?Math.max(1,Math.round(s.w*k)):0,O=s?Math.max(1,Math.round(s.h*w)):0,b=(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:v,label:c})=>t.jsx("button",{type:"button",className:"ep-seg-btn",onClick:()=>a(v),children:c},v))})]}),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:v=>o({name:v.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:k,value:y,onChange:v=>{const c=Number(v.target.value);Number.isFinite(c)&&o({w:Math.max(.02,Math.min(.95,c/k))})}})]}),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(w*.6),value:O,onChange:v=>{const c=Number(v.target.value);Number.isFinite(c)&&o({h:Math.max(.02,Math.min(.6,c/w))})}})]})]}),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:b.length||1,onChange:v=>{const c=Math.max(1,Math.min(50,Math.round(Number(v.target.value)))),g=Array.from({length:c},(f,P)=>{var M;return((M=s.options)==null?void 0:M[P])??`Option ${P+1}`});o({options:g,defaultValue:g.includes(s.defaultValue)?s.defaultValue:g[0]??""})}})]}),b.map((v,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:v,onChange:g=>{const P=b.map((M,U)=>U===c?g.target.value:M).map((M,U)=>M.trim()||`Option ${U+1}`);o({options:P,defaultValue:P.includes(s.defaultValue)?s.defaultValue:P[0]??""})}})]},c))]})]}),(u||p)&&t.jsxs("div",{className:"ep-actions",children:[u&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:u,children:[t.jsx(W,{name:"copy",size:12})," Duplicate"]}),p&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:p,children:[t.jsx(W,{name:"x",size:12})," Delete"]})]})]})}function gn({onOptionsChange:a,ui:s}){const[o,e]=i.useState(!0),[r,p]=i.useState(""),[u,k]=i.useState(""),[w,y]=i.useState(!1),[O,b]=i.useState(256),[v,c]=i.useState("business"),[g,f]=i.useState(!1),[P,M]=i.useState("full"),[U,T]=i.useState(!1),[H,V]=i.useState(!1),[Z,B]=i.useState(!1),[ne,ae]=i.useState(!0),[se,oe]=i.useState(!0),[J,D]=i.useState(!1),Q=i.useMemo(()=>!o&&r.trim().length===0?s.protectPasswordRequired:null,[o,s.protectPasswordRequired,r]);i.useEffect(()=>{a({permissionsOnly:o,userPassword:o?"":r.trim(),ownerPassword:w?u.trim():"",keyLength:O,printing:P,copying:U,modifying:H,annotating:Z,fillingForms:ne,contentAccessibility:se,documentAssembly:J})},[Z,se,U,J,ne,O,H,a,u,o,P,w,r]);const xe=I=>{c(I),I==="basic"?(M("full"),T(!0),V(!1),B(!0),ae(!0),oe(!0),D(!1),b(128)):I==="business"?(M("full"),T(!1),V(!1),B(!1),ae(!0),oe(!0),D(!1),b(256)):I==="confidential"&&(M("none"),T(!1),V(!1),B(!1),ae(!1),oe(!0),D(!1),b(256))},ue=()=>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(I=>t.jsx("button",{type:"button",className:`ep-seg-btn${v===I?" ep-seg-btn--on":""}`,onClick:()=>xe(I),children:I.charAt(0).toUpperCase()+I.slice(1)},I))})]}),t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Encryption"}),t.jsxs("select",{className:"ep-select",value:O,onChange:I=>{ue(),b(Number(I.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:P,onChange:I=>{ue();const de=I.target.value;M(de==="none"||de==="low"?de:"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:o,onChange:I=>{e(I.target.checked),I.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:w,onChange:I=>y(I.target.checked)}),t.jsx("span",{children:"Separate owner password"})]})]}),!o&&t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Open password"}),t.jsx("input",{type:"password",value:r,onChange:I=>p(I.target.value),placeholder:"Required to open",className:"ep-input"}),Q&&t.jsx("span",{style:{fontSize:11,color:"var(--red)"},children:Q})]}),w&&t.jsxs("div",{className:"ep-field",children:[t.jsx("span",{className:"ep-field-label",children:"Owner password"}),t.jsx("input",{type:"password",value:u,onChange:I=>k(I.target.value),placeholder:"Required to change restrictions",className:"ep-input"})]}),t.jsx("button",{type:"button",className:"ep-action-btn",onClick:()=>f(I=>!I),children:g?"Hide advanced":"Advanced permissions"}),g&&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:U,onChange:T},{label:"Modify",checked:H,onChange:V},{label:"Annotate",checked:Z,onChange:B},{label:"Fill forms",checked:ne,onChange:ae},{label:"Accessibility",checked:se,onChange:oe},{label:"Assembly",checked:J,onChange:D}
1].map(({label:I,checked:de,onChange:F})=>t.jsxs("label",{className:"ep-toggle-row",children:[t.jsx("input",{type:"checkbox",checked:de,onChange:ke=>{ue(),F(ke.target.checked)}}),t.jsx("span",{children:I})]},I))})]})]})}function fn({options:a,onOptionsChange:s}){const o=(e,r)=>s({...a,[e]:r});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:e=>o("text",e.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:e=>o("fontFamily",e.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:e=>o("fontSize",Math.max(8,Math.min(120,Number(e.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:()=>o("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:()=>o("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"}),t.jsx("input",{type:"number",min:.05,max:1,step:.05,value:a.opacity,onChange:e=>o("opacity",Math.max(.05,Math.min(1,Number(e.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:e=>o("rotation",Math.max(-180,Math.min(180,Number(e.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:e=>o("color",e.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:()=>o("repeatEnabled",!0),children:"On"}),t.jsx("button",{type:"button",className:`ep-seg-btn${a.repeatEnabled?"":" ep-seg-btn--on"}`,onClick:()=>o("repeatEnabled",!1),children:"Off"})]})]})]})}const xn=["#ffffff","#f8f9fa","#f1f3f5","#fff8e1","#fef3c7","#000000"];function yn({color:a="#ffffff",onColorChange:s,onDelete:o,onDuplicate:e}){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(r=>t.jsx("button",{type:"button",className:`ep-swatch${a.toLowerCase()===r.toLowerCase()?" ep-swatch--on":""}`,style:{background:r},onClick:()=>s(r),title:r},r))}),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:r=>s(r.target.value)})}),t.jsx("span",{className:"ep-color-value",children:a}),t.jsx("span",{className:"ep-color-name",children:"Custom"})]}),(e||o)&&t.jsxs("div",{className:"ep-actions",children:[e&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:e,children:[t.jsx(W,{name:"copy",size:12})," Duplicate"]}),o&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:o,children:[t.jsx(W,{name:"x",size:12})," Delete"]})]})]})}function tt({label:a,value:s,onChange:o,allowTransparent:e=!1}){const r=s==="transparent"||s==="none"||s==="",p=r||!/^#([0-9a-f]{3}|[0-9a-f]{6}
1)$/i.test(s)?"#ffffff":s;return t.jsxs("label",{className:"ep-color-row",children:[t.jsx("div",{className:"ep-color-preview",style:{background:r?"repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 10px 10px":s},children:t.jsx("input",{type:"color",value:p,onChange:u=>o(u.target.value)})}),t.jsx("span",{className:"ep-color-value",children:r?"none":s}),t.jsx("span",{className:"ep-color-name",children:a}),e&&!r&&t.jsx("button",{type:"button",className:"ep-fmt-btn",style:{marginLeft:4,fontSize:10,padding:"2px 6px"},onClick:u=>{u.preventDefault(),o("transparent")},children:"Clear"})]})}function bn({addTextBoxLabel:a,addTextBoxActiveLabel:s,textAddMode:o,onToggleTextAddMode:e,fontFamily:r,fontSize:p,fontWeight:u,fontStyle:k,lineHeight:w,letterSpacing:y,color:O,backgroundColor:b,onStyleChange:v,onDelete:c,onDuplicate:g}){return t.jsxs("div",{className:"ep",children:[t.jsx("button",{type:"button",className:`ep-select${o?" ep-fmt-btn--on":""}`,onClick:e,style:{marginBottom:8,cursor:"pointer",fontWeight:o?600:400},children:o?s:a}),t.jsx("div",{className:"ep-section-title",children:"Typography"}),t.jsxs("select",{className:"ep-select",value:r,onChange:f=>v({fontFamily:f.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:f=>v({fontSize:Ft(Number(f.target.value)||16,8,96)}),className:"ep-input ep-input--num"})]}),t.jsx("button",{type:"button",className:`ep-fmt-btn${u==="bold"?" ep-fmt-btn--on":""}`,onClick:()=>v({fontWeight:u==="bold"?"normal":"bold"}),title:"Bold",children:t.jsx("b",{children:"B"})}),t.jsx("button",{type:"button",className:`ep-fmt-btn${k==="italic"?" ep-fmt-btn--on":""}`,onClick:()=>v({fontStyle:k==="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(W,{name:"move-vertical",size:11}),"Line"]}),t.jsx("input",{type:"number",min:.8,max:3,step:.1,value:w,onChange:f=>v({lineHeight:Number(f.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(W,{name:"move-horizontal",size:11}),"Letter"]}),t.jsx("input",{type:"number",min:-2,max:10,step:.5,value:y,onChange:f=>v({letterSpacing:Number(f.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(tt,{label:"Text",value:O,onChange:f=>v({color:f})}),t.jsx(tt,{label:"BG",value:b,allowTransparent:!0,onChange:f=>v({backgroundColor:f})})]}),(g||c)&&t.jsxs("div",{className:"ep-actions",children:[g&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:g,children:[t.jsx(W,{name:"copy",size:12}),"Duplicate"]}),c&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:c,children:[t.jsx(W,{name:"x",size:12}),"Delete"]})]})]})}function Sn(a){return new Promise((s,o)=>{const e=new FileReader;e.onload=()=>s(String(e.result||"")),e.onerror=()=>o(new Error("Failed to read file")),e.readAsDataURL(a)})}function vn(a){return new Promise((s,o)=>{const e=new Image;e.onload=()=>s({width:e.naturalWidth||e.width,height:e.naturalHeight||e.height}),e.onerror=()=>o(new Error("Failed to decode image")),e.src=a})}function jn({mode:a,typedValue:s,typedFontSize:o,drawColor:e,drawStrokeWidth:r,onModeChange:p,onTypedValueChange:u,onTypedFontSizeChange:k,onDrawColorChange:w,onDrawStrokeWidthChange:y,onInsertTyped:O,onInsertDrawn:b,onClearDrawn:v,onUploadImage:c,hasPendingDrawnSignature:g=!1,onDelete:f,onDuplicate:P}){const M=i.useRef(null),U=async T=>{var V;const H=(V=T.target.files)==null?void 0:V[0];if(T.target.value="",!!H)try{const Z=await Sn(H);if(!Z.startsWith("data:image/"))return;const B=await vn(Z);c({dataUrl:Z,width:B.width,height:B.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:T=>u(T.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:o,onChange:T=>k(Math.max(12,Math.min(96,Number(T.target.value)||30))),className:"ep-input ep-input--num"})]})}),t.jsx("button",{type:"button",className:"ep-action-btn ep-action-btn--primary",onClick:O,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:e}
1,children:t.jsx("input",{type:"color",value:e,onChange:T=>w(T.target.value)})}),t.jsx("span",{className:"ep-color-value",children:e}),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:r,onChange:T=>y(Math.max(1,Math.min(12,Number(T.target.value)||3))),className:"ep-range"}),t.jsx("span",{className:"ep-range-val",children:r})]})]}),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:b,disabled:!g,style:{flex:1},children:"Insert"}),t.jsx("button",{type:"button",className:"ep-action-btn",onClick:v,disabled:!g,style:{flex:1},children:"Clear"})]})]}),t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:()=>{var T;return(T=M.current)==null?void 0:T.click()},children:[t.jsx(W,{name:"upload",size:12}),"Upload image"]}),t.jsx("input",{ref:M,type:"file",accept:"image/png,image/jpeg,image/webp,image/gif",style:{display:"none"},"aria-hidden":"true",tabIndex:-1,onChange:U}),(P||f)&&t.jsxs("div",{className:"ep-actions",children:[P&&t.jsxs("button",{type:"button",className:"ep-action-btn",onClick:P,children:[t.jsx(W,{name:"copy",size:12})," Duplicate"]}),f&&t.jsxs("button",{type:"button",className:"ep-action-btn ep-action-btn--danger",onClick:f,children:[t.jsx(W,{name:"x",size:12})," Delete"]})]})]})}const wn=.35,In=6,Re=1.25;function Ce(a){return Math.min(In,Math.max(wn,a))}function Nn(a,s=1){const{runtime:o}=nt(),[e,r]=i.useState(s),p=i.useRef(null),u=i.useCallback((c,g,f,P="button")=>{if(!p.current)return;const M=p.current,U=M.getBoundingClientRect(),T=c-U.left,H=g-U.top,V=e,Z=f==="in"?Re:1/Re,B=Ce(V*Z);if(Math.abs(B-V)<1e-4)return;const ne=M.scrollLeft,ae=M.scrollTop,se=(T+ne)/V,oe=(H+ae)/V,J=se*B-T,D=oe*B-H;r(B),o.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:P,scaleLevel:B}),requestAnimationFrame(()=>{p.current&&(p.current.scrollLeft=J,p.current.scrollTop=D)})},[e,o.telemetry]),k=i.useCallback((c,g)=>{if(c!==void 0&&g!==void 0)u(c,g,"in");else if(p.current){const f=p.current.getBoundingClientRect();u(f.left+f.width/2,f.top+f.height/2,"in")}else r(f=>Ce(f*Re))},[u]),w=i.useCallback((c,g)=>{if(c!==void 0&&g!==void 0)u(c,g,"out");else if(p.current){const f=p.current.getBoundingClientRect();u(f.left+f.width/2,f.top+f.height/2,"out")}else r(f=>Ce(f/Re))},[u]),y=c=>c<520?16:48,O=i.useCallback((c,g,f)=>{if(!p.current)return;const P=p.current.getBoundingClientRect(),M=f??y(P.width),U=Math.max(1,P.width-M*2),T=Math.max(1,P.height-M*2),H=Ce(Math.min(U/c,T/g));r(H),o.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:"preset",preset:"fitPage",scaleLevel:H})},[o.telemetry,a]),b=i.useCallback((c,g)=>{if(!p.current)return;const f=p.current.getBoundingClientRect(),P=g??y(f.width),M=Math.max(1,f.width-P*2),U=Ce(M/c);r(U),o.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:"preset",preset:"fitWidth",scaleLevel:U})},[o.telemetry,a]),v=i.useCallback(()=>{const c=Ce(1);r(c),o.telemetry.track({type:"STUDIO_EDIT_ZOOM_CHANGED",runId:a,toolId:"studio.edit",source:"preset",preset:"100",scaleLevel:c})},[o.telemetry,a]);return{zoomLevel:e,setZoomLevel:r,containerRef:p,zoomIn:k,zoomOut:w,zoomAtScreenPoint:u,fitToPage:O,fitToWidth:b,zoomToHundred:v}}function Ln({onClose:a}={}){var Ae,K,he,le;const s=i.useMemo(()=>$t(),[]),o=i.useMemo(()=>({text:s.text,annotate:s.annotate,sign:s.sign,whiteout:s.whiteout,watermark:s.watermark,forms:s.forms,protect:s.protect}),[s]),e=rn(s),r=Nn(e.runId||"unknown",1),p=i.useRef(null),u=i.useRef(null),k=i.useRef(null),w=i.useRef(null),[y,O]=i.useState({width:620,height:840}),[b,v]=i.useState({width:0,height:0}),[c,g]=i.useState(!1),[f,P]=i.useState(!1),[M,U]=i.useState(null),[T,H]=i.useState(!1),V=e.tool!==null&&["text","forms","sign","protect","watermark","whiteout","annotate"].includes(e.tool);i.useEffect(()=>{H(!1)},[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 j;const l=(j=e.preview)==null?void 0:j.page.thumbnailUrl;if(!l){O({width:620,height:840});return}const m=new Image;m.onload=()=>
1{const R=m.naturalWidth||620,_=m.naturalHeight||840,E=Math.min(620/R,840/_),G=Math.max(240,Math.round(R*E)),Oe=Math.max(320,Math.round(_*E));O({width:G,height:Oe})},m.onerror=()=>{O({width:620,height:840})},m.src=l},[(Ae=e.preview)==null?void 0:Ae.page.thumbnailUrl]),i.useEffect(()=>{const l=r.containerRef.current;if(!l)return;const m=()=>{v({width:l.clientWidth,height:l.clientHeight})};if(m(),typeof ResizeObserver>"u")return;const j=new ResizeObserver(m);return j.observe(l),()=>{j.disconnect()}},[r.containerRef]),i.useEffect(()=>{var R;const l=(R=e.preview)==null?void 0:R.page.id;if(!l){w.current=null;return}const m=`${l}:${y.width}`;if(w.current===m)return;let j=window.requestAnimationFrame(()=>{r.fitToWidth(y.width),w.current=m});return()=>{window.cancelAnimationFrame(j)}},[y.width,(K=e.preview)==null?void 0:K.page.id,r]);const Z=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="form-field")??null:null,B=l=>{if(!Z)return;const m=e.elements.map(j=>j.id===Z.id&&j.type==="form-field"?{...j,...l}:j);e.setElements(m),e.pushHistory(m)},ne=((he=e.protectOptions)==null?void 0:he.permissionsOnly)===!0,ae=typeof((le=e.protectOptions)==null?void 0:le.userPassword)=="string"?e.protectOptions.userPassword:"",se=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="watermark")??null:null,oe=l=>{if(e.setWatermarkOptions(l),!se)return;const m=e.elements.map(j=>j.id===se.id&&j.type==="watermark"?{...j,...l}:j);e.setElements(m),e.pushHistory(m)},J=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="image"):void 0,D=(J==null?void 0:J.signatureSource)==="typed"&&J.typedSignatureMeta?J:void 0,Q=e.historyIndex>0||e.hasDirtyChanges||c||f,xe=i.useCallback(()=>{e.tool==="sign"&&e.signMode==="draw"&&He.flushSync(()=>{var l;(l=k.current)==null||l.commitPendingSignDraft()})},[e.signMode,e.tool]),ue=i.useCallback(()=>{e.tool==="annotate"&&e.annotateMode==="pen"&&He.flushSync(()=>{var l;(l=k.current)==null||l.commitPendingAnnotatePenDraft()})},[e.annotateMode,e.tool]),I=i.useCallback(()=>{xe(),ue(),e.applyChanges()},[ue,xe,e.applyChanges]),de=i.useCallback(()=>{if(e.hasDirtyChanges){U(()=>()=>{e.clearEditSession(),a?a():e.navigate("/studio")});return}e.clearEditSession(),a?a():e.navigate("/studio")},[e,a,s.unsavedConfirm]);if(i.useEffect(()=>{const l=m=>{const j=m.key.toLowerCase();!(m.ctrlKey||m.metaKey)||j!=="s"||e.tool==="protect"||e.isApplying||!Q||(m.preventDefault(),m.stopPropagation(),I())};return window.addEventListener("keydown",l,!0),()=>window.removeEventListener("keydown",l,!0)},[e.isApplying,e.tool,I,Q]),i.useEffect(()=>{if(e.tool!=="sign"||e.signMode!=="type"||!(D!=null&&D.typedSignatureMeta))return;const l=D.typedSignatureMeta,m=D.w/Math.max(1e-4,.28),j=Math.max(12,Math.min(96,Math.round(l.baseFontSize*m)));j!==e.signTypedFontSize&&e.setSignTypedFontSize(j)},[e,D]),!e.preview)return null;const F=y.width*r.zoomLevel,ke=y.height*r.zoomLevel,me=40,fe=Math.max(F+me*2,b.width),Ee=Math.max(ke+me*2,b.height),C=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,$=e.selectedElementId?e.elements.find(l=>l.id===e.selectedElementId&&l.type==="stroke"):void 0,ie=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:(C==null?void 0:C.fontFamily)??e.textStyle.fontFamily,fontSize:(C==null?void 0:C.fontSize)??e.textStyle.fontSize,fontWeight:(C==null?void 0:C.fontWeight)??e.textStyle.fontWeight,fontStyle:(C==null?void 0:C.fontStyle)??e.textStyle.fontStyle,lineHeight:(C==null?void 0:C.lineHeight)??e.textStyle.lineHeight,letterSpacing:(C==null?void 0:C.letterSpacing)??e.textStyle.letterSpacing,color:(C==null?void 0:C.color)??e.textStyle.color,backgroundColor:(()=>{const l=`${e.selectedElementId}_bg`,m=e.elements.find(j=>j.id===l&&j.type==="rect");return(m==null?void 0:m.fill)??e.textStyle.backgroundColor})(),onStyleChange:l=>
1{if(e.selectedElementId){if(e.handleElementAction(e.selectedElementId,"update",l),l.backgroundColor!==void 0){const m=String(l.backgroundColor),j=e.selectedElementId,R=`${j}_bg`,_=e.elements.find(E=>E.id===j&&E.type==="text"),re=e.elements.some(E=>E.id===R&&E.type==="rect");if(!(m.trim()!==""&&m!=="transparent"&&m!=="none"))re&&e.setElements(e.elements.filter(E=>E.id!==R));else if(re)e.setElements(e.elements.map(E=>E.id===R&&E.type==="rect"?{...E,fill:m}:E));else if(_){const E=Math.min(.0025,Math.max(8e-4,_.w*.03)),G=Math.min(9e-4,Math.max(3e-4,_.h*.04));e.setElements([...e.elements,{id:R,type:"rect",x:Math.max(0,_.x-E),y:Math.max(0,_.y-G),w:_.w+E*2,h:_.h+G*2,fill:m,stroke:"transparent",strokeWidth:0,opacity:1}])}}}else e.setTextStyle({...e.textStyle,...l})},onDelete:e.selectedElementId?()=>{const l=`${e.selectedElementId}_bg`;if(e.elements.some(j=>j.id===l)){const j=e.elements.filter(R=>R.id!==e.selectedElementId&&R.id!==l);e.setElements(j),e.pushHistory(j),e.setSelectedElementId(null)}else e.handleElementAction(e.selectedElementId,"delete")}:void 0,onDuplicate:e.selectedElementId?()=>{const l=e.elements.find(re=>re.id===e.selectedElementId);if(!l)return;const m=crypto.randomUUID(),j="x"in l?l.x+.05:.05,R="y"in l?l.y+.05:.05,_=[...e.elements,{...l,id:m,x:j,y:R}];e.setElements(_),e.pushHistory(_),e.setSelectedElementId(m)}:void 0}):e.tool==="forms"?t.jsx(hn,{onAddField:e.addFormField,selectedField:Z,onUpdateSelectedField:B,canvasWidth:y.width,canvasHeight:y.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 m=Math.max(12,Math.min(96,Math.round(l||30)));if(e.signMode==="type"&&(D!=null&&D.typedSignatureMeta)){const j=Math.max(12,Math.min(96,Math.round(e.signTypedFontSize||30))),R=m/j,_=Math.max(.05,D.w/Math.max(.01,D.h)),re=Math.max(.04,1-D.x),ve=Math.max(.02,1-D.y);let E=Math.max(.04,D.w*R),G=E/_;G>ve&&(G=ve,E=G*_),E>re&&(E=re,G=E/_),G<.02&&(G=.02,E=G*_),E<.04&&(E=.04,G=E/_),e.handleElementAction(D.id,"update",{w:E,h:G})}e.setSignTypedFontSize(m)},onDrawColorChange:e.setSignDrawColor,onDrawStrokeWidthChange:e.setSignDrawStrokeWidth,onInsertTyped:e.insertTypedSignature,onInsertDrawn:()=>{xe()},onClearDrawn:()=>{var l;(l=k.current)==null||l.clearPendingSignDraft()},onUploadImage:e.addImageSignature,hasPendingDrawnSignature:c,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:oe}):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:$?$.color:e.annotateMode==="shapes"?e.shapeColor:e.annotateColor,mode:e.annotateMode,shapePreset:e.shapePreset,strokeWidth:z?z.strokeWidth:$?$.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($){e.handleElementAction($.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($){e.handleElementAction($.id,"update",{width:l});return}if(e.annotateMode==="shapes"){e.setShapeStrokeWidth(l);return}e.setAnnotateStrokeWidth(l)},onInsertPen:()=>{ue()},onClearPen:()=>{var l;(l=k.current)==null||l.clearPendingAnnotatePenDraft()},hasPendingPenDraft:f,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:de,title:s.backToCanvas,children:[t.jsx(W,{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",{className:"studio-edit-meta-spacer",style:{flex:1}}),t.jsxs("div",{className:"studio-edit-zoom-cluster",style:{display:"flex",alignItems:"center",gap:2},children:[t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>r.zoomOut(),title:"Zoom Out",children:t.jsx(W,{name:"minus",size:13})}),t.jsxs("span",{style:{fontSize:12,minWidth:40,textAlign:"center",color:"var(--text-muted)",fontVariantNumeric:"tabular-nums"},children:[Math.round(r.zoomLevel*100),"%"]}),t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>r.zoomIn(),title:"Zoom In",children:t.jsx(W,{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:()=>r.zoomToHundred(),title:"100%",children:"1:1"}),t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>r.fitToPage(y.width,y.height),title:"Fit to Page",children:t.jsx(W,{name:"maximize",size:13})}),t.jsx("button",{type:"button",className:"studio-floating-btn",onClick:()=>r.fitToWidth(y.width),title:"Fit to Width",children:t.jsx(W,{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":V?"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")}})}),ie&&t.jsxs("div",{className:`studio-edit-settings-rail${T?" studio-edit-settings-rail--collapsed":""}`,children:[t.jsxs("button",{type:"button",className:"studio-edit-settings-h
1andle","aria-expanded":!T,onClick:()=>{H(l=>!l)},children:[t.jsx("span",{className:"studio-edit-settings-handle-grip","aria-hidden":"true"}),t.jsxs("span",{className:"studio-edit-settings-handle-row",children:[t.jsx("span",{className:"studio-edit-settings-handle-label",children:o[e.tool??""]??s.text}),t.jsx(W,{name:T?"chevron-up":"chevron-down",size:16})]})]}),t.jsx("div",{className:"studio-edit-settings-body",children:ie})]}),t.jsx("div",{className:"studio-edit-canvas-stage",style:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},children:t.jsx("div",{ref:r.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:fe,height:Ee,display:"flex",justifyContent:"center",alignItems:"center",flexShrink:0},children:t.jsxs("div",{ref:u,className:"studio-edit-canvas-surface",style:{width:y.width,height:y.height,position:"relative",transform:`scale(${r.zoomLevel})`,transformOrigin:"center center",flexShrink:0},children:[t.jsx("img",{ref:p,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:k,page:e.preview.page,width:y.width,height:y.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:g,onPendingAnnotatePenDraftChange:P,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(),I()},onDiscard:()=>{if(e.hasDirtyChanges){U(()=>()=>{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"&&He.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)}:I,disabled:e.isApplying||(e.tool==="protect"?!ne&&!ae.trim():!Q),children:e.isApplying?e.tool==="protect"?"Protecting...":s.saving:e.tool==="protect"?s.protect:s.save})}),document.body)]}),M&&t.jsx(Vt,{type:"confirm",title:s.unsavedConfirm,confirmLabel:"Discard",onConfirm:()=>{M(),U(null)},onCancel:()=>U(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.