pdf-tsx 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -466,6 +466,18 @@ function App() {
466
466
 
467
467
  ---
468
468
 
469
+ ## Keyboard shortcuts
470
+
471
+ When focus is not on an input or textarea, the following keys are active:
472
+
473
+ | Key | Action |
474
+ |-----------------------------|------------------|
475
+ | `ArrowLeft` / `ArrowUp` | Previous page |
476
+ | `ArrowRight` / `ArrowDown` | Next page |
477
+ | `r` / `R` | Rotate +90° |
478
+
479
+ ---
480
+
469
481
  ## Performance
470
482
 
471
483
  `pdf-tsx` uses **virtual rendering**: only the pages near the current view are rendered at any one time. The default window is the current page ±2. Pages with an active highlight or search match are always included regardless of position.
@@ -1 +1 @@
1
- const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../context/PDFViewerContext.cjs`),n=require(`../hooks/useScrollTracking.cjs`),r=require(`../hooks/useKeyboardShortcuts.cjs`),i=require(`../hooks/useTextLayer.cjs`),a=require(`../utils/url.cjs`),ee=require(`../hooks/useAnnotationLayer.cjs`),te=require(`../hooks/usePDFLoader.cjs`),ne=require(`../hooks/usePDFRenderer.cjs`),re=require(`../hooks/useOverlayRects.cjs`),o=require(`../utils/pdfFit.cjs`),ie=require(`../context/ThemeContext.cjs`),ae=require(`../context/LabelsContext.cjs`),s=require(`../hooks/useLabels.cjs`),c=require(`./PDFViewer.module.cjs`);let l=require(`react`);l=e.__toESM(l,1);let u=require(`pdfjs-dist`);u=e.__toESM(u,1);let d=require(`react/jsx-runtime`);var f=2;function oe({hasRead:e}){let t=s.useLabels();return(0,d.jsxs)(`div`,{className:`${c.default.requireReadBanner} ${e?c.default.requireReadDone:``}`,children:[e?(0,d.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:(0,d.jsx)(`path`,{d:`M3 8l3.5 3.5L13 4.5`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}):(0,d.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:(0,d.jsx)(`path`,{d:`M8 3v10M4 9l4 4 4-4`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,d.jsx)(`span`,{children:e?t.requireReadDone:t.requireReadPending})]})}var p=({file:e,workerSrc:s,sidebar:p,toolbar:m,onChangeFile:h,themeOverrides:se,defaultTheme:ce,defaultFit:g,language:le,className:_,style:ue,requireRead:v,onDocumentRead:y})=>{(0,l.useEffect)(()=>{u.GlobalWorkerOptions.workerSrc=s},[s]);let[b,x]=(0,l.useState)(1),[S,C]=(0,l.useState)(0),[w,T]=(0,l.useState)(null),[E,de]=(0,l.useState)([]),[D,fe]=(0,l.useState)(!1),[O,k]=(0,l.useState)(g??null),[A,j]=(0,l.useState)(null),[M,N]=(0,l.useState)(!1),P=(0,l.useRef)(!1),F=(0,l.useRef)(null),I=(0,l.useRef)([]),L=(0,l.useRef)([]),R=(0,l.useRef)(S);(0,l.useEffect)(()=>{R.current=S},[S]);let[pe,z]=(0,l.useState)(null);pe!==e&&(z(e),T(null),N(!1),P.current=!1);let{pdf:B,numPages:V,loading:me}=te.usePDFLoader(e);(0,l.useEffect)(()=>{B&&(I.current=Array(B.numPages).fill(null),L.current=Array(B.numPages).fill(null))},[B]),(0,l.useEffect)(()=>{!B||!g||!F.current||o.computeFit(g,B,F.current,R.current).then(x)},[B,g]);let H=(0,l.useRef)(O);(0,l.useEffect)(()=>{H.current=O},[O]),(0,l.useEffect)(()=>{if(!B||!F.current)return;let e=F.current,t=new ResizeObserver(()=>{H.current&&o.computeFit(H.current,B,e,R.current).then(x)});return t.observe(e),()=>t.disconnect()},[B]);let{currentPage:U,goToPage:W}=n.useScrollTracking({numPages:V,containerRef:F,pageRefs:I});(0,l.useEffect)(()=>{V===0||U<V||(v&&!M&&N(!0),P.current||(P.current=!0,y?.()))},[U,V,v,M,y]);let G=(0,l.useMemo)(()=>{if(V===0)return[];let e=new Set,t=Math.max(U-f,1),n=Math.min(U+f,V);for(let r=t;r<=n;r++)e.add(r);w&&e.add(w.page);for(let t of E)e.add(t.page);return Array.from(e).sort((e,t)=>e-t)},[U,V,w,E]),{pageSizes:he,renderedPages:K}=ne.usePDFRenderer({pdf:B,zoom:b,rotation:S,visiblePages:G,canvasRefs:L}),q=(0,l.useMemo)(()=>{let e=new Set(G);for(let t of K)e.add(t);return Array.from(e).sort((e,t)=>e-t)},[G,K]);r.useKeyboardShortcuts({pdf:B,currentPage:U,goToPage:W,setZoom:x,setRotation:C,setFitMode:k});let ge=i.useTextLayer({pdf:B,zoom:b,rotation:S,mountedPages:q,canvasRefs:L}),{linkOverlays:_e,noteOverlays:J}=ee.useAnnotationLayer({pdf:B,zoom:b,rotation:S,mountedPages:q,goToPage:W});(0,l.useEffect)(()=>{if(!A)return;let e=()=>j(null),t=e=>{e.key===`Escape`&&j(null)};return document.addEventListener(`click`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`click`,e),document.removeEventListener(`keydown`,t)}},[A]);let{overlayRect:Y,searchOverlays:ve}=re.useOverlayRects({pdf:B,highlight:w,searchMatches:E,zoom:b,rotation:S}),ye=(0,l.useCallback)((e,t)=>{(!e.url||!a.isSafeUrl(e.url))&&(t.preventDefault(),e.url||e._handleClick())},[]),X=(0,l.useRef)(null),Z=(0,l.useCallback)((e,t)=>{X.current&&clearTimeout(X.current);let n=t.clientY>window.innerHeight*.6;j({x:Math.min(t.clientX,window.innerWidth-304),y:n?window.innerHeight-t.clientY+8:t.clientY+12,above:n,contents:e.contents,title:e.title})},[]),Q=(0,l.useCallback)(()=>{X.current=setTimeout(()=>j(null),200)},[]),$=(0,l.useCallback)(e=>{T({page:e.page,pdfRect:e.pdfRect}),W(e.page)},[T,W]),be=(0,l.useMemo)(()=>({pdf:B,numPages:V,zoom:b,setZoom:x,rotation:S,setRotation:C,currentPage:U,goToPage:W,containerRef:F,canvasRefs:L,file:e,highlight:w,setHighlight:T,searchMatches:E,setSearchMatches:de,onChangeFile:h,sidebarCollapsed:D,setSidebarCollapsed:fe,fitMode:O,setFitMode:k,navigationLocked:!!v&&!M}),[B,V,b,S,U,W,e,w,E,h,D,O,v,M]);return(0,d.jsx)(ie.ThemeProvider,{themeOverrides:se,defaultTheme:ce,children:(0,d.jsx)(ae.LabelsProvider,{language:le,children:(0,d.jsxs)(t.PDFViewerContext.Provider,{value:be,children:[(0,d.jsxs)(`div`,{className:`${c.default.appLayout}${_?` ${_}`:``}`,style:ue,children:[m&&(0,d.jsx)(`div`,{className:c.default.toolbar,children:m}),(0,d.jsxs)(`div`,{className:c.default.body,children:[p,(0,d.jsxs)(`div`,{className:c.default.scrollContainer,ref:F,children:[me&&(0,d.jsx)(`div`,{className:c.default.documentLoading}),Array.from({length:V},(e,t)=>{let n=K.has(t+1),r=he[t],i=q.includes(t+1);return(0,d.jsxs)(`div`,{className:c.default.pageWrapper,ref:e=>{I.current[t]=e},style:r?{width:r.width,height:r.height}:void 0,children:[r&&!n&&(0,d.jsx)(`div`,{className:c.default.pageSkeleton,style:{width:r.width,height:r.height}}),i&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(`canvas`,{className:c.default.pageCanvas,ref:e=>{L.current[t]=e},style:{display:n?`block`:`none`}}),(0,d.jsx)(`div`,{className:`textLayer ${c.default.textLayer}`,ref:e=>{ge.current[t]=e}})]}),_e.filter(e=>e.page===t+1).map((e,t)=>(0,d.jsx)(`a`,{className:c.default.linkOverlay,href:e.url&&a.isSafeUrl(e.url)?e.url:`#`,target:`_blank`,rel:`noopener noreferrer`,style:{left:e.x,top:e.y,width:e.width,height:e.height},onClick:t=>ye(e,t)},t)),J.filter(e=>e.page===t+1).map((e,t)=>e.subtype===`Text`?(0,d.jsx)(`div`,{className:c.default.noteIconOverlay,style:{left:e.x,top:e.y,width:Math.max(e.width,26),height:Math.max(e.height,26)},onMouseEnter:t=>Z(e,t),onMouseLeave:Q,onClick:()=>$(e),children:(0,d.jsxs)(`svg`,{width:`22`,height:`22`,viewBox:`0 0 12 12`,fill:`none`,"aria-hidden":`true`,children:[(0,d.jsx)(`rect`,{x:`0.5`,y:`0.5`,width:`9`,height:`8`,rx:`1`,fill:`rgba(255,210,0,0.9)`,stroke:`rgba(160,120,0,0.7)`,strokeWidth:`1`}),(0,d.jsx)(`path`,{d:`M9.5 5.5v3l2.5-3z`,fill:`rgba(255,210,0,0.9)`,stroke:`rgba(160,120,0,0.7)`,strokeWidth:`1`}),(0,d.jsx)(`line`,{x1:`2`,y1:`3`,x2:`8`,y2:`3`,stroke:`rgba(90,60,0,0.8)`,strokeWidth:`1`,strokeLinecap:`round`}),(0,d.jsx)(`line`,{x1:`2`,y1:`5.5`,x2:`7`,y2:`5.5`,stroke:`rgba(90,60,0,0.8)`,strokeWidth:`1`,strokeLinecap:`round`})]})},t):(0,d.jsx)(`div`,{className:c.default.noteOverlay,style:{left:e.x,top:e.y,width:e.width,height:e.height},onMouseEnter:t=>Z(e,t),onMouseLeave:Q,onClick:()=>$(e)},t)),ve.filter(e=>e.page===t+1).map((e,t)=>(0,d.jsx)(`div`,{className:c.default.searchMatchOverlay,style:{left:e.x,top:e.y,width:e.width,height:e.height}},t)),w&&Y?.page===t+1&&(0,d.jsx)(`div`,{className:c.default.highlightOverlay,style:{left:Y.x,top:Y.y,width:Y.width,height:Y.height}})]},`${t}-${S}`)}),v&&(0,d.jsx)(oe,{hasRead:M})]})]})]}),A&&(0,d.jsxs)(`div`,{className:c.default.notePopover,style:A.above?{left:A.x,bottom:A.y}:{left:A.x,top:A.y},onMouseEnter:()=>{X.current&&clearTimeout(X.current)},onMouseLeave:Q,onClick:e=>e.stopPropagation(),children:[A.title&&(0,d.jsx)(`div`,{className:c.default.notePopoverTitle,children:A.title}),(0,d.jsx)(`p`,{className:c.default.notePopoverContent,children:A.contents})]})]})})})};exports.default=p;
1
+ const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../context/PDFViewerContext.cjs`),n=require(`../hooks/useScrollTracking.cjs`),r=require(`../hooks/useKeyboardShortcuts.cjs`),i=require(`../hooks/useTextLayer.cjs`),a=require(`../utils/url.cjs`),ee=require(`../hooks/useAnnotationLayer.cjs`),te=require(`../hooks/usePDFLoader.cjs`),ne=require(`../hooks/usePDFRenderer.cjs`),re=require(`../hooks/useOverlayRects.cjs`),o=require(`../utils/pdfFit.cjs`),ie=require(`../context/ThemeContext.cjs`),ae=require(`../context/LabelsContext.cjs`),s=require(`../hooks/useLabels.cjs`),c=require(`./PDFViewer.module.cjs`);let l=require(`react`);l=e.__toESM(l,1);let u=require(`pdfjs-dist`);u=e.__toESM(u,1);let d=require(`react/jsx-runtime`);var f=2;function oe({hasRead:e}){let t=s.useLabels();return(0,d.jsxs)(`div`,{className:`${c.default.requireReadBanner} ${e?c.default.requireReadDone:``}`,children:[e?(0,d.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:(0,d.jsx)(`path`,{d:`M3 8l3.5 3.5L13 4.5`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}):(0,d.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:(0,d.jsx)(`path`,{d:`M8 3v10M4 9l4 4 4-4`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`})}),(0,d.jsx)(`span`,{children:e?t.requireReadDone:t.requireReadPending})]})}var p=({file:e,workerSrc:s,sidebar:p,toolbar:m,onChangeFile:h,themeOverrides:se,defaultTheme:ce,defaultFit:g,language:le,className:_,style:ue,requireRead:v,onDocumentRead:y})=>{(0,l.useEffect)(()=>{u.GlobalWorkerOptions.workerSrc=s},[s]);let[b,x]=(0,l.useState)(1),[S,C]=(0,l.useState)(0),[w,T]=(0,l.useState)(null),[E,de]=(0,l.useState)([]),[D,fe]=(0,l.useState)(!1),[O,pe]=(0,l.useState)(g??null),[k,A]=(0,l.useState)(null),[j,M]=(0,l.useState)(!1),N=(0,l.useRef)(!1),P=(0,l.useRef)(null),F=(0,l.useRef)([]),I=(0,l.useRef)([]),L=(0,l.useRef)(S);(0,l.useEffect)(()=>{L.current=S},[S]);let[R,z]=(0,l.useState)(null);R!==e&&(z(e),T(null),M(!1)),(0,l.useEffect)(()=>{N.current=!1},[e]);let{pdf:B,numPages:V,loading:me}=te.usePDFLoader(e);(0,l.useEffect)(()=>{B&&(F.current=Array(B.numPages).fill(null),I.current=Array(B.numPages).fill(null))},[B]),(0,l.useEffect)(()=>{!B||!g||!P.current||o.computeFit(g,B,P.current,L.current).then(x)},[B,g]);let H=(0,l.useRef)(O);(0,l.useEffect)(()=>{H.current=O},[O]),(0,l.useEffect)(()=>{if(!B||!P.current)return;let e=P.current,t=new ResizeObserver(()=>{H.current&&o.computeFit(H.current,B,e,L.current).then(x)});return t.observe(e),()=>t.disconnect()},[B]);let{currentPage:U,goToPage:W}=n.useScrollTracking({numPages:V,containerRef:P,pageRefs:F});(0,l.useEffect)(()=>{V===0||U<V||(v&&!j&&M(!0),N.current||(N.current=!0,y?.()))},[U,V,v,j,y]);let G=(0,l.useMemo)(()=>{if(V===0)return[];let e=new Set,t=Math.max(U-f,1),n=Math.min(U+f,V);for(let r=t;r<=n;r++)e.add(r);w&&e.add(w.page);for(let t of E)e.add(t.page);return Array.from(e).sort((e,t)=>e-t)},[U,V,w,E]),{pageSizes:he,renderedPages:K}=ne.usePDFRenderer({pdf:B,zoom:b,rotation:S,visiblePages:G,canvasRefs:I}),q=(0,l.useMemo)(()=>{let e=new Set(G);for(let t of K)e.add(t);return Array.from(e).sort((e,t)=>e-t)},[G,K]);r.useKeyboardShortcuts({pdf:B,currentPage:U,goToPage:W,setRotation:C});let ge=i.useTextLayer({pdf:B,zoom:b,rotation:S,mountedPages:q,canvasRefs:I}),{linkOverlays:_e,noteOverlays:J}=ee.useAnnotationLayer({pdf:B,zoom:b,rotation:S,mountedPages:q,goToPage:W});(0,l.useEffect)(()=>{if(!k)return;let e=()=>A(null),t=e=>{e.key===`Escape`&&A(null)};return document.addEventListener(`click`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`click`,e),document.removeEventListener(`keydown`,t)}},[k]);let{overlayRect:Y,searchOverlays:ve}=re.useOverlayRects({pdf:B,highlight:w,searchMatches:E,zoom:b,rotation:S}),ye=(0,l.useCallback)((e,t)=>{(!e.url||!a.isSafeUrl(e.url))&&(t.preventDefault(),e.url||e._handleClick())},[]),X=(0,l.useRef)(null),Z=(0,l.useCallback)((e,t)=>{X.current&&clearTimeout(X.current);let n=t.clientY>window.innerHeight*.6;A({x:Math.min(t.clientX,window.innerWidth-304),y:n?window.innerHeight-t.clientY+8:t.clientY+12,above:n,contents:e.contents,title:e.title})},[]),Q=(0,l.useCallback)(()=>{X.current=setTimeout(()=>A(null),200)},[]),$=(0,l.useCallback)(e=>{T({page:e.page,pdfRect:e.pdfRect}),W(e.page)},[T,W]),be=(0,l.useMemo)(()=>({pdf:B,numPages:V,zoom:b,setZoom:x,rotation:S,setRotation:C,currentPage:U,goToPage:W,containerRef:P,canvasRefs:I,file:e,highlight:w,setHighlight:T,searchMatches:E,setSearchMatches:de,onChangeFile:h,sidebarCollapsed:D,setSidebarCollapsed:fe,fitMode:O,setFitMode:pe,navigationLocked:!!v&&!j}),[B,V,b,S,U,W,e,w,E,h,D,O,v,j]);return(0,d.jsx)(ie.ThemeProvider,{themeOverrides:se,defaultTheme:ce,children:(0,d.jsx)(ae.LabelsProvider,{language:le,children:(0,d.jsxs)(t.PDFViewerContext.Provider,{value:be,children:[(0,d.jsxs)(`div`,{className:`${c.default.appLayout}${_?` ${_}`:``}`,style:ue,children:[m&&(0,d.jsx)(`div`,{className:c.default.toolbar,children:m}),(0,d.jsxs)(`div`,{className:c.default.body,children:[p,(0,d.jsxs)(`div`,{className:c.default.scrollContainer,ref:P,children:[me&&(0,d.jsx)(`div`,{className:c.default.documentLoading}),Array.from({length:V},(e,t)=>{let n=K.has(t+1),r=he[t],i=q.includes(t+1);return(0,d.jsxs)(`div`,{className:c.default.pageWrapper,ref:e=>{F.current[t]=e},style:r?{width:r.width,height:r.height}:void 0,children:[r&&!n&&(0,d.jsx)(`div`,{className:c.default.pageSkeleton,style:{width:r.width,height:r.height}}),i&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(`canvas`,{className:c.default.pageCanvas,ref:e=>{I.current[t]=e},style:{display:n?`block`:`none`}}),(0,d.jsx)(`div`,{className:`textLayer ${c.default.textLayer}`,ref:e=>{ge.current[t]=e}})]}),_e.filter(e=>e.page===t+1).map((e,t)=>(0,d.jsx)(`a`,{className:c.default.linkOverlay,href:e.url&&a.isSafeUrl(e.url)?e.url:`#`,target:`_blank`,rel:`noopener noreferrer`,style:{left:e.x,top:e.y,width:e.width,height:e.height},onClick:t=>ye(e,t)},t)),J.filter(e=>e.page===t+1).map((e,t)=>e.subtype===`Text`?(0,d.jsx)(`div`,{className:c.default.noteIconOverlay,style:{left:e.x,top:e.y,width:Math.max(e.width,26),height:Math.max(e.height,26)},onMouseEnter:t=>Z(e,t),onMouseLeave:Q,onClick:()=>$(e),children:(0,d.jsxs)(`svg`,{width:`22`,height:`22`,viewBox:`0 0 12 12`,fill:`none`,"aria-hidden":`true`,children:[(0,d.jsx)(`rect`,{x:`0.5`,y:`0.5`,width:`9`,height:`8`,rx:`1`,fill:`rgba(255,210,0,0.9)`,stroke:`rgba(160,120,0,0.7)`,strokeWidth:`1`}),(0,d.jsx)(`path`,{d:`M9.5 5.5v3l2.5-3z`,fill:`rgba(255,210,0,0.9)`,stroke:`rgba(160,120,0,0.7)`,strokeWidth:`1`}),(0,d.jsx)(`line`,{x1:`2`,y1:`3`,x2:`8`,y2:`3`,stroke:`rgba(90,60,0,0.8)`,strokeWidth:`1`,strokeLinecap:`round`}),(0,d.jsx)(`line`,{x1:`2`,y1:`5.5`,x2:`7`,y2:`5.5`,stroke:`rgba(90,60,0,0.8)`,strokeWidth:`1`,strokeLinecap:`round`})]})},t):(0,d.jsx)(`div`,{className:c.default.noteOverlay,style:{left:e.x,top:e.y,width:e.width,height:e.height},onMouseEnter:t=>Z(e,t),onMouseLeave:Q,onClick:()=>$(e)},t)),ve.filter(e=>e.page===t+1).map((e,t)=>(0,d.jsx)(`div`,{className:c.default.searchMatchOverlay,style:{left:e.x,top:e.y,width:e.width,height:e.height}},t)),w&&Y?.page===t+1&&(0,d.jsx)(`div`,{className:c.default.highlightOverlay,style:{left:Y.x,top:Y.y,width:Y.width,height:Y.height}})]},`${t}-${S}`)}),v&&(0,d.jsx)(oe,{hasRead:j})]})]})]}),k&&(0,d.jsxs)(`div`,{className:c.default.notePopover,style:k.above?{left:k.x,bottom:k.y}:{left:k.x,top:k.y},onMouseEnter:()=>{X.current&&clearTimeout(X.current)},onMouseLeave:Q,onClick:e=>e.stopPropagation(),children:[k.title&&(0,d.jsx)(`div`,{className:c.default.notePopoverTitle,children:k.title}),(0,d.jsx)(`p`,{className:c.default.notePopoverContent,children:k.contents})]})]})})})};exports.default=p;
@@ -1 +1 @@
1
- const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../hooks/useLabels.cjs`),n=require(`./ToolbarButton.cjs`),r=require(`./PDFToolbar.module.cjs`),i=require(`./PDFToolbarDropdownContext.cjs`);let a=require(`react`);a=e.__toESM(a,1);let o=require(`react/jsx-runtime`);var s=40;function c({children:e,overflowIcon:c=`···`}){let l=t.useLabels(),u=(0,a.useRef)(null),d=(0,a.useRef)([]),f=(0,a.useRef)([]),[p,m]=(0,a.useState)(null),[h,g]=(0,a.useState)(!1),_=(0,a.useRef)(null),v=a.default.Children.toArray(e),y=(0,a.useCallback)(()=>{let e=u.current,t=f.current;if(!e||t.length===0)return;let n=e.offsetWidth;if(t.reduce((e,t)=>e+t,0)<=n){m(null);return}let r=0,i=0;for(let e=0;e<t.length&&r+t[e]+s<=n;e++)r+=t[e],i++;m(i)},[]);(0,a.useLayoutEffect)(()=>{f.current=d.current.slice(0,v.length).map(e=>e?.offsetWidth??0),y()},[]),(0,a.useEffect)(()=>{let e=u.current;if(!e)return;let t=new ResizeObserver(()=>y());return t.observe(e),()=>t.disconnect()},[y]),(0,a.useEffect)(()=>{if(!h)return;let e=e=>{_.current?.contains(e.target)||g(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[h]);let b=p!==null&&p<v.length,x=b?v.slice(p):[];return(0,o.jsxs)(`div`,{ref:u,className:r.default.toolbar,children:[v.map((e,t)=>(0,o.jsx)(`div`,{ref:e=>{d.current[t]=e},className:r.default.item,style:p!==null&&t>=p?{display:`none`}:void 0,children:e},t)),b&&(0,o.jsxs)(`div`,{ref:_,className:r.default.overflowWrapper,children:[(0,o.jsx)(n.ToolbarButton,{onClick:()=>g(e=>!e),"aria-label":l.toolbarMoreOptions,"aria-expanded":h,"aria-haspopup":`true`,title:l.toolbarMoreOptions,className:h?r.default.overflowBtnActive:void 0,children:c}),h&&(0,o.jsx)(`div`,{className:r.default.dropdown,role:`menu`,children:x.map((e,t)=>{let n=a.default.isValidElement(e)?e.type.toolbarLabelKey:void 0,s=n?l[n]:void 0;return(0,o.jsx)(`div`,{className:r.default.dropdownItem,role:`menuitem`,children:s?(0,o.jsxs)(`div`,{className:r.default.labeledItem,children:[(0,o.jsx)(`span`,{className:r.default.itemLabel,children:s}),(0,o.jsx)(`div`,{className:r.default.itemContent,children:e})]}):(0,o.jsx)(i.PDFToolbarDropdownContext.Provider,{value:!0,children:e})},t)})})]})]})}exports.PDFToolbar=c;
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../hooks/useLabels.cjs`),n=require(`./ToolbarButton.cjs`),r=require(`./PDFToolbar.module.cjs`),i=require(`./PDFToolbarDropdownContext.cjs`);let a=require(`react`);a=e.__toESM(a,1);let o=require(`react/jsx-runtime`);var s=40;function c({children:e,overflowIcon:c=`···`}){let l=t.useLabels(),u=(0,a.useRef)(null),d=(0,a.useRef)([]),f=(0,a.useRef)([]),[p,m]=(0,a.useState)(null),[h,g]=(0,a.useState)(!1),_=(0,a.useRef)(null),v=a.default.Children.toArray(e),y=(0,a.useCallback)(()=>{let e=u.current;if(!e)return;d.current.forEach((e,t)=>{if(e){let n=e.offsetWidth;n>0&&(f.current[t]=n)}});let t=f.current;if(t.length===0)return;let n=e.offsetWidth;if(t.reduce((e,t)=>e+t,0)<=n){m(null);return}let r=0,i=0;for(let e=0;e<t.length&&r+t[e]+s<=n;e++)r+=t[e],i++;m(i)},[]);(0,a.useLayoutEffect)(()=>{y()},[y]),(0,a.useEffect)(()=>{let e=u.current;if(!e)return;let t=new ResizeObserver(()=>y());return t.observe(e),()=>t.disconnect()},[y]),(0,a.useEffect)(()=>{if(!h)return;let e=e=>{_.current?.contains(e.target)||g(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[h]);let b=p!==null&&p<v.length,x=b?v.slice(p):[];return(0,o.jsxs)(`div`,{ref:u,className:r.default.toolbar,children:[v.map((e,t)=>(0,o.jsx)(`div`,{ref:e=>{d.current[t]=e},className:r.default.item,style:p!==null&&t>=p?{display:`none`}:void 0,children:e},t)),b&&(0,o.jsxs)(`div`,{ref:_,className:r.default.overflowWrapper,children:[(0,o.jsx)(n.ToolbarButton,{onClick:()=>g(e=>!e),"aria-label":l.toolbarMoreOptions,"aria-expanded":h,"aria-haspopup":`true`,title:l.toolbarMoreOptions,className:h?r.default.overflowBtnActive:void 0,children:c}),h&&(0,o.jsx)(`div`,{className:r.default.dropdown,role:`menu`,children:x.map((e,t)=>{if(a.default.isValidElement(e)&&e.type.isSeparator)return(0,o.jsx)(i.PDFToolbarDropdownContext.Provider,{value:!0,children:e},t);let n=a.default.isValidElement(e)?e.type.toolbarLabelKey:void 0,s=n?l[n]:void 0;return(0,o.jsx)(`div`,{className:r.default.dropdownItem,role:`menuitem`,children:s?(0,o.jsxs)(`div`,{className:r.default.labeledItem,children:[(0,o.jsx)(`span`,{className:r.default.itemLabel,children:s}),(0,o.jsx)(`div`,{className:r.default.itemContent,children:e})]}):(0,o.jsx)(i.PDFToolbarDropdownContext.Provider,{value:!0,children:e})},t)})})]})]})}exports.PDFToolbar=c;
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./PDFToolbarDropdownContext.cjs`),t=require(`./PDFToolbarSeparator.module.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);function i(){return(0,n.useContext)(e.PDFToolbarDropdownContext)?null:(0,r.jsx)(`div`,{className:t.default.separator,"aria-hidden":`true`})}exports.PDFToolbarSeparator=i;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./PDFToolbarDropdownContext.cjs`),t=require(`./PDFToolbarSeparator.module.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);function i(){return(0,n.useContext)(e.PDFToolbarDropdownContext)?(0,r.jsx)(`div`,{className:t.default.separatorH,"aria-hidden":`true`}):(0,r.jsx)(`div`,{className:t.default.separator,"aria-hidden":`true`})}i.isSeparator=!0,exports.PDFToolbarSeparator=i;
@@ -1 +1 @@
1
- var e={separator:`_separator_uif34_1`};exports.default=e;
1
+ var e={separator:`_separator_b9iob_1`,separatorH:`_separatorH_b9iob_9`};exports.default=e;
@@ -1 +1 @@
1
- const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`react`),n=require(`pdfjs-dist`);n=e.__toESM(n,1);function r({pdf:e,currentPage:n,goToPage:r,setZoom:i,setRotation:a,setFitMode:o}){(0,t.useEffect)(()=>{if(!e)return;let t=e=>{let t=e.target.tagName;if(!(t===`INPUT`||t===`TEXTAREA`))switch(e.key){case`ArrowLeft`:case`ArrowUp`:e.preventDefault(),r(n-1);break;case`ArrowRight`:case`ArrowDown`:e.preventDefault(),r(n+1);break;case`+`:case`=`:e.preventDefault(),o(null),i(e=>Math.min(e+.2,3));break;case`-`:e.preventDefault(),o(null),i(e=>Math.max(e-.2,.2));break;case`r`:case`R`:e.preventDefault(),a(e=>(e+90)%360);break}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,n,r,i,a,o])}exports.useKeyboardShortcuts=r;
1
+ const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`react`),n=require(`pdfjs-dist`);n=e.__toESM(n,1);function r({pdf:e,currentPage:n,goToPage:r,setRotation:i}){(0,t.useEffect)(()=>{if(!e)return;let t=e=>{let t=e.target.tagName;if(!(t===`INPUT`||t===`TEXTAREA`))switch(e.key){case`ArrowLeft`:case`ArrowUp`:e.preventDefault(),r(n-1);break;case`ArrowRight`:case`ArrowDown`:e.preventDefault(),r(n+1);break;case`r`:case`R`:e.preventDefault(),i(e=>(e+90)%360);break}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,n,r,i])}exports.useKeyboardShortcuts=r;
@@ -1 +1 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`react`);var t=10;function n({numPages:n,containerRef:r,pageRefs:i}){let[a,o]=(0,e.useState)(1);return(0,e.useEffect)(()=>{let e=r.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect().top,n=i.current;for(let e=0;e<n.length;e++){let r=n[e];r&&r.getBoundingClientRect().top-t<=150&&o(e+1)}};return e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)},[r,i]),{currentPage:a,goToPage:(0,e.useCallback)((e,a)=>{let s=Math.min(Math.max(e,1),n),c=i.current[s-1],l=r.current;if(c&&l){let e=c.getBoundingClientRect().top,n=l.getBoundingClientRect().top,r=l.scrollTop+(e-n)-t,i=a===void 0?r:r+a;l.scrollTo({top:i,behavior:`smooth`}),o(s)}},[n,r,i])}}exports.useScrollTracking=n;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`react`);var t=10;function n({numPages:n,containerRef:r,pageRefs:i}){let[a,o]=(0,e.useState)(1),s=(0,e.useRef)(null),c=(0,e.useRef)(null);return(0,e.useEffect)(()=>{let e=r.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect().top,n=i.current,r=-1;for(let e=0;e<n.length;e++){let i=n[e];i&&i.getBoundingClientRect().top-t<=150&&(r=e+1)}if(r!==-1){if(s.current!==null)if(r===s.current)s.current=null,c.current&&=(clearTimeout(c.current),null);else return;o(r)}};return e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)},[r,i]),{currentPage:a,goToPage:(0,e.useCallback)((e,a)=>{let l=Math.min(Math.max(e,1),n),u=i.current[l-1],d=r.current;if(u&&d){let e=u.getBoundingClientRect().top,n=d.getBoundingClientRect().top,r=d.scrollTop+(e-n)-t,i=a===void 0?r:r+a,f=()=>{s.current=null,c.current&&=(clearTimeout(c.current),null),d.removeEventListener(`wheel`,f),d.removeEventListener(`pointerdown`,f)};s.current=l,c.current&&clearTimeout(c.current),c.current=setTimeout(f,1e3),d.addEventListener(`wheel`,f,{once:!0}),d.addEventListener(`pointerdown`,f,{once:!0}),o(l),d.scrollTo({top:i,behavior:`smooth`})}},[n,r,i])}}exports.useScrollTracking=n;
@@ -1 +1 @@
1
- const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`react`),n=require(`pdfjs-dist`);n=e.__toESM(n,1);function r(e,t){if(t.type===`reset`)return{thumbnails:Array(t.numPages).fill(null),version:e.version+1};if(t.type===`set`){let n=[...e.thumbnails];return n[t.pageNum-1]=t.dataUrl,{thumbnails:n,version:e.version}}return e}function i({pdf:e,rotation:n,visiblePages:i}){let[{thumbnails:a,version:o},s]=(0,t.useReducer)(r,{thumbnails:[],version:0}),c=(0,t.useRef)(new Set),l=(0,t.useRef)({pdf:null,rotation:0});return(0,t.useEffect)(()=>{if(!e){s({type:`reset`,numPages:0}),c.current.clear(),l.current={pdf:null,rotation:0};return}if(l.current.pdf!==e||l.current.rotation!==n){l.current={pdf:e,rotation:n},c.current.clear(),s({type:`reset`,numPages:e.numPages});return}let t=i.filter(e=>!c.current.has(e));if(t.length===0)return;let r=!1;return(async()=>{for(let i of t){if(r)break;let t=await e.getPage(i),a=t.getViewport({scale:.2,rotation:n}),o=document.createElement(`canvas`),l=o.getContext(`2d`);if(l){if(o.height=a.height,o.width=a.width,await t.render({canvasContext:l,viewport:a,canvas:o}).promise,r)break;c.current.add(i),s({type:`set`,pageNum:i,dataUrl:o.toDataURL()})}}})(),()=>{r=!0}},[e,n,i,o]),{thumbnails:a}}exports.useThumbnails=i;
1
+ const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`react`),n=require(`pdfjs-dist`);n=e.__toESM(n,1);function r({pdf:e,rotation:n,visiblePages:r}){let[i,a]=(0,t.useState)([]),[o,s]=(0,t.useState)(0),c=(0,t.useRef)(new Set),l=(0,t.useRef)({pdf:null,rotation:0});return(0,t.useEffect)(()=>{if(!e){a([]),s(0),c.current.clear(),l.current={pdf:null,rotation:0};return}if(l.current.pdf!==e||l.current.rotation!==n){l.current={pdf:e,rotation:n},c.current.clear(),a(Array(e.numPages).fill(null)),s(e=>e+1);return}let t=r.filter(e=>!c.current.has(e));if(t.length===0)return;let i=!1;return(async()=>{for(let r of t){if(i)break;let t=await e.getPage(r),o=t.getViewport({scale:.2,rotation:n}),s=document.createElement(`canvas`),l=s.getContext(`2d`);if(l){if(s.height=o.height,s.width=o.width,await t.render({canvasContext:l,viewport:o,canvas:s}).promise,i)break;c.current.add(r),a(e=>{let t=[...e];return t[r-1]=s.toDataURL(),t})}}})(),()=>{i=!0}},[e,n,r,o]),{thumbnails:i}}exports.useThumbnails=r;
@@ -1,2 +1,2 @@
1
- ._wrapper_1kvg0_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_1kvg0_7{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_1kvg0_16{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_1kvg0_26{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_1kvg0_35{cursor:pointer;width:44px;height:44px;color:var(--pdf-text-muted);background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;margin:0 2px;transition:background-color .15s,color .15s;display:flex}._panelButton_1kvg0_35:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_1kvg0_57{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_1kvg0_57:hover{color:var(--pdf-accent-light)}._contentPanel_1kvg0_66{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_1kvg0_74{color:var(--pdf-text-muted);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-header-bg);flex-shrink:0;padding:10px 14px;font-size:11px;font-weight:600}._panelBody_1kvg0_86{flex:1;overflow-y:auto}._appLayout_1xasy_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1xasy_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1xasy_17{border-bottom:1px solid var(--pdf-border);background-color:var(--pdf-bg);z-index:10;flex-shrink:0;align-items:center;gap:2px;height:44px;padding:0 12px;display:flex}._scrollContainer_1xasy_29{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;position:relative;overflow-y:auto}._pageWrapper_1xasy_40{margin-bottom:25px;position:relative}._pageCanvas_1xasy_45{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1xasy_54{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only;text-align:initial;opacity:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:2;--min-font-size:1;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}._textLayer_1xasy_54 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1xasy_54>:not(._markedContent_1xasy_80),._textLayer_1xasy_54 ._markedContent_1xasy_80 span:not(._markedContent_1xasy_80){z-index:1;--font-height:0;font-size:calc(var(--text-scale-factor) * var(--font-height));--scale-x:1;--rotate:0deg;transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}._textLayer_1xasy_54 ._markedContent_1xasy_80{display:contents}._textLayer_1xasy_54 ._endOfContent_1xasy_95{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1xasy_54._selecting_1xasy_104 ._endOfContent_1xasy_95{top:0}._textLayer_1xasy_54 ::selection{background:#0000ff40}._textLayer_1xasy_54 br::selection{background:0 0}._documentLoading_1xasy_124{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_1xasy_124:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_1xasy_1}._pageSkeleton_1xasy_144{z-index:0;pointer-events:none;background:#fff;border-radius:1px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}._pageSkeleton_1xasy_144:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1xasy_1}@keyframes _spin_1xasy_1{to{transform:rotate(360deg)}}._highlightOverlay_1xasy_173{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1xasy_182{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1xasy_189{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_1xasy_197{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_1xasy_204{z-index:3;pointer-events:all;cursor:pointer;border-radius:3px;justify-content:center;align-items:center;transition:background-color .1s;display:flex;position:absolute}._noteIconOverlay_1xasy_204:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_1xasy_221{font-size:13px;font-weight:500;font-family:var(--pdf-font-family);color:#fff;background-color:color-mix(in srgb, var(--pdf-accent) 82%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:10;pointer-events:none;-webkit-user-select:none;user-select:none;border-radius:5px;align-self:flex-end;align-items:center;gap:8px;margin-top:auto;margin-right:25px;padding:9px 16px;transition:background-color .4s;display:flex;position:sticky;bottom:12px;box-shadow:0 2px 12px #0000002e}._requireReadDone_1xasy_245{background-color:#16a34abf}._notePopover_1xasy_249{z-index:9999;background-color:var(--pdf-surface);border:1px solid var(--pdf-border);min-width:160px;max-width:280px;font-family:var(--pdf-font-family);border-radius:6px;padding:10px 12px;position:fixed;box-shadow:0 4px 16px #00000026}._notePopoverTitle_1xasy_262{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_1xasy_269{color:var(--pdf-text-primary);white-space:pre-wrap;margin:0;font-size:13px;line-height:1.5}._list_gygvf_1{flex-direction:column;display:flex}._emptyState_gygvf_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_gygvf_12{color:var(--pdf-text-secondary);text-transform:uppercase;letter-spacing:.5px;background-color:var(--pdf-panel-header-bg);border-bottom:1px solid var(--pdf-panel-border);padding:5px 12px;font-size:10px;font-weight:600}._card_gygvf_23{border:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-bg);border-radius:6px;margin:8px;padding:10px 12px;font-size:12px;transition:box-shadow .12s}._cardClickable_gygvf_33{cursor:pointer}._cardClickable_gygvf_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_gygvf_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_gygvf_48{color:var(--pdf-text-secondary);align-items:center;gap:5px;font-size:11px;font-weight:600;display:flex}._cardPage_gygvf_57{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_gygvf_62{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_gygvf_68{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_gygvf_74{justify-content:center;align-items:center;display:flex;position:relative}._badge_gygvf_81{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._list_12ybz_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_12ybz_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_12ybz_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;display:flex;overflow:hidden}._fileIcon_12ybz_33{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_12ybz_40{min-width:0;color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:500;overflow:hidden}._downloadBtn_12ybz_51{border:1px solid var(--pdf-border);background:var(--pdf-surface);width:28px;height:28px;color:var(--pdf-text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;transition:background .15s,border-color .15s,color .15s;display:flex}._downloadBtn_12ybz_51:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_12ybz_77{justify-content:center;align-items:center;display:flex;position:relative}._badge_12ybz_84{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._btn_1dub8_1{color:var(--pdf-text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;gap:5px;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._btn_1dub8_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1dub8_1:disabled{color:var(--pdf-border);cursor:default}._primary_1dub8_31{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1dub8_31:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_14eo9_1{align-items:center;gap:2px;display:flex}._pageInput_14eo9_7{background:var(--pdf-surface);width:32px;color:var(--pdf-text-primary);font-variant-numeric:tabular-nums;text-align:center;border:1px solid #0000;border-radius:4px;outline:none;padding:3px 4px;font-family:inherit;font-size:12px}._pageInput_14eo9_7:focus{border-color:var(--pdf-accent)}._pageInput_14eo9_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_14eo9_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_14eo9_7{-moz-appearance:textfield}._pageTotal_14eo9_34{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_hqvdn_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_hqvdn_7{flex-direction:column;padding:4px 0;display:flex}._row_hqvdn_13{color:var(--pdf-text-secondary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin:0 4px;padding:5px 12px;font-size:12px;line-height:1.4;display:flex}._row_hqvdn_13:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_hqvdn_31{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_hqvdn_31:hover{color:var(--pdf-text-muted)}._title_hqvdn_46{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_18kvs_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_18kvs_7{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_18kvs_13{background:var(--pdf-surface);border:1px solid var(--pdf-border);color:var(--pdf-text-primary);border-radius:4px;outline:none;width:180px;padding:4px 8px;font-family:inherit;font-size:13px}._searchInput_18kvs_13:focus{border-color:var(--pdf-accent)}._searchInput_18kvs_13::placeholder{color:var(--pdf-text-placeholder)}._navButton_18kvs_33{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_18kvs_33:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_18kvs_33:disabled{color:var(--pdf-border);cursor:default}._counter_18kvs_54{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_xoqxq_1{flex:1;align-items:center;gap:2px;min-width:0;display:flex}._item_xoqxq_9{flex-shrink:0;align-items:center;display:flex}._overflowWrapper_xoqxq_15{flex-shrink:0;margin-left:auto;position:relative}._overflowBtnActive_xoqxq_21{background:var(--pdf-surface);color:var(--pdf-text-primary)}._dropdown_xoqxq_26{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 16px #0000002e}._dropdownItem_xoqxq_41{border-radius:4px;justify-content:flex-end;align-items:center;padding:1px 2px;display:flex}._dropdownItem_xoqxq_41>*{flex-shrink:0}._labeledItem_xoqxq_53{align-items:center;gap:8px;width:100%;display:flex}._itemContent_xoqxq_60{flex-shrink:0;align-items:center;display:flex}._itemLabel_xoqxq_66{color:var(--pdf-text-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none;flex:1;font-size:12px}._dropdownItem_xoqxq_41:hover{background:var(--pdf-surface-hover)}._separator_uif34_1{background:var(--pdf-toolbar-separator);flex-shrink:0;width:1px;height:20px;margin:0 4px}
1
+ ._wrapper_1kvg0_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_1kvg0_7{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_1kvg0_16{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_1kvg0_26{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_1kvg0_35{cursor:pointer;width:44px;height:44px;color:var(--pdf-text-muted);background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;margin:0 2px;transition:background-color .15s,color .15s;display:flex}._panelButton_1kvg0_35:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_1kvg0_57{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_1kvg0_57:hover{color:var(--pdf-accent-light)}._contentPanel_1kvg0_66{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_1kvg0_74{color:var(--pdf-text-muted);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-header-bg);flex-shrink:0;padding:10px 14px;font-size:11px;font-weight:600}._panelBody_1kvg0_86{flex:1;overflow-y:auto}._appLayout_1xasy_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1xasy_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1xasy_17{border-bottom:1px solid var(--pdf-border);background-color:var(--pdf-bg);z-index:10;flex-shrink:0;align-items:center;gap:2px;height:44px;padding:0 12px;display:flex}._scrollContainer_1xasy_29{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;position:relative;overflow-y:auto}._pageWrapper_1xasy_40{margin-bottom:25px;position:relative}._pageCanvas_1xasy_45{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1xasy_54{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only;text-align:initial;opacity:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:2;--min-font-size:1;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}._textLayer_1xasy_54 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1xasy_54>:not(._markedContent_1xasy_80),._textLayer_1xasy_54 ._markedContent_1xasy_80 span:not(._markedContent_1xasy_80){z-index:1;--font-height:0;font-size:calc(var(--text-scale-factor) * var(--font-height));--scale-x:1;--rotate:0deg;transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}._textLayer_1xasy_54 ._markedContent_1xasy_80{display:contents}._textLayer_1xasy_54 ._endOfContent_1xasy_95{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1xasy_54._selecting_1xasy_104 ._endOfContent_1xasy_95{top:0}._textLayer_1xasy_54 ::selection{background:#0000ff40}._textLayer_1xasy_54 br::selection{background:0 0}._documentLoading_1xasy_124{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_1xasy_124:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_1xasy_1}._pageSkeleton_1xasy_144{z-index:0;pointer-events:none;background:#fff;border-radius:1px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}._pageSkeleton_1xasy_144:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1xasy_1}@keyframes _spin_1xasy_1{to{transform:rotate(360deg)}}._highlightOverlay_1xasy_173{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1xasy_182{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1xasy_189{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_1xasy_197{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_1xasy_204{z-index:3;pointer-events:all;cursor:pointer;border-radius:3px;justify-content:center;align-items:center;transition:background-color .1s;display:flex;position:absolute}._noteIconOverlay_1xasy_204:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_1xasy_221{font-size:13px;font-weight:500;font-family:var(--pdf-font-family);color:#fff;background-color:color-mix(in srgb, var(--pdf-accent) 82%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:10;pointer-events:none;-webkit-user-select:none;user-select:none;border-radius:5px;align-self:flex-end;align-items:center;gap:8px;margin-top:auto;margin-right:25px;padding:9px 16px;transition:background-color .4s;display:flex;position:sticky;bottom:12px;box-shadow:0 2px 12px #0000002e}._requireReadDone_1xasy_245{background-color:#16a34abf}._notePopover_1xasy_249{z-index:9999;background-color:var(--pdf-surface);border:1px solid var(--pdf-border);min-width:160px;max-width:280px;font-family:var(--pdf-font-family);border-radius:6px;padding:10px 12px;position:fixed;box-shadow:0 4px 16px #00000026}._notePopoverTitle_1xasy_262{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_1xasy_269{color:var(--pdf-text-primary);white-space:pre-wrap;margin:0;font-size:13px;line-height:1.5}._list_gygvf_1{flex-direction:column;display:flex}._emptyState_gygvf_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_gygvf_12{color:var(--pdf-text-secondary);text-transform:uppercase;letter-spacing:.5px;background-color:var(--pdf-panel-header-bg);border-bottom:1px solid var(--pdf-panel-border);padding:5px 12px;font-size:10px;font-weight:600}._card_gygvf_23{border:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-bg);border-radius:6px;margin:8px;padding:10px 12px;font-size:12px;transition:box-shadow .12s}._cardClickable_gygvf_33{cursor:pointer}._cardClickable_gygvf_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_gygvf_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_gygvf_48{color:var(--pdf-text-secondary);align-items:center;gap:5px;font-size:11px;font-weight:600;display:flex}._cardPage_gygvf_57{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_gygvf_62{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_gygvf_68{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_gygvf_74{justify-content:center;align-items:center;display:flex;position:relative}._badge_gygvf_81{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._list_12ybz_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_12ybz_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_12ybz_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;display:flex;overflow:hidden}._fileIcon_12ybz_33{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_12ybz_40{min-width:0;color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:500;overflow:hidden}._downloadBtn_12ybz_51{border:1px solid var(--pdf-border);background:var(--pdf-surface);width:28px;height:28px;color:var(--pdf-text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;transition:background .15s,border-color .15s,color .15s;display:flex}._downloadBtn_12ybz_51:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_12ybz_77{justify-content:center;align-items:center;display:flex;position:relative}._badge_12ybz_84{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._btn_1dub8_1{color:var(--pdf-text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;gap:5px;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._btn_1dub8_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1dub8_1:disabled{color:var(--pdf-border);cursor:default}._primary_1dub8_31{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1dub8_31:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_14eo9_1{align-items:center;gap:2px;display:flex}._pageInput_14eo9_7{background:var(--pdf-surface);width:32px;color:var(--pdf-text-primary);font-variant-numeric:tabular-nums;text-align:center;border:1px solid #0000;border-radius:4px;outline:none;padding:3px 4px;font-family:inherit;font-size:12px}._pageInput_14eo9_7:focus{border-color:var(--pdf-accent)}._pageInput_14eo9_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_14eo9_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_14eo9_7{-moz-appearance:textfield}._pageTotal_14eo9_34{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_hqvdn_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_hqvdn_7{flex-direction:column;padding:4px 0;display:flex}._row_hqvdn_13{color:var(--pdf-text-secondary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin:0 4px;padding:5px 12px;font-size:12px;line-height:1.4;display:flex}._row_hqvdn_13:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_hqvdn_31{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_hqvdn_31:hover{color:var(--pdf-text-muted)}._title_hqvdn_46{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_18kvs_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_18kvs_7{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_18kvs_13{background:var(--pdf-surface);border:1px solid var(--pdf-border);color:var(--pdf-text-primary);border-radius:4px;outline:none;width:180px;padding:4px 8px;font-family:inherit;font-size:13px}._searchInput_18kvs_13:focus{border-color:var(--pdf-accent)}._searchInput_18kvs_13::placeholder{color:var(--pdf-text-placeholder)}._navButton_18kvs_33{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_18kvs_33:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_18kvs_33:disabled{color:var(--pdf-border);cursor:default}._counter_18kvs_54{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_xoqxq_1{flex:1;align-items:center;gap:2px;min-width:0;display:flex}._item_xoqxq_9{flex-shrink:0;align-items:center;display:flex}._overflowWrapper_xoqxq_15{flex-shrink:0;margin-left:auto;position:relative}._overflowBtnActive_xoqxq_21{background:var(--pdf-surface);color:var(--pdf-text-primary)}._dropdown_xoqxq_26{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 16px #0000002e}._dropdownItem_xoqxq_41{border-radius:4px;justify-content:flex-end;align-items:center;padding:1px 2px;display:flex}._dropdownItem_xoqxq_41>*{flex-shrink:0}._labeledItem_xoqxq_53{align-items:center;gap:8px;width:100%;display:flex}._itemContent_xoqxq_60{flex-shrink:0;align-items:center;display:flex}._itemLabel_xoqxq_66{color:var(--pdf-text-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none;flex:1;font-size:12px}._dropdownItem_xoqxq_41:hover{background:var(--pdf-surface-hover)}._separator_b9iob_1{background:var(--pdf-toolbar-separator);flex-shrink:0;width:1px;height:20px;margin:0 4px}._separatorH_b9iob_9{background:var(--pdf-toolbar-separator);height:1px;margin:2px 4px}
2
2
  /*$vite$:1*/
@@ -1 +1,4 @@
1
- export declare function PDFToolbarSeparator(): import("react/jsx-runtime").JSX.Element | null;
1
+ export declare function PDFToolbarSeparator(): import("react/jsx-runtime").JSX.Element;
2
+ export declare namespace PDFToolbarSeparator {
3
+ var isSeparator: true;
4
+ }
@@ -54,107 +54,107 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
54
54
  l(() => {
55
55
  oe.GlobalWorkerOptions.workerSrc = g;
56
56
  }, [g]);
57
- let [C, w] = f(1), [T, E] = f(0), [D, O] = f(null), [k, me] = f([]), [A, he] = f(!1), [j, M] = f(y ?? null), [N, P] = f(null), [F, I] = f(!1), L = d(!1), R = d(null), z = d([]), B = d([]), V = d(T);
57
+ let [C, w] = f(1), [T, E] = f(0), [D, O] = f(null), [k, me] = f([]), [A, he] = f(!1), [j, ge] = f(y ?? null), [M, N] = f(null), [P, F] = f(!1), I = d(!1), L = d(null), R = d([]), z = d([]), B = d(T);
58
58
  l(() => {
59
- V.current = T;
59
+ B.current = T;
60
60
  }, [T]);
61
- let [ge, _e] = f(null);
62
- ge !== o && (_e(o), O(null), I(!1), L.current = !1);
63
- let { pdf: H, numPages: U, loading: ve } = te(o);
61
+ let [_e, ve] = f(null);
62
+ _e !== o && (ve(o), O(null), F(!1)), l(() => {
63
+ I.current = !1;
64
+ }, [o]);
65
+ let { pdf: V, numPages: H, loading: ye } = te(o);
64
66
  l(() => {
65
- H && (z.current = Array(H.numPages).fill(null), B.current = Array(H.numPages).fill(null));
66
- }, [H]), l(() => {
67
- !H || !y || !R.current || a(y, H, R.current, V.current).then(w);
68
- }, [H, y]);
69
- let W = d(j);
67
+ V && (R.current = Array(V.numPages).fill(null), z.current = Array(V.numPages).fill(null));
68
+ }, [V]), l(() => {
69
+ !V || !y || !L.current || a(y, V, L.current, B.current).then(w);
70
+ }, [V, y]);
71
+ let U = d(j);
70
72
  l(() => {
71
- W.current = j;
73
+ U.current = j;
72
74
  }, [j]), l(() => {
73
- if (!H || !R.current) return;
74
- let e = R.current, t = new ResizeObserver(() => {
75
- W.current && a(W.current, H, e, V.current).then(w);
75
+ if (!V || !L.current) return;
76
+ let e = L.current, t = new ResizeObserver(() => {
77
+ U.current && a(U.current, V, e, B.current).then(w);
76
78
  });
77
79
  return t.observe(e), () => t.disconnect();
78
- }, [H]);
79
- let { currentPage: G, goToPage: K } = t({
80
- numPages: U,
81
- containerRef: R,
82
- pageRefs: z
80
+ }, [V]);
81
+ let { currentPage: W, goToPage: G } = t({
82
+ numPages: H,
83
+ containerRef: L,
84
+ pageRefs: R
83
85
  });
84
86
  l(() => {
85
- U === 0 || G < U || (x && !F && I(!0), L.current || (L.current = !0, S?.()));
87
+ H === 0 || W < H || (x && !P && F(!0), I.current || (I.current = !0, S?.()));
86
88
  }, [
87
- G,
88
- U,
89
+ W,
90
+ H,
89
91
  x,
90
- F,
92
+ P,
91
93
  S
92
94
  ]);
93
- let q = u(() => {
94
- if (U === 0) return [];
95
- let e = /* @__PURE__ */ new Set(), t = Math.max(G - h, 1), n = Math.min(G + h, U);
95
+ let K = u(() => {
96
+ if (H === 0) return [];
97
+ let e = /* @__PURE__ */ new Set(), t = Math.max(W - h, 1), n = Math.min(W + h, H);
96
98
  for (let r = t; r <= n; r++) e.add(r);
97
99
  D && e.add(D.page);
98
100
  for (let t of k) e.add(t.page);
99
101
  return Array.from(e).sort((e, t) => e - t);
100
102
  }, [
101
- G,
102
- U,
103
+ W,
104
+ H,
103
105
  D,
104
106
  k
105
- ]), { pageSizes: ye, renderedPages: J } = ne({
106
- pdf: H,
107
+ ]), { pageSizes: be, renderedPages: q } = ne({
108
+ pdf: V,
107
109
  zoom: C,
108
110
  rotation: T,
109
- visiblePages: q,
110
- canvasRefs: B
111
- }), Y = u(() => {
112
- let e = new Set(q);
113
- for (let t of J) e.add(t);
111
+ visiblePages: K,
112
+ canvasRefs: z
113
+ }), J = u(() => {
114
+ let e = new Set(K);
115
+ for (let t of q) e.add(t);
114
116
  return Array.from(e).sort((e, t) => e - t);
115
- }, [q, J]);
117
+ }, [K, q]);
116
118
  n({
117
- pdf: H,
118
- currentPage: G,
119
- goToPage: K,
120
- setZoom: w,
121
- setRotation: E,
122
- setFitMode: M
119
+ pdf: V,
120
+ currentPage: W,
121
+ goToPage: G,
122
+ setRotation: E
123
123
  });
124
- let be = r({
125
- pdf: H,
124
+ let xe = r({
125
+ pdf: V,
126
126
  zoom: C,
127
127
  rotation: T,
128
- mountedPages: Y,
129
- canvasRefs: B
130
- }), { linkOverlays: xe, noteOverlays: Se } = ee({
131
- pdf: H,
128
+ mountedPages: J,
129
+ canvasRefs: z
130
+ }), { linkOverlays: Se, noteOverlays: Ce } = ee({
131
+ pdf: V,
132
132
  zoom: C,
133
133
  rotation: T,
134
- mountedPages: Y,
135
- goToPage: K
134
+ mountedPages: J,
135
+ goToPage: G
136
136
  });
137
137
  l(() => {
138
- if (!N) return;
139
- let e = () => P(null), t = (e) => {
140
- e.key === "Escape" && P(null);
138
+ if (!M) return;
139
+ let e = () => N(null), t = (e) => {
140
+ e.key === "Escape" && N(null);
141
141
  };
142
142
  return document.addEventListener("click", e), document.addEventListener("keydown", t), () => {
143
143
  document.removeEventListener("click", e), document.removeEventListener("keydown", t);
144
144
  };
145
- }, [N]);
146
- let { overlayRect: X, searchOverlays: Ce } = re({
147
- pdf: H,
145
+ }, [M]);
146
+ let { overlayRect: Y, searchOverlays: we } = re({
147
+ pdf: V,
148
148
  highlight: D,
149
149
  searchMatches: k,
150
150
  zoom: C,
151
151
  rotation: T
152
- }), we = c((e, t) => {
152
+ }), Te = c((e, t) => {
153
153
  (!e.url || !i(e.url)) && (t.preventDefault(), e.url || e._handleClick());
154
- }, []), Z = d(null), Te = c((e, t) => {
155
- Z.current && clearTimeout(Z.current);
154
+ }, []), X = d(null), Z = c((e, t) => {
155
+ X.current && clearTimeout(X.current);
156
156
  let n = t.clientY > window.innerHeight * .6;
157
- P({
157
+ N({
158
158
  x: Math.min(t.clientX, window.innerWidth - 304),
159
159
  y: n ? window.innerHeight - t.clientY + 8 : t.clientY + 12,
160
160
  above: n,
@@ -162,23 +162,23 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
162
162
  title: e.title
163
163
  });
164
164
  }, []), Q = c(() => {
165
- Z.current = setTimeout(() => P(null), 200);
165
+ X.current = setTimeout(() => N(null), 200);
166
166
  }, []), $ = c((e) => {
167
167
  O({
168
168
  page: e.page,
169
169
  pdfRect: e.pdfRect
170
- }), K(e.page);
171
- }, [O, K]), Ee = u(() => ({
172
- pdf: H,
173
- numPages: U,
170
+ }), G(e.page);
171
+ }, [O, G]), Ee = u(() => ({
172
+ pdf: V,
173
+ numPages: H,
174
174
  zoom: C,
175
175
  setZoom: w,
176
176
  rotation: T,
177
177
  setRotation: E,
178
- currentPage: G,
179
- goToPage: K,
180
- containerRef: R,
181
- canvasRefs: B,
178
+ currentPage: W,
179
+ goToPage: G,
180
+ containerRef: L,
181
+ canvasRefs: z,
182
182
  file: o,
183
183
  highlight: D,
184
184
  setHighlight: O,
@@ -188,15 +188,15 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
188
188
  sidebarCollapsed: A,
189
189
  setSidebarCollapsed: he,
190
190
  fitMode: j,
191
- setFitMode: M,
192
- navigationLocked: !!x && !F
191
+ setFitMode: ge,
192
+ navigationLocked: !!x && !P
193
193
  }), [
194
+ V,
194
195
  H,
195
- U,
196
196
  C,
197
197
  T,
198
+ W,
198
199
  G,
199
- K,
200
200
  o,
201
201
  D,
202
202
  k,
@@ -204,7 +204,7 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
204
204
  A,
205
205
  j,
206
206
  x,
207
- F
207
+ P
208
208
  ]);
209
209
  return /* @__PURE__ */ p(ie, {
210
210
  themeOverrides: ue,
@@ -223,15 +223,15 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
223
223
  className: s.body,
224
224
  children: [le, /* @__PURE__ */ m("div", {
225
225
  className: s.scrollContainer,
226
- ref: R,
226
+ ref: L,
227
227
  children: [
228
- ve && /* @__PURE__ */ p("div", { className: s.documentLoading }),
229
- Array.from({ length: U }, (e, t) => {
230
- let n = J.has(t + 1), r = ye[t], ee = Y.includes(t + 1);
228
+ ye && /* @__PURE__ */ p("div", { className: s.documentLoading }),
229
+ Array.from({ length: H }, (e, t) => {
230
+ let n = q.has(t + 1), r = be[t], ee = J.includes(t + 1);
231
231
  return /* @__PURE__ */ m("div", {
232
232
  className: s.pageWrapper,
233
233
  ref: (e) => {
234
- z.current[t] = e;
234
+ R.current[t] = e;
235
235
  },
236
236
  style: r ? {
237
237
  width: r.width,
@@ -248,16 +248,16 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
248
248
  ee && /* @__PURE__ */ m(se, { children: [/* @__PURE__ */ p("canvas", {
249
249
  className: s.pageCanvas,
250
250
  ref: (e) => {
251
- B.current[t] = e;
251
+ z.current[t] = e;
252
252
  },
253
253
  style: { display: n ? "block" : "none" }
254
254
  }), /* @__PURE__ */ p("div", {
255
255
  className: `textLayer ${s.textLayer}`,
256
256
  ref: (e) => {
257
- be.current[t] = e;
257
+ xe.current[t] = e;
258
258
  }
259
259
  })] }),
260
- xe.filter((e) => e.page === t + 1).map((e, t) => /* @__PURE__ */ p("a", {
260
+ Se.filter((e) => e.page === t + 1).map((e, t) => /* @__PURE__ */ p("a", {
261
261
  className: s.linkOverlay,
262
262
  href: e.url && i(e.url) ? e.url : "#",
263
263
  target: "_blank",
@@ -268,9 +268,9 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
268
268
  width: e.width,
269
269
  height: e.height
270
270
  },
271
- onClick: (t) => we(e, t)
271
+ onClick: (t) => Te(e, t)
272
272
  }, t)),
273
- Se.filter((e) => e.page === t + 1).map((e, t) => e.subtype === "Text" ? /* @__PURE__ */ p("div", {
273
+ Ce.filter((e) => e.page === t + 1).map((e, t) => e.subtype === "Text" ? /* @__PURE__ */ p("div", {
274
274
  className: s.noteIconOverlay,
275
275
  style: {
276
276
  left: e.x,
@@ -278,7 +278,7 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
278
278
  width: Math.max(e.width, 26),
279
279
  height: Math.max(e.height, 26)
280
280
  },
281
- onMouseEnter: (t) => Te(e, t),
281
+ onMouseEnter: (t) => Z(e, t),
282
282
  onMouseLeave: Q,
283
283
  onClick: () => $(e),
284
284
  children: /* @__PURE__ */ m("svg", {
@@ -332,11 +332,11 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
332
332
  width: e.width,
333
333
  height: e.height
334
334
  },
335
- onMouseEnter: (t) => Te(e, t),
335
+ onMouseEnter: (t) => Z(e, t),
336
336
  onMouseLeave: Q,
337
337
  onClick: () => $(e)
338
338
  }, t)),
339
- Ce.filter((e) => e.page === t + 1).map((e, t) => /* @__PURE__ */ p("div", {
339
+ we.filter((e) => e.page === t + 1).map((e, t) => /* @__PURE__ */ p("div", {
340
340
  className: s.searchMatchOverlay,
341
341
  style: {
342
342
  left: e.x,
@@ -345,42 +345,42 @@ var g = ({ file: o, workerSrc: g, sidebar: le, toolbar: _, onChangeFile: v, them
345
345
  height: e.height
346
346
  }
347
347
  }, t)),
348
- D && X?.page === t + 1 && /* @__PURE__ */ p("div", {
348
+ D && Y?.page === t + 1 && /* @__PURE__ */ p("div", {
349
349
  className: s.highlightOverlay,
350
350
  style: {
351
- left: X.x,
352
- top: X.y,
353
- width: X.width,
354
- height: X.height
351
+ left: Y.x,
352
+ top: Y.y,
353
+ width: Y.width,
354
+ height: Y.height
355
355
  }
356
356
  })
357
357
  ]
358
358
  }, `${t}-${T}`);
359
359
  }),
360
- x && /* @__PURE__ */ p(ce, { hasRead: F })
360
+ x && /* @__PURE__ */ p(ce, { hasRead: P })
361
361
  ]
362
362
  })]
363
363
  })]
364
- }), N && /* @__PURE__ */ m("div", {
364
+ }), M && /* @__PURE__ */ m("div", {
365
365
  className: s.notePopover,
366
- style: N.above ? {
367
- left: N.x,
368
- bottom: N.y
366
+ style: M.above ? {
367
+ left: M.x,
368
+ bottom: M.y
369
369
  } : {
370
- left: N.x,
371
- top: N.y
370
+ left: M.x,
371
+ top: M.y
372
372
  },
373
373
  onMouseEnter: () => {
374
- Z.current && clearTimeout(Z.current);
374
+ X.current && clearTimeout(X.current);
375
375
  },
376
376
  onMouseLeave: Q,
377
377
  onClick: (e) => e.stopPropagation(),
378
- children: [N.title && /* @__PURE__ */ p("div", {
378
+ children: [M.title && /* @__PURE__ */ p("div", {
379
379
  className: s.notePopoverTitle,
380
- children: N.title
380
+ children: M.title
381
381
  }), /* @__PURE__ */ p("p", {
382
382
  className: s.notePopoverContent,
383
- children: N.contents
383
+ children: M.contents
384
384
  })]
385
385
  })]
386
386
  })
@@ -8,8 +8,16 @@ import { jsx as u, jsxs as d } from "react/jsx-runtime";
8
8
  var f = 40;
9
9
  function p({ children: p, overflowIcon: m = "···" }) {
10
10
  let h = e(), g = c(null), _ = c([]), v = c([]), [y, b] = l(null), [x, S] = l(!1), C = c(null), w = i.Children.toArray(p), T = a(() => {
11
- let e = g.current, t = v.current;
12
- if (!e || t.length === 0) return;
11
+ let e = g.current;
12
+ if (!e) return;
13
+ _.current.forEach((e, t) => {
14
+ if (e) {
15
+ let n = e.offsetWidth;
16
+ n > 0 && (v.current[t] = n);
17
+ }
18
+ });
19
+ let t = v.current;
20
+ if (t.length === 0) return;
13
21
  let n = e.offsetWidth;
14
22
  if (t.reduce((e, t) => e + t, 0) <= n) {
15
23
  b(null);
@@ -20,8 +28,8 @@ function p({ children: p, overflowIcon: m = "···" }) {
20
28
  b(i);
21
29
  }, []);
22
30
  s(() => {
23
- v.current = _.current.slice(0, w.length).map((e) => e?.offsetWidth ?? 0), T();
24
- }, []), o(() => {
31
+ T();
32
+ }, [T]), o(() => {
25
33
  let e = g.current;
26
34
  if (!e) return;
27
35
  let t = new ResizeObserver(() => T());
@@ -59,6 +67,10 @@ function p({ children: p, overflowIcon: m = "···" }) {
59
67
  className: n.dropdown,
60
68
  role: "menu",
61
69
  children: D.map((e, t) => {
70
+ if (i.isValidElement(e) && e.type.isSeparator) return /* @__PURE__ */ u(r.Provider, {
71
+ value: !0,
72
+ children: e
73
+ }, t);
62
74
  let a = i.isValidElement(e) ? e.type.toolbarLabelKey : void 0, o = a ? h[a] : void 0;
63
75
  return /* @__PURE__ */ u("div", {
64
76
  className: n.dropdownItem,
@@ -4,10 +4,14 @@ import { useContext as n } from "react";
4
4
  import { jsx as r } from "react/jsx-runtime";
5
5
  //#region src/components/ui/PDFToolbarSeparator.tsx
6
6
  function i() {
7
- return n(e) ? null : /* @__PURE__ */ r("div", {
7
+ return n(e) ? /* @__PURE__ */ r("div", {
8
+ className: t.separatorH,
9
+ "aria-hidden": "true"
10
+ }) : /* @__PURE__ */ r("div", {
8
11
  className: t.separator,
9
12
  "aria-hidden": "true"
10
13
  });
11
14
  }
15
+ i.isSeparator = !0;
12
16
  //#endregion
13
17
  export { i as PDFToolbarSeparator };
@@ -1,3 +1,6 @@
1
- var e = { separator: "_separator_uif34_1" };
1
+ var e = {
2
+ separator: "_separator_b9iob_1",
3
+ separatorH: "_separatorH_b9iob_9"
4
+ };
2
5
  //#endregion
3
6
  export { e as default };
@@ -1,7 +1,7 @@
1
1
  import { useEffect as e } from "react";
2
2
  import "pdfjs-dist";
3
3
  //#region src/hooks/useKeyboardShortcuts.ts
4
- function t({ pdf: t, currentPage: n, goToPage: r, setZoom: i, setRotation: a, setFitMode: o }) {
4
+ function t({ pdf: t, currentPage: n, goToPage: r, setRotation: i }) {
5
5
  e(() => {
6
6
  if (!t) return;
7
7
  let e = (e) => {
@@ -15,16 +15,9 @@ function t({ pdf: t, currentPage: n, goToPage: r, setZoom: i, setRotation: a, se
15
15
  case "ArrowDown":
16
16
  e.preventDefault(), r(n + 1);
17
17
  break;
18
- case "+":
19
- case "=":
20
- e.preventDefault(), o(null), i((e) => Math.min(e + .2, 3));
21
- break;
22
- case "-":
23
- e.preventDefault(), o(null), i((e) => Math.max(e - .2, .2));
24
- break;
25
18
  case "r":
26
19
  case "R":
27
- e.preventDefault(), a((e) => (e + 90) % 360);
20
+ e.preventDefault(), i((e) => (e + 90) % 360);
28
21
  break;
29
22
  }
30
23
  };
@@ -33,9 +26,7 @@ function t({ pdf: t, currentPage: n, goToPage: r, setZoom: i, setRotation: a, se
33
26
  t,
34
27
  n,
35
28
  r,
36
- i,
37
- a,
38
- o
29
+ i
39
30
  ]);
40
31
  }
41
32
  //#endregion
@@ -1,36 +1,43 @@
1
- import { useCallback as e, useEffect as t, useState as n } from "react";
1
+ import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
2
  //#region src/hooks/useScrollTracking.ts
3
- var r = 10;
4
- function i({ numPages: i, containerRef: a, pageRefs: o }) {
5
- let [s, c] = n(1);
3
+ var i = 10;
4
+ function a({ numPages: a, containerRef: o, pageRefs: s }) {
5
+ let [c, l] = r(1), u = n(null), d = n(null);
6
6
  return t(() => {
7
- let e = a.current;
7
+ let e = o.current;
8
8
  if (!e) return;
9
9
  let t = () => {
10
- let t = e.getBoundingClientRect().top, n = o.current;
10
+ let t = e.getBoundingClientRect().top, n = s.current, r = -1;
11
11
  for (let e = 0; e < n.length; e++) {
12
- let r = n[e];
13
- r && r.getBoundingClientRect().top - t <= 150 && c(e + 1);
12
+ let i = n[e];
13
+ i && i.getBoundingClientRect().top - t <= 150 && (r = e + 1);
14
+ }
15
+ if (r !== -1) {
16
+ if (u.current !== null) if (r === u.current) u.current = null, d.current &&= (clearTimeout(d.current), null);
17
+ else return;
18
+ l(r);
14
19
  }
15
20
  };
16
21
  return e.addEventListener("scroll", t), () => e.removeEventListener("scroll", t);
17
- }, [a, o]), {
18
- currentPage: s,
22
+ }, [o, s]), {
23
+ currentPage: c,
19
24
  goToPage: e((e, t) => {
20
- let n = Math.min(Math.max(e, 1), i), s = o.current[n - 1], l = a.current;
21
- if (s && l) {
22
- let e = s.getBoundingClientRect().top, i = l.getBoundingClientRect().top, a = l.scrollTop + (e - i) - r, o = t === void 0 ? a : a + t;
23
- l.scrollTo({
24
- top: o,
25
+ let n = Math.min(Math.max(e, 1), a), r = s.current[n - 1], c = o.current;
26
+ if (r && c) {
27
+ let e = r.getBoundingClientRect().top, a = c.getBoundingClientRect().top, o = c.scrollTop + (e - a) - i, s = t === void 0 ? o : o + t, f = () => {
28
+ u.current = null, d.current &&= (clearTimeout(d.current), null), c.removeEventListener("wheel", f), c.removeEventListener("pointerdown", f);
29
+ };
30
+ u.current = n, d.current && clearTimeout(d.current), d.current = setTimeout(f, 1e3), c.addEventListener("wheel", f, { once: !0 }), c.addEventListener("pointerdown", f, { once: !0 }), l(n), c.scrollTo({
31
+ top: s,
25
32
  behavior: "smooth"
26
- }), c(n);
33
+ });
27
34
  }
28
35
  }, [
29
- i,
30
36
  a,
31
- o
37
+ o,
38
+ s
32
39
  ])
33
40
  };
34
41
  }
35
42
  //#endregion
36
- export { i as useScrollTracking };
43
+ export { a as useScrollTracking };
@@ -1,69 +1,45 @@
1
- import { useEffect as e, useReducer as t, useRef as n } from "react";
1
+ import { useEffect as e, useRef as t, useState as n } from "react";
2
2
  import "pdfjs-dist";
3
3
  //#region src/hooks/useThumbnails.ts
4
- function r(e, t) {
5
- if (t.type === "reset") return {
6
- thumbnails: Array(t.numPages).fill(null),
7
- version: e.version + 1
8
- };
9
- if (t.type === "set") {
10
- let n = [...e.thumbnails];
11
- return n[t.pageNum - 1] = t.dataUrl, {
12
- thumbnails: n,
13
- version: e.version
14
- };
15
- }
16
- return e;
17
- }
18
- function i({ pdf: i, rotation: a, visiblePages: o }) {
19
- let [{ thumbnails: s, version: c }, l] = t(r, {
20
- thumbnails: [],
21
- version: 0
22
- }), u = n(/* @__PURE__ */ new Set()), d = n({
4
+ function r({ pdf: r, rotation: i, visiblePages: a }) {
5
+ let [o, s] = n([]), [c, l] = n(0), u = t(/* @__PURE__ */ new Set()), d = t({
23
6
  pdf: null,
24
7
  rotation: 0
25
8
  });
26
9
  return e(() => {
27
- if (!i) {
28
- l({
29
- type: "reset",
30
- numPages: 0
31
- }), u.current.clear(), d.current = {
10
+ if (!r) {
11
+ s([]), l(0), u.current.clear(), d.current = {
32
12
  pdf: null,
33
13
  rotation: 0
34
14
  };
35
15
  return;
36
16
  }
37
- if (d.current.pdf !== i || d.current.rotation !== a) {
17
+ if (d.current.pdf !== r || d.current.rotation !== i) {
38
18
  d.current = {
39
- pdf: i,
40
- rotation: a
41
- }, u.current.clear(), l({
42
- type: "reset",
43
- numPages: i.numPages
44
- });
19
+ pdf: r,
20
+ rotation: i
21
+ }, u.current.clear(), s(Array(r.numPages).fill(null)), l((e) => e + 1);
45
22
  return;
46
23
  }
47
- let e = o.filter((e) => !u.current.has(e));
24
+ let e = a.filter((e) => !u.current.has(e));
48
25
  if (e.length === 0) return;
49
26
  let t = !1;
50
27
  return (async () => {
51
28
  for (let n of e) {
52
29
  if (t) break;
53
- let e = await i.getPage(n), r = e.getViewport({
30
+ let e = await r.getPage(n), a = e.getViewport({
54
31
  scale: .2,
55
- rotation: a
56
- }), o = document.createElement("canvas"), s = o.getContext("2d");
57
- if (s) {
58
- if (o.height = r.height, o.width = r.width, await e.render({
59
- canvasContext: s,
60
- viewport: r,
32
+ rotation: i
33
+ }), o = document.createElement("canvas"), c = o.getContext("2d");
34
+ if (c) {
35
+ if (o.height = a.height, o.width = a.width, await e.render({
36
+ canvasContext: c,
37
+ viewport: a,
61
38
  canvas: o
62
39
  }).promise, t) break;
63
- u.current.add(n), l({
64
- type: "set",
65
- pageNum: n,
66
- dataUrl: o.toDataURL()
40
+ u.current.add(n), s((e) => {
41
+ let t = [...e];
42
+ return t[n - 1] = o.toDataURL(), t;
67
43
  });
68
44
  }
69
45
  }
@@ -71,11 +47,11 @@ function i({ pdf: i, rotation: a, visiblePages: o }) {
71
47
  t = !0;
72
48
  };
73
49
  }, [
50
+ r,
74
51
  i,
75
52
  a,
76
- o,
77
53
  c
78
- ]), { thumbnails: s };
54
+ ]), { thumbnails: o };
79
55
  }
80
56
  //#endregion
81
- export { i as useThumbnails };
57
+ export { r as useThumbnails };
@@ -1,2 +1,2 @@
1
- ._wrapper_1kvg0_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_1kvg0_7{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_1kvg0_16{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_1kvg0_26{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_1kvg0_35{cursor:pointer;width:44px;height:44px;color:var(--pdf-text-muted);background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;margin:0 2px;transition:background-color .15s,color .15s;display:flex}._panelButton_1kvg0_35:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_1kvg0_57{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_1kvg0_57:hover{color:var(--pdf-accent-light)}._contentPanel_1kvg0_66{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_1kvg0_74{color:var(--pdf-text-muted);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-header-bg);flex-shrink:0;padding:10px 14px;font-size:11px;font-weight:600}._panelBody_1kvg0_86{flex:1;overflow-y:auto}._appLayout_1xasy_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1xasy_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1xasy_17{border-bottom:1px solid var(--pdf-border);background-color:var(--pdf-bg);z-index:10;flex-shrink:0;align-items:center;gap:2px;height:44px;padding:0 12px;display:flex}._scrollContainer_1xasy_29{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;position:relative;overflow-y:auto}._pageWrapper_1xasy_40{margin-bottom:25px;position:relative}._pageCanvas_1xasy_45{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1xasy_54{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only;text-align:initial;opacity:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:2;--min-font-size:1;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}._textLayer_1xasy_54 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1xasy_54>:not(._markedContent_1xasy_80),._textLayer_1xasy_54 ._markedContent_1xasy_80 span:not(._markedContent_1xasy_80){z-index:1;--font-height:0;font-size:calc(var(--text-scale-factor) * var(--font-height));--scale-x:1;--rotate:0deg;transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}._textLayer_1xasy_54 ._markedContent_1xasy_80{display:contents}._textLayer_1xasy_54 ._endOfContent_1xasy_95{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1xasy_54._selecting_1xasy_104 ._endOfContent_1xasy_95{top:0}._textLayer_1xasy_54 ::selection{background:#0000ff40}._textLayer_1xasy_54 br::selection{background:0 0}._documentLoading_1xasy_124{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_1xasy_124:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_1xasy_1}._pageSkeleton_1xasy_144{z-index:0;pointer-events:none;background:#fff;border-radius:1px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}._pageSkeleton_1xasy_144:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1xasy_1}@keyframes _spin_1xasy_1{to{transform:rotate(360deg)}}._highlightOverlay_1xasy_173{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1xasy_182{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1xasy_189{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_1xasy_197{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_1xasy_204{z-index:3;pointer-events:all;cursor:pointer;border-radius:3px;justify-content:center;align-items:center;transition:background-color .1s;display:flex;position:absolute}._noteIconOverlay_1xasy_204:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_1xasy_221{font-size:13px;font-weight:500;font-family:var(--pdf-font-family);color:#fff;background-color:color-mix(in srgb, var(--pdf-accent) 82%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:10;pointer-events:none;-webkit-user-select:none;user-select:none;border-radius:5px;align-self:flex-end;align-items:center;gap:8px;margin-top:auto;margin-right:25px;padding:9px 16px;transition:background-color .4s;display:flex;position:sticky;bottom:12px;box-shadow:0 2px 12px #0000002e}._requireReadDone_1xasy_245{background-color:#16a34abf}._notePopover_1xasy_249{z-index:9999;background-color:var(--pdf-surface);border:1px solid var(--pdf-border);min-width:160px;max-width:280px;font-family:var(--pdf-font-family);border-radius:6px;padding:10px 12px;position:fixed;box-shadow:0 4px 16px #00000026}._notePopoverTitle_1xasy_262{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_1xasy_269{color:var(--pdf-text-primary);white-space:pre-wrap;margin:0;font-size:13px;line-height:1.5}._list_gygvf_1{flex-direction:column;display:flex}._emptyState_gygvf_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_gygvf_12{color:var(--pdf-text-secondary);text-transform:uppercase;letter-spacing:.5px;background-color:var(--pdf-panel-header-bg);border-bottom:1px solid var(--pdf-panel-border);padding:5px 12px;font-size:10px;font-weight:600}._card_gygvf_23{border:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-bg);border-radius:6px;margin:8px;padding:10px 12px;font-size:12px;transition:box-shadow .12s}._cardClickable_gygvf_33{cursor:pointer}._cardClickable_gygvf_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_gygvf_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_gygvf_48{color:var(--pdf-text-secondary);align-items:center;gap:5px;font-size:11px;font-weight:600;display:flex}._cardPage_gygvf_57{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_gygvf_62{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_gygvf_68{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_gygvf_74{justify-content:center;align-items:center;display:flex;position:relative}._badge_gygvf_81{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._list_12ybz_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_12ybz_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_12ybz_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;display:flex;overflow:hidden}._fileIcon_12ybz_33{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_12ybz_40{min-width:0;color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:500;overflow:hidden}._downloadBtn_12ybz_51{border:1px solid var(--pdf-border);background:var(--pdf-surface);width:28px;height:28px;color:var(--pdf-text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;transition:background .15s,border-color .15s,color .15s;display:flex}._downloadBtn_12ybz_51:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_12ybz_77{justify-content:center;align-items:center;display:flex;position:relative}._badge_12ybz_84{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._btn_1dub8_1{color:var(--pdf-text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;gap:5px;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._btn_1dub8_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1dub8_1:disabled{color:var(--pdf-border);cursor:default}._primary_1dub8_31{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1dub8_31:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_14eo9_1{align-items:center;gap:2px;display:flex}._pageInput_14eo9_7{background:var(--pdf-surface);width:32px;color:var(--pdf-text-primary);font-variant-numeric:tabular-nums;text-align:center;border:1px solid #0000;border-radius:4px;outline:none;padding:3px 4px;font-family:inherit;font-size:12px}._pageInput_14eo9_7:focus{border-color:var(--pdf-accent)}._pageInput_14eo9_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_14eo9_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_14eo9_7{-moz-appearance:textfield}._pageTotal_14eo9_34{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_hqvdn_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_hqvdn_7{flex-direction:column;padding:4px 0;display:flex}._row_hqvdn_13{color:var(--pdf-text-secondary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin:0 4px;padding:5px 12px;font-size:12px;line-height:1.4;display:flex}._row_hqvdn_13:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_hqvdn_31{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_hqvdn_31:hover{color:var(--pdf-text-muted)}._title_hqvdn_46{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_18kvs_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_18kvs_7{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_18kvs_13{background:var(--pdf-surface);border:1px solid var(--pdf-border);color:var(--pdf-text-primary);border-radius:4px;outline:none;width:180px;padding:4px 8px;font-family:inherit;font-size:13px}._searchInput_18kvs_13:focus{border-color:var(--pdf-accent)}._searchInput_18kvs_13::placeholder{color:var(--pdf-text-placeholder)}._navButton_18kvs_33{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_18kvs_33:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_18kvs_33:disabled{color:var(--pdf-border);cursor:default}._counter_18kvs_54{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_xoqxq_1{flex:1;align-items:center;gap:2px;min-width:0;display:flex}._item_xoqxq_9{flex-shrink:0;align-items:center;display:flex}._overflowWrapper_xoqxq_15{flex-shrink:0;margin-left:auto;position:relative}._overflowBtnActive_xoqxq_21{background:var(--pdf-surface);color:var(--pdf-text-primary)}._dropdown_xoqxq_26{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 16px #0000002e}._dropdownItem_xoqxq_41{border-radius:4px;justify-content:flex-end;align-items:center;padding:1px 2px;display:flex}._dropdownItem_xoqxq_41>*{flex-shrink:0}._labeledItem_xoqxq_53{align-items:center;gap:8px;width:100%;display:flex}._itemContent_xoqxq_60{flex-shrink:0;align-items:center;display:flex}._itemLabel_xoqxq_66{color:var(--pdf-text-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none;flex:1;font-size:12px}._dropdownItem_xoqxq_41:hover{background:var(--pdf-surface-hover)}._separator_uif34_1{background:var(--pdf-toolbar-separator);flex-shrink:0;width:1px;height:20px;margin:0 4px}
1
+ ._wrapper_1kvg0_1{border-right:1px solid var(--pdf-border);height:100%;display:flex}._wrapperCollapsed_1kvg0_7{border-right:1px solid var(--pdf-border);background-color:var(--pdf-bg);flex-direction:column;height:100%;padding-top:4px;display:flex}._buttonBar_1kvg0_16{background-color:var(--pdf-bg);flex-direction:column;flex-shrink:0;gap:2px;width:48px;padding-top:4px;display:flex}._toggleButton_1kvg0_26{border-bottom:1px solid var(--pdf-border);border-radius:0;width:48px;margin:0;padding-bottom:6px}._panelButton_1kvg0_35{cursor:pointer;width:44px;height:44px;color:var(--pdf-text-muted);background-color:#0000;border:none;border-radius:6px;justify-content:center;align-items:center;margin:0 2px;transition:background-color .15s,color .15s;display:flex}._panelButton_1kvg0_35:hover{background-color:var(--pdf-surface);color:var(--pdf-text-secondary)}._panelButtonActive_1kvg0_57{background-color:var(--pdf-surface);color:var(--pdf-accent-light)}._panelButtonActive_1kvg0_57:hover{color:var(--pdf-accent-light)}._contentPanel_1kvg0_66{background-color:var(--pdf-panel-bg);border-right:1px solid var(--pdf-panel-border);flex-direction:column;width:260px;display:flex}._panelHeader_1kvg0_74{color:var(--pdf-text-muted);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-header-bg);flex-shrink:0;padding:10px 14px;font-size:11px;font-weight:600}._panelBody_1kvg0_86{flex:1;overflow-y:auto}._appLayout_1xasy_1{flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}._body_1xasy_9{flex-direction:row;flex:1;min-height:0;display:flex;overflow:hidden}._toolbar_1xasy_17{border-bottom:1px solid var(--pdf-border);background-color:var(--pdf-bg);z-index:10;flex-shrink:0;align-items:center;gap:2px;height:44px;padding:0 12px;display:flex}._scrollContainer_1xasy_29{background-color:var(--pdf-scroll-area);flex-direction:column;flex:1;align-items:center;padding:10px 20px;display:flex;position:relative;overflow-y:auto}._pageWrapper_1xasy_40{margin-bottom:25px;position:relative}._pageCanvas_1xasy_45{z-index:1;box-shadow:0 5px 20px var(--pdf-shadow-page);pointer-events:none;background-color:#fff;display:block;position:relative}._textLayer_1xasy_54{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only;text-align:initial;opacity:1;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;caret-color:canvastext;z-index:2;--min-font-size:1;--text-scale-factor:calc(var(--total-scale-factor) * var(--min-font-size));--min-font-size-inv:calc(1 / var(--min-font-size));line-height:1;position:absolute;inset:0;overflow:clip}._textLayer_1xasy_54 :is(span,br){color:#0000;white-space:pre;cursor:text;transform-origin:0 0;position:absolute}._textLayer_1xasy_54>:not(._markedContent_1xasy_80),._textLayer_1xasy_54 ._markedContent_1xasy_80 span:not(._markedContent_1xasy_80){z-index:1;--font-height:0;font-size:calc(var(--text-scale-factor) * var(--font-height));--scale-x:1;--rotate:0deg;transform:rotate(var(--rotate)) scaleX(var(--scale-x)) scale(var(--min-font-size-inv))}._textLayer_1xasy_54 ._markedContent_1xasy_80{display:contents}._textLayer_1xasy_54 ._endOfContent_1xasy_95{z-index:0;cursor:default;-webkit-user-select:none;user-select:none;display:block;position:absolute;inset:100% 0 0}._textLayer_1xasy_54._selecting_1xasy_104 ._endOfContent_1xasy_95{top:0}._textLayer_1xasy_54 ::selection{background:#0000ff40}._textLayer_1xasy_54 br::selection{background:0 0}._documentLoading_1xasy_124{pointer-events:none;z-index:10;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._documentLoading_1xasy_124:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite _spin_1xasy_1}._pageSkeleton_1xasy_144{z-index:0;pointer-events:none;background:#fff;border-radius:1px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}._pageSkeleton_1xasy_144:after{content:"";border:3px solid #0000001a;border-top-color:var(--pdf-accent);border-radius:50%;width:32px;height:32px;animation:.8s linear infinite _spin_1xasy_1}@keyframes _spin_1xasy_1{to{transform:rotate(360deg)}}._highlightOverlay_1xasy_173{z-index:4;pointer-events:none;background-color:#ffdc0059;border:2px solid #ffa000e6;border-radius:2px;position:absolute}._linkOverlay_1xasy_182{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._searchMatchOverlay_1xasy_189{z-index:3;pointer-events:none;background-color:#fde0474d;border-bottom:2px solid #eab308cc;position:absolute}._noteOverlay_1xasy_197{z-index:3;pointer-events:all;cursor:pointer;position:absolute}._noteIconOverlay_1xasy_204{z-index:3;pointer-events:all;cursor:pointer;border-radius:3px;justify-content:center;align-items:center;transition:background-color .1s;display:flex;position:absolute}._noteIconOverlay_1xasy_204:hover{background-color:#ffd20033;outline:1px solid #a0780066}._requireReadBanner_1xasy_221{font-size:13px;font-weight:500;font-family:var(--pdf-font-family);color:#fff;background-color:color-mix(in srgb, var(--pdf-accent) 82%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:10;pointer-events:none;-webkit-user-select:none;user-select:none;border-radius:5px;align-self:flex-end;align-items:center;gap:8px;margin-top:auto;margin-right:25px;padding:9px 16px;transition:background-color .4s;display:flex;position:sticky;bottom:12px;box-shadow:0 2px 12px #0000002e}._requireReadDone_1xasy_245{background-color:#16a34abf}._notePopover_1xasy_249{z-index:9999;background-color:var(--pdf-surface);border:1px solid var(--pdf-border);min-width:160px;max-width:280px;font-family:var(--pdf-font-family);border-radius:6px;padding:10px 12px;position:fixed;box-shadow:0 4px 16px #00000026}._notePopoverTitle_1xasy_262{color:var(--pdf-text-secondary);margin-bottom:6px;font-size:12px;font-weight:600}._notePopoverContent_1xasy_269{color:var(--pdf-text-primary);white-space:pre-wrap;margin:0;font-size:13px;line-height:1.5}._list_gygvf_1{flex-direction:column;display:flex}._emptyState_gygvf_6{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._pageHeader_gygvf_12{color:var(--pdf-text-secondary);text-transform:uppercase;letter-spacing:.5px;background-color:var(--pdf-panel-header-bg);border-bottom:1px solid var(--pdf-panel-border);padding:5px 12px;font-size:10px;font-weight:600}._card_gygvf_23{border:1px solid var(--pdf-panel-border);background-color:var(--pdf-panel-bg);border-radius:6px;margin:8px;padding:10px 12px;font-size:12px;transition:box-shadow .12s}._cardClickable_gygvf_33{cursor:pointer}._cardClickable_gygvf_33:hover{box-shadow:0 1px 6px var(--pdf-shadow-page)}._cardHeader_gygvf_41{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}._cardLabel_gygvf_48{color:var(--pdf-text-secondary);align-items:center;gap:5px;font-size:11px;font-weight:600;display:flex}._cardPage_gygvf_57{color:var(--pdf-text-secondary);font-size:10px}._cardAuthor_gygvf_62{color:var(--pdf-text-muted);margin-bottom:3px;font-size:11px}._cardContent_gygvf_68{color:var(--pdf-text-primary);font-size:12px;line-height:1.5}._iconWrapper_gygvf_74{justify-content:center;align-items:center;display:flex;position:relative}._badge_gygvf_81{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._list_12ybz_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_12ybz_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_12ybz_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;box-sizing:border-box;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;display:flex;overflow:hidden}._fileIcon_12ybz_33{color:var(--pdf-text-muted);flex-shrink:0;align-items:center;display:flex}._filename_12ybz_40{min-width:0;color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;font-weight:500;overflow:hidden}._downloadBtn_12ybz_51{border:1px solid var(--pdf-border);background:var(--pdf-surface);width:28px;height:28px;color:var(--pdf-text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-family:inherit;transition:background .15s,border-color .15s,color .15s;display:flex}._downloadBtn_12ybz_51:hover{background:var(--pdf-accent);border-color:var(--pdf-accent);color:#fff}._iconWrapper_12ybz_77{justify-content:center;align-items:center;display:flex;position:relative}._badge_12ybz_84{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._btn_1dub8_1{color:var(--pdf-text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;gap:5px;padding:6px 8px;font-family:inherit;font-size:13px;line-height:1;transition:background .12s,color .12s;display:flex}._btn_1dub8_1:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._btn_1dub8_1:disabled{color:var(--pdf-border);cursor:default}._primary_1dub8_31{background:var(--pdf-accent);color:#fff;padding:6px 14px}._primary_1dub8_31:hover:not(:disabled){background:var(--pdf-accent-hover);color:#fff}._navWrapper_14eo9_1{align-items:center;gap:2px;display:flex}._pageInput_14eo9_7{background:var(--pdf-surface);width:32px;color:var(--pdf-text-primary);font-variant-numeric:tabular-nums;text-align:center;border:1px solid #0000;border-radius:4px;outline:none;padding:3px 4px;font-family:inherit;font-size:12px}._pageInput_14eo9_7:focus{border-color:var(--pdf-accent)}._pageInput_14eo9_7::-webkit-outer-spin-button{-webkit-appearance:none}._pageInput_14eo9_7::-webkit-inner-spin-button{-webkit-appearance:none}._pageInput_14eo9_7{-moz-appearance:textfield}._pageTotal_14eo9_34{color:var(--pdf-text-placeholder);font-variant-numeric:tabular-nums;font-size:12px}._emptyState_hqvdn_1{color:var(--pdf-text-secondary);padding:20px 14px;font-size:12px}._tree_hqvdn_7{flex-direction:column;padding:4px 0;display:flex}._row_hqvdn_13{color:var(--pdf-text-secondary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin:0 4px;padding:5px 12px;font-size:12px;line-height:1.4;display:flex}._row_hqvdn_13:hover{background-color:var(--pdf-surface-hover);color:var(--pdf-text-primary)}._chevronBtn_hqvdn_31{cursor:pointer;color:var(--pdf-text-secondary);background:0 0;border:none;flex-shrink:0;align-items:center;padding:0;display:flex}._chevronBtn_hqvdn_31:hover{color:var(--pdf-text-muted)}._title_hqvdn_46{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._wrapper_18kvs_1{align-items:center;gap:4px;display:flex}._searchIconWrapper_18kvs_7{color:var(--pdf-text-secondary);align-items:center;display:flex}._searchInput_18kvs_13{background:var(--pdf-surface);border:1px solid var(--pdf-border);color:var(--pdf-text-primary);border-radius:4px;outline:none;width:180px;padding:4px 8px;font-family:inherit;font-size:13px}._searchInput_18kvs_13:focus{border-color:var(--pdf-accent)}._searchInput_18kvs_13::placeholder{color:var(--pdf-text-placeholder)}._navButton_18kvs_33{color:var(--pdf-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:4px 5px;display:flex}._navButton_18kvs_33:hover:not(:disabled){background:var(--pdf-surface);color:var(--pdf-text-primary)}._navButton_18kvs_33:disabled{color:var(--pdf-border);cursor:default}._counter_18kvs_54{color:var(--pdf-text-muted);text-align:center;min-width:36px;font-size:11px}._list_b0wj1_1{flex-direction:column;gap:6px;padding:8px;display:flex}._emptyState_b0wj1_8{color:var(--pdf-text-muted);text-align:center;padding:24px 14px;font-size:12px}._card_b0wj1_15{border:1px solid var(--pdf-border);background:var(--pdf-panel-bg);text-align:left;cursor:default;box-sizing:border-box;border-radius:8px;width:100%;font-family:inherit;font-size:12px;transition:box-shadow .15s,border-color .15s;position:relative;overflow:hidden}._cardSigned_b0wj1_32{background:#22c55e0a;border-color:#22c55e47}._cardClickable_b0wj1_37{cursor:pointer}._cardClickable_b0wj1_37:hover{box-shadow:0 2px 10px var(--pdf-shadow-page);border-color:var(--pdf-border-light)}._cardSigned_b0wj1_32._cardClickable_b0wj1_37:hover{border-color:#22c55e73}._cardBody_b0wj1_50{padding:10px 12px 10px 16px}._cardHeader_b0wj1_54{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}._fieldName_b0wj1_62{color:var(--pdf-text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._statusChip_b0wj1_73{text-transform:uppercase;letter-spacing:.5px;background:var(--pdf-surface-hover);color:var(--pdf-text-muted);border:1px solid var(--pdf-border);border-radius:20px;flex-shrink:0;align-items:center;gap:4px;padding:2px 7px;font-size:10px;font-weight:700;display:inline-flex}._statusChipSigned_b0wj1_89{color:#15803d;background:#22c55e1f;border-color:#22c55e4d}._fieldList_b0wj1_95{flex-direction:column;gap:4px;display:flex}._fieldRow_b0wj1_101{grid-template-columns:72px 1fr;gap:4px;font-size:11px;line-height:1.5;display:grid}._fieldLabel_b0wj1_109{color:var(--pdf-text-muted);font-weight:500}._fieldValue_b0wj1_114{color:var(--pdf-text-secondary);word-break:break-word}._iconWrapper_b0wj1_119{justify-content:center;align-items:center;display:flex;position:relative}._badge_b0wj1_126{background-color:var(--pdf-badge-bg);color:#fff;text-align:center;pointer-events:none;box-sizing:border-box;border-radius:7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:14px;position:absolute;top:-5px;right:-7px}._thumbnailList_t3mg8_1{background-color:var(--pdf-panel-bg);padding-bottom:8px}._thumbnailItem_t3mg8_6{cursor:pointer;text-align:center;background-color:#0000;border-left:2px solid #0000;padding:12px 16px;transition:background-color .15s}._thumbnailItem_t3mg8_6:hover{background-color:var(--pdf-surface-hover)}._thumbnailItemActive_t3mg8_19{background-color:var(--pdf-accent-subtle);border-left-color:var(--pdf-accent)}._thumbnailItemActive_t3mg8_19:hover{background-color:var(--pdf-accent-subtle)}._thumbnailImg_t3mg8_28{width:120px;box-shadow:0 1px 4px var(--pdf-shadow-page);border-radius:2px}._thumbnailImgActive_t3mg8_34{box-shadow:0 0 0 2px var(--pdf-accent), 0 2px 8px var(--pdf-shadow-page)}._thumbnailSkeleton_t3mg8_40{background:linear-gradient(90deg, var(--pdf-surface) 25%, var(--pdf-surface-hover) 50%, var(--pdf-surface) 75%);background-size:200% 100%;border-radius:2px;width:120px;height:160px;animation:1.4s infinite _shimmer_t3mg8_1}@keyframes _shimmer_t3mg8_1{0%{background-position:200% 0}to{background-position:-200% 0}}._thumbnailLabel_t3mg8_63{color:var(--pdf-text-muted);margin-top:6px;font-size:11px;font-weight:400}._thumbnailLabelActive_t3mg8_70{color:var(--pdf-accent-hover);font-weight:600}._zoomLabel_m8iv9_1{text-align:center;min-width:42px;color:var(--pdf-text-muted);font-variant-numeric:tabular-nums;font-size:12px}._toolbar_xoqxq_1{flex:1;align-items:center;gap:2px;min-width:0;display:flex}._item_xoqxq_9{flex-shrink:0;align-items:center;display:flex}._overflowWrapper_xoqxq_15{flex-shrink:0;margin-left:auto;position:relative}._overflowBtnActive_xoqxq_21{background:var(--pdf-surface);color:var(--pdf-text-primary)}._dropdown_xoqxq_26{background:var(--pdf-bg);border:1px solid var(--pdf-border);z-index:100;border-radius:6px;flex-direction:column;gap:1px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 16px #0000002e}._dropdownItem_xoqxq_41{border-radius:4px;justify-content:flex-end;align-items:center;padding:1px 2px;display:flex}._dropdownItem_xoqxq_41>*{flex-shrink:0}._labeledItem_xoqxq_53{align-items:center;gap:8px;width:100%;display:flex}._itemContent_xoqxq_60{flex-shrink:0;align-items:center;display:flex}._itemLabel_xoqxq_66{color:var(--pdf-text-secondary);white-space:nowrap;-webkit-user-select:none;user-select:none;flex:1;font-size:12px}._dropdownItem_xoqxq_41:hover{background:var(--pdf-surface-hover)}._separator_b9iob_1{background:var(--pdf-toolbar-separator);flex-shrink:0;width:1px;height:20px;margin:0 4px}._separatorH_b9iob_9{background:var(--pdf-toolbar-separator);height:1px;margin:2px 4px}
2
2
  /*$vite$:1*/
@@ -3,9 +3,7 @@ interface UseKeyboardShortcutsOptions {
3
3
  pdf: pdfjsLib.PDFDocumentProxy | null;
4
4
  currentPage: number;
5
5
  goToPage: (page: number) => void;
6
- setZoom: React.Dispatch<React.SetStateAction<number>>;
7
6
  setRotation: React.Dispatch<React.SetStateAction<number>>;
8
- setFitMode: React.Dispatch<React.SetStateAction<"width" | "page" | null>>;
9
7
  }
10
- export declare function useKeyboardShortcuts({ pdf, currentPage, goToPage, setZoom, setRotation, setFitMode, }: UseKeyboardShortcutsOptions): void;
8
+ export declare function useKeyboardShortcuts({ pdf, currentPage, goToPage, setRotation, }: UseKeyboardShortcutsOptions): void;
11
9
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-tsx",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "A fully-featured, composable PDF viewer component for React",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.cjs",