cyreader 0.1.2 → 0.2.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/bundle/server/dist/config/paths.js +4 -1
- package/bundle/server/dist/index.js +1 -1
- package/bundle/server/dist/library/scan.js +2 -3
- package/bundle/server/dist/library/scan.test.js +8 -8
- package/bundle/server/dist/library/service.js +11 -3
- package/bundle/server/dist/library/service.test.js +44 -10
- package/bundle/server/dist/library/storage.js +76 -0
- package/bundle/server/dist/library/storage.test.js +74 -0
- package/bundle/server/dist/reading/progress/service.test.js +1 -1
- package/bundle/server/dist/reading/recent/service.test.js +1 -1
- package/bundle/server/dist/routes/config.test.js +1 -1
- package/bundle/server/dist/routes/library.test.js +1 -1
- package/bundle/server/dist/routes/reading.test.js +1 -1
- package/bundle/web/dist/assets/{_shell-Bm2pxAQP.js → _shell-CQkt24cc.js} +1 -1
- package/bundle/web/dist/assets/_shell-N_UfyRoX.js +1 -0
- package/bundle/web/dist/assets/{comic._id-Djtr8diE.js → comic._id-CVm6n_JY.js} +1 -1
- package/bundle/web/dist/assets/{index-BHhqsr5H.js → index-BS403FO9.js} +2 -2
- package/bundle/web/dist/assets/{novel._id-C62VYvcl.js → novel._id-Bgt8GkIZ.js} +1 -1
- package/bundle/web/dist/assets/{save-reading-progress-D231ROaQ.js → save-reading-progress-DntE0i4u.js} +1 -1
- package/bundle/web/dist/assets/scroll-area-BUlmpLx6.js +1 -0
- package/bundle/web/dist/assets/settings-DopKc4yx.js +1 -0
- package/bundle/web/dist/assets/{useRouterState-4dM5FKiy.js → useRouterState-DDtlowFh.js} +1 -1
- package/bundle/web/dist/index.html +1 -1
- package/package.json +1 -1
- package/bundle/web/dist/assets/_shell-Cij8gMSv.js +0 -1
- package/bundle/web/dist/assets/scroll-area-CyEO8R_G.js +0 -1
- package/bundle/web/dist/assets/settings-BRi0XyRg.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Y as e,a as t,b as n,h as r,l as i,s as a,t as o,u as s,x as c}from"./utils-ChkMmPzE.js";import{i as l,o as u,r as d,t as f}from"./query-keys-CbbgiZx4.js";import{t as p}from"./useRouterState-
|
|
1
|
+
import{Y as e,a as t,b as n,h as r,l as i,s as a,t as o,u as s,x as c}from"./utils-ChkMmPzE.js";import{i as l,o as u,r as d,t as f}from"./query-keys-CbbgiZx4.js";import{t as p}from"./useRouterState-DDtlowFh.js";import{a as m,c as h,d as g,i as _,l as v,n as y,o as b,r as x,s as S,t as ee,u as C}from"./save-reading-progress-DntE0i4u.js";import{t as w}from"./settings-2-8mnAuSax.js";import{n as T,t as E}from"./dist-QfKKfHSL.js";import{n as D,t as O}from"./dist-DzLEGVNH.js";import{a as k,i as A}from"./reading-BozmJNi1.js";import{d as j,n as M,y as te}from"./index-BS403FO9.js";import{o as ne,r as re,t as ie}from"./reading-progress-C5bkK-vF.js";var N=e(c(),1),P=n(),F=[`PageUp`,`PageDown`],I=[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`],L={"from-left":[`Home`,`PageDown`,`ArrowDown`,`ArrowLeft`],"from-right":[`Home`,`PageDown`,`ArrowDown`,`ArrowRight`],"from-bottom":[`Home`,`PageDown`,`ArrowDown`,`ArrowLeft`],"from-top":[`Home`,`PageDown`,`ArrowUp`,`ArrowLeft`]},R=`Slider`,[z,B,ae]=T(R),[V,oe]=i(R,[ae]),[H,U]=V(R),W=N.forwardRef((e,n)=>{let{name:r,min:i=0,max:o=100,step:s=1,orientation:c=`horizontal`,disabled:l=!1,minStepsBetweenThumbs:u=0,defaultValue:d=[i],value:f,onValueChange:p=()=>{},onValueCommit:m=()=>{},inverted:h=!1,form:g,..._}=e,v=N.useRef(new Set),y=N.useRef(0),b=N.useRef(!1),x=c===`horizontal`?se:ce,[S=[],ee]=t({prop:f,defaultProp:d,onChange:e=>{[...v.current][y.current]?.focus({preventScroll:!0,focusVisible:b.current}),b.current=!1,p(e)}}),C=N.useRef(S);function w(e){D(e,xe(S,e))}function T(e){D(e,y.current)}function E(){let e=C.current[y.current];S[y.current]!==e&&m(S)}function D(e,t,{commit:n}={commit:!1}){let r=Te(s),a=O(Ee(Math.round((e-i)/s)*s+i,r),[i,o]);ee((e=[])=>{let r=ve(e,a,t);if(we(r,u*s)){y.current=r.indexOf(a);let t=String(r)!==String(e);return t&&n&&m(r),t?r:e}else return e})}return(0,P.jsx)(H,{scope:e.__scopeSlider,name:r,disabled:l,min:i,max:o,valueIndexToChangeRef:y,thumbs:v.current,values:S,orientation:c,form:g,children:(0,P.jsx)(z.Provider,{scope:e.__scopeSlider,children:(0,P.jsx)(z.Slot,{scope:e.__scopeSlider,children:(0,P.jsx)(x,{"aria-disabled":l,"data-disabled":l?``:void 0,..._,ref:n,onPointerDown:a(_.onPointerDown,()=>{l||(C.current=S,b.current=!1)}),min:i,max:o,inverted:h,onSlideStart:l?void 0:w,onSlideMove:l?void 0:T,onSlideEnd:l?void 0:E,onHomeKeyDown:()=>{l||(b.current=!0,D(i,0,{commit:!0}))},onEndKeyDown:()=>{l||(b.current=!0,D(o,S.length-1,{commit:!0}))},onStepKeyDown:({event:e,direction:t})=>{if(!l){b.current=!0;let n=F.includes(e.key)||e.shiftKey&&I.includes(e.key)?10:1,r=y.current,i=S[r];D(i+s*n*t,r,{commit:!0})}}})})})})});W.displayName=R;var[G,K]=V(R,{startEdge:`left`,endEdge:`right`,size:`width`,direction:1}),se=N.forwardRef((e,t)=>{let{min:n,max:i,dir:a,inverted:o,onSlideStart:s,onSlideMove:c,onSlideEnd:l,onStepKeyDown:u,...d}=e,[f,p]=N.useState(null),m=r(t,e=>p(e)),h=N.useRef(void 0),g=E(a),_=g===`ltr`,v=_&&!o||!_&&o;function y(e){let t=h.current||f.getBoundingClientRect(),r=$([0,t.width],v?[n,i]:[i,n]);return h.current=t,r(e-t.left)}return(0,P.jsx)(G,{scope:e.__scopeSlider,startEdge:v?`left`:`right`,endEdge:v?`right`:`left`,direction:v?1:-1,size:`width`,children:(0,P.jsx)(q,{dir:g,"data-orientation":`horizontal`,...d,ref:m,style:{...d.style,"--radix-slider-thumb-transform":`translateX(-50%)`},onSlideStart:e=>{let t=y(e.clientX);s?.(t)},onSlideMove:e=>{let t=y(e.clientX);c?.(t)},onSlideEnd:()=>{h.current=void 0,l?.()},onStepKeyDown:e=>{let t=L[v?`from-left`:`from-right`].includes(e.key);u?.({event:e,direction:t?-1:1})}})})}),ce=N.forwardRef((e,t)=>{let{min:n,max:i,inverted:a,onSlideStart:o,onSlideMove:s,onSlideEnd:c,onStepKeyDown:l,...u}=e,d=N.useRef(null),f=r(t,d),p=N.useRef(void 0),m=!a;function h(e){let t=p.current||d.current.getBoundingClientRect(),r=$([0,t.height],m?[i,n]:[n,i]);return p.current=t,r(e-t.top)}return(0,P.jsx)(G,{scope:e.__scopeSlider,startEdge:m?`bottom`:`top`,endEdge:m?`top`:`bottom`,size:`height`,direction:m?1:-1,children:(0,P.jsx)(q,{"data-orientation":`vertical`,...u,ref:f,style:{...u.style,"--radix-slider-thumb-transform":`translateY(50%)`},onSlideStart:e=>{let t=h(e.clientY);o?.(t)},onSlideMove:e=>{let t=h(e.clientY);s?.(t)},onSlideEnd:()=>{p.current=void 0,c?.()},onStepKeyDown:e=>{let t=L[m?`from-bottom`:`from-top`].includes(e.key);l?.({event:e,direction:t?-1:1})}})})}),q=N.forwardRef((e,t)=>{let{__scopeSlider:n,onSlideStart:r,onSlideMove:i,onSlideEnd:o,onHomeKeyDown:c,onEndKeyDown:l,onStepKeyDown:u,...d}=e,f=U(R,n);return(0,P.jsx)(s.span,{...d,ref:t,onKeyDown:a(e.onKeyDown,e=>{e.key===`Home`?(c(e),e.preventDefault()):e.key===`End`?(l(e),e.preventDefault()):F.concat(I).includes(e.key)&&(u(e),e.preventDefault())}),onPointerDown:a(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),f.thumbs.has(t)?t.focus({preventScroll:!0,focusVisible:!1}):r(e)}),onPointerMove:a(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&i(e)}),onPointerUp:a(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),o(e))})})}),J=`SliderTrack`,Y=N.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,i=U(J,n);return(0,P.jsx)(s.span,{"data-disabled":i.disabled?``:void 0,"data-orientation":i.orientation,...r,ref:t})});Y.displayName=J;var X=`SliderRange`,Z=N.forwardRef((e,t)=>{let{__scopeSlider:n,...i}=e,a=U(X,n),o=K(X,n),c=r(t,N.useRef(null)),l=a.values.length,u=a.values.map(e=>ye(e,a.min,a.max)),d=l>1?Math.min(...u):0,f=100-Math.max(...u);return(0,P.jsx)(s.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?``:void 0,...i,ref:c,style:{...e.style,[o.startEdge]:d+`%`,[o.endEdge]:f+`%`}})});Z.displayName=X;var le=`SliderThumb`,[ue,de]=V(le),fe=`SliderThumbProvider`;function pe(e){let{__scopeSlider:t,name:n,children:r,internal_do_not_use_render:i}=e,a=U(fe,t),o=B(t),[s,c]=N.useState(null),l=N.useMemo(()=>s?o().findIndex(e=>e.ref.current===s):-1,[o,s]),u=j(s),d=s?!!a.form||!!s.closest(`form`):!0,f=a.values[l],p=n??(a.name?a.name+(a.values.length>1?`[]`:``):void 0),m=f===void 0?0:ye(f,a.min,a.max);N.useEffect(()=>{if(s)return a.thumbs.add(s),()=>{a.thumbs.delete(s)}},[s,a.thumbs]);let h={value:f,name:p,form:a.form,isFormControl:d,index:l,thumb:s,onThumbChange:c,percent:m,size:u};return(0,P.jsx)(ue,{scope:t,...h,children:De(i)?i(h):r})}pe.displayName=fe;var Q=`SliderThumbTrigger`,me=N.forwardRef((e,t)=>{let{__scopeSlider:n,...i}=e,o=U(Q,n),c=K(Q,n),{index:l,value:u,percent:d,size:f,onThumbChange:p}=de(Q,n),m=r(t,e=>p(e)),h=be(l,o.values.length),g=f?.[c.size],_=g?Se(g,d,c.direction):0;return(0,P.jsx)(`span`,{style:{transform:`var(--radix-slider-thumb-transform)`,position:`absolute`,[c.startEdge]:`calc(${d}% + ${_}px)`},children:(0,P.jsx)(z.ItemSlot,{scope:n,children:(0,P.jsx)(s.span,{role:`slider`,"aria-label":e[`aria-label`]||h,"aria-valuemin":o.min,"aria-valuenow":u,"aria-valuemax":o.max,"aria-orientation":o.orientation,"data-orientation":o.orientation,"data-disabled":o.disabled?``:void 0,tabIndex:o.disabled?void 0:0,...i,ref:m,style:u===void 0?{display:`none`}:e.style,onFocus:a(e.onFocus,()=>{o.valueIndexToChangeRef.current=l})})})})});me.displayName=Q;var he=N.forwardRef((e,t)=>{let{__scopeSlider:n,name:r,...i}=e;return(0,P.jsx)(pe,{__scopeSlider:n,name:r,internal_do_not_use_render:({index:e,isFormControl:r})=>(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(me,{...i,ref:t,__scopeSlider:n}),r?(0,P.jsx)(_e,{__scopeSlider:n},e):null]})})});he.displayName=le;var ge=`SliderBubbleInput`,_e=N.forwardRef(({__scopeSlider:e,...t},n)=>{let{value:i,name:a,form:o}=de(ge,e),c=N.useRef(null),l=r(c,n),u=D(i);return N.useEffect(()=>{let e=c.current;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`value`).set;if(u!==i&&n){let t=new Event(`input`,{bubbles:!0});n.call(e,i),e.dispatchEvent(t)}},[u,i]),(0,P.jsx)(s.input,{style:{display:`none`},name:a,form:o,...t,ref:l,defaultValue:i})});_e.displayName=ge;function ve(e=[],t,n){let r=[...e];return r[n]=t,r.sort((e,t)=>e-t)}function ye(e,t,n){return O(100/(n-t)*(e-t),[0,100])}function be(e,t){if(t>2)return`Value ${e+1} of ${t}`;if(t===2)return[`Minimum`,`Maximum`][e]}function xe(e,t){if(e.length===1)return 0;let n=e.map(e=>Math.abs(e-t)),r=Math.min(...n);return n.indexOf(r)}function Se(e,t,n){let r=e/2;return(r-$([0,50],[0,r])(t)*n)*n}function Ce(e){return e.slice(0,-1).map((t,n)=>e[n+1]-t)}function we(e,t){if(t>0){let n=Ce(e);return Math.min(...n)>=t}return!0}function $(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Te(e){if(!Number.isFinite(e))return 0;let t=e.toString();if(t.includes(`e`)){let[e,n]=t.split(`e`),r=e.split(`.`)[1]||``,i=Number(n);return Math.max(0,r.length-i)}let n=t.split(`.`)[1];return n?n.length:0}function Ee(e,t){let n=10**t;return Math.round(e*n)/n}function De(e){return typeof e==`function`}function Oe(e,t){return`/static/${e}/${encodeURIComponent(t)}`}async function ke(e,t){let n=await fetch(Oe(e,t));if(!n.ok)throw Error(n.statusText);return n.text()}function Ae(e,t){return u({queryKey:f.novelContent(e??``,t??``),queryFn:()=>ke(e,t),enabled:!!(e&&t)})}function je(e){let t=e.replace(/\r\n?/g,`
|
|
2
2
|
`).trim();if(!t)return[];let n=t.split(/\n{2,}/);return n.length>1?n.flatMap(e=>e.split(`
|
|
3
3
|
`).map(e=>e.trim()).filter(Boolean)):t.split(`
|
|
4
4
|
`).map(e=>e.trim()).filter(Boolean)}function Me({className:e,defaultValue:t,value:n,min:r=0,max:i=100,...a}){let s=N.useMemo(()=>Array.isArray(n)?n:Array.isArray(t)?t:[r,i],[n,t,r,i]);return(0,P.jsxs)(W,{"data-slot":`slider`,defaultValue:t,value:n,min:r,max:i,className:o(`relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col`,e),...a,children:[(0,P.jsx)(Y,{"data-slot":`slider-track`,className:`relative grow overflow-hidden rounded-full bg-muted data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1`,children:(0,P.jsx)(Z,{"data-slot":`slider-range`,className:`absolute bg-primary select-none data-horizontal:h-full data-vertical:w-full`})}),Array.from({length:s.length},(e,t)=>(0,P.jsx)(he,{"data-slot":`slider-thumb`,className:`relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50`},t))]})}function Ne({open:e,fontSize:t,lineHeight:n,theme:r,contentFont:i,onFontSizeChange:a,onLineHeightChange:s,onThemeChange:c,onContentFontChange:u,readerStyle:d}){return e?(0,P.jsxs)(`div`,{className:`absolute top-14 right-0 z-20 flex w-80 flex-col gap-4 border-l border-b p-4`,style:{...d,borderColor:`var(--reader-border)`},children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,P.jsx)(`span`,{className:`text-sm`,style:{color:`var(--reader-text)`},children:`字体大小`}),(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(l,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>a(t-1),children:`A-`}),(0,P.jsx)(Me,{value:[t],min:14,max:26,step:1,onValueChange:e=>a(e[0]??t),className:`w-24`}),(0,P.jsx)(l,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>a(t+1),children:`A+`})]})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,P.jsx)(`span`,{className:`text-sm`,style:{color:`var(--reader-text)`},children:`行间距`}),(0,P.jsxs)(A,{type:`single`,value:String(n),onValueChange:e=>{e&&s(Number(e))},variant:`outline`,size:`sm`,children:[(0,P.jsx)(k,{value:`1.6`,children:`紧凑`}),(0,P.jsx)(k,{value:`1.8`,children:`适中`}),(0,P.jsx)(k,{value:`2.2`,children:`宽松`})]})]}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,P.jsx)(`span`,{className:`text-sm`,style:{color:`var(--reader-text)`},children:`字体`}),(0,P.jsx)(A,{type:`single`,value:i,onValueChange:e=>{e&&u(e)},variant:`outline`,size:`sm`,children:Object.keys(h).map(e=>(0,P.jsx)(k,{value:e,children:h[e].label},e))})]}),(0,P.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,P.jsx)(`span`,{className:`text-sm`,style:{color:`var(--reader-text)`},children:`阅读主题`}),(0,P.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Object.keys(b).map(e=>(0,P.jsx)(`button`,{type:`button`,"aria-label":b[e].label,onClick:()=>c(e),className:o(`size-8 rounded-full border-2 transition-transform hover:scale-105`,r===e?`border-[var(--reader-accent)]`:`border-transparent`),style:{background:b[e].bg,boxShadow:r===e?void 0:`inset 0 0 0 1px ${b[e].controlBorder}`}},e))})]})]}):null}function Pe(e,t){return e*t*2+e*1.2}function Fe({title:e,paragraphs:t,fontSize:n,lineHeight:r,contentFont:i,initialParagraphIndex:a=0,onParagraphChange:s,onReachEnd:c}){let l=(0,N.useRef)(null),u=(0,N.useRef)(null),[d,f]=(0,N.useState)(0),p=(0,N.useRef)(!1),m=(0,N.useRef)(e),g=(0,N.useRef)(s),_=(0,N.useRef)(c);g.current=s,_.current=c;let v=(0,N.useCallback)(()=>{u.current&&f(u.current.offsetTop)},[]),y=C({count:t.length,getScrollElement:()=>l.current,estimateSize:()=>Pe(n,r),overscan:10,scrollMargin:d,getItemKey:e=>e}),b=(0,N.useRef)(y.measure);b.current=y.measure;let x=(0,N.useRef)(y.scrollToIndex);return x.current=y.scrollToIndex,(0,N.useLayoutEffect)(()=>{v()},[e,n,r,v]),(0,N.useLayoutEffect)(()=>{let e=u.current;if(!e)return;let t=new ResizeObserver(()=>{v()});return t.observe(e),e.previousElementSibling instanceof HTMLElement&&t.observe(e.previousElementSibling),()=>{t.disconnect()}},[e,v]),(0,N.useLayoutEffect)(()=>{b.current()},[n,r,i]),(0,N.useLayoutEffect)(()=>{if(t.length===0||p.current)return;let e=u.current;if(!e)return;let n=e.offsetTop;if(d!==n){f(n);return}p.current=!0;let r=Math.min(Math.max(a,0),t.length-1);b.current(),x.current(r,{align:`start`})},[a,t.length,d]),(0,N.useEffect)(()=>{m.current!==e&&(m.current=e,p.current=!1)},[e]),(0,N.useEffect)(()=>{let e=l.current;if(!e)return;let t,n=()=>{t&&clearTimeout(t),t=setTimeout(()=>{let t=y.range;if(t){let n=e.scrollTop,r=y.getVirtualItems(),i=t.startIndex;for(let e of r)if(e.start+e.size>n){i=e.size>0&&Math.max(0,n-e.start)>e.size/2?e.index+1:e.index;break}g.current?.(i)}e.scrollTop+e.clientHeight>=e.scrollHeight-32&&_.current?.()},100)};return e.addEventListener(`scroll`,n,{passive:!0}),()=>{e.removeEventListener(`scroll`,n),t&&clearTimeout(t)}},[y]),(0,P.jsx)(`div`,{ref:l,className:`reader-scrollbar h-full overflow-y-auto`,children:(0,P.jsxs)(`article`,{className:`mx-auto max-w-[720px] px-6 py-8`,style:{fontSize:`var(--reader-font-size)`,lineHeight:`var(--reader-line-height)`,color:`var(--reader-text)`,...i!=="default"&&{fontFamily:h[i].family}},children:[(0,P.jsx)(`h1`,{className:`mb-2 text-[1.4em] font-bold`,children:e}),(0,P.jsx)(`div`,{className:`mb-6 border-b pb-4 text-[0.85em]`,style:{borderColor:`var(--reader-border)`,color:`var(--reader-text-muted)`},children:`—`}),(0,P.jsx)(`div`,{ref:u,style:{height:y.getTotalSize(),width:`100%`,position:`relative`},children:y.getVirtualItems().map(e=>(0,P.jsx)(`div`,{"data-index":e.index,ref:y.measureElement,style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start-y.options.scrollMargin}px)`},children:(0,P.jsx)(`p`,{className:o(`mb-[1.2em] text-justify`,e.index===0?``:`indent-[2em]`),children:t[e.index]})},e.key))})]})})}function Ie({id:e}){let t=p({select:e=>e.location.state?.readerTitle}),{data:n,isPending:r,error:i}=v(e),a=n&&n.type===`novel`?n:null,{data:s,isPending:c,error:u}=Ae(a?.directoryId,a?.filename),[f,h]=(0,N.useState)(!1),{settings:b,patchSettings:C}=m(`novel`),{fontSize:T,lineHeight:E,theme:D,contentFont:O}=b,[k,A]=(0,N.useState)(0),[j,M]=(0,N.useState)(null),F=(0,N.useMemo)(()=>S(D,T,E),[T,E,D]),I=t??n?.title??`加载中...`,L=r||a!==null&&c,R=i??u,z=R?R instanceof Error?R.message:`加载失败`:null,B=(0,N.useMemo)(()=>s?je(s):[],[s]),ae=(0,N.useMemo)(()=>re(k,B.length),[k,B.length]),V=(0,N.useCallback)((t,n=null)=>{if(B.length===0)return;let r=Math.min(Math.max(t,0),B.length-1);y(e,{type:`novel`,paragraphIndex:r,anchor:ie(B[r]??``),layout:{paragraphCount:B.length,charCount:B.reduce((e,t)=>e+t.length,0)},completedAt:n})},[e,B]),oe=(0,N.useCallback)(e=>{A(e),V(e,null)},[V]),H=(0,N.useCallback)(()=>{if(B.length===0)return;let e=B.length-1;A(e),V(e,new Date().toISOString())},[B.length,V]);return(0,N.useEffect)(()=>{M(null),A(0)},[e]),(0,N.useEffect)(()=>{if(B.length===0||j!==null)return;let e=ne(a?.progress,B);M(e),A(e)},[a?.progress,B,j]),(0,N.useEffect)(()=>(_(e),()=>{x(e),ee(e)}),[e]),(0,N.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(e.preventDefault(),f&&h(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[f]),(0,P.jsxs)(`div`,{className:`reader-scope relative flex h-screen flex-col overflow-hidden`,style:F,children:[(0,P.jsxs)(`header`,{className:`relative z-10 flex h-14 shrink-0 items-center gap-3 border-b px-4`,style:{borderColor:`var(--reader-border)`},children:[(0,P.jsx)(l,{type:`button`,variant:`ghost`,size:`sm`,asChild:!0,children:(0,P.jsxs)(te,{to:`/`,children:[(0,P.jsx)(g,{"data-icon":`inline-start`}),`返回`]})}),(0,P.jsx)(`div`,{className:`flex-1 truncate text-center text-sm font-medium`,children:I}),(0,P.jsx)(l,{type:`button`,variant:`ghost`,size:`icon-sm`,onClick:()=>h(e=>!e),className:o(f&&`reader-settings-active`),children:(0,P.jsx)(w,{})})]}),(0,P.jsx)(Ne,{open:f,fontSize:T,lineHeight:E,theme:D,contentFont:O,onFontSizeChange:e=>C({fontSize:Math.min(26,Math.max(14,e))}),onLineHeightChange:e=>C({lineHeight:e}),onThemeChange:e=>C({theme:e}),onContentFontChange:e=>C({contentFont:e}),readerStyle:F}),(0,P.jsxs)(`div`,{className:`relative min-h-0 flex-1`,children:[L&&!s?(0,P.jsxs)(`div`,{className:`flex flex-col gap-3 p-8`,children:[(0,P.jsx)(d,{className:`h-8 w-1/2`}),(0,P.jsx)(d,{className:`h-4 w-full`}),(0,P.jsx)(d,{className:`h-4 w-full`}),(0,P.jsx)(d,{className:`h-4 w-3/4`})]}):null,z?(0,P.jsx)(`div`,{className:`p-8 text-sm`,style:{color:`var(--reader-error)`},children:z}):null,!r&&!z&&n&&n.type!==`novel`?(0,P.jsx)(`div`,{className:`p-8 text-sm`,style:{color:`var(--reader-error)`},children:`作品类型不匹配`}):null,a&&s&&j!==null?(0,P.jsx)(Fe,{title:a.title,paragraphs:B,fontSize:T,lineHeight:E,contentFont:O,initialParagraphIndex:j,onParagraphChange:oe,onReachEnd:H},e):null]}),(0,P.jsxs)(`footer`,{className:`flex h-11 shrink-0 items-center justify-center border-t text-xs`,style:{borderColor:`var(--reader-border)`,color:`var(--reader-text-muted)`},children:[`已读 `,ae,`%`]})]})}function Le(){let{id:e}=M.useParams();return(0,P.jsx)(Ie,{id:e})}export{Le as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as e,_ as t,g as n,x as r}from"./utils-ChkMmPzE.js";import{o as i,t as a}from"./query-keys-CbbgiZx4.js";import{n as o,r as s}from"./reading-BozmJNi1.js";import{_ as c}from"./index-BHhqsr5H.js";import{n as l}from"./library-D_1sil_O.js";var u=n(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),d=e(r(),1),f=e(t(),1);function p(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&a<e){let e=r[a];if(!e){let i=t[a*2];e=r[a]={index:a,key:n(a),start:i,size:t[a*2+1],end:i+t[a*2+1],lane:0}}return e}}if(i===`length`)return e}return Reflect.get(r,i,a)}})}function m(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=e();return o.length!==r.length||o.some((e,t)=>r[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function h(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var g=(e,t)=>Math.abs(e-t)<1.01,ee=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},_,v=()=>{if(_!==void 0)return _;if(typeof navigator>`u`)return _=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return _=!0;let e=navigator.maxTouchPoints;return _=navigator.platform===`MacIntel`&&e!==void 0&&e>0},y=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},b=e=>e,x=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},te=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(y(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(y(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},S={passive:!0},ne=typeof window>`u`?!0:`onscrollend`in window,re=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&ne,o=0,s=a?null:ee(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,S),a&&r.addEventListener(`scrollend`,u,S),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},C=(e,t)=>re(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),w=(e,t,n)=>{if(n.options.useCachedMeasurements){let t=n.indexFromElement(e),r=n.options.getItemKey(t);return n.itemSizeCache.get(r)??n.options.estimateSize(t)}if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}if(!t){let t=n.indexFromElement(e),r=n.options.getItemKey(t),i=n.itemSizeCache.get(r);if(i!==void 0)return i}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},T=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},E=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:b,rangeExtractor:x,onChange:()=>{},measureElement:w,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`,useCachedMeasurements:!1};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null,a=!1;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,o=t.count,s=this.getMeasurements(),c=e>0?s[0]?.key??n.getItemKey(0):null,l=e>0?s[e-1]?.key??n.getItemKey(e-1):null;if(o!==e||e>0&&o>0&&(t.getItemKey(0)!==c||t.getItemKey(o-1)!==l)){a=!0;let c=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??s[0]:null;c&&(r=[c.key,this.getScrollOffset()-c.start]);let u=t.followOnAppend===!0?`auto`:t.followOnAppend||null;u&&o>e&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(o-1)!==l)&&(i=u)}}this.options=t,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let o=!1,s=0;if(r&&this.scrollOffset!==null){let[e,t]=r,n=this.getMeasurements(),{count:i,getItemKey:a}=this.options,c=0;for(;c<i&&a(c)!==e;)c++;if(c<i){let e=n[c];if(e){let n=e.start+t;n!==this.scrollOffset&&(s=n-this.scrollOffset,this.scrollOffset=n,o=!0)}}}(o||i)&&(this.pendingScrollAnchor=[o?r[0]:null,o?r[1]:0,i,s])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=m(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset()<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!v()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,S),e.addEventListener(`touchend`,n,S),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r,i]=t;e!==null&&!r&&(v()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?i!==0&&(this._iosDeferredAdjustment+=i):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),r&&this.scrollToEnd({behavior:r})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.end<a.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return r.size===this.options.lanes?Array.from(r.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=m(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=m(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length<a){let e=new Float64Array(a);o&&l>0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t<e;t++){let e=r(t),n=c.get(e),a=typeof n==`number`?n:this.options.estimateSize(t);o[t*2]=s,o[t*2+1]=a,s+=a+i}let u=p(e,o,r);return this.measurementsCache=u,u}let u=this.measurementsCache.slice(0,l),d=Array(a).fill(void 0);for(let e=0;e<l;e++){let t=u[e];t&&(d[t.lane]=e)}for(let i=l;i<e;i++){let e=r(i),a=this.laneAssignments.get(i),s,l,f=o===`estimate`||c.has(e);if(a!==void 0&&this.options.lanes>1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=m(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>this.range=e.length>0&&t>0?O({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:r===1&&this._flatMeasurements!=null?this._flatMeasurements:null}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=m(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);if(o!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,s=a?this.getTotalSize():0,c=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r<this.getScrollOffset()+this.scrollAdjustments&&this.scrollDirection!==`backward`:this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},o,this));(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++,a?this.applyScrollAdjustment(this.getTotalSize()-s):c&&this.applyScrollAdjustment(o),this.notify(!1)}},this.getVirtualItems=m(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return h(t[D(0,t.length-1,r?e=>n[e*2]:e=>h(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){e!==0&&(v()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=e:this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&g(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},D=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function O({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:i}){let a=e.length-1,o=i?e=>i[e*2]:t=>e[t].start,s=i?e=>i[e*2]+i[e*2+1]:t=>e[t].end;if(e.length<=r)return{startIndex:0,endIndex:a};let c=D(0,a,o,n),l=c;if(r===1)for(;l<a&&s(l)<n+t;)l++;else if(r>1){let i=Array(r).fill(0);for(;l<a&&i.some(e=>e<n+t);){let t=e[l];i[t.lane]=t.end,l++}let o=Array(r).fill(n+t);for(;c>=0&&o.some(e=>e>=n);){let t=e[c];o[t.lane]=t.start,c--}c=Math.max(0,c-c%r),l=Math.min(a,l+(r-1-l%r))}return{startIndex:c,endIndex:l}}var k=typeof document<`u`?d.useLayoutEffect:d.useEffect;function ie({useFlushSync:e=!0,directDomUpdates:t=!1,directDomUpdatesMode:n=`transform`,...r}){let i=d.useReducer(e=>e+1,0)[1],a=d.useRef({enabled:t,mode:n,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});a.current.enabled=t,a.current.mode=n;let o=e=>{let t=a.current;if(!t.enabled)return;let n=e.getTotalSize();if(t.container&&n!==t.lastSize){t.lastSize=n;let r=e.options.horizontal?`width`:`height`;t.container.style[r]=`${n}px`}let r=!!e.options.horizontal,i=t.mode===`transform`,o=r?`left`:`top`,s=e.options.scrollMargin,c=e.getVirtualItems();for(let n of c){let a=n.start-s,c=e.elementsCache.get(n.key);c&&t.lastPositions.get(c)!==a&&(t.lastPositions.set(c,a),i?c.style.transform=r?`translate3d(${a}px, 0, 0)`:`translate3d(0, ${a}px, 0)`:c.style[o]=`${a}px`)}},s={...r,onChange:(t,n)=>{var s;let c=a.current,l=!0;if(c.enabled){o(t);let e=t.range,n=c.prevRange;l=!n||n.isScrolling!==t.isScrolling||n.startIndex!==e?.startIndex||n.endIndex!==e?.endIndex,l&&(c.prevRange=e?{startIndex:e.startIndex,endIndex:e.endIndex,isScrolling:t.isScrolling}:null)}l&&(e&&n?(0,f.flushSync)(i):i()),(s=r.onChange)==null||s.call(r,t,n)}},[c]=d.useState(()=>{let e=new E(s);return Object.assign(e,{containerRef:t=>{let n=a.current;if(n.container=t,n.lastSize=null,t&&n.enabled){let r=e.getTotalSize();n.lastSize=r;let i=e.options.horizontal?`width`:`height`;t.style[i]=`${r}px`}}})});return c.setOptions(s),k(()=>c._didMount(),[]),k(()=>c._willUpdate()),k(()=>{o(c)}),c}function ae(e){return ie({observeElementRect:te,observeElementOffset:C,scrollToFn:T,...e})}function oe(e){return i({queryKey:a.libraryItem(e),queryFn:()=>l(e)})}var A={default:{label:`默认`},heiti:{label:`黑体`,family:`"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif`},serif:{label:`宋体`,family:`"Noto Serif SC", "Source Han Serif SC", serif`}},j={dark:{bg:`#1a1a1e`,text:`#d8d0c0`,textMuted:`#9a9488`,border:`#2e2e34`,controlBg:`#25252c`,controlBorder:`#3a3a42`,controlHover:`#2e2e36`,accent:`#8b7e6a`,accentFg:`#f5f0e8`,error:`#e07070`,skeleton:`#2a2a30`,label:`深色`},paper:{bg:`#f3ead3`,text:`#4a3f35`,textMuted:`#7a6e62`,border:`#e0d4bc`,controlBg:`#ebe2cc`,controlBorder:`#d4c8b0`,controlHover:`#e5dbc4`,accent:`#8b6914`,accentFg:`#faf6ee`,error:`#c04040`,skeleton:`#e5dbc4`,label:`羊皮纸`},light:{bg:`#fafafa`,text:`#1f1f1f`,textMuted:`#6b6b6b`,border:`#e5e5e5`,controlBg:`#f0f0f0`,controlBorder:`#d8d8d8`,controlHover:`#eaeaea`,accent:`#404040`,accentFg:`#ffffff`,error:`#d04040`,skeleton:`#ececec`,label:`浅色`},green:{bg:`#cfecd8`,text:`#2e4a35`,textMuted:`#5a7a62`,border:`#b5dbbb`,controlBg:`#c0e4ca`,controlBorder:`#a8d4b2`,controlHover:`#b8dfc2`,accent:`#3d6b4a`,accentFg:`#f0faf2`,error:`#c04040`,skeleton:`#b8dfc2`,label:`护眼绿`}};function M(e,t,n){let r=j[e];return{"--reader-bg":r.bg,"--reader-text":r.text,"--reader-text-muted":r.textMuted,"--reader-border":r.border,"--reader-control-bg":r.controlBg,"--reader-control-border":r.controlBorder,"--reader-control-hover":r.controlHover,"--reader-accent":r.accent,"--reader-accent-fg":r.accentFg,"--reader-error":r.error,"--reader-skeleton":r.skeleton,"--reader-font-size":`${t}px`,"--reader-line-height":String(n),background:r.bg,color:r.text}}var N=[1.6,1.8,2.2],P={fontSize:18,lineHeight:1.8,theme:`dark`,contentFont:`default`},F={direction:`ltr`},I=new Set([`ltr`,`rtl`]),L=`cyreader:reader-settings`,R=Object.keys(j),z=Object.keys(A);function B(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function V(e,t){return typeof e!=`number`||!Number.isFinite(e)?t:Math.min(26,Math.max(14,Math.round(e)))}function H(e,t){return typeof e==`number`&&N.includes(e)?e:t}function U(e,t){return typeof e==`string`&&R.includes(e)?e:t}function W(e,t){return typeof e==`string`&&z.includes(e)?e:t}function G(e){let t=P;return B(e)?{fontSize:V(e.fontSize,t.fontSize),lineHeight:H(e.lineHeight,t.lineHeight),theme:U(e.theme,t.theme),contentFont:W(e.contentFont,t.contentFont)}:{...t}}function K(e,t){return typeof e==`string`&&I.has(e)?e:t}function q(e){let t=F;return B(e)?{direction:K(e.direction,t.direction)}:{...t}}function se(e){return!(`novel`in e)&&(`fontSize`in e||`lineHeight`in e||`theme`in e||`contentFont`in e)}function ce(e){return B(e)?se(e)?{version:1,novel:G(e),comic:{...F}}:{version:1,novel:G(e.novel),comic:q(e.comic)}:{version:1,novel:{...P},comic:{...F}}}function J(){if(typeof window>`u`)return{version:1,novel:{...P},comic:{...F}};try{let e=window.localStorage.getItem(L);return e?ce(JSON.parse(e)):{version:1,novel:{...P},comic:{...F}}}catch{return{version:1,novel:{...P},comic:{...F}}}}function le(e){if(!(typeof window>`u`))try{window.localStorage.setItem(L,JSON.stringify(e))}catch{}}function ue(e,t){let n=J(),r={version:1,novel:e===`novel`?t:n.novel,comic:e===`comic`?t:n.comic};return le(r),r}function de(e){let[t,n]=(0,d.useState)(()=>J()[e]);return{settings:t,patchSettings:(0,d.useCallback)(t=>{n(n=>{let r={...n,...t};return ue(e===`novel`?`novel`:`comic`,r),r})},[e])}}var fe=300,Y=new Map;function pe(e){let t=Y.get(e);t&&clearTimeout(t),Y.set(e,setTimeout(()=>{Y.delete(e),o(e).then(()=>c.invalidateQueries({queryKey:a.recent})).catch(()=>{})},fe))}function me(e){let t=Y.get(e);t&&(clearTimeout(t),Y.delete(e))}function X(e,t){c.setQueryData(a.libraryItem(e),e=>{if(!e||e.type!==t.type)return e;let n=new Date().toISOString();return t.type===`comic`&&e.type===`comic`?{...e,progress:{type:`comic`,scrollRatio:t.scrollRatio,updatedAt:n,completedAt:t.completedAt??null}}:t.type===`novel`&&e.type===`novel`?{...e,progress:{type:`novel`,paragraphIndex:t.paragraphIndex,updatedAt:n,anchor:t.anchor,layout:t.layout,completedAt:t.completedAt??null}}:e})}var he=800,Z=new Map,Q=new Map;function ge(e,t){Q.set(e,t);let n=Z.get(e);n&&clearTimeout(n),Z.set(e,setTimeout(()=>{Z.delete(e),$(e)},he))}async function $(e){let t=Z.get(e);t&&(clearTimeout(t),Z.delete(e));let n=Q.get(e);if(n){Q.delete(e);try{await s(e,n),X(e,n),await Promise.all([c.invalidateQueries({queryKey:a.library}),c.invalidateQueries({queryKey:a.recent})])}catch{}}}function _e(e){let t=Z.get(e);t&&(clearTimeout(t),Z.delete(e));let n=Q.get(e);Q.delete(e),n&&s(e,n).then(()=>(X(e,n),Promise.all([c.invalidateQueries({queryKey:a.library}),c.invalidateQueries({queryKey:a.recent})]))).catch(()=>{})}typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{for(let e of Q.keys())$(e)});export{de as a,A as c,u as d,pe as i,oe as l,ge as n,j as o,me as r,M as s,_e as t,ae as u};
|
|
1
|
+
import{Y as e,_ as t,g as n,x as r}from"./utils-ChkMmPzE.js";import{o as i,t as a}from"./query-keys-CbbgiZx4.js";import{n as o,r as s}from"./reading-BozmJNi1.js";import{_ as c}from"./index-BS403FO9.js";import{n as l}from"./library-D_1sil_O.js";var u=n(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),d=e(r(),1),f=e(t(),1);function p(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&a<e){let e=r[a];if(!e){let i=t[a*2];e=r[a]={index:a,key:n(a),start:i,size:t[a*2+1],end:i+t[a*2+1],lane:0}}return e}}if(i===`length`)return e}return Reflect.get(r,i,a)}})}function m(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=e();return o.length!==r.length||o.some((e,t)=>r[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function h(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var g=(e,t)=>Math.abs(e-t)<1.01,ee=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},_,v=()=>{if(_!==void 0)return _;if(typeof navigator>`u`)return _=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return _=!0;let e=navigator.maxTouchPoints;return _=navigator.platform===`MacIntel`&&e!==void 0&&e>0},y=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},b=e=>e,x=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},te=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(y(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(y(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},S={passive:!0},ne=typeof window>`u`?!0:`onscrollend`in window,re=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&ne,o=0,s=a?null:ee(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,S),a&&r.addEventListener(`scrollend`,u,S),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},C=(e,t)=>re(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),w=(e,t,n)=>{if(n.options.useCachedMeasurements){let t=n.indexFromElement(e),r=n.options.getItemKey(t);return n.itemSizeCache.get(r)??n.options.estimateSize(t)}if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}if(!t){let t=n.indexFromElement(e),r=n.options.getItemKey(t),i=n.itemSizeCache.get(r);if(i!==void 0)return i}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},T=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},E=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:b,rangeExtractor:x,onChange:()=>{},measureElement:w,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`,useCachedMeasurements:!1};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null,a=!1;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,o=t.count,s=this.getMeasurements(),c=e>0?s[0]?.key??n.getItemKey(0):null,l=e>0?s[e-1]?.key??n.getItemKey(e-1):null;if(o!==e||e>0&&o>0&&(t.getItemKey(0)!==c||t.getItemKey(o-1)!==l)){a=!0;let c=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??s[0]:null;c&&(r=[c.key,this.getScrollOffset()-c.start]);let u=t.followOnAppend===!0?`auto`:t.followOnAppend||null;u&&o>e&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(o-1)!==l)&&(i=u)}}this.options=t,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let o=!1,s=0;if(r&&this.scrollOffset!==null){let[e,t]=r,n=this.getMeasurements(),{count:i,getItemKey:a}=this.options,c=0;for(;c<i&&a(c)!==e;)c++;if(c<i){let e=n[c];if(e){let n=e.start+t;n!==this.scrollOffset&&(s=n-this.scrollOffset,this.scrollOffset=n,o=!0)}}}(o||i)&&(this.pendingScrollAnchor=[o?r[0]:null,o?r[1]:0,i,s])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=m(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset()<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!v()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,S),e.addEventListener(`touchend`,n,S),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r,i]=t;e!==null&&!r&&(v()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?i!==0&&(this._iosDeferredAdjustment+=i):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),r&&this.scrollToEnd({behavior:r})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.end<a.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return r.size===this.options.lanes?Array.from(r.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=m(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=m(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length<a){let e=new Float64Array(a);o&&l>0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t<e;t++){let e=r(t),n=c.get(e),a=typeof n==`number`?n:this.options.estimateSize(t);o[t*2]=s,o[t*2+1]=a,s+=a+i}let u=p(e,o,r);return this.measurementsCache=u,u}let u=this.measurementsCache.slice(0,l),d=Array(a).fill(void 0);for(let e=0;e<l;e++){let t=u[e];t&&(d[t.lane]=e)}for(let i=l;i<e;i++){let e=r(i),a=this.laneAssignments.get(i),s,l,f=o===`estimate`||c.has(e);if(a!==void 0&&this.options.lanes>1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=m(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>this.range=e.length>0&&t>0?O({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:r===1&&this._flatMeasurements!=null?this._flatMeasurements:null}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=m(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);if(o!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,s=a?this.getTotalSize():0,c=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r<this.getScrollOffset()+this.scrollAdjustments&&this.scrollDirection!==`backward`:this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},o,this));(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++,a?this.applyScrollAdjustment(this.getTotalSize()-s):c&&this.applyScrollAdjustment(o),this.notify(!1)}},this.getVirtualItems=m(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return h(t[D(0,t.length-1,r?e=>n[e*2]:e=>h(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){e!==0&&(v()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=e:this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&g(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},D=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function O({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:i}){let a=e.length-1,o=i?e=>i[e*2]:t=>e[t].start,s=i?e=>i[e*2]+i[e*2+1]:t=>e[t].end;if(e.length<=r)return{startIndex:0,endIndex:a};let c=D(0,a,o,n),l=c;if(r===1)for(;l<a&&s(l)<n+t;)l++;else if(r>1){let i=Array(r).fill(0);for(;l<a&&i.some(e=>e<n+t);){let t=e[l];i[t.lane]=t.end,l++}let o=Array(r).fill(n+t);for(;c>=0&&o.some(e=>e>=n);){let t=e[c];o[t.lane]=t.start,c--}c=Math.max(0,c-c%r),l=Math.min(a,l+(r-1-l%r))}return{startIndex:c,endIndex:l}}var k=typeof document<`u`?d.useLayoutEffect:d.useEffect;function ie({useFlushSync:e=!0,directDomUpdates:t=!1,directDomUpdatesMode:n=`transform`,...r}){let i=d.useReducer(e=>e+1,0)[1],a=d.useRef({enabled:t,mode:n,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});a.current.enabled=t,a.current.mode=n;let o=e=>{let t=a.current;if(!t.enabled)return;let n=e.getTotalSize();if(t.container&&n!==t.lastSize){t.lastSize=n;let r=e.options.horizontal?`width`:`height`;t.container.style[r]=`${n}px`}let r=!!e.options.horizontal,i=t.mode===`transform`,o=r?`left`:`top`,s=e.options.scrollMargin,c=e.getVirtualItems();for(let n of c){let a=n.start-s,c=e.elementsCache.get(n.key);c&&t.lastPositions.get(c)!==a&&(t.lastPositions.set(c,a),i?c.style.transform=r?`translate3d(${a}px, 0, 0)`:`translate3d(0, ${a}px, 0)`:c.style[o]=`${a}px`)}},s={...r,onChange:(t,n)=>{var s;let c=a.current,l=!0;if(c.enabled){o(t);let e=t.range,n=c.prevRange;l=!n||n.isScrolling!==t.isScrolling||n.startIndex!==e?.startIndex||n.endIndex!==e?.endIndex,l&&(c.prevRange=e?{startIndex:e.startIndex,endIndex:e.endIndex,isScrolling:t.isScrolling}:null)}l&&(e&&n?(0,f.flushSync)(i):i()),(s=r.onChange)==null||s.call(r,t,n)}},[c]=d.useState(()=>{let e=new E(s);return Object.assign(e,{containerRef:t=>{let n=a.current;if(n.container=t,n.lastSize=null,t&&n.enabled){let r=e.getTotalSize();n.lastSize=r;let i=e.options.horizontal?`width`:`height`;t.style[i]=`${r}px`}}})});return c.setOptions(s),k(()=>c._didMount(),[]),k(()=>c._willUpdate()),k(()=>{o(c)}),c}function ae(e){return ie({observeElementRect:te,observeElementOffset:C,scrollToFn:T,...e})}function oe(e){return i({queryKey:a.libraryItem(e),queryFn:()=>l(e)})}var A={default:{label:`默认`},heiti:{label:`黑体`,family:`"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif`},serif:{label:`宋体`,family:`"Noto Serif SC", "Source Han Serif SC", serif`}},j={dark:{bg:`#1a1a1e`,text:`#d8d0c0`,textMuted:`#9a9488`,border:`#2e2e34`,controlBg:`#25252c`,controlBorder:`#3a3a42`,controlHover:`#2e2e36`,accent:`#8b7e6a`,accentFg:`#f5f0e8`,error:`#e07070`,skeleton:`#2a2a30`,label:`深色`},paper:{bg:`#f3ead3`,text:`#4a3f35`,textMuted:`#7a6e62`,border:`#e0d4bc`,controlBg:`#ebe2cc`,controlBorder:`#d4c8b0`,controlHover:`#e5dbc4`,accent:`#8b6914`,accentFg:`#faf6ee`,error:`#c04040`,skeleton:`#e5dbc4`,label:`羊皮纸`},light:{bg:`#fafafa`,text:`#1f1f1f`,textMuted:`#6b6b6b`,border:`#e5e5e5`,controlBg:`#f0f0f0`,controlBorder:`#d8d8d8`,controlHover:`#eaeaea`,accent:`#404040`,accentFg:`#ffffff`,error:`#d04040`,skeleton:`#ececec`,label:`浅色`},green:{bg:`#cfecd8`,text:`#2e4a35`,textMuted:`#5a7a62`,border:`#b5dbbb`,controlBg:`#c0e4ca`,controlBorder:`#a8d4b2`,controlHover:`#b8dfc2`,accent:`#3d6b4a`,accentFg:`#f0faf2`,error:`#c04040`,skeleton:`#b8dfc2`,label:`护眼绿`}};function M(e,t,n){let r=j[e];return{"--reader-bg":r.bg,"--reader-text":r.text,"--reader-text-muted":r.textMuted,"--reader-border":r.border,"--reader-control-bg":r.controlBg,"--reader-control-border":r.controlBorder,"--reader-control-hover":r.controlHover,"--reader-accent":r.accent,"--reader-accent-fg":r.accentFg,"--reader-error":r.error,"--reader-skeleton":r.skeleton,"--reader-font-size":`${t}px`,"--reader-line-height":String(n),background:r.bg,color:r.text}}var N=[1.6,1.8,2.2],P={fontSize:18,lineHeight:1.8,theme:`dark`,contentFont:`default`},F={direction:`ltr`},I=new Set([`ltr`,`rtl`]),L=`cyreader:reader-settings`,R=Object.keys(j),z=Object.keys(A);function B(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function V(e,t){return typeof e!=`number`||!Number.isFinite(e)?t:Math.min(26,Math.max(14,Math.round(e)))}function H(e,t){return typeof e==`number`&&N.includes(e)?e:t}function U(e,t){return typeof e==`string`&&R.includes(e)?e:t}function W(e,t){return typeof e==`string`&&z.includes(e)?e:t}function G(e){let t=P;return B(e)?{fontSize:V(e.fontSize,t.fontSize),lineHeight:H(e.lineHeight,t.lineHeight),theme:U(e.theme,t.theme),contentFont:W(e.contentFont,t.contentFont)}:{...t}}function K(e,t){return typeof e==`string`&&I.has(e)?e:t}function q(e){let t=F;return B(e)?{direction:K(e.direction,t.direction)}:{...t}}function se(e){return!(`novel`in e)&&(`fontSize`in e||`lineHeight`in e||`theme`in e||`contentFont`in e)}function ce(e){return B(e)?se(e)?{version:1,novel:G(e),comic:{...F}}:{version:1,novel:G(e.novel),comic:q(e.comic)}:{version:1,novel:{...P},comic:{...F}}}function J(){if(typeof window>`u`)return{version:1,novel:{...P},comic:{...F}};try{let e=window.localStorage.getItem(L);return e?ce(JSON.parse(e)):{version:1,novel:{...P},comic:{...F}}}catch{return{version:1,novel:{...P},comic:{...F}}}}function le(e){if(!(typeof window>`u`))try{window.localStorage.setItem(L,JSON.stringify(e))}catch{}}function ue(e,t){let n=J(),r={version:1,novel:e===`novel`?t:n.novel,comic:e===`comic`?t:n.comic};return le(r),r}function de(e){let[t,n]=(0,d.useState)(()=>J()[e]);return{settings:t,patchSettings:(0,d.useCallback)(t=>{n(n=>{let r={...n,...t};return ue(e===`novel`?`novel`:`comic`,r),r})},[e])}}var fe=300,Y=new Map;function pe(e){let t=Y.get(e);t&&clearTimeout(t),Y.set(e,setTimeout(()=>{Y.delete(e),o(e).then(()=>c.invalidateQueries({queryKey:a.recent})).catch(()=>{})},fe))}function me(e){let t=Y.get(e);t&&(clearTimeout(t),Y.delete(e))}function X(e,t){c.setQueryData(a.libraryItem(e),e=>{if(!e||e.type!==t.type)return e;let n=new Date().toISOString();return t.type===`comic`&&e.type===`comic`?{...e,progress:{type:`comic`,scrollRatio:t.scrollRatio,updatedAt:n,completedAt:t.completedAt??null}}:t.type===`novel`&&e.type===`novel`?{...e,progress:{type:`novel`,paragraphIndex:t.paragraphIndex,updatedAt:n,anchor:t.anchor,layout:t.layout,completedAt:t.completedAt??null}}:e})}var he=800,Z=new Map,Q=new Map;function ge(e,t){Q.set(e,t);let n=Z.get(e);n&&clearTimeout(n),Z.set(e,setTimeout(()=>{Z.delete(e),$(e)},he))}async function $(e){let t=Z.get(e);t&&(clearTimeout(t),Z.delete(e));let n=Q.get(e);if(n){Q.delete(e);try{await s(e,n),X(e,n),await Promise.all([c.invalidateQueries({queryKey:a.library}),c.invalidateQueries({queryKey:a.recent})])}catch{}}}function _e(e){let t=Z.get(e);t&&(clearTimeout(t),Z.delete(e));let n=Q.get(e);Q.delete(e),n&&s(e,n).then(()=>(X(e,n),Promise.all([c.invalidateQueries({queryKey:a.library}),c.invalidateQueries({queryKey:a.recent})]))).catch(()=>{})}typeof window<`u`&&window.addEventListener(`beforeunload`,()=>{for(let e of Q.keys())$(e)});export{de as a,A as c,u as d,pe as i,oe as l,ge as n,j as o,me as r,M as s,_e as t,ae as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Y as e,_ as t,a as n,b as r,g as i,h as a,i as o,l as s,o as c,p as l,r as u,s as d,t as f,u as p,x as m}from"./utils-ChkMmPzE.js";import{n as h,t as g}from"./dist-QfKKfHSL.js";import{a as _,i as v,o as y,s as b}from"./shell-context-Buw4m44t.js";import{n as x,t as S}from"./dist-DzLEGVNH.js";import{c as C,f as w,h as T,l as E,m as D,o as O,p as k,s as ee,u as A}from"./index-BS403FO9.js";var te=i(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),ne=i(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),re=i(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),j=i(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),M=e(m(),1),N=r();function P(e,t){return M.useReducer((e,n)=>t[e][n]??e,e)}var F=`ScrollArea`,[I,L]=s(F),[R,z]=I(F),B=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:o=600,...s}=e,[c,l]=M.useState(null),[u,d]=M.useState(null),[f,m]=M.useState(null),[h,_]=M.useState(null),[v,y]=M.useState(null),[b,x]=M.useState(0),[S,C]=M.useState(0),[w,T]=M.useState(!1),[E,D]=M.useState(!1),O=a(t,e=>l(e)),k=g(i);return(0,N.jsx)(R,{scope:n,type:r,dir:k,scrollHideDelay:o,scrollArea:c,viewport:u,onViewportChange:d,content:f,onContentChange:m,scrollbarX:h,onScrollbarXChange:_,scrollbarXEnabled:w,onScrollbarXEnabledChange:T,scrollbarY:v,onScrollbarYChange:y,scrollbarYEnabled:E,onScrollbarYEnabledChange:D,onCornerWidthChange:x,onCornerHeightChange:C,children:(0,N.jsx)(p.div,{dir:k,...s,ref:O,style:{position:`relative`,"--radix-scroll-area-corner-width":b+`px`,"--radix-scroll-area-corner-height":S+`px`,...e.style}})})});B.displayName=F;var ie=`ScrollAreaViewport`,ae=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:i,...o}=e,s=z(ie,n),c=a(t,M.useRef(null),s.onViewportChange);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:i}),(0,N.jsx)(p.div,{"data-radix-scroll-area-viewport":``,...o,ref:c,style:{overflowX:s.scrollbarXEnabled?`scroll`:`hidden`,overflowY:s.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,N.jsx)(`div`,{ref:s.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});ae.displayName=ie;var V=`ScrollAreaScrollbar`,oe=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(V,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return M.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,N.jsx)(se,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,N.jsx)(ce,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,N.jsx)(le,{...r,ref:t,forceMount:n}):i.type===`always`?(0,N.jsx)(ue,{...r,ref:t,"data-state":`visible`}):null});oe.displayName=V;var se=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(V,e.__scopeScrollArea),[a,o]=M.useState(!1);return M.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=()=>{window.clearTimeout(t),o(!0)},r=()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)};return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,N.jsx)(D,{present:n||a,children:(0,N.jsx)(le,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),ce=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(V,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=G(()=>c(`SCROLL_END`),100),[s,c]=P(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return M.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),M.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=()=>{let r=e[t];n!==r&&(c(`SCROLL`),o()),n=r};return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,c,o]),(0,N.jsx)(D,{present:n||s!==`hidden`,children:(0,N.jsx)(ue,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:d(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:d(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),le=M.forwardRef((e,t)=>{let n=z(V,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=M.useState(!1),s=e.orientation===`horizontal`,c=G(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return K(n.viewport,c),K(n.content,c),(0,N.jsx)(D,{present:r||a,children:(0,N.jsx)(ue,{"data-state":a?`visible`:`hidden`,...i,ref:t})})}),ue=M.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=z(V,e.__scopeScrollArea),a=M.useRef(null),o=M.useRef(0),[s,c]=M.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=xe(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:e=>a.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function d(e,t){return Se(e,o.current,s,t)}return n===`horizontal`?(0,N.jsx)(de,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=Ce(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,N.jsx)(fe,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=Ce(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null}),de=M.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,o=z(V,e.__scopeScrollArea),[s,c]=M.useState(),l=M.useRef(null),u=a(t,l,o.onScrollbarXChange);return M.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,N.jsx)(he,{"data-orientation":`horizontal`,...i,ref:u,sizes:n,style:{bottom:0,left:o.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:o.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":W(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),Te(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:U(s.paddingLeft),paddingEnd:U(s.paddingRight)}})}})}),fe=M.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,o=z(V,e.__scopeScrollArea),[s,c]=M.useState(),l=M.useRef(null),u=a(t,l,o.onScrollbarYChange);return M.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,N.jsx)(he,{"data-orientation":`vertical`,...i,ref:u,sizes:n,style:{top:0,right:o.dir===`ltr`?0:void 0,left:o.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":W(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),Te(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:U(s.paddingTop),paddingEnd:U(s.paddingBottom)}})}})}),[pe,me]=I(V),he=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:o,onThumbPointerUp:s,onThumbPointerDown:c,onThumbPositionChange:l,onDragScroll:f,onWheelScroll:m,onResize:h,...g}=e,_=z(V,n),[v,y]=M.useState(null),b=a(t,e=>y(e)),x=M.useRef(null),S=M.useRef(``),C=_.viewport,w=r.content-r.viewport,T=u(m),E=u(l),D=G(h,10);function O(e){x.current&&f({x:e.clientX-x.current.left,y:e.clientY-x.current.top})}return M.useEffect(()=>{let e=e=>{let t=e.target;v?.contains(t)&&T(e,w)};return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[C,v,w,T]),M.useEffect(E,[r,E]),K(v,D),K(_.content,D),(0,N.jsx)(pe,{scope:n,scrollbar:v,hasThumb:i,onThumbChange:u(o),onThumbPointerUp:u(s),onThumbPositionChange:E,onThumbPointerDown:u(c),children:(0,N.jsx)(p.div,{...g,ref:b,style:{position:`absolute`,...g.style},onPointerDown:d(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),x.current=v.getBoundingClientRect(),S.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,_.viewport&&(_.viewport.style.scrollBehavior=`auto`),O(e))}),onPointerMove:d(e.onPointerMove,O),onPointerUp:d(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=S.current,_.viewport&&(_.viewport.style.scrollBehavior=``),x.current=null})})})}),H=`ScrollAreaThumb`,ge=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=me(H,e.__scopeScrollArea);return(0,N.jsx)(D,{present:n||i.hasThumb,children:(0,N.jsx)(_e,{ref:t,...r})})}),_e=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...i}=e,o=z(H,n),s=me(H,n),{onThumbPositionChange:c}=s,l=a(t,e=>s.onThumbChange(e)),u=M.useRef(void 0),f=G(()=>{u.current&&=(u.current(),void 0)},100);return M.useEffect(()=>{let e=o.viewport;if(e){let t=()=>{f(),u.current||(u.current=Ee(e,c),c())};return c(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[o.viewport,f,c]),(0,N.jsx)(p.div,{"data-state":s.hasThumb?`visible`:`hidden`,...i,ref:l,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:d(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;s.onThumbPointerDown({x:n,y:r})}),onPointerUp:d(e.onPointerUp,s.onThumbPointerUp)})});ge.displayName=H;var ve=`ScrollAreaCorner`,ye=M.forwardRef((e,t)=>{let n=z(ve,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,N.jsx)(be,{...e,ref:t}):null});ye.displayName=ve;var be=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,i=z(ve,n),[a,o]=M.useState(0),[s,c]=M.useState(0),l=!!(a&&s);return K(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),K(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),l?(0,N.jsx)(p.div,{...r,ref:t,style:{width:a,height:s,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function U(e){return e?parseInt(e,10):0}function xe(e,t){let n=e/t;return isNaN(n)?0:n}function W(e){let t=xe(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Se(e,t,n,r=`ltr`){let i=W(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return we([c,l],d)(e)}function Ce(e,t,n=`ltr`){let r=W(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=S(e,n===`ltr`?[0,o]:[o*-1,0]);return we([0,o],[0,s])(c)}function we(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Te(e,t){return e>0&&e<t}var Ee=(e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)};function G(e,t){let n=u(e),r=M.useRef(0);return M.useEffect(()=>()=>window.clearTimeout(r.current),[]),M.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function K(e,t){let n=u(t);c(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}var De=B,Oe=ae,ke=ye,Ae=e(t(),1),je=[` `,`Enter`,`ArrowUp`,`ArrowDown`],Me=[` `,`Enter`],q=`Select`,[Ne,Pe,Fe]=h(q),[J,Ie]=s(q,[Fe,A]),Le=A(),[Re,Y]=J(q),[ze,Be]=J(q),Ve=`SelectProvider`;function He(e){let{__scopeSelect:t,children:r,open:i,defaultOpen:a,onOpenChange:s,value:c,defaultValue:l,onValueChange:u,dir:d,name:f,autoComplete:p,disabled:m,required:h,form:_,internal_do_not_use_render:v}=e,y=Le(t),[b,x]=M.useState(null),[S,C]=M.useState(null),[w,T]=M.useState(!1),D=g(d),[O,k]=n({prop:i,defaultProp:a??!1,onChange:s,caller:q}),[ee,A]=n({prop:c,defaultProp:l,onChange:u,caller:q}),te=M.useRef(null),ne=b?!!_||!!b.closest(`form`):!0,[re,j]=M.useState(new Set),P=o(),F=Array.from(re).map(e=>e.props.value).join(`;`),I=M.useCallback(e=>{j(t=>new Set(t).add(e))},[]),L=M.useCallback(e=>{j(t=>{let n=new Set(t);return n.delete(e),n})},[]),R={required:h,trigger:b,onTriggerChange:x,valueNode:S,onValueNodeChange:C,valueNodeHasChildren:w,onValueNodeHasChildrenChange:T,contentId:P,value:ee,onValueChange:A,open:O,onOpenChange:k,dir:D,triggerPointerDownPosRef:te,disabled:m,name:f,autoComplete:p,form:_,nativeOptions:re,nativeSelectKey:F,isFormControl:ne};return(0,N.jsx)(E,{...y,children:(0,N.jsx)(Re,{scope:t,...R,children:(0,N.jsx)(Ne.Provider,{scope:t,children:(0,N.jsx)(ze,{scope:t,onNativeOptionAdd:I,onNativeOptionRemove:L,children:Rt(v)?v(R):r})})})})}He.displayName=Ve;var Ue=e=>{let{__scopeSelect:t,children:n,...r}=e;return(0,N.jsx)(He,{__scopeSelect:t,...r,internal_do_not_use_render:({isFormControl:e})=>(0,N.jsxs)(N.Fragment,{children:[n,e?(0,N.jsx)(Lt,{__scopeSelect:t}):null]})})};Ue.displayName=q;var We=`SelectTrigger`,Ge=M.forwardRef((e,t)=>{let{__scopeSelect:n,disabled:r=!1,...i}=e,o=Le(n),s=Y(We,n),c=s.disabled||r,l=a(t,s.onTriggerChange),u=Pe(n),f=M.useRef(`touch`),[m,h,g]=Bt(e=>{let t=u().filter(e=>!e.disabled),n=Vt(t,e,t.find(e=>e.value===s.value));n!==void 0&&s.onValueChange(n.value)}),_=e=>{c||(s.onOpenChange(!0),g()),e&&(s.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,N.jsx)(O,{asChild:!0,...o,children:(0,N.jsx)(p.button,{type:`button`,role:`combobox`,"aria-controls":s.open?s.contentId:void 0,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":`none`,dir:s.dir,"data-state":s.open?`open`:`closed`,disabled:c,"data-disabled":c?``:void 0,"data-placeholder":zt(s.value)?``:void 0,...i,ref:l,onClick:d(i.onClick,e=>{e.currentTarget.focus(),f.current!==`mouse`&&_(e)}),onPointerDown:d(i.onPointerDown,e=>{f.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(_(e),e.preventDefault())}),onKeyDown:d(i.onKeyDown,e=>{let t=m.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&h(e.key),!(t&&e.key===` `)&&je.includes(e.key)&&(_(),e.preventDefault())})})})});Ge.displayName=We;var Ke=`SelectValue`,qe=M.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,children:o,placeholder:s=``,...l}=e,u=Y(Ke,n),{onValueNodeHasChildrenChange:d}=u,f=o!==void 0,m=a(t,u.onValueNodeChange);c(()=>{d(f)},[d,f]);let h=zt(u.value);return(0,N.jsx)(p.span,{...l,asChild:h?!1:l.asChild,ref:m,style:{pointerEvents:`none`},children:(0,N.jsx)(M.Fragment,{children:h?s:o},h?`placeholder`:`value`)})});qe.displayName=Ke;var Je=`SelectIcon`,Ye=M.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,...i}=e;return(0,N.jsx)(p.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})});Ye.displayName=Je;var Xe=`SelectPortal`,[Ze,Qe]=J(Xe,{forceMount:void 0}),$e=e=>{let{__scopeSelect:t,forceMount:n,...r}=e;return(0,N.jsx)(Ze,{scope:e.__scopeSelect,forceMount:n,children:(0,N.jsx)(w,{asChild:!0,...r})})};$e.displayName=Xe;var X=`SelectContent`,et=M.forwardRef((e,t)=>{let n=Qe(X,e.__scopeSelect),{forceMount:r=n.forceMount,...i}=e,a=Y(X,e.__scopeSelect),[o,s]=M.useState();return c(()=>{s(new DocumentFragment)},[]),(0,N.jsx)(D,{present:r||a.open,children:({present:e})=>e?(0,N.jsx)(at,{...i,ref:t}):(0,N.jsx)(tt,{...i,fragment:o})})});et.displayName=X;var tt=M.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,fragment:i}=e;return i?Ae.createPortal((0,N.jsx)(nt,{scope:n,children:(0,N.jsx)(Ne.Slot,{scope:n,children:(0,N.jsx)(`div`,{ref:t,children:r})})}),i):null});tt.displayName=`SelectContentFragment`;var Z=10,[nt,Q]=J(X),rt=`SelectContentImpl`,it=l(`SelectContent.RemoveScroll`),at=M.forwardRef((e,t)=>{let{__scopeSelect:n}=e,{position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:o,onPointerDownOutside:s,side:c,sideOffset:l,align:u,alignOffset:f,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:x,avoidCollisions:S,...C}=e,w=Y(X,n),[T,E]=M.useState(null),[D,O]=M.useState(null),ee=a(t,e=>E(e)),[A,te]=M.useState(null),[ne,re]=M.useState(null),j=Pe(n),[P,F]=M.useState(!1),I=M.useRef(!1);M.useEffect(()=>{if(T)return v(T)},[T]),y();let L=M.useCallback(e=>{let[t,...n]=j().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&D&&(D.scrollTop=0),n===r&&D&&(D.scrollTop=D.scrollHeight),n?.focus(),document.activeElement!==i))return},[j,D]),R=M.useCallback(()=>L([A,T]),[L,A,T]);M.useEffect(()=>{P&&R()},[P,R]);let{onOpenChange:z,triggerPointerDownPosRef:B}=w;M.useEffect(()=>{if(T){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(B.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(B.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():n.composedPath().includes(T)||z(!1),document.removeEventListener(`pointermove`,t),B.current=null};return B.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[T,z,B]),M.useEffect(()=>{let e=()=>z(!1);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[z]);let[ie,ae]=Bt(e=>{let t=j().filter(e=>!e.disabled),n=Vt(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current.focus())}),V=M.useCallback((e,t,n)=>{let r=!I.current&&!n;(w.value!==void 0&&w.value===t||r)&&(te(e),r&&(I.current=!0))},[w.value]),oe=M.useCallback(()=>T?.focus(),[T]),se=M.useCallback((e,t,n)=>{let r=!I.current&&!n;(w.value!==void 0&&w.value===t||r)&&re(e)},[w.value]),ce=r===`popper`?lt:st,le=ce===lt?{side:c,sideOffset:l,align:u,alignOffset:f,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:x,avoidCollisions:S}:{};return(0,N.jsx)(nt,{scope:n,content:T,viewport:D,onViewportChange:O,itemRefCallback:V,selectedItem:A,onItemLeave:oe,itemTextRefCallback:se,focusSelectedItem:R,selectedItemText:ne,position:r,isPositioned:P,searchRef:ie,children:(0,N.jsx)(_,{as:it,allowPinchZoom:!0,children:(0,N.jsx)(b,{asChild:!0,trapped:w.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:d(i,e=>{w.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,N.jsx)(k,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>w.onOpenChange(!1),children:(0,N.jsx)(ce,{role:`listbox`,id:w.contentId,"data-state":w.open?`open`:`closed`,dir:w.dir,onContextMenu:e=>e.preventDefault(),...C,...le,onPlaced:()=>F(!0),ref:ee,style:{display:`flex`,flexDirection:`column`,outline:`none`,...C.style},onKeyDown:d(C.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&ae(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=j().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>L(t)),e.preventDefault()}})})})})})})});at.displayName=rt;var ot=`SelectItemAlignedPosition`,st=M.forwardRef((e,t)=>{let{__scopeSelect:n,onPlaced:r,...i}=e,o=Y(X,n),s=Q(X,n),[l,u]=M.useState(null),[d,f]=M.useState(null),m=a(t,e=>f(e)),h=Pe(n),g=M.useRef(!1),_=M.useRef(!0),{viewport:v,selectedItem:y,selectedItemText:b,focusSelectedItem:x}=s,C=M.useCallback(()=>{if(o.trigger&&o.valueNode&&l&&d&&v&&y&&b){let e=o.trigger.getBoundingClientRect(),t=d.getBoundingClientRect(),n=o.valueNode.getBoundingClientRect(),i=b.getBoundingClientRect();if(o.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-Z,d=S(a,[Z,Math.max(Z,u-c)]);l.style.minWidth=s+`px`,l.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-Z,d=S(a,[Z,Math.max(Z,u-c)]);l.style.minWidth=s+`px`,l.style.right=d+`px`}let a=h(),s=window.innerHeight-Z*2,c=v.scrollHeight,u=window.getComputedStyle(d),f=parseInt(u.borderTopWidth,10),p=parseInt(u.paddingTop,10),m=parseInt(u.borderBottomWidth,10),_=parseInt(u.paddingBottom,10),x=f+p+c+_+m,C=Math.min(y.offsetHeight*5,x),w=window.getComputedStyle(v),T=parseInt(w.paddingTop,10),E=parseInt(w.paddingBottom,10),D=e.top+e.height/2-Z,O=s-D,k=y.offsetHeight/2,ee=y.offsetTop+k,A=f+p+ee,te=x-A;if(A<=D){let e=a.length>0&&y===a[a.length-1].ref.current;l.style.bottom=`0px`;let t=d.clientHeight-v.offsetTop-v.offsetHeight,n=A+Math.max(O,k+(e?E:0)+t+m);l.style.height=n+`px`}else{let e=a.length>0&&y===a[0].ref.current;l.style.top=`0px`;let t=Math.max(D,f+v.offsetTop+(e?T:0)+k)+te;l.style.height=t+`px`,v.scrollTop=A-D+v.offsetTop}l.style.margin=`${Z}px 0`,l.style.minHeight=C+`px`,l.style.maxHeight=s+`px`,r?.(),requestAnimationFrame(()=>g.current=!0)}},[h,o.trigger,o.valueNode,l,d,v,y,b,o.dir,r]);c(()=>C(),[C]);let[w,T]=M.useState();return c(()=>{d&&T(window.getComputedStyle(d).zIndex)},[d]),(0,N.jsx)(ut,{scope:n,contentWrapper:l,shouldExpandOnScrollRef:g,onScrollButtonChange:M.useCallback(e=>{e&&_.current===!0&&(C(),x?.(),_.current=!1)},[C,x]),children:(0,N.jsx)(`div`,{ref:u,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:w},children:(0,N.jsx)(p.div,{...i,ref:m,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})});st.displayName=ot;var ct=`SelectPopperPosition`,lt=M.forwardRef((e,t)=>{let{__scopeSelect:n,align:r=`start`,collisionPadding:i=Z,...a}=e,o=Le(n);return(0,N.jsx)(C,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})});lt.displayName=ct;var[ut,dt]=J(X,{}),ft=`SelectViewport`,pt=M.forwardRef((e,t)=>{let{__scopeSelect:n,nonce:r,...i}=e,o=Q(ft,n),s=dt(ft,n),c=a(t,o.onViewportChange),l=M.useRef(0);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,N.jsx)(Ne.Slot,{scope:n,children:(0,N.jsx)(p.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:c,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:d(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=s;if(r?.current&&n){let e=Math.abs(l.current-t.scrollTop);if(e>0){let r=window.innerHeight-Z*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o<r){let i=o+e,a=Math.min(r,i),s=i-a;n.style.height=a+`px`,n.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,n.style.justifyContent=`flex-end`)}}}l.current=t.scrollTop})})})]})});pt.displayName=ft;var mt=`SelectGroup`,[ht,gt]=J(mt),_t=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=o();return(0,N.jsx)(ht,{scope:n,id:i,children:(0,N.jsx)(p.div,{role:`group`,"aria-labelledby":i,...r,ref:t})})});_t.displayName=mt;var vt=`SelectLabel`,yt=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=gt(vt,n);return(0,N.jsx)(p.div,{id:i.id,...r,ref:t})});yt.displayName=vt;var bt=`SelectItem`,[xt,St]=J(bt),Ct=M.forwardRef((e,t)=>{let{__scopeSelect:n,value:r,disabled:i=!1,textValue:s,...c}=e,l=Y(bt,n),u=Q(bt,n),f=l.value===r,[m,h]=M.useState(s??``),[g,_]=M.useState(!1),v=a(t,e=>u.itemRefCallback?.(e,r,i)),y=o(),b=M.useRef(`touch`),x=()=>{i||(l.onValueChange(r),l.onOpenChange(!1))};if(r===``)throw Error(`A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.`);return(0,N.jsx)(xt,{scope:n,value:r,disabled:i,textId:y,isSelected:f,onItemTextChange:M.useCallback(e=>{h(t=>t||(e?.textContent??``).trim())},[]),children:(0,N.jsx)(Ne.ItemSlot,{scope:n,value:r,disabled:i,textValue:m,children:(0,N.jsx)(p.div,{role:`option`,"aria-labelledby":y,"data-highlighted":g?``:void 0,"aria-selected":f&&g,"data-state":f?`checked`:`unchecked`,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,tabIndex:i?void 0:-1,...c,ref:v,onFocus:d(c.onFocus,()=>_(!0)),onBlur:d(c.onBlur,()=>_(!1)),onClick:d(c.onClick,()=>{b.current!==`mouse`&&x()}),onPointerUp:d(c.onPointerUp,()=>{b.current===`mouse`&&x()}),onPointerDown:d(c.onPointerDown,e=>{b.current=e.pointerType}),onPointerMove:d(c.onPointerMove,e=>{b.current=e.pointerType,i?u.onItemLeave?.():b.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:d(c.onPointerLeave,e=>{e.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:d(c.onKeyDown,e=>{u.searchRef?.current!==``&&e.key===` `||(Me.includes(e.key)&&x(),e.key===` `&&e.preventDefault())})})})})});Ct.displayName=bt;var $=`SelectItemText`,wt=M.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,...o}=e,s=Y($,n),l=Q($,n),u=St($,n),d=Be($,n),[f,m]=M.useState(null),h=a(t,e=>m(e),u.onItemTextChange,e=>l.itemTextRefCallback?.(e,u.value,u.disabled)),g=f?.textContent,_=M.useMemo(()=>(0,N.jsx)(`option`,{value:u.value,disabled:u.disabled,children:g},u.value),[u.disabled,u.value,g]),{onNativeOptionAdd:v,onNativeOptionRemove:y}=d;return c(()=>(v(_),()=>y(_)),[v,y,_]),(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(p.span,{id:u.textId,...o,ref:h}),u.isSelected&&s.valueNode&&!s.valueNodeHasChildren?Ae.createPortal(o.children,s.valueNode):null]})});wt.displayName=$;var Tt=`SelectItemIndicator`,Et=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return St(Tt,n).isSelected?(0,N.jsx)(p.span,{"aria-hidden":!0,...r,ref:t}):null});Et.displayName=Tt;var Dt=`SelectScrollUpButton`,Ot=M.forwardRef((e,t)=>{let n=Q(Dt,e.__scopeSelect),r=dt(Dt,e.__scopeSelect),[i,o]=M.useState(!1),s=a(t,r.onScrollButtonChange);return c(()=>{if(n.viewport&&n.isPositioned){let e=function(){o(t.scrollTop>0)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,N.jsx)(jt,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null});Ot.displayName=Dt;var kt=`SelectScrollDownButton`,At=M.forwardRef((e,t)=>{let n=Q(kt,e.__scopeSelect),r=dt(kt,e.__scopeSelect),[i,o]=M.useState(!1),s=a(t,r.onScrollButtonChange);return c(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight;o(Math.ceil(t.scrollTop)<e)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,N.jsx)(jt,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null});At.displayName=kt;var jt=M.forwardRef((e,t)=>{let{__scopeSelect:n,onAutoScroll:r,...i}=e,a=Q(`SelectScrollButton`,n),o=M.useRef(null),s=Pe(n),l=M.useCallback(()=>{o.current!==null&&(window.clearInterval(o.current),o.current=null)},[]);return M.useEffect(()=>()=>l(),[l]),c(()=>{s().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[s]),(0,N.jsx)(p.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:d(i.onPointerDown,()=>{o.current===null&&(o.current=window.setInterval(r,50))}),onPointerMove:d(i.onPointerMove,()=>{a.onItemLeave?.(),o.current===null&&(o.current=window.setInterval(r,50))}),onPointerLeave:d(i.onPointerLeave,()=>{l()})})}),Mt=`SelectSeparator`,Nt=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return(0,N.jsx)(p.div,{"aria-hidden":!0,...r,ref:t})});Nt.displayName=Mt;var Pt=`SelectArrow`,Ft=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=Le(n);return Q(Pt,n).position===`popper`?(0,N.jsx)(ee,{...i,...r,ref:t}):null});Ft.displayName=Pt;var It=`SelectBubbleInput`,Lt=M.forwardRef(({__scopeSelect:e,...t},n)=>{let r=Y(It,e),{value:i,onValueChange:o,required:s,disabled:c,name:l,autoComplete:u,form:d}=r,{nativeOptions:f,nativeSelectKey:m}=r,h=M.useRef(null),g=a(n,h),_=i??``,v=x(_);return M.useEffect(()=>{let e=h.current;if(!e)return;let t=window.HTMLSelectElement.prototype,n=Object.getOwnPropertyDescriptor(t,`value`).set;if(v!==_&&n){let t=new Event(`change`,{bubbles:!0});n.call(e,_),e.dispatchEvent(t)}},[v,_]),(0,N.jsxs)(p.select,{"aria-hidden":!0,required:s,tabIndex:-1,name:l,autoComplete:u,disabled:c,form:d,onChange:e=>o(e.target.value),...t,style:{...T,...t.style},ref:g,defaultValue:_,children:[zt(i)?(0,N.jsx)(`option`,{value:``}):null,Array.from(f)]},m)});Lt.displayName=It;function Rt(e){return typeof e==`function`}function zt(e){return e===``||e===void 0}function Bt(e){let t=u(e),n=M.useRef(``),r=M.useRef(0),i=M.useCallback(e=>{let i=n.current+e;t(i),(function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))})(i)},[t]),a=M.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return M.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}function Vt(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Ht(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Ht(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function Ut({...e}){return(0,N.jsx)(Ue,{"data-slot":`select`,...e})}function Wt({className:e,...t}){return(0,N.jsx)(_t,{"data-slot":`select-group`,className:f(`scroll-my-1 p-1`,e),...t})}function Gt({...e}){return(0,N.jsx)(qe,{"data-slot":`select-value`,...e})}function Kt({className:e,size:t=`default`,children:n,...r}){return(0,N.jsxs)(Ge,{"data-slot":`select-trigger`,"data-size":t,className:f(`flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[n,(0,N.jsx)(Ye,{asChild:!0,children:(0,N.jsx)(ne,{className:`pointer-events-none size-4 text-muted-foreground`})})]})}function qt({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,N.jsx)($e,{children:(0,N.jsxs)(et,{"data-slot":`select-content`,"data-align-trigger":n===`item-aligned`,className:f(`relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,N.jsx)(Yt,{}),(0,N.jsx)(pt,{"data-position":n,className:f(`data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)`,n===`popper`&&``),children:t}),(0,N.jsx)(Xt,{})]})})}function Jt({className:e,children:t,...n}){return(0,N.jsxs)(Ct,{"data-slot":`select-item`,className:f(`relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,N.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`,children:(0,N.jsx)(Et,{children:(0,N.jsx)(te,{className:`pointer-events-none`})})}),(0,N.jsx)(wt,{children:t})]})}function Yt({className:e,...t}){return(0,N.jsx)(Ot,{"data-slot":`select-scroll-up-button`,className:f(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,N.jsx)(re,{})})}function Xt({className:e,...t}){return(0,N.jsx)(At,{"data-slot":`select-scroll-down-button`,className:f(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,N.jsx)(ne,{})})}function Zt({className:e,children:t,...n}){return(0,N.jsxs)(De,{"data-slot":`scroll-area`,className:f(`relative`,e),...n,children:[(0,N.jsx)(Oe,{"data-slot":`scroll-area-viewport`,className:`size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1`,children:t}),(0,N.jsx)(Qt,{}),(0,N.jsx)(ke,{})]})}function Qt({className:e,orientation:t=`vertical`,...n}){return(0,N.jsx)(oe,{"data-slot":`scroll-area-scrollbar`,"data-orientation":t,orientation:t,className:f(`flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent`,e),...n,children:(0,N.jsx)(ge,{"data-slot":`scroll-area-thumb`,className:`relative flex-1 rounded-full bg-border`})})}export{Jt as a,j as c,Wt as i,Ut as n,Kt as o,qt as r,Gt as s,Zt as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Y as e,b as t,g as n,t as r,x as i,y as a}from"./utils-ChkMmPzE.js";import{i as o,n as s,o as c,r as l,t as u}from"./query-keys-CbbgiZx4.js";import{a as d,i as f,n as p,r as m}from"./use-library-Bh7Bunn1.js";import{a as h,c as g,i as _,n as v,o as y,r as b,s as x,t as S}from"./scroll-area-BUlmpLx6.js";import{t as C}from"./settings-2-8mnAuSax.js";import{n as w,r as T}from"./shell-context-Buw4m44t.js";import{g as E}from"./index-BS403FO9.js";var D=n(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),O=n(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),k=e(i(),1),A=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`,j=(e=21)=>{let t=``,n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=A[n[e]&63];return t};function M(){return s(`/api/config`)}function N(e){return s(`/api/config`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}function P(){return c({queryKey:u.config,queryFn:M})}function F(){let e=a();return d({mutationFn:e=>N(e),onSuccess:t=>{e.setQueryData(u.config,t),e.invalidateQueries({queryKey:u.library})}})}var I=t();function L(e=``){return{id:j(),path:e}}function R(e){return e.length>0?e.map(e=>({...e})):[L()]}function z(e){return e.map(e=>({id:e.id,path:e.path.trim()})).filter(e=>e.path)}function B(e){let t=new Set;for(let n of e){let e=n.path.trim();if(e){if(t.has(e))return e;t.add(e)}}return null}function V(){let{scanning:e}=w(),{data:t,isPending:n,isError:i}=P(),a=F(),s=p(),[c,u]=(0,k.useState)([L()]),[d,A]=(0,k.useState)([L()]),[j,M]=(0,k.useState)(`ignore`);(0,k.useEffect)(()=>{t&&(u(R(t.novelDirectories)),A(R(t.comicDirectories)),M(t.gbkNovelHandling??`ignore`))},[t]),(0,k.useEffect)(()=>{i&&E.error(`加载设置失败`)},[i]);let N=(e,t,n)=>{(e===`novel`?u:A)(e=>e.map(e=>e.id===t?{...e,path:n}:e))},V=e=>{(e===`novel`?u:A)(e=>[...e,L()])},H=(e,t)=>{(e===`novel`?u:A)(e=>e.length===1?[L()]:e.filter(e=>e.id!==t))},U=()=>{let e=B(c);if(e){E.error(`小说目录存在重复路径:${e}`);return}let t=B(d);if(t){E.error(`漫画目录存在重复路径:${t}`);return}a.mutate({novelDirectories:z(c),comicDirectories:z(d),gbkNovelHandling:j},{onSuccess:()=>E.success(`设置已保存`),onError:()=>E.error(`保存设置失败`)})},W=()=>{s.mutate(void 0,{onSuccess:()=>E.success(`已开始重新扫描`),onError:()=>E.error(`重新扫描失败`)})},G=(e,t,n)=>(0,I.jsxs)(`section`,{className:`mb-4 rounded-[10px] border border-border bg-card px-5 py-4`,children:[(0,I.jsxs)(`div`,{className:`mb-3 flex items-center gap-2 text-sm font-semibold text-[#c2c2ca]`,children:[e===`novel`?(0,I.jsx)(f,{className:`size-4 text-indigo-500`}):(0,I.jsx)(m,{className:`size-4 text-indigo-500`}),t]}),(0,I.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map(t=>(0,I.jsxs)(`div`,{className:`flex gap-2`,children:[(0,I.jsx)(T,{value:t.path,onChange:n=>N(e,t.id,n.target.value),placeholder:`输入目录路径,如 D:/Books/Novels/`,className:`h-9 border-[#2a2a32] bg-[#141418] text-[13px] text-[#e2e2e8] placeholder:text-[#4a4a56] focus-visible:border-indigo-500`}),(0,I.jsx)(o,{type:`button`,variant:`ghost`,size:`icon-sm`,onClick:()=>H(e,t.id),"aria-label":`删除目录`,className:`shrink-0 text-[#6b6b78] hover:bg-[#2a2a32] hover:text-[#e2e2e8]`,children:(0,I.jsx)(O,{})})]},t.id))}),(0,I.jsxs)(o,{type:`button`,variant:`ghost`,size:`sm`,className:`mt-1 h-8 border border-dashed border-[#2a2a32] bg-transparent px-3 text-xs text-[#9f9fad] hover:border-indigo-500 hover:bg-transparent hover:text-[#d5d5dd]`,onClick:()=>V(e),children:[(0,I.jsx)(D,{"data-icon":`inline-start`}),`添加目录`]})]});return(0,I.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,I.jsxs)(`header`,{className:`flex h-14 shrink-0 items-center gap-3 border-b px-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2.5 text-[15px] font-semibold text-[#e2e2e8]`,children:[(0,I.jsx)(C,{className:`size-4 text-indigo-500`}),`设置`]}),(0,I.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,I.jsxs)(o,{type:`button`,variant:`outline`,onClick:W,disabled:e||s.isPending||n,className:`h-9 border-[#2a2a32] bg-transparent px-[18px] text-[13px] font-medium text-[#c2c2ca] hover:bg-[#1e1e24] hover:text-[#e2e2e8]`,children:[(0,I.jsx)(g,{"data-icon":`inline-start`,className:r(e&&`animate-spin`)}),e?`扫描中...`:`重新扫描`]}),(0,I.jsx)(o,{type:`button`,onClick:U,disabled:a.isPending||n,className:`h-9 bg-indigo-500 px-[18px] text-[13px] font-medium text-white hover:bg-[#5558e0]`,children:a.isPending?`保存中...`:`保存设置`})]})]}),(0,I.jsx)(S,{className:`min-h-0 flex-1`,children:n?(0,I.jsxs)(`div`,{className:`flex flex-col gap-4 p-5`,children:[(0,I.jsx)(l,{className:`h-24 w-full`}),(0,I.jsx)(l,{className:`h-24 w-full`})]}):(0,I.jsxs)(`div`,{className:`px-5 pt-2 pb-5`,children:[G(`novel`,`小说目录`,c),(0,I.jsxs)(`section`,{className:`mb-4 rounded-[10px] border border-border bg-card px-5 py-4`,children:[(0,I.jsx)(`div`,{className:`mb-3 text-sm font-semibold text-[#c2c2ca]`,children:`GBK 编码小说`}),(0,I.jsxs)(v,{value:j,onValueChange:e=>M(e),children:[(0,I.jsx)(y,{size:`sm`,className:r(`h-9 min-w-[220px] border-[#2a2a32] bg-[#141418] text-[13px] text-[#e2e2e8]`),children:(0,I.jsx)(x,{})}),(0,I.jsx)(b,{children:(0,I.jsxs)(_,{children:[(0,I.jsx)(h,{value:`ignore`,children:`忽略(扫描时跳过 GBK 小说)`}),(0,I.jsx)(h,{value:`convert-to-utf-8`,children:`转为 UTF-8(扫描时转换并覆盖原文件)`})]})})]}),j===`convert-to-utf-8`?(0,I.jsx)(`p`,{className:`mt-2 text-xs text-[#6b6b78]`,children:`扫描时会将 GBK 小说转为 UTF-8 并覆盖磁盘上的原文件。`}):null]}),G(`comic`,`漫画目录`,d)]})})]})}function H(){return(0,I.jsx)(V,{})}export{H as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as e,x as t}from"./utils-ChkMmPzE.js";import{n}from"./useNavigate-B29ssGbr.js";import{b as r,x as i}from"./index-
|
|
1
|
+
import{Y as e,x as t}from"./utils-ChkMmPzE.js";import{n}from"./useNavigate-B29ssGbr.js";import{b as r,x as i}from"./index-BS403FO9.js";var a=e(t(),1);function o(e){let t=n({warn:e?.router===void 0}),o=e?.router||t,s=(0,a.useRef)(void 0);return r(o.stores.__store,t=>{if(e?.select){if(e.structuralSharing??o.options.defaultStructuralSharing){let n=i(s.current,e.select(t));return s.current=n,n}return e.select(t)}return t})}export{o as t};
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
rel="stylesheet"
|
|
12
12
|
/>
|
|
13
13
|
<title>CYReader - 个人阅读库</title>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-BS403FO9.js"></script>
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/utils-ChkMmPzE.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/mutation-ChAIwNv3.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/useNavigate-B29ssGbr.js">
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Y as e,b as t,f as n,g as r,t as i,x as a}from"./utils-ChkMmPzE.js";import{a as o,i as s,o as c,r as l,t as u}from"./query-keys-CbbgiZx4.js";import{t as ee}from"./useNavigate-B29ssGbr.js";import{a as d,i as f,n as p,o as m,r as h,s as g,t as _}from"./scroll-area-CyEO8R_G.js";import{a as v,i as y,n as te,r as ne}from"./library-utils-BRrejTkM.js";import{n as b,r as x}from"./shell-context-Buw4m44t.js";import{a as S,i as C,t as w}from"./reading-BozmJNi1.js";import{a as T,i as E}from"./reading-progress-C5bkK-vF.js";var D=r(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),O=r(`layout-grid`,[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]),k=r(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),A=r(`search-x`,[[`path`,{d:`m13.5 8.5-5 5`,key:`1cs55j`}],[`path`,{d:`m8.5 8.5 5 5`,key:`a8mexj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]),j=r(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),M=e(a(),1),N=t();function P({className:e,...t}){return(0,N.jsx)(`div`,{"data-slot":`empty`,className:i(`flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance`,e),...t})}function F({className:e,...t}){return(0,N.jsx)(`div`,{"data-slot":`empty-header`,className:i(`flex max-w-sm flex-col items-center gap-2`,e),...t})}var I=o(`mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,icon:`flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4`}},defaultVariants:{variant:`default`}});function L({className:e,variant:t=`default`,...n}){return(0,N.jsx)(`div`,{"data-slot":`empty-icon`,"data-variant":t,className:i(I({variant:t,className:e})),...n})}function R({className:e,...t}){return(0,N.jsx)(`div`,{"data-slot":`empty-title`,className:i(`font-heading text-sm font-medium tracking-tight`,e),...t})}function z({className:e,...t}){return(0,N.jsx)(`div`,{"data-slot":`empty-description`,className:i(`text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,e),...t})}var B=o(`group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!`,{variants:{variant:{default:`bg-primary text-primary-foreground [a]:hover:bg-primary/80`,secondary:`bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80`,destructive:`bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20`,outline:`border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground`,ghost:`hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50`,link:`text-primary underline-offset-4 hover:underline`}},defaultVariants:{variant:`default`}});function re({className:e,variant:t=`default`,asChild:r=!1,...a}){return(0,N.jsx)(r?n:`span`,{"data-slot":`badge`,"data-variant":t,className:i(B({variant:t}),e),...a})}var V=`/novel-default-cover.png`;function H(e){return e.type===`comic`?e.cover:V}function U(e,t){if(t.type===`novel`){e({to:`/read/novel/$id`,params:{id:t.id},state:{readerTitle:t.title}});return}e({to:`/read/comic/$id`,params:{id:t.id},state:{readerTitle:t.title}})}var W=`h-[180px]`,G=`h-16`,K=`h-[244px]`,q={reading:`bg-indigo-500 shadow-[0_0_6px_rgba(99,102,241,0.4)]`,unread:`bg-green-500 shadow-[0_0_6px_rgba(34,197,94,0.4)]`,completed:`bg-muted-foreground`};function J({item:e,view:t}){let n=ee(),r=()=>{U(n,e)},a=E(e.progress),o=T(e);return t===`list`?(0,N.jsxs)(`button`,{type:`button`,onClick:r,className:`flex h-14 w-full items-stretch overflow-hidden rounded-md border border-[#25252a] bg-[#1a1a20] text-left transition-colors hover:border-[#3a3a44]`,children:[(0,N.jsx)(`div`,{className:`relative h-full w-10 shrink-0 overflow-hidden bg-muted`,children:(0,N.jsx)(`img`,{src:H(e),alt:``,className:`absolute inset-0 block size-full object-cover`,loading:`lazy`})}),(0,N.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-4 px-3.5`,children:[(0,N.jsx)(`div`,{className:`min-w-0 flex-1 truncate text-xs font-semibold text-[#e2e2e8]`,children:e.title}),(0,N.jsx)(`div`,{className:`min-w-[100px]`,children:(0,N.jsx)(`div`,{className:`h-[3px] w-full overflow-hidden rounded-full bg-[#2a2a32]`,children:(0,N.jsx)(`div`,{className:i(`h-full rounded-full`,a===`unread`?`bg-muted-foreground`:`bg-indigo-500`),style:{width:`${o}%`}})})})]})]}):(0,N.jsxs)(`button`,{type:`button`,onClick:r,className:i(`group flex w-full flex-col overflow-hidden rounded-lg border border-[#25252a] bg-[#1a1a20] text-left transition-all hover:-translate-y-px hover:border-[#3a3a44]`,K),children:[(0,N.jsxs)(`div`,{className:i(`relative w-full shrink-0 overflow-hidden bg-muted`,W),children:[(0,N.jsx)(`img`,{src:H(e),alt:``,className:`absolute inset-0 block size-full object-cover`,loading:`lazy`}),(0,N.jsx)(re,{variant:`secondary`,className:`absolute top-1.5 left-1.5 border-0 bg-black/60 px-1.5 py-0 text-[10px] text-[#c2c2ca] backdrop-blur-sm`,children:e.type===`novel`?`小说`:`漫画`}),(0,N.jsx)(`span`,{className:i(`absolute top-1.5 right-1.5 size-2 rounded-full`,q[a])})]}),(0,N.jsxs)(`div`,{className:i(`flex shrink-0 flex-col justify-between p-2.5`,G),children:[(0,N.jsx)(`div`,{className:`truncate text-xs leading-4 font-semibold text-[#e2e2e8]`,children:e.title}),(0,N.jsx)(`div`,{className:`h-[3px] w-full overflow-hidden rounded-full bg-[#2a2a32]`,children:(0,N.jsx)(`div`,{className:i(`h-full rounded-full`,a===`unread`?`bg-muted-foreground`:`bg-indigo-500`),style:{width:`${o}%`}})})]})]})}function Y({items:e,view:t,filterLabel:n}){return e.length===0?(0,N.jsx)(P,{className:`border py-16`,children:(0,N.jsxs)(F,{children:[(0,N.jsx)(L,{variant:`icon`,children:(0,N.jsx)(A,{})}),(0,N.jsx)(R,{children:`未找到匹配的作品`}),(0,N.jsx)(z,{children:`尝试调整搜索词或筛选条件`})]})}):(0,N.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,N.jsx)(`div`,{className:`flex items-center justify-between py-2`,children:(0,N.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[n,` · `,e.length,` 部作品`]})}),t===`list`?(0,N.jsxs)(`div`,{className:`mb-1.5 hidden grid-cols-[40px_1fr_1fr_80px_100px] gap-4 border-b px-3.5 py-1.5 text-[11px] font-semibold tracking-wide text-muted-foreground uppercase md:grid`,children:[(0,N.jsx)(`div`,{}),(0,N.jsx)(`div`,{children:`作品`}),(0,N.jsx)(`div`,{children:`作者`}),(0,N.jsx)(`div`,{className:`text-right`,children:`进度`}),(0,N.jsx)(`div`,{className:`text-right`,children:`状态`})]}):null,(0,N.jsx)(`div`,{className:i(t===`grid`?`grid grid-cols-[repeat(auto-fill,minmax(140px,1fr))] gap-3.5`:`flex flex-col gap-1.5`),children:e.map(e=>(0,N.jsx)(J,{item:e,view:t},e.id))})]})}var X=`h-8 border-[#2a2a32] bg-[#1a1a20] text-xs text-[#9f9fad] hover:bg-[#23232a] hover:text-[#d5d5dd]`;function ie({query:e,onQueryChange:t,sort:n,onSortChange:r,view:a,onViewChange:o}){return(0,N.jsxs)(`header`,{className:`flex h-14 shrink-0 items-center gap-3 border-b px-5`,children:[(0,N.jsxs)(`div`,{className:`relative max-w-[520px] flex-1`,children:[(0,N.jsx)(j,{className:`pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground`}),(0,N.jsx)(x,{value:e,onChange:e=>t(e.target.value),placeholder:`搜索作品、作者...`,className:`h-[34px] border-[#2a2a32] bg-[#1a1a20] pl-8 text-[13px] text-[#e2e2e8] placeholder:text-[#6b6b78] focus-visible:border-indigo-500`}),e?(0,N.jsx)(s,{type:`button`,variant:`ghost`,size:`icon-xs`,className:`absolute top-1/2 right-1.5 -translate-y-1/2`,onClick:()=>t(``),children:(0,N.jsx)(v,{})}):null]}),(0,N.jsxs)(`div`,{className:`ml-auto flex items-center gap-3`,children:[(0,N.jsxs)(p,{value:n,onValueChange:e=>r(e),children:[(0,N.jsx)(m,{size:`sm`,className:i(X,`h-8 min-w-[108px] px-2.5`),children:(0,N.jsx)(g,{})}),(0,N.jsx)(h,{children:(0,N.jsxs)(f,{children:[(0,N.jsx)(d,{value:`addedAt`,children:`最近添加`}),(0,N.jsx)(d,{value:`name`,children:`名称`})]})})]}),(0,N.jsxs)(C,{type:`single`,value:a,onValueChange:e=>{e&&o(e)},variant:`outline`,size:`sm`,className:`gap-0.5`,children:[(0,N.jsx)(S,{value:`grid`,"aria-label":`网格视图`,className:i(X,`px-2 data-[state=on]:border-[#3e3e52] data-[state=on]:bg-[#2a2a3a] data-[state=on]:text-[#e2e2e8]`),children:(0,N.jsx)(O,{})}),(0,N.jsx)(S,{value:`list`,"aria-label":`列表视图`,className:i(X,`px-2 data-[state=on]:border-[#3e3e52] data-[state=on]:bg-[#2a2a3a] data-[state=on]:text-[#e2e2e8]`),children:(0,N.jsx)(k,{})})]})]})]})}function ae(){let e=c({queryKey:u.recent,queryFn:w});return{items:e.data?.items??[],loading:e.isPending,error:e.error?e.error instanceof Error?e.error.message:`Failed to load recent reading`:null}}function oe(){let{filter:e}=b(),{items:t,loading:n}=ae(),r=(0,M.useMemo)(()=>e===`novel`||e===`comic`?t.filter(t=>t.type===e):t,[e,t]);return(0,N.jsxs)(`section`,{className:`mb-2`,children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-2 py-4 text-[13px] font-semibold text-foreground/80`,children:[(0,N.jsx)(D,{className:`size-3.5 text-indigo-500`}),`最近阅读`]}),n?(0,N.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(140px,1fr))] gap-3.5 pb-2`,children:Array.from({length:4},(e,t)=>(0,N.jsxs)(`div`,{className:i(`flex flex-col overflow-hidden rounded-lg border border-[#25252a] bg-[#1a1a20]`,K),children:[(0,N.jsx)(l,{className:i(`w-full shrink-0 rounded-none`,W)}),(0,N.jsxs)(`div`,{className:i(`flex flex-col justify-between p-2.5`,G),children:[(0,N.jsx)(l,{className:`h-3 w-4/5`}),(0,N.jsx)(l,{className:`h-[3px] w-full`})]})]},t))}):null,!n&&r.length===0?(0,N.jsx)(`div`,{className:`pb-2 text-xs text-muted-foreground`,children:`暂无阅读记录`}):null,!n&&r.length>0?(0,N.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(140px,1fr))] gap-3.5 pb-2`,children:r.map(e=>(0,N.jsx)(J,{item:e,view:`grid`},e.id))}):null]})}var Z=`cyreader:library-sort`,Q=`addedAt`,$=new Set([`name`,`addedAt`]);function se(e){return typeof e==`string`&&$.has(e)?e:Q}function ce(){if(typeof window>`u`)return Q;try{let e=window.localStorage.getItem(Z);return e?se(JSON.parse(e)):Q}catch{return Q}}function le(e){if(!(typeof window>`u`))try{window.localStorage.setItem(Z,JSON.stringify(e))}catch{}}function ue(){let{filter:e,items:t,scanning:n}=b(),[r,i]=(0,M.useState)(``),[a,o]=(0,M.useState)(`grid`),[s,c]=(0,M.useState)(()=>ce()),l=(0,M.useMemo)(()=>y(te(t,e,r),s),[t,e,r,s]);return(0,N.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,N.jsx)(ie,{query:r,onQueryChange:i,sort:s,onSortChange:e=>{c(e),le(e)},view:a,onViewChange:o}),(0,N.jsx)(_,{className:`min-h-0 flex-1`,children:(0,N.jsxs)(`div`,{className:`px-5 pb-5`,children:[n?(0,N.jsx)(`div`,{className:`py-2 text-xs text-muted-foreground`,children:`正在扫描书库...`}):null,(0,N.jsx)(oe,{}),(0,N.jsx)(Y,{items:l,view:a,filterLabel:ne(e)})]})})]})}export{ue as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Y as e,_ as t,a as n,b as r,g as i,h as a,i as o,l as s,o as c,p as l,r as u,s as d,t as f,u as p,x as m}from"./utils-ChkMmPzE.js";import{n as h,t as g}from"./dist-QfKKfHSL.js";import{a as _,i as v,o as y,s as b}from"./shell-context-Buw4m44t.js";import{n as x,t as S}from"./dist-DzLEGVNH.js";import{c as C,f as w,h as T,l as E,m as D,o as O,p as k,s as ee,u as A}from"./index-BHhqsr5H.js";var j=i(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),te=i(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),ne=i(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),M=e(m(),1),N=r();function P(e,t){return M.useReducer((e,n)=>t[e][n]??e,e)}var F=`ScrollArea`,[I,L]=s(F),[R,z]=I(F),B=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:o=600,...s}=e,[c,l]=M.useState(null),[u,d]=M.useState(null),[f,m]=M.useState(null),[h,_]=M.useState(null),[v,y]=M.useState(null),[b,x]=M.useState(0),[S,C]=M.useState(0),[w,T]=M.useState(!1),[E,D]=M.useState(!1),O=a(t,e=>l(e)),k=g(i);return(0,N.jsx)(R,{scope:n,type:r,dir:k,scrollHideDelay:o,scrollArea:c,viewport:u,onViewportChange:d,content:f,onContentChange:m,scrollbarX:h,onScrollbarXChange:_,scrollbarXEnabled:w,onScrollbarXEnabledChange:T,scrollbarY:v,onScrollbarYChange:y,scrollbarYEnabled:E,onScrollbarYEnabledChange:D,onCornerWidthChange:x,onCornerHeightChange:C,children:(0,N.jsx)(p.div,{dir:k,...s,ref:O,style:{position:`relative`,"--radix-scroll-area-corner-width":b+`px`,"--radix-scroll-area-corner-height":S+`px`,...e.style}})})});B.displayName=F;var V=`ScrollAreaViewport`,re=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:i,...o}=e,s=z(V,n),c=a(t,M.useRef(null),s.onViewportChange);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:i}),(0,N.jsx)(p.div,{"data-radix-scroll-area-viewport":``,...o,ref:c,style:{overflowX:s.scrollbarXEnabled?`scroll`:`hidden`,overflowY:s.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,N.jsx)(`div`,{ref:s.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});re.displayName=V;var H=`ScrollAreaScrollbar`,ie=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(H,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return M.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,N.jsx)(ae,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,N.jsx)(oe,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,N.jsx)(se,{...r,ref:t,forceMount:n}):i.type===`always`?(0,N.jsx)(ce,{...r,ref:t,"data-state":`visible`}):null});ie.displayName=H;var ae=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(H,e.__scopeScrollArea),[a,o]=M.useState(!1);return M.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=()=>{window.clearTimeout(t),o(!0)},r=()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)};return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,N.jsx)(D,{present:n||a,children:(0,N.jsx)(se,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),oe=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=z(H,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=G(()=>c(`SCROLL_END`),100),[s,c]=P(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return M.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),M.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=()=>{let r=e[t];n!==r&&(c(`SCROLL`),o()),n=r};return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,c,o]),(0,N.jsx)(D,{present:n||s!==`hidden`,children:(0,N.jsx)(ce,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:d(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:d(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),se=M.forwardRef((e,t)=>{let n=z(H,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=M.useState(!1),s=e.orientation===`horizontal`,c=G(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return K(n.viewport,c),K(n.content,c),(0,N.jsx)(D,{present:r||a,children:(0,N.jsx)(ce,{"data-state":a?`visible`:`hidden`,...i,ref:t})})}),ce=M.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=z(H,e.__scopeScrollArea),a=M.useRef(null),o=M.useRef(0),[s,c]=M.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=be(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:e=>a.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function d(e,t){return xe(e,o.current,s,t)}return n===`horizontal`?(0,N.jsx)(le,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=Se(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,N.jsx)(ue,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=Se(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null}),le=M.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,o=z(H,e.__scopeScrollArea),[s,c]=M.useState(),l=M.useRef(null),u=a(t,l,o.onScrollbarXChange);return M.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,N.jsx)(pe,{"data-orientation":`horizontal`,...i,ref:u,sizes:n,style:{bottom:0,left:o.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:o.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":W(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),we(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:U(s.paddingLeft),paddingEnd:U(s.paddingRight)}})}})}),ue=M.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,o=z(H,e.__scopeScrollArea),[s,c]=M.useState(),l=M.useRef(null),u=a(t,l,o.onScrollbarYChange);return M.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),(0,N.jsx)(pe,{"data-orientation":`vertical`,...i,ref:u,sizes:n,style:{top:0,right:o.dir===`ltr`?0:void 0,left:o.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":W(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(o.viewport){let r=o.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),we(r,n)&&t.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:U(s.paddingTop),paddingEnd:U(s.paddingBottom)}})}})}),[de,fe]=I(H),pe=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:o,onThumbPointerUp:s,onThumbPointerDown:c,onThumbPositionChange:l,onDragScroll:f,onWheelScroll:m,onResize:h,...g}=e,_=z(H,n),[v,y]=M.useState(null),b=a(t,e=>y(e)),x=M.useRef(null),S=M.useRef(``),C=_.viewport,w=r.content-r.viewport,T=u(m),E=u(l),D=G(h,10);function O(e){x.current&&f({x:e.clientX-x.current.left,y:e.clientY-x.current.top})}return M.useEffect(()=>{let e=e=>{let t=e.target;v?.contains(t)&&T(e,w)};return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[C,v,w,T]),M.useEffect(E,[r,E]),K(v,D),K(_.content,D),(0,N.jsx)(de,{scope:n,scrollbar:v,hasThumb:i,onThumbChange:u(o),onThumbPointerUp:u(s),onThumbPositionChange:E,onThumbPointerDown:u(c),children:(0,N.jsx)(p.div,{...g,ref:b,style:{position:`absolute`,...g.style},onPointerDown:d(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),x.current=v.getBoundingClientRect(),S.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,_.viewport&&(_.viewport.style.scrollBehavior=`auto`),O(e))}),onPointerMove:d(e.onPointerMove,O),onPointerUp:d(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=S.current,_.viewport&&(_.viewport.style.scrollBehavior=``),x.current=null})})})}),me=`ScrollAreaThumb`,he=M.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=fe(me,e.__scopeScrollArea);return(0,N.jsx)(D,{present:n||i.hasThumb,children:(0,N.jsx)(ge,{ref:t,...r})})}),ge=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...i}=e,o=z(me,n),s=fe(me,n),{onThumbPositionChange:c}=s,l=a(t,e=>s.onThumbChange(e)),u=M.useRef(void 0),f=G(()=>{u.current&&=(u.current(),void 0)},100);return M.useEffect(()=>{let e=o.viewport;if(e){let t=()=>{f(),u.current||(u.current=Te(e,c),c())};return c(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[o.viewport,f,c]),(0,N.jsx)(p.div,{"data-state":s.hasThumb?`visible`:`hidden`,...i,ref:l,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:d(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;s.onThumbPointerDown({x:n,y:r})}),onPointerUp:d(e.onPointerUp,s.onThumbPointerUp)})});he.displayName=me;var _e=`ScrollAreaCorner`,ve=M.forwardRef((e,t)=>{let n=z(_e,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,N.jsx)(ye,{...e,ref:t}):null});ve.displayName=_e;var ye=M.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,i=z(_e,n),[a,o]=M.useState(0),[s,c]=M.useState(0),l=!!(a&&s);return K(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),K(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),l?(0,N.jsx)(p.div,{...r,ref:t,style:{width:a,height:s,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function U(e){return e?parseInt(e,10):0}function be(e,t){let n=e/t;return isNaN(n)?0:n}function W(e){let t=be(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function xe(e,t,n,r=`ltr`){let i=W(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return Ce([c,l],d)(e)}function Se(e,t,n=`ltr`){let r=W(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=S(e,n===`ltr`?[0,o]:[o*-1,0]);return Ce([0,o],[0,s])(c)}function Ce(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function we(e,t){return e>0&&e<t}var Te=(e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)};function G(e,t){let n=u(e),r=M.useRef(0);return M.useEffect(()=>()=>window.clearTimeout(r.current),[]),M.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function K(e,t){let n=u(t);c(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}var Ee=B,De=re,Oe=ve,ke=e(t(),1),Ae=[` `,`Enter`,`ArrowUp`,`ArrowDown`],je=[` `,`Enter`],q=`Select`,[Me,Ne,Pe]=h(q),[J,Fe]=s(q,[Pe,A]),Ie=A(),[Le,Y]=J(q),[Re,ze]=J(q),Be=`SelectProvider`;function Ve(e){let{__scopeSelect:t,children:r,open:i,defaultOpen:a,onOpenChange:s,value:c,defaultValue:l,onValueChange:u,dir:d,name:f,autoComplete:p,disabled:m,required:h,form:_,internal_do_not_use_render:v}=e,y=Ie(t),[b,x]=M.useState(null),[S,C]=M.useState(null),[w,T]=M.useState(!1),D=g(d),[O,k]=n({prop:i,defaultProp:a??!1,onChange:s,caller:q}),[ee,A]=n({prop:c,defaultProp:l,onChange:u,caller:q}),j=M.useRef(null),te=b?!!_||!!b.closest(`form`):!0,[ne,P]=M.useState(new Set),F=o(),I=Array.from(ne).map(e=>e.props.value).join(`;`),L=M.useCallback(e=>{P(t=>new Set(t).add(e))},[]),R=M.useCallback(e=>{P(t=>{let n=new Set(t);return n.delete(e),n})},[]),z={required:h,trigger:b,onTriggerChange:x,valueNode:S,onValueNodeChange:C,valueNodeHasChildren:w,onValueNodeHasChildrenChange:T,contentId:F,value:ee,onValueChange:A,open:O,onOpenChange:k,dir:D,triggerPointerDownPosRef:j,disabled:m,name:f,autoComplete:p,form:_,nativeOptions:ne,nativeSelectKey:I,isFormControl:te};return(0,N.jsx)(E,{...y,children:(0,N.jsx)(Le,{scope:t,...z,children:(0,N.jsx)(Me.Provider,{scope:t,children:(0,N.jsx)(Re,{scope:t,onNativeOptionAdd:L,onNativeOptionRemove:R,children:Lt(v)?v(z):r})})})})}Ve.displayName=Be;var He=e=>{let{__scopeSelect:t,children:n,...r}=e;return(0,N.jsx)(Ve,{__scopeSelect:t,...r,internal_do_not_use_render:({isFormControl:e})=>(0,N.jsxs)(N.Fragment,{children:[n,e?(0,N.jsx)(It,{__scopeSelect:t}):null]})})};He.displayName=q;var Ue=`SelectTrigger`,We=M.forwardRef((e,t)=>{let{__scopeSelect:n,disabled:r=!1,...i}=e,o=Ie(n),s=Y(Ue,n),c=s.disabled||r,l=a(t,s.onTriggerChange),u=Ne(n),f=M.useRef(`touch`),[m,h,g]=zt(e=>{let t=u().filter(e=>!e.disabled),n=Bt(t,e,t.find(e=>e.value===s.value));n!==void 0&&s.onValueChange(n.value)}),_=e=>{c||(s.onOpenChange(!0),g()),e&&(s.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,N.jsx)(O,{asChild:!0,...o,children:(0,N.jsx)(p.button,{type:`button`,role:`combobox`,"aria-controls":s.open?s.contentId:void 0,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":`none`,dir:s.dir,"data-state":s.open?`open`:`closed`,disabled:c,"data-disabled":c?``:void 0,"data-placeholder":Rt(s.value)?``:void 0,...i,ref:l,onClick:d(i.onClick,e=>{e.currentTarget.focus(),f.current!==`mouse`&&_(e)}),onPointerDown:d(i.onPointerDown,e=>{f.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(_(e),e.preventDefault())}),onKeyDown:d(i.onKeyDown,e=>{let t=m.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&h(e.key),!(t&&e.key===` `)&&Ae.includes(e.key)&&(_(),e.preventDefault())})})})});We.displayName=Ue;var Ge=`SelectValue`,Ke=M.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,children:o,placeholder:s=``,...l}=e,u=Y(Ge,n),{onValueNodeHasChildrenChange:d}=u,f=o!==void 0,m=a(t,u.onValueNodeChange);c(()=>{d(f)},[d,f]);let h=Rt(u.value);return(0,N.jsx)(p.span,{...l,asChild:h?!1:l.asChild,ref:m,style:{pointerEvents:`none`},children:(0,N.jsx)(M.Fragment,{children:h?s:o},h?`placeholder`:`value`)})});Ke.displayName=Ge;var qe=`SelectIcon`,Je=M.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,...i}=e;return(0,N.jsx)(p.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})});Je.displayName=qe;var Ye=`SelectPortal`,[Xe,Ze]=J(Ye,{forceMount:void 0}),Qe=e=>{let{__scopeSelect:t,forceMount:n,...r}=e;return(0,N.jsx)(Xe,{scope:e.__scopeSelect,forceMount:n,children:(0,N.jsx)(w,{asChild:!0,...r})})};Qe.displayName=Ye;var X=`SelectContent`,$e=M.forwardRef((e,t)=>{let n=Ze(X,e.__scopeSelect),{forceMount:r=n.forceMount,...i}=e,a=Y(X,e.__scopeSelect),[o,s]=M.useState();return c(()=>{s(new DocumentFragment)},[]),(0,N.jsx)(D,{present:r||a.open,children:({present:e})=>e?(0,N.jsx)(it,{...i,ref:t}):(0,N.jsx)(et,{...i,fragment:o})})});$e.displayName=X;var et=M.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,fragment:i}=e;return i?ke.createPortal((0,N.jsx)(tt,{scope:n,children:(0,N.jsx)(Me.Slot,{scope:n,children:(0,N.jsx)(`div`,{ref:t,children:r})})}),i):null});et.displayName=`SelectContentFragment`;var Z=10,[tt,Q]=J(X),nt=`SelectContentImpl`,rt=l(`SelectContent.RemoveScroll`),it=M.forwardRef((e,t)=>{let{__scopeSelect:n}=e,{position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:o,onPointerDownOutside:s,side:c,sideOffset:l,align:u,alignOffset:f,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:x,avoidCollisions:S,...C}=e,w=Y(X,n),[T,E]=M.useState(null),[D,O]=M.useState(null),ee=a(t,e=>E(e)),[A,j]=M.useState(null),[te,ne]=M.useState(null),P=Ne(n),[F,I]=M.useState(!1),L=M.useRef(!1);M.useEffect(()=>{if(T)return v(T)},[T]),y();let R=M.useCallback(e=>{let[t,...n]=P().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&D&&(D.scrollTop=0),n===r&&D&&(D.scrollTop=D.scrollHeight),n?.focus(),document.activeElement!==i))return},[P,D]),z=M.useCallback(()=>R([A,T]),[R,A,T]);M.useEffect(()=>{F&&z()},[F,z]);let{onOpenChange:B,triggerPointerDownPosRef:V}=w;M.useEffect(()=>{if(T){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(V.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(V.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():n.composedPath().includes(T)||B(!1),document.removeEventListener(`pointermove`,t),V.current=null};return V.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[T,B,V]),M.useEffect(()=>{let e=()=>B(!1);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[B]);let[re,H]=zt(e=>{let t=P().filter(e=>!e.disabled),n=Bt(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current.focus())}),ie=M.useCallback((e,t,n)=>{let r=!L.current&&!n;(w.value!==void 0&&w.value===t||r)&&(j(e),r&&(L.current=!0))},[w.value]),ae=M.useCallback(()=>T?.focus(),[T]),oe=M.useCallback((e,t,n)=>{let r=!L.current&&!n;(w.value!==void 0&&w.value===t||r)&&ne(e)},[w.value]),se=r===`popper`?ct:ot,ce=se===ct?{side:c,sideOffset:l,align:u,alignOffset:f,arrowPadding:p,collisionBoundary:m,collisionPadding:h,sticky:g,hideWhenDetached:x,avoidCollisions:S}:{};return(0,N.jsx)(tt,{scope:n,content:T,viewport:D,onViewportChange:O,itemRefCallback:ie,selectedItem:A,onItemLeave:ae,itemTextRefCallback:oe,focusSelectedItem:z,selectedItemText:te,position:r,isPositioned:F,searchRef:re,children:(0,N.jsx)(_,{as:rt,allowPinchZoom:!0,children:(0,N.jsx)(b,{asChild:!0,trapped:w.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:d(i,e=>{w.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,N.jsx)(k,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>w.onOpenChange(!1),children:(0,N.jsx)(se,{role:`listbox`,id:w.contentId,"data-state":w.open?`open`:`closed`,dir:w.dir,onContextMenu:e=>e.preventDefault(),...C,...ce,onPlaced:()=>I(!0),ref:ee,style:{display:`flex`,flexDirection:`column`,outline:`none`,...C.style},onKeyDown:d(C.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&H(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=P().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>R(t)),e.preventDefault()}})})})})})})});it.displayName=nt;var at=`SelectItemAlignedPosition`,ot=M.forwardRef((e,t)=>{let{__scopeSelect:n,onPlaced:r,...i}=e,o=Y(X,n),s=Q(X,n),[l,u]=M.useState(null),[d,f]=M.useState(null),m=a(t,e=>f(e)),h=Ne(n),g=M.useRef(!1),_=M.useRef(!0),{viewport:v,selectedItem:y,selectedItemText:b,focusSelectedItem:x}=s,C=M.useCallback(()=>{if(o.trigger&&o.valueNode&&l&&d&&v&&y&&b){let e=o.trigger.getBoundingClientRect(),t=d.getBoundingClientRect(),n=o.valueNode.getBoundingClientRect(),i=b.getBoundingClientRect();if(o.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-Z,d=S(a,[Z,Math.max(Z,u-c)]);l.style.minWidth=s+`px`,l.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,s=e.width+o,c=Math.max(s,t.width),u=window.innerWidth-Z,d=S(a,[Z,Math.max(Z,u-c)]);l.style.minWidth=s+`px`,l.style.right=d+`px`}let a=h(),s=window.innerHeight-Z*2,c=v.scrollHeight,u=window.getComputedStyle(d),f=parseInt(u.borderTopWidth,10),p=parseInt(u.paddingTop,10),m=parseInt(u.borderBottomWidth,10),_=parseInt(u.paddingBottom,10),x=f+p+c+_+m,C=Math.min(y.offsetHeight*5,x),w=window.getComputedStyle(v),T=parseInt(w.paddingTop,10),E=parseInt(w.paddingBottom,10),D=e.top+e.height/2-Z,O=s-D,k=y.offsetHeight/2,ee=y.offsetTop+k,A=f+p+ee,j=x-A;if(A<=D){let e=a.length>0&&y===a[a.length-1].ref.current;l.style.bottom=`0px`;let t=d.clientHeight-v.offsetTop-v.offsetHeight,n=A+Math.max(O,k+(e?E:0)+t+m);l.style.height=n+`px`}else{let e=a.length>0&&y===a[0].ref.current;l.style.top=`0px`;let t=Math.max(D,f+v.offsetTop+(e?T:0)+k)+j;l.style.height=t+`px`,v.scrollTop=A-D+v.offsetTop}l.style.margin=`${Z}px 0`,l.style.minHeight=C+`px`,l.style.maxHeight=s+`px`,r?.(),requestAnimationFrame(()=>g.current=!0)}},[h,o.trigger,o.valueNode,l,d,v,y,b,o.dir,r]);c(()=>C(),[C]);let[w,T]=M.useState();return c(()=>{d&&T(window.getComputedStyle(d).zIndex)},[d]),(0,N.jsx)(lt,{scope:n,contentWrapper:l,shouldExpandOnScrollRef:g,onScrollButtonChange:M.useCallback(e=>{e&&_.current===!0&&(C(),x?.(),_.current=!1)},[C,x]),children:(0,N.jsx)(`div`,{ref:u,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:w},children:(0,N.jsx)(p.div,{...i,ref:m,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})});ot.displayName=at;var st=`SelectPopperPosition`,ct=M.forwardRef((e,t)=>{let{__scopeSelect:n,align:r=`start`,collisionPadding:i=Z,...a}=e,o=Ie(n);return(0,N.jsx)(C,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})});ct.displayName=st;var[lt,ut]=J(X,{}),dt=`SelectViewport`,ft=M.forwardRef((e,t)=>{let{__scopeSelect:n,nonce:r,...i}=e,o=Q(dt,n),s=ut(dt,n),c=a(t,o.onViewportChange),l=M.useRef(0);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,N.jsx)(Me.Slot,{scope:n,children:(0,N.jsx)(p.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:c,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:d(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=s;if(r?.current&&n){let e=Math.abs(l.current-t.scrollTop);if(e>0){let r=window.innerHeight-Z*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o<r){let i=o+e,a=Math.min(r,i),s=i-a;n.style.height=a+`px`,n.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,n.style.justifyContent=`flex-end`)}}}l.current=t.scrollTop})})})]})});ft.displayName=dt;var pt=`SelectGroup`,[mt,ht]=J(pt),gt=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=o();return(0,N.jsx)(mt,{scope:n,id:i,children:(0,N.jsx)(p.div,{role:`group`,"aria-labelledby":i,...r,ref:t})})});gt.displayName=pt;var _t=`SelectLabel`,vt=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=ht(_t,n);return(0,N.jsx)(p.div,{id:i.id,...r,ref:t})});vt.displayName=_t;var yt=`SelectItem`,[bt,xt]=J(yt),St=M.forwardRef((e,t)=>{let{__scopeSelect:n,value:r,disabled:i=!1,textValue:s,...c}=e,l=Y(yt,n),u=Q(yt,n),f=l.value===r,[m,h]=M.useState(s??``),[g,_]=M.useState(!1),v=a(t,e=>u.itemRefCallback?.(e,r,i)),y=o(),b=M.useRef(`touch`),x=()=>{i||(l.onValueChange(r),l.onOpenChange(!1))};if(r===``)throw Error(`A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.`);return(0,N.jsx)(bt,{scope:n,value:r,disabled:i,textId:y,isSelected:f,onItemTextChange:M.useCallback(e=>{h(t=>t||(e?.textContent??``).trim())},[]),children:(0,N.jsx)(Me.ItemSlot,{scope:n,value:r,disabled:i,textValue:m,children:(0,N.jsx)(p.div,{role:`option`,"aria-labelledby":y,"data-highlighted":g?``:void 0,"aria-selected":f&&g,"data-state":f?`checked`:`unchecked`,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,tabIndex:i?void 0:-1,...c,ref:v,onFocus:d(c.onFocus,()=>_(!0)),onBlur:d(c.onBlur,()=>_(!1)),onClick:d(c.onClick,()=>{b.current!==`mouse`&&x()}),onPointerUp:d(c.onPointerUp,()=>{b.current===`mouse`&&x()}),onPointerDown:d(c.onPointerDown,e=>{b.current=e.pointerType}),onPointerMove:d(c.onPointerMove,e=>{b.current=e.pointerType,i?u.onItemLeave?.():b.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:d(c.onPointerLeave,e=>{e.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:d(c.onKeyDown,e=>{u.searchRef?.current!==``&&e.key===` `||(je.includes(e.key)&&x(),e.key===` `&&e.preventDefault())})})})})});St.displayName=yt;var $=`SelectItemText`,Ct=M.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,...o}=e,s=Y($,n),l=Q($,n),u=xt($,n),d=ze($,n),[f,m]=M.useState(null),h=a(t,e=>m(e),u.onItemTextChange,e=>l.itemTextRefCallback?.(e,u.value,u.disabled)),g=f?.textContent,_=M.useMemo(()=>(0,N.jsx)(`option`,{value:u.value,disabled:u.disabled,children:g},u.value),[u.disabled,u.value,g]),{onNativeOptionAdd:v,onNativeOptionRemove:y}=d;return c(()=>(v(_),()=>y(_)),[v,y,_]),(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(p.span,{id:u.textId,...o,ref:h}),u.isSelected&&s.valueNode&&!s.valueNodeHasChildren?ke.createPortal(o.children,s.valueNode):null]})});Ct.displayName=$;var wt=`SelectItemIndicator`,Tt=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return xt(wt,n).isSelected?(0,N.jsx)(p.span,{"aria-hidden":!0,...r,ref:t}):null});Tt.displayName=wt;var Et=`SelectScrollUpButton`,Dt=M.forwardRef((e,t)=>{let n=Q(Et,e.__scopeSelect),r=ut(Et,e.__scopeSelect),[i,o]=M.useState(!1),s=a(t,r.onScrollButtonChange);return c(()=>{if(n.viewport&&n.isPositioned){let e=function(){o(t.scrollTop>0)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,N.jsx)(At,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null});Dt.displayName=Et;var Ot=`SelectScrollDownButton`,kt=M.forwardRef((e,t)=>{let n=Q(Ot,e.__scopeSelect),r=ut(Ot,e.__scopeSelect),[i,o]=M.useState(!1),s=a(t,r.onScrollButtonChange);return c(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight;o(Math.ceil(t.scrollTop)<e)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,N.jsx)(At,{...e,ref:s,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null});kt.displayName=Ot;var At=M.forwardRef((e,t)=>{let{__scopeSelect:n,onAutoScroll:r,...i}=e,a=Q(`SelectScrollButton`,n),o=M.useRef(null),s=Ne(n),l=M.useCallback(()=>{o.current!==null&&(window.clearInterval(o.current),o.current=null)},[]);return M.useEffect(()=>()=>l(),[l]),c(()=>{s().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[s]),(0,N.jsx)(p.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:d(i.onPointerDown,()=>{o.current===null&&(o.current=window.setInterval(r,50))}),onPointerMove:d(i.onPointerMove,()=>{a.onItemLeave?.(),o.current===null&&(o.current=window.setInterval(r,50))}),onPointerLeave:d(i.onPointerLeave,()=>{l()})})}),jt=`SelectSeparator`,Mt=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return(0,N.jsx)(p.div,{"aria-hidden":!0,...r,ref:t})});Mt.displayName=jt;var Nt=`SelectArrow`,Pt=M.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=Ie(n);return Q(Nt,n).position===`popper`?(0,N.jsx)(ee,{...i,...r,ref:t}):null});Pt.displayName=Nt;var Ft=`SelectBubbleInput`,It=M.forwardRef(({__scopeSelect:e,...t},n)=>{let r=Y(Ft,e),{value:i,onValueChange:o,required:s,disabled:c,name:l,autoComplete:u,form:d}=r,{nativeOptions:f,nativeSelectKey:m}=r,h=M.useRef(null),g=a(n,h),_=i??``,v=x(_);return M.useEffect(()=>{let e=h.current;if(!e)return;let t=window.HTMLSelectElement.prototype,n=Object.getOwnPropertyDescriptor(t,`value`).set;if(v!==_&&n){let t=new Event(`change`,{bubbles:!0});n.call(e,_),e.dispatchEvent(t)}},[v,_]),(0,N.jsxs)(p.select,{"aria-hidden":!0,required:s,tabIndex:-1,name:l,autoComplete:u,disabled:c,form:d,onChange:e=>o(e.target.value),...t,style:{...T,...t.style},ref:g,defaultValue:_,children:[Rt(i)?(0,N.jsx)(`option`,{value:``}):null,Array.from(f)]},m)});It.displayName=Ft;function Lt(e){return typeof e==`function`}function Rt(e){return e===``||e===void 0}function zt(e){let t=u(e),n=M.useRef(``),r=M.useRef(0),i=M.useCallback(e=>{let i=n.current+e;t(i),(function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))})(i)},[t]),a=M.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return M.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}function Bt(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Vt(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Vt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function Ht({...e}){return(0,N.jsx)(He,{"data-slot":`select`,...e})}function Ut({className:e,...t}){return(0,N.jsx)(gt,{"data-slot":`select-group`,className:f(`scroll-my-1 p-1`,e),...t})}function Wt({...e}){return(0,N.jsx)(Ke,{"data-slot":`select-value`,...e})}function Gt({className:e,size:t=`default`,children:n,...r}){return(0,N.jsxs)(We,{"data-slot":`select-trigger`,"data-size":t,className:f(`flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[n,(0,N.jsx)(Je,{asChild:!0,children:(0,N.jsx)(te,{className:`pointer-events-none size-4 text-muted-foreground`})})]})}function Kt({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,N.jsx)(Qe,{children:(0,N.jsxs)($e,{"data-slot":`select-content`,"data-align-trigger":n===`item-aligned`,className:f(`relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,N.jsx)(Jt,{}),(0,N.jsx)(ft,{"data-position":n,className:f(`data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)`,n===`popper`&&``),children:t}),(0,N.jsx)(Yt,{})]})})}function qt({className:e,children:t,...n}){return(0,N.jsxs)(St,{"data-slot":`select-item`,className:f(`relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,N.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`,children:(0,N.jsx)(Tt,{children:(0,N.jsx)(j,{className:`pointer-events-none`})})}),(0,N.jsx)(Ct,{children:t})]})}function Jt({className:e,...t}){return(0,N.jsx)(Dt,{"data-slot":`select-scroll-up-button`,className:f(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,N.jsx)(ne,{})})}function Yt({className:e,...t}){return(0,N.jsx)(kt,{"data-slot":`select-scroll-down-button`,className:f(`z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,N.jsx)(te,{})})}function Xt({className:e,children:t,...n}){return(0,N.jsxs)(Ee,{"data-slot":`scroll-area`,className:f(`relative`,e),...n,children:[(0,N.jsx)(De,{"data-slot":`scroll-area-viewport`,className:`size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1`,children:t}),(0,N.jsx)(Zt,{}),(0,N.jsx)(Oe,{})]})}function Zt({className:e,orientation:t=`vertical`,...n}){return(0,N.jsx)(ie,{"data-slot":`scroll-area-scrollbar`,"data-orientation":t,orientation:t,className:f(`flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent`,e),...n,children:(0,N.jsx)(he,{"data-slot":`scroll-area-thumb`,className:`relative flex-1 rounded-full bg-border`})})}export{qt as a,Ut as i,Ht as n,Gt as o,Kt as r,Wt as s,Xt as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Y as e,b as t,g as n,t as r,x as i,y as a}from"./utils-ChkMmPzE.js";import{i as o,n as s,o as c,r as l,t as u}from"./query-keys-CbbgiZx4.js";import{a as d,i as f,n as p,r as m}from"./use-library-Bh7Bunn1.js";import{a as h,i as g,n as _,o as v,r as y,s as b,t as x}from"./scroll-area-CyEO8R_G.js";import{t as S}from"./settings-2-8mnAuSax.js";import{n as C,r as w}from"./shell-context-Buw4m44t.js";import{g as T}from"./index-BHhqsr5H.js";var E=n(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),D=n(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),O=n(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),k=e(i(),1),A=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`,j=(e=21)=>{let t=``,n=crypto.getRandomValues(new Uint8Array(e|=0));for(;e--;)t+=A[n[e]&63];return t};function M(){return s(`/api/config`)}function N(e){return s(`/api/config`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)})}function P(){return c({queryKey:u.config,queryFn:M})}function F(){let e=a();return d({mutationFn:e=>N(e),onSuccess:t=>{e.setQueryData(u.config,t),e.invalidateQueries({queryKey:u.library})}})}var I=t();function L(e=``){return{id:j(),path:e}}function R(e){return e.length>0?e.map(e=>({...e})):[L()]}function z(e){return e.map(e=>({id:e.id,path:e.path.trim()})).filter(e=>e.path)}function B(e){let t=new Set;for(let n of e){let e=n.path.trim();if(e){if(t.has(e))return e;t.add(e)}}return null}function V(){let{scanning:e}=C(),{data:t,isPending:n,isError:i}=P(),a=F(),s=p(),[c,u]=(0,k.useState)([L()]),[d,A]=(0,k.useState)([L()]),[j,M]=(0,k.useState)(`ignore`);(0,k.useEffect)(()=>{t&&(u(R(t.novelDirectories)),A(R(t.comicDirectories)),M(t.gbkNovelHandling??`ignore`))},[t]),(0,k.useEffect)(()=>{i&&T.error(`加载设置失败`)},[i]);let N=(e,t,n)=>{(e===`novel`?u:A)(e=>e.map(e=>e.id===t?{...e,path:n}:e))},V=e=>{(e===`novel`?u:A)(e=>[...e,L()])},H=(e,t)=>{(e===`novel`?u:A)(e=>e.length===1?[L()]:e.filter(e=>e.id!==t))},U=()=>{let e=B(c);if(e){T.error(`小说目录存在重复路径:${e}`);return}let t=B(d);if(t){T.error(`漫画目录存在重复路径:${t}`);return}a.mutate({novelDirectories:z(c),comicDirectories:z(d),gbkNovelHandling:j},{onSuccess:()=>T.success(`设置已保存`),onError:()=>T.error(`保存设置失败`)})},W=()=>{s.mutate(void 0,{onSuccess:()=>T.success(`已开始重新扫描`),onError:()=>T.error(`重新扫描失败`)})},G=(e,t,n)=>(0,I.jsxs)(`section`,{className:`mb-4 rounded-[10px] border border-border bg-card px-5 py-4`,children:[(0,I.jsxs)(`div`,{className:`mb-3 flex items-center gap-2 text-sm font-semibold text-[#c2c2ca]`,children:[e===`novel`?(0,I.jsx)(f,{className:`size-4 text-indigo-500`}):(0,I.jsx)(m,{className:`size-4 text-indigo-500`}),t]}),(0,I.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map(t=>(0,I.jsxs)(`div`,{className:`flex gap-2`,children:[(0,I.jsx)(w,{value:t.path,onChange:n=>N(e,t.id,n.target.value),placeholder:`输入目录路径,如 D:/Books/Novels/`,className:`h-9 border-[#2a2a32] bg-[#141418] text-[13px] text-[#e2e2e8] placeholder:text-[#4a4a56] focus-visible:border-indigo-500`}),(0,I.jsx)(o,{type:`button`,variant:`ghost`,size:`icon-sm`,onClick:()=>H(e,t.id),"aria-label":`删除目录`,className:`shrink-0 text-[#6b6b78] hover:bg-[#2a2a32] hover:text-[#e2e2e8]`,children:(0,I.jsx)(O,{})})]},t.id))}),(0,I.jsxs)(o,{type:`button`,variant:`ghost`,size:`sm`,className:`mt-1 h-8 border border-dashed border-[#2a2a32] bg-transparent px-3 text-xs text-[#9f9fad] hover:border-indigo-500 hover:bg-transparent hover:text-[#d5d5dd]`,onClick:()=>V(e),children:[(0,I.jsx)(E,{"data-icon":`inline-start`}),`添加目录`]})]});return(0,I.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,I.jsxs)(`header`,{className:`flex h-14 shrink-0 items-center gap-3 border-b px-5`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2.5 text-[15px] font-semibold text-[#e2e2e8]`,children:[(0,I.jsx)(S,{className:`size-4 text-indigo-500`}),`设置`]}),(0,I.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,I.jsxs)(o,{type:`button`,variant:`outline`,onClick:W,disabled:e||s.isPending||n,className:`h-9 border-[#2a2a32] bg-transparent px-[18px] text-[13px] font-medium text-[#c2c2ca] hover:bg-[#1e1e24] hover:text-[#e2e2e8]`,children:[(0,I.jsx)(D,{"data-icon":`inline-start`,className:r(e&&`animate-spin`)}),e?`扫描中...`:`重新扫描`]}),(0,I.jsx)(o,{type:`button`,onClick:U,disabled:a.isPending||n,className:`h-9 bg-indigo-500 px-[18px] text-[13px] font-medium text-white hover:bg-[#5558e0]`,children:a.isPending?`保存中...`:`保存设置`})]})]}),(0,I.jsx)(x,{className:`min-h-0 flex-1`,children:n?(0,I.jsxs)(`div`,{className:`flex flex-col gap-4 p-5`,children:[(0,I.jsx)(l,{className:`h-24 w-full`}),(0,I.jsx)(l,{className:`h-24 w-full`})]}):(0,I.jsxs)(`div`,{className:`px-5 pt-2 pb-5`,children:[G(`novel`,`小说目录`,c),(0,I.jsxs)(`section`,{className:`mb-4 rounded-[10px] border border-border bg-card px-5 py-4`,children:[(0,I.jsx)(`div`,{className:`mb-3 text-sm font-semibold text-[#c2c2ca]`,children:`GBK 编码小说`}),(0,I.jsxs)(_,{value:j,onValueChange:e=>M(e),children:[(0,I.jsx)(v,{size:`sm`,className:r(`h-9 min-w-[220px] border-[#2a2a32] bg-[#141418] text-[13px] text-[#e2e2e8]`),children:(0,I.jsx)(b,{})}),(0,I.jsx)(y,{children:(0,I.jsxs)(g,{children:[(0,I.jsx)(h,{value:`ignore`,children:`忽略(扫描时跳过 GBK 小说)`}),(0,I.jsx)(h,{value:`convert-to-utf-8`,children:`转为 UTF-8(扫描时转换并覆盖原文件)`})]})})]}),j===`convert-to-utf-8`?(0,I.jsx)(`p`,{className:`mt-2 text-xs text-[#6b6b78]`,children:`扫描时会将 GBK 小说转为 UTF-8 并覆盖磁盘上的原文件。`}):null]}),G(`comic`,`漫画目录`,d)]})})]})}function H(){return(0,I.jsx)(V,{})}export{H as component};
|