feat: support Keep Multi-selected
parent
d70aebd1c0
commit
d2124e9291
|
|
@ -45,6 +45,7 @@ declare module '@vue/runtime-core' {
|
||||||
ChangeIndicator: typeof import('./src/components/ChangeIndicator.vue')['default']
|
ChangeIndicator: typeof import('./src/components/ChangeIndicator.vue')['default']
|
||||||
ContextMenu: typeof import('./src/components/ContextMenu.vue')['default']
|
ContextMenu: typeof import('./src/components/ContextMenu.vue')['default']
|
||||||
FileItem: typeof import('./src/components/FileItem.vue')['default']
|
FileItem: typeof import('./src/components/FileItem.vue')['default']
|
||||||
|
MultiSelectKeep: typeof import('./src/components/MultiSelectKeep.vue')['default']
|
||||||
NumInput: typeof import('./src/components/numInput.vue')['default']
|
NumInput: typeof import('./src/components/numInput.vue')['default']
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{d as a,o as t,k as s,c as n,cc as _,q as o}from"./index-423bec18.js";const c={class:"img-sli-container"},i=a({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(t(),s("div",c,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const d=o(i,[["__scopeId","data-v-ae3fb9a8"]]);export{d as default};
|
import{d as a,o as t,k as s,c as n,cc as _,q as o}from"./index-50eccecb.js";const c={class:"img-sli-container"},i=a({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(l){return(e,r)=>(t(),s("div",c,[n(_,{left:e.left,right:e.right},null,8,["left","right"])]))}});const d=o(i,[["__scopeId","data-v-ae3fb9a8"]]);export{d as default};
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
.preview-switch[data-v-d36b6e6b]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-d36b6e6b]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-d36b6e6b]{opacity:0;pointer-events:none;cursor:none}.container[data-v-d36b6e6b]{background:var(--zp-secondary-background)}.container .action-bar[data-v-d36b6e6b]{display:flex;align-items:center;user-select:none;gap:4px;padding:4px}.container .action-bar>*[data-v-d36b6e6b]{flex-wrap:wrap}.container .file-list[data-v-d36b6e6b]{list-style:none;padding:8px;overflow:auto;height:calc(var(--pane-max-height) - 40px);width:100%}.container .no-res-hint[data-v-d36b6e6b]{height:var(--pane-max-height);display:flex;align-items:center;flex-direction:column;justify-content:center}.container .no-res-hint .hint[data-v-d36b6e6b]{font-size:1.6em;margin-bottom:2em;text-align:center}
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
import{d as se,s as ne,a4 as oe,r as ie,o as u,k as I,c as s,B as e,A as n,E as R,l as d,G as ae,t as a,m as p,z as V,Q as de,p as k,R as z,U as re,V as ce,Y as B,am as ue,an as me,bC as pe,q as ge}from"./index-50eccecb.js";import{L as ve,R as fe,f as Ie,M as ke,S as _e}from"./MultiSelectKeep-494013af.js";import{g as Ce,h as he,F as we}from"./FileItem-17604ae5.js";import{c as Se,u as xe}from"./hook-d17e6ef3.js";import{o as be}from"./functionalCallableComp-07abeb37.js";import"./index-d087ab29.js";import"./index-25e23286.js";const Me=r=>(ue("data-v-479efe51"),r=r(),me(),r),ye={class:"hint"},Ae={class:"action-bar"},Te=Me(()=>d("div",{style:{padding:"16px 0 512px"}},null,-1)),$e={key:1},Fe={class:"no-res-hint"},Re={class:"hint"},Ve={key:2,class:"preview-switch"},ze=se({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(r){const _=r,g=Se(l=>pe(_.selectedTagIds,l)),{queue:D,images:i,onContextMenuClickU:C,stackViewEl:G,previewIdx:c,previewing:h,onPreviewVisibleChange:E,previewImgMove:w,canPreview:S,itemSize:x,gridItems:N,showGenInfo:m,imageGenInfo:b,q:U,multiSelectedIdxs:v,onFileItemClick:J,scroller:M,showMenuIdx:f,onFileDragStart:L,onFileDragEnd:P,cellWidth:q,onScroll:y,saveAllFileAsJson:K,saveLoadedFileAsJson:O}=xe(g);ne(()=>_.selectedTagIds,async()=>{var l;await g.reset(),await oe(),(l=M.value)==null||l.scrollToItem(0),y()},{immediate:!0});const Q=ie(),{onClearAllSelected:W,onSelectAll:Y,onReverseSelect:j}=Ce();return(l,t)=>{const H=ke,X=re,Z=ce,A=B,ee=B,te=_e;return u(),I("div",{class:"container",ref_key:"stackViewEl",ref:G},[s(H,{show:!!e(v).length||e(Q).keepMultiSelect,onClearAllSelected:e(W),onSelectAll:e(Y),onReverseSelect:e(j)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),s(te,{size:"large",spinning:!e(D).isIdle},{default:n(()=>{var T,$;return[s(Z,{visible:e(m),"onUpdate:visible":t[1]||(t[1]=o=>R(m)?m.value=o:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=o=>m.value=!1)},{cancelText:n(()=>[]),default:n(()=>[s(X,{active:"",loading:!e(U).isIdle},{default:n(()=>[d("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=o=>e(ae)(e(b)))},[d("div",ye,a(l.$t("doubleClickToCopy")),1),p(" "+a(e(b)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),d("div",Ae,[s(A,{onClick:e(O)},{default:n(()=>[p(a(l.$t("saveLoadedImageAsJson")),1)]),_:1},8,["onClick"]),s(A,{onClick:e(K)},{default:n(()=>[p(a(l.$t("saveAllAsJson")),1)]),_:1},8,["onClick"])]),(T=e(i))!=null&&T.length?(u(),V(e(he),{key:0,ref_key:"scroller",ref:M,class:"file-list",items:e(i),"item-size":e(x).first,"key-field":"fullpath","item-secondary-size":e(x).second,gridItems:e(N),onScroll:e(y)},{after:n(()=>[Te]),default:n(({item:o,index:F})=>[s(we,{idx:F,file:o,"cell-width":e(q),"show-menu-idx":e(f),"onUpdate:showMenuIdx":t[3]||(t[3]=le=>R(f)?f.value=le:null),onDragstart:e(L),onDragend:e(P),onFileItemClick:e(J),"full-screen-preview-image-url":e(i)[e(c)]?e(de)(e(i)[e(c)]):"",selected:e(v).includes(F),onContextMenuClick:e(C),onPreviewVisibleChange:e(E),"is-selected-mutil-files":e(v).length>1},null,8,["idx","file","cell-width","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange","is-selected-mutil-files"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):e(g).load&&l.selectedTagIds.and_tags.length===1&&!(($=l.selectedTagIds.folder_paths_str)!=null&&$.trim())?(u(),I("div",$e,[d("div",Fe,[d("p",Re,a(l.$t("tagSearchNoResultsMessage")),1),s(ee,{onClick:t[4]||(t[4]=o=>e(be)()),type:"primary"},{default:n(()=>[p(a(l.$t("rebuildImageIndex")),1)]),_:1})])])):k("",!0),e(h)?(u(),I("div",Ve,[s(e(ve),{onClick:t[5]||(t[5]=o=>e(w)("prev")),class:z({disable:!e(S)("prev")})},null,8,["class"]),s(e(fe),{onClick:t[6]||(t[6]=o=>e(w)("next")),class:z({disable:!e(S)("next")})},null,8,["class"])])):k("",!0)]}),_:1},8,["spinning"]),e(h)&&e(i)&&e(i)[e(c)]?(u(),V(Ie,{key:0,file:e(i)[e(c)],idx:e(c),onContextMenuClick:e(C)},null,8,["file","idx","onContextMenuClick"])):k("",!0)],512)}}});const Le=ge(ze,[["__scopeId","data-v-479efe51"]]);export{Le as default};
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
import{d as X,s as Z,a4 as ee,o as r,k as v,c as l,A as n,C as e,E as F,l as c,G as se,t as a,m as u,z as V,Q as te,p as f,R as z,U as le,V as ie,Y as D,bC as ne,q as oe}from"./index-423bec18.js";import{L as ae,R as de,f as re,S as ce}from"./fullScreenContextMenu-b87ca1f9.js";import{g as me,F as ue}from"./FileItem-08fb0ce5.js";import{c as pe,u as ge}from"./hook-edaa5e66.js";import{o as ve}from"./functionalCallableComp-81426c02.js";import"./index-8ac7462b.js";import"./index-fc855220.js";const fe={class:"hint"},Ie={class:"action-bar"},ke={key:1},Ce={class:"no-res-hint"},_e={class:"hint"},we={key:2,class:"preview-switch"},he=X({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(B){const I=B,p=pe(t=>ne(I.selectedTagIds,t)),{queue:R,images:o,onContextMenuClickU:k,stackViewEl:G,previewIdx:d,previewing:C,onPreviewVisibleChange:E,previewImgMove:_,canPreview:w,itemSize:h,gridItems:N,showGenInfo:m,imageGenInfo:b,q:U,multiSelectedIdxs:x,onFileItemClick:J,scroller:y,showMenuIdx:g,onFileDragStart:L,onFileDragEnd:P,cellWidth:q,onScroll:M,saveAllFileAsJson:O,saveLoadedFileAsJson:Q}=ge(p);return Z(()=>I.selectedTagIds,async()=>{var t;await p.reset(),await ee(),(t=y.value)==null||t.scrollToItem(0),M()},{immediate:!0}),(t,s)=>{const W=le,Y=ie,S=D,j=D,H=ce;return r(),v("div",{class:"container",ref_key:"stackViewEl",ref:G},[l(H,{size:"large",spinning:!e(R).isIdle},{default:n(()=>{var A,T;return[l(Y,{visible:e(m),"onUpdate:visible":s[1]||(s[1]=i=>F(m)?m.value=i:null),width:"70vw","mask-closable":"",onOk:s[2]||(s[2]=i=>m.value=!1)},{cancelText:n(()=>[]),default:n(()=>[l(W,{active:"",loading:!e(U).isIdle},{default:n(()=>[c("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:s[0]||(s[0]=i=>e(se)(e(b)))},[c("div",fe,a(t.$t("doubleClickToCopy")),1),u(" "+a(e(b)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),c("div",Ie,[l(S,{onClick:e(Q)},{default:n(()=>[u(a(t.$t("saveLoadedImageAsJson")),1)]),_:1},8,["onClick"]),l(S,{onClick:e(O)},{default:n(()=>[u(a(t.$t("saveAllAsJson")),1)]),_:1},8,["onClick"])]),(A=e(o))!=null&&A.length?(r(),V(e(me),{key:0,ref_key:"scroller",ref:y,class:"file-list",items:e(o),"item-size":e(h).first,"key-field":"fullpath","item-secondary-size":e(h).second,gridItems:e(N),onScroll:e(M)},{default:n(({item:i,index:$})=>[l(ue,{idx:$,file:i,"cell-width":e(q),"show-menu-idx":e(g),"onUpdate:showMenuIdx":s[3]||(s[3]=K=>F(g)?g.value=K:null),onDragstart:e(L),onDragend:e(P),onFileItemClick:e(J),"full-screen-preview-image-url":e(o)[e(d)]?e(te)(e(o)[e(d)]):"",selected:e(x).includes($),onContextMenuClick:e(k),onPreviewVisibleChange:e(E),"is-selected-mutil-files":e(x).length>1},null,8,["idx","file","cell-width","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange","is-selected-mutil-files"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):e(p).load&&t.selectedTagIds.and_tags.length===1&&!((T=t.selectedTagIds.folder_paths_str)!=null&&T.trim())?(r(),v("div",ke,[c("div",Ce,[c("p",_e,a(t.$t("tagSearchNoResultsMessage")),1),l(j,{onClick:s[4]||(s[4]=i=>e(ve)()),type:"primary"},{default:n(()=>[u(a(t.$t("rebuildImageIndex")),1)]),_:1})])])):f("",!0),e(C)?(r(),v("div",we,[l(e(ae),{onClick:s[5]||(s[5]=i=>e(_)("prev")),class:z({disable:!e(w)("prev")})},null,8,["class"]),l(e(de),{onClick:s[6]||(s[6]=i=>e(_)("next")),class:z({disable:!e(w)("next")})},null,8,["class"])])):f("",!0)]}),_:1},8,["spinning"]),e(C)&&e(o)&&e(o)[e(d)]?(r(),V(re,{key:0,file:e(o)[e(d)],idx:e(d),onContextMenuClick:e(k)},null,8,["file","idx","onContextMenuClick"])):f("",!0)],512)}}});const $e=oe(he,[["__scopeId","data-v-d36b6e6b"]]);export{$e as default};
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
.preview-switch[data-v-479efe51]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-479efe51]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-479efe51]{opacity:0;pointer-events:none;cursor:none}.container[data-v-479efe51]{background:var(--zp-secondary-background);position:relative}.container .action-bar[data-v-479efe51]{display:flex;align-items:center;user-select:none;gap:4px;padding:4px}.container .action-bar>*[data-v-479efe51]{flex-wrap:wrap}.container .file-list[data-v-479efe51]{list-style:none;padding:8px;overflow:auto;height:calc(var(--pane-max-height) - 40px);width:100%}.container .no-res-hint[data-v-479efe51]{height:var(--pane-max-height);display:flex;align-items:center;flex-direction:column;justify-content:center}.container .no-res-hint .hint[data-v-479efe51]{font-size:1.6em;margin-bottom:2em;text-align:center}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
[data-v-ecedc00a] .float-panel{position:fixed}.regex-icon[data-v-ecedc00a]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-ecedc00a]{height:1.5em}.regex-icon[data-v-ecedc00a]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-ecedc00a]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-ecedc00a]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-ecedc00a]{padding-bottom:8px}.search-bar .form-name[data-v-ecedc00a]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-ecedc00a]{margin-right:4px}.preview-switch[data-v-ecedc00a]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-ecedc00a]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-ecedc00a]{opacity:0;pointer-events:none;cursor:none}.container[data-v-ecedc00a]{background:var(--zp-secondary-background);position:relative}.container .file-list[data-v-ecedc00a]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%}
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
||||||
.regex-icon[data-v-15925450]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-15925450]{height:1.5em}.regex-icon[data-v-15925450]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-15925450]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-15925450]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-15925450]{padding-bottom:8px}.search-bar .form-name[data-v-15925450]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-15925450]{margin-right:4px}.preview-switch[data-v-15925450]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-15925450]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-15925450]{opacity:0;pointer-events:none;cursor:none}.container[data-v-15925450]{background:var(--zp-secondary-background)}.container .file-list[data-v-15925450]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%}
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{d as v,cd as C,bN as I,o as i,k as _,l as f,c,A as r,m as h,t as d,C as e,z,Q as F,ce as B,cf as x,Y as $,q as R}from"./index-423bec18.js";import{u as S,b as A,j as E,F as V,g as N}from"./FileItem-08fb0ce5.js";import"./functionalCallableComp-81426c02.js";import"./index-fc855220.js";import"./index-8ac7462b.js";const T={class:"actions-panel actions"},L={key:0,class:"file-list"},U={class:"hint"},j=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(q){const{stackViewEl:w}=S().toRefs(),{itemSize:p,gridItems:k,cellWidth:b}=A(),n=E(),{selectdFiles:l}=C(n),m=I(),y=async t=>{const s=B(t);s&&n.addFiles(s.nodes)},D=async()=>{m.pushAction(async()=>{const t=await x.value.post("/zip",{paths:l.value.map(o=>o.fullpath)},{responseType:"blob"}),s=window.URL.createObjectURL(new Blob([t.data])),a=document.createElement("a");a.href=s,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},g=t=>{l.value.splice(t,1)};return(t,s)=>{const a=$;return i(),_("div",{class:"container",ref_key:"stackViewEl",ref:w,onDrop:y},[f("div",T,[c(a,{onClick:s[0]||(s[0]=o=>e(n).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(m).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(l).length?(i(),z(e(N),{key:1,ref:"scroller",class:"file-list",items:e(l).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(k)},{default:r(({item:o,index:u})=>[c(V,{idx:u,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:H=>g(u),"full-screen-preview-image-url":e(F)(o),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","onCloseIconClick","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):(i(),_("div",L,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const J=R(j,[["__scopeId","data-v-aab31da2"]]);export{J as default};
|
import{d as v,cd as C,bN as I,o as i,k as _,l as f,c,A as r,m as h,t as d,B as e,z,Q as B,ce as F,cf as x,Y as $,q as R}from"./index-50eccecb.js";import{u as S,b as A,k as E,F as V,h as N}from"./FileItem-17604ae5.js";import"./functionalCallableComp-07abeb37.js";import"./index-25e23286.js";import"./index-d087ab29.js";const T={class:"actions-panel actions"},L={key:0,class:"file-list"},U={class:"hint"},q=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(H){const{stackViewEl:k}=S().toRefs(),{itemSize:p,gridItems:w,cellWidth:b}=A(),n=E(),{selectdFiles:l}=C(n),m=I(),y=async t=>{const s=F(t);s&&n.addFiles(s.nodes)},D=async()=>{m.pushAction(async()=>{const t=await x.value.post("/zip",{paths:l.value.map(o=>o.fullpath)},{responseType:"blob"}),s=window.URL.createObjectURL(new Blob([t.data])),a=document.createElement("a");a.href=s,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},g=t=>{l.value.splice(t,1)};return(t,s)=>{const a=$;return i(),_("div",{class:"container",ref_key:"stackViewEl",ref:k,onDrop:y},[f("div",T,[c(a,{onClick:s[0]||(s[0]=o=>e(n).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(m).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(l).length?(i(),z(e(N),{key:1,ref:"scroller",class:"file-list",items:e(l).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(w)},{default:r(({item:o,index:u})=>[c(V,{idx:u,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:Q=>g(u),"full-screen-preview-image-url":e(B)(o),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","onCloseIconClick","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):(i(),_("div",L,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const J=R(q,[["__scopeId","data-v-aab31da2"]]);export{J as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
import{u as w,b as k,F as y,g as x}from"./FileItem-08fb0ce5.js";import{d as F,r as h,c5 as C,v as D,aS as I,aW as b,o as E,k as S,c,A as V,C as e,Q as z,ce as B,cg as A,q as R}from"./index-423bec18.js";import"./functionalCallableComp-81426c02.js";import"./index-fc855220.js";import"./index-8ac7462b.js";const q=F({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,d=h(),{stackViewEl:m}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=k(),g=C(),s=D(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=A([...s.value,...l.nodes]))},v=a=>{s.value.splice(a,1)};return I(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>b(s.value),setFiles:a=>s.value=a})}),(a,l)=>(E(),S("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(x),{ref:"scroller",class:"file-list",items:s.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:V(({item:t,index:r})=>{var n;return[c(y,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:K=>v(r),"full-screen-preview-image-url":e(z)(t),"extra-tags":(n=t==null?void 0:t.tags)==null?void 0:n.map(e(g).tagConvert),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","enable-close-icon","onCloseIconClick","full-screen-preview-image-url","extra-tags"])]}),_:1},8,["items","item-size","item-secondary-size","gridItems"])],544))}});const M=R(q,[["__scopeId","data-v-f35f4802"]]);export{M as default};
|
import{u as w,b as k,F as y,h as x}from"./FileItem-17604ae5.js";import{d as h,r as F,c5 as D,v as I,aS as b,aW as C,o as E,k as S,c,A as V,B as e,Q as z,ce as B,cg as A,q as R}from"./index-50eccecb.js";import"./functionalCallableComp-07abeb37.js";import"./index-25e23286.js";import"./index-d087ab29.js";const q=h({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,d=F(),{stackViewEl:m}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=k(),g=D(),s=I(o.files??[]),_=async a=>{const l=B(a);o.allowDragAndDrop&&l&&(s.value=A([...s.value,...l.nodes]))},v=a=>{s.value.splice(a,1)};return b(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(s.value),setFiles:a=>s.value=a})}),(a,l)=>(E(),S("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(x),{ref:"scroller",class:"file-list",items:s.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:V(({item:t,index:r})=>{var n;return[c(y,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:K=>v(r),"full-screen-preview-image-url":e(z)(t),"extra-tags":(n=t==null?void 0:t.tags)==null?void 0:n.map(e(g).tagConvert),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","enable-close-icon","onCloseIconClick","full-screen-preview-image-url","extra-tags"])]}),_:1},8,["items","item-size","item-secondary-size","gridItems"])],544))}});const M=R(q,[["__scopeId","data-v-f35f4802"]]);export{M as default};
|
||||||
|
|
@ -1 +1 @@
|
||||||
import{bd as F,v as g,b$ as R,c0 as x,aj as A,ag as q,bN as D,b3 as j,c1 as z}from"./index-423bec18.js";import{u as G,b as L,f as O,c as Q,d as H,e as T,h as U}from"./FileItem-08fb0ce5.js";let W=0;const $=()=>++W,B=(o,c,{dataUpdateStrategy:l="replace"}={})=>{const n=F([""]),u=g(!1),t=g(),a=g(!1);let f=g(-1);const v=new Set,w=e=>{var s;l==="replace"?t.value=e:l==="merge"&&(A((Array.isArray(t.value)||typeof t.value>"u")&&Array.isArray(e),"数据更新策略为合并时仅可用于值为数组的情况"),t.value=[...(s=t==null?void 0:t.value)!==null&&s!==void 0?s:[],...e])},d=e=>x(void 0,void 0,void 0,function*(){if(a.value||u.value&&typeof e>"u")return!1;a.value=!0;const s=$();f.value=s;try{let r;if(typeof e=="number"){if(r=n[e],typeof r!="string")return!1}else r=n[n.length-1];const m=yield o(r);if(v.has(s))return v.delete(s),!1;w(c(m));const i=m.cursor;if((e===n.length-1||typeof e!="number")&&(u.value=!i.has_next,i.has_next)){const p=i.next_cursor||i.next;A(typeof p=="string"),n.push(p)}}finally{f.value===s&&(a.value=!1)}return!0}),h=()=>{v.add(f.value),a.value=!1},S=(e=!1)=>x(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&h(),A(!a.value),n.splice(0,n.length,""),a.value=!1,t.value=void 0,u.value=!1,s&&(yield d())}),I=()=>({next:()=>x(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return R({abort:h,load:u,next:d,res:t,loading:a,cursorStack:n,reset:S,[Symbol.asyncIterator]:I,iter:{[Symbol.asyncIterator]:I}})},Y=o=>F(B(o,c=>c.files,{dataUpdateStrategy:"merge"})),Z=o=>{const c=F(new Set),l=q(()=>(o.res??[]).filter(y=>!c.has(y.fullpath))),n=D(),{stackViewEl:u,multiSelectedIdxs:t,stack:a,scroller:f}=G({images:l}).toRefs(),{itemSize:v,gridItems:w,cellWidth:d,onScroll:h}=L({fetchNext:()=>o.next()}),{showMenuIdx:S}=O(),{onFileDragStart:I,onFileDragEnd:e}=Q(),{showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p}=H({openNext:j}),{previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J}=T(),N=async(y,b,P)=>{a.value=[{curr:"",files:l.value}],await i(y,b,P)};U("removeFiles",async({paths:y})=>{y.forEach(b=>c.add(b))});const k=()=>{z(l.value)};return{images:l,scroller:f,queue:n,iter:o,onContextMenuClickU:N,stackViewEl:u,previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J,itemSize:v,gridItems:w,showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p,showMenuIdx:S,multiSelectedIdxs:t,onFileDragStart:I,onFileDragEnd:e,cellWidth:d,onScroll:h,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()}}};export{Y as c,Z as u};
|
import{bd as F,v as g,b$ as R,c0 as x,aj as A,ag as q,bN as D,b3 as j,c1 as z}from"./index-50eccecb.js";import{u as G,b as L,f as O,c as Q,d as H,e as T,i as U}from"./FileItem-17604ae5.js";let W=0;const $=()=>++W,B=(o,c,{dataUpdateStrategy:l="replace"}={})=>{const n=F([""]),u=g(!1),t=g(),a=g(!1);let f=g(-1);const v=new Set,w=e=>{var s;l==="replace"?t.value=e:l==="merge"&&(A((Array.isArray(t.value)||typeof t.value>"u")&&Array.isArray(e),"数据更新策略为合并时仅可用于值为数组的情况"),t.value=[...(s=t==null?void 0:t.value)!==null&&s!==void 0?s:[],...e])},d=e=>x(void 0,void 0,void 0,function*(){if(a.value||u.value&&typeof e>"u")return!1;a.value=!0;const s=$();f.value=s;try{let r;if(typeof e=="number"){if(r=n[e],typeof r!="string")return!1}else r=n[n.length-1];const m=yield o(r);if(v.has(s))return v.delete(s),!1;w(c(m));const i=m.cursor;if((e===n.length-1||typeof e!="number")&&(u.value=!i.has_next,i.has_next)){const p=i.next_cursor||i.next;A(typeof p=="string"),n.push(p)}}finally{f.value===s&&(a.value=!1)}return!0}),h=()=>{v.add(f.value),a.value=!1},S=(e=!1)=>x(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&h(),A(!a.value),n.splice(0,n.length,""),a.value=!1,t.value=void 0,u.value=!1,s&&(yield d())}),I=()=>({next:()=>x(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return R({abort:h,load:u,next:d,res:t,loading:a,cursorStack:n,reset:S,[Symbol.asyncIterator]:I,iter:{[Symbol.asyncIterator]:I}})},Y=o=>F(B(o,c=>c.files,{dataUpdateStrategy:"merge"})),Z=o=>{const c=F(new Set),l=q(()=>(o.res??[]).filter(y=>!c.has(y.fullpath))),n=D(),{stackViewEl:u,multiSelectedIdxs:t,stack:a,scroller:f}=G({images:l}).toRefs(),{itemSize:v,gridItems:w,cellWidth:d,onScroll:h}=L({fetchNext:()=>o.next()}),{showMenuIdx:S}=O(),{onFileDragStart:I,onFileDragEnd:e}=Q(),{showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p}=H({openNext:j}),{previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J}=T(),N=async(y,b,P)=>{a.value=[{curr:"",files:l.value}],await i(y,b,P)};U("removeFiles",async({paths:y})=>{y.forEach(b=>c.add(b))});const k=()=>{z(l.value)};return{images:l,scroller:f,queue:n,iter:o,onContextMenuClickU:N,stackViewEl:u,previewIdx:C,previewing:_,onPreviewVisibleChange:E,previewImgMove:M,canPreview:J,itemSize:v,gridItems:w,showGenInfo:s,imageGenInfo:r,q:m,onContextMenuClick:i,onFileItemClick:p,showMenuIdx:S,multiSelectedIdxs:t,onFileDragStart:I,onFileDragEnd:e,cellWidth:d,onScroll:h,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!o.load;)await o.next();k()}}};export{Y as c,Z as u};
|
||||||
|
|
@ -1 +1 @@
|
||||||
import{d as E,bg as $,v as f,s as M,_ as T,a as c,a1 as W,h as g,c as v,P as z}from"./index-423bec18.js";var G=["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"],H={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:z.any,required:Boolean};const L=E({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:$(H,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup:function(a,d){var t=d.attrs,h=d.emit,x=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),x({focus:function(){var e;(e=i.value)===null||e===void 0||e.focus()},blur:function(){var e;(e=i.value)===null||e===void 0||e.blur()}});var l=f(),m=function(e){if(!a.disabled){a.checked===void 0&&(o.value=e.target.checked),e.shiftKey=l.value;var r={target:c(c({},a),{},{checked:e.target.checked}),stopPropagation:function(){e.stopPropagation()},preventDefault:function(){e.preventDefault()},nativeEvent:e};a.checked!==void 0&&(i.value.checked=!!a.checked),h("change",r),l.value=!1}},C=function(e){h("click",e),l.value=e.shiftKey};return function(){var n,e=a.prefixCls,r=a.name,s=a.id,p=a.type,b=a.disabled,K=a.readonly,P=a.tabindex,B=a.autofocus,S=a.value,N=a.required,_=T(a,G),q=t.class,D=t.onFocus,j=t.onBlur,w=t.onKeydown,A=t.onKeypress,F=t.onKeyup,y=c(c({},_),t),O=Object.keys(y).reduce(function(k,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(k[u]=y[u]),k},{}),R=W(e,q,(n={},g(n,"".concat(e,"-checked"),o.value),g(n,"".concat(e,"-disabled"),b),n)),V=c(c({name:r,id:s,type:p,readonly:K,disabled:b,tabindex:P,class:"".concat(e,"-input"),checked:!!o.value,autofocus:B,value:S},O),{},{onChange:m,onClick:C,onFocus:D,onBlur:j,onKeydown:w,onKeypress:A,onKeyup:F,required:N});return v("span",{class:R},[v("input",c({ref:i},V),null),v("span",{class:"".concat(e,"-inner")},null)])}}});export{L as V};
|
import{d as E,bg as $,v as f,s as M,_ as T,a as c,a1 as W,h as g,c as v,P as z}from"./index-50eccecb.js";var G=["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"],H={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:z.any,required:Boolean};const L=E({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:$(H,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup:function(a,d){var t=d.attrs,h=d.emit,x=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),x({focus:function(){var e;(e=i.value)===null||e===void 0||e.focus()},blur:function(){var e;(e=i.value)===null||e===void 0||e.blur()}});var l=f(),m=function(e){if(!a.disabled){a.checked===void 0&&(o.value=e.target.checked),e.shiftKey=l.value;var r={target:c(c({},a),{},{checked:e.target.checked}),stopPropagation:function(){e.stopPropagation()},preventDefault:function(){e.preventDefault()},nativeEvent:e};a.checked!==void 0&&(i.value.checked=!!a.checked),h("change",r),l.value=!1}},C=function(e){h("click",e),l.value=e.shiftKey};return function(){var n,e=a.prefixCls,r=a.name,s=a.id,p=a.type,b=a.disabled,K=a.readonly,P=a.tabindex,B=a.autofocus,S=a.value,N=a.required,_=T(a,G),q=t.class,D=t.onFocus,j=t.onBlur,w=t.onKeydown,A=t.onKeypress,F=t.onKeyup,y=c(c({},_),t),O=Object.keys(y).reduce(function(k,u){return(u.substr(0,5)==="aria-"||u.substr(0,5)==="data-"||u==="role")&&(k[u]=y[u]),k},{}),R=W(e,q,(n={},g(n,"".concat(e,"-checked"),o.value),g(n,"".concat(e,"-disabled"),b),n)),V=c(c({name:r,id:s,type:p,readonly:K,disabled:b,tabindex:P,class:"".concat(e,"-input"),checked:!!o.value,autofocus:B,value:S},O),{},{onChange:m,onClick:C,onFocus:D,onBlur:j,onKeydown:w,onKeypress:A,onKeyup:F,required:N});return v("span",{class:R},[v("input",c({ref:i},V),null),v("span",{class:"".concat(e,"-inner")},null)])}}});export{L as V};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.base-info[data-v-afd25667]{position:absolute;padding:4px;font-size:.8em;background:var(--zp-primary-background);color:var(--zp-primary);left:0;bottom:0;border-top-right-radius:4px}.preview-switch[data-v-f2221f9e]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-f2221f9e]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-f2221f9e]{opacity:0;pointer-events:none;cursor:none}.location-act[data-v-f2221f9e]{margin-left:8px}.location-act .copy[data-v-f2221f9e]{margin-right:4px}@media (max-width: 768px){.location-act[data-v-f2221f9e]{display:flex;flex-direction:column}.location-act>*[data-v-f2221f9e],.location-act .copy[data-v-f2221f9e]{margin:2px}}.breadcrumb[data-v-f2221f9e]{display:flex;align-items:center}.breadcrumb>*[data-v-f2221f9e]{margin-right:4px}@media (max-width: 768px){.breadcrumb[data-v-f2221f9e]{width:100%}.breadcrumb .ant-breadcrumb>*[data-v-f2221f9e]{display:inline-block}}.container[data-v-f2221f9e]{background:var(--zp-secondary-background);height:var(--pane-max-height)}.location-bar[data-v-f2221f9e]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}@media (max-width: 768px){.location-bar[data-v-f2221f9e]{flex-direction:column}.location-bar[data-v-f2221f9e] ::-webkit-scrollbar{height:2px;background-color:var(--zp-secondary-variant-background)}.location-bar .actions[data-v-f2221f9e]{padding:4px 0;width:100%;overflow:auto;display:flex;align-items:center}.location-bar .actions>*[data-v-f2221f9e]{flex-shrink:0}}.location-bar .actions[data-v-f2221f9e]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-f2221f9e]{margin-left:8px}.view[data-v-f2221f9e]{padding:8px;height:calc(100vh - 48px)}.view .file-list[data-v-f2221f9e]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-f2221f9e]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}
|
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.base-info[data-v-afd25667]{position:absolute;padding:4px;font-size:.8em;background:var(--zp-primary-background);color:var(--zp-primary);left:0;bottom:0;border-top-right-radius:4px}.preview-switch[data-v-e49f51b8]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-e49f51b8]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-e49f51b8]{opacity:0;pointer-events:none;cursor:none}.location-act[data-v-e49f51b8]{margin-left:8px}.location-act .copy[data-v-e49f51b8]{margin-right:4px}@media (max-width: 768px){.location-act[data-v-e49f51b8]{display:flex;flex-direction:column}.location-act>*[data-v-e49f51b8],.location-act .copy[data-v-e49f51b8]{margin:2px}}.breadcrumb[data-v-e49f51b8]{display:flex;align-items:center}.breadcrumb>*[data-v-e49f51b8]{margin-right:4px}@media (max-width: 768px){.breadcrumb[data-v-e49f51b8]{width:100%}.breadcrumb .ant-breadcrumb>*[data-v-e49f51b8]{display:inline-block}}.container[data-v-e49f51b8]{background:var(--zp-secondary-background);height:var(--pane-max-height)}.location-bar[data-v-e49f51b8]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}@media (max-width: 768px){.location-bar[data-v-e49f51b8]{flex-direction:column}.location-bar[data-v-e49f51b8] ::-webkit-scrollbar{height:2px;background-color:var(--zp-secondary-variant-background)}.location-bar .actions[data-v-e49f51b8]{padding:4px 0;width:100%;overflow:auto;display:flex;align-items:center}.location-bar .actions>*[data-v-e49f51b8]{flex-shrink:0}}.location-bar .actions[data-v-e49f51b8]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-e49f51b8]{margin-left:8px}.view[data-v-e49f51b8]{padding:8px;height:calc(100vh - 48px)}.view .file-list[data-v-e49f51b8]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-e49f51b8]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<link rel="icon" href="/favicon.ico" />
|
<link rel="icon" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Infinite Image Browsing</title>
|
<title>Infinite Image Browsing</title>
|
||||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-423bec18.js"></script>
|
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-50eccecb.js"></script>
|
||||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-4ed4b1ce.css">
|
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-4ed4b1ce.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { useGlobalStore } from '@/store/useGlobalStore'
|
||||||
|
defineProps<{
|
||||||
|
show: boolean
|
||||||
|
}>()
|
||||||
|
const emit = defineEmits<{
|
||||||
|
selectAll: [],
|
||||||
|
reverseSelect: [],
|
||||||
|
clearAllSelected: []
|
||||||
|
}>()
|
||||||
|
const g = useGlobalStore()
|
||||||
|
|
||||||
|
const onExit = () => {
|
||||||
|
emit('clearAllSelected')
|
||||||
|
g.keepMultiSelect = false
|
||||||
|
}
|
||||||
|
|
||||||
|
const onKeepClick = () => {
|
||||||
|
g.keepMultiSelect = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="float-panel" v-if="show">
|
||||||
|
<div v-if="g.keepMultiSelect" class="select-actions">
|
||||||
|
<a-button size="small" @click="emit('selectAll')">{{ $t('select-all') }}</a-button>
|
||||||
|
<a-button size="small" @click="emit('reverseSelect')">{{ $t('rerverse-select') }}</a-button>
|
||||||
|
<a-button size="small" @click="emit('clearAllSelected')">{{ $t('clear-all-selected') }}</a-button>
|
||||||
|
<a-button size="small" @click="onExit">{{ $t('exit') }}</a-button>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<a-button size="small" type="primary" @click="onKeepClick">{{ $t('keep-multi-selected') }}</a-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.select-actions > :not(:last-child) {
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
.float-panel {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 32px;
|
||||||
|
right: 32px;
|
||||||
|
background: white;
|
||||||
|
border-radius: 4px;
|
||||||
|
z-index: 1000;
|
||||||
|
padding: 8px;
|
||||||
|
box-shadow: 0px 0px 4px var(--zp-secondary);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
import type { IIBI18nMap } from '.'
|
import type { IIBI18nMap } from '.'
|
||||||
|
|
||||||
export const en: IIBI18nMap = {
|
export const en: IIBI18nMap = {
|
||||||
|
exit: 'Exit',
|
||||||
|
'select-all': 'Select All',
|
||||||
|
'rerverse-select': 'Reverse Select',
|
||||||
|
'clear-all-selected': 'Clear All Selected',
|
||||||
|
'keep-multi-selected': 'Keep Multi-selected',
|
||||||
'Source Identifier': 'Source',
|
'Source Identifier': 'Source',
|
||||||
openWithDefaultApp: 'Open with default app',
|
openWithDefaultApp: 'Open with default app',
|
||||||
saveSelectedAsJson: 'Save selected image info',
|
saveSelectedAsJson: 'Save selected image info',
|
||||||
|
|
@ -8,7 +13,7 @@ export const en: IIBI18nMap = {
|
||||||
saveLoadedImageAsJson: 'Save loaded image info',
|
saveLoadedImageAsJson: 'Save loaded image info',
|
||||||
selectedItems: ' {0} selected',
|
selectedItems: ' {0} selected',
|
||||||
items: '{0} items',
|
items: '{0} items',
|
||||||
scrollDownToComparePrompt: "Scroll down to compare prompts",
|
scrollDownToComparePrompt: 'Scroll down to compare prompts',
|
||||||
sourceText: 'Source Text',
|
sourceText: 'Source Text',
|
||||||
structuredData: 'Structured Data',
|
structuredData: 'Structured Data',
|
||||||
searchScope: 'Search Scope',
|
searchScope: 'Search Scope',
|
||||||
|
|
@ -31,14 +36,14 @@ export const en: IIBI18nMap = {
|
||||||
archive: 'Archive',
|
archive: 'Archive',
|
||||||
zipDownload: 'Download as ZIP',
|
zipDownload: 'Download as ZIP',
|
||||||
batchDownloaDDragAndDropHint:
|
batchDownloaDDragAndDropHint:
|
||||||
"Use drag and drop or the 'Send to Batch Download' option in the right-click menu to add images from other pages here. Multiple selections are supported.",
|
'Use drag and drop or the \'Send to Batch Download\' option in the right-click menu to add images from other pages here. Multiple selections are supported.',
|
||||||
lyco: 'LyCORIS',
|
lyco: 'LyCORIS',
|
||||||
sendToThirdPartyExtension: 'Send to third-party extension',
|
sendToThirdPartyExtension: 'Send to third-party extension',
|
||||||
createFolder: 'Create Folder',
|
createFolder: 'Create Folder',
|
||||||
inputFolderName: 'Input Folder Name',
|
inputFolderName: 'Input Folder Name',
|
||||||
desktop: 'Desktop',
|
desktop: 'Desktop',
|
||||||
move: 'Move',
|
move: 'Move',
|
||||||
majorUpdateCustomCellSizeTips: `Major Update: You can now customize the size of the grid image. Adjust it in the global settings page or in the "More" menu in the upper right corner.`,
|
majorUpdateCustomCellSizeTips: 'Major Update: You can now customize the size of the grid image. Adjust it in the global settings page or in the "More" menu in the upper right corner.',
|
||||||
ImageBrowsingSettings: 'Image Browsing Settings',
|
ImageBrowsingSettings: 'Image Browsing Settings',
|
||||||
other: 'Other',
|
other: 'Other',
|
||||||
livePreview: 'Live Preview',
|
livePreview: 'Live Preview',
|
||||||
|
|
@ -89,7 +94,7 @@ export const en: IIBI18nMap = {
|
||||||
defaultSortingMethod: 'Default Sorting Method',
|
defaultSortingMethod: 'Default Sorting Method',
|
||||||
defaultViewMode: 'Default View Mode',
|
defaultViewMode: 'Default View Mode',
|
||||||
showPreviewImage: 'Show Preview Image',
|
showPreviewImage: 'Show Preview Image',
|
||||||
dontShowAgain: "Don't show again",
|
dontShowAgain: 'Don\'t show again',
|
||||||
accessControlModeTips:
|
accessControlModeTips:
|
||||||
'To ensure data security, you are currently running in access control mode, which only allows access to authorized folders. You can adjust the access permissions settings (IIB_ACCESS_CONTROL) by editing the .env file in the root directory of this extension. If the .env file does not exist, you can copy the .env.example file and rename it to .env.',
|
'To ensure data security, you are currently running in access control mode, which only allows access to authorized folders. You can adjust the access permissions settings (IIB_ACCESS_CONTROL) by editing the .env file in the root directory of this extension. If the .env file does not exist, you can copy the .env.example file and rename it to .env.',
|
||||||
changlog: 'Change log',
|
changlog: 'Change log',
|
||||||
|
|
@ -121,7 +126,7 @@ export const en: IIBI18nMap = {
|
||||||
'index.expired': 'Index expired, updating automatically',
|
'index.expired': 'Index expired, updating automatically',
|
||||||
manualExitFullScreen:
|
manualExitFullScreen:
|
||||||
'You have deleted the last image and may need to manually exit Full-screen view',
|
'You have deleted the last image and may need to manually exit Full-screen view',
|
||||||
'walk-mode-move-message': "Moving position is only allowed using 'Quick Move' in walk mode",
|
'walk-mode-move-message': 'Moving position is only allowed using \'Quick Move\' in walk mode',
|
||||||
refreshCompleted: 'Refresh completed',
|
refreshCompleted: 'Refresh completed',
|
||||||
//! MissingTranslations
|
//! MissingTranslations
|
||||||
addedTagToImage: 'Tag "{tag}" has been added to this image',
|
addedTagToImage: 'Tag "{tag}" has been added to this image',
|
||||||
|
|
@ -148,7 +153,7 @@ export const en: IIBI18nMap = {
|
||||||
lora: 'LoRA',
|
lora: 'LoRA',
|
||||||
size: 'Size',
|
size: 'Size',
|
||||||
pos: 'Positive Prompt',
|
pos: 'Positive Prompt',
|
||||||
unknownSavedDir: `Cannot find the saved folder (outdir_save field in the config)`,
|
unknownSavedDir: 'Cannot find the saved folder (outdir_save field in the config)',
|
||||||
errorOccurred: 'An error occurred',
|
errorOccurred: 'An error occurred',
|
||||||
useThumbnailPreview: 'Use thumbnail preview',
|
useThumbnailPreview: 'Use thumbnail preview',
|
||||||
gridThumbnailWidth: 'Grid thumbnail width',
|
gridThumbnailWidth: 'Grid thumbnail width',
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
export const zhHans = {
|
export const zhHans = {
|
||||||
|
exit: '退出',
|
||||||
|
'select-all': '全选',
|
||||||
|
'rerverse-select': '反选',
|
||||||
|
'clear-all-selected': '清除所有选择',
|
||||||
|
'keep-multi-selected': '保留多选',
|
||||||
'Source Identifier': '来源',
|
'Source Identifier': '来源',
|
||||||
openWithDefaultApp: '使用默认应用打开',
|
openWithDefaultApp: '使用默认应用打开',
|
||||||
saveSelectedAsJson: '保存选中图像信息',
|
saveSelectedAsJson: '保存选中图像信息',
|
||||||
saveAllAsJson: '保存所有图像信息',
|
saveAllAsJson: '保存所有图像信息',
|
||||||
saveLoadedImageAsJson: '保存已加载的图像信息',
|
saveLoadedImageAsJson: '保存已加载的图像信息',
|
||||||
items: "{0}个项目",
|
items: '{0}个项目',
|
||||||
selectedItems: "已选择{0}个项目",
|
selectedItems: '已选择{0}个项目',
|
||||||
scrollDownToComparePrompt: "向下滚查看Prompt比较",
|
scrollDownToComparePrompt: '向下滚查看Prompt比较',
|
||||||
sourceText: '源文本',
|
sourceText: '源文本',
|
||||||
structuredData: '结构化数据',
|
structuredData: '结构化数据',
|
||||||
searchScope: '搜索范围',
|
searchScope: '搜索范围',
|
||||||
|
|
@ -185,7 +190,7 @@ export const zhHans = {
|
||||||
livePreview: '实时预览',
|
livePreview: '实时预览',
|
||||||
other: '其他',
|
other: '其他',
|
||||||
ImageBrowsingSettings: '图像浏览设置',
|
ImageBrowsingSettings: '图像浏览设置',
|
||||||
majorUpdateCustomCellSizeTips: `重大更新:你可以自定义网格图像的大小了,在全局设置页或者右上角的“更多”里面进行调整`,
|
majorUpdateCustomCellSizeTips: '重大更新:你可以自定义网格图像的大小了,在全局设置页或者右上角的“更多”里面进行调整',
|
||||||
desktop: '桌面',
|
desktop: '桌面',
|
||||||
move: '移动',
|
move: '移动',
|
||||||
inputFolderName: '输入文件夹名',
|
inputFolderName: '输入文件夹名',
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,18 @@
|
||||||
import type { IIBI18nMap } from '.'
|
import type { IIBI18nMap } from '.'
|
||||||
|
|
||||||
export const zhHant: Partial<IIBI18nMap> = {
|
export const zhHant: Partial<IIBI18nMap> = {
|
||||||
|
exit: '退出',
|
||||||
|
'select-all': '全選',
|
||||||
|
'rerverse-select': '反選',
|
||||||
|
'clear-all-selected': '清除所有選擇',
|
||||||
|
'keep-multi-selected': '保留多選',
|
||||||
'Source Identifier': '來源',
|
'Source Identifier': '來源',
|
||||||
openWithDefaultApp: '使用預設應用程式開啟',
|
openWithDefaultApp: '使用預設應用程式開啟',
|
||||||
saveSelectedAsJson: '儲存選取的圖像資訊',
|
saveSelectedAsJson: '儲存選取的圖像資訊',
|
||||||
saveAllAsJson: '儲存所有圖像資訊',
|
saveAllAsJson: '儲存所有圖像資訊',
|
||||||
saveLoadedImageAsJson: '儲存已載入的圖像資訊',
|
saveLoadedImageAsJson: '儲存已載入的圖像資訊',
|
||||||
showChangeIndicators: '顯示變更指示器',
|
showChangeIndicators: '顯示變更指示器',
|
||||||
scrollDownToComparePrompt: "向下滾查看Prompt比較",
|
scrollDownToComparePrompt: '向下滾查看Prompt比較',
|
||||||
sourceText: '源文本',
|
sourceText: '源文本',
|
||||||
structuredData: '結構化數據',
|
structuredData: '結構化數據',
|
||||||
searchScope: '搜尋範圍',
|
searchScope: '搜尋範圍',
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import fullScreenContextMenu from '@/page/fileTransfer/fullScreenContextMenu.vue
|
||||||
import { LeftCircleOutlined, RightCircleOutlined } from '@/icon'
|
import { LeftCircleOutlined, RightCircleOutlined } from '@/icon'
|
||||||
import { useImageSearch, createImageSearchIter } from './hook'
|
import { useImageSearch, createImageSearchIter } from './hook'
|
||||||
import { openRebuildImageIndexModal } from '@/components/functionalCallableComp'
|
import { openRebuildImageIndexModal } from '@/components/functionalCallableComp'
|
||||||
|
import { useGlobalStore } from '@/store/useGlobalStore'
|
||||||
|
import { useKeepMultiSelect } from '../fileTransfer/hook'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
tabIdx: number
|
tabIdx: number
|
||||||
|
|
@ -57,9 +59,15 @@ watch(
|
||||||
},
|
},
|
||||||
{ immediate: true }
|
{ immediate: true }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const g = useGlobalStore()
|
||||||
|
const { onClearAllSelected, onSelectAll, onReverseSelect } = useKeepMultiSelect()
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="container" ref="stackViewEl">
|
<div class="container" ref="stackViewEl">
|
||||||
|
|
||||||
|
<MultiSelectKeep :show="!!multiSelectedIdxs.length || g.keepMultiSelect"
|
||||||
|
@clear-all-selected="onClearAllSelected" @select-all="onSelectAll" @reverse-select="onReverseSelect"/>
|
||||||
<ASpin size="large" :spinning="!queue.isIdle">
|
<ASpin size="large" :spinning="!queue.isIdle">
|
||||||
<AModal v-model:visible="showGenInfo" width="70vw" mask-closable @ok="showGenInfo = false">
|
<AModal v-model:visible="showGenInfo" width="70vw" mask-closable @ok="showGenInfo = false">
|
||||||
<template #cancelText />
|
<template #cancelText />
|
||||||
|
|
@ -95,6 +103,9 @@ watch(
|
||||||
:gridItems="gridItems"
|
:gridItems="gridItems"
|
||||||
@scroll="onScroll"
|
@scroll="onScroll"
|
||||||
>
|
>
|
||||||
|
<template #after>
|
||||||
|
<div style="padding: 16px 0 512px;"/>
|
||||||
|
</template>
|
||||||
<template v-slot="{ item: file, index: idx }">
|
<template v-slot="{ item: file, index: idx }">
|
||||||
<file-item-cell
|
<file-item-cell
|
||||||
:idx="idx"
|
:idx="idx"
|
||||||
|
|
@ -169,6 +180,7 @@ watch(
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
background: var(--zp-secondary-background);
|
background: var(--zp-secondary-background);
|
||||||
|
position: relative;
|
||||||
.action-bar {
|
.action-bar {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,9 @@ import { LeftCircleOutlined, RightCircleOutlined, regex } from '@/icon'
|
||||||
import { message } from 'ant-design-vue'
|
import { message } from 'ant-design-vue'
|
||||||
import { t } from '@/i18n'
|
import { t } from '@/i18n'
|
||||||
import { createImageSearchIter, useImageSearch } from './hook'
|
import { createImageSearchIter, useImageSearch } from './hook'
|
||||||
|
import { useKeepMultiSelect } from '../fileTransfer/hook'
|
||||||
|
import MultiSelectKeep from '@/components/MultiSelectKeep.vue'
|
||||||
|
import { useGlobalStore } from '@/store/useGlobalStore'
|
||||||
|
|
||||||
const props = defineProps<{ tabIdx: number; paneIdx: number, searchScope?: string }>()
|
const props = defineProps<{ tabIdx: number; paneIdx: number, searchScope?: string }>()
|
||||||
const isRegex = ref(false)
|
const isRegex = ref(false)
|
||||||
|
|
@ -53,6 +56,7 @@ const {
|
||||||
saveLoadedFileAsJson
|
saveLoadedFileAsJson
|
||||||
} = useImageSearch(iter)
|
} = useImageSearch(iter)
|
||||||
|
|
||||||
|
|
||||||
const info = ref<DataBaseBasicInfo>()
|
const info = ref<DataBaseBasicInfo>()
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
|
@ -93,10 +97,14 @@ useGlobalEventListen('searchIndexExpired', () => info.value && (info.value.expir
|
||||||
const onRegexpClick = () => {
|
const onRegexpClick = () => {
|
||||||
isRegex.value = !isRegex.value
|
isRegex.value = !isRegex.value
|
||||||
}
|
}
|
||||||
|
const g = useGlobalStore()
|
||||||
|
|
||||||
|
const { onClearAllSelected, onSelectAll, onReverseSelect } = useKeepMultiSelect()
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="container" ref="stackViewEl">
|
<div class="container" ref="stackViewEl">
|
||||||
|
<MultiSelectKeep :show="!!multiSelectedIdxs.length || g.keepMultiSelect"
|
||||||
|
@clear-all-selected="onClearAllSelected" @select-all="onSelectAll" @reverse-select="onReverseSelect"/>
|
||||||
<div class="search-bar" v-if="info" @keydown.stop>
|
<div class="search-bar" v-if="info" @keydown.stop>
|
||||||
<a-input v-model:value="substr" :placeholder="$t('fuzzy-search-placeholder') + ' ' + $t('regexSearchEnabledHint')"
|
<a-input v-model:value="substr" :placeholder="$t('fuzzy-search-placeholder') + ' ' + $t('regexSearchEnabledHint')"
|
||||||
:disabled="!queue.isIdle" @keydown.enter="query" allow-clear />
|
:disabled="!queue.isIdle" @keydown.enter="query" allow-clear />
|
||||||
|
|
@ -134,6 +142,9 @@ const onRegexpClick = () => {
|
||||||
</AModal>
|
</AModal>
|
||||||
<RecycleScroller ref="scroller" class="file-list" v-if="images" :items="images" :item-size="itemSize.first"
|
<RecycleScroller ref="scroller" class="file-list" v-if="images" :items="images" :item-size="itemSize.first"
|
||||||
key-field="fullpath" :item-secondary-size="itemSize.second" :gridItems="gridItems" @scroll="onScroll">
|
key-field="fullpath" :item-secondary-size="itemSize.second" :gridItems="gridItems" @scroll="onScroll">
|
||||||
|
<template #after>
|
||||||
|
<div style="padding: 16px 0 512px;"/>
|
||||||
|
</template>
|
||||||
<template v-slot="{ item: file, index: idx }">
|
<template v-slot="{ item: file, index: idx }">
|
||||||
<!-- idx 和file有可能丢失 -->
|
<!-- idx 和file有可能丢失 -->
|
||||||
<file-item-cell :idx="idx" :file="file" v-model:show-menu-idx="showMenuIdx" @file-item-click="onFileItemClick"
|
<file-item-cell :idx="idx" :file="file" v-model:show-menu-idx="showMenuIdx" @file-item-click="onFileItemClick"
|
||||||
|
|
@ -153,6 +164,11 @@ const onRegexpClick = () => {
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
::v-deep {
|
||||||
|
.float-panel {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
}
|
||||||
.regex-icon {
|
.regex-icon {
|
||||||
img {
|
img {
|
||||||
height: 1.5em;
|
height: 1.5em;
|
||||||
|
|
@ -220,6 +236,8 @@ const onRegexpClick = () => {
|
||||||
.container {
|
.container {
|
||||||
background: var(--zp-secondary-background);
|
background: var(--zp-secondary-background);
|
||||||
|
|
||||||
|
position: relative;
|
||||||
|
|
||||||
.file-list {
|
.file-list {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
|
|
||||||
|
|
@ -249,11 +249,11 @@ export function usePreview () {
|
||||||
if (previewing.value && !state.sortedFiles[previewIdx.value]) {
|
if (previewing.value && !state.sortedFiles[previewIdx.value]) {
|
||||||
message.info(t('manualExitFullScreen'), 5)
|
message.info(t('manualExitFullScreen'), 5)
|
||||||
await delay(500)
|
await delay(500)
|
||||||
; (
|
; (
|
||||||
document.querySelector(
|
document.querySelector(
|
||||||
'.ant-image-preview-operations-operation .anticon-close'
|
'.ant-image-preview-operations-operation .anticon-close'
|
||||||
) as HTMLDivElement
|
) as HTMLDivElement
|
||||||
)?.click()
|
)?.click()
|
||||||
previewIdx.value = -1
|
previewIdx.value = -1
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -267,6 +267,23 @@ export function usePreview () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function useKeepMultiSelect () {
|
||||||
|
const { eventEmitter, multiSelectedIdxs, sortedFiles } = useHookShareState().toRefs()
|
||||||
|
const onSelectAll = () => eventEmitter.value.emit('selectAll')
|
||||||
|
const onReverseSelect = () => {
|
||||||
|
multiSelectedIdxs.value = sortedFiles.value.map((_, idx) => idx)
|
||||||
|
.filter(v => !multiSelectedIdxs.value.includes(v))
|
||||||
|
}
|
||||||
|
const onClearAllSelected = () => {
|
||||||
|
multiSelectedIdxs.value = []
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
onSelectAll,
|
||||||
|
onReverseSelect,
|
||||||
|
onClearAllSelected
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 路径栏相关
|
* 路径栏相关
|
||||||
*/
|
*/
|
||||||
|
|
@ -649,7 +666,7 @@ export function useFilesDisplay ({ fetchNext }: {fetchNext?: () => Promise<any>}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 填充够一页,直到不行为止
|
// 填充够一页,直到不行为止
|
||||||
const fetchDataUntilViewFilled = async (isFullScreenPreview = false) => {
|
const fetchDataUntilViewFilled = async (isFullScreenPreview = false) => {
|
||||||
const s = scroller.value
|
const s = scroller.value
|
||||||
const currIdx = () => (isFullScreenPreview ? previewIdx.value : s?.$_endIndex ?? 0)
|
const currIdx = () => (isFullScreenPreview ? previewIdx.value : s?.$_endIndex ?? 0)
|
||||||
|
|
@ -716,8 +733,16 @@ export function useFileTransfer () {
|
||||||
const recover = () => {
|
const recover = () => {
|
||||||
multiSelectedIdxs.value = []
|
multiSelectedIdxs.value = []
|
||||||
}
|
}
|
||||||
useWatchDocument('click', recover)
|
useWatchDocument('click', () => {
|
||||||
useWatchDocument('blur', recover)
|
if (!global.keepMultiSelect) {
|
||||||
|
recover()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
useWatchDocument('blur', () => {
|
||||||
|
if (!global.keepMultiSelect) {
|
||||||
|
recover()
|
||||||
|
}
|
||||||
|
})
|
||||||
watch(currPage, recover)
|
watch(currPage, recover)
|
||||||
|
|
||||||
const onFileDragStart = (e: DragEvent, idx: number) => {
|
const onFileDragStart = (e: DragEvent, idx: number) => {
|
||||||
|
|
@ -1055,10 +1080,10 @@ export function useFileItemActions (
|
||||||
case 'deleteFiles': {
|
case 'deleteFiles': {
|
||||||
const selectedFiles = getSelectedImg()
|
const selectedFiles = getSelectedImg()
|
||||||
const removeFile = async () => {
|
const removeFile = async () => {
|
||||||
const paths = selectedFiles.map((v) => v.fullpath)
|
const paths = selectedFiles.map((v) => v.fullpath)
|
||||||
await deleteFiles(paths)
|
await deleteFiles(paths)
|
||||||
message.success(t('deleteSuccess'))
|
message.success(t('deleteSuccess'))
|
||||||
events.emit('removeFiles', { paths: paths, loc: currLocation.value })
|
events.emit('removeFiles', { paths: paths, loc: currLocation.value })
|
||||||
}
|
}
|
||||||
if (selectedFiles.length === 1 && global.ignoredConfirmActions.deleteOneOnly) {
|
if (selectedFiles.length === 1 && global.ignoredConfirmActions.deleteOneOnly) {
|
||||||
return removeFile()
|
return removeFile()
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import {
|
||||||
usePreview,
|
usePreview,
|
||||||
useFileItemActions,
|
useFileItemActions,
|
||||||
useMobileOptimization,
|
useMobileOptimization,
|
||||||
stackCache
|
stackCache,
|
||||||
|
useKeepMultiSelect
|
||||||
} from './hook'
|
} from './hook'
|
||||||
import { SearchSelect } from 'vue3-ts-util'
|
import { SearchSelect } from 'vue3-ts-util'
|
||||||
import { toRawFileUrl } from '@/util/file'
|
import { toRawFileUrl } from '@/util/file'
|
||||||
|
|
@ -29,6 +30,7 @@ import { isTauri } from '@/util/env'
|
||||||
import { parse } from 'stable-diffusion-image-metadata'
|
import { parse } from 'stable-diffusion-image-metadata'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import type { FileNodeInfo, GenDiffInfo } from '@/api/files'
|
import type { FileNodeInfo, GenDiffInfo } from '@/api/files'
|
||||||
|
import MultiSelectKeep from '@/components/MultiSelectKeep.vue'
|
||||||
|
|
||||||
const global = useGlobalStore()
|
const global = useGlobalStore()
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
|
|
@ -73,6 +75,7 @@ const { onDrop, onFileDragStart, onFileDragEnd } = useFileTransfer()
|
||||||
const { onFileItemClick, onContextMenuClick, showGenInfo, imageGenInfo, q } = useFileItemActions({ openNext })
|
const { onFileItemClick, onContextMenuClick, showGenInfo, imageGenInfo, q } = useFileItemActions({ openNext })
|
||||||
const { previewIdx, onPreviewVisibleChange, previewing, previewImgMove, canPreview } = usePreview()
|
const { previewIdx, onPreviewVisibleChange, previewing, previewImgMove, canPreview } = usePreview()
|
||||||
const { showMenuIdx } = useMobileOptimization()
|
const { showMenuIdx } = useMobileOptimization()
|
||||||
|
const { onClearAllSelected, onReverseSelect, onSelectAll } = useKeepMultiSelect()
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props,
|
() => props,
|
||||||
|
|
@ -93,64 +96,64 @@ watch(sortedFiles, async (newList, oldList) => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const changeIndchecked = ref<boolean>(true);
|
const changeIndchecked = ref<boolean>(true)
|
||||||
const seedChangeChecked = ref<boolean>(false);
|
const seedChangeChecked = ref<boolean>(false)
|
||||||
|
|
||||||
function getRawGenParams() {
|
function getRawGenParams () {
|
||||||
//extract fullpaths of all files from sortedfiles to array, but only if it's an actual file (not a folder or something else)
|
//extract fullpaths of all files from sortedfiles to array, but only if it's an actual file (not a folder or something else)
|
||||||
let paths: string[] = []
|
let paths: string[] = []
|
||||||
const allowedExtensions = [".png", ".jpg", ".jpeg"]
|
const allowedExtensions = ['.png', '.jpg', '.jpeg']
|
||||||
for (let f in sortedFiles.value) {
|
for (let f in sortedFiles.value) {
|
||||||
if (sortedFiles.value[f].type == "file" && allowedExtensions.includes(sortedFiles.value[f].fullpath.slice(-4).toLowerCase())) {
|
if (sortedFiles.value[f].type == 'file' && allowedExtensions.includes(sortedFiles.value[f].fullpath.slice(-4).toLowerCase())) {
|
||||||
paths.push(sortedFiles.value[f].fullpath)
|
paths.push(sortedFiles.value[f].fullpath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
q.pushAction(() => getImageGenerationInfoBatch(paths)).res.then((v) => {
|
q.pushAction(() => getImageGenerationInfoBatch(paths)).res.then((v) => {
|
||||||
//result is a json object with fullpath as key and gen_info_raw as value
|
//result is a json object with fullpath as key and gen_info_raw as value
|
||||||
for (let f in sortedFiles.value) {
|
for (let f in sortedFiles.value) {
|
||||||
sortedFiles.value[f].gen_info_raw = v[sortedFiles.value[f].fullpath]
|
sortedFiles.value[f].gen_info_raw = v[sortedFiles.value[f].fullpath]
|
||||||
sortedFiles.value[f].gen_info_obj = parse(v[sortedFiles.value[f].fullpath])
|
sortedFiles.value[f].gen_info_obj = parse(v[sortedFiles.value[f].fullpath])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNodeInfo) {
|
function getGenDiff (ownGenInfo: any, idx: any, increment: any, ownFile: FileNodeInfo) {
|
||||||
//init result obj
|
//init result obj
|
||||||
let result: GenDiffInfo = {
|
let result: GenDiffInfo = {
|
||||||
diff: {},
|
diff: {},
|
||||||
empty: true,
|
empty: true,
|
||||||
ownFile: "",
|
ownFile: '',
|
||||||
otherFile: ""
|
otherFile: ''
|
||||||
}
|
}
|
||||||
|
|
||||||
//check for out of bounds
|
//check for out of bounds
|
||||||
if(idx + increment < 0
|
if (idx + increment < 0
|
||||||
|| idx + increment >= sortedFiles.value.length
|
|| idx + increment >= sortedFiles.value.length
|
||||||
|| sortedFiles.value[idx] == undefined) {
|
|| sortedFiles.value[idx] == undefined) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
//check for gen_info_obj existence
|
//check for gen_info_obj existence
|
||||||
if(!("gen_info_obj" in sortedFiles.value[idx])
|
if (!('gen_info_obj' in sortedFiles.value[idx])
|
||||||
|| !("gen_info_obj" in sortedFiles.value[idx + increment])) {
|
|| !('gen_info_obj' in sortedFiles.value[idx + increment])) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
//diff vars init
|
//diff vars init
|
||||||
let gen_a = ownGenInfo
|
let gen_a = ownGenInfo
|
||||||
let gen_b :any = sortedFiles.value[idx + increment].gen_info_obj
|
let gen_b: any = sortedFiles.value[idx + increment].gen_info_obj
|
||||||
if(gen_b == undefined) {
|
if (gen_b == undefined) {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
//further vars
|
//further vars
|
||||||
let skip = ["hashes", "resources"]
|
let skip = ['hashes', 'resources']
|
||||||
result.diff = {}
|
result.diff = {}
|
||||||
result.ownFile = ownFile.name,
|
result.ownFile = ownFile.name,
|
||||||
result.otherFile = sortedFiles.value[idx + increment].name,
|
result.otherFile = sortedFiles.value[idx + increment].name,
|
||||||
result.empty = false
|
result.empty = false
|
||||||
|
|
||||||
if(!seedChangeChecked.value) {
|
if (!seedChangeChecked.value) {
|
||||||
skip.push("seed")
|
skip.push('seed')
|
||||||
}
|
}
|
||||||
|
|
||||||
//actual per property diff
|
//actual per property diff
|
||||||
|
|
@ -162,26 +165,26 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
//for all non-identical values, compare type based
|
//for all non-identical values, compare type based
|
||||||
//existence test
|
//existence test
|
||||||
if (!(k in gen_b)) {
|
if (!(k in gen_b)) {
|
||||||
result.diff[k] = "+"
|
result.diff[k] = '+'
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
//content test
|
//content test
|
||||||
if (gen_a[k] != gen_b[k]) {
|
if (gen_a[k] != gen_b[k]) {
|
||||||
if(k.includes("rompt") && gen_a[k] != "" && gen_b[k] != "") {
|
if (k.includes('rompt') && gen_a[k] != '' && gen_b[k] != '') {
|
||||||
//prompt values are comma separated, handle them differently
|
//prompt values are comma separated, handle them differently
|
||||||
let tokenize_a = gen_a[k].split(",")
|
let tokenize_a = gen_a[k].split(',')
|
||||||
let tokenize_b = gen_b[k].split(",")
|
let tokenize_b = gen_b[k].split(',')
|
||||||
//count how many tokens are different or at a different place
|
//count how many tokens are different or at a different place
|
||||||
let diff_count = 0
|
let diff_count = 0
|
||||||
for (let i in tokenize_a) {
|
for (let i in tokenize_a) {
|
||||||
if(tokenize_a[i] != tokenize_b[i]) {
|
if (tokenize_a[i] != tokenize_b[i]) {
|
||||||
diff_count++
|
diff_count++
|
||||||
}
|
|
||||||
}
|
}
|
||||||
result.diff[k] = diff_count;
|
}
|
||||||
|
result.diff[k] = diff_count
|
||||||
} else {
|
} else {
|
||||||
//all others
|
//all others
|
||||||
result.diff[k] = [gen_a[k],gen_b[k]]
|
result.diff[k] = [gen_a[k], gen_b[k]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -193,6 +196,9 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<ASpin :spinning="spinning" size="large">
|
<ASpin :spinning="spinning" size="large">
|
||||||
|
<MultiSelectKeep :show="global.keepMultiSelect || !!multiSelectedIdxs.length"
|
||||||
|
@clear-all-selected="onClearAllSelected" @select-all="onSelectAll"
|
||||||
|
@reverse-select="onReverseSelect" />
|
||||||
<ASelect style="display: none"></ASelect>
|
<ASelect style="display: none"></ASelect>
|
||||||
|
|
||||||
<div ref="stackViewEl" @dragover.prevent @drop.prevent="onDrop($event)" class="container">
|
<div ref="stackViewEl" @dragover.prevent @drop.prevent="onDrop($event)" class="container">
|
||||||
|
|
@ -228,7 +234,7 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
<a-breadcrumb style="flex: 1" v-else>
|
<a-breadcrumb style="flex: 1" v-else>
|
||||||
<a-breadcrumb-item v-for="(item, idx) in stack" :key="idx">
|
<a-breadcrumb-item v-for="(item, idx) in stack" :key="idx">
|
||||||
<a @click.prevent="back(idx)">{{ item.curr === '/' ? $t('root') : item.curr.replace(/:\/$/, $t('drive'))
|
<a @click.prevent="back(idx)">{{ item.curr === '/' ? $t('root') : item.curr.replace(/:\/$/, $t('drive'))
|
||||||
}}</a>
|
}}</a>
|
||||||
</a-breadcrumb-item>
|
</a-breadcrumb-item>
|
||||||
</a-breadcrumb>
|
</a-breadcrumb>
|
||||||
|
|
||||||
|
|
@ -294,19 +300,20 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
<numInput v-model="cellWidth" :max="1024" :min="64" :step="64" />
|
<numInput v-model="cellWidth" :max="1024" :min="64" :step="64" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item :label="$t('sortingMethod')">
|
<a-form-item :label="$t('sortingMethod')">
|
||||||
<search-select v-model:value="sortMethod" @click.stop :conv="sortMethodConv" :options="sortMethods" />
|
<search-select v-model:value="sortMethod" @click.stop :conv="sortMethodConv"
|
||||||
|
:options="sortMethods" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item :label="$t('showChangeIndicators')">
|
<a-form-item :label="$t('showChangeIndicators')">
|
||||||
<a-switch v-model:checked="changeIndchecked" @click="getRawGenParams"/>
|
<a-switch v-model:checked="changeIndchecked" @click="getRawGenParams" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item :label="$t('seedAsChange')">
|
<a-form-item :label="$t('seedAsChange')">
|
||||||
<a-switch v-model:checked="seedChangeChecked" :disabled="!changeIndchecked"/>
|
<a-switch v-model:checked="seedChangeChecked" :disabled="!changeIndchecked" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<div style="padding: 4px;">
|
<div style="padding: 4px;">
|
||||||
<a @click.prevent="addToSearchScanPathAndQuickMove" v-if="!searchPathInfo">{{
|
<a @click.prevent="addToSearchScanPathAndQuickMove" v-if="!searchPathInfo">{{
|
||||||
$t('addToSearchScanPathAndQuickMove') }}</a>
|
$t('addToSearchScanPathAndQuickMove') }}</a>
|
||||||
<a @click.prevent="addToSearchScanPathAndQuickMove" v-else-if="searchPathInfo.can_delete">{{
|
<a @click.prevent="addToSearchScanPathAndQuickMove" v-else-if="searchPathInfo.can_delete">{{
|
||||||
$t('removeFromSearchScanPathAndQuickMove') }}</a>
|
$t('removeFromSearchScanPathAndQuickMove') }}</a>
|
||||||
</div>
|
</div>
|
||||||
<div style="padding: 4px;">
|
<div style="padding: 4px;">
|
||||||
<a @click.prevent="openFolder(currLocation + '/')">{{ $t('openWithLocalFileBrowser') }}</a>
|
<a @click.prevent="openFolder(currLocation + '/')">{{ $t('openWithLocalFileBrowser') }}</a>
|
||||||
|
|
@ -322,8 +329,8 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
</div>
|
</div>
|
||||||
<div v-if="currPage" class="view">
|
<div v-if="currPage" class="view">
|
||||||
<RecycleScroller class="file-list" :items="sortedFiles" ref="scroller" @scroll="onScroll"
|
<RecycleScroller class="file-list" :items="sortedFiles" ref="scroller" @scroll="onScroll"
|
||||||
:item-size="itemSize.first" key-field="fullpath"
|
:item-size="itemSize.first" key-field="fullpath" :item-secondary-size="itemSize.second"
|
||||||
:item-secondary-size="itemSize.second" :gridItems="gridItems">
|
:gridItems="gridItems">
|
||||||
<template v-slot="{ item: file, index: idx }">
|
<template v-slot="{ item: file, index: idx }">
|
||||||
<!-- idx 和file有可能丢失 -->
|
<!-- idx 和file有可能丢失 -->
|
||||||
<file-item :idx="parseInt(idx)" :file="file"
|
<file-item :idx="parseInt(idx)" :file="file"
|
||||||
|
|
@ -334,13 +341,12 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
:is-selected-mutil-files="multiSelectedIdxs.length > 1"
|
:is-selected-mutil-files="multiSelectedIdxs.length > 1"
|
||||||
:gen-diff-to-next="getGenDiff(file.gen_info_obj, idx, 1, file)"
|
:gen-diff-to-next="getGenDiff(file.gen_info_obj, idx, 1, file)"
|
||||||
:gen-diff-to-previous="getGenDiff(file.gen_info_obj, idx, -1, file)"
|
:gen-diff-to-previous="getGenDiff(file.gen_info_obj, idx, -1, file)"
|
||||||
:enable-change-indicator="changeIndchecked"
|
:enable-change-indicator="changeIndchecked" />
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
<template #after>
|
<template #after>
|
||||||
<div style="padding: 16px 0 64px;">
|
<div style="padding: 16px 0 512px;">
|
||||||
<AButton v-if="props.walkModePath" @click="loadNextDir" :loading="loadNextDirLoading" block type="primary" :disabled="!canLoadNext"
|
<AButton v-if="props.walkModePath" @click="loadNextDir" :loading="loadNextDirLoading" block type="primary"
|
||||||
ghost>
|
:disabled="!canLoadNext" ghost>
|
||||||
{{ $t('loadNextPage') }}</AButton>
|
{{ $t('loadNextPage') }}</AButton>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -354,7 +360,7 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
</div>
|
</div>
|
||||||
<fullScreenContextMenu v-if="previewing" :file="sortedFiles[previewIdx]" :idx="previewIdx"
|
<fullScreenContextMenu v-if="previewing" :file="sortedFiles[previewIdx]" :idx="previewIdx"
|
||||||
@context-menu-click="onContextMenuClick" />
|
@context-menu-click="onContextMenuClick" />
|
||||||
<BaseFileListInfo :file-num="sortedFiles.length" :selected-file-num="multiSelectedIdxs.length"/>
|
<BaseFileListInfo :file-num="sortedFiles.length" :selected-file-num="multiSelectedIdxs.length" />
|
||||||
</ASpin>
|
</ASpin>
|
||||||
</template>
|
</template>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
@ -396,7 +402,8 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
&>*, .copy {
|
&>*,
|
||||||
|
.copy {
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -412,6 +419,7 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.ant-breadcrumb>* {
|
.ant-breadcrumb>* {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
@ -480,4 +488,5 @@ function getGenDiff(ownGenInfo: any, idx: any, increment: any, ownFile: FileNode
|
||||||
border: 4px;
|
border: 4px;
|
||||||
background: var(--zp-secondary-background);
|
background: var(--zp-secondary-background);
|
||||||
border: 1px solid var(--zp-border);
|
border: 1px solid var(--zp-border);
|
||||||
}</style>
|
}
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -268,6 +268,7 @@ export const useGlobalStore = defineStore(
|
||||||
longPressOpenContextMenu,
|
longPressOpenContextMenu,
|
||||||
openTagSearchMatchedImageGridInRight,
|
openTagSearchMatchedImageGridInRight,
|
||||||
onlyFoldersAndImages: ref(true),
|
onlyFoldersAndImages: ref(true),
|
||||||
|
keepMultiSelect: ref(false),
|
||||||
fullscreenPreviewInitialUrl: ref(''),
|
fullscreenPreviewInitialUrl: ref(''),
|
||||||
shortcut,
|
shortcut,
|
||||||
pageFuncExportMap,
|
pageFuncExportMap,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue