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(`

加载中

`,1)]])):e(``,!0)]),g(w,{modelValue:P.value,"onUpdate:modelValue":l[7]||=e=>P.value=e,title:`添加书签`,width:`500px`},{footer:i(()=>[g(S,{onClick:l[6]||=e=>P.value=!1},{default:i(()=>[...l[22]||=[y(`取消`,-1)]]),_:1}),g(S,{type:`primary`,onClick:Mt,loading:N.value},{default:i(()=>[...l[23]||=[y(`保存`,-1)]]),_:1},8,[`loading`])]),default:i(()=>[g(C,{model:H,rules:ot,ref_key:`formRef`,ref:nt},{default:i(()=>[g(v,{label:`标题`,prop:`title`},{default:i(()=>[g(f,{modelValue:H.title,"onUpdate:modelValue":l[1]||=e=>H.title=e,placeholder:`输入书签标题`},null,8,[`modelValue`])]),_:1}),g(v,{label:`链接`,prop:`url`},{default:i(()=>[g(f,{modelValue:H.url,"onUpdate:modelValue":l[2]||=e=>H.url=e,placeholder:`https://example.com`},null,8,[`modelValue`])]),_:1}),g(v,{label:`描述`},{default:i(()=>[g(f,{modelValue:H.description,"onUpdate:modelValue":l[3]||=e=>H.description=e,type:`textarea`,placeholder:`可选描述`,rows:2},null,8,[`modelValue`])]),_:1}),g(v,{label:`图标 URL`},{default:i(()=>[g(f,{modelValue:H.favicon,"onUpdate:modelValue":l[4]||=e=>H.favicon=e,placeholder:`可选,自动获取`},null,8,[`modelValue`])]),_:1}),g(v,{label:`标签`},{default:i(()=>[d(`div`,Ae,[(c(!0),p(o,null,b(H.tags,(e,t)=>(c(),s(x,{key:e,closable:``,onClose:e=>lt(t),class:`dynamic-tag`},{default:i(()=>[y(h(e),1)]),_:2},1032,[`onClose`]))),128)),W.value?(c(),s(f,{key:0,ref_key:`tagInputRef`,ref:rt,modelValue:G.value,"onUpdate:modelValue":l[5]||=e=>G.value=e,class:`tag-input`,size:`small`,onKeyup:te(ct,[`enter`]),onBlur:ct},null,8,[`modelValue`])):(c(),s(S,{key:1,size:`small`,onClick:st},{default:i(()=>[g(u,null,{default:i(()=>[g(t(ae))]),_:1}),l[21]||=y(` 添加标签 `,-1)]),_:1}))])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`modelValue`]),g(w,{modelValue:F.value,"onUpdate:modelValue":l[14]||=e=>F.value=e,title:`编辑书签`,width:`500px`},{footer:i(()=>[d(`div`,Me,[g(S,{onClick:l[13]||=e=>F.value=!1},{default:i(()=>[...l[25]||=[y(`取消`,-1)]]),_:1}),g(S,{type:`primary`,onClick:Ft,loading:N.value},{default:i(()=>[...l[26]||=[y(`保存`,-1)]]),_:1},8,[`loading`])])]),default:i(()=>[g(C,{model:U,rules:ot,ref_key:`editFormRef`,ref:V},{default:i(()=>[g(v,{label:`标题`,prop:`title`},{default:i(()=>[g(f,{modelValue:U.title,"onUpdate:modelValue":l[8]||=e=>U.title=e,placeholder:`输入书签标题`},null,8,[`modelValue`])]),_:1}),g(v,{label:`链接`,prop:`url`},{default:i(()=>[g(f,{modelValue:U.url,"onUpdate:modelValue":l[9]||=e=>U.url=e,placeholder:`https://example.com`},null,8,[`modelValue`])]),_:1}),g(v,{label:`描述`},{default:i(()=>[g(f,{modelValue:U.description,"onUpdate:modelValue":l[10]||=e=>U.description=e,type:`textarea`,placeholder:`可选描述`,rows:2},null,8,[`modelValue`])]),_:1}),g(v,{label:`图标 URL`},{default:i(()=>[g(f,{modelValue:U.favicon,"onUpdate:modelValue":l[11]||=e=>U.favicon=e,placeholder:`可选`},null,8,[`modelValue`])]),_:1}),g(v,{label:`标签`},{default:i(()=>[d(`div`,je,[(c(!0),p(o,null,b(U.tags,(e,t)=>(c(),s(x,{key:e,closable:``,onClose:e=>ft(t),class:`dynamic-tag`},{default:i(()=>[y(h(e),1)]),_:2},1032,[`onClose`]))),128)),it.value?(c(),s(f,{key:0,ref_key:`editTagInputRef`,ref:at,modelValue:K.value,"onUpdate:modelValue":l[12]||=e=>K.value=e,class:`tag-input`,size:`small`,onKeyup:te(dt,[`enter`]),onBlur:dt},null,8,[`modelValue`])):(c(),s(S,{key:1,size:`small`,onClick:ut},{default:i(()=>[g(u,null,{default:i(()=>[g(t(ae))]),_:1}),l[24]||=y(` 添加标签 `,-1)]),_:1}))])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`modelValue`]),g(w,{modelValue:I.value,"onUpdate:modelValue":l[15]||=e=>I.value=e,title:`书签属性`,width:`420px`},{default:i(()=>[L.value?(c(),p(`div`,Ne,[d(`div`,Pe,[l[27]||=d(`span`,{class:`info-label`},`标题`,-1),d(`span`,Fe,h(L.value.title),1)]),d(`div`,Ie,[l[28]||=d(`span`,{class:`info-label`},`链接`,-1),d(`span`,{class:`info-value url`,title:L.value.url},h(L.value.url),9,Le)]),d(`div`,Re,[l[29]||=d(`span`,{class:`info-label`},`描述`,-1),d(`span`,ze,h(L.value.description||`-`),1)]),d(`div`,Be,[l[30]||=d(`span`,{class:`info-label`},`标签`,-1),d(`span`,Ve,[L.value.tags.length>0?(c(),p(`span`,He,[(c(!0),p(o,null,b(L.value.tags,e=>(c(),p(`span`,{key:e,class:`info-tag`},h(e),1))),128))])):(c(),p(`span`,Ue,`-`))])]),d(`div`,We,[l[31]||=d(`span`,{class:`info-label`},`访问次数`,-1),d(`span`,Ge,h(L.value.visit_count||0),1)]),d(`div`,Ke,[l[32]||=d(`span`,{class:`info-label`},`创建时间`,-1),d(`span`,qe,h(Lt(L.value.created_at)),1)]),d(`div`,Je,[l[33]||=d(`span`,{class:`info-label`},`更新时间`,-1),d(`span`,Ye,h(Lt(L.value.updated_at)),1)])])):e(``,!0)]),_:1},8,[`modelValue`]),(c(),s(ie,{to:`body`},[g(r,{name:`fade`},{default:i(()=>[$.value?(c(),p(`div`,{key:0,class:`context-menu`,style:_({left:Et.value+`px`,top:Dt.value+`px`})},[(c(!0),p(o,null,b(kt.value,e=>(c(),p(`div`,{key:e.key,class:m([`context-menu-item`,{"is-danger":e.type===`danger`}]),onClick:t=>jt(e.key)},[g(u,{class:`menu-icon`},{default:i(()=>[(c(),s(ee(e.icon)))]),_:2},1024),d(`span`,null,h(e.label),1)],10,Xe))),128))],4)):e(``,!0)]),_:1})])),(c(),s(ie,{to:`body`},[g(r,{name:`fade`},{default:i(()=>[Y.value?(c(),p(`div`,{key:0,class:`context-menu`,style:_({left:pt.value+`px`,top:mt.value+`px`})},[(c(),p(o,null,b(ht,e=>(c(),p(o,{key:e.key},[e.key.startsWith(`divider`)?(c(),p(`div`,Ze)):(c(),p(`div`,{key:1,class:`context-menu-item`,onClick:t=>_t(e.key)},[g(u,{class:`menu-icon`},{default:i(()=>[(c(),s(ee(e.icon)))]),_:2},1024),d(`span`,null,h(e.label),1)],8,Qe))],64))),64))],4)):e(``,!0)]),_:1})]))],36)}}}),[[`__scopeId`,`data-v-bcfe2e01`]]);export{j as default};