feat: implement auto-tagging feature with custom tag rules
- Add AutoTagMatcher singleton class for automatic tag application - Support filtering by multiple fields (prompt, model, sampler, etc.) - Add frontend UI for managing auto-tag rules in global settings - Support AND logic for multiple conditions within a rule - Integrate with image indexing process - Add natural language vs tag-style prompt detection and rendering - Include rule descriptions and usage guidance in UI - Auto-reload rules when updated via APIpull/852/head
parent
2e560e9486
commit
d8ed522996
|
|
@ -13,7 +13,7 @@ Promise.resolve().then(async () => {
|
|||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Infinite Image Browsing</title>
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-a7581aec.js"></script>
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-6c47ee34.js"></script>
|
||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-a44325c7.css">
|
||||
</head>
|
||||
|
||||
|
|
|
|||
|
|
@ -313,6 +313,10 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
|
|||
async def app_fe_setting(req: AppFeSettingReq):
|
||||
conn = DataBase.get_conn()
|
||||
GlobalSetting.save_setting(conn, req.name, req.value)
|
||||
# 如果更新的是自动标签规则,重新加载
|
||||
if req.name == "auto_tag_rules":
|
||||
from scripts.iib.auto_tag import AutoTagMatcher
|
||||
AutoTagMatcher.reload_rules(conn)
|
||||
|
||||
class AppFeSettingDelReq(BaseModel):
|
||||
name: str
|
||||
|
|
|
|||
|
|
@ -0,0 +1,101 @@
|
|||
from typing import List, Dict, Any, Optional
|
||||
import re
|
||||
from scripts.iib.db.datamodel import GlobalSetting, Tag, ImageTag, DataBase
|
||||
from scripts.iib.logger import logger
|
||||
from scripts.iib.parsers.model import ImageGenerationParams
|
||||
|
||||
class AutoTagMatcher:
|
||||
_instance: Optional['AutoTagMatcher'] = None
|
||||
|
||||
def __init__(self, conn):
|
||||
self.conn = conn
|
||||
self.rules = self.load_rules()
|
||||
|
||||
@classmethod
|
||||
def get_instance(cls, conn) -> 'AutoTagMatcher':
|
||||
"""获取全局单例实例"""
|
||||
if cls._instance is None:
|
||||
cls._instance = cls(conn)
|
||||
else:
|
||||
# 更新连接
|
||||
cls._instance.conn = conn
|
||||
return cls._instance
|
||||
|
||||
@classmethod
|
||||
def reload_rules(cls, conn) -> None:
|
||||
"""重新加载规则"""
|
||||
if cls._instance is not None:
|
||||
cls._instance.conn = conn
|
||||
cls._instance.rules = cls._instance.load_rules()
|
||||
|
||||
def load_rules(self) -> List[Dict[str, Any]]:
|
||||
try:
|
||||
setting = GlobalSetting.get_setting(self.conn, "auto_tag_rules")
|
||||
print("Loaded auto tag rules:", setting)
|
||||
if setting:
|
||||
return setting
|
||||
except Exception as e:
|
||||
logger.error(f"Error loading auto tag rules: {e}")
|
||||
return []
|
||||
|
||||
def match(self, params: ImageGenerationParams, rule: Dict[str, Any]) -> bool:
|
||||
# params is ImageGenerationParams
|
||||
# rule structure: { "tag": "TagName", "filters": [...] }
|
||||
# filter structure: { "field": "pos_prompt", "operator": "contains", "value": "foo" }
|
||||
|
||||
filters = rule.get("filters", [])
|
||||
if not filters:
|
||||
return False
|
||||
|
||||
for filter in filters:
|
||||
field = filter.get("field")
|
||||
operator = filter.get("operator")
|
||||
value = filter.get("value")
|
||||
|
||||
target_value = ""
|
||||
if field == "pos_prompt":
|
||||
target_value = ",".join(params.pos_prompt) if isinstance(params.pos_prompt, list) else str(params.pos_prompt)
|
||||
elif field == "neg_prompt":
|
||||
# Assuming neg_prompt might be in meta or extra, but params usually has pos_prompt.
|
||||
# Let's check where negative prompt is usually stored.
|
||||
# In api.py: params = parse_generation_parameters(content)
|
||||
# parse_generation_parameters returns dict with "meta", "pos_prompt".
|
||||
# "meta" usually contains "Negative prompt".
|
||||
target_value = params.meta.get("Negative prompt", "")
|
||||
else:
|
||||
# Try to find in meta
|
||||
target_value = params.meta.get(field, "")
|
||||
if not target_value and field in params.extra:
|
||||
target_value = params.extra.get(field, "")
|
||||
|
||||
target_value = str(target_value)
|
||||
|
||||
if operator == "contains":
|
||||
if value.lower() not in target_value.lower():
|
||||
return False
|
||||
elif operator == "equals":
|
||||
if value.lower() != target_value.lower():
|
||||
return False
|
||||
elif operator == "regex":
|
||||
try:
|
||||
if not re.search(value, target_value, re.IGNORECASE):
|
||||
return False
|
||||
except:
|
||||
return False
|
||||
# Add more operators if needed
|
||||
|
||||
return True
|
||||
|
||||
def apply(self, img_id: int, params: Any):
|
||||
if not self.rules:
|
||||
return
|
||||
|
||||
for rule in self.rules:
|
||||
try:
|
||||
if self.match(params, rule):
|
||||
tag_name = rule.get("tag")
|
||||
if tag_name:
|
||||
tag = Tag.get_or_create(self.conn, tag_name, "custom")
|
||||
ImageTag(img_id, tag.id).save_or_ignore(self.conn)
|
||||
except Exception as e:
|
||||
logger.error(f"Error applying auto tag rule {rule}: {e}")
|
||||
|
|
@ -908,7 +908,7 @@ class DirCoverCache:
|
|||
else:
|
||||
return []
|
||||
|
||||
|
||||
# Global settings storage, also use as key-value store
|
||||
class GlobalSetting:
|
||||
@classmethod
|
||||
def create_table(cls, conn):
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ from scripts.iib.parsers.model import ImageGenerationInfo, ImageGenerationParams
|
|||
from scripts.iib.logger import logger
|
||||
from scripts.iib.parsers.index import parse_image_info
|
||||
from scripts.iib.plugin import plugin_inst_map
|
||||
from scripts.iib.auto_tag import AutoTagMatcher
|
||||
|
||||
# 定义一个函数来获取图片文件的EXIF数据
|
||||
def get_exif_data(file_path):
|
||||
|
|
@ -222,4 +223,6 @@ def build_single_img_idx(conn, file_path, is_rebuild, safe_save_img_tag):
|
|||
safe_save_img_tag(ImageTag(img.id, tag.id))
|
||||
for k in pos:
|
||||
tag = Tag.get_or_create(conn, k, "pos")
|
||||
safe_save_img_tag(ImageTag(img.id, tag.id))
|
||||
safe_save_img_tag(ImageTag(img.id, tag.id))
|
||||
|
||||
AutoTagMatcher.get_instance(conn).apply(img.id, parsed_params)
|
||||
|
|
@ -32,7 +32,7 @@ class ComfyUIParser:
|
|||
params = get_comfyui_exif_data(img)
|
||||
info = comfyui_exif_data_to_str(params)
|
||||
except Exception as e:
|
||||
logger.error("parse comfyui image failed. prompt:")
|
||||
logger.error("parse comfyui image failed. prompt:", exc_info=e)
|
||||
logger.error(img.info.get("prompt"))
|
||||
return ImageGenerationInfo(
|
||||
params=ImageGenerationParams(
|
||||
|
|
|
|||
|
|
@ -460,11 +460,20 @@ def get_comfyui_exif_data(img: Image):
|
|||
meta["Model"] = data[KSampler_entry["model"][0]]["inputs"].get("ckpt_name")
|
||||
meta["Source Identifier"] = "ComfyUI"
|
||||
def get_text_from_clip(idx: str) :
|
||||
inputs = data[idx]["inputs"]
|
||||
text = inputs["text"] if "text" in inputs else inputs["t5xxl"]
|
||||
if isinstance(text, list): # type:CLIPTextEncode (NSP) mode:Wildcards
|
||||
text = data[text[0]]["inputs"]["text"]
|
||||
return text.strip()
|
||||
try:
|
||||
inputs = data[idx]["inputs"]
|
||||
if "text" in inputs:
|
||||
text = inputs["text"]
|
||||
elif "t5xxl" in inputs:
|
||||
text = inputs["t5xxl"]
|
||||
else:
|
||||
return ""
|
||||
if isinstance(text, list): # type:CLIPTextEncode (NSP) mode:Wildcards
|
||||
text = data[text[0]]["inputs"]["text"]
|
||||
return text.strip()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return ""
|
||||
|
||||
in_node = data[str(KSampler_entry["positive"][0])]
|
||||
if in_node["class_type"] != "FluxGuidance":
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
import{d as E,bB as $,r as f,m as M,_ as T,a as c,an as W,h as m,c as v,P as z}from"./index-a7581aec.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,g=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),g({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(),x=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={},m(n,"".concat(e,"-checked"),o.value),m(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:x,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,bC as $,r as f,m as M,_ as T,a as c,an as W,h as m,c as v,P as z}from"./index-6c47ee34.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,g=d.expose,o=f(a.checked===void 0?a.defaultChecked:a.checked),i=f();M(function(){return a.checked},function(){o.value=a.checked}),g({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(),x=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={},m(n,"".concat(e,"-checked"),o.value),m(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:x,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
|
|
@ -1 +1 @@
|
|||
import{d as a,U as t,V as s,c as n,cC as _,a0 as o}from"./index-a7581aec.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,U as t,V as s,c as n,cD as _,a0 as o}from"./index-6c47ee34.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};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
.full-screen-menu[data-v-f13874c6]{position:fixed;z-index:9999;background:var(--zp-primary-background);padding:8px 16px;box-shadow:0 0 4px var(--zp-secondary);border-radius:4px}.full-screen-menu .tags-container[data-v-f13874c6]{margin:4px 0}.full-screen-menu .tags-container .tag[data-v-f13874c6]{margin-right:4px;margin-bottom:4px;padding:2px 16px;border-radius:4px;display:inline-block;cursor:pointer;font-weight:700;transition:.5s all ease;border:2px solid var(--tag-color);color:var(--tag-color);background:var(--zp-primary-background);user-select:none}.full-screen-menu .tags-container .tag.selected[data-v-f13874c6]{background:var(--tag-color);color:#fff}.full-screen-menu .container[data-v-f13874c6]{height:100%;display:flex;overflow:hidden;flex-direction:column}.full-screen-menu .gen-info[data-v-f13874c6]{flex:1;word-break:break-all;white-space:pre-line;overflow:auto;z-index:1;padding-top:4px;position:relative}.full-screen-menu .gen-info code[data-v-f13874c6]{font-size:.9em;display:block;padding:4px;background:var(--zp-primary-background);border-radius:4px;margin-right:20px;white-space:pre-wrap;word-break:break-word;line-height:1.78em}.full-screen-menu .gen-info code[data-v-f13874c6] .natural-text{margin:.5em 0;line-height:1.6em;text-align:justify;color:var(--zp-primary)}.full-screen-menu .gen-info code[data-v-f13874c6] .short-tag{word-break:break-all;white-space:nowrap}.full-screen-menu .gen-info code[data-v-f13874c6] span.tag{background:var(--zp-secondary-variant-background);color:var(--zp-primary);padding:2px 4px;border-radius:6px;margin-right:6px;margin-top:4px;line-height:1.3em;display:inline-block}.full-screen-menu .gen-info code[data-v-f13874c6] .has-parentheses.tag{background:rgba(255,100,100,.14)}.full-screen-menu .gen-info code[data-v-f13874c6] span.tag:hover{background:rgba(120,0,0,.15)}.full-screen-menu .gen-info table[data-v-f13874c6]{font-size:1em;border-radius:4px;border-collapse:separate;margin-bottom:3em}.full-screen-menu .gen-info table tr td[data-v-f13874c6]:first-child{white-space:nowrap}.full-screen-menu .gen-info table td[data-v-f13874c6]{padding-right:14px;padding-left:4px;border-bottom:1px solid var(--zp-secondary);border-collapse:collapse}.full-screen-menu .gen-info .info-tags .info-tag[data-v-f13874c6]{display:inline-block;overflow:hidden;border-radius:4px;margin-right:8px;border:2px solid var(--zp-primary)}.full-screen-menu .gen-info .info-tags .name[data-v-f13874c6]{background-color:var(--zp-primary);color:var(--zp-primary-background);padding:4px;border-bottom-right-radius:4px}.full-screen-menu .gen-info .info-tags .value[data-v-f13874c6]{padding:4px}.full-screen-menu.unset-size[data-v-f13874c6]{width:unset!important;height:unset!important}.full-screen-menu .mouse-sensor[data-v-f13874c6]{position:absolute;bottom:0;right:0;transform:rotate(90deg);cursor:se-resize;z-index:1;background:var(--zp-primary-background);border-radius:2px}.full-screen-menu .mouse-sensor>*[data-v-f13874c6]{font-size:18px;padding:4px}.full-screen-menu .action-bar[data-v-f13874c6]{display:flex;align-items:center;user-select:none;gap:4px}.full-screen-menu .action-bar .icon[data-v-f13874c6]{font-size:1.5em;padding:2px 4px;border-radius:4px}.full-screen-menu .action-bar .icon[data-v-f13874c6]:hover{background:var(--zp-secondary-variant-background)}.full-screen-menu .action-bar>*[data-v-f13874c6]{flex-wrap:wrap}.full-screen-menu.lr[data-v-f13874c6]{top:var(--6d6bbef8)!important;right:0!important;bottom:0!important;left:100vw!important;height:unset!important;width:var(--ab85ff12)!important;transition:left ease .3s}.full-screen-menu.lr.always-on[data-v-f13874c6],.full-screen-menu.lr.mouse-in[data-v-f13874c6]{left:var(--51e551fb)!important}.tag-alpha-item[data-v-f13874c6]{display:flex;margin-top:4px}.tag-alpha-item h4[data-v-f13874c6]{width:32px;flex-shrink:0}.sort-tag-switch[data-v-f13874c6]{display:inline-block;padding-right:16px;padding-left:8px;cursor:pointer;user-select:none}.sort-tag-switch span[data-v-f13874c6]{transition:all ease .3s;transform:scale(1.2)}.sort-tag-switch:hover span[data-v-f13874c6]{transform:scale(1.3)}.lr-layout-control[data-v-f13874c6]{display:flex;align-items:center;gap:16px;padding:4px 8px;flex-wrap:wrap;border-radius:2px;border-left:3px solid var(--zp-luminous);background-color:var(--zp-secondary-background)}.lr-layout-control .ctrl-item[data-v-f13874c6]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap}.select-actions[data-v-b04c3508]>:not(:last-child){margin-right:4px}.float-panel[data-v-b04c3508]{position:absolute;bottom:32px;right:32px;background:var(--zp-primary-background);border-radius:4px;z-index:1000;padding:8px;box-shadow:0 0 4px var(--zp-secondary)}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +0,0 @@
|
|||
.full-screen-menu[data-v-e9780c1d]{position:fixed;z-index:9999;background:var(--zp-primary-background);padding:8px 16px;box-shadow:0 0 4px var(--zp-secondary);border-radius:4px}.full-screen-menu .tags-container[data-v-e9780c1d]{margin:4px 0}.full-screen-menu .tags-container .tag[data-v-e9780c1d]{margin-right:4px;margin-bottom:4px;padding:2px 16px;border-radius:4px;display:inline-block;cursor:pointer;font-weight:700;transition:.5s all ease;border:2px solid var(--tag-color);color:var(--tag-color);background:var(--zp-primary-background);user-select:none}.full-screen-menu .tags-container .tag.selected[data-v-e9780c1d]{background:var(--tag-color);color:#fff}.full-screen-menu .container[data-v-e9780c1d]{height:100%;display:flex;overflow:hidden;flex-direction:column}.full-screen-menu .gen-info[data-v-e9780c1d]{flex:1;word-break:break-all;white-space:pre-line;overflow:auto;z-index:1;padding-top:4px;position:relative}.full-screen-menu .gen-info code[data-v-e9780c1d]{font-size:.9em;display:block;padding:4px;background:var(--zp-primary-background);border-radius:4px;margin-right:20px;white-space:pre-wrap;word-break:break-word;line-height:1.78em}.full-screen-menu .gen-info code[data-v-e9780c1d] .short-tag{word-break:break-all;white-space:nowrap}.full-screen-menu .gen-info code[data-v-e9780c1d] span.tag{background:var(--zp-secondary-variant-background);color:var(--zp-primary);padding:2px 4px;border-radius:6px;margin-right:6px;margin-top:4px;line-height:1.3em;display:inline-block}.full-screen-menu .gen-info code[data-v-e9780c1d] .has-parentheses.tag{background:rgba(255,100,100,.14)}.full-screen-menu .gen-info code[data-v-e9780c1d] span.tag:hover{background:rgba(120,0,0,.15)}.full-screen-menu .gen-info table[data-v-e9780c1d]{font-size:1em;border-radius:4px;border-collapse:separate;margin-bottom:3em}.full-screen-menu .gen-info table tr td[data-v-e9780c1d]:first-child{white-space:nowrap}.full-screen-menu .gen-info table td[data-v-e9780c1d]{padding-right:14px;padding-left:4px;border-bottom:1px solid var(--zp-secondary);border-collapse:collapse}.full-screen-menu .gen-info .info-tags .info-tag[data-v-e9780c1d]{display:inline-block;overflow:hidden;border-radius:4px;margin-right:8px;border:2px solid var(--zp-primary)}.full-screen-menu .gen-info .info-tags .name[data-v-e9780c1d]{background-color:var(--zp-primary);color:var(--zp-primary-background);padding:4px;border-bottom-right-radius:4px}.full-screen-menu .gen-info .info-tags .value[data-v-e9780c1d]{padding:4px}.full-screen-menu.unset-size[data-v-e9780c1d]{width:unset!important;height:unset!important}.full-screen-menu .mouse-sensor[data-v-e9780c1d]{position:absolute;bottom:0;right:0;transform:rotate(90deg);cursor:se-resize;z-index:1;background:var(--zp-primary-background);border-radius:2px}.full-screen-menu .mouse-sensor>*[data-v-e9780c1d]{font-size:18px;padding:4px}.full-screen-menu .action-bar[data-v-e9780c1d]{display:flex;align-items:center;user-select:none;gap:4px}.full-screen-menu .action-bar .icon[data-v-e9780c1d]{font-size:1.5em;padding:2px 4px;border-radius:4px}.full-screen-menu .action-bar .icon[data-v-e9780c1d]:hover{background:var(--zp-secondary-variant-background)}.full-screen-menu .action-bar>*[data-v-e9780c1d]{flex-wrap:wrap}.full-screen-menu.lr[data-v-e9780c1d]{top:var(--04192c09)!important;right:0!important;bottom:0!important;left:100vw!important;height:unset!important;width:var(--6d773ebc)!important;transition:left ease .3s}.full-screen-menu.lr.always-on[data-v-e9780c1d],.full-screen-menu.lr.mouse-in[data-v-e9780c1d]{left:var(--437eb380)!important}.tag-alpha-item[data-v-e9780c1d]{display:flex;margin-top:4px}.tag-alpha-item h4[data-v-e9780c1d]{width:32px;flex-shrink:0}.sort-tag-switch[data-v-e9780c1d]{display:inline-block;padding-right:16px;padding-left:8px;cursor:pointer;user-select:none}.sort-tag-switch span[data-v-e9780c1d]{transition:all ease .3s;transform:scale(1.2)}.sort-tag-switch:hover span[data-v-e9780c1d]{transform:scale(1.3)}.lr-layout-control[data-v-e9780c1d]{display:flex;align-items:center;gap:16px;padding:4px 8px;flex-wrap:wrap;border-radius:2px;border-left:3px solid var(--zp-luminous);background-color:var(--zp-secondary-background)}.lr-layout-control .ctrl-item[data-v-e9780c1d]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap}.select-actions[data-v-b04c3508]>:not(:last-child){margin-right:4px}.float-panel[data-v-b04c3508]{position:absolute;bottom:32px;right:32px;background:var(--zp-primary-background);border-radius:4px;z-index:1000;padding:8px;box-shadow:0 0 4px var(--zp-secondary)}
|
||||
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-e1bd92bd] .float-panel{position:fixed}.regex-icon[data-v-e1bd92bd]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-e1bd92bd]{height:1.5em}.regex-icon[data-v-e1bd92bd]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-e1bd92bd]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-e1bd92bd]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-e1bd92bd]{padding-bottom:8px}.search-bar .form-name[data-v-e1bd92bd]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-e1bd92bd]{margin-right:4px}.container[data-v-e1bd92bd]{background:var(--zp-secondary-background);position:relative}.container .file-list[data-v-e1bd92bd]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%}
|
||||
|
|
@ -1 +0,0 @@
|
|||
[data-v-af0b8c79] .float-panel{position:fixed}.regex-icon[data-v-af0b8c79]{user-select:none;padding:4px;margin:0 4px;cursor:pointer;border:1px solid var(--zp-border);border-radius:4px}.regex-icon img[data-v-af0b8c79]{height:1.5em}.regex-icon[data-v-af0b8c79]:hover{background:var(--zp-border)}.regex-icon.selected[data-v-af0b8c79]{background:var(--primary-color-1);border:1px solid var(--primary-color)}.search-bar[data-v-af0b8c79]{padding:8px 8px 0;display:flex}.search-bar.last[data-v-af0b8c79]{padding-bottom:8px}.search-bar .form-name[data-v-af0b8c79]{flex-shrink:0;padding:4px 8px}.search-bar .actions>*[data-v-af0b8c79]{margin-right:4px}.container[data-v-af0b8c79]{background:var(--zp-secondary-background);position:relative}.container .file-list[data-v-af0b8c79]{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
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
import{bT as i,b0 as t,dZ as f,bK as n}from"./index-a7581aec.js";function u(e,s,r){if(!i(r))return!1;var a=typeof s;return(a=="number"?t(r)&&f(s,r.length):a=="string"&&s in r)?n(r[s],e):!1}export{u as i};
|
||||
import{bU as i,b1 as t,dZ as f,bL as n}from"./index-6c47ee34.js";function u(e,s,r){if(!i(r))return!1;var a=typeof s;return(a=="number"?t(r)&&f(s,r.length):a=="string"&&s in r)?n(r[s],e):!1}export{u as i};
|
||||
|
|
@ -1 +1 @@
|
|||
import{d as z,a1 as B,cD as $,ca as S,U as _,V as w,W as f,c as l,a3 as d,X as p,Y as c,a4 as s,a2 as A,af as E,cE as R,cF as y,z as V,B as x,ak as T,a0 as U}from"./index-a7581aec.js";import{_ as N}from"./index-22733dc9.js";import{u as L,a as H,f as O,F as W,d as j}from"./FileItem-3fd7894f.js";import"./numInput.vue_vue_type_style_index_0_scoped_55978858_lang-561967bb.js";/* empty css */import"./_isIterateeCall-c7210029.js";import"./index-285022d6.js";const q={class:"actions-panel actions"},G={class:"item"},P={key:0,class:"file-list"},Q={class:"hint"},X=z({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(Y){const{stackViewEl:D}=L().toRefs(),{itemSize:h,gridItems:b,cellWidth:g}=H(),i=B(),m=O(),{selectdFiles:o}=$(m),r=S(),v=async e=>{const t=R(e);t&&m.addFiles(t.nodes)},C=async()=>{r.pushAction(async()=>{const e=await y.value.post("/zip",{paths:o.value.map(u=>u.fullpath),compress:i.batchDownloadCompress,pack_only:!1},{responseType:"blob"}),t=window.URL.createObjectURL(new Blob([e.data])),a=document.createElement("a");a.href=t,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},I=async()=>{r.pushAction(async()=>{await y.value.post("/zip",{paths:o.value.map(e=>e.fullpath),compress:i.batchDownloadCompress,pack_only:!0},{responseType:"blob"}),V.success(x("success"))})},F=e=>{o.value.splice(e,1)};return(e,t)=>{const a=T,u=N;return _(),w("div",{class:"container",ref_key:"stackViewEl",ref:D,onDrop:v},[f("div",q,[l(a,{onClick:t[0]||(t[0]=n=>s(m).selectdFiles=[])},{default:d(()=>[p(c(e.$t("clear")),1)]),_:1}),f("div",G,[p(c(e.$t("compressFile"))+": ",1),l(u,{checked:s(i).batchDownloadCompress,"onUpdate:checked":t[1]||(t[1]=n=>s(i).batchDownloadCompress=n)},null,8,["checked"])]),l(a,{onClick:I,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("packOnlyNotDownload")),1)]),_:1},8,["loading"]),l(a,{onClick:C,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("zipDownload")),1)]),_:1},8,["loading"])]),s(o).length?(_(),A(s(j),{key:1,ref:"scroller",class:"file-list",items:s(o).slice(),"item-size":s(h).first,"key-field":"fullpath","item-secondary-size":s(h).second,gridItems:s(b)},{default:d(({item:n,index:k})=>[l(W,{idx:k,file:n,"cell-width":s(g),"enable-close-icon":"",onCloseIconClick:J=>F(k),"full-screen-preview-image-url":s(E)(n),"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"])):(_(),w("div",P,[f("p",Q,c(e.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const oe=U(X,[["__scopeId","data-v-a2642a17"]]);export{oe as default};
|
||||
import{d as z,a1 as B,cE as $,cb as S,U as _,V as w,W as f,c as l,a3 as d,X as p,Y as c,a4 as s,a2 as A,af as E,cF as R,cG as y,z as V,B as x,ak as T,a0 as U}from"./index-6c47ee34.js";import{_ as N}from"./index-60632a00.js";import{u as L,a as G,f as H,F as O,d as W}from"./FileItem-62bbdd6d.js";import"./numInput.vue_vue_type_style_index_0_scoped_55978858_lang-8b933f81.js";/* empty css */import"./_isIterateeCall-026674a9.js";import"./index-34c112d0.js";const j={class:"actions-panel actions"},q={class:"item"},P={key:0,class:"file-list"},Q={class:"hint"},X=z({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(Y){const{stackViewEl:b}=L().toRefs(),{itemSize:h,gridItems:D,cellWidth:g}=G(),i=B(),m=H(),{selectdFiles:o}=$(m),r=S(),v=async e=>{const t=R(e);t&&m.addFiles(t.nodes)},C=async()=>{r.pushAction(async()=>{const e=await y.value.post("/zip",{paths:o.value.map(u=>u.fullpath),compress:i.batchDownloadCompress,pack_only:!1},{responseType:"blob"}),t=window.URL.createObjectURL(new Blob([e.data])),a=document.createElement("a");a.href=t,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},I=async()=>{r.pushAction(async()=>{await y.value.post("/zip",{paths:o.value.map(e=>e.fullpath),compress:i.batchDownloadCompress,pack_only:!0},{responseType:"blob"}),V.success(x("success"))})},F=e=>{o.value.splice(e,1)};return(e,t)=>{const a=T,u=N;return _(),w("div",{class:"container",ref_key:"stackViewEl",ref:b,onDrop:v},[f("div",j,[l(a,{onClick:t[0]||(t[0]=n=>s(m).selectdFiles=[])},{default:d(()=>[p(c(e.$t("clear")),1)]),_:1}),f("div",q,[p(c(e.$t("compressFile"))+": ",1),l(u,{checked:s(i).batchDownloadCompress,"onUpdate:checked":t[1]||(t[1]=n=>s(i).batchDownloadCompress=n)},null,8,["checked"])]),l(a,{onClick:I,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("packOnlyNotDownload")),1)]),_:1},8,["loading"]),l(a,{onClick:C,type:"primary",loading:!s(r).isIdle},{default:d(()=>[p(c(e.$t("zipDownload")),1)]),_:1},8,["loading"])]),s(o).length?(_(),A(s(W),{key:1,ref:"scroller",class:"file-list",items:s(o).slice(),"item-size":s(h).first,"key-field":"fullpath","item-secondary-size":s(h).second,gridItems:s(D)},{default:d(({item:n,index:k})=>[l(O,{idx:k,file:n,"cell-width":s(g),"enable-close-icon":"",onCloseIconClick:J=>F(k),"full-screen-preview-image-url":s(E)(n),"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"])):(_(),w("div",P,[f("p",Q,c(e.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const oe=U(X,[["__scopeId","data-v-a2642a17"]]);export{oe 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
|
|
@ -0,0 +1 @@
|
|||
import{u as w,a as y,F as k,d as x}from"./FileItem-62bbdd6d.js";import{d as F,a1 as h,c8 as b,r as D,bh as I,bl as C,U as V,V as E,c,a3 as z,a4 as e,af as S,cF as B,cH as R,a0 as A}from"./index-6c47ee34.js";import"./numInput.vue_vue_type_style_index_0_scoped_55978858_lang-8b933f81.js";/* empty css */import"./_isIterateeCall-026674a9.js";import"./index-34c112d0.js";const H=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}=y(),g=b(),a=D(o.files??[]),_=async s=>{const l=B(s);o.allowDragAndDrop&&l&&(a.value=R([...a.value,...l.nodes]))},v=s=>{a.value.splice(s,1)};return I(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(a.value),setFiles:s=>a.value=s})}),(s,l)=>(V(),E("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(x),{ref:"scroller",class:"file-list",items:a.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:z(({item:t,index:r})=>{var n;return[c(k,{idx:r,file:t,"cell-width":e(f),"enable-close-icon":o.removable,onCloseIconClick:K=>v(r),"full-screen-preview-image-url":e(S)(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 N=A(H,[["__scopeId","data-v-f35f4802"]]);export{N as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{u as w,a as k,F as y,d as x}from"./FileItem-3fd7894f.js";import{d as F,a1 as b,c7 as h,r as D,bg as I,bk as C,U as E,V,c,a3 as z,a4 as e,af as S,cE as B,cG as R,a0 as A}from"./index-a7581aec.js";import"./numInput.vue_vue_type_style_index_0_scoped_55978858_lang-561967bb.js";/* empty css */import"./_isIterateeCall-c7210029.js";import"./index-285022d6.js";const G=F({__name:"gridView",props:{tabIdx:{},paneIdx:{},id:{},removable:{type:Boolean},allowDragAndDrop:{type:Boolean},files:{},paneKey:{}},setup(p){const o=p,d=b(),{stackViewEl:m}=w().toRefs(),{itemSize:i,gridItems:u,cellWidth:f}=k(),g=h(),a=D(o.files??[]),_=async s=>{const l=B(s);o.allowDragAndDrop&&l&&(a.value=R([...a.value,...l.nodes]))},v=s=>{a.value.splice(s,1)};return I(()=>{d.pageFuncExportMap.set(o.paneKey,{getFiles:()=>C(a.value),setFiles:s=>a.value=s})}),(s,l)=>(E(),V("div",{class:"container",ref_key:"stackViewEl",ref:m,onDrop:_},[c(e(x),{ref:"scroller",class:"file-list",items:a.value.slice(),"item-size":e(i).first,"key-field":"fullpath","item-secondary-size":e(i).second,gridItems:e(u)},{default:z(({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(S)(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 N=A(G,[["__scopeId","data-v-f35f4802"]]);export{N as default};
|
||||
|
|
@ -1 +1 @@
|
|||
import{am as F,r as g,l as N,k as A,O as b,G as P,ca as R,cl as O,cq as z}from"./index-a7581aec.js";import{u as L,a as Q,b as j,e as H}from"./FileItem-3fd7894f.js";import{a as T,b as U,c as W}from"./MultiSelectKeep-18d7b6cc.js";import{u as B}from"./useGenInfoDiff-1503a124.js";let K=0;const V=()=>++K,X=(n,i,{dataUpdateStrategy:l="replace"}={})=>{const o=F([""]),c=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"&&(b((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=>A(void 0,void 0,void 0,function*(){if(a.value||c.value&&typeof e>"u")return!1;a.value=!0;const s=V();f.value=s;try{let r;if(typeof e=="number"){if(r=o[e],typeof r!="string")return!1}else r=o[o.length-1];const h=yield n(r);if(v.has(s))return v.delete(s),!1;w(i(h));const u=h.cursor;if((e===o.length-1||typeof e!="number")&&(c.value=!u.has_next,u.has_next)){const m=u.next_cursor||u.next;b(typeof m=="string"),o.push(m)}}finally{f.value===s&&(a.value=!1)}return!0}),p=()=>{v.add(f.value),a.value=!1},x=(e=!1)=>A(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&p(),b(!a.value),o.splice(0,o.length,""),a.value=!1,t.value=void 0,c.value=!1,s&&(yield d())}),I=()=>({next:()=>A(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return N({abort:p,load:c,next:d,res:t,loading:a,cursorStack:o,reset:x,[Symbol.asyncIterator]:I,iter:{[Symbol.asyncIterator]:I}})},se=n=>F(X(n,i=>i.files,{dataUpdateStrategy:"merge"})),ne=n=>{const i=F(new Set),l=P(()=>(n.res??[]).filter(y=>!i.has(y.fullpath))),o=R(),{stackViewEl:c,multiSelectedIdxs:t,stack:a,scroller:f,props:v}=L({images:l}).toRefs(),{itemSize:w,gridItems:d,cellWidth:p,onScroll:x}=Q({fetchNext:()=>n.next()}),{showMenuIdx:I}=j(),{onFileDragStart:e,onFileDragEnd:s}=T(),{showGenInfo:r,imageGenInfo:h,q:u,onContextMenuClick:m,onFileItemClick:C}=U({openNext:O}),{previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:q,canPreview:D}=W({loadNext:()=>n.next()}),G=async(y,S,J)=>{a.value=[{curr:"",files:l.value}],await m(y,S,J)};H("removeFiles",async({paths:y})=>{y.forEach(S=>i.add(S))});const k=()=>{z(l.value)};return{images:l,scroller:f,queue:o,iter:n,onContextMenuClickU:G,stackViewEl:c,previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:q,canPreview:D,itemSize:w,gridItems:d,showGenInfo:r,imageGenInfo:h,q:u,onContextMenuClick:m,onFileItemClick:C,showMenuIdx:I,multiSelectedIdxs:t,onFileDragStart:e,onFileDragEnd:s,cellWidth:p,onScroll:x,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!n.load;)await n.next();k()},props:v,...B()}};export{se as c,ne as u};
|
||||
import{am as F,r as g,l as P,k as A,O as b,G as R,cb as q,cm as O,cr as z}from"./index-6c47ee34.js";import{u as L,a as Q,b as j,e as H}from"./FileItem-62bbdd6d.js";import{a as T,b as U,c as W}from"./MultiSelectKeep-44266caf.js";import{u as B}from"./useGenInfoDiff-e092c21c.js";let K=0;const V=()=>++K,X=(n,i,{dataUpdateStrategy:l="replace"}={})=>{const o=F([""]),c=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"&&(b((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=>A(void 0,void 0,void 0,function*(){if(a.value||c.value&&typeof e>"u")return!1;a.value=!0;const s=V();f.value=s;try{let r;if(typeof e=="number"){if(r=o[e],typeof r!="string")return!1}else r=o[o.length-1];const h=yield n(r);if(v.has(s))return v.delete(s),!1;w(i(h));const u=h.cursor;if((e===o.length-1||typeof e!="number")&&(c.value=!u.has_next,u.has_next)){const m=u.next_cursor||u.next;b(typeof m=="string"),o.push(m)}}finally{f.value===s&&(a.value=!1)}return!0}),p=()=>{v.add(f.value),a.value=!1},x=(e=!1)=>A(void 0,void 0,void 0,function*(){const{refetch:s,force:r}=typeof e=="object"?e:{refetch:e};r&&p(),b(!a.value),o.splice(0,o.length,""),a.value=!1,t.value=void 0,c.value=!1,s&&(yield d())}),I=()=>({next:()=>A(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return P({abort:p,load:c,next:d,res:t,loading:a,cursorStack:o,reset:x,[Symbol.asyncIterator]:I,iter:{[Symbol.asyncIterator]:I}})},se=n=>F(X(n,i=>i.files,{dataUpdateStrategy:"merge"})),ne=n=>{const i=F(new Set),l=R(()=>(n.res??[]).filter(y=>!i.has(y.fullpath))),o=q(),{stackViewEl:c,multiSelectedIdxs:t,stack:a,scroller:f,props:v}=L({images:l}).toRefs(),{itemSize:w,gridItems:d,cellWidth:p,onScroll:x}=Q({fetchNext:()=>n.next()}),{showMenuIdx:I}=j(),{onFileDragStart:e,onFileDragEnd:s}=T(),{showGenInfo:r,imageGenInfo:h,q:u,onContextMenuClick:m,onFileItemClick:C}=U({openNext:O}),{previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:D,canPreview:G}=W({loadNext:()=>n.next()}),J=async(y,S,N)=>{a.value=[{curr:"",files:l.value}],await m(y,S,N)};H("removeFiles",async({paths:y})=>{y.forEach(S=>i.add(S))});const k=()=>{z(l.value)};return{images:l,scroller:f,queue:o,iter:n,onContextMenuClickU:J,stackViewEl:c,previewIdx:_,previewing:E,onPreviewVisibleChange:M,previewImgMove:D,canPreview:G,itemSize:w,gridItems:d,showGenInfo:r,imageGenInfo:h,q:u,onContextMenuClick:m,onFileItemClick:C,showMenuIdx:I,multiSelectedIdxs:t,onFileDragStart:e,onFileDragEnd:s,cellWidth:p,onScroll:x,saveLoadedFileAsJson:k,saveAllFileAsJson:async()=>{for(;!n.load;)await n.next();k()},props:v,...B()}};export{se as c,ne as u};
|
||||
|
|
@ -1 +1 @@
|
|||
import{r as F,o as P,cv as K,av as L,G as l,ax as T,ay as $,d as I,u as B,cw as _,b as y,bj as V,cx as A,an as E,h as c,c as M,a as G}from"./index-a7581aec.js";const W=function(){var o=F(!1);return P(function(){o.value=K()}),o};var D=Symbol("rowContextKey"),U=function(r){T(D,r)},k=function(){return L(D,{gutter:l(function(){}),wrap:l(function(){}),supportFlexGap:l(function(){})})};$("top","middle","bottom","stretch");$("start","end","center","space-around","space-between");var q=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},H=I({compatConfig:{MODE:3},name:"ARow",props:q(),setup:function(r,N){var m=N.slots,v=B("row",r),d=v.prefixCls,h=v.direction,j,x=F({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),w=W();P(function(){j=_.subscribe(function(e){var t=r.gutter||0;(!Array.isArray(t)&&y(t)==="object"||Array.isArray(t)&&(y(t[0])==="object"||y(t[1])==="object"))&&(x.value=e)})}),V(function(){_.unsubscribe(j)});var S=l(function(){var e=[0,0],t=r.gutter,n=t===void 0?0:t,s=Array.isArray(n)?n:[n,0];return s.forEach(function(i,b){if(y(i)==="object")for(var a=0;a<A.length;a++){var p=A[a];if(x.value[p]&&i[p]!==void 0){e[b]=i[p];break}}else e[b]=i||0}),e});U({gutter:S,supportFlexGap:w,wrap:l(function(){return r.wrap})});var R=l(function(){var e;return E(d.value,(e={},c(e,"".concat(d.value,"-no-wrap"),r.wrap===!1),c(e,"".concat(d.value,"-").concat(r.justify),r.justify),c(e,"".concat(d.value,"-").concat(r.align),r.align),c(e,"".concat(d.value,"-rtl"),h.value==="rtl"),e))}),O=l(function(){var e=S.value,t={},n=e[0]>0?"".concat(e[0]/-2,"px"):void 0,s=e[1]>0?"".concat(e[1]/-2,"px"):void 0;return n&&(t.marginLeft=n,t.marginRight=n),w.value?t.rowGap="".concat(e[1],"px"):s&&(t.marginTop=s,t.marginBottom=s),t});return function(){var e;return M("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});const Y=H;function J(o){return typeof o=="number"?"".concat(o," ").concat(o," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(o)?"0 0 ".concat(o):o}var Q=function(){return{span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},xxxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}};const Z=I({compatConfig:{MODE:3},name:"ACol",props:Q(),setup:function(r,N){var m=N.slots,v=k(),d=v.gutter,h=v.supportFlexGap,j=v.wrap,x=B("col",r),w=x.prefixCls,S=x.direction,R=l(function(){var e,t=r.span,n=r.order,s=r.offset,i=r.push,b=r.pull,a=w.value,p={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(g){var f,u={},C=r[g];typeof C=="number"?u.span=C:y(C)==="object"&&(u=C||{}),p=G(G({},p),{},(f={},c(f,"".concat(a,"-").concat(g,"-").concat(u.span),u.span!==void 0),c(f,"".concat(a,"-").concat(g,"-order-").concat(u.order),u.order||u.order===0),c(f,"".concat(a,"-").concat(g,"-offset-").concat(u.offset),u.offset||u.offset===0),c(f,"".concat(a,"-").concat(g,"-push-").concat(u.push),u.push||u.push===0),c(f,"".concat(a,"-").concat(g,"-pull-").concat(u.pull),u.pull||u.pull===0),c(f,"".concat(a,"-rtl"),S.value==="rtl"),f))}),E(a,(e={},c(e,"".concat(a,"-").concat(t),t!==void 0),c(e,"".concat(a,"-order-").concat(n),n),c(e,"".concat(a,"-offset-").concat(s),s),c(e,"".concat(a,"-push-").concat(i),i),c(e,"".concat(a,"-pull-").concat(b),b),e),p)}),O=l(function(){var e=r.flex,t=d.value,n={};if(t&&t[0]>0){var s="".concat(t[0]/2,"px");n.paddingLeft=s,n.paddingRight=s}if(t&&t[1]>0&&!h.value){var i="".concat(t[1]/2,"px");n.paddingTop=i,n.paddingBottom=i}return e&&(n.flex=J(e),j.value===!1&&!n.minWidth&&(n.minWidth=0)),n});return function(){var e;return M("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});export{Z as C,Y as R};
|
||||
import{r as F,o as P,cw as K,av as L,G as l,ax as T,ay as $,d as I,u as B,cx as _,b as y,bk as V,cy as A,an as E,h as c,c as M,a as G}from"./index-6c47ee34.js";const W=function(){var o=F(!1);return P(function(){o.value=K()}),o};var D=Symbol("rowContextKey"),k=function(r){T(D,r)},U=function(){return L(D,{gutter:l(function(){}),wrap:l(function(){}),supportFlexGap:l(function(){})})};$("top","middle","bottom","stretch");$("start","end","center","space-around","space-between");var q=function(){return{align:String,justify:String,prefixCls:String,gutter:{type:[Number,Array,Object],default:0},wrap:{type:Boolean,default:void 0}}},H=I({compatConfig:{MODE:3},name:"ARow",props:q(),setup:function(r,N){var m=N.slots,v=B("row",r),d=v.prefixCls,h=v.direction,j,x=F({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0,xxxl:!0}),w=W();P(function(){j=_.subscribe(function(e){var t=r.gutter||0;(!Array.isArray(t)&&y(t)==="object"||Array.isArray(t)&&(y(t[0])==="object"||y(t[1])==="object"))&&(x.value=e)})}),V(function(){_.unsubscribe(j)});var S=l(function(){var e=[0,0],t=r.gutter,n=t===void 0?0:t,s=Array.isArray(n)?n:[n,0];return s.forEach(function(i,b){if(y(i)==="object")for(var a=0;a<A.length;a++){var p=A[a];if(x.value[p]&&i[p]!==void 0){e[b]=i[p];break}}else e[b]=i||0}),e});k({gutter:S,supportFlexGap:w,wrap:l(function(){return r.wrap})});var R=l(function(){var e;return E(d.value,(e={},c(e,"".concat(d.value,"-no-wrap"),r.wrap===!1),c(e,"".concat(d.value,"-").concat(r.justify),r.justify),c(e,"".concat(d.value,"-").concat(r.align),r.align),c(e,"".concat(d.value,"-rtl"),h.value==="rtl"),e))}),O=l(function(){var e=S.value,t={},n=e[0]>0?"".concat(e[0]/-2,"px"):void 0,s=e[1]>0?"".concat(e[1]/-2,"px"):void 0;return n&&(t.marginLeft=n,t.marginRight=n),w.value?t.rowGap="".concat(e[1],"px"):s&&(t.marginTop=s,t.marginBottom=s),t});return function(){var e;return M("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});const Y=H;function J(o){return typeof o=="number"?"".concat(o," ").concat(o," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(o)?"0 0 ".concat(o):o}var Q=function(){return{span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},xxxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}};const Z=I({compatConfig:{MODE:3},name:"ACol",props:Q(),setup:function(r,N){var m=N.slots,v=U(),d=v.gutter,h=v.supportFlexGap,j=v.wrap,x=B("col",r),w=x.prefixCls,S=x.direction,R=l(function(){var e,t=r.span,n=r.order,s=r.offset,i=r.push,b=r.pull,a=w.value,p={};return["xs","sm","md","lg","xl","xxl","xxxl"].forEach(function(g){var f,u={},C=r[g];typeof C=="number"?u.span=C:y(C)==="object"&&(u=C||{}),p=G(G({},p),{},(f={},c(f,"".concat(a,"-").concat(g,"-").concat(u.span),u.span!==void 0),c(f,"".concat(a,"-").concat(g,"-order-").concat(u.order),u.order||u.order===0),c(f,"".concat(a,"-").concat(g,"-offset-").concat(u.offset),u.offset||u.offset===0),c(f,"".concat(a,"-").concat(g,"-push-").concat(u.push),u.push||u.push===0),c(f,"".concat(a,"-").concat(g,"-pull-").concat(u.pull),u.pull||u.pull===0),c(f,"".concat(a,"-rtl"),S.value==="rtl"),f))}),E(a,(e={},c(e,"".concat(a,"-").concat(t),t!==void 0),c(e,"".concat(a,"-order-").concat(n),n),c(e,"".concat(a,"-offset-").concat(s),s),c(e,"".concat(a,"-push-").concat(i),i),c(e,"".concat(a,"-pull-").concat(b),b),e),p)}),O=l(function(){var e=r.flex,t=d.value,n={};if(t&&t[0]>0){var s="".concat(t[0]/2,"px");n.paddingLeft=s,n.paddingRight=s}if(t&&t[1]>0&&!h.value){var i="".concat(t[1]/2,"px");n.paddingTop=i,n.paddingBottom=i}return e&&(n.flex=J(e),j.value===!1&&!n.minWidth&&(n.minWidth=0)),n});return function(){var e;return M("div",{class:R.value,style:O.value},[(e=m.default)===null||e===void 0?void 0:e.call(m)])}}});export{Z as C,Y as R};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
import{d as x,a1 as $,aK as g,cH as b,r as w,U as p,V as i,W as a,c as r,a3 as d,X as u,Y as n,Z as B,a8 as I,a4 as m,y as V,z as _,B as v,aj as W,ak as D,cI as N,a0 as R}from"./index-a7581aec.js";/* empty css */const F={class:"container"},K={class:"actions"},L={class:"uni-desc"},U={class:"snapshot"},j=x({__name:"index",props:{tabIdx:{},paneIdx:{},id:{},paneKey:{}},setup(q){const h=$(),t=g(),f=e=>{h.tabList=V(e.tabs)},k=b(async e=>{await N(`workspace_snapshot_${e.id}`),t.snapshots=t.snapshots.filter(c=>c.id!==e.id),_.success(v("deleteSuccess"))}),o=w(""),y=async()=>{if(!o.value){_.error(v("nameRequired"));return}const e=t.createSnapshot(o.value);await t.addSnapshot(e),_.success(v("saveCompleted"))};return(e,c)=>{const C=W,l=D;return p(),i("div",F,[a("div",K,[r(C,{value:o.value,"onUpdate:value":c[0]||(c[0]=s=>o.value=s),placeholder:e.$t("name"),style:{"max-width":"300px"}},null,8,["value","placeholder"]),r(l,{type:"primary",onClick:y},{default:d(()=>[u(n(e.$t("saveWorkspaceSnapshot")),1)]),_:1})]),a("p",L,n(e.$t("WorkspaceSnapshotDesc")),1),a("ul",U,[(p(!0),i(B,null,I(m(t).snapshots,s=>(p(),i("li",{key:s.id},[a("div",null,[a("span",null,n(s.name),1)]),a("div",null,[r(l,{onClick:S=>f(s)},{default:d(()=>[u(n(e.$t("restore")),1)]),_:2},1032,["onClick"]),r(l,{onClick:S=>m(k)(s)},{default:d(()=>[u(n(e.$t("remove")),1)]),_:2},1032,["onClick"])])]))),128))])])}}});const E=R(j,[["__scopeId","data-v-2c44013c"]]);export{E as default};
|
||||
import{d as x,a1 as $,aK as g,cI as b,r as w,U as p,V as i,W as a,c as r,a3 as d,X as u,Y as n,Z as B,a8 as I,a4 as m,y as V,z as _,B as v,aj as W,ak as D,cJ as N,a0 as R}from"./index-6c47ee34.js";/* empty css */const F={class:"container"},K={class:"actions"},L={class:"uni-desc"},U={class:"snapshot"},j=x({__name:"index",props:{tabIdx:{},paneIdx:{},id:{},paneKey:{}},setup(q){const h=$(),t=g(),f=e=>{h.tabList=V(e.tabs)},k=b(async e=>{await N(`workspace_snapshot_${e.id}`),t.snapshots=t.snapshots.filter(c=>c.id!==e.id),_.success(v("deleteSuccess"))}),o=w(""),y=async()=>{if(!o.value){_.error(v("nameRequired"));return}const e=t.createSnapshot(o.value);await t.addSnapshot(e),_.success(v("saveCompleted"))};return(e,c)=>{const C=W,l=D;return p(),i("div",F,[a("div",K,[r(C,{value:o.value,"onUpdate:value":c[0]||(c[0]=s=>o.value=s),placeholder:e.$t("name"),style:{"max-width":"300px"}},null,8,["value","placeholder"]),r(l,{type:"primary",onClick:y},{default:d(()=>[u(n(e.$t("saveWorkspaceSnapshot")),1)]),_:1})]),a("p",L,n(e.$t("WorkspaceSnapshotDesc")),1),a("ul",U,[(p(!0),i(B,null,I(m(t).snapshots,s=>(p(),i("li",{key:s.id},[a("div",null,[a("span",null,n(s.name),1)]),a("div",null,[r(l,{onClick:S=>f(s)},{default:d(()=>[u(n(e.$t("restore")),1)]),_:2},1032,["onClick"]),r(l,{onClick:S=>m(k)(s)},{default:d(()=>[u(n(e.$t("remove")),1)]),_:2},1032,["onClick"])])]))),128))])])}}});const E=R(j,[["__scopeId","data-v-2c44013c"]]);export{E as default};
|
||||
|
|
@ -1 +1 @@
|
|||
import{cu as j,ay as z,d as K,j as U,dg as $,w,r as b,G as S,m as A,u as D,o as E,az as G,h as d,c as s,a as C,aw as H,be as L,g as _,dh as W,P as u,di as x}from"./index-a7581aec.js";var R=z("small","default"),q=function(){return{id:String,prefixCls:String,size:u.oneOf(R),disabled:{type:Boolean,default:void 0},checkedChildren:u.any,unCheckedChildren:u.any,tabindex:u.oneOfType([u.string,u.number]),autofocus:{type:Boolean,default:void 0},loading:{type:Boolean,default:void 0},checked:u.oneOfType([u.string,u.number,u.looseBool]),checkedValue:u.oneOfType([u.string,u.number,u.looseBool]).def(!0),unCheckedValue:u.oneOfType([u.string,u.number,u.looseBool]).def(!1),onChange:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onMouseup:{type:Function},"onUpdate:checked":{type:Function},onBlur:Function,onFocus:Function}},J=K({compatConfig:{MODE:3},name:"ASwitch",__ANT_SWITCH:!0,inheritAttrs:!1,props:q(),slots:["checkedChildren","unCheckedChildren"],setup:function(n,r){var o=r.attrs,y=r.slots,B=r.expose,l=r.emit,m=U();$(function(){w(!("defaultChecked"in o),"Switch","'defaultChecked' is deprecated, please use 'v-model:checked'"),w(!("value"in o),"Switch","`value` is not validate prop, do you mean `checked`?")});var h=b(n.checked!==void 0?n.checked:o.defaultChecked),f=S(function(){return h.value===n.checkedValue});A(function(){return n.checked},function(){h.value=n.checked});var v=D("switch",n),c=v.prefixCls,F=v.direction,T=v.size,i=b(),g=function(){var e;(e=i.value)===null||e===void 0||e.focus()},V=function(){var e;(e=i.value)===null||e===void 0||e.blur()};B({focus:g,blur:V}),E(function(){G(function(){n.autofocus&&!n.disabled&&i.value.focus()})});var k=function(e,t){n.disabled||(l("update:checked",e),l("change",e,t),m.onFieldChange())},I=function(e){l("blur",e)},N=function(e){g();var t=f.value?n.unCheckedValue:n.checkedValue;k(t,e),l("click",t,e)},M=function(e){e.keyCode===x.LEFT?k(n.unCheckedValue,e):e.keyCode===x.RIGHT&&k(n.checkedValue,e),l("keydown",e)},O=function(e){var t;(t=i.value)===null||t===void 0||t.blur(),l("mouseup",e)},P=S(function(){var a;return a={},d(a,"".concat(c.value,"-small"),T.value==="small"),d(a,"".concat(c.value,"-loading"),n.loading),d(a,"".concat(c.value,"-checked"),f.value),d(a,"".concat(c.value,"-disabled"),n.disabled),d(a,c.value,!0),d(a,"".concat(c.value,"-rtl"),F.value==="rtl"),a});return function(){var a;return s(W,{insertExtraNode:!0},{default:function(){return[s("button",C(C(C({},H(n,["prefixCls","checkedChildren","unCheckedChildren","checked","autofocus","checkedValue","unCheckedValue","id","onChange","onUpdate:checked"])),o),{},{id:(a=n.id)!==null&&a!==void 0?a:m.id.value,onKeydown:M,onClick:N,onBlur:I,onMouseup:O,type:"button",role:"switch","aria-checked":h.value,disabled:n.disabled||n.loading,class:[o.class,P.value],ref:i}),[s("div",{class:"".concat(c.value,"-handle")},[n.loading?s(L,{class:"".concat(c.value,"-loading-icon")},null):null]),s("span",{class:"".concat(c.value,"-inner")},[f.value?_(y,n,"checkedChildren"):_(y,n,"unCheckedChildren")])])]}})}}});const X=j(J);export{X as _};
|
||||
import{cv as j,ay as z,d as K,j as U,dg as $,w,r as b,G as S,m as A,u as D,o as E,az as G,h as d,c as s,a as C,aw as H,bf as L,g as _,dh as W,P as c,di as x}from"./index-6c47ee34.js";var R=z("small","default"),q=function(){return{id:String,prefixCls:String,size:c.oneOf(R),disabled:{type:Boolean,default:void 0},checkedChildren:c.any,unCheckedChildren:c.any,tabindex:c.oneOfType([c.string,c.number]),autofocus:{type:Boolean,default:void 0},loading:{type:Boolean,default:void 0},checked:c.oneOfType([c.string,c.number,c.looseBool]),checkedValue:c.oneOfType([c.string,c.number,c.looseBool]).def(!0),unCheckedValue:c.oneOfType([c.string,c.number,c.looseBool]).def(!1),onChange:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onMouseup:{type:Function},"onUpdate:checked":{type:Function},onBlur:Function,onFocus:Function}},J=K({compatConfig:{MODE:3},name:"ASwitch",__ANT_SWITCH:!0,inheritAttrs:!1,props:q(),slots:["checkedChildren","unCheckedChildren"],setup:function(n,r){var o=r.attrs,y=r.slots,B=r.expose,l=r.emit,m=U();$(function(){w(!("defaultChecked"in o),"Switch","'defaultChecked' is deprecated, please use 'v-model:checked'"),w(!("value"in o),"Switch","`value` is not validate prop, do you mean `checked`?")});var h=b(n.checked!==void 0?n.checked:o.defaultChecked),f=S(function(){return h.value===n.checkedValue});A(function(){return n.checked},function(){h.value=n.checked});var v=D("switch",n),u=v.prefixCls,F=v.direction,T=v.size,i=b(),g=function(){var e;(e=i.value)===null||e===void 0||e.focus()},V=function(){var e;(e=i.value)===null||e===void 0||e.blur()};B({focus:g,blur:V}),E(function(){G(function(){n.autofocus&&!n.disabled&&i.value.focus()})});var k=function(e,t){n.disabled||(l("update:checked",e),l("change",e,t),m.onFieldChange())},I=function(e){l("blur",e)},N=function(e){g();var t=f.value?n.unCheckedValue:n.checkedValue;k(t,e),l("click",t,e)},M=function(e){e.keyCode===x.LEFT?k(n.unCheckedValue,e):e.keyCode===x.RIGHT&&k(n.checkedValue,e),l("keydown",e)},O=function(e){var t;(t=i.value)===null||t===void 0||t.blur(),l("mouseup",e)},P=S(function(){var a;return a={},d(a,"".concat(u.value,"-small"),T.value==="small"),d(a,"".concat(u.value,"-loading"),n.loading),d(a,"".concat(u.value,"-checked"),f.value),d(a,"".concat(u.value,"-disabled"),n.disabled),d(a,u.value,!0),d(a,"".concat(u.value,"-rtl"),F.value==="rtl"),a});return function(){var a;return s(W,{insertExtraNode:!0},{default:function(){return[s("button",C(C(C({},H(n,["prefixCls","checkedChildren","unCheckedChildren","checked","autofocus","checkedValue","unCheckedValue","id","onChange","onUpdate:checked"])),o),{},{id:(a=n.id)!==null&&a!==void 0?a:m.id.value,onKeydown:M,onClick:N,onBlur:I,onMouseup:O,type:"button",role:"switch","aria-checked":h.value,disabled:n.disabled||n.loading,class:[o.class,P.value],ref:i}),[s("div",{class:"".concat(u.value,"-handle")},[n.loading?s(L,{class:"".concat(u.value,"-loading-icon")},null):null]),s("span",{class:"".concat(u.value,"-inner")},[f.value?_(y,n,"checkedChildren"):_(y,n,"unCheckedChildren")])])]}})}}});const X=j(J);export{X as _};
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
import{d as w,bB as A,av as D,cy as B,az as j,n as k,cz as V,cA as y,e as $,c as a,_ as T,h as r,a as P,cB as M,P as b}from"./index-a7581aec.js";var O=["class","style"],W=function(){return{prefixCls:String,spinning:{type:Boolean,default:void 0},size:String,wrapperClassName:String,tip:b.any,delay:Number,indicator:b.any}},p=null;function q(t,n){return!!t&&!!n&&!isNaN(Number(n))}function G(t){var n=t.indicator;p=typeof n=="function"?n:function(){return a(n,null,null)}}const H=w({compatConfig:{MODE:3},name:"ASpin",inheritAttrs:!1,props:A(W(),{size:"default",spinning:!0,wrapperClassName:""}),setup:function(){return{originalUpdateSpinning:null,configProvider:D("configProvider",B)}},data:function(){var n=this.spinning,e=this.delay,i=q(n,e);return{sSpinning:n&&!i}},created:function(){this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props)},mounted:function(){this.updateSpinning()},updated:function(){var n=this;j(function(){n.debouncifyUpdateSpinning(),n.updateSpinning()})},beforeUnmount:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(n){var e=n||this.$props,i=e.delay;i&&(this.cancelExistingSpin(),this.updateSpinning=k(this.originalUpdateSpinning,i))},updateSpinning:function(){var n=this.spinning,e=this.sSpinning;e!==n&&(this.sSpinning=n)},cancelExistingSpin:function(){var n=this.updateSpinning;n&&n.cancel&&n.cancel()},renderIndicator:function(n){var e="".concat(n,"-dot"),i=V(this,"indicator");return i===null?null:(Array.isArray(i)&&(i=i.length===1?i[0]:i),y(i)?$(i,{class:e}):p&&y(p())?$(p(),{class:e}):a("span",{class:"".concat(e," ").concat(n,"-dot-spin")},[a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null)]))}},render:function(){var n,e,i,o=this.$props,f=o.size,x=o.prefixCls,h=o.tip,d=h===void 0?(n=(e=this.$slots).tip)===null||n===void 0?void 0:n.call(e):h,N=o.wrapperClassName,l=this.$attrs,v=l.class,_=l.style,C=T(l,O),S=this.configProvider,U=S.getPrefixCls,z=S.direction,s=U("spin",x),u=this.sSpinning,E=(i={},r(i,s,!0),r(i,"".concat(s,"-sm"),f==="small"),r(i,"".concat(s,"-lg"),f==="large"),r(i,"".concat(s,"-spinning"),u),r(i,"".concat(s,"-show-text"),!!d),r(i,"".concat(s,"-rtl"),z==="rtl"),r(i,v,!!v),i),m=a("div",P(P({},C),{},{style:_,class:E}),[this.renderIndicator(s),d?a("div",{class:"".concat(s,"-text")},[d]):null]),g=M(this);if(g&&g.length){var c,I=(c={},r(c,"".concat(s,"-container"),!0),r(c,"".concat(s,"-blur"),u),c);return a("div",{class:["".concat(s,"-nested-loading"),N]},[u&&a("div",{key:"loading"},[m]),a("div",{class:I,key:"container"},[g])])}return m}});export{H as S,G as s};
|
||||
import{d as w,bC as A,av as D,cz as j,az as k,n as B,cA as V,cB as y,e as $,c as a,_ as T,h as r,a as P,cC as M,P as b}from"./index-6c47ee34.js";var O=["class","style"],W=function(){return{prefixCls:String,spinning:{type:Boolean,default:void 0},size:String,wrapperClassName:String,tip:b.any,delay:Number,indicator:b.any}},p=null;function q(t,n){return!!t&&!!n&&!isNaN(Number(n))}function G(t){var n=t.indicator;p=typeof n=="function"?n:function(){return a(n,null,null)}}const H=w({compatConfig:{MODE:3},name:"ASpin",inheritAttrs:!1,props:A(W(),{size:"default",spinning:!0,wrapperClassName:""}),setup:function(){return{originalUpdateSpinning:null,configProvider:D("configProvider",j)}},data:function(){var n=this.spinning,e=this.delay,i=q(n,e);return{sSpinning:n&&!i}},created:function(){this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props)},mounted:function(){this.updateSpinning()},updated:function(){var n=this;k(function(){n.debouncifyUpdateSpinning(),n.updateSpinning()})},beforeUnmount:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(n){var e=n||this.$props,i=e.delay;i&&(this.cancelExistingSpin(),this.updateSpinning=B(this.originalUpdateSpinning,i))},updateSpinning:function(){var n=this.spinning,e=this.sSpinning;e!==n&&(this.sSpinning=n)},cancelExistingSpin:function(){var n=this.updateSpinning;n&&n.cancel&&n.cancel()},renderIndicator:function(n){var e="".concat(n,"-dot"),i=V(this,"indicator");return i===null?null:(Array.isArray(i)&&(i=i.length===1?i[0]:i),y(i)?$(i,{class:e}):p&&y(p())?$(p(),{class:e}):a("span",{class:"".concat(e," ").concat(n,"-dot-spin")},[a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null),a("i",{class:"".concat(n,"-dot-item")},null)]))}},render:function(){var n,e,i,o=this.$props,f=o.size,x=o.prefixCls,h=o.tip,d=h===void 0?(n=(e=this.$slots).tip)===null||n===void 0?void 0:n.call(e):h,C=o.wrapperClassName,l=this.$attrs,v=l.class,N=l.style,_=T(l,O),S=this.configProvider,U=S.getPrefixCls,z=S.direction,s=U("spin",x),u=this.sSpinning,E=(i={},r(i,s,!0),r(i,"".concat(s,"-sm"),f==="small"),r(i,"".concat(s,"-lg"),f==="large"),r(i,"".concat(s,"-spinning"),u),r(i,"".concat(s,"-show-text"),!!d),r(i,"".concat(s,"-rtl"),z==="rtl"),r(i,v,!!v),i),m=a("div",P(P({},_),{},{style:N,class:E}),[this.renderIndicator(s),d?a("div",{class:"".concat(s,"-text")},[d]):null]),g=M(this);if(g&&g.length){var c,I=(c={},r(c,"".concat(s,"-container"),!0),r(c,"".concat(s,"-blur"),u),c);return a("div",{class:["".concat(s,"-nested-loading"),C]},[u&&a("div",{key:"loading"},[m]),a("div",{class:I,key:"container"},[g])])}return m}});export{H as S,G as s};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{cj as e,ck as i,cl as r,cm as a,b0 as c}from"./index-a7581aec.js";function o(s,t){return e(i(s,t,r),s+"")}function b(s){return a(s)&&c(s)}export{o as b,b as i};
|
||||
|
|
@ -0,0 +1 @@
|
|||
import{ck as e,cl as i,cm as r,cn as a,b1 as n}from"./index-6c47ee34.js";function o(s,t){return e(i(s,t,r),s+"")}function b(s){return a(s)&&n(s)}export{o as b,b as i};
|
||||
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 @@
|
|||
import{d as Z,a1 as ee,r as F,J as te,K as le,o as ie,U as v,V as N,c as i,a4 as e,W as g,a3 as n,X as k,Y as u,a5 as R,L as se,a6 as ae,af as oe,ag as $,$ as A,a2 as ne,z as w,B as re,cK as ce,cL as de,ak as ue,ai as me,T as fe,a0 as pe}from"./index-6c47ee34.js";import{u as ve,c as ge,a as ke,F as we,d as he}from"./FileItem-62bbdd6d.js";import{a as Ce,b as Se,c as _e,M as Ie,o as z,L as ye,R as xe,f as be}from"./MultiSelectKeep-44266caf.js";import"./numInput.vue_vue_type_style_index_0_scoped_55978858_lang-8b933f81.js";/* empty css */import"./_isIterateeCall-026674a9.js";import"./index-34c112d0.js";import"./shortcut-099a5f5f.js";import"./Checkbox-b2e83bba.js";import"./index-60632a00.js";const Ve={class:"refresh-button"},Me={class:"hint"},Te={key:0,class:"preview-switch"},Fe=Z({__name:"randomImage",props:{tabIdx:{},paneIdx:{},id:{},paneKey:{}},setup(Ne){const B=ee(),m=F(!1),l=F([]),r=l,h=te(`${le}randomImageSettingNotificationShown`,!1),K=()=>{h.value||(w.info({content:re("randomImageSettingNotification"),duration:6,key:"randomImageSetting"}),h.value=!0)},f=async()=>{try{m.value=!0;const s=await ce();s.length===0&&w.warn("No data, please generate index in image search page first"),l.value=s}finally{m.value=!1,_()}},C=()=>{if(l.value.length===0){w.warn("没有图片可以浏览");return}z(l.value,o.value||0)};ie(()=>{f(),setTimeout(()=>{K()},2e3)});const{stackViewEl:L,multiSelectedIdxs:p,stack:P,scroller:U}=ve({images:l}).toRefs(),{onClearAllSelected:D,onSelectAll:E,onReverseSelect:G}=ge();Ce();const{itemSize:S,gridItems:O,cellWidth:W,onScroll:_}=ke(),{showGenInfo:c,imageGenInfo:I,q,onContextMenuClick:H,onFileItemClick:J}=Se({openNext:de}),{previewIdx:o,previewing:y,onPreviewVisibleChange:Q,previewImgMove:x,canPreview:b}=_e(),V=async(s,t,d)=>{P.value=[{curr:"",files:l.value}],await H(s,t,d)};return(s,t)=>{var M;const d=ue,X=me,Y=fe;return v(),N("div",{class:"container",ref_key:"stackViewEl",ref:L},[i(Ie,{show:!!e(p).length||e(B).keepMultiSelect,onClearAllSelected:e(D),onSelectAll:e(E),onReverseSelect:e(G)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),g("div",Ve,[i(d,{onClick:f,onTouchstart:R(f,["prevent"]),type:"primary",loading:m.value,shape:"round"},{default:n(()=>[k(u(s.$t("shuffle")),1)]),_:1},8,["onTouchstart","loading"]),i(d,{onClick:C,onTouchstart:R(C,["prevent"]),type:"default",disabled:!((M=l.value)!=null&&M.length),shape:"round"},{default:n(()=>[k(u(s.$t("tiktokView")),1)]),_:1},8,["onTouchstart","disabled"])]),i(Y,{visible:e(c),"onUpdate:visible":t[1]||(t[1]=a=>ae(c)?c.value=a:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=a=>c.value=!1)},{cancelText:n(()=>[]),default:n(()=>[i(X,{active:"",loading:!e(q).isIdle},{default:n(()=>[g("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=a=>e(se)(e(I)))},[g("div",Me,u(s.$t("doubleClickToCopy")),1),k(" "+u(e(I)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),i(e(he),{ref_key:"scroller",ref:U,class:"file-list",items:l.value.slice(),"item-size":e(S).first,"key-field":"fullpath","item-secondary-size":e(S).second,gridItems:e(O),onScroll:e(_)},{default:n(({item:a,index:T})=>[i(we,{idx:T,file:a,"cell-width":e(W),"full-screen-preview-image-url":e(r)[e(o)]?e(oe)(e(r)[e(o)]):"",onContextMenuClick:V,onPreviewVisibleChange:e(Q),"is-selected-mutil-files":e(p).length>1,selected:e(p).includes(T),onFileItemClick:e(J),onTiktokView:(Re,j)=>e(z)(l.value,j)},null,8,["idx","file","cell-width","full-screen-preview-image-url","onPreviewVisibleChange","is-selected-mutil-files","selected","onFileItemClick","onTiktokView"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"]),e(y)?(v(),N("div",Te,[i(e(ye),{onClick:t[3]||(t[3]=a=>e(x)("prev")),class:$({disable:!e(b)("prev")})},null,8,["class"]),i(e(xe),{onClick:t[4]||(t[4]=a=>e(x)("next")),class:$({disable:!e(b)("next")})},null,8,["class"])])):A("",!0),e(y)&&e(r)&&e(r)[e(o)]?(v(),ne(be,{key:1,file:e(r)[e(o)],idx:e(o),onContextMenuClick:V},null,8,["file","idx"])):A("",!0)],512)}}});const Ge=pe(Fe,[["__scopeId","data-v-49082269"]]);export{Ge as default};
|
||||
|
|
@ -1 +0,0 @@
|
|||
import{d as Z,a1 as ee,r as F,J as te,K as le,o as ie,U as v,V as N,c as i,a4 as e,W as g,a3 as n,X as k,Y as u,a5 as R,L as se,a6 as ae,af as oe,ag as $,$ as A,a2 as ne,z as w,B as re,cJ as ce,cK as de,ak as ue,ai as me,T as fe,a0 as pe}from"./index-a7581aec.js";import{u as ve,c as ge,a as ke,F as we,d as he}from"./FileItem-3fd7894f.js";import{a as Ce,b as Se,c as _e,M as Ie,o as z,L as ye,R as xe,f as be}from"./MultiSelectKeep-18d7b6cc.js";import"./numInput.vue_vue_type_style_index_0_scoped_55978858_lang-561967bb.js";/* empty css */import"./_isIterateeCall-c7210029.js";import"./index-285022d6.js";import"./shortcut-083d300d.js";import"./Checkbox-b89743db.js";import"./index-22733dc9.js";const Ve={class:"refresh-button"},Me={class:"hint"},Te={key:0,class:"preview-switch"},Fe=Z({__name:"randomImage",props:{tabIdx:{},paneIdx:{},id:{},paneKey:{}},setup(Ne){const B=ee(),m=F(!1),l=F([]),r=l,h=te(`${le}randomImageSettingNotificationShown`,!1),K=()=>{h.value||(w.info({content:re("randomImageSettingNotification"),duration:6,key:"randomImageSetting"}),h.value=!0)},f=async()=>{try{m.value=!0;const s=await ce();s.length===0&&w.warn("No data, please generate index in image search page first"),l.value=s}finally{m.value=!1,_()}},C=()=>{if(l.value.length===0){w.warn("没有图片可以浏览");return}z(l.value,o.value||0)};ie(()=>{f(),setTimeout(()=>{K()},2e3)});const{stackViewEl:P,multiSelectedIdxs:p,stack:L,scroller:U}=ve({images:l}).toRefs(),{onClearAllSelected:D,onSelectAll:E,onReverseSelect:G}=ge();Ce();const{itemSize:S,gridItems:O,cellWidth:W,onScroll:_}=ke(),{showGenInfo:c,imageGenInfo:I,q:J,onContextMenuClick:q,onFileItemClick:H}=Se({openNext:de}),{previewIdx:o,previewing:y,onPreviewVisibleChange:Q,previewImgMove:x,canPreview:b}=_e(),V=async(s,t,d)=>{L.value=[{curr:"",files:l.value}],await q(s,t,d)};return(s,t)=>{var M;const d=ue,X=me,Y=fe;return v(),N("div",{class:"container",ref_key:"stackViewEl",ref:P},[i(Ie,{show:!!e(p).length||e(B).keepMultiSelect,onClearAllSelected:e(D),onSelectAll:e(E),onReverseSelect:e(G)},null,8,["show","onClearAllSelected","onSelectAll","onReverseSelect"]),g("div",Ve,[i(d,{onClick:f,onTouchstart:R(f,["prevent"]),type:"primary",loading:m.value,shape:"round"},{default:n(()=>[k(u(s.$t("shuffle")),1)]),_:1},8,["onTouchstart","loading"]),i(d,{onClick:C,onTouchstart:R(C,["prevent"]),type:"default",disabled:!((M=l.value)!=null&&M.length),shape:"round"},{default:n(()=>[k(u(s.$t("tiktokView")),1)]),_:1},8,["onTouchstart","disabled"])]),i(Y,{visible:e(c),"onUpdate:visible":t[1]||(t[1]=a=>ae(c)?c.value=a:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=a=>c.value=!1)},{cancelText:n(()=>[]),default:n(()=>[i(X,{active:"",loading:!e(J).isIdle},{default:n(()=>[g("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=a=>e(se)(e(I)))},[g("div",Me,u(s.$t("doubleClickToCopy")),1),k(" "+u(e(I)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),i(e(he),{ref_key:"scroller",ref:U,class:"file-list",items:l.value.slice(),"item-size":e(S).first,"key-field":"fullpath","item-secondary-size":e(S).second,gridItems:e(O),onScroll:e(_)},{default:n(({item:a,index:T})=>[i(we,{idx:T,file:a,"cell-width":e(W),"full-screen-preview-image-url":e(r)[e(o)]?e(oe)(e(r)[e(o)]):"",onContextMenuClick:V,onPreviewVisibleChange:e(Q),"is-selected-mutil-files":e(p).length>1,selected:e(p).includes(T),onFileItemClick:e(H),onTiktokView:(Re,j)=>e(z)(l.value,j)},null,8,["idx","file","cell-width","full-screen-preview-image-url","onPreviewVisibleChange","is-selected-mutil-files","selected","onFileItemClick","onTiktokView"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"]),e(y)?(v(),N("div",Te,[i(e(ye),{onClick:t[3]||(t[3]=a=>e(x)("prev")),class:$({disable:!e(b)("prev")})},null,8,["class"]),i(e(xe),{onClick:t[4]||(t[4]=a=>e(x)("next")),class:$({disable:!e(b)("next")})},null,8,["class"])])):A("",!0),e(y)&&e(r)&&e(r)[e(o)]?(v(),ne(be,{key:1,file:e(r)[e(o)],idx:e(o),onContextMenuClick:V},null,8,["file","idx"])):A("",!0)],512)}}});const Ge=pe(Fe,[["__scopeId","data-v-49082269"]]);export{Ge as default};
|
||||
|
|
@ -1 +1 @@
|
|||
import{R as y,C as v}from"./index-11479cb3.js";import{cu as f,c as d,A as P,d as w,U as o,V as c,W as r,Z as S,a8 as V,aG as O,a3 as R,X as u,Y as p,a4 as b,ak as $,a0 as x,R as H,J as _,K as m}from"./index-a7581aec.js";const A=f(y),E=f(v);var L={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z"}}]},name:"pushpin",theme:"filled"};const C=L;function h(t){for(var e=1;e<arguments.length;e++){var s=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(s).filter(function(i){return Object.getOwnPropertyDescriptor(s,i).enumerable}))),n.forEach(function(i){N(t,i,s[i])})}return t}function N(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var l=function(e,s){var n=h({},e,s.attrs);return d(P,h({},n,{icon:C}),null)};l.displayName="PushpinFilled";l.inheritAttrs=!1;const z=l,F={class:"record-container"},k={style:{flex:"1"}},I={class:"rec-actions"},B=["onClick"],J=w({__name:"HistoryRecord",props:{records:{}},emits:["reuseRecord"],setup(t){return(e,s)=>{const n=$;return o(),c("div",null,[r("ul",F,[(o(!0),c(S,null,V(e.records.getRecords(),i=>(o(),c("li",{key:i.id,class:"record"},[r("div",k,[O(e.$slots,"default",{record:i},void 0,!0)]),r("div",I,[d(n,{onClick:g=>e.$emit("reuseRecord",i),type:"primary"},{default:R(()=>[u(p(e.$t("restore")),1)]),_:2},1032,["onClick"]),r("div",{class:"pin",onClick:g=>e.records.switchPin(i)},[d(b(z)),u(" "+p(e.records.isPinned(i)?e.$t("unpin"):e.$t("pin")),1)],8,B)])]))),128))])])}}});const q=x(J,[["__scopeId","data-v-834a248f"]]);class a{constructor(e=128,s=[],n=[]){this.maxLength=e,this.records=s,this.pinnedValues=n}isPinned(e){return this.pinnedValues.some(s=>s.id===e.id)}add(e){this.records.length>=this.maxLength&&this.records.pop(),this.records.unshift({...e,id:H()+Date.now(),time:new Date().toLocaleString()})}pin(e){const s=this.records.findIndex(n=>n.id===e.id);s!==-1&&this.records.splice(s,1),this.pinnedValues.push(e)}unpin(e){const s=this.pinnedValues.findIndex(n=>n.id===e.id);s!==-1&&this.pinnedValues.splice(s,1),this.records.unshift(e)}switchPin(e){this.isPinned(e)?this.unpin(e):this.pin(e)}getRecords(){return[...this.pinnedValues,...this.records]}getPinnedValues(){return this.pinnedValues}}const G=_(`${m}fuzzy-search-HistoryRecord`,new a,{serializer:{read:t=>{const e=JSON.parse(t);return new a(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}}),M=_(`${m}tag-search-HistoryRecord`,new a,{serializer:{read:t=>{const e=JSON.parse(t);return new a(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}});export{q as H,E as _,A as a,G as f,M as t};
|
||||
import{R as y,C as v}from"./index-34432e2f.js";import{cv as f,c as d,A as P,d as w,U as o,V as c,W as r,Z as S,a8 as V,aG as O,a3 as R,X as u,Y as p,a4 as b,ak as $,a0 as x,R as H,J as _,K as m}from"./index-6c47ee34.js";const A=f(y),E=f(v);var L={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 00-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z"}}]},name:"pushpin",theme:"filled"};const C=L;function h(t){for(var e=1;e<arguments.length;e++){var s=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(s).filter(function(i){return Object.getOwnPropertyDescriptor(s,i).enumerable}))),n.forEach(function(i){N(t,i,s[i])})}return t}function N(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var l=function(e,s){var n=h({},e,s.attrs);return d(P,h({},n,{icon:C}),null)};l.displayName="PushpinFilled";l.inheritAttrs=!1;const z=l,F={class:"record-container"},k={style:{flex:"1"}},I={class:"rec-actions"},B=["onClick"],J=w({__name:"HistoryRecord",props:{records:{}},emits:["reuseRecord"],setup(t){return(e,s)=>{const n=$;return o(),c("div",null,[r("ul",F,[(o(!0),c(S,null,V(e.records.getRecords(),i=>(o(),c("li",{key:i.id,class:"record"},[r("div",k,[O(e.$slots,"default",{record:i},void 0,!0)]),r("div",I,[d(n,{onClick:g=>e.$emit("reuseRecord",i),type:"primary"},{default:R(()=>[u(p(e.$t("restore")),1)]),_:2},1032,["onClick"]),r("div",{class:"pin",onClick:g=>e.records.switchPin(i)},[d(b(z)),u(" "+p(e.records.isPinned(i)?e.$t("unpin"):e.$t("pin")),1)],8,B)])]))),128))])])}}});const q=x(J,[["__scopeId","data-v-834a248f"]]);class a{constructor(e=128,s=[],n=[]){this.maxLength=e,this.records=s,this.pinnedValues=n}isPinned(e){return this.pinnedValues.some(s=>s.id===e.id)}add(e){this.records.length>=this.maxLength&&this.records.pop(),this.records.unshift({...e,id:H()+Date.now(),time:new Date().toLocaleString()})}pin(e){const s=this.records.findIndex(n=>n.id===e.id);s!==-1&&this.records.splice(s,1),this.pinnedValues.push(e)}unpin(e){const s=this.pinnedValues.findIndex(n=>n.id===e.id);s!==-1&&this.pinnedValues.splice(s,1),this.records.unshift(e)}switchPin(e){this.isPinned(e)?this.unpin(e):this.pin(e)}getRecords(){return[...this.pinnedValues,...this.records]}getPinnedValues(){return this.pinnedValues}}const G=_(`${m}fuzzy-search-HistoryRecord`,new a,{serializer:{read:t=>{const e=JSON.parse(t);return new a(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}}),M=_(`${m}tag-search-HistoryRecord`,new a,{serializer:{read:t=>{const e=JSON.parse(t);return new a(e.maxLength,e.records,e.pinnedValues)},write:JSON.stringify}});export{q as H,E as _,A as a,G as f,M as t};
|
||||
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 G,g as d}from"./FileItem-3fd7894f.js";import{r as b,t as j,cr as m,cs as y,ct as D}from"./index-a7581aec.js";const r=new Map,A=()=>{const{useEventListen:k,sortedFiles:s,getViewableAreaFiles:w}=G().toRefs(),c=b(d.defaultChangeIndchecked),u=b(d.defaultSeedChangeChecked),g=async()=>{if(await j(100),!c.value)return;const o=w.value().filter(e=>m(e.fullpath)&&!e.gen_info_obj);if(!o.length)return;const t=await y(o.map(e=>e.fullpath).filter(e=>!r.has(e)));o.forEach(e=>{const i=t[e.fullpath]||r.get(e.fullpath)||"";r.set(e.fullpath,i),e.gen_info_obj=D(i),e.gen_info_raw=i})};k.value("viewableAreaFilesChange",g);const F=o=>{const t=s.value;return[o,u.value,t[o-1],t[o],t[o+1]]};function I(o,t,e,i){const a={diff:{},empty:!0,ownFile:"",otherFile:""};if(t+e<0||t+e>=s.value.length||s.value[t]==null||!("gen_info_obj"in s.value[t])||!("gen_info_obj"in s.value[t+e]))return a;const l=o,f=s.value[t+e].gen_info_obj;if(f==null)return a;const h=["hashes","resources"];a.diff={},a.ownFile=i.name,a.otherFile=s.value[t+e].name,a.empty=!1,u.value||h.push("seed");for(const n in l)if(!h.includes(n)){if(!(n in f)){a.diff[n]="+";continue}if(l[n]!=f[n])if(n.includes("rompt")&&l[n]!=""&&f[n]!=""){const p=l[n].split(","),C=f[n].split(",");let _=0;for(const v in p)p[v]!=C[v]&&_++;a.diff[n]=_}else a.diff[n]=[l[n],f[n]]}return a}return{getGenDiff:I,changeIndchecked:c,seedChangeChecked:u,getRawGenParams:()=>g(),getGenDiffWatchDep:F}};export{A as u};
|
||||
import{u as G,g as d}from"./FileItem-62bbdd6d.js";import{r as b,t as j,cs as m,ct as y,cu as D}from"./index-6c47ee34.js";const r=new Map,A=()=>{const{useEventListen:k,sortedFiles:s,getViewableAreaFiles:w}=G().toRefs(),c=b(d.defaultChangeIndchecked),u=b(d.defaultSeedChangeChecked),g=async()=>{if(await j(100),!c.value)return;const o=w.value().filter(e=>m(e.fullpath)&&!e.gen_info_obj);if(!o.length)return;const t=await y(o.map(e=>e.fullpath).filter(e=>!r.has(e)));o.forEach(e=>{const i=t[e.fullpath]||r.get(e.fullpath)||"";r.set(e.fullpath,i),e.gen_info_obj=D(i),e.gen_info_raw=i})};k.value("viewableAreaFilesChange",g);const F=o=>{const t=s.value;return[o,u.value,t[o-1],t[o],t[o+1]]};function I(o,t,e,i){const a={diff:{},empty:!0,ownFile:"",otherFile:""};if(t+e<0||t+e>=s.value.length||s.value[t]==null||!("gen_info_obj"in s.value[t])||!("gen_info_obj"in s.value[t+e]))return a;const l=o,f=s.value[t+e].gen_info_obj;if(f==null)return a;const h=["hashes","resources"];a.diff={},a.ownFile=i.name,a.otherFile=s.value[t+e].name,a.empty=!1,u.value||h.push("seed");for(const n in l)if(!h.includes(n)){if(!(n in f)){a.diff[n]="+";continue}if(l[n]!=f[n])if(n.includes("rompt")&&l[n]!=""&&f[n]!=""){const p=l[n].split(","),C=f[n].split(",");let _=0;for(const v in p)p[v]!=C[v]&&_++;a.diff[n]=_}else a.diff[n]=[l[n],f[n]]}return a}return{getGenDiff:I,changeIndchecked:c,seedChangeChecked:u,getRawGenParams:()=>g(),getGenDiffWatchDep:F}};export{A as u};
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Infinite Image Browsing</title>
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-a7581aec.js"></script>
|
||||
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-6c47ee34.js"></script>
|
||||
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-a44325c7.css">
|
||||
</head>
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ const addInterceptor = (axiosInst: AxiosInstance) => {
|
|||
'onUpdate:value': (v: string) => (key.value = v)
|
||||
})
|
||||
},
|
||||
onOk() {
|
||||
onOk () {
|
||||
resolve(key.value)
|
||||
}
|
||||
})
|
||||
|
|
@ -51,13 +51,13 @@ const addInterceptor = (axiosInst: AxiosInstance) => {
|
|||
await delay(100)
|
||||
location.reload()
|
||||
}
|
||||
|
||||
|
||||
switch (err.response?.data?.detail?.type) {
|
||||
case 'secret_key_required':
|
||||
Modal.error({
|
||||
width: '60vw',
|
||||
title: t('secretKeyMustBeConfigured'),
|
||||
content: () => h('p', { style: 'white-space: pre-line;' } , t('secretKeyRequiredWarnMsg'))
|
||||
content: () => h('p', { style: 'white-space: pre-line;' }, t('secretKeyRequiredWarnMsg'))
|
||||
})
|
||||
throw new Error(t('secretKeyRequiredWarnMsg'))
|
||||
}
|
||||
|
|
@ -67,9 +67,9 @@ const addInterceptor = (axiosInst: AxiosInstance) => {
|
|||
errmsg = JSON.parse(await err.response?.data.text()).detail
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(err.response ,e)
|
||||
console.error(err.response, e)
|
||||
}
|
||||
errmsg ??= t('errorOccurred')
|
||||
errmsg ??= t('errorOccurred')
|
||||
message.error(errmsg)
|
||||
throw new Error(errmsg)
|
||||
}
|
||||
|
|
@ -101,7 +101,7 @@ export interface GlobalConf {
|
|||
enable_access_control: boolean
|
||||
launch_mode: 'server' | 'sd'
|
||||
export_fe_fn: boolean
|
||||
app_fe_setting: Record<'global'|'fullscreen_layout'| `workspace_snapshot_${string}`, any>
|
||||
app_fe_setting: Record<'global' | 'fullscreen_layout' | 'auto_tag_rules' | `workspace_snapshot_${string}`, any>
|
||||
is_readonly: boolean
|
||||
}
|
||||
|
||||
|
|
@ -167,15 +167,15 @@ export const batchGetDirTop4MediaInfo = async (paths: string[]) => {
|
|||
}
|
||||
|
||||
export const setAppFeSetting = async (name: keyof GlobalConf['app_fe_setting'], setting: Record<string, any>) => {
|
||||
if (!isSync()) return
|
||||
if (!isSync()) return
|
||||
await axiosInst.value.post('/app_fe_setting', { name, value: JSON.stringify(setting) })
|
||||
}
|
||||
|
||||
export const removeAppFeSetting = async (name: keyof GlobalConf['app_fe_setting']) => {
|
||||
if (!isSync()) return
|
||||
if (!isSync()) return
|
||||
await axiosInst.value.delete('/app_fe_setting', { data: { name } })
|
||||
}
|
||||
|
||||
export const setTargetFrameAsCover = async (body: {path: string, base64_img: string, updated_time: string}) => {
|
||||
export const setTargetFrameAsCover = async (body: { path: string, base64_img: string, updated_time: string }) => {
|
||||
await axiosInst.value.post('/set_target_frame_as_video_cover', body)
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ export const en: IIBI18nMap = {
|
|||
compressFile: 'Compress File',
|
||||
packOnlyNotDownload: 'Pack Only, Not Download',
|
||||
notAllowSingleCtrlOrShiftAsShortcut: '不允許使用單獨的 Ctrl 或者 Shift 作為快速鍵',
|
||||
conflictWithOtherShortcuts: 'Conflict with other shortcuts',
|
||||
conflictWithOtherShortcuts: 'Conflict with other shortcuts',
|
||||
pinnedSearchHistoryDesc: 'You can quickly restore to the previous search state by clicking the pinned search history.',
|
||||
addNewCustomTag: 'Add New Custom Tag',
|
||||
clearCacheIfNotTakeEffect: 'If the changes do not take effect, try clearing the page cache',
|
||||
|
|
@ -36,7 +36,7 @@ export const en: IIBI18nMap = {
|
|||
pollInterval: 'Poll Interval',
|
||||
pollRefresh: 'Polling refresh',
|
||||
pollRefreshTip: 'By default, IIB will automatically refresh when you return to IIB from other tabs or when the visibility of IIB changes. This feature is designed to keep IIB refreshed even when you stay in IIB all the time, please use it with caution',
|
||||
|
||||
|
||||
stopPollRefresh: 'Stop Polling refresh',
|
||||
restoreLastWorkspaceStateSuccess: 'Restore Last Workspace State Success',
|
||||
restoreWorkspaceSnapshotSuccess: 'Restore Workspace Snapshot Success',
|
||||
|
|
@ -62,7 +62,7 @@ You can specify which snapshot to restore to when starting IIB in the global set
|
|||
moveSuccess: 'Move success',
|
||||
copySuccess: 'Copy success',
|
||||
copyFilePath: 'Copy file path',
|
||||
|
||||
|
||||
previewMaskBackgroundOpacity: 'Preview Mask Background Opacity',
|
||||
experimentalLRLayout: 'Side-by-Side Layout',
|
||||
width: 'Width',
|
||||
|
|
@ -73,7 +73,7 @@ You can specify which snapshot to restore to when starting IIB in the global set
|
|||
unpin: 'Unpin',
|
||||
restore: 'Restore',
|
||||
restoreFromHistory: 'Restore from History',
|
||||
history: 'History',
|
||||
history: 'History',
|
||||
historyRecordsSubstr: 'Input Value',
|
||||
historyRecordsisRegex: 'Is Regex',
|
||||
walkModeDoc: 'Browse all files in a specified folder without paging, using infinite scrolling to display them. DFS will be used to traverse all files. Note: Sorting is only performed within the same layer in this mode.',
|
||||
|
|
@ -331,7 +331,7 @@ You can specify which snapshot to restore to when starting IIB in the global set
|
|||
magicSwitchEnabled: '🎬 ON - Click media files to enter TikTok View',
|
||||
magicSwitchDisabled: '📁 OFF - Click media files to open normally',
|
||||
magicSwitchDetailDesc: 'Click images and videos to directly enter TikTok-style browsing experience',
|
||||
|
||||
|
||||
// Auto play related
|
||||
autoPlay: 'Auto Play',
|
||||
autoPlayOff: 'Off',
|
||||
|
|
@ -340,7 +340,7 @@ You can specify which snapshot to restore to when starting IIB in the global set
|
|||
autoPlay20s: '20s',
|
||||
autoPlayTooltip: 'Auto Play: {mode} (A to toggle)',
|
||||
autoPlayStatus: 'Auto Play: {mode}',
|
||||
|
||||
|
||||
// TikTok viewer controls
|
||||
exitFullscreen: 'Exit Fullscreen',
|
||||
fullscreen: 'Fullscreen',
|
||||
|
|
@ -351,9 +351,35 @@ You can specify which snapshot to restore to when starting IIB in the global set
|
|||
tags: 'Tags',
|
||||
tag: 'Tag',
|
||||
tagOperationFailed: 'Tag operation failed',
|
||||
|
||||
mediaType: 'Media Type',
|
||||
all: 'All',
|
||||
video: 'Video',
|
||||
randomSort: 'Random Sort',
|
||||
sortByDate: 'Sort by Date'
|
||||
sortByDate: 'Sort by Date',
|
||||
|
||||
'autoTag.name': 'Auto Tagging',
|
||||
'autoTag.description': 'These rules will be automatically applied when images are indexed, adding tags to matching images (Trigger timing: when updating index or rebuilding index on search page). Note: Multiple conditions within a rule use AND logic, all must be satisfied to apply the tag',
|
||||
'autoTag.addRule': 'Add Rule',
|
||||
'autoTag.saveConfig': 'Save Config',
|
||||
'autoTag.tagName': 'Tag Name',
|
||||
'autoTag.inputTagName': 'Select custom tag',
|
||||
'autoTag.field': 'Field',
|
||||
'autoTag.operator': 'Operator',
|
||||
'autoTag.value': 'Value',
|
||||
'autoTag.addFilter': 'Add Filter',
|
||||
'autoTag.noRules': 'No rules, click button above to add',
|
||||
'autoTag.saveSuccess': 'Saved successfully',
|
||||
'autoTag.saveFail': 'Save failed',
|
||||
'autoTag.fields.posPrompt': 'Pos Prompt',
|
||||
'autoTag.fields.negPrompt': 'Neg Prompt',
|
||||
'autoTag.fields.model': 'Model',
|
||||
'autoTag.fields.sampler': 'Sampler',
|
||||
'autoTag.fields.size': 'Size',
|
||||
'autoTag.fields.cfgScale': 'CFG Scale',
|
||||
'autoTag.fields.steps': 'Steps',
|
||||
'autoTag.fields.seed': 'Seed',
|
||||
'autoTag.operators.contains': 'Contains',
|
||||
'autoTag.operators.equals': 'Equals',
|
||||
'autoTag.operators.regex': 'Regex'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ export const zhHans = {
|
|||
disableMaximize: '禁用最大化',
|
||||
compressFile: '对文件压缩',
|
||||
packOnlyNotDownload: '仅打包不下载',
|
||||
notAllowSingleCtrlOrShiftAsShortcut: '不允许使用单独的 Ctrl 或者 Shift 作为快捷键',
|
||||
notAllowSingleCtrlOrShiftAsShortcut: '不允许使用单独的 Ctrl 或者 Shift 作为快捷键',
|
||||
conflictWithOtherShortcuts: '与其他快捷键冲突',
|
||||
pinnedSearchHistoryDesc: '你可以通过点击置顶的搜索历史来快速还原到之前的搜索状态',
|
||||
addNewCustomTag: '添加新的自定义标签',
|
||||
|
|
@ -37,7 +37,7 @@ export const zhHans = {
|
|||
pollRefreshTip: '默认情况下你从其他TAB返回IIB时或者IIB的可见性发生改变时IIB都会自动刷新。这个功能是为了让你一直呆在IIB内时他也能自动刷新,请慎重使用',
|
||||
restoreLastWorkspaceStateSuccess: '成功恢复上次工作区状态',
|
||||
restoreWorkspaceSnapshotSuccess: '成功恢复工作区快照',
|
||||
openOnAppStart: '启动时打开',
|
||||
openOnAppStart: '启动时打开',
|
||||
confirmThisAction: '确认这个操作?',
|
||||
saveWorkspaceSnapshot: '保存工作区快照',
|
||||
WorkspaceSnapshot: '工作区快照',
|
||||
|
|
@ -66,7 +66,7 @@ export const zhHans = {
|
|||
alwaysOn: '常驻',
|
||||
time: '时间',
|
||||
pin: '置顶',
|
||||
unpin: '取消置顶',
|
||||
unpin: '取消置顶',
|
||||
restore: '还原',
|
||||
restoreFromHistory: '从历史记录中恢复',
|
||||
history: '历史记录',
|
||||
|
|
@ -310,7 +310,7 @@ export const zhHans = {
|
|||
magicSwitchEnabled: '🎬 开启 - 点击媒体文件直接进入 TikTok 观看',
|
||||
magicSwitchDisabled: '📁 关闭 - 点击媒体文件正常打开',
|
||||
magicSwitchDetailDesc: '点击图片和视频文件时直接进入 TikTok 式浏览体验',
|
||||
|
||||
|
||||
// 自动轮播相关
|
||||
autoPlay: '自动轮播',
|
||||
autoPlayOff: '关闭',
|
||||
|
|
@ -319,7 +319,7 @@ export const zhHans = {
|
|||
autoPlay20s: '20秒',
|
||||
autoPlayTooltip: '自动轮播: {mode} (A键切换)',
|
||||
autoPlayStatus: '自动轮播:{mode}',
|
||||
|
||||
|
||||
// TikTok 查看器控制
|
||||
exitFullscreen: '退出全屏',
|
||||
fullscreen: '全屏',
|
||||
|
|
@ -330,9 +330,34 @@ export const zhHans = {
|
|||
tags: '标签',
|
||||
tag: '标签',
|
||||
tagOperationFailed: '标签操作失败',
|
||||
|
||||
mediaType: '媒体类型',
|
||||
all: '全部',
|
||||
video: '视频',
|
||||
randomSort: '随机排序',
|
||||
sortByDate: '按日期排序'
|
||||
sortByDate: '按日期排序',
|
||||
'autoTag.name': '自动标签 (Auto Tagging)',
|
||||
'autoTag.description': '这些规则会在图像被索引时自动应用,为符合条件的图像添加标签(触发时机:在搜索页更新索引或重新构建索引时)。注意:同一规则内的多个条件是AND(且)关系,需全部满足才会应用标签',
|
||||
'autoTag.addRule': '添加规则',
|
||||
'autoTag.saveConfig': '保存配置',
|
||||
'autoTag.tagName': '标签名称',
|
||||
'autoTag.inputTagName': '选择自定义标签',
|
||||
'autoTag.field': '字段',
|
||||
'autoTag.operator': '操作符',
|
||||
'autoTag.value': '值',
|
||||
'autoTag.addFilter': '添加条件',
|
||||
'autoTag.noRules': '暂无规则,点击上方按钮添加',
|
||||
'autoTag.saveSuccess': '保存成功',
|
||||
'autoTag.saveFail': '保存失败',
|
||||
'autoTag.fields.posPrompt': '正向提示词 (Pos Prompt)',
|
||||
'autoTag.fields.negPrompt': '负向提示词 (Neg Prompt)',
|
||||
'autoTag.fields.model': '模型 (Model)',
|
||||
'autoTag.fields.sampler': '采样器 (Sampler)',
|
||||
'autoTag.fields.size': '尺寸 (Size)',
|
||||
'autoTag.fields.cfgScale': 'CFG Scale',
|
||||
'autoTag.fields.steps': 'Steps',
|
||||
'autoTag.fields.seed': 'Seed',
|
||||
'autoTag.operators.contains': '包含 (Contains)',
|
||||
'autoTag.operators.equals': '等于 (Equals)',
|
||||
'autoTag.operators.regex': '正则 (Regex)'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ export const zhHant: Partial<IIBI18nMap> = {
|
|||
addNewCustomTag: '添加新的自定義標籤',
|
||||
showTiktokNavigator: '顯示導航按鈕',
|
||||
showTiktokNavigatorDesc: '在 TikTok 視圖中顯示導航按鈕(上/下箭頭)',
|
||||
clearCacheIfNotTakeEffect: '如果更改沒有生效,請嘗試清理頁面緩存',
|
||||
clearCacheIfNotTakeEffect: '如果更改沒有生效,請嘗試清理頁面緩存',
|
||||
success: '成功',
|
||||
setCurrFrameAsVideoPoster: '設置當前幀為視頻封面',
|
||||
sync: '同步',
|
||||
|
|
@ -62,7 +62,7 @@ export const zhHant: Partial<IIBI18nMap> = {
|
|||
moveSuccess: '移動成功',
|
||||
copySuccess: '複製成功',
|
||||
copyFilePath: '複製文件路徑',
|
||||
|
||||
|
||||
previewMaskBackgroundOpacity: '預覽遮罩背景透明度',
|
||||
experimentalLRLayout: '並列布局',
|
||||
width: '寬度',
|
||||
|
|
@ -162,7 +162,7 @@ export const zhHant: Partial<IIBI18nMap> = {
|
|||
restoreLastRecord: '還原上次記錄',
|
||||
launch: '啟動',
|
||||
walkMode: '使用 Walk 模式瀏覽圖片',
|
||||
|
||||
|
||||
launchFromNormalAndFixed: '使用 Normal / Fixed 模式瀏覽圖片',
|
||||
recent: '最近',
|
||||
emptyStartPage: '空啟動頁',
|
||||
|
|
@ -315,7 +315,7 @@ export const zhHant: Partial<IIBI18nMap> = {
|
|||
magicSwitchEnabled: '🎬 開啟 - 點擊媒體文件直接進入 TikTok 觀看',
|
||||
magicSwitchDisabled: '📁 關閉 - 點擊媒體文件正常打開',
|
||||
magicSwitchDetailDesc: '點擊圖片和視頻文件時直接進入 TikTok 式瀏覽體驗',
|
||||
|
||||
|
||||
// 自動輪播相關
|
||||
autoPlay: '自動輪播',
|
||||
autoPlayOff: '關閉',
|
||||
|
|
@ -324,7 +324,7 @@ export const zhHant: Partial<IIBI18nMap> = {
|
|||
autoPlay20s: '20秒',
|
||||
autoPlayTooltip: '自動輪播: {mode} (A鍵切換)',
|
||||
autoPlayStatus: '自動輪播:{mode}',
|
||||
|
||||
|
||||
// TikTok 查看器控制
|
||||
exitFullscreen: '退出全螢幕',
|
||||
fullscreen: '全螢幕',
|
||||
|
|
@ -339,5 +339,29 @@ export const zhHant: Partial<IIBI18nMap> = {
|
|||
all: '全部',
|
||||
video: '視頻',
|
||||
randomSort: '隨機排序',
|
||||
sortByDate: '按日期排序'
|
||||
sortByDate: '按日期排序',
|
||||
'autoTag.name': '自動標籤 (Auto Tagging)',
|
||||
'autoTag.description': '這些規則會在圖像被索引時自動應用,為符合條件的圖像添加標籤(觸發時機:在搜索頁更新索引或重新構建索引時)。注意:同一規則內的多個條件是AND(且)關係,需全部滿足才會應用標籤',
|
||||
'autoTag.addRule': '添加規則',
|
||||
'autoTag.saveConfig': '保存配置',
|
||||
'autoTag.tagName': '標籤名稱',
|
||||
'autoTag.inputTagName': '選擇自定義標籤',
|
||||
'autoTag.field': '欄位',
|
||||
'autoTag.operator': '運算符',
|
||||
'autoTag.value': '值',
|
||||
'autoTag.addFilter': '添加條件',
|
||||
'autoTag.noRules': '暫無規則,點擊上方按鈕添加',
|
||||
'autoTag.saveSuccess': '保存成功',
|
||||
'autoTag.saveFail': '保存失敗',
|
||||
'autoTag.fields.posPrompt': '正向提示詞 (Pos Prompt)',
|
||||
'autoTag.fields.negPrompt': '負向提示詞 (Neg Prompt)',
|
||||
'autoTag.fields.model': '模型 (Model)',
|
||||
'autoTag.fields.sampler': '採樣器 (Sampler)',
|
||||
'autoTag.fields.size': '尺寸 (Size)',
|
||||
'autoTag.fields.cfgScale': 'CFG Scale',
|
||||
'autoTag.fields.steps': 'Steps',
|
||||
'autoTag.fields.seed': 'Seed',
|
||||
'autoTag.operators.contains': '包含 (Contains)',
|
||||
'autoTag.operators.equals': '等於 (Equals)',
|
||||
'autoTag.operators.regex': '正則 (Regex)'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import '@zanllp/vue-virtual-scroller/dist/vue-virtual-scroller.css'
|
|||
import { RecycleScroller } from '@zanllp/vue-virtual-scroller'
|
||||
import { toRawFileUrl } from '@/util/file'
|
||||
import { getDbBasicInfo, getExpiredDirs, getImagesBySubstr, updateImageData, type DataBaseBasicInfo, SearchBySubstrReq } from '@/api/db'
|
||||
import { copy2clipboardI18n, makeAsyncFunctionSingle, useGlobalEventListen } from '@/util'
|
||||
import { copy2clipboardI18n, makeAsyncFunctionSingle, useGlobalEventListen } from '@/util'
|
||||
import fullScreenContextMenu from '@/page/fileTransfer/fullScreenContextMenu.vue'
|
||||
import { LeftCircleOutlined, RightCircleOutlined, regex, AimOutlined } from '@/icon'
|
||||
import { message } from 'ant-design-vue'
|
||||
|
|
@ -18,7 +18,8 @@ import { useGlobalStore } from '@/store/useGlobalStore'
|
|||
import HistoryRecord from '@/components/HistoryRecord.vue'
|
||||
import { fuzzySearchHistory, FuzzySearchHistoryRecord } from '@/store/searchHistory'
|
||||
import { openTiktokViewWithFiles } from '@/util/tiktokHelper'
|
||||
|
||||
import { useTagStore } from '@/store/useTagStore'
|
||||
const tagStore = useTagStore()
|
||||
const props = defineProps<{ tabIdx: number; paneIdx: number, searchScope?: string }>()
|
||||
const isRegex = ref(false)
|
||||
const substr = ref('')
|
||||
|
|
@ -99,6 +100,7 @@ const onUpdateBtnClick = makeAsyncFunctionSingle(
|
|||
queue.pushAction(async () => {
|
||||
await updateImageData()
|
||||
info.value = await getDbBasicInfo()
|
||||
tagStore.tagMap.clear()
|
||||
return info.value
|
||||
}).res
|
||||
)
|
||||
|
|
|
|||
|
|
@ -102,6 +102,8 @@ const onUpdateBtnClick = makeAsyncFunctionSingle(
|
|||
await updateImageData()
|
||||
info.value = await getDbBasicInfo()
|
||||
openedKeys.value = (classifyTags.value.map(v => v[0]))
|
||||
|
||||
tagStore.tagMap.clear()
|
||||
return info.value
|
||||
}).res
|
||||
)
|
||||
|
|
|
|||
|
|
@ -139,10 +139,34 @@ function getParNode (p: any) {
|
|||
return p.parentNode as HTMLDivElement
|
||||
}
|
||||
|
||||
function isTagStylePrompt(text: string): boolean {
|
||||
if (!text) return false
|
||||
// 判断是否为tag形式:包含多个逗号分隔的短词,且有下划线连接词
|
||||
const commaCount = (text.match(/,/g) || []).length
|
||||
const hasUnderscores = /_/.test(text)
|
||||
const avgWordLength = text.replace(/[,\s]+/g, ' ').split(' ').filter(v => v).reduce((sum, word) => sum + word.length, 0) / Math.max(1, text.split(/[,\s]+/).filter(v => v).length)
|
||||
|
||||
// 如果有较多逗号、包含下划线、且平均词长较短,判定为tag形式
|
||||
return commaCount > 3 && hasUnderscores && avgWordLength < 20
|
||||
}
|
||||
|
||||
function spanWrap (text: string) {
|
||||
if (!text) {
|
||||
return ''
|
||||
}
|
||||
|
||||
// 判断是否为tag形式
|
||||
if (!isTagStylePrompt(text)) {
|
||||
// 自然语言形式:直接显示,保留段落结构
|
||||
return text
|
||||
.split('\n')
|
||||
.map(line => line.trim())
|
||||
.filter(line => line)
|
||||
.map(line => `<p class="natural-text">${line}</p>`)
|
||||
.join('')
|
||||
}
|
||||
|
||||
// Tag形式:使用原有的标签样式
|
||||
const frags = [] as string[]
|
||||
const specBreakTag = 'BREAK'
|
||||
const values = text.replace(/>\s/g, '> ,').replace(/\sBREAK\s/g, ',' + specBreakTag + ',').split(/[\n,]+/).map(v => v.trim()).filter(v => v)
|
||||
|
|
@ -517,6 +541,13 @@ const onTiktokViewClick = () => {
|
|||
line-height: 1.78em;
|
||||
|
||||
:deep() {
|
||||
.natural-text {
|
||||
margin: 0.5em 0;
|
||||
line-height: 1.6em;
|
||||
text-align: justify;
|
||||
color: var(--zp-primary);
|
||||
}
|
||||
|
||||
.short-tag {
|
||||
word-break: break-all;
|
||||
white-space: nowrap;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,211 @@
|
|||
<script setup lang="ts">
|
||||
import { ref, onMounted, computed } from 'vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { setAppFeSetting } from '@/api'
|
||||
import { useGlobalStore } from '@/store/useGlobalStore'
|
||||
import { PlusOutlined, DeleteOutlined } from '@ant-design/icons-vue'
|
||||
import { t } from '@/i18n'
|
||||
import { SearchSelect } from 'vue3-ts-util'
|
||||
import type { Tag } from '@/api/db'
|
||||
|
||||
interface Filter {
|
||||
field: string
|
||||
operator: string
|
||||
value: string
|
||||
}
|
||||
|
||||
interface Rule {
|
||||
tag: string
|
||||
filters: Filter[]
|
||||
}
|
||||
|
||||
const rules = ref<Rule[]>([])
|
||||
const globalStore = useGlobalStore()
|
||||
|
||||
// 获取自定义标签列表
|
||||
const customTags = computed(() => {
|
||||
return globalStore.conf?.all_custom_tags?.filter(tag => tag.type === 'custom') || []
|
||||
})
|
||||
|
||||
// SearchSelect 转换器
|
||||
const tagConv = {
|
||||
value: (v: Tag) => v.name,
|
||||
text: (v: Tag) => v.display_name ? `${v.display_name} : ${v.name}` : v.name
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
const savedRules = globalStore.conf?.app_fe_setting?.auto_tag_rules
|
||||
if (savedRules) {
|
||||
rules.value = savedRules
|
||||
}
|
||||
})
|
||||
|
||||
const addRule = () => {
|
||||
rules.value.push({
|
||||
tag: '',
|
||||
filters: []
|
||||
})
|
||||
}
|
||||
|
||||
const removeRule = (index: number) => {
|
||||
rules.value.splice(index, 1)
|
||||
}
|
||||
|
||||
const addFilter = (rule: Rule) => {
|
||||
rule.filters.push({
|
||||
field: 'pos_prompt',
|
||||
operator: 'contains',
|
||||
value: ''
|
||||
})
|
||||
}
|
||||
|
||||
const removeFilter = (rule: Rule, index: number) => {
|
||||
rule.filters.splice(index, 1)
|
||||
}
|
||||
|
||||
const save = async () => {
|
||||
try {
|
||||
await setAppFeSetting('auto_tag_rules' as any, rules.value)
|
||||
message.success(t('autoTag.saveSuccess'))
|
||||
// Update local store
|
||||
if (globalStore.conf && globalStore.conf.app_fe_setting) {
|
||||
globalStore.conf.app_fe_setting.auto_tag_rules = rules.value
|
||||
}
|
||||
} catch (e) {
|
||||
message.error(t('autoTag.saveFail') + ': ' + e)
|
||||
}
|
||||
}
|
||||
|
||||
const fieldOptions = computed(() => [
|
||||
{ label: t('autoTag.fields.posPrompt'), value: 'pos_prompt' },
|
||||
{ label: t('autoTag.fields.negPrompt'), value: 'neg_prompt' },
|
||||
{ label: t('autoTag.fields.model'), value: 'Model' },
|
||||
{ label: t('autoTag.fields.sampler'), value: 'Sampler' },
|
||||
{ label: t('autoTag.fields.size'), value: 'Size' },
|
||||
{ label: t('autoTag.fields.cfgScale'), value: 'CFG scale' },
|
||||
{ label: t('autoTag.fields.steps'), value: 'Steps' },
|
||||
{ label: t('autoTag.fields.seed'), value: 'Seed' }
|
||||
])
|
||||
|
||||
const operatorOptions = computed(() => [
|
||||
{ label: t('autoTag.operators.contains'), value: 'contains' },
|
||||
{ label: t('autoTag.operators.equals'), value: 'equals' },
|
||||
{ label: t('autoTag.operators.regex'), value: 'regex' }
|
||||
])
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="auto-tag-settings">
|
||||
<div class="header">
|
||||
<div class="description">{{ t('autoTag.description') }}</div>
|
||||
<div class="actions">
|
||||
<a-button type="primary" @click="addRule">
|
||||
<template #icon><PlusOutlined /></template>
|
||||
{{ t('autoTag.addRule') }}
|
||||
</a-button>
|
||||
<a-button type="primary" @click="save" style="margin-left: 16px;">{{ t('autoTag.saveConfig') }}</a-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rules-list">
|
||||
<div v-for="(rule, rIndex) in rules" :key="rIndex" class="rule-card">
|
||||
<div class="rule-header">
|
||||
<SearchSelect
|
||||
:conv="tagConv"
|
||||
style="width: 240px"
|
||||
:options="customTags"
|
||||
v-model:value="rule.tag"
|
||||
:disabled="!customTags.length"
|
||||
:placeholder="t('autoTag.inputTagName')"
|
||||
/>
|
||||
<a-button type="text" danger @click="removeRule(rIndex)">
|
||||
<template #icon><DeleteOutlined /></template>
|
||||
</a-button>
|
||||
</div>
|
||||
|
||||
<div class="filters-list">
|
||||
<div v-for="(filter, fIndex) in rule.filters" :key="fIndex" class="filter-row">
|
||||
<a-select v-model:value="filter.field" style="width: 240px" :options="fieldOptions" />
|
||||
<a-select v-model:value="filter.operator" style="width: 160px" :options="operatorOptions" />
|
||||
<a-input v-model:value="filter.value" :placeholder="t('autoTag.value')" style="flex: 1" />
|
||||
<a-button type="text" danger @click="removeFilter(rule, fIndex)">
|
||||
<template #icon><DeleteOutlined /></template>
|
||||
</a-button>
|
||||
</div>
|
||||
<a-button type="dashed" block @click="addFilter(rule)" style="margin-top: 8px">
|
||||
<template #icon><PlusOutlined /></template>
|
||||
{{ t('autoTag.addFilter') }}
|
||||
</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="rules.length === 0" class="empty-tip">
|
||||
{{ t('autoTag.noRules') }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.auto-tag-settings {
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 16px;
|
||||
|
||||
.description {
|
||||
padding: 12px 16px;
|
||||
margin-bottom: 12px;
|
||||
background: var(--zp-secondary-background);
|
||||
border-left: 4px solid var(--primary-color);
|
||||
border-radius: 4px;
|
||||
color: var(--zp-secondary-text);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.actions {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.rules-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.rule-card {
|
||||
border: 1px solid var(--zp-border);
|
||||
border-radius: 8px;
|
||||
padding: 16px;
|
||||
background: var(--zp-secondary-background);
|
||||
}
|
||||
|
||||
.rule-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 12px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid var(--zp-border);
|
||||
}
|
||||
|
||||
.filters-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.filter-row {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.empty-tip {
|
||||
text-align: center;
|
||||
color: var(--zp-secondary-text);
|
||||
padding: 32px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -11,6 +11,7 @@ import { fs, invoke } from '@tauri-apps/api'
|
|||
import { getShortcutStrFromEvent } from '@/util/shortcut'
|
||||
import { isTauri } from '@/util/env'
|
||||
import ImageSetting from './ImageSetting.vue'
|
||||
import AutoTagSettings from './AutoTagSettings.vue'
|
||||
import { openRebuildImageIndexModal } from '@/components/functionalCallableComp'
|
||||
import { Dict } from '@/util'
|
||||
import { message } from 'ant-design-vue'
|
||||
|
|
@ -102,8 +103,19 @@ const disableMaximize = useLocalStorage(prefix+'disable_maximize', false)
|
|||
<a-select v-if="false" />
|
||||
|
||||
<a-form>
|
||||
<h2 style="margin-top: 0;">{{ t('ImageBrowsingSettings') }}</h2>
|
||||
<a-form-item :label="$t('lang')">
|
||||
<div class="lang-select-wrap">
|
||||
<SearchSelect :options="langs" v-model:value="globalStore.lang" @change="langChanged = true" />
|
||||
</div>
|
||||
<a-button type="primary" @click="reload" v-if="langChanged" ghost>{{
|
||||
t('langChangeReload')
|
||||
}}</a-button>
|
||||
</a-form-item>
|
||||
<h2 style="margin-top: 64px;">{{ t('ImageBrowsingSettings') }}</h2>
|
||||
<ImageSetting />
|
||||
|
||||
<h2 style="margin-top: 64px;">{{ t('autoTag.name') }}</h2>
|
||||
<AutoTagSettings />
|
||||
|
||||
<h2>TikTok {{ t('view') }}</h2>
|
||||
<a-form-item :label="$t('showTiktokNavigator')">
|
||||
|
|
@ -126,15 +138,8 @@ const disableMaximize = useLocalStorage(prefix+'disable_maximize', false)
|
|||
<a-form-item :label="t('autoRefreshWalkModePosLimit')">
|
||||
<NumInput :min="0" :max="1024" :step="16" v-model="globalStore.autoRefreshWalkModePosLimit" />
|
||||
</a-form-item>
|
||||
<h2>{{ t('other') }}</h2>
|
||||
<a-form-item :label="$t('lang')">
|
||||
<div class="lang-select-wrap">
|
||||
<SearchSelect :options="langs" v-model:value="globalStore.lang" @change="langChanged = true" />
|
||||
</div>
|
||||
<a-button type="primary" @click="reload" v-if="langChanged" ghost>{{
|
||||
t('langChangeReload')
|
||||
}}</a-button>
|
||||
</a-form-item>
|
||||
|
||||
<h2 style="margin-top: 0;">{{ t('other') }}</h2>
|
||||
<a-form-item :label="$t('onlyFoldersAndImages')">
|
||||
<a-switch v-model:checked="globalStore.onlyFoldersAndImages" />
|
||||
</a-form-item>
|
||||
|
|
|
|||
Loading…
Reference in New Issue