import{$ as e,$t as t,Et as n,F as r,Ft as i,Gt as a,K as o,Ot as ee,Q as s,St as c,U as te,Ut as l,W as ne,X as u,Z as d,at as f,et as p,fn as m,hn as h,it as g,mn as _,nt as re,pt as v,q as ie,rt as y,wt as b,yt as x}from"./editor-DJ72UhpY.js";import{Br as ae,Er as S,Fr as oe,Hr as se,Pr as C,Tr as ce,kr as w}from"./vendor-BqxQPPIo.js";import{a as T,c as le,i as ue,l as E,o as D,s as O,t as de}from"./index-BsmF42t4.js";import{t as k}from"./_plugin-vue_export-helper-BzmG9fMN.js";var A={getBookmarks(e){return T(`/bookmarks`,{params:e})},getBookmark(e){return T(`/bookmarks/${e}`)},createBookmark(e){return D(`/bookmarks`,e)},updateBookmark(e,t){return O(`/bookmarks/${e}`,t)},deleteBookmark(e){return ue(`/bookmarks/${e}`)},recordVisit(e){return D(`/bookmarks/${e}/visit`)},getTags(){return T(`/bookmarks/tags`)},exportBookmarks(){return T(`/bookmarks/export`)},importBookmarks(e){return D(`/bookmarks/import`,e)}},fe={class:`container`},pe={class:`filter-section`},me={class:`search-box`},he={key:0,class:`tag-filter`},ge=[`onClick`],_e={class:`bookmark-grid`},ve=[`onClick`,`onContextmenu`],ye={class:`card-header`},be={class:`favicon-wrapper`},xe=[`src`,`onLoad`,`onError`],Se={class:`card-title-wrapper`},Ce={class:`card-title`},we={class:`card-url`},Te={key:0,class:`card-desc`},Ee={class:`card-footer`},De={class:`card-tags`},Oe={key:0,class:`empty-state`},ke={key:1,class:`loading-overlay`},Ae={class:`dynamic-tags`},je={class:`dynamic-tags`},Me={class:`modal-footer-actions`},Ne={key:0,class:`bookmark-info`},Pe={class:`info-item`},Fe={class:`info-value`},Ie={class:`info-item`},Le=[`title`],Re={class:`info-item`},ze={class:`info-value`},Be={class:`info-item`},Ve={class:`info-value`},He={key:0,class:`info-tags`},Ue={key:1},We={class:`info-item`},Ge={class:`info-value`},Ke={class:`info-item`},qe={class:`info-value`},Je={class:`info-item`},Ye={class:`info-value`},Xe=[`onClick`],Ze={key:0,class:`context-menu-divider`},Qe=[`onClick`],$e=300,j=k(f({__name:`Bookmark`,setup(f){let T=de(),ue=u(()=>T.isEditor),D=a([]),O=a([]),k=a([]),j=a(``),M=a(!1),N=a(!1),P=a(!1),F=a(!1),I=a(!1),L=a(null),R=a(new Map),z=null,B=a(``),et=u(()=>B.value?{backgroundImage:`url(${B.value})`,backgroundSize:`cover`,backgroundPosition:`center`,backgroundAttachment:`fixed`}:{}),tt=()=>{let e=new Date,t=new Date(`2025-01-01`);J=Math.floor((e.getTime()-t.getTime())/(1e3*60*60*24))%q.length,B.value=q[J]+`&t=`+Date.now()},nt=a(null),V=a(null),H=l({title:``,url:``,description:``,favicon:``,tags:[]}),U=l({id:``,title:``,url:``,description:``,favicon:``,tags:[]}),W=a(!1),G=a(``),rt=a(null),it=a(!1),K=a(``),at=a(null),ot={title:{required:!0,message:`请输入标题`,trigger:`blur`},url:{required:!0,message:`请输入链接`,trigger:`blur`}},st=()=>{W.value=!0,v(()=>{rt.value?.focus()})},ct=()=>{G.value&&H.tags&&!H.tags.includes(G.value)&&H.tags.push(G.value),W.value=!1,G.value=``},lt=e=>{H.tags&&H.tags.splice(e,1)},ut=()=>{it.value=!0,v(()=>{at.value?.focus()})},dt=()=>{K.value&&U.tags&&!U.tags.includes(K.value)&&U.tags.push(K.value),it.value=!1,K.value=``},ft=e=>{U.tags&&U.tags.splice(e,1)},q=[`https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1920&q=80`,`https://images.unsplash.com/photo-1469474968028-56623f02e42e?w=1920&q=80`,`https://images.unsplash.com/photo-1426604966848-d7adac402bff?w=1920&q=80`,`https://images.unsplash.com/photo-1447752875215-b2761acb3c5d?w=1920&q=80`,`https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=1920&q=80`,`https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=1920&q=80`,`https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=1920&q=80`,`https://images.unsplash.com/photo-1501785888041-af3ef285b470?w=1920&q=80`,`https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=1920&q=80`,`https://images.unsplash.com/photo-1434725039720-aaad6dd32dfe?w=1920&q=80`,`https://images.unsplash.com/photo-1501854140801-50d01698950b?w=1920&q=80`,`https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=1920&q=80`,`https://images.unsplash.com/photo-1475924156734-496f6cac6ec1?w=1920&q=80`,`https://images.unsplash.com/photo-1519681393784-d120267933ba?w=1920&q=80`,`https://images.unsplash.com/photo-1497436072909-60f360e1d4b1?w=1920&q=80`,`https://images.unsplash.com/photo-1505118380757-91f5f5632de0?w=1920&q=80`,`https://images.unsplash.com/photo-1454496522488-7a8e488e8606?w=1920&q=80`,`https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=1920&q=80`,`https://images.unsplash.com/photo-1494500764479-0c8f2919a3d8?w=1920&q=80`,`https://images.unsplash.com/photo-1465146344425-f00d5f5c8f07?w=1920&q=80`],J=0,Y=a(!1),pt=a(0),mt=a(0),ht=[{key:`add`,label:`添加书签`,icon:`Plus`},{key:`divider1`,label:``,icon:``},{key:`export`,label:`导出书签`,icon:`Download`},{key:`import`,label:`导入书签`,icon:`Upload`},{key:`divider2`,label:``,icon:``},{key:`wallpaper`,label:`更换壁纸`,icon:`Picture`},{key:`downloadWallpaper`,label:`下载壁纸`,icon:`Document`}],gt=e=>{if(e.target.closest(`.bookmark-card`))return;e.preventDefault(),e.stopPropagation(),pt.value=e.clientX,mt.value=e.clientY,Y.value=!0;let t=()=>{Y.value=!1,document.removeEventListener(`click`,t)};setTimeout(()=>{document.addEventListener(`click`,t)},0)},_t=e=>{switch(e){case`add`:P.value=!0;break;case`export`:vt();break;case`import`:yt();break;case`wallpaper`:bt();break;case`downloadWallpaper`:xt();break}Y.value=!1},vt=async()=>{try{let e=await A.exportBookmarks(),t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=`bookmarks-${new Date().toISOString().split(`T`)[0]}.json`;if(`showSaveFilePicker`in window)try{let e=await(await window.showSaveFilePicker({suggestedName:n,types:[{description:`JSON 文件`,accept:{"application/json":[`.json`]}}]})).createWritable();await e.write(t),await e.close(),E.success(`导出成功`);return}catch(e){if(e.name===`AbortError`)return}let r=URL.createObjectURL(t),i=document.createElement(`a`);i.href=r,i.download=n,i.click(),URL.revokeObjectURL(r),E.success(`导出成功,文件保存到下载目录`)}catch{E.error(`导出失败`)}},yt=()=>{let e=document.createElement(`input`);e.type=`file`,e.accept=`.json,application/json`,e.onchange=async e=>{let t=e.target.files?.[0];if(t)try{let e=await t.text(),n=JSON.parse(e),r=await A.importBookmarks({bookmarks:n});E.success(`成功导入 ${r.imported} 个书签`),X(),Z()}catch(e){E.error(e.message||`导入失败`)}},e.click()},bt=()=>{J=(J+1)%q.length,B.value=q[J]+`&t=`+Date.now(),E.success(`已更换壁纸`)},xt=async()=>{try{let e=await(await fetch(B.value)).blob(),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`wallpaper-${Date.now()}.jpg`,n.click(),URL.revokeObjectURL(t),E.success(`开始下载壁纸`)}catch{E.error(`下载失败`)}},X=async()=>{z&&=(clearTimeout(z),null),M.value=!1,z=window.setTimeout(()=>{M.value=!0},$e);try{let e={};j.value&&(e.keyword=j.value),k.value.length>0&&(e.tag=k.value[0]),D.value=(await A.getBookmarks(e)).list}catch{E.error(`加载书签失败`)}finally{z&&=(clearTimeout(z),null),M.value=!1}},Z=async()=>{try{O.value=(await A.getTags()).sort((e,t)=>e.localeCompare(t,`zh-CN`))}catch(e){console.error(`加载标签失败`,e)}},Q=null,St=()=>{Q&&clearTimeout(Q),Q=window.setTimeout(()=>{X()},300)},Ct=e=>{k.value.includes(e)?k.value=[]:k.value=[e],X()},wt=()=>{k.value=[],X()},Tt=async e=>{await A.recordVisit(e.id),window.open(Ht(e.url),`_blank`),e.visit_count++},$=a(!1),Et=a(0),Dt=a(0),Ot=a(null),kt=u(()=>{let e=[{key:`info`,label:`属性`,icon:C}];return ue.value&&e.unshift({key:`edit`,label:`编辑`,icon:w},{key:`delete`,label:`删除`,icon:S,type:`danger`}),e}),At=(e,t)=>{e.preventDefault(),e.stopPropagation(),Ot.value=t,Et.value=e.clientX,Dt.value=e.clientY,$.value=!0;let n=()=>{$.value=!1,document.removeEventListener(`click`,n)};setTimeout(()=>{document.addEventListener(`click`,n)},0)},jt=e=>{let t=Ot.value;if(t){switch(e){case`edit`:Pt(t);break;case`delete`:Rt(t);break;case`info`:It(t);break}$.value=!1}},Mt=async()=>{if(nt.value){await nt.value.validate(),N.value=!0;try{await A.createBookmark({...H}),E.success(`添加成功`),P.value=!1,Nt(),X(),Z()}catch{E.error(`添加失败`)}finally{N.value=!1}}},Nt=()=>{H.title=``,H.url=``,H.description=``,H.favicon=``,H.tags=[]},Pt=e=>{L.value=e,U.id=e.id,U.title=e.title,U.url=e.url,U.description=e.description||``,U.favicon=e.favicon||``,U.tags=[...e.tags],F.value=!0},Ft=async()=>{if(!(!V.value||!U.id)){await V.value.validate(),N.value=!0;try{let{id:e,...t}=U;await A.updateBookmark(e,t),E.success(`更新成功`),F.value=!1,X(),Z()}catch{E.error(`更新失败`)}finally{N.value=!1}}},It=e=>{L.value=e,I.value=!0},Lt=e=>e?new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`}):`-`,Rt=e=>{le.confirm(`确定要删除 "${e.title}" 吗?`,`确认删除`,{confirmButtonText:`删除`,cancelButtonText:`取消`,type:`warning`}).then(async()=>{try{await A.deleteBookmark(e.id),E.success(`删除成功`),X(),Z()}catch{E.error(`删除失败`)}}).catch(()=>{})},zt=e=>{try{return new URL(e).hostname}catch{return e}},Bt=e=>{R.value.set(e,`loaded`)},Vt=e=>{R.value.set(e,`error`)},Ht=e=>!e||/^https?:\/\/\d+\.\d+\.\d+\.\d+/.test(e)?``:e.replace(/^http:/i,`https:`);return x(()=>{X(),Z(),tt()}),(a,l)=>{let u=n(`el-icon`),f=n(`el-input`),v=n(`el-form-item`),x=n(`el-tag`),S=n(`el-button`),C=n(`el-form`),w=n(`el-dialog`);return c(),p(`div`,{class:`bookmark-page`,style:_(et.value),onContextmenu:l[16]||=ne(e=>gt(e),[`prevent`])},[d(`div`,fe,[l[20]||=d(`header`,{class:`header`},[d(`h1`,{class:`logo`},`我的书签`)],-1),d(`section`,pe,[d(`div`,me,[g(f,{modelValue:j.value,"onUpdate:modelValue":l[0]||=e=>j.value=e,placeholder:`搜索书签...`,class:`search-input`,clearable:``,onInput:St},{prefix:i(()=>[g(u,{class:`search-icon`},{default:i(()=>[g(t(se))]),_:1})]),_:1},8,[`modelValue`])]),O.value.length>0?(c(),p(`div`,he,[d(`span`,{class:m([`tag`,k.value.length===0?`active`:``]),onClick:wt},` 全部 `,2),(c(!0),p(o,null,b(O.value,e=>(c(),p(`span`,{key:e,class:m([`tag`,k.value.includes(e)?`active`:``]),onClick:t=>Ct(e)},h(e),11,ge))),128))])):e(``,!0)]),d(`div`,_e,[(c(!0),p(o,null,b(D.value,n=>(c(),p(`div`,{key:n.id,class:`bookmark-card`,onClick:e=>Tt(n),onContextmenu:ne(e=>At(e,n),[`prevent`])},[d(`div`,ye,[d(`div`,be,[d(`div`,{class:m([`favicon-placeholder`,{hidden:R.value.get(n.id)===`loaded`}])},[g(u,{size:24},{default:i(()=>[g(t(oe))]),_:1})],2),n.favicon&&Ht(n.favicon)?(c(),p(`img`,{key:0,src:Ht(n.favicon),class:m([`favicon`,{loaded:R.value.get(n.id)===`loaded`}]),onLoad:e=>Bt(n.id),onError:e=>Vt(n.id)},null,42,xe)):e(``,!0)]),d(`div`,Se,[d(`h3`,Ce,h(n.title),1),d(`p`,we,h(zt(n.url)),1)])]),n.description?(c(),p(`p`,Te,h(n.description),1)):e(``,!0),d(`div`,Ee,[d(`div`,De,[(c(!0),p(o,null,b(n.tags,e=>(c(),p(`span`,{key:e,class:`card-tag`},h(e),1))),128))])])],40,ve))),128))]),D.value.length===0&&!M.value?(c(),p(`div`,Oe,[g(u,{size:64,class:`empty-icon`},{default:i(()=>[g(t(ce))]),_:1}),l[17]||=d(`h3`,null,`暂无任何书签`,-1),l[18]||=d(`p`,null,`点击上方按钮添加你的第一个书签`,-1)])):e(``,!0),M.value?(c(),p(`div`,ke,[...l[19]||=[re(`
加载中