PageSourceSearch

https://stirling.com/app/assets/AddStamp-I_f5KMpF.js

js stirling.com collected 2026-09-25 21:09:19 UTC 9,652 bytes, 2 lines download raw bytes

1import{h as V,r as h,j as r,S as Q,k as H}from"./vendor-ui-CS0mnPFt.js";import{c as tt}from"./createToolFlow-C4zWLjrN.js";import{B as et,aj as U,ak as st,al as W,e as it}from"./index-C_aFVV9u.js";import{u as nt}from"./useViewScopedFiles-BhlXdGH7.js";import{u as ot}from"./useThumbnailGeneration-D2TJvQTe.js";import{c as at,s as a,g as rt,b as ct,A as lt,d as dt,S as mt,a as pt}from"./StampPositionFormattingSettings-5vIETuP1.js";import{P as ut}from"./PrivateContent-5HmopU0L.js";import{B as ht}from"./ButtonSelector-DYYa7f4S.js";import{u as gt}from"./useAccordionSteps-DHEIW67s.js";import{O as xt}from"./ObscuredOverlay-BjhZBKoN.js";import"./vendor-i18n-Duaa3CPZ.js";import"./vendor-zip-MQ9XS9sB.js";import"./vendor-posthog-BTegTnBq.js";import"./DocumentThumbnail-T25PCzpJ.js";import"./vendor-embedpdf-DPr2xF0N.js";import"./vendor-pdfjs-qeL0KTy0.js";import"./vendor-supabase-BDX6J8AV.js";import"./useFileWithUrl-Df6BIo9b.js";function ft({parameters:e,onParameterChange:x,file:f,showQuickGrid:m}){const{t:T}=V(),M=h.useRef(null),[l,B]=h.useState({width:0,height:0}),[j,c]=h.useState(null),[o,F]=h.useState(null),[b,A]=h.useState(null),{requestThumbnail:R}=ot(),[P,N]=h.useState(null);h.useEffect(()=>{if(e.stampType==="image"&&e.stampImage){const t=URL.createObjectURL(e.stampImage),i=new Image;return i.onload=()=>{c({url:t,width:i.width,height:i.height})},i.src=t,()=>URL.revokeObjectURL(t)}else c(null)},[e.stampType,e.stampImage]),h.useEffect(()=>{const t=M.current;if(!t)return;const i=()=>{const u=o?o.widthPts/o.heightPts:lt;B({width:t.clientWidth,height:t.clientWidth/u})};i();const s=new ResizeObserver(i);return s.observe(t),()=>s.disconnect()},[o]),h.useEffect(()=>{let t=!1;return(async()=>{if(!f||f.type!=="application/pdf"){F(null);return}try{const s=await f.arrayBuffer(),u=await U.createDocument(s,{disableAutoFetch:!0,disableStream:!0}),n=(await u.getPage(1)).getViewport({scale:1,rotation:0});t||F({widthPts:n.width,heightPts:n.height}),U.destroyDocument(u)}catch{t||F(null)}})(),()=>{t=!0}},[f]),h.useEffect(()=>{let t=!0;return(async()=>{if(!f||f.type!=="application/pdf"){A(null);return}try{const s=Math.max(1,dt(e.pageNumbers)),u=`${f.name}:${f.size}:${f.lastModified}:page:${s}`,g=await R(u,f,s);t&&A(g||null)}catch{t&&A(null)}})(),()=>{t=!1}},[f,e.pageNumbers,R]);const S=h.useMemo(()=>at(e,j,o,l,m,P,!!b),[l,e,j,o,m,P,b]),E=h.useRef(null);h.useEffect(()=>{const t=S.item;if(!t||l.width<=0||l.height<=0)return;const i=v=>parseFloat(String(v).replace("px",""))||0,s=i(t.left),u=i(t.bottom),g=i(t.width),n=i(t.height),d=E.current,y=e.overrideX>=0&&e.overrideY>=0&&!m;if(d&&y&&e.fontSize!==d.fontSize&&d.widthPx>0&&d.heightPx>0&&g>0&&n>0){const v=d.leftPx+d.widthPx/2,I=d.bottomPx+d.heightPx/2,Y=v-g/2,z=I-n/2,L=o?.widthPts??595.28,O=o?.heightPts??841.89,k=l.width/L,q=l.height/O,$=Math.max(0,l.width-g),J=Math.max(0,l.height-n),K=Math.max(0,Math.min($,Y))/k,Z=Math.max(0,Math.min(J,z))/q;x("overrideX",K),x("overrideY",Z)}E.current={fontSize:e.fontSize,widthPx:g,heightPx:n,leftPx:s,bottomPx:u}},[e.fontSize,S.item,l,o,m,e.overrideX,e.overrideY,x]);const p=h.useRef(null),C=()=>{const t=l.width,i=l.height;if(t<=0||i<=0)return;const s=S.item,u=parseFloat(String(s.left).replace("px",""))||0,g=parseFloat(String(s.bottom).replace("px",""))||0,n=parseFloat(String(s.width).replace("px",""))||0,d=parseFloat(String(s.height).replace("px",""))||0,w=o?.widthPts??595.28,y=o?.heightPts??841.89,v=l.width/w,I=l.height/y;if(e.overrideX<0||e.overrideY<0){const Y=Math.max(0,t-n),z=Math.max(0,i-d);x("overrideX",Math.max(0,Math.min(Y,u))/v),x("overrideY",Math.max(0,Math.min(z,g))/I)}},X=(t,i)=>{t.preventDefault(),C();const s=S.item,u=parseFloat(String(s.left).replace("px",""))||0,g=parseFloat(String(s.bottom).replace("px",""))||0,n=parseFloat(String(s.width).replace("px",""))||e.fontSize,d=parseFloat(String(s.height).replace("px",""))||e.fontSize,w=t.currentTarget.parentElement?.getBoundingClientRect(),y=u+n/2,v=g+d/2;p.current={type:i,startX:t.clientX-(w?.left||0),startY:w?w.bottom-t.clientY:0,initLeft:u,initBottom:g,initWidth:n,initHeight:d,centerX:y,centerY:v},t.currentTarget.setPointerCapture(t.pointerId)},_=t=>{if(!p.current)return;const i=M.current;if(!i)return;const s=i.getBoundingClientRect(),u=t.clientX-s.left,g=s.bottom-t.clientY,n=p.current;if(n.type==="move"){const d=u-n.startX,w=g-n.startY,y=Math.max(0,l.width-n.initWidth),v=Math.max(0,l.height-n.initHeight),I=Math.max(0,Math.min(y,n.initLeft+d)),Y=Math.max(0,Math.min(v,n.initBottom+w)),z=o?.widthPts??595.28,L=o?.heightPts??841.89,O=l.width/z,k=l.height/L,q=I/O,$=Y/k;x("overrideX",q),x("overrideY",$)}if(n.type==="resize"){const d=o?.heightPts??841.89,w=l.height/d,v=Math.max(1,n.initHeight+(g-n.startY))/w;x("fontSize",v)}if(n.type==="rotate"){const d=Math.atan2(g-n.centerY,u-n.centerX)*(180/Math.PI);x("rotation",d)}},G=t=>{p.current&&(p.current=null,t.currentTarget.releasePointerCapture(t.pointerId))},D=null;return r.jsxs("div",{children:[r.jsxs("div",{className:a.previewHeader,children:[r.jsx("div",{className:a.divider}),r.jsx("div",{className:a.previewLabel,children:T("addStamp.preview","Preview Stamp")})]}),r.jsxs("div",{ref:M,className:`${a.container} ${a.containerBorder} ${b?a.containerWithThumbnail:a.containerWithoutThumbnail}`,style:S.container,onPointerMove:_,onPointerUp:G,children:[b&&r.jsx(ut,{children:r.jsx("img",{src:b,alt:"page preview",className:a.pageThumbnail,draggable:!1})}),e.stampType==="text"&&r.jsxs("div",{className:`${a.stampItem} ${a.stampItemGridMode}`,style:S.item,"data-user-content-preview":"",children:[(e.stampText||"").split(`
2`).map((t,i)=>r.jsx("span",{className:a.textLine,style:{fontFamily:ct(e.alphabet),fontSize:`${Math.max(1,e.fontSize*rt(e.alphabet)/2)}px`,whiteSpace:"nowrap"},children:t||" "},i)),D]}),e.stampType==="image"&&j&&r.jsxs("div",{className:`${a.stampItem} ${m?a.stampItemGridMode:a.stampItemDraggable}`,style:S.item,onPointerDown:t=>X(t,"move"),children:[r.jsx("img",{src:j.url,alt:"stamp preview",className:a.stampImage}),D]}),m&&r.jsx("div",{className:a.quickGrid,children:Array.from({length:9}).map((t,i)=>{const s=i+1,u=e.position===s&&(e.overrideX<0||e.overrideY<0);return r.jsx(et,{variant:"tertiary",className:`${a.gridTile} ${u||P===s?a.gridTileSelected:""} ${P===s?a.gridTileHovered:""}`,onClick:()=>{x("overrideX",-1),x("overrideY",-1),x("position",s)},onMouseEnter:()=>N(s),onMouseLeave:()=>N(null),children:s},s)})})]}),r.jsx("div",{className:a.previewDisclaimer,children:"Preview is a
2pproximate. Final output may vary due to PDF font metrics."})]})}const St=({onPreviewFile:e,onComplete:x,onError:f})=>{const{t:m}=V(),T=nt(),[M,l]=h.useState(!1),[B,j]=h.useState(!0),c=st(),o=W(),{enabled:F,loading:b}=it("add-stamp");h.useEffect(()=>{o.resetResults(),e?.(null)},[c.parameters]);const A=async()=>{try{await o.executeOperation(c.parameters,T),o.files&&x&&x(o.files)}catch(p){f?.((p instanceof Error?p.message:void 0)||m("AddStampRequest.error.failed","Add stamp operation failed"))}},R=T.length>0,P=o.files.length>0||o.downloadUrl!==null;let N;(p=>{p.NONE="none",p.STAMP_SETUP="stampSetup",p.POSITION_FORMATTING="positionFormatting"})(N||(N={}));const S=gt({noneValue:"none",initialStep:"stampSetup",stateConditions:{hasFiles:R,hasResults:P},afterResults:()=>{o.resetResults(),e?.(null)}}),E=()=>{const p=[];return p.push({title:m("AddStampRequest.stampSetup","Stamp Setup"),isCollapsed:S.getCollapsedState("stampSetup"),onCollapsedClick:()=>S.handleStepToggle("stampSetup"),isVisible:R||P,content:r.jsx(mt,{parameters:c.parameters,onParameterChange:c.updateParameter,disabled:b,filename:T[0]?.name})}),p.push({title:m("AddStampRequest.positionAndFormatting","Position & Formatting"),isCollapsed:S.getCollapsedState("positionFormatting"),onCollapsedClick:()=>S.handleStepToggle("positionFormatting"),isVisible:R||P,content:r.jsxs(Q,{gap:"md",justify:"space-between",children:[c.parameters.stampType==="image"&&r.jsx(ht,{value:M?"quick":"custom",onChange:C=>{const X=C==="quick";l(X),j(!X)},options:[{value:"quick",label:m("quickPosition","Quick Position")},{value:"custom",label:m("customPosition","Custom Position")}],disabled:b,textClassName:a.modeToggleButtonText}),c.parameters.stampType==="image"&&B&&r.jsx("div",{className:a.informationContainer,children:r.jsx(H,{className:a.informationText,children:m("AddStampRequest.customPosition","Drag the stamp to the desired location in the preview window.")})}),c.parameters.stampType==="image"&&!B&&r.jsx("div",{className:a.informationContainer,children:r.jsx(H,{className:a.informationText,children:m("AddStampRequest.quickPosition","Select a position on the page to place the stamp.")})}),r.jsx(pt,{parameters:c.parameters,onParameterChange:c.updateParameter,disabled:b}),r.jsx(xt,{obscured:S.currentStep==="positionFormatting"&&(c.parameters.stampType==="text"&&c.parameters.stampText.trim().length===0||c.parameters.stampType==="image"&&!c.parameters.stampImage),overlayMessage:r.jsx(H,{size:"sm",c:"white",fw:600,children:m("AddStampRequest.noStampSelected","No stamp selected. Return to Step 1.")}),children:r.jsx(ft,{parameters:c.parameters,onParameterChange:c.updateParameter,file:T[0]||null,showQuickGrid:c.parameters.stampType==="text"?!0:M})})]})}),p};return tt({files:{selectedFiles:o.getEligibleFiles?.(c.parameters,T)??T,isCollapsed:P},steps:E(),executeButton:{text:m("AddStampRequest.submit","Add Stamp"),isVisible:!P,loadingText:m("loading"),onClick:A,endpointEnabled:F,paramsValid:c.validateParameters()},review:{isVisible:P,operation:o,title:m("AddStampRequest.results.title","Stamp Results"),onFileClick:p=>e?.(p),onUndo:async()=>{await o.undoOperation(),e?.(null)}}})};St.tool=()=>W;export{St as default};

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