PageSourceSearch

https://wuhenba-webos.hf.space/assets/ImageViewer-Ct6pc7Ci.js

js wuhenba-webos.hf.space collected 2026-10-03 10:23:15 UTC 7,722 bytes, 10 lines download raw bytes

1import{r as s,b2 as B,u as X,j as t,C as ae,aE as ve}from"./index-DESGoUL_.js";import{u as je}from"./useCurrentProcess-Bxfb-kmo.js";import{C as oe}from"./chevron-left-B9yUgBgs.js";import{b as we,Z as ke,F as ye,a as Ce,M as De}from"./zoom-out-sIMsQp7H.js";import{R as Ee}from"./rotate-cw-98DF1txz.js";const Se=.1,Me=10,g=.1,re=3e3;function Pe({windowId:d}){const{win:v,procState:j}=je(d),A=j.src||"",E=(v==null?void 0:v.title)||"Image",f=j.imageList||[],c=j.imageIndex??0,w=f.length>1,k=s.useRef(null),Z=s.useRef(null),[y,m]=s.useState(1),[ie,C]=s.useState(0),[F,S]=s.useState({x:0,y:0}),[U,I]=s.useState(!1),[G,H]=s.useState(!1),[O,K]=s.useState(!1),[q,W]=s.useState(!0),[J,Q]=s.useState(!1),[V,ee]=s.useState(!1),[te,x]=s.useState(!0),_=s.useRef({x:0,y:0}),Y=s.useRef({x:0,y:0}),M=s.useRef(),[le,r]=s.useState(!1),D=e=>Math.min(Me,Math.max(Se,e)),$=s.useCallback(()=>{const e=k.current,a=Z.current;if(!e||!a||!a.naturalWidth||!a.naturalHeight)return;const n=e.getBoundingClientRect(),o=40,b=n.width-o,l=n.height-o,p=b/a.naturalWidth,N=l/a.naturalHeight,T=Math.min(p,N,1);m(T),S({x:0,y:0}),x(!0)},[]),h=s.useCallback(()=>{r(!0),C(0),I(!1),H(!1),$()},[$]),i=s.useCallback(()=>{W(!0),clearTimeout(M.current),M.current=setTimeout(()=>W(!1),re)},[]),R=s.useCallback(async e=>{if(e<0||e>=f.length)return;const a=f[e];try{let n;try{n=await B.presign(a.nodeId,a.path,"GET")||await B.downloadUrl(a.nodeId,a.path)}catch{n=await B.downloadUrl(a.nodeId,a.path)}X.getState().updateAppData(d,{src:n,imageIndex:e});const o=X.getState();o.windows.findIndex(l=>l.id===d)>=0&&X.setState({windows:o.windows.map(l=>l.id===d?{...l,title:a.name}:l)}),Q(!1),ee(!1),h()}catch{}},[f,d,h]),L=s.useCallback(()=>{R(c-1),i()},[R,c,i]),z=s.useCallback(()=>{R(c+1),i()},[R,c,i]);s.useEffect(()=>{var e;(e=k.current)==null||e.focus()},[]),s.useEffect(()=>(M.current=setTimeout(()=>W(!1),re),()=>clearTimeout(M.current)),[]),s.useEffect(()=>{const e=k.current;if(!e)return;const a=n=>{n.preventDefault(),i();const o=n.deltaY>0?-g:g;m(b=>{const l=D(b+o*Math.max(1,b)),p=e.getBoundingClientRect(),N=n.clientX-p.left-p.width/2,T=n.clientY-p.top-p.height/2,se=l/b;return S(ne=>({x:N-se*(N-ne.x),y:T-se*(T-ne.y)})),x(!1),r(!1),l})};return e.addEventListener("wheel",a,{passive:!1}),()=>e.removeEventListener("wheel",a)},[i]),s.useEffect(()=>{if(!O)return;const e=n=>{S({x:Y.current.x+(n.clientX-_.current.x),y:Y.current.y+(n.clientY-_.current.y)})},a=()=>{K(!1)};return document.addEventListener("mousemove",e),document.addEventListener("mouseup",a),()=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",a)}},[O]),s.useEffect(()=>{const e=k.current;if(!e)return;const a=n=>{switch(i(),n.key){case"ArrowLeft":n.preventDefault(),w&&L();break;case"ArrowRight":n.preventDefault(),w&&z();break;case"+":case"=":n.preventDefault(),r(!0),m(o=>D(o+g*Math.max(1,o))),x(!1);break;case"-":case"_":n.preventDefault(),r(!0),m(o=>D(o-g*Math.max(1,o))),x(!1);break;case"r":n.preventDefault(),r(!0),C(o=>(o+90)%360);break;case"R":n.preventDefault(),r(!0),C(o=>(o-90+360)%360);break;case"h":n.preventDefault(),r(!0),I(o=>!o);break;case"v":n.preventDefault(),r(!0),H(o=>!o);break;case"0":n.preventDefault(),h();break}};return e.addEventListener("keydown",a),()=>e.removeEventListener("keydown",a)},[i,h,w,L,z]);const ce=e=>{e.button===0&&(e.preventDefault(),K(!0),r(!1),_.current={x:e.clientX,y:e.clientY},Y.current={...F})},ue=()=>{r(!0),te?(m(1),S({x:0,y:0}),x(!1)):h()},de=()=>{r(!0),m(e=>D(e+g*Math.max(1,e))),x(!1),i()},fe=()=>{r(!0),m(e=>D(e-g*Math.max(1,e))),x(!1),i()},me=()=>{r(!0),C(e=>(e+90)%360),i()},xe=()=>{r(!0),C(e=>(e-90+360)%360),i()},he=()=>{r(!0),I(e=>!e),i()},be=()=>{r(!0),H(e=>!e),i()},pe=[`translate(${F.x}px, ${F.y}px)`,`rotate(${ie}deg)`,`scale(${U?-y:y}, ${G?-y:y})`].join(" "),ge=Math.round(y*100);return t.jsxs("div",{ref:k,tabIndex:0,className:"h-full w-full relative overflow-hidden bg-black outline-none select-none",style:{cursor:O?"grabbing":"grab"},onMouseDown:ce,onDoubleClick:ue,onMouseMove:i,children:[V&&t.jsx("div",{className:"absolute inset-0 flex items-center justify-center z-[1] pointer-events-none",children:t.jsxs("div",{className:"text-white/80 text-center",children:[t.jsx("p",{className:"text-lg mb-2",children:"图片加载失败"}),t.jsx("p",{className:"text-sm text-white/50",children:E})]})}),!J&&!V&&t.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:t.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-2 border-gray-300 border-t-gray-600"})}),!V&&t.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:t.jsx("img",{ref:Z,src:A,alt:E,draggable:!1,
1className:"max-w-none",style:{transform:pe,transition:le?"transform 0.2s ease":"none",visibility:J?"visible":"hidden"},onLoad:()=>{Q(!0),te&&$()},onError:()=>ee(!0)})}),w&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",onClick:e=>{e.stopPropagation(),L()},onMouseDown:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),disabled:c<=0,className:`absolute left-3 top-1/2 -translate-y-1/2 z-10 w-10 h-10 rounded-full
2              bg-black/40 backdrop-blur-md border border-white/10 text-white/80
3              flex items-center justify-center
4              hover:bg-black/60 disabled:opacity-30 disabled:cursor-not-allowed
5              transition-all duration-200`,title:"上一张 (←)",children:t.jsx(oe,{size:20})}),t.jsx("button",{type:"button",onClick:e=>{e.stopPropagation(),z()},onMouseDown:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),disabled:c>=f.length-1,className:`absolute right-3 top-1/2 -translate-y-1/2 z-10 w-10 h-10 rounded-full
6              bg-black/40 backdrop-blur-md border border-white/10 text-white/80
7              flex items-center justify-center
8              hover:bg-black/60 disabled:opacity-30 disabled:cursor-not-allowed
9              transition-all duration-200`,title:"下一张 (→)",children:t.jsx(ae,{size:20})})]}),"/* PLACEHOLDER_TOOLBAR */",t.jsxs("div",{className:`absolute bottom-4 left-1/2 -translate-x-1/2 flex items-center gap-0.5 px-2 py-1.5 rounded-lg
10          bg-black/50 backdrop-blur-md border border-white/10 text-white/80 transition-opacity duration-300 z-10`,style:{opacity:q?1:0,pointerEvents:q?"auto":"none"},onMouseDown:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:[w&&t.jsxs(t.Fragment,{children:[t.jsx(u,{onClick:L,title:"上一张 (←)",disabled:c<=0,children:t.jsx(oe,{size:16})}),t.jsxs("span",{className:"text-xs min-w-[3em] text-center tabular-nums",children:[c+1,"/",f.length]}),t.jsx(u,{onClick:z,title:"下一张 (→)",disabled:c>=f.length-1,children:t.jsx(ae,{size:16})}),t.jsx(P,{})]}),t.jsx(u,{onClick:fe,title:"缩小 (-)",children:t.jsx(we,{size:16})}),t.jsxs("span",{className:"text-xs min-w-[3.5em] text-center tabular-nums",children:[ge,"%"]}),t.jsx(u,{onClick:de,title:"放大 (+)",children:t.jsx(ke,{size:16})}),t.jsx(P,{}),t.jsx(u,{onClick:xe,title:"逆时针旋转 (Shift+R)",children:t.jsx(ve,{size:16})}),t.jsx(u,{onClick:me,title:"顺时针旋转 (R)",children:t.jsx(Ee,{size:16})}),t.jsx(P,{}),t.jsx(u,{onClick:he,title:"水平翻转 (H)",active:U,children:t.jsx(ye,{size:16})}),t.jsx(u,{onClick:be,title:"垂直翻转 (V)",active:G,children:t.jsx(Ce,{size:16})}),t.jsx(P,{}),t.jsx(u,{onClick:h,title:"重置 (0)",children:t.jsx(De,{size:16})})]})]})}function u({onClick:d,title:v,active:j,disabled:A,children:E}){return t.jsx("button",{type:"button",onClick:d,title:v,disabled:A,className:`p-1.5 rounded hover:bg-white/20 transition-colors disabled:opacity-30 disabled:cursor-not-allowed ${j?"bg-white/20":""}`,children:E})}function P(){return t.jsx("div",{className:"w-px h-4 bg-white/20 mx-1"})}export{Pe 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.