From c6e230f49d8a600c3a4ff4c86d5ccc87b20ca386 Mon Sep 17 00:00:00 2001 From: "xixun.bu" Date: Mon, 10 Aug 2026 19:39:08 +0800 Subject: [PATCH 1/6] feat(frontend): restore last training model/engine/target on bare /training --- frontend/src/engines/prefs.test.ts | 8 ++- frontend/src/engines/prefs.ts | 10 ++++ frontend/src/pages/TrainingWorkbenchPage.vue | 44 ++------------- frontend/src/training/selection.test.ts | 52 +++++++++++++++++ frontend/src/training/selection.ts | 59 ++++++++++++++++++++ 5 files changed, 134 insertions(+), 39 deletions(-) create mode 100644 frontend/src/training/selection.test.ts create mode 100644 frontend/src/training/selection.ts diff --git a/frontend/src/engines/prefs.test.ts b/frontend/src/engines/prefs.test.ts index de11b934..537fead9 100644 --- a/frontend/src/engines/prefs.test.ts +++ b/frontend/src/engines/prefs.test.ts @@ -1,6 +1,6 @@ // @vitest-environment jsdom import { afterEach, describe, expect, it } from "vitest" -import { lastSelectionFor, readEnginePrefs, rememberSelection, writeEnginePrefs } from "./prefs" +import { lastSelection, lastSelectionFor, readEnginePrefs, rememberSelection, writeEnginePrefs } from "./prefs" const KEY = "nt.training.enginePrefs" @@ -18,9 +18,15 @@ describe("engine prefs", () => { expect(lastSelectionFor("anima")).toEqual({ engine: "anima-fast", target: "lora" }) }) + it("remembers the full last selection when enabled", () => { + rememberSelection("sdxl", "kohya", "lora") + expect(lastSelection()).toEqual({ model: "sdxl", engine: "kohya", target: "lora" }) + }) + it("does not remember when disabled", () => { writeEnginePrefs({ rememberLast: false, lastByModel: {} }) rememberSelection("anima", "anima-fast", "lora") expect(lastSelectionFor("anima")).toBeUndefined() + expect(lastSelection()).toBeUndefined() }) }) diff --git a/frontend/src/engines/prefs.ts b/frontend/src/engines/prefs.ts index c088c34c..05f03c8e 100644 --- a/frontend/src/engines/prefs.ts +++ b/frontend/src/engines/prefs.ts @@ -4,6 +4,8 @@ export interface EnginePrefs { /** Remember last model/engine/target selection across visits. Default true. */ rememberLast: boolean lastByModel?: Partial> + /** Full last selection, restored when landing on /training without a query. */ + last?: { model: string; engine: string; target: string } } export function readEnginePrefs(): EnginePrefs { @@ -13,6 +15,7 @@ export function readEnginePrefs(): EnginePrefs { return { rememberLast: parsed.rememberLast !== false, lastByModel: parsed.lastByModel && typeof parsed.lastByModel === "object" ? parsed.lastByModel : {}, + last: parsed.last && typeof parsed.last === "object" ? parsed.last : undefined, } } catch { return { rememberLast: true } @@ -27,6 +30,7 @@ export function rememberSelection(model: string, engine: string, target: string) const prefs = readEnginePrefs() if (!prefs.rememberLast) return prefs.lastByModel = { ...(prefs.lastByModel || {}), [model]: { engine, target } } + prefs.last = { model, engine, target } writeEnginePrefs(prefs) } @@ -35,3 +39,9 @@ export function lastSelectionFor(model: string): { engine: string; target: strin if (!prefs.rememberLast) return undefined return prefs.lastByModel?.[model] } + +export function lastSelection(): { model: string; engine: string; target: string } | undefined { + const prefs = readEnginePrefs() + if (!prefs.rememberLast) return undefined + return prefs.last +} diff --git a/frontend/src/pages/TrainingWorkbenchPage.vue b/frontend/src/pages/TrainingWorkbenchPage.vue index 495e16b1..fcc1dc14 100644 --- a/frontend/src/pages/TrainingWorkbenchPage.vue +++ b/frontend/src/pages/TrainingWorkbenchPage.vue @@ -7,18 +7,14 @@ import AnimaFastPage from "./AnimaFastPage.vue" import TrainingPage from "./TrainingPage.vue" import TrainingSelector from "../components/TrainingSelector.vue" import WorkbenchHeader from "../components/WorkbenchHeader.vue" -import { lastSelectionFor, rememberSelection } from "../engines/prefs" +import { rememberSelection } from "../engines/prefs" +import { resolveInitialSelection } from "../training/selection" import { - DEFAULT_SELECTION, SCHEMA_META, - TRAINING_ENGINES, - TRAINING_TARGETS, firstSupportedEngine, firstSupportedTarget, isEngineSupported, isTargetSupported, - moduleForSchema, - normalizeModel, resolveModule, type TrainingEngine, type TrainingModel, @@ -29,38 +25,10 @@ const route = useRoute() const router = useRouter() const { t } = useI18n() -const model = ref(DEFAULT_SELECTION.model) -const engine = ref(DEFAULT_SELECTION.engine) -const target = ref(DEFAULT_SELECTION.target) - -function isEngine(value: unknown): value is TrainingEngine { return TRAINING_ENGINES.includes(value as TrainingEngine) } -function isTarget(value: unknown): value is TrainingTarget { return TRAINING_TARGETS.includes(value as TrainingTarget) } - -function initFromQuery() { - const query = route.query - const fromSchema = typeof query.schema === "string" ? moduleForSchema(query.schema) : undefined - if (fromSchema) { - model.value = fromSchema.model - engine.value = fromSchema.engine - target.value = fromSchema.target - return - } - const hasExplicit = Boolean(query.model || query.engine || query.target) - const normalized = normalizeModel(query.model) - if (normalized) model.value = normalized - if (isEngine(query.engine)) engine.value = query.engine - if (isTarget(query.target)) target.value = query.target - // Cold start stays on Kohya; only restore last engine when URL has no explicit selection. - if (!hasExplicit) { - const remembered = lastSelectionFor(model.value) - if (remembered) { - if (isEngine(remembered.engine) && isEngineSupported(model.value, remembered.engine)) engine.value = remembered.engine - if (isTarget(remembered.target) && isTargetSupported(model.value, engine.value, remembered.target)) target.value = remembered.target - } - } -} - -initFromQuery() +const initial = resolveInitialSelection(route.query) +const model = ref(initial.model) +const engine = ref(initial.engine) +const target = ref(initial.target) const resolved = computed(() => resolveModule(model.value, engine.value, target.value)) const schemaMeta = computed(() => { diff --git a/frontend/src/training/selection.test.ts b/frontend/src/training/selection.test.ts new file mode 100644 index 00000000..52845f97 --- /dev/null +++ b/frontend/src/training/selection.test.ts @@ -0,0 +1,52 @@ +// @vitest-environment jsdom +import { afterEach, describe, expect, it } from "vitest" +import { rememberSelection, writeEnginePrefs } from "../engines/prefs" +import { DEFAULT_SELECTION } from "./modules" +import { resolveInitialSelection } from "./selection" + +const KEY = "nt.training.enginePrefs" + +afterEach(() => { + localStorage.removeItem(KEY) +}) + +describe("resolveInitialSelection", () => { + it("falls back to the default selection with no query and no prefs", () => { + expect(resolveInitialSelection({})).toEqual(DEFAULT_SELECTION) + }) + + it("restores the full last selection on a bare query", () => { + rememberSelection("sdxl", "kohya", "lora") + expect(resolveInitialSelection({})).toEqual({ model: "sdxl", engine: "kohya", target: "lora" }) + }) + + it("prefers an explicit query over the remembered selection", () => { + rememberSelection("sdxl", "kohya", "lora") + expect(resolveInitialSelection({ model: "flux", engine: "kohya", target: "lora" })).toEqual({ model: "flux", engine: "kohya", target: "lora" }) + }) + + it("prefers a schema query over everything else", () => { + rememberSelection("sdxl", "kohya", "lora") + expect(resolveInitialSelection({ schema: "lumina2-lora", model: "flux" })).toEqual({ model: "lumina", engine: "kohya", target: "lora" }) + }) + + it("drops a remembered engine unsupported by the remembered model", () => { + writeEnginePrefs({ rememberLast: true, last: { model: "flux", engine: "anima-fast", target: "lora" } }) + expect(resolveInitialSelection({})).toEqual({ model: "flux", engine: "kohya", target: "lora" }) + }) + + it("ignores an unknown remembered model", () => { + writeEnginePrefs({ rememberLast: true, last: { model: "nope", engine: "kohya", target: "lora" } }) + expect(resolveInitialSelection({})).toEqual(DEFAULT_SELECTION) + }) + + it("restores per-model engine/target when only legacy lastByModel exists", () => { + writeEnginePrefs({ rememberLast: true, lastByModel: { anima: { engine: "anima-fast", target: "lora" } } }) + expect(resolveInitialSelection({})).toEqual({ model: "anima", engine: "anima-fast", target: "lora" }) + }) + + it("restores nothing when rememberLast is disabled", () => { + writeEnginePrefs({ rememberLast: false, last: { model: "sdxl", engine: "kohya", target: "lora" } }) + expect(resolveInitialSelection({})).toEqual(DEFAULT_SELECTION) + }) +}) diff --git a/frontend/src/training/selection.ts b/frontend/src/training/selection.ts new file mode 100644 index 00000000..11d040d2 --- /dev/null +++ b/frontend/src/training/selection.ts @@ -0,0 +1,59 @@ +import { lastSelection, lastSelectionFor } from "../engines/prefs" +import { + DEFAULT_SELECTION, + TRAINING_ENGINES, + TRAINING_TARGETS, + isEngineSupported, + isTargetSupported, + moduleForSchema, + normalizeModel, + type TrainingEngine, + type TrainingModel, + type TrainingTarget, +} from "./modules" + +export interface TrainingSelection { + model: TrainingModel + engine: TrainingEngine + target: TrainingTarget +} + +const isEngine = (value: unknown): value is TrainingEngine => TRAINING_ENGINES.includes(value as TrainingEngine) +const isTarget = (value: unknown): value is TrainingTarget => TRAINING_TARGETS.includes(value as TrainingTarget) + +/** + * Resolve the initial workbench selection from the route query. + * Explicit query (or ?schema=) always wins; a bare /training restores the + * remembered last selection, falling back to per-model engine/target prefs + * and finally DEFAULT_SELECTION. + */ +export function resolveInitialSelection(query: Record): TrainingSelection { + const fromSchema = typeof query.schema === "string" ? moduleForSchema(query.schema) : undefined + if (fromSchema) return { model: fromSchema.model, engine: fromSchema.engine, target: fromSchema.target } + + const selection: TrainingSelection = { ...DEFAULT_SELECTION } + const hasExplicit = Boolean(query.model || query.engine || query.target) + const normalized = normalizeModel(query.model) + if (normalized) selection.model = normalized + if (isEngine(query.engine)) selection.engine = query.engine + if (isTarget(query.target)) selection.target = query.target + if (hasExplicit) return selection + + const remembered = lastSelection() + if (remembered) { + const rememberedModel = normalizeModel(remembered.model) + if (rememberedModel) { + selection.model = rememberedModel + if (isEngine(remembered.engine) && isEngineSupported(selection.model, remembered.engine)) selection.engine = remembered.engine + if (isTarget(remembered.target) && isTargetSupported(selection.model, selection.engine, remembered.target)) selection.target = remembered.target + } + return selection + } + + const perModel = lastSelectionFor(selection.model) + if (perModel) { + if (isEngine(perModel.engine) && isEngineSupported(selection.model, perModel.engine)) selection.engine = perModel.engine + if (isTarget(perModel.target) && isTargetSupported(selection.model, selection.engine, perModel.target)) selection.target = perModel.target + } + return selection +} From 4d4f10268b35f995b527ceb41b997465e2e36025 Mon Sep 17 00:00:00 2001 From: "xixun.bu" Date: Mon, 10 Aug 2026 19:40:28 +0800 Subject: [PATCH 2/6] chore(frontend): publish dist for training selection restore --- ...ge-CoWjms-D.js => DatasetPage-CoK9ZAdm.js} | 2 +- ...Page-Ds9mS5xC.js => GuidePage-m1i_JIjs.js} | 2 +- ...ePage-ChxMX_IM.js => HomePage-qalEt5mU.js} | 2 +- ...lxzcFZI.js => IntegrationPage-CefHnPho.js} | 2 +- ...e-8auRhUvD.js => NotFoundPage-BQmyvMef.js} | 2 +- ...age-BkK-W4SI.js => ParamsPage-DGNkcvK9.js} | 2 +- ...2.js => SettingsContainerPage-CEKsAhum.js} | 2 +- ...Page-CeWYr9Xg.js => TasksPage-xwxx8Gct.js} | 2 +- ...Page-DH5QX7Cd.js => ToolsPage-C0sSOLKL.js} | 2 +- .../assets/TrainingWorkbenchPage-ByP70JIG.js | 34 ------------------- .../assets/TrainingWorkbenchPage-C86jNxDA.js | 34 +++++++++++++++++++ .../{index-DNZgQ1o0.js => index-BC7FDA30.js} | 2 +- .../{index-DILr9bpz.js => index-Bff4F9zQ.js} | 2 +- .../{index-BlvrX0Zy.js => index-BoQWc9mA.js} | 4 +-- .../{prefs-L1LFxgf4.js => prefs-hyqYnVPm.js} | 2 +- ...chemas-BVh9ipN3.js => schemas-QXoCLd-0.js} | 2 +- .../{tasks-CTZb2r1_.js => tasks-E6KkxTMs.js} | 2 +- frontend/dist/index.html | 4 +-- 18 files changed, 52 insertions(+), 52 deletions(-) rename frontend/dist/assets/{DatasetPage-CoWjms-D.js => DatasetPage-CoK9ZAdm.js} (99%) rename frontend/dist/assets/{GuidePage-Ds9mS5xC.js => GuidePage-m1i_JIjs.js} (97%) rename frontend/dist/assets/{HomePage-ChxMX_IM.js => HomePage-qalEt5mU.js} (97%) rename frontend/dist/assets/{IntegrationPage-DlxzcFZI.js => IntegrationPage-CefHnPho.js} (92%) rename frontend/dist/assets/{NotFoundPage-8auRhUvD.js => NotFoundPage-BQmyvMef.js} (87%) rename frontend/dist/assets/{ParamsPage-BkK-W4SI.js => ParamsPage-DGNkcvK9.js} (95%) rename frontend/dist/assets/{SettingsContainerPage-9zJ1w2a2.js => SettingsContainerPage-CEKsAhum.js} (98%) rename frontend/dist/assets/{TasksPage-CeWYr9Xg.js => TasksPage-xwxx8Gct.js} (98%) rename frontend/dist/assets/{ToolsPage-DH5QX7Cd.js => ToolsPage-C0sSOLKL.js} (94%) delete mode 100644 frontend/dist/assets/TrainingWorkbenchPage-ByP70JIG.js create mode 100644 frontend/dist/assets/TrainingWorkbenchPage-C86jNxDA.js rename frontend/dist/assets/{index-DNZgQ1o0.js => index-BC7FDA30.js} (99%) rename frontend/dist/assets/{index-DILr9bpz.js => index-Bff4F9zQ.js} (99%) rename frontend/dist/assets/{index-BlvrX0Zy.js => index-BoQWc9mA.js} (99%) rename frontend/dist/assets/{prefs-L1LFxgf4.js => prefs-hyqYnVPm.js} (53%) rename frontend/dist/assets/{schemas-BVh9ipN3.js => schemas-QXoCLd-0.js} (83%) rename frontend/dist/assets/{tasks-CTZb2r1_.js => tasks-E6KkxTMs.js} (86%) diff --git a/frontend/dist/assets/DatasetPage-CoWjms-D.js b/frontend/dist/assets/DatasetPage-CoK9ZAdm.js similarity index 99% rename from frontend/dist/assets/DatasetPage-CoWjms-D.js rename to frontend/dist/assets/DatasetPage-CoK9ZAdm.js index 4ed85090..b1d5fa33 100644 --- a/frontend/dist/assets/DatasetPage-CoWjms-D.js +++ b/frontend/dist/assets/DatasetPage-CoK9ZAdm.js @@ -1 +1 @@ -import{G as Ue,d as me,u as be,s as p,k as Te,y as Pe,c as m,F as V,a as e,t as l,b as t,f,B as h,E as C,H as ue,q as pe,C as H,r as L,I as D,e as ge,w as ve,p as he,h as U,i as Me,o as g,m as _e,A as X,J as Je,K as je,x as Ge,l as He,n as $e,D as Qe,j as Se}from"./index-BlvrX0Zy.js";import{E as x}from"./index-DNZgQ1o0.js";import{E as Ye}from"./index-DILr9bpz.js";import{s as Fe}from"./schemas-BVh9ipN3.js";const R=(c,o)=>Ue(c,{method:"POST",body:JSON.stringify(o)}),j={scan:c=>R("/api/dataset-editor/scan",{path:c}),save:(c,o,r)=>R("/api/dataset-editor/caption",{root:c,image:o,caption:r}),batch:c=>R("/api/dataset-editor/batch",c),undo:c=>R("/api/dataset-editor/undo",{root:c}),redo:c=>R("/api/dataset-editor/redo",{root:c}),history:c=>R("/api/dataset-editor/history",{root:c})};function fe(c){return c.split(",").map(o=>o.trim()).filter(Boolean)}function Ze(c,o){const r=o.trim(),b=fe(c);return!r||b.includes(r)?b.join(", "):[...b,r].join(", ")}function We(c,o){const r=o.trim();return fe(c).filter(b=>b!==r).join(", ")}const Xe={class:"dataset-page"},et={class:"dataset-side"},tt={class:"path-row"},at=["disabled"],lt=["disabled"],ot={value:""},st=["value"],nt={class:"batch-box"},rt=["placeholder"],it=["aria-label"],dt={value:"back"},ut={value:"front"},ct=["placeholder"],pt={class:"replace-row"},gt=["placeholder"],vt=["placeholder"],ht={class:"quick-tag-box"},_t=["onClick","onContextmenu"],mt=["onClick"],bt=["placeholder"],ft={class:"dataset-gallery"},yt=["disabled"],Et=["disabled"],kt=["disabled"],wt=["disabled"],Ct={key:0,class:"dataset-empty"},xt={key:1,class:"image-grid"},Tt=["onClick"],$t={key:0},St=["src","alt"],Vt={class:"dataset-pager"},Ut=["disabled"],Pt=["disabled"],Mt=["disabled"],Ft=["disabled"],Lt=["value"],Dt={class:"caption-panel"},At={key:0},It=["src","alt"],qt={class:"caption-editor"},Kt={class:"caption-count"},Ot={class:"caption-chips"},Nt=["aria-label","onClick"],Bt={class:"chip-add"},Rt=["placeholder"],zt={key:1},Jt={class:"dataset-history"},jt={key:0},ce="dataset-editor-quick-tags",Ve="dataset-editor-page-size",Gt=me({__name:"DatasetEditorPage",setup(c){const{t:o}=be(),r=p(""),b=p(""),v=p([]),S=p([]),y=p([]),P=p(""),i=p(""),O=p(""),E=p(new Set),N=p(),T=p(""),M=p(""),I=p(""),B=p(""),k=p(""),d=p(!1),u=p(!1),ee=p(!1),te=p(!1),Q=p(!1),ae=p(!1),le=p("back"),Y=p(""),Z=p(""),F=p([]),w=p(1),q=p(Number(localStorage.getItem(Ve))||48),oe=p(!1),z=p({can_undo:!1,can_redo:!1,changes:[]}),K=U(()=>v.value.filter(n=>(!P.value||n.category===P.value)&&(!i.value||n.caption.toLowerCase().includes(i.value.toLowerCase())||n.name.toLowerCase().includes(i.value.toLowerCase())))),J=U(()=>Math.max(1,Math.ceil(K.value.length/q.value))),se=U(()=>K.value.slice((w.value-1)*q.value,w.value*q.value)),A=U(()=>v.value.find(n=>n.relative_path===O.value)),ne=U(()=>E.value.size?v.value.filter(n=>E.value.has(n.relative_path)):K.value),Le=U(()=>S.value.slice(0,24)),De=U(()=>fe(T.value));function ye(){const n=Ze(T.value,Z.value);n!==T.value&&(T.value=n),Z.value=""}function Ae(n){T.value=We(T.value,n)}function Ee(n,s){if(O.value=n.relative_path,T.value=n.caption,!s)return;const _=K.value.findIndex($=>$.relative_path===n.relative_path),a=new Set(s.ctrlKey||s.metaKey||s.shiftKey?E.value:[]);if(s.shiftKey&&N.value!==void 0){const[$,Re]=[N.value,_].sort((de,ze)=>de-ze);K.value.slice($,Re+1).forEach(de=>a.add(de.relative_path))}else(s.ctrlKey||s.metaKey)&&a.has(n.relative_path)?a.delete(n.relative_path):a.add(n.relative_path);E.value=a,N.value=_}function re(n){const s=new Map(n.map(_=>[_.image,_]));v.value=v.value.map(_=>{const a=s.get(_.relative_path);return a?{..._,caption:a.caption,tags:a.tags,caption_exists:a.caption_exists}:_}),A.value&&(T.value=A.value.caption),Ie()}function Ie(){const n=new Map;v.value.forEach(s=>s.tags.forEach(_=>n.set(_,(n.get(_)||0)+1))),S.value=[...n].map(([s,_])=>({tag:s,count:_})).sort((s,_)=>_.count-s.count||s.tag.localeCompare(_.tag))}async function W(){b.value&&(z.value=await j.history(b.value))}async function ke(){if(r.value.trim()){Q.value=!0;try{const n=await j.scan(r.value);b.value=n.root,r.value=n.root,v.value=n.items,S.value=n.tags.sort((s,_)=>_.count-s.count),y.value=n.categories,E.value=new Set,w.value=1,n.items[0]&&Ee(n.items[0]),await W(),x.success(o("datasetEditor.scanMsg.loaded",{n:n.total}))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.scanMsg.fail"))}finally{Q.value=!1}}}async function qe(){if(A.value)try{re([await j.save(b.value,A.value.relative_path,T.value)]),await W(),x.success(o("datasetEditor.caption.saved"))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.caption.saveFail"))}}function ie(n){return n.split(/[,,\n]/).map(s=>s.trim()).filter(Boolean)}async function Ke(){ae.value=!0;try{r.value=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(n){x.error(n instanceof Error?n.message:o("schemaForm.pickFail"))}finally{ae.value=!1}}async function Oe(){if(ne.value.length)try{await Ye.confirm(o("datasetEditor.batch.confirm",{n:ne.value.length}),E.value.size?o("datasetEditor.batch.confirmSelected"):o("datasetEditor.batch.confirmFiltered"));const n=B.value.trim()?[{from:B.value.trim(),to:k.value.trim()}]:[],s=await j.batch({root:b.value,images:ne.value.map(_=>_.relative_path),append:ie(M.value),append_position:le.value,remove:ie(I.value),replace:n,clean:d.value,sort:u.value,underscore_to_space:ee.value,strip_escape_chars:te.value});re(s.items),await W(),x.success(o("datasetEditor.batch.done",{n:s.changed}))}catch(n){n!=="cancel"&&n!=="close"&&x.error(n instanceof Error?n.message:o("datasetEditor.batch.fail"))}}async function we(n){try{const s=await j[n](b.value);re(s.items),await W(),x.success(s.changed?o(n==="undo"?"datasetEditor.historyMsg.undone":"datasetEditor.historyMsg.redone"):o("datasetEditor.historyMsg.none"))}catch(s){x.error(s instanceof Error?s.message:o("datasetEditor.historyMsg.fail"))}}function Ne(){const n=new Set(E.value),s=se.value.every(_=>n.has(_.relative_path));se.value.forEach(_=>s?n.delete(_.relative_path):n.add(_.relative_path)),E.value=n}function Ce(n){const s=new Set(ie(M.value));s.add(n),M.value=[...s].join(", ")}function xe(){const n=Y.value.trim();!n||F.value.includes(n)||(F.value.push(n),Y.value="",localStorage.setItem(ce,JSON.stringify(F.value)))}function Be(n){F.value=F.value.filter(s=>s!==n),localStorage.setItem(ce,JSON.stringify(F.value))}return Te([P,i,q],()=>{w.value=1,localStorage.setItem(Ve,String(q.value))}),Te(J,n=>{w.value>n&&(w.value=n)}),Pe(()=>{try{F.value=JSON.parse(localStorage.getItem(ce)||"[]")}catch{F.value=[]}}),(n,s)=>{const _=Me("el-dialog");return g(),m(V,null,[e("div",Xe,[e("aside",et,[s[24]||(s[24]=e("span",{class:"eyebrow"},"DATASET EDITOR",-1)),e("h1",null,l(t(o)("datasetEditor.title")),1),e("label",null,[f(l(t(o)("datasetEditor.pathLabel")),1),e("span",tt,[h(e("input",{"onUpdate:modelValue":s[0]||(s[0]=a=>r.value=a),onKeyup:ue(ke,["enter"])},null,544),[[C,r.value]]),e("button",{disabled:ae.value,onClick:pe(Ke,["prevent"])},l(t(o)("schemaForm.browse")),9,at)])]),e("button",{class:"primary-action",disabled:Q.value,onClick:ke},l(Q.value?t(o)("datasetEditor.scanning"):t(o)("datasetEditor.scan")),9,lt),e("label",null,[f(l(t(o)("datasetEditor.categoryLabel")),1),h(e("select",{"onUpdate:modelValue":s[1]||(s[1]=a=>P.value=a)},[e("option",ot,l(t(o)("datasetEditor.allCategories")),1),(g(!0),m(V,null,L(y.value,a=>(g(),m("option",{key:a.value,value:a.value},l(a.name)+" ("+l(a.count)+")",9,st))),128))],512),[[H,P.value]])]),e("label",null,[f(l(t(o)("datasetEditor.queryLabel")),1),h(e("input",{"onUpdate:modelValue":s[2]||(s[2]=a=>i.value=a)},null,512),[[C,i.value]])]),e("div",nt,[e("strong",null,l(t(o)("datasetEditor.batch.title"))+" "+l(E.value.size?t(o)("datasetEditor.batch.selected",{n:E.value.size}):t(o)("datasetEditor.batch.filtered",{n:K.value.length})),1),h(e("input",{"onUpdate:modelValue":s[3]||(s[3]=a=>M.value=a),placeholder:t(o)("datasetEditor.batch.appendPlaceholder")},null,8,rt),[[C,M.value]]),h(e("select",{"onUpdate:modelValue":s[4]||(s[4]=a=>le.value=a),"aria-label":t(o)("datasetEditor.batch.position")},[e("option",dt,l(t(o)("datasetEditor.batch.positionBack")),1),e("option",ut,l(t(o)("datasetEditor.batch.positionFront")),1)],8,it),[[H,le.value]]),h(e("input",{"onUpdate:modelValue":s[5]||(s[5]=a=>I.value=a),placeholder:t(o)("datasetEditor.batch.removePlaceholder")},null,8,ct),[[C,I.value]]),e("div",pt,[h(e("input",{"onUpdate:modelValue":s[6]||(s[6]=a=>B.value=a),placeholder:t(o)("datasetEditor.batch.replaceFrom")},null,8,gt),[[C,B.value]]),h(e("input",{"onUpdate:modelValue":s[7]||(s[7]=a=>k.value=a),placeholder:t(o)("datasetEditor.batch.replaceTo")},null,8,vt),[[C,k.value]])]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[8]||(s[8]=a=>d.value=a),type:"checkbox"},null,512),[[D,d.value]]),f(l(t(o)("datasetEditor.batch.clean")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[9]||(s[9]=a=>ee.value=a),type:"checkbox"},null,512),[[D,ee.value]]),f(l(t(o)("datasetEditor.batch.underscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[10]||(s[10]=a=>te.value=a),type:"checkbox"},null,512),[[D,te.value]]),f(l(t(o)("datasetEditor.batch.stripEscape")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[11]||(s[11]=a=>u.value=a),type:"checkbox"},null,512),[[D,u.value]]),f(l(t(o)("datasetEditor.batch.sort")),1)]),e("button",{onClick:Oe},l(t(o)("datasetEditor.batch.apply")),1)]),e("div",ht,[e("strong",null,l(t(o)("datasetEditor.quickTag.title")),1),e("div",null,[(g(!0),m(V,null,L(F.value,a=>(g(),m("button",{key:a,onClick:$=>Ce(a),onContextmenu:pe($=>Be(a),["prevent"])},l(a),41,_t))),128)),(g(!0),m(V,null,L(Le.value,a=>(g(),m("button",{key:a.tag,class:"suggested",onClick:$=>Ce(a.tag)},[f(l(a.tag)+" ",1),e("small",null,l(a.count),1)],8,mt))),128))]),e("span",null,[h(e("input",{"onUpdate:modelValue":s[12]||(s[12]=a=>Y.value=a),placeholder:t(o)("datasetEditor.quickTag.addPlaceholder"),onKeyup:ue(xe,["enter"])},null,40,bt),[[C,Y.value]]),e("button",{onClick:xe},l(t(o)("datasetEditor.quickTag.add")),1)]),e("small",null,l(t(o)("datasetEditor.quickTag.hint")),1)])]),e("main",ft,[e("header",null,[e("strong",null,l(t(o)("datasetEditor.gallery.count",{filtered:K.value.length,total:v.value.length,selected:E.value.size})),1),e("div",null,[e("button",{disabled:!b.value,onClick:Ne},l(t(o)("datasetEditor.gallery.togglePage")),9,yt),e("button",{disabled:!z.value.can_undo,onClick:s[13]||(s[13]=a=>we("undo"))},l(t(o)("datasetEditor.gallery.undo")),9,Et),e("button",{disabled:!z.value.can_redo,onClick:s[14]||(s[14]=a=>we("redo"))},l(t(o)("datasetEditor.gallery.redo")),9,kt),e("button",{disabled:!b.value,onClick:s[15]||(s[15]=a=>oe.value=!0)},l(t(o)("datasetEditor.gallery.history")),9,wt)])]),b.value?(g(),m("div",xt,[(g(!0),m(V,null,L(se.value,a=>(g(),m("button",{key:a.relative_path,class:_e({active:O.value===a.relative_path,checked:E.value.has(a.relative_path)}),onClick:$=>Ee(a,$)},[E.value.has(a.relative_path)?(g(),m("i",$t,"✓")):he("",!0),e("img",{src:a.image_url,alt:a.name,loading:"lazy"},null,8,St),e("span",null,l(a.name),1)],10,Tt))),128))])):(g(),m("div",Ct,[e("strong",null,l(t(o)("datasetEditor.gallery.emptyTitle")),1),e("span",null,l(t(o)("datasetEditor.gallery.emptyHint")),1)])),e("footer",Vt,[e("button",{disabled:w.value===1,onClick:s[16]||(s[16]=a=>w.value=1)},l(t(o)("datasetEditor.pager.first")),9,Ut),e("button",{disabled:w.value===1,onClick:s[17]||(s[17]=a=>w.value--)},l(t(o)("datasetEditor.pager.prev")),9,Pt),e("span",null,l(w.value)+" / "+l(J.value),1),e("button",{disabled:w.value===J.value,onClick:s[18]||(s[18]=a=>w.value++)},l(t(o)("datasetEditor.pager.next")),9,Mt),e("button",{disabled:w.value===J.value,onClick:s[19]||(s[19]=a=>w.value=J.value)},l(t(o)("datasetEditor.pager.last")),9,Ft),h(e("select",{"onUpdate:modelValue":s[20]||(s[20]=a=>q.value=a)},[(g(),m(V,null,L([24,48,96,192],a=>e("option",{key:a,value:a},l(t(o)("datasetEditor.pager.perPage",{size:a})),9,Lt)),64))],512),[[H,q.value,void 0,{number:!0}]])])]),e("aside",Dt,[A.value?(g(),m("div",At,[e("img",{src:A.value.image_url,alt:A.value.name},null,8,It),e("strong",null,l(A.value.relative_path),1),e("div",qt,[h(e("textarea",{"onUpdate:modelValue":s[21]||(s[21]=a=>T.value=a),rows:"10"},null,512),[[C,T.value]]),e("small",Kt,l(t(o)("datasetEditor.caption.chars",{n:T.value.length})),1)]),e("div",Ot,[(g(!0),m(V,null,L(De.value,a=>(g(),m("span",{key:a,class:"chip"},[f(l(a),1),e("button",{"aria-label":t(o)("datasetEditor.caption.removeAria",{tag:a}),onClick:$=>Ae(a)},"×",8,Nt)]))),128)),e("span",Bt,[h(e("input",{"onUpdate:modelValue":s[22]||(s[22]=a=>Z.value=a),placeholder:t(o)("datasetEditor.caption.addPlaceholder"),onKeyup:ue(ye,["enter"])},null,40,Rt),[[C,Z.value]]),e("button",{onClick:ye},l(t(o)("datasetEditor.caption.add")),1)])]),e("button",{class:"primary-action",onClick:qe},l(t(o)("datasetEditor.caption.save")),1)])):(g(),m("p",zt,l(t(o)("datasetEditor.caption.empty")),1))])]),ge(_,{modelValue:oe.value,"onUpdate:modelValue":s[23]||(s[23]=a=>oe.value=a),title:t(o)("datasetEditor.historyDialog.title"),width:"min(820px, 94vw)"},{default:ve(()=>[e("div",Jt,[(g(!0),m(V,null,L(z.value.changes,a=>(g(),m("article",{key:`${a.label}-${a.items[0]?.image}`},[e("header",null,[e("strong",null,l(a.label),1),e("span",null,l(t(o)("datasetEditor.historyDialog.count",{n:a.count})),1)]),e("details",null,[e("summary",null,l(t(o)("datasetEditor.historyDialog.detail")),1),(g(!0),m(V,null,L(a.items,$=>(g(),m("div",{key:$.image},[e("code",null,l($.image),1),e("del",null,l($.before||t(o)("datasetEditor.historyDialog.noCaption")),1),e("ins",null,l($.after||t(o)("datasetEditor.historyDialog.noCaption")),1)]))),128))])]))),128)),z.value.changes.length?he("",!0):(g(),m("p",jt,l(t(o)("datasetEditor.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"])],64)}}}),G={status:()=>Ue("/api/tagger/status"),start:c=>X("/api/interrogate",{method:"POST",body:JSON.stringify(c)}),prefetch:(c,o)=>X("/api/tagger/prefetch",{method:"POST",body:JSON.stringify({interrogator_model:c,download_endpoint:o})}),cancel:()=>X("/api/tagger/cancel",{method:"POST"}),reset:()=>X("/api/tagger/reset",{method:"POST"})},Ht={phase:"idle",message:"",model:"",download:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},tagging:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},updated_at:0},Qt=Je("tagger",()=>{const c=p(Ht),o=p(""),r=p(!1),b=U(()=>["downloading","tagging","pending","cancelling"].includes(c.value.phase));async function v(){try{c.value=await G.status(),o.value=""}catch(y){o.value=y instanceof Error?y.message:je.global.t("tagger.msg.statusFail")}}async function S(y){r.value=!0;try{await y(),await v()}finally{r.value=!1}}return{status:c,error:o,submitting:r,busy:b,refresh:v,start:y=>S(()=>G.start(y)),prefetch:(y,P)=>S(()=>G.prefetch(y,P)),cancel:()=>S(G.cancel),reset:()=>S(G.reset)}}),Yt={class:"tagger-page"},Zt={class:"tagger-form"},Wt={class:"tagger-grid"},Xt={class:"path-row"},ea=["disabled"],ta=["placeholder"],aa={value:"ignore"},la={value:"copy"},oa={value:"prepend"},sa={class:"check-row"},na={class:"tagger-status"},ra={class:"task-status"},ia={key:0},da={class:"meter"},ua={class:"meter"},ca={class:"tagger-actions"},pa=["disabled"],ga=["disabled"],va=["disabled"],ha=["disabled"],_a=me({__name:"TaggerPage",setup(c){const o=["wd14-convnextv2-v2","wd-convnext-v3","wd-swinv2-v3","wd-vit-v3","wd14-swinv2-v2","wd14-vit-v2","wd14-moat-v2","wd-eva02-large-tagger-v3","wd-vit-large-tagger-v3","cl_tagger_1_01"],r=Qe({path:"",interrogator_model:o[0],threshold:.35,character_threshold:.6,add_rating_tag:!1,add_model_tag:!1,additional_tags:"",exclude_tags:"",escape_tag:!0,batch_input_recursive:!1,batch_output_action_on_conflict:"copy",replace_underscore:!0,download_endpoint:"",replace_underscore_excludes:"0_0, (o)_(o), +_+, +_-, ._., _, <|>_<|>, =_=, >_<, 3_3, 6_9, >_o, @_@, ^_^, o_o, u_u, x_x, |_|, ||_||"}),b=Qt(),{status:v,error:S,submitting:y,busy:P}=Ge(b),{t:i}=be(),O=U(()=>v.value.download.percent||(v.value.download.total?Math.round(v.value.download.current/v.value.download.total*100):0)),E=U(()=>v.value.tagging.total?Math.round(v.value.tagging.current/v.value.tagging.total*100):0);let N;async function T(){if(!r.path.trim())return x.error(i("tagger.msg.pathRequired"));try{await b.start({...r,path:r.path.replaceAll("\\","/")}),x.success(i("tagger.msg.submitted"))}catch(k){x.error(k instanceof Error?k.message:i("tagger.msg.submitFail"))}}async function M(k){try{k==="prefetch"?await b.prefetch(r.interrogator_model,r.download_endpoint):await b[k](),x.success(i(k==="cancel"?"tagger.msg.cancelRequested":k==="reset"?"tagger.msg.resetDone":"tagger.msg.prefetchStarted"))}catch(d){x.error(d instanceof Error?d.message:i("tagger.msg.actionFail"))}}const I=p(!1);async function B(){I.value=!0;try{r.path=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(k){x.error(k instanceof Error?k.message:i("schemaForm.pickFail"))}finally{I.value=!1}}return Pe(async()=>{await b.refresh(),N=window.setInterval(b.refresh,1200)}),He(()=>window.clearInterval(N)),(k,d)=>(g(),m("div",Yt,[e("section",Zt,[e("header",null,[d[16]||(d[16]=e("span",{class:"eyebrow"},"DATASET TAGGER",-1)),e("h1",null,l(t(i)("tagger.title")),1),e("p",null,l(t(i)("tagger.subtitle")),1)]),e("div",Wt,[e("label",null,[f(l(t(i)("tagger.modelLabel")),1),h(e("select",{"onUpdate:modelValue":d[0]||(d[0]=u=>r.interrogator_model=u)},[(g(),m(V,null,L(o,u=>e("option",{key:u},l(u),1)),64))],512),[[H,r.interrogator_model]])]),e("label",null,[f(l(t(i)("tagger.pathLabel")),1),e("span",Xt,[h(e("input",{"onUpdate:modelValue":d[1]||(d[1]=u=>r.path=u),placeholder:"D:/datasets/images"},null,512),[[C,r.path]]),e("button",{disabled:I.value,onClick:pe(B,["prevent"])},l(t(i)("schemaForm.browse")),9,ea)])]),e("label",null,[f(l(t(i)("tagger.thresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[2]||(d[2]=u=>r.threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.characterThresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[3]||(d[3]=u=>r.character_threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.character_threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.additionalTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[4]||(d[4]=u=>r.additional_tags=u)},null,512),[[C,r.additional_tags]])]),e("label",null,[f(l(t(i)("tagger.excludeTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[5]||(d[5]=u=>r.exclude_tags=u)},null,512),[[C,r.exclude_tags]])]),e("label",null,[f(l(t(i)("tagger.endpointLabel")),1),h(e("input",{"onUpdate:modelValue":d[6]||(d[6]=u=>r.download_endpoint=u),placeholder:t(i)("tagger.endpointPlaceholder")},null,8,ta),[[C,r.download_endpoint]])]),e("label",null,[f(l(t(i)("tagger.conflictLabel")),1),h(e("select",{"onUpdate:modelValue":d[7]||(d[7]=u=>r.batch_output_action_on_conflict=u)},[e("option",aa,l(t(i)("tagger.conflict.ignore")),1),e("option",la,l(t(i)("tagger.conflict.copy")),1),e("option",oa,l(t(i)("tagger.conflict.prepend")),1)],512),[[H,r.batch_output_action_on_conflict]])])]),e("div",sa,[e("label",null,[h(e("input",{"onUpdate:modelValue":d[8]||(d[8]=u=>r.batch_input_recursive=u),type:"checkbox"},null,512),[[D,r.batch_input_recursive]]),f(l(t(i)("tagger.recursive")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[9]||(d[9]=u=>r.replace_underscore=u),type:"checkbox"},null,512),[[D,r.replace_underscore]]),f(l(t(i)("tagger.replaceUnderscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[10]||(d[10]=u=>r.escape_tag=u),type:"checkbox"},null,512),[[D,r.escape_tag]]),f(l(t(i)("tagger.escapeTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[11]||(d[11]=u=>r.add_rating_tag=u),type:"checkbox"},null,512),[[D,r.add_rating_tag]]),f(l(t(i)("tagger.addRatingTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[12]||(d[12]=u=>r.add_model_tag=u),type:"checkbox"},null,512),[[D,r.add_model_tag]]),f(l(t(i)("tagger.addModelTag")),1)])])]),e("aside",na,[e("span",ra,l(t(v).phase),1),e("h2",null,l(t(v).message||t(i)("tagger.idle")),1),t(S)?(g(),m("p",ia,l(t(S)),1)):he("",!0),e("div",da,[e("header",null,[e("span",null,l(t(i)("tagger.downloadMeter")),1),e("b",null,l(O.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${O.value}%`})},null,4)]),e("small",null,l(t(v).download.filename||t(i)("tagger.downloadIdle")),1)]),e("div",ua,[e("header",null,[e("span",null,l(t(i)("tagger.taggingMeter")),1),e("b",null,l(E.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${E.value}%`})},null,4)]),e("small",null,l(t(v).tagging.current)+" / "+l(t(v).tagging.total)+" "+l(t(v).tagging.filename),1)]),e("div",ca,[t(P)?(g(),m("button",{key:0,class:"danger-action",disabled:t(y),onClick:d[13]||(d[13]=u=>M("cancel"))},l(t(i)("tagger.cancel")),9,pa)):(g(),m("button",{key:1,class:"primary-action",disabled:t(y),onClick:T},l(t(i)("tagger.start")),9,ga)),e("button",{class:"secondary-action",disabled:t(y)||t(v).phase==="tagging",onClick:d[14]||(d[14]=u=>M("prefetch"))},l(t(i)("tagger.prefetch")),9,va),e("button",{class:"secondary-action",disabled:t(y),onClick:d[15]||(d[15]=u=>M("reset"))},l(t(i)("tagger.reset")),9,ha)])])]))}}),ma={class:"dataset-section"},ba={class:"dataset-section-header"},fa=["aria-label"],Ca=me({__name:"DatasetPage",props:{tab:{}},setup(c){const{t:o}=be();return(r,b)=>{const v=Me("RouterLink");return g(),m("div",ma,[e("header",ba,[e("h1",null,l(t(o)("dataset.title")),1),e("div",{class:"segmented dataset-switch",role:"group","aria-label":t(o)("dataset.switchAria")},[ge(v,{to:"/dataset/tagger",class:_e({active:c.tab==="tagger"})},{default:ve(()=>[f(l(t(o)("dataset.tab.tagger")),1)]),_:1},8,["class"]),ge(v,{to:"/dataset/editor",class:_e({active:c.tab==="editor"})},{default:ve(()=>[f(l(t(o)("dataset.tab.editor")),1)]),_:1},8,["class"])],8,fa)]),c.tab==="editor"?(g(),Se(Gt,{key:0})):(g(),Se(_a,{key:1}))])}}});export{Ca as default}; +import{G as Ue,d as me,u as be,s as p,k as Te,y as Pe,c as m,F as V,a as e,t as l,b as t,f,B as h,E as C,H as ue,q as pe,C as H,r as L,I as D,e as ge,w as ve,p as he,h as U,i as Me,o as g,m as _e,A as X,J as Je,K as je,x as Ge,l as He,n as $e,D as Qe,j as Se}from"./index-BoQWc9mA.js";import{E as x}from"./index-BC7FDA30.js";import{E as Ye}from"./index-Bff4F9zQ.js";import{s as Fe}from"./schemas-QXoCLd-0.js";const R=(c,o)=>Ue(c,{method:"POST",body:JSON.stringify(o)}),j={scan:c=>R("/api/dataset-editor/scan",{path:c}),save:(c,o,r)=>R("/api/dataset-editor/caption",{root:c,image:o,caption:r}),batch:c=>R("/api/dataset-editor/batch",c),undo:c=>R("/api/dataset-editor/undo",{root:c}),redo:c=>R("/api/dataset-editor/redo",{root:c}),history:c=>R("/api/dataset-editor/history",{root:c})};function fe(c){return c.split(",").map(o=>o.trim()).filter(Boolean)}function Ze(c,o){const r=o.trim(),b=fe(c);return!r||b.includes(r)?b.join(", "):[...b,r].join(", ")}function We(c,o){const r=o.trim();return fe(c).filter(b=>b!==r).join(", ")}const Xe={class:"dataset-page"},et={class:"dataset-side"},tt={class:"path-row"},at=["disabled"],lt=["disabled"],ot={value:""},st=["value"],nt={class:"batch-box"},rt=["placeholder"],it=["aria-label"],dt={value:"back"},ut={value:"front"},ct=["placeholder"],pt={class:"replace-row"},gt=["placeholder"],vt=["placeholder"],ht={class:"quick-tag-box"},_t=["onClick","onContextmenu"],mt=["onClick"],bt=["placeholder"],ft={class:"dataset-gallery"},yt=["disabled"],Et=["disabled"],kt=["disabled"],wt=["disabled"],Ct={key:0,class:"dataset-empty"},xt={key:1,class:"image-grid"},Tt=["onClick"],$t={key:0},St=["src","alt"],Vt={class:"dataset-pager"},Ut=["disabled"],Pt=["disabled"],Mt=["disabled"],Ft=["disabled"],Lt=["value"],Dt={class:"caption-panel"},At={key:0},It=["src","alt"],qt={class:"caption-editor"},Kt={class:"caption-count"},Ot={class:"caption-chips"},Nt=["aria-label","onClick"],Bt={class:"chip-add"},Rt=["placeholder"],zt={key:1},Jt={class:"dataset-history"},jt={key:0},ce="dataset-editor-quick-tags",Ve="dataset-editor-page-size",Gt=me({__name:"DatasetEditorPage",setup(c){const{t:o}=be(),r=p(""),b=p(""),v=p([]),S=p([]),y=p([]),P=p(""),i=p(""),O=p(""),E=p(new Set),N=p(),T=p(""),M=p(""),I=p(""),B=p(""),k=p(""),d=p(!1),u=p(!1),ee=p(!1),te=p(!1),Q=p(!1),ae=p(!1),le=p("back"),Y=p(""),Z=p(""),F=p([]),w=p(1),q=p(Number(localStorage.getItem(Ve))||48),oe=p(!1),z=p({can_undo:!1,can_redo:!1,changes:[]}),K=U(()=>v.value.filter(n=>(!P.value||n.category===P.value)&&(!i.value||n.caption.toLowerCase().includes(i.value.toLowerCase())||n.name.toLowerCase().includes(i.value.toLowerCase())))),J=U(()=>Math.max(1,Math.ceil(K.value.length/q.value))),se=U(()=>K.value.slice((w.value-1)*q.value,w.value*q.value)),A=U(()=>v.value.find(n=>n.relative_path===O.value)),ne=U(()=>E.value.size?v.value.filter(n=>E.value.has(n.relative_path)):K.value),Le=U(()=>S.value.slice(0,24)),De=U(()=>fe(T.value));function ye(){const n=Ze(T.value,Z.value);n!==T.value&&(T.value=n),Z.value=""}function Ae(n){T.value=We(T.value,n)}function Ee(n,s){if(O.value=n.relative_path,T.value=n.caption,!s)return;const _=K.value.findIndex($=>$.relative_path===n.relative_path),a=new Set(s.ctrlKey||s.metaKey||s.shiftKey?E.value:[]);if(s.shiftKey&&N.value!==void 0){const[$,Re]=[N.value,_].sort((de,ze)=>de-ze);K.value.slice($,Re+1).forEach(de=>a.add(de.relative_path))}else(s.ctrlKey||s.metaKey)&&a.has(n.relative_path)?a.delete(n.relative_path):a.add(n.relative_path);E.value=a,N.value=_}function re(n){const s=new Map(n.map(_=>[_.image,_]));v.value=v.value.map(_=>{const a=s.get(_.relative_path);return a?{..._,caption:a.caption,tags:a.tags,caption_exists:a.caption_exists}:_}),A.value&&(T.value=A.value.caption),Ie()}function Ie(){const n=new Map;v.value.forEach(s=>s.tags.forEach(_=>n.set(_,(n.get(_)||0)+1))),S.value=[...n].map(([s,_])=>({tag:s,count:_})).sort((s,_)=>_.count-s.count||s.tag.localeCompare(_.tag))}async function W(){b.value&&(z.value=await j.history(b.value))}async function ke(){if(r.value.trim()){Q.value=!0;try{const n=await j.scan(r.value);b.value=n.root,r.value=n.root,v.value=n.items,S.value=n.tags.sort((s,_)=>_.count-s.count),y.value=n.categories,E.value=new Set,w.value=1,n.items[0]&&Ee(n.items[0]),await W(),x.success(o("datasetEditor.scanMsg.loaded",{n:n.total}))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.scanMsg.fail"))}finally{Q.value=!1}}}async function qe(){if(A.value)try{re([await j.save(b.value,A.value.relative_path,T.value)]),await W(),x.success(o("datasetEditor.caption.saved"))}catch(n){x.error(n instanceof Error?n.message:o("datasetEditor.caption.saveFail"))}}function ie(n){return n.split(/[,,\n]/).map(s=>s.trim()).filter(Boolean)}async function Ke(){ae.value=!0;try{r.value=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(n){x.error(n instanceof Error?n.message:o("schemaForm.pickFail"))}finally{ae.value=!1}}async function Oe(){if(ne.value.length)try{await Ye.confirm(o("datasetEditor.batch.confirm",{n:ne.value.length}),E.value.size?o("datasetEditor.batch.confirmSelected"):o("datasetEditor.batch.confirmFiltered"));const n=B.value.trim()?[{from:B.value.trim(),to:k.value.trim()}]:[],s=await j.batch({root:b.value,images:ne.value.map(_=>_.relative_path),append:ie(M.value),append_position:le.value,remove:ie(I.value),replace:n,clean:d.value,sort:u.value,underscore_to_space:ee.value,strip_escape_chars:te.value});re(s.items),await W(),x.success(o("datasetEditor.batch.done",{n:s.changed}))}catch(n){n!=="cancel"&&n!=="close"&&x.error(n instanceof Error?n.message:o("datasetEditor.batch.fail"))}}async function we(n){try{const s=await j[n](b.value);re(s.items),await W(),x.success(s.changed?o(n==="undo"?"datasetEditor.historyMsg.undone":"datasetEditor.historyMsg.redone"):o("datasetEditor.historyMsg.none"))}catch(s){x.error(s instanceof Error?s.message:o("datasetEditor.historyMsg.fail"))}}function Ne(){const n=new Set(E.value),s=se.value.every(_=>n.has(_.relative_path));se.value.forEach(_=>s?n.delete(_.relative_path):n.add(_.relative_path)),E.value=n}function Ce(n){const s=new Set(ie(M.value));s.add(n),M.value=[...s].join(", ")}function xe(){const n=Y.value.trim();!n||F.value.includes(n)||(F.value.push(n),Y.value="",localStorage.setItem(ce,JSON.stringify(F.value)))}function Be(n){F.value=F.value.filter(s=>s!==n),localStorage.setItem(ce,JSON.stringify(F.value))}return Te([P,i,q],()=>{w.value=1,localStorage.setItem(Ve,String(q.value))}),Te(J,n=>{w.value>n&&(w.value=n)}),Pe(()=>{try{F.value=JSON.parse(localStorage.getItem(ce)||"[]")}catch{F.value=[]}}),(n,s)=>{const _=Me("el-dialog");return g(),m(V,null,[e("div",Xe,[e("aside",et,[s[24]||(s[24]=e("span",{class:"eyebrow"},"DATASET EDITOR",-1)),e("h1",null,l(t(o)("datasetEditor.title")),1),e("label",null,[f(l(t(o)("datasetEditor.pathLabel")),1),e("span",tt,[h(e("input",{"onUpdate:modelValue":s[0]||(s[0]=a=>r.value=a),onKeyup:ue(ke,["enter"])},null,544),[[C,r.value]]),e("button",{disabled:ae.value,onClick:pe(Ke,["prevent"])},l(t(o)("schemaForm.browse")),9,at)])]),e("button",{class:"primary-action",disabled:Q.value,onClick:ke},l(Q.value?t(o)("datasetEditor.scanning"):t(o)("datasetEditor.scan")),9,lt),e("label",null,[f(l(t(o)("datasetEditor.categoryLabel")),1),h(e("select",{"onUpdate:modelValue":s[1]||(s[1]=a=>P.value=a)},[e("option",ot,l(t(o)("datasetEditor.allCategories")),1),(g(!0),m(V,null,L(y.value,a=>(g(),m("option",{key:a.value,value:a.value},l(a.name)+" ("+l(a.count)+")",9,st))),128))],512),[[H,P.value]])]),e("label",null,[f(l(t(o)("datasetEditor.queryLabel")),1),h(e("input",{"onUpdate:modelValue":s[2]||(s[2]=a=>i.value=a)},null,512),[[C,i.value]])]),e("div",nt,[e("strong",null,l(t(o)("datasetEditor.batch.title"))+" "+l(E.value.size?t(o)("datasetEditor.batch.selected",{n:E.value.size}):t(o)("datasetEditor.batch.filtered",{n:K.value.length})),1),h(e("input",{"onUpdate:modelValue":s[3]||(s[3]=a=>M.value=a),placeholder:t(o)("datasetEditor.batch.appendPlaceholder")},null,8,rt),[[C,M.value]]),h(e("select",{"onUpdate:modelValue":s[4]||(s[4]=a=>le.value=a),"aria-label":t(o)("datasetEditor.batch.position")},[e("option",dt,l(t(o)("datasetEditor.batch.positionBack")),1),e("option",ut,l(t(o)("datasetEditor.batch.positionFront")),1)],8,it),[[H,le.value]]),h(e("input",{"onUpdate:modelValue":s[5]||(s[5]=a=>I.value=a),placeholder:t(o)("datasetEditor.batch.removePlaceholder")},null,8,ct),[[C,I.value]]),e("div",pt,[h(e("input",{"onUpdate:modelValue":s[6]||(s[6]=a=>B.value=a),placeholder:t(o)("datasetEditor.batch.replaceFrom")},null,8,gt),[[C,B.value]]),h(e("input",{"onUpdate:modelValue":s[7]||(s[7]=a=>k.value=a),placeholder:t(o)("datasetEditor.batch.replaceTo")},null,8,vt),[[C,k.value]])]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[8]||(s[8]=a=>d.value=a),type:"checkbox"},null,512),[[D,d.value]]),f(l(t(o)("datasetEditor.batch.clean")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[9]||(s[9]=a=>ee.value=a),type:"checkbox"},null,512),[[D,ee.value]]),f(l(t(o)("datasetEditor.batch.underscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[10]||(s[10]=a=>te.value=a),type:"checkbox"},null,512),[[D,te.value]]),f(l(t(o)("datasetEditor.batch.stripEscape")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":s[11]||(s[11]=a=>u.value=a),type:"checkbox"},null,512),[[D,u.value]]),f(l(t(o)("datasetEditor.batch.sort")),1)]),e("button",{onClick:Oe},l(t(o)("datasetEditor.batch.apply")),1)]),e("div",ht,[e("strong",null,l(t(o)("datasetEditor.quickTag.title")),1),e("div",null,[(g(!0),m(V,null,L(F.value,a=>(g(),m("button",{key:a,onClick:$=>Ce(a),onContextmenu:pe($=>Be(a),["prevent"])},l(a),41,_t))),128)),(g(!0),m(V,null,L(Le.value,a=>(g(),m("button",{key:a.tag,class:"suggested",onClick:$=>Ce(a.tag)},[f(l(a.tag)+" ",1),e("small",null,l(a.count),1)],8,mt))),128))]),e("span",null,[h(e("input",{"onUpdate:modelValue":s[12]||(s[12]=a=>Y.value=a),placeholder:t(o)("datasetEditor.quickTag.addPlaceholder"),onKeyup:ue(xe,["enter"])},null,40,bt),[[C,Y.value]]),e("button",{onClick:xe},l(t(o)("datasetEditor.quickTag.add")),1)]),e("small",null,l(t(o)("datasetEditor.quickTag.hint")),1)])]),e("main",ft,[e("header",null,[e("strong",null,l(t(o)("datasetEditor.gallery.count",{filtered:K.value.length,total:v.value.length,selected:E.value.size})),1),e("div",null,[e("button",{disabled:!b.value,onClick:Ne},l(t(o)("datasetEditor.gallery.togglePage")),9,yt),e("button",{disabled:!z.value.can_undo,onClick:s[13]||(s[13]=a=>we("undo"))},l(t(o)("datasetEditor.gallery.undo")),9,Et),e("button",{disabled:!z.value.can_redo,onClick:s[14]||(s[14]=a=>we("redo"))},l(t(o)("datasetEditor.gallery.redo")),9,kt),e("button",{disabled:!b.value,onClick:s[15]||(s[15]=a=>oe.value=!0)},l(t(o)("datasetEditor.gallery.history")),9,wt)])]),b.value?(g(),m("div",xt,[(g(!0),m(V,null,L(se.value,a=>(g(),m("button",{key:a.relative_path,class:_e({active:O.value===a.relative_path,checked:E.value.has(a.relative_path)}),onClick:$=>Ee(a,$)},[E.value.has(a.relative_path)?(g(),m("i",$t,"✓")):he("",!0),e("img",{src:a.image_url,alt:a.name,loading:"lazy"},null,8,St),e("span",null,l(a.name),1)],10,Tt))),128))])):(g(),m("div",Ct,[e("strong",null,l(t(o)("datasetEditor.gallery.emptyTitle")),1),e("span",null,l(t(o)("datasetEditor.gallery.emptyHint")),1)])),e("footer",Vt,[e("button",{disabled:w.value===1,onClick:s[16]||(s[16]=a=>w.value=1)},l(t(o)("datasetEditor.pager.first")),9,Ut),e("button",{disabled:w.value===1,onClick:s[17]||(s[17]=a=>w.value--)},l(t(o)("datasetEditor.pager.prev")),9,Pt),e("span",null,l(w.value)+" / "+l(J.value),1),e("button",{disabled:w.value===J.value,onClick:s[18]||(s[18]=a=>w.value++)},l(t(o)("datasetEditor.pager.next")),9,Mt),e("button",{disabled:w.value===J.value,onClick:s[19]||(s[19]=a=>w.value=J.value)},l(t(o)("datasetEditor.pager.last")),9,Ft),h(e("select",{"onUpdate:modelValue":s[20]||(s[20]=a=>q.value=a)},[(g(),m(V,null,L([24,48,96,192],a=>e("option",{key:a,value:a},l(t(o)("datasetEditor.pager.perPage",{size:a})),9,Lt)),64))],512),[[H,q.value,void 0,{number:!0}]])])]),e("aside",Dt,[A.value?(g(),m("div",At,[e("img",{src:A.value.image_url,alt:A.value.name},null,8,It),e("strong",null,l(A.value.relative_path),1),e("div",qt,[h(e("textarea",{"onUpdate:modelValue":s[21]||(s[21]=a=>T.value=a),rows:"10"},null,512),[[C,T.value]]),e("small",Kt,l(t(o)("datasetEditor.caption.chars",{n:T.value.length})),1)]),e("div",Ot,[(g(!0),m(V,null,L(De.value,a=>(g(),m("span",{key:a,class:"chip"},[f(l(a),1),e("button",{"aria-label":t(o)("datasetEditor.caption.removeAria",{tag:a}),onClick:$=>Ae(a)},"×",8,Nt)]))),128)),e("span",Bt,[h(e("input",{"onUpdate:modelValue":s[22]||(s[22]=a=>Z.value=a),placeholder:t(o)("datasetEditor.caption.addPlaceholder"),onKeyup:ue(ye,["enter"])},null,40,Rt),[[C,Z.value]]),e("button",{onClick:ye},l(t(o)("datasetEditor.caption.add")),1)])]),e("button",{class:"primary-action",onClick:qe},l(t(o)("datasetEditor.caption.save")),1)])):(g(),m("p",zt,l(t(o)("datasetEditor.caption.empty")),1))])]),ge(_,{modelValue:oe.value,"onUpdate:modelValue":s[23]||(s[23]=a=>oe.value=a),title:t(o)("datasetEditor.historyDialog.title"),width:"min(820px, 94vw)"},{default:ve(()=>[e("div",Jt,[(g(!0),m(V,null,L(z.value.changes,a=>(g(),m("article",{key:`${a.label}-${a.items[0]?.image}`},[e("header",null,[e("strong",null,l(a.label),1),e("span",null,l(t(o)("datasetEditor.historyDialog.count",{n:a.count})),1)]),e("details",null,[e("summary",null,l(t(o)("datasetEditor.historyDialog.detail")),1),(g(!0),m(V,null,L(a.items,$=>(g(),m("div",{key:$.image},[e("code",null,l($.image),1),e("del",null,l($.before||t(o)("datasetEditor.historyDialog.noCaption")),1),e("ins",null,l($.after||t(o)("datasetEditor.historyDialog.noCaption")),1)]))),128))])]))),128)),z.value.changes.length?he("",!0):(g(),m("p",jt,l(t(o)("datasetEditor.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"])],64)}}}),G={status:()=>Ue("/api/tagger/status"),start:c=>X("/api/interrogate",{method:"POST",body:JSON.stringify(c)}),prefetch:(c,o)=>X("/api/tagger/prefetch",{method:"POST",body:JSON.stringify({interrogator_model:c,download_endpoint:o})}),cancel:()=>X("/api/tagger/cancel",{method:"POST"}),reset:()=>X("/api/tagger/reset",{method:"POST"})},Ht={phase:"idle",message:"",model:"",download:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},tagging:{current:0,total:0,filename:"",bytes_current:0,bytes_total:0,percent:0},updated_at:0},Qt=Je("tagger",()=>{const c=p(Ht),o=p(""),r=p(!1),b=U(()=>["downloading","tagging","pending","cancelling"].includes(c.value.phase));async function v(){try{c.value=await G.status(),o.value=""}catch(y){o.value=y instanceof Error?y.message:je.global.t("tagger.msg.statusFail")}}async function S(y){r.value=!0;try{await y(),await v()}finally{r.value=!1}}return{status:c,error:o,submitting:r,busy:b,refresh:v,start:y=>S(()=>G.start(y)),prefetch:(y,P)=>S(()=>G.prefetch(y,P)),cancel:()=>S(G.cancel),reset:()=>S(G.reset)}}),Yt={class:"tagger-page"},Zt={class:"tagger-form"},Wt={class:"tagger-grid"},Xt={class:"path-row"},ea=["disabled"],ta=["placeholder"],aa={value:"ignore"},la={value:"copy"},oa={value:"prepend"},sa={class:"check-row"},na={class:"tagger-status"},ra={class:"task-status"},ia={key:0},da={class:"meter"},ua={class:"meter"},ca={class:"tagger-actions"},pa=["disabled"],ga=["disabled"],va=["disabled"],ha=["disabled"],_a=me({__name:"TaggerPage",setup(c){const o=["wd14-convnextv2-v2","wd-convnext-v3","wd-swinv2-v3","wd-vit-v3","wd14-swinv2-v2","wd14-vit-v2","wd14-moat-v2","wd-eva02-large-tagger-v3","wd-vit-large-tagger-v3","cl_tagger_1_01"],r=Qe({path:"",interrogator_model:o[0],threshold:.35,character_threshold:.6,add_rating_tag:!1,add_model_tag:!1,additional_tags:"",exclude_tags:"",escape_tag:!0,batch_input_recursive:!1,batch_output_action_on_conflict:"copy",replace_underscore:!0,download_endpoint:"",replace_underscore_excludes:"0_0, (o)_(o), +_+, +_-, ._., _, <|>_<|>, =_=, >_<, 3_3, 6_9, >_o, @_@, ^_^, o_o, u_u, x_x, |_|, ||_||"}),b=Qt(),{status:v,error:S,submitting:y,busy:P}=Ge(b),{t:i}=be(),O=U(()=>v.value.download.percent||(v.value.download.total?Math.round(v.value.download.current/v.value.download.total*100):0)),E=U(()=>v.value.tagging.total?Math.round(v.value.tagging.current/v.value.tagging.total*100):0);let N;async function T(){if(!r.path.trim())return x.error(i("tagger.msg.pathRequired"));try{await b.start({...r,path:r.path.replaceAll("\\","/")}),x.success(i("tagger.msg.submitted"))}catch(k){x.error(k instanceof Error?k.message:i("tagger.msg.submitFail"))}}async function M(k){try{k==="prefetch"?await b.prefetch(r.interrogator_model,r.download_endpoint):await b[k](),x.success(i(k==="cancel"?"tagger.msg.cancelRequested":k==="reset"?"tagger.msg.resetDone":"tagger.msg.prefetchStarted"))}catch(d){x.error(d instanceof Error?d.message:i("tagger.msg.actionFail"))}}const I=p(!1);async function B(){I.value=!0;try{r.path=(await Fe.pickFile("folder")).path.replaceAll("\\","/")}catch(k){x.error(k instanceof Error?k.message:i("schemaForm.pickFail"))}finally{I.value=!1}}return Pe(async()=>{await b.refresh(),N=window.setInterval(b.refresh,1200)}),He(()=>window.clearInterval(N)),(k,d)=>(g(),m("div",Yt,[e("section",Zt,[e("header",null,[d[16]||(d[16]=e("span",{class:"eyebrow"},"DATASET TAGGER",-1)),e("h1",null,l(t(i)("tagger.title")),1),e("p",null,l(t(i)("tagger.subtitle")),1)]),e("div",Wt,[e("label",null,[f(l(t(i)("tagger.modelLabel")),1),h(e("select",{"onUpdate:modelValue":d[0]||(d[0]=u=>r.interrogator_model=u)},[(g(),m(V,null,L(o,u=>e("option",{key:u},l(u),1)),64))],512),[[H,r.interrogator_model]])]),e("label",null,[f(l(t(i)("tagger.pathLabel")),1),e("span",Xt,[h(e("input",{"onUpdate:modelValue":d[1]||(d[1]=u=>r.path=u),placeholder:"D:/datasets/images"},null,512),[[C,r.path]]),e("button",{disabled:I.value,onClick:pe(B,["prevent"])},l(t(i)("schemaForm.browse")),9,ea)])]),e("label",null,[f(l(t(i)("tagger.thresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[2]||(d[2]=u=>r.threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.characterThresholdLabel")),1),h(e("input",{"onUpdate:modelValue":d[3]||(d[3]=u=>r.character_threshold=u),type:"number",min:"0",max:"1",step:"0.05"},null,512),[[C,r.character_threshold,void 0,{number:!0}]])]),e("label",null,[f(l(t(i)("tagger.additionalTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[4]||(d[4]=u=>r.additional_tags=u)},null,512),[[C,r.additional_tags]])]),e("label",null,[f(l(t(i)("tagger.excludeTagsLabel")),1),h(e("input",{"onUpdate:modelValue":d[5]||(d[5]=u=>r.exclude_tags=u)},null,512),[[C,r.exclude_tags]])]),e("label",null,[f(l(t(i)("tagger.endpointLabel")),1),h(e("input",{"onUpdate:modelValue":d[6]||(d[6]=u=>r.download_endpoint=u),placeholder:t(i)("tagger.endpointPlaceholder")},null,8,ta),[[C,r.download_endpoint]])]),e("label",null,[f(l(t(i)("tagger.conflictLabel")),1),h(e("select",{"onUpdate:modelValue":d[7]||(d[7]=u=>r.batch_output_action_on_conflict=u)},[e("option",aa,l(t(i)("tagger.conflict.ignore")),1),e("option",la,l(t(i)("tagger.conflict.copy")),1),e("option",oa,l(t(i)("tagger.conflict.prepend")),1)],512),[[H,r.batch_output_action_on_conflict]])])]),e("div",sa,[e("label",null,[h(e("input",{"onUpdate:modelValue":d[8]||(d[8]=u=>r.batch_input_recursive=u),type:"checkbox"},null,512),[[D,r.batch_input_recursive]]),f(l(t(i)("tagger.recursive")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[9]||(d[9]=u=>r.replace_underscore=u),type:"checkbox"},null,512),[[D,r.replace_underscore]]),f(l(t(i)("tagger.replaceUnderscore")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[10]||(d[10]=u=>r.escape_tag=u),type:"checkbox"},null,512),[[D,r.escape_tag]]),f(l(t(i)("tagger.escapeTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[11]||(d[11]=u=>r.add_rating_tag=u),type:"checkbox"},null,512),[[D,r.add_rating_tag]]),f(l(t(i)("tagger.addRatingTag")),1)]),e("label",null,[h(e("input",{"onUpdate:modelValue":d[12]||(d[12]=u=>r.add_model_tag=u),type:"checkbox"},null,512),[[D,r.add_model_tag]]),f(l(t(i)("tagger.addModelTag")),1)])])]),e("aside",na,[e("span",ra,l(t(v).phase),1),e("h2",null,l(t(v).message||t(i)("tagger.idle")),1),t(S)?(g(),m("p",ia,l(t(S)),1)):he("",!0),e("div",da,[e("header",null,[e("span",null,l(t(i)("tagger.downloadMeter")),1),e("b",null,l(O.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${O.value}%`})},null,4)]),e("small",null,l(t(v).download.filename||t(i)("tagger.downloadIdle")),1)]),e("div",ua,[e("header",null,[e("span",null,l(t(i)("tagger.taggingMeter")),1),e("b",null,l(E.value)+"%",1)]),e("div",null,[e("i",{style:$e({width:`${E.value}%`})},null,4)]),e("small",null,l(t(v).tagging.current)+" / "+l(t(v).tagging.total)+" "+l(t(v).tagging.filename),1)]),e("div",ca,[t(P)?(g(),m("button",{key:0,class:"danger-action",disabled:t(y),onClick:d[13]||(d[13]=u=>M("cancel"))},l(t(i)("tagger.cancel")),9,pa)):(g(),m("button",{key:1,class:"primary-action",disabled:t(y),onClick:T},l(t(i)("tagger.start")),9,ga)),e("button",{class:"secondary-action",disabled:t(y)||t(v).phase==="tagging",onClick:d[14]||(d[14]=u=>M("prefetch"))},l(t(i)("tagger.prefetch")),9,va),e("button",{class:"secondary-action",disabled:t(y),onClick:d[15]||(d[15]=u=>M("reset"))},l(t(i)("tagger.reset")),9,ha)])])]))}}),ma={class:"dataset-section"},ba={class:"dataset-section-header"},fa=["aria-label"],Ca=me({__name:"DatasetPage",props:{tab:{}},setup(c){const{t:o}=be();return(r,b)=>{const v=Me("RouterLink");return g(),m("div",ma,[e("header",ba,[e("h1",null,l(t(o)("dataset.title")),1),e("div",{class:"segmented dataset-switch",role:"group","aria-label":t(o)("dataset.switchAria")},[ge(v,{to:"/dataset/tagger",class:_e({active:c.tab==="tagger"})},{default:ve(()=>[f(l(t(o)("dataset.tab.tagger")),1)]),_:1},8,["class"]),ge(v,{to:"/dataset/editor",class:_e({active:c.tab==="editor"})},{default:ve(()=>[f(l(t(o)("dataset.tab.editor")),1)]),_:1},8,["class"])],8,fa)]),c.tab==="editor"?(g(),Se(Gt,{key:0})):(g(),Se(_a,{key:1}))])}}});export{Ca as default}; diff --git a/frontend/dist/assets/GuidePage-Ds9mS5xC.js b/frontend/dist/assets/GuidePage-m1i_JIjs.js similarity index 97% rename from frontend/dist/assets/GuidePage-Ds9mS5xC.js rename to frontend/dist/assets/GuidePage-m1i_JIjs.js index 9610843e..2eb582e4 100644 --- a/frontend/dist/assets/GuidePage-Ds9mS5xC.js +++ b/frontend/dist/assets/GuidePage-m1i_JIjs.js @@ -1 +1 @@ -import{d as r,u as p,c,a as e,t as n,b as l,e as o,w as i,f as u,i as g,o as m}from"./index-BlvrX0Zy.js";const _="/assets/guide-mascot.webp",h={class:"content-page"},k={class:"content-hero content-hero-split"},f=["alt"],b={class:"content-cards"},v=r({__name:"GuidePage",setup(T){const{t}=p();return(x,a)=>{const s=g("RouterLink"),d=g("i18n-t");return m(),c("article",h,[e("header",k,[e("div",null,[a[0]||(a[0]=e("span",{class:"eyebrow"},"GETTING STARTED",-1)),e("h1",null,n(l(t)("guide.title")),1),e("p",null,n(l(t)("guide.subtitle")),1)]),e("img",{src:_,alt:l(t)("guide.mascotAlt")},null,8,f)]),e("section",null,[e("h2",null,n(l(t)("guide.step1Title")),1),o(d,{keypath:"guide.step1",tag:"p",scope:"global"},{ext:i(()=>[...a[1]||(a[1]=[e("code",null,".txt",-1)])]),tagger:i(()=>[o(s,{to:"/dataset/tagger"},{default:i(()=>[u(n(l(t)("guide.link.tagger")),1)]),_:1})]),editor:i(()=>[o(s,{to:"/dataset/editor"},{default:i(()=>[u(n(l(t)("guide.link.editor")),1)]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.step2Title")),1),e("div",b,[e("div",null,[e("h3",null,n(l(t)("guide.loraTitle")),1),o(d,{keypath:"guide.loraDesc",tag:"p",scope:"global"},{page:i(()=>[o(s,{to:"/training"},{default:i(()=>[u(n(l(t)("guide.link.trainingPage")),1)]),_:1})]),_:1})]),e("div",null,[e("h3",null,n(l(t)("guide.finetuneTitle")),1),o(d,{keypath:"guide.finetuneDesc",tag:"p",scope:"global"},{anima:i(()=>[o(s,{to:"/training?model=anima&engine=kohya&target=finetune"},{default:i(()=>[u(n(l(t)("guide.link.animaFinetune")),1)]),_:1})]),dreambooth:i(()=>[o(s,{to:"/dreambooth/index.html"},{default:i(()=>[...a[2]||(a[2]=[u("Dreambooth",-1)])]),_:1})]),_:1})])])]),e("section",null,[e("h2",null,n(l(t)("guide.step3Title")),1),e("ol",null,[e("li",null,n(l(t)("guide.step3a")),1),e("li",null,n(l(t)("guide.step3b")),1),e("li",null,n(l(t)("guide.step3c")),1)])]),e("section",null,[e("h2",null,n(l(t)("guide.step4Title")),1),o(d,{keypath:"guide.step4",tag:"p",scope:"global"},{tasks:i(()=>[o(s,{to:"/tasks"},{default:i(()=>[u(n(l(t)("guide.link.tasks")),1)]),_:1})]),tensorboard:i(()=>[o(s,{to:"/tensorboard.html"},{default:i(()=>[...a[3]||(a[3]=[u("TensorBoard",-1)])]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.migrateTitle")),1),e("ul",null,[e("li",null,n(l(t)("guide.migrate1")),1),e("li",null,n(l(t)("guide.migrate2")),1),e("li",null,n(l(t)("guide.migrate3")),1)])])])}}});export{v as default}; +import{d as r,u as p,c,a as e,t as n,b as l,e as o,w as i,f as u,i as g,o as m}from"./index-BoQWc9mA.js";const _="/assets/guide-mascot.webp",h={class:"content-page"},k={class:"content-hero content-hero-split"},f=["alt"],b={class:"content-cards"},v=r({__name:"GuidePage",setup(T){const{t}=p();return(x,a)=>{const s=g("RouterLink"),d=g("i18n-t");return m(),c("article",h,[e("header",k,[e("div",null,[a[0]||(a[0]=e("span",{class:"eyebrow"},"GETTING STARTED",-1)),e("h1",null,n(l(t)("guide.title")),1),e("p",null,n(l(t)("guide.subtitle")),1)]),e("img",{src:_,alt:l(t)("guide.mascotAlt")},null,8,f)]),e("section",null,[e("h2",null,n(l(t)("guide.step1Title")),1),o(d,{keypath:"guide.step1",tag:"p",scope:"global"},{ext:i(()=>[...a[1]||(a[1]=[e("code",null,".txt",-1)])]),tagger:i(()=>[o(s,{to:"/dataset/tagger"},{default:i(()=>[u(n(l(t)("guide.link.tagger")),1)]),_:1})]),editor:i(()=>[o(s,{to:"/dataset/editor"},{default:i(()=>[u(n(l(t)("guide.link.editor")),1)]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.step2Title")),1),e("div",b,[e("div",null,[e("h3",null,n(l(t)("guide.loraTitle")),1),o(d,{keypath:"guide.loraDesc",tag:"p",scope:"global"},{page:i(()=>[o(s,{to:"/training"},{default:i(()=>[u(n(l(t)("guide.link.trainingPage")),1)]),_:1})]),_:1})]),e("div",null,[e("h3",null,n(l(t)("guide.finetuneTitle")),1),o(d,{keypath:"guide.finetuneDesc",tag:"p",scope:"global"},{anima:i(()=>[o(s,{to:"/training?model=anima&engine=kohya&target=finetune"},{default:i(()=>[u(n(l(t)("guide.link.animaFinetune")),1)]),_:1})]),dreambooth:i(()=>[o(s,{to:"/dreambooth/index.html"},{default:i(()=>[...a[2]||(a[2]=[u("Dreambooth",-1)])]),_:1})]),_:1})])])]),e("section",null,[e("h2",null,n(l(t)("guide.step3Title")),1),e("ol",null,[e("li",null,n(l(t)("guide.step3a")),1),e("li",null,n(l(t)("guide.step3b")),1),e("li",null,n(l(t)("guide.step3c")),1)])]),e("section",null,[e("h2",null,n(l(t)("guide.step4Title")),1),o(d,{keypath:"guide.step4",tag:"p",scope:"global"},{tasks:i(()=>[o(s,{to:"/tasks"},{default:i(()=>[u(n(l(t)("guide.link.tasks")),1)]),_:1})]),tensorboard:i(()=>[o(s,{to:"/tensorboard.html"},{default:i(()=>[...a[3]||(a[3]=[u("TensorBoard",-1)])]),_:1})]),_:1})]),e("section",null,[e("h2",null,n(l(t)("guide.migrateTitle")),1),e("ul",null,[e("li",null,n(l(t)("guide.migrate1")),1),e("li",null,n(l(t)("guide.migrate2")),1),e("li",null,n(l(t)("guide.migrate3")),1)])])])}}});export{v as default}; diff --git a/frontend/dist/assets/HomePage-ChxMX_IM.js b/frontend/dist/assets/HomePage-qalEt5mU.js similarity index 97% rename from frontend/dist/assets/HomePage-ChxMX_IM.js rename to frontend/dist/assets/HomePage-qalEt5mU.js index 6b8c4ae2..2f86642c 100644 --- a/frontend/dist/assets/HomePage-ChxMX_IM.js +++ b/frontend/dist/assets/HomePage-qalEt5mU.js @@ -1 +1 @@ -import{_ as g}from"./home-logo-Bq2pf2HD.js";import{d as b,u as v,c as u,a as t,t as s,b as a,e as d,w as n,f as i,g as x,F as f,r as k,h as N,i as p,o as c,j as y}from"./index-BlvrX0Zy.js";const C={class:"home-page"},T={class:"hero"},w={class:"hero-copy"},I={class:"hero-actions"},L=["aria-label"],A={class:"portal-index"},B={class:"portal-link"},E={class:"status-strip"},O={class:"home-credit"},G=b({__name:"HomePage",setup(R){const{t:e}=v(),m=N(()=>[{title:e("home.portals.training.title"),text:e("home.portals.training.text"),to:"/training",tone:"blue"},{title:e("home.portals.dataset.title"),text:e("home.portals.dataset.text"),to:"/dataset",tone:"violet"},{title:e("home.portals.tasks.title"),text:e("home.portals.tasks.text"),to:"/tasks",tone:"cyan"}]);return(S,o)=>{const r=p("RouterLink"),h=p("i18n-t");return c(),u("div",C,[t("section",T,[t("div",w,[o[0]||(o[0]=t("span",{class:"eyebrow"},"LOCAL TRAINING WORKSPACE",-1)),t("h1",null,s(a(e)("home.heroTitle")),1),t("p",null,s(a(e)("home.heroSubtitle")),1),t("div",I,[d(r,{class:"primary-action",to:"/training"},{default:n(()=>[i(s(a(e)("home.startTraining")),1)]),_:1}),d(r,{class:"secondary-action",to:"/help/guide.html"},{default:n(()=>[i(s(a(e)("home.readGuide")),1)]),_:1})])]),o[1]||(o[1]=x('
Next Trainer
',1))]),t("section",{class:"portal-grid","aria-label":a(e)("home.portalAria")},[(c(!0),u(f,null,k(m.value,(l,_)=>(c(),y(r,{key:l.to,to:l.to,class:"portal-card","data-tone":l.tone},{default:n(()=>[t("span",A,"0"+s(_+1),1),t("h2",null,s(l.title),1),t("p",null,s(l.text),1),t("span",B,[i(s(a(e)("home.enter"))+" ",1),o[2]||(o[2]=t("b",null,"→",-1))])]),_:2},1032,["to","data-tone"]))),128))],8,L),t("section",E,[t("span",null,[o[3]||(o[3]=t("i",{class:"status-dot"},null,-1)),i(" "+s(a(e)("home.status.local")),1)]),t("span",null,s(a(e)("home.status.vue")),1),t("span",null,s(a(e)("home.status.models")),1)]),t("p",O,[d(h,{keypath:"home.credit",tag:"span",scope:"global"},{about:n(()=>[d(r,{to:"/settings/about"},{default:n(()=>[i(s(a(e)("settings.nav.about")),1)]),_:1})]),notice:n(()=>[...o[4]||(o[4]=[t("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])])}}});export{G as default}; +import{_ as g}from"./home-logo-Bq2pf2HD.js";import{d as b,u as v,c as u,a as t,t as s,b as a,e as d,w as n,f as i,g as x,F as f,r as k,h as N,i as p,o as c,j as y}from"./index-BoQWc9mA.js";const C={class:"home-page"},T={class:"hero"},w={class:"hero-copy"},I={class:"hero-actions"},L=["aria-label"],A={class:"portal-index"},B={class:"portal-link"},E={class:"status-strip"},O={class:"home-credit"},G=b({__name:"HomePage",setup(R){const{t:e}=v(),m=N(()=>[{title:e("home.portals.training.title"),text:e("home.portals.training.text"),to:"/training",tone:"blue"},{title:e("home.portals.dataset.title"),text:e("home.portals.dataset.text"),to:"/dataset",tone:"violet"},{title:e("home.portals.tasks.title"),text:e("home.portals.tasks.text"),to:"/tasks",tone:"cyan"}]);return(S,o)=>{const r=p("RouterLink"),h=p("i18n-t");return c(),u("div",C,[t("section",T,[t("div",w,[o[0]||(o[0]=t("span",{class:"eyebrow"},"LOCAL TRAINING WORKSPACE",-1)),t("h1",null,s(a(e)("home.heroTitle")),1),t("p",null,s(a(e)("home.heroSubtitle")),1),t("div",I,[d(r,{class:"primary-action",to:"/training"},{default:n(()=>[i(s(a(e)("home.startTraining")),1)]),_:1}),d(r,{class:"secondary-action",to:"/help/guide.html"},{default:n(()=>[i(s(a(e)("home.readGuide")),1)]),_:1})])]),o[1]||(o[1]=x('
Next Trainer
',1))]),t("section",{class:"portal-grid","aria-label":a(e)("home.portalAria")},[(c(!0),u(f,null,k(m.value,(l,_)=>(c(),y(r,{key:l.to,to:l.to,class:"portal-card","data-tone":l.tone},{default:n(()=>[t("span",A,"0"+s(_+1),1),t("h2",null,s(l.title),1),t("p",null,s(l.text),1),t("span",B,[i(s(a(e)("home.enter"))+" ",1),o[2]||(o[2]=t("b",null,"→",-1))])]),_:2},1032,["to","data-tone"]))),128))],8,L),t("section",E,[t("span",null,[o[3]||(o[3]=t("i",{class:"status-dot"},null,-1)),i(" "+s(a(e)("home.status.local")),1)]),t("span",null,s(a(e)("home.status.vue")),1),t("span",null,s(a(e)("home.status.models")),1)]),t("p",O,[d(h,{keypath:"home.credit",tag:"span",scope:"global"},{about:n(()=>[d(r,{to:"/settings/about"},{default:n(()=>[i(s(a(e)("settings.nav.about")),1)]),_:1})]),notice:n(()=>[...o[4]||(o[4]=[t("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])])}}});export{G as default}; diff --git a/frontend/dist/assets/IntegrationPage-DlxzcFZI.js b/frontend/dist/assets/IntegrationPage-CefHnPho.js similarity index 92% rename from frontend/dist/assets/IntegrationPage-DlxzcFZI.js rename to frontend/dist/assets/IntegrationPage-CefHnPho.js index 4d840bf1..ca984dea 100644 --- a/frontend/dist/assets/IntegrationPage-DlxzcFZI.js +++ b/frontend/dist/assets/IntegrationPage-CefHnPho.js @@ -1 +1 @@ -import{d as u,u as p,c as d,a as t,t as o,b as g,h as l,o as f}from"./index-BlvrX0Zy.js";const _={class:"integration-page"},m=["href"],h=["title","src"],v=u({__name:"IntegrationPage",props:{title:{},titleKey:{},src:{},configurable:{type:Boolean}},setup(i){const e=i,{t:r}=p(),s=l(()=>e.titleKey?r(e.titleKey):e.title??""),n=l(()=>{if(!e.configurable)return e.src;try{return JSON.parse(localStorage.getItem("ui-configs")||"{}").tensorboard_url?.trim()||e.src}catch{return e.src}});return(c,a)=>(f(),d("div",_,[t("header",null,[t("div",null,[a[0]||(a[0]=t("span",{class:"eyebrow"},"INTEGRATED SERVICE",-1)),t("h1",null,o(s.value),1)]),t("a",{href:n.value,target:"_blank",rel:"noreferrer"},o(g(r)("integration.openExternal")),9,m)]),t("iframe",{title:s.value,src:n.value},null,8,h)]))}});export{v as default}; +import{d as u,u as p,c as d,a as t,t as o,b as g,h as l,o as f}from"./index-BoQWc9mA.js";const _={class:"integration-page"},m=["href"],h=["title","src"],v=u({__name:"IntegrationPage",props:{title:{},titleKey:{},src:{},configurable:{type:Boolean}},setup(i){const e=i,{t:r}=p(),s=l(()=>e.titleKey?r(e.titleKey):e.title??""),n=l(()=>{if(!e.configurable)return e.src;try{return JSON.parse(localStorage.getItem("ui-configs")||"{}").tensorboard_url?.trim()||e.src}catch{return e.src}});return(c,a)=>(f(),d("div",_,[t("header",null,[t("div",null,[a[0]||(a[0]=t("span",{class:"eyebrow"},"INTEGRATED SERVICE",-1)),t("h1",null,o(s.value),1)]),t("a",{href:n.value,target:"_blank",rel:"noreferrer"},o(g(r)("integration.openExternal")),9,m)]),t("iframe",{title:s.value,src:n.value},null,8,h)]))}});export{v as default}; diff --git a/frontend/dist/assets/NotFoundPage-8auRhUvD.js b/frontend/dist/assets/NotFoundPage-BQmyvMef.js similarity index 87% rename from frontend/dist/assets/NotFoundPage-8auRhUvD.js rename to frontend/dist/assets/NotFoundPage-BQmyvMef.js index 6d671469..47907c9e 100644 --- a/frontend/dist/assets/NotFoundPage-8auRhUvD.js +++ b/frontend/dist/assets/NotFoundPage-BQmyvMef.js @@ -1 +1 @@ -import{d as r,u as c,c as u,a as o,t,b as n,e as d,w as i,f as l,i as p,o as _}from"./index-BlvrX0Zy.js";const m={class:"migration-page"},x=r({__name:"NotFoundPage",setup(f){const{t:e}=c();return(k,s)=>{const a=p("RouterLink");return _(),u("div",m,[s[0]||(s[0]=o("span",{class:"eyebrow"},"404",-1)),o("h1",null,t(n(e)("notFound.title")),1),o("p",null,t(n(e)("notFound.desc")),1),d(a,{class:"secondary-action",to:"/"},{default:i(()=>[l(t(n(e)("notFound.back")),1)]),_:1})])}}});export{x as default}; +import{d as r,u as c,c as u,a as o,t,b as n,e as d,w as i,f as l,i as p,o as _}from"./index-BoQWc9mA.js";const m={class:"migration-page"},x=r({__name:"NotFoundPage",setup(f){const{t:e}=c();return(k,s)=>{const a=p("RouterLink");return _(),u("div",m,[s[0]||(s[0]=o("span",{class:"eyebrow"},"404",-1)),o("h1",null,t(n(e)("notFound.title")),1),o("p",null,t(n(e)("notFound.desc")),1),d(a,{class:"secondary-action",to:"/"},{default:i(()=>[l(t(n(e)("notFound.back")),1)]),_:1})])}}});export{x as default}; diff --git a/frontend/dist/assets/ParamsPage-BkK-W4SI.js b/frontend/dist/assets/ParamsPage-DGNkcvK9.js similarity index 95% rename from frontend/dist/assets/ParamsPage-BkK-W4SI.js rename to frontend/dist/assets/ParamsPage-DGNkcvK9.js index 8822e05e..e9362a4b 100644 --- a/frontend/dist/assets/ParamsPage-BkK-W4SI.js +++ b/frontend/dist/assets/ParamsPage-DGNkcvK9.js @@ -1 +1 @@ -import{d as t,u as o,c as r,a,t as l,b as e,f as p,o as u}from"./index-BlvrX0Zy.js";const i={class:"content-page"},m={class:"content-hero"},g={class:"content-table"},b=t({__name:"ParamsPage",setup(P){const{t:s}=o();return(c,n)=>(u(),r("article",i,[a("header",m,[n[0]||(n[0]=a("span",{class:"eyebrow"},"TRAINING REFERENCE",-1)),a("h1",null,l(e(s)("paramsPage.title")),1),a("p",null,l(e(s)("paramsPage.subtitle")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s1Title")),1),a("h3",null,l(e(s)("paramsPage.baseModel")),1),a("p",null,l(e(s)("paramsPage.baseModelDesc")),1),a("h3",null,l(e(s)("paramsPage.resolution")),1),a("p",null,l(e(s)("paramsPage.resolutionDesc")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s2Title")),1),a("div",g,[a("div",null,[n[1]||(n[1]=a("strong",null,"Epoch / Step",-1)),a("span",null,l(e(s)("paramsPage.epochDesc")),1)]),a("div",null,[n[2]||(n[2]=a("strong",null,"Batch size",-1)),a("span",null,l(e(s)("paramsPage.batchDesc")),1)]),a("div",null,[n[3]||(n[3]=a("strong",null,"Learning rate",-1)),a("span",null,l(e(s)("paramsPage.lrDesc")),1)])])]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s3Title")),1),a("p",null,[n[4]||(n[4]=a("code",null,"network_dim",-1)),p(" "+l(e(s)("paramsPage.s3a")),1)]),a("p",null,l(e(s)("paramsPage.s3b")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s4Title")),1),a("p",null,l(e(s)("paramsPage.s4a")),1)])]))}});export{b as default}; +import{d as t,u as o,c as r,a,t as l,b as e,f as p,o as u}from"./index-BoQWc9mA.js";const i={class:"content-page"},m={class:"content-hero"},g={class:"content-table"},b=t({__name:"ParamsPage",setup(P){const{t:s}=o();return(c,n)=>(u(),r("article",i,[a("header",m,[n[0]||(n[0]=a("span",{class:"eyebrow"},"TRAINING REFERENCE",-1)),a("h1",null,l(e(s)("paramsPage.title")),1),a("p",null,l(e(s)("paramsPage.subtitle")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s1Title")),1),a("h3",null,l(e(s)("paramsPage.baseModel")),1),a("p",null,l(e(s)("paramsPage.baseModelDesc")),1),a("h3",null,l(e(s)("paramsPage.resolution")),1),a("p",null,l(e(s)("paramsPage.resolutionDesc")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s2Title")),1),a("div",g,[a("div",null,[n[1]||(n[1]=a("strong",null,"Epoch / Step",-1)),a("span",null,l(e(s)("paramsPage.epochDesc")),1)]),a("div",null,[n[2]||(n[2]=a("strong",null,"Batch size",-1)),a("span",null,l(e(s)("paramsPage.batchDesc")),1)]),a("div",null,[n[3]||(n[3]=a("strong",null,"Learning rate",-1)),a("span",null,l(e(s)("paramsPage.lrDesc")),1)])])]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s3Title")),1),a("p",null,[n[4]||(n[4]=a("code",null,"network_dim",-1)),p(" "+l(e(s)("paramsPage.s3a")),1)]),a("p",null,l(e(s)("paramsPage.s3b")),1)]),a("section",null,[a("h2",null,l(e(s)("paramsPage.s4Title")),1),a("p",null,l(e(s)("paramsPage.s4a")),1)])]))}});export{b as default}; diff --git a/frontend/dist/assets/SettingsContainerPage-9zJ1w2a2.js b/frontend/dist/assets/SettingsContainerPage-CEKsAhum.js similarity index 98% rename from frontend/dist/assets/SettingsContainerPage-9zJ1w2a2.js rename to frontend/dist/assets/SettingsContainerPage-CEKsAhum.js index dc0a3c9d..181117fe 100644 --- a/frontend/dist/assets/SettingsContainerPage-9zJ1w2a2.js +++ b/frontend/dist/assets/SettingsContainerPage-CEKsAhum.js @@ -1,2 +1,2 @@ -import{d as R,u as H,c,a as e,t,b as s,e as K,w as E,F as C,r as I,i as V,o as r,s as S,y as Z,l as ee,B as J,I as te,h as z,p as w,n as se,U as ne,x as ae,V as ie,D as oe,f as T,W as le,m as G,E as re,j as P,X as U,Y as ue}from"./index-BlvrX0Zy.js";import{E as $}from"./index-DNZgQ1o0.js";import{_ as ce}from"./home-logo-Bq2pf2HD.js";import{E as M}from"./index-DILr9bpz.js";import{a as j,e as D,w as ge}from"./prefs-L1LFxgf4.js";const de={class:"content-page"},me={class:"content-hero content-hero-split"},he={class:"about-credits"},pe=["href"],be={class:"content-links"},fe={href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer"},_e={href:"https://github.com/wochenlong/lora-scripts-next/releases",target:"_blank",rel:"noreferrer"},ve={href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},ye=R({__name:"AboutPage",setup(x){const{t:n}=H(),a=[{name:"Akegarasu / lora-scripts",href:"https://github.com/Akegarasu/lora-scripts",noteKey:"about.credits.akegarasu"},{name:"kohya-ss / sd-scripts",href:"https://github.com/kohya-ss/sd-scripts",noteKey:"about.credits.kohya"},{name:"sorryhyun / anima_lora",href:"https://github.com/sorryhyun/anima_lora",noteKey:"about.credits.animaFast"},{name:"KohakuBlueleaf / LyCORIS",href:"https://github.com/KohakuBlueleaf/LyCORIS",noteKey:"about.credits.lycoris"},{name:"SmilingWolf / WD Tagger",href:"https://huggingface.co/SmilingWolf/wd-v1-4-convnextv2-tagger-v2",noteKey:"about.credits.tagger"},{name:"shigma / schemastery",href:"https://github.com/shigma/schemastery",noteKey:"about.credits.schemastery"}];return(h,u)=>{const m=V("i18n-t");return r(),c("article",de,[e("header",me,[e("div",null,[u[0]||(u[0]=e("span",{class:"eyebrow"},"ABOUT",-1)),u[1]||(u[1]=e("h1",null,"Next Trainer",-1)),e("p",null,t(s(n)("about.tagline")),1)]),u[2]||(u[2]=e("img",{class:"about-logo",src:ce,alt:"Next Trainer"},null,-1))]),e("section",null,[e("h2",null,t(s(n)("about.projectTitle")),1),K(m,{keypath:"about.projectDesc",tag:"p",scope:"global"},{schemastery:E(()=>[...u[3]||(u[3]=[e("a",{href:"https://github.com/shigma/schemastery",target:"_blank",rel:"noreferrer"},"Schemastery",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.creditsTitle")),1),e("p",null,t(s(n)("about.creditsIntro")),1),e("ul",he,[(r(),c(C,null,I(a,p=>e("li",{key:p.href},[e("a",{href:p.href,target:"_blank",rel:"noreferrer"},t(p.name),9,pe),e("span",null,t(s(n)(p.noteKey)),1)])),64))]),e("p",null,[K(m,{keypath:"about.creditsNotice",tag:"span",scope:"global"},{notice:E(()=>[...u[4]||(u[4]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),license:E(()=>[...u[5]||(u[5]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/LICENSE",target:"_blank",rel:"noreferrer"},"LICENSE",-1)])]),_:1})])]),e("section",null,[e("h2",null,t(s(n)("about.feedbackTitle")),1),K(m,{keypath:"about.feedbackDesc",tag:"p",scope:"global"},{issues:E(()=>[...u[6]||(u[6]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},"GitHub Issues",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.linksTitle")),1),e("div",be,[e("a",fe,t(s(n)("about.source")),1),e("a",_e,t(s(n)("about.releases")),1),e("a",ve,t(s(n)("about.issues")),1)])])])}}}),ke="/assets/changelog-banner.webp",q=[{version:"v2.9.2-beta.2",date:"2026-08-07",items:["修复启动时打开空白训练监控页(6008 连接被拒绝)","仅在监控就绪后打开浏览器标签;可用 /train-monitor"]},{version:"v2.9.2-beta.1",date:"2026-08-07",items:["Vue3 四栏 IA 内测线(训练 / 数据集 / 任务 / 设置)","品牌统一为 Next Trainer(内测版本号走 2.9.x)","训练引擎管理与 Fast 就绪态","开源致谢页与 lite/full 双整合包","钉死 protobuf==3.20.3(Flux/SD3)"]},{version:"v2.9.0",date:"2026-07-22",items:["Anima Fast 高分辨率 bucket 参数与训练前检查","Anima 标准模式 LoKr 无效参数清理","本地 WD 打标模型加载与 CUDA/CPU 回退改进","Windows 整合包数据目录和 junction 修复"]},{version:"v2.8.35",date:"2026-06-28",items:["修复 Windows 更新脚本路径、换行与 PowerShell 5.1 编码兼容","新增 Fix-Portable-Bats.bat"]},{version:"v2.8.3",date:"2026-06-28",items:["新增配置导出规范化 API","改善整合包 Hugging Face、ModelScope 与文件选择器路径"]},{version:"v2.8.2",date:"2026-06-27",items:["修复 SDXL 训练路由与离线 tokenizer","默认 WD 打标模型开箱即用","修复预览图和训练配置导入"]}],$e={class:"content-page"},we={class:"content-hero content-hero-split"},Se=["alt"],Ee={class:"release-list"},Ce={class:"secondary-action",href:"https://github.com/wochenlong/lora-scripts-next/blob/master/CHANGELOG.md",target:"_blank",rel:"noreferrer"},xe=R({__name:"ChangelogPage",setup(x){const{t:n}=H();return(a,h)=>{const u=V("i18n-t");return r(),c("article",$e,[e("header",we,[e("div",null,[h[1]||(h[1]=e("span",{class:"eyebrow"},"RELEASE NOTES",-1)),e("h1",null,t(s(n)("changelog.title")),1),K(u,{keypath:"changelog.subtitle",tag:"p",scope:"global"},{file:E(()=>[...h[0]||(h[0]=[e("code",null,"CHANGELOG.md",-1)])]),_:1})]),e("img",{src:ke,alt:s(n)("changelog.bannerAlt")},null,8,Se)]),e("section",Ee,[(r(!0),c(C,null,I(s(q),m=>(r(),c("article",{key:m.version},[e("header",null,[e("h2",null,t(m.version),1),e("time",null,t(m.date),1)]),e("ul",null,[(r(!0),c(C,null,I(m.items,p=>(r(),c("li",{key:p},t(p),1))),128))])]))),128))]),e("a",Ce,t(s(n)("changelog.full")),1)])}}}),Le=[{id:"kohya",kind:"builtin",nameKey:"settings.engines.catalog.kohya.name",summaryKey:"settings.engines.catalog.kohya.summary",managesRuntime:!1},{id:"anima-fast",kind:"optional",nameKey:"settings.engines.catalog.anima-fast.name",summaryKey:"settings.engines.catalog.anima-fast.summary",sizeHintKey:"settings.engines.catalog.anima-fast.sizeHint",requiresGpu:!0,managesRuntime:!0},{id:"musubi",kind:"planned",nameKey:"settings.engines.catalog.musubi.name",summaryKey:"settings.engines.catalog.musubi.summary",managesRuntime:!1}],Ie={class:"engines-settings"},Ke={class:"settings-card"},Ne={class:"engines-lead"},Te={class:"engines-policy"},Ae={class:"engines-toggle"},Oe=["data-engine","data-state"],Pe={class:"engine-card-header"},De=["data-state"],Re={key:0,class:"engine-meta"},He={key:0},Be={key:1},Fe={key:2},Ge={key:3},Ue={key:1,class:"engine-path"},ze={key:2,class:"engine-card-actions"},Ve=["disabled"],We=["disabled","title"],Me=["disabled"],je=["disabled"],Je={key:3,class:"engine-console"},qe={class:"install-progress"},Ye=R({__name:"EnginesSettingsPage",setup(x){const{t:n}=H(),a=S(null),h=S({}),u=S([]),m=S(0),p=S(""),N=S(j().rememberLast);let y,v,L;const B=z(()=>Le.map(o=>({engine:o,status:h.value[o.id]||A(o)})));function A(o){return o.kind==="builtin"?{id:o.id,state:"ready",featureEnabled:!0}:o.kind==="planned"?{id:o.id,state:"coming_soon",featureEnabled:!1}:{id:o.id,state:"unknown",featureEnabled:!0}}function F(o){const l=`settings.engines.state.${o}`,i=n(l);return i===l?o:i}function O(){v?.close(),L?.close(),v=void 0,L=void 0}function d(){y!==void 0&&(window.clearInterval(y),y=void 0)}function b(o,l,i){O(),v=new EventSource(l||`/api/plugins/anima-lora/install/log/stream/${o}`),v.onmessage=_=>{try{const f=JSON.parse(_.data);f.text&&u.value.push(f.text),f.done&&v?.close()}catch{u.value.push(_.data)}},L=new EventSource(i||`/api/plugins/anima-lora/install/progress/stream/${o}`),L.onmessage=_=>{try{const f=JSON.parse(_.data);f.type==="progress"&&(m.value=Number(f.percent||0),p.value=f.message||f.phase||""),(f.done||f.type==="done")&&L?.close()}catch{}}}async function k(o=!0){try{const l=await D.list(),i={};for(const W of l)i[W.id]=W;h.value=i;const _=i["anima-fast"],f=_&&["installing","auditing"].includes(_.state);f&&_.facts?.task_id&&!v&&b(_.facts.task_id),f||d()}catch(l){o&&$.error(l instanceof Error?l.message:n("settings.engines.msg.statusFail"))}}async function g(o=!1){try{await M.confirm(n(o?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),n(o?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),a.value="anima-fast",u.value=[],m.value=0,p.value="";const l=o?await D.repair("anima-fast"):await D.install("anima-fast");if(l.alreadyReady){l.status&&(h.value={...h.value,"anima-fast":l.status}),$.success(n("settings.engines.msg.ready"));return}l.taskId&&(b(l.taskId,l.logStream,l.progressStream),y||(y=window.setInterval(()=>k(!1),2e3))),await k(!1),$.success(n("settings.engines.msg.started"))}catch(l){l!=="cancel"&&l!=="close"&&$.error(l instanceof Error?l.message:n("settings.engines.msg.fail"))}finally{a.value=null}}async function X(){try{await M.confirm(n("settings.engines.confirm.uninstall"),n("settings.engines.actions.uninstall"),{type:"warning"}),a.value="anima-fast";const o=await D.uninstall("anima-fast");h.value={...h.value,"anima-fast":o},u.value=[],m.value=0,$.success(n("settings.engines.msg.uninstalled"))}catch(o){o!=="cancel"&&o!=="close"&&$.error(o instanceof Error?o.message:n("settings.engines.msg.fail"))}finally{a.value=null}}function Q(){const o=j();o.rememberLast=N.value,ge(o),$.success(n("settings.engines.msg.prefsSaved"))}return Z(async()=>{await k();const o=h.value["anima-fast"];o&&["installing","auditing"].includes(o.state)&&(y=window.setInterval(()=>k(!1),2e3))}),ee(()=>{d(),O()}),(o,l)=>(r(),c("div",Ie,[e("section",Ke,[e("h2",null,t(s(n)("settings.engines.title")),1),e("p",Ne,t(s(n)("settings.engines.lead")),1),e("div",Te,[e("strong",null,t(s(n)("settings.engines.defaultPolicy.title")),1),e("p",null,t(s(n)("settings.engines.defaultPolicy.body")),1)]),e("label",Ae,[J(e("input",{"onUpdate:modelValue":l[0]||(l[0]=i=>N.value=i),type:"checkbox",onChange:Q},null,544),[[te,N.value]]),e("span",null,[e("b",null,t(s(n)("settings.engines.rememberLast.label")),1),e("small",null,t(s(n)("settings.engines.rememberLast.hint")),1)])])]),(r(!0),c(C,null,I(B.value,i=>(r(),c("section",{key:i.engine.id,class:"settings-card engine-card","data-engine":i.engine.id,"data-state":i.status.state},[e("header",Pe,[e("div",null,[e("h2",null,t(s(n)(i.engine.nameKey)),1),e("p",null,t(s(n)(i.engine.summaryKey)),1)]),e("span",{class:"engine-state-pill","data-state":i.status.state},t(F(i.status.state)),9,De)]),i.engine.sizeHintKey||i.engine.requiresGpu||i.engine.kind==="builtin"?(r(),c("ul",Re,[i.engine.kind==="builtin"?(r(),c("li",He,t(s(n)("settings.engines.meta.builtin")),1)):w("",!0),i.engine.sizeHintKey?(r(),c("li",Be,t(s(n)(i.engine.sizeHintKey)),1)):w("",!0),i.engine.requiresGpu?(r(),c("li",Fe,t(s(n)("settings.engines.meta.gpu")),1)):w("",!0),i.engine.kind==="planned"?(r(),c("li",Ge,t(s(n)("settings.engines.meta.planned")),1)):w("",!0)])):w("",!0),i.status.runtime?.animaRoot?(r(),c("p",Ue,[e("span",null,t(s(n)("settings.engines.meta.path")),1),e("code",null,t(i.status.runtime.animaRoot),1)])):w("",!0),i.engine.id==="anima-fast"?(r(),c("div",ze,[e("button",{class:"primary-action",disabled:a.value==="anima-fast"||["installing","auditing","ready"].includes(i.status.state)||!i.status.featureEnabled,onClick:l[1]||(l[1]=_=>g(!1))},t(["installing","auditing"].includes(i.status.state)?s(n)("settings.engines.actions.installing"):s(n)("settings.engines.actions.install")),9,Ve),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||!["broken","installed_unverified"].includes(i.status.state),title:s(n)("settings.engines.actions.reinstallHint"),onClick:l[2]||(l[2]=_=>g(!0))},t(s(n)("settings.engines.actions.reinstall")),9,We),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||["installing","auditing","not_installed","coming_soon"].includes(i.status.state),onClick:X},t(s(n)("settings.engines.actions.uninstall")),9,Me),e("button",{class:"ghost-button",disabled:a.value==="anima-fast",onClick:l[3]||(l[3]=_=>k())},t(s(n)("settings.engines.actions.refresh")),9,je)])):w("",!0),i.engine.id==="anima-fast"&&(u.value.length||["installing","auditing"].includes(i.status.state))?(r(),c("div",Je,[e("header",null,[e("span",null,t(p.value||s(n)("settings.engines.console.idle")),1),e("b",null,t(m.value)+"%",1)]),e("div",qe,[e("i",{style:se({width:`${m.value}%`})},null,4)]),e("pre",null,t(u.value.length?u.value.join(` +import{d as R,u as H,c,a as e,t,b as s,e as K,w as E,F as C,r as I,i as V,o as r,s as S,y as Z,l as ee,B as J,I as te,h as z,p as w,n as se,U as ne,x as ae,V as ie,D as oe,f as T,W as le,m as G,E as re,j as P,X as U,Y as ue}from"./index-BoQWc9mA.js";import{E as $}from"./index-BC7FDA30.js";import{_ as ce}from"./home-logo-Bq2pf2HD.js";import{E as M}from"./index-Bff4F9zQ.js";import{b as j,e as D,w as ge}from"./prefs-hyqYnVPm.js";const de={class:"content-page"},me={class:"content-hero content-hero-split"},he={class:"about-credits"},pe=["href"],be={class:"content-links"},fe={href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer"},_e={href:"https://github.com/wochenlong/lora-scripts-next/releases",target:"_blank",rel:"noreferrer"},ve={href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},ye=R({__name:"AboutPage",setup(x){const{t:n}=H(),a=[{name:"Akegarasu / lora-scripts",href:"https://github.com/Akegarasu/lora-scripts",noteKey:"about.credits.akegarasu"},{name:"kohya-ss / sd-scripts",href:"https://github.com/kohya-ss/sd-scripts",noteKey:"about.credits.kohya"},{name:"sorryhyun / anima_lora",href:"https://github.com/sorryhyun/anima_lora",noteKey:"about.credits.animaFast"},{name:"KohakuBlueleaf / LyCORIS",href:"https://github.com/KohakuBlueleaf/LyCORIS",noteKey:"about.credits.lycoris"},{name:"SmilingWolf / WD Tagger",href:"https://huggingface.co/SmilingWolf/wd-v1-4-convnextv2-tagger-v2",noteKey:"about.credits.tagger"},{name:"shigma / schemastery",href:"https://github.com/shigma/schemastery",noteKey:"about.credits.schemastery"}];return(h,u)=>{const m=V("i18n-t");return r(),c("article",de,[e("header",me,[e("div",null,[u[0]||(u[0]=e("span",{class:"eyebrow"},"ABOUT",-1)),u[1]||(u[1]=e("h1",null,"Next Trainer",-1)),e("p",null,t(s(n)("about.tagline")),1)]),u[2]||(u[2]=e("img",{class:"about-logo",src:ce,alt:"Next Trainer"},null,-1))]),e("section",null,[e("h2",null,t(s(n)("about.projectTitle")),1),K(m,{keypath:"about.projectDesc",tag:"p",scope:"global"},{schemastery:E(()=>[...u[3]||(u[3]=[e("a",{href:"https://github.com/shigma/schemastery",target:"_blank",rel:"noreferrer"},"Schemastery",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.creditsTitle")),1),e("p",null,t(s(n)("about.creditsIntro")),1),e("ul",he,[(r(),c(C,null,I(a,p=>e("li",{key:p.href},[e("a",{href:p.href,target:"_blank",rel:"noreferrer"},t(p.name),9,pe),e("span",null,t(s(n)(p.noteKey)),1)])),64))]),e("p",null,[K(m,{keypath:"about.creditsNotice",tag:"span",scope:"global"},{notice:E(()=>[...u[4]||(u[4]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),license:E(()=>[...u[5]||(u[5]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/LICENSE",target:"_blank",rel:"noreferrer"},"LICENSE",-1)])]),_:1})])]),e("section",null,[e("h2",null,t(s(n)("about.feedbackTitle")),1),K(m,{keypath:"about.feedbackDesc",tag:"p",scope:"global"},{issues:E(()=>[...u[6]||(u[6]=[e("a",{href:"https://github.com/wochenlong/lora-scripts-next/issues",target:"_blank",rel:"noreferrer"},"GitHub Issues",-1)])]),_:1})]),e("section",null,[e("h2",null,t(s(n)("about.linksTitle")),1),e("div",be,[e("a",fe,t(s(n)("about.source")),1),e("a",_e,t(s(n)("about.releases")),1),e("a",ve,t(s(n)("about.issues")),1)])])])}}}),ke="/assets/changelog-banner.webp",q=[{version:"v2.9.2-beta.2",date:"2026-08-07",items:["修复启动时打开空白训练监控页(6008 连接被拒绝)","仅在监控就绪后打开浏览器标签;可用 /train-monitor"]},{version:"v2.9.2-beta.1",date:"2026-08-07",items:["Vue3 四栏 IA 内测线(训练 / 数据集 / 任务 / 设置)","品牌统一为 Next Trainer(内测版本号走 2.9.x)","训练引擎管理与 Fast 就绪态","开源致谢页与 lite/full 双整合包","钉死 protobuf==3.20.3(Flux/SD3)"]},{version:"v2.9.0",date:"2026-07-22",items:["Anima Fast 高分辨率 bucket 参数与训练前检查","Anima 标准模式 LoKr 无效参数清理","本地 WD 打标模型加载与 CUDA/CPU 回退改进","Windows 整合包数据目录和 junction 修复"]},{version:"v2.8.35",date:"2026-06-28",items:["修复 Windows 更新脚本路径、换行与 PowerShell 5.1 编码兼容","新增 Fix-Portable-Bats.bat"]},{version:"v2.8.3",date:"2026-06-28",items:["新增配置导出规范化 API","改善整合包 Hugging Face、ModelScope 与文件选择器路径"]},{version:"v2.8.2",date:"2026-06-27",items:["修复 SDXL 训练路由与离线 tokenizer","默认 WD 打标模型开箱即用","修复预览图和训练配置导入"]}],$e={class:"content-page"},we={class:"content-hero content-hero-split"},Se=["alt"],Ee={class:"release-list"},Ce={class:"secondary-action",href:"https://github.com/wochenlong/lora-scripts-next/blob/master/CHANGELOG.md",target:"_blank",rel:"noreferrer"},xe=R({__name:"ChangelogPage",setup(x){const{t:n}=H();return(a,h)=>{const u=V("i18n-t");return r(),c("article",$e,[e("header",we,[e("div",null,[h[1]||(h[1]=e("span",{class:"eyebrow"},"RELEASE NOTES",-1)),e("h1",null,t(s(n)("changelog.title")),1),K(u,{keypath:"changelog.subtitle",tag:"p",scope:"global"},{file:E(()=>[...h[0]||(h[0]=[e("code",null,"CHANGELOG.md",-1)])]),_:1})]),e("img",{src:ke,alt:s(n)("changelog.bannerAlt")},null,8,Se)]),e("section",Ee,[(r(!0),c(C,null,I(s(q),m=>(r(),c("article",{key:m.version},[e("header",null,[e("h2",null,t(m.version),1),e("time",null,t(m.date),1)]),e("ul",null,[(r(!0),c(C,null,I(m.items,p=>(r(),c("li",{key:p},t(p),1))),128))])]))),128))]),e("a",Ce,t(s(n)("changelog.full")),1)])}}}),Le=[{id:"kohya",kind:"builtin",nameKey:"settings.engines.catalog.kohya.name",summaryKey:"settings.engines.catalog.kohya.summary",managesRuntime:!1},{id:"anima-fast",kind:"optional",nameKey:"settings.engines.catalog.anima-fast.name",summaryKey:"settings.engines.catalog.anima-fast.summary",sizeHintKey:"settings.engines.catalog.anima-fast.sizeHint",requiresGpu:!0,managesRuntime:!0},{id:"musubi",kind:"planned",nameKey:"settings.engines.catalog.musubi.name",summaryKey:"settings.engines.catalog.musubi.summary",managesRuntime:!1}],Ie={class:"engines-settings"},Ke={class:"settings-card"},Ne={class:"engines-lead"},Te={class:"engines-policy"},Ae={class:"engines-toggle"},Oe=["data-engine","data-state"],Pe={class:"engine-card-header"},De=["data-state"],Re={key:0,class:"engine-meta"},He={key:0},Be={key:1},Fe={key:2},Ge={key:3},Ue={key:1,class:"engine-path"},ze={key:2,class:"engine-card-actions"},Ve=["disabled"],We=["disabled","title"],Me=["disabled"],je=["disabled"],Je={key:3,class:"engine-console"},qe={class:"install-progress"},Ye=R({__name:"EnginesSettingsPage",setup(x){const{t:n}=H(),a=S(null),h=S({}),u=S([]),m=S(0),p=S(""),N=S(j().rememberLast);let y,v,L;const B=z(()=>Le.map(o=>({engine:o,status:h.value[o.id]||A(o)})));function A(o){return o.kind==="builtin"?{id:o.id,state:"ready",featureEnabled:!0}:o.kind==="planned"?{id:o.id,state:"coming_soon",featureEnabled:!1}:{id:o.id,state:"unknown",featureEnabled:!0}}function F(o){const l=`settings.engines.state.${o}`,i=n(l);return i===l?o:i}function O(){v?.close(),L?.close(),v=void 0,L=void 0}function d(){y!==void 0&&(window.clearInterval(y),y=void 0)}function b(o,l,i){O(),v=new EventSource(l||`/api/plugins/anima-lora/install/log/stream/${o}`),v.onmessage=_=>{try{const f=JSON.parse(_.data);f.text&&u.value.push(f.text),f.done&&v?.close()}catch{u.value.push(_.data)}},L=new EventSource(i||`/api/plugins/anima-lora/install/progress/stream/${o}`),L.onmessage=_=>{try{const f=JSON.parse(_.data);f.type==="progress"&&(m.value=Number(f.percent||0),p.value=f.message||f.phase||""),(f.done||f.type==="done")&&L?.close()}catch{}}}async function k(o=!0){try{const l=await D.list(),i={};for(const W of l)i[W.id]=W;h.value=i;const _=i["anima-fast"],f=_&&["installing","auditing"].includes(_.state);f&&_.facts?.task_id&&!v&&b(_.facts.task_id),f||d()}catch(l){o&&$.error(l instanceof Error?l.message:n("settings.engines.msg.statusFail"))}}async function g(o=!1){try{await M.confirm(n(o?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),n(o?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),a.value="anima-fast",u.value=[],m.value=0,p.value="";const l=o?await D.repair("anima-fast"):await D.install("anima-fast");if(l.alreadyReady){l.status&&(h.value={...h.value,"anima-fast":l.status}),$.success(n("settings.engines.msg.ready"));return}l.taskId&&(b(l.taskId,l.logStream,l.progressStream),y||(y=window.setInterval(()=>k(!1),2e3))),await k(!1),$.success(n("settings.engines.msg.started"))}catch(l){l!=="cancel"&&l!=="close"&&$.error(l instanceof Error?l.message:n("settings.engines.msg.fail"))}finally{a.value=null}}async function X(){try{await M.confirm(n("settings.engines.confirm.uninstall"),n("settings.engines.actions.uninstall"),{type:"warning"}),a.value="anima-fast";const o=await D.uninstall("anima-fast");h.value={...h.value,"anima-fast":o},u.value=[],m.value=0,$.success(n("settings.engines.msg.uninstalled"))}catch(o){o!=="cancel"&&o!=="close"&&$.error(o instanceof Error?o.message:n("settings.engines.msg.fail"))}finally{a.value=null}}function Q(){const o=j();o.rememberLast=N.value,ge(o),$.success(n("settings.engines.msg.prefsSaved"))}return Z(async()=>{await k();const o=h.value["anima-fast"];o&&["installing","auditing"].includes(o.state)&&(y=window.setInterval(()=>k(!1),2e3))}),ee(()=>{d(),O()}),(o,l)=>(r(),c("div",Ie,[e("section",Ke,[e("h2",null,t(s(n)("settings.engines.title")),1),e("p",Ne,t(s(n)("settings.engines.lead")),1),e("div",Te,[e("strong",null,t(s(n)("settings.engines.defaultPolicy.title")),1),e("p",null,t(s(n)("settings.engines.defaultPolicy.body")),1)]),e("label",Ae,[J(e("input",{"onUpdate:modelValue":l[0]||(l[0]=i=>N.value=i),type:"checkbox",onChange:Q},null,544),[[te,N.value]]),e("span",null,[e("b",null,t(s(n)("settings.engines.rememberLast.label")),1),e("small",null,t(s(n)("settings.engines.rememberLast.hint")),1)])])]),(r(!0),c(C,null,I(B.value,i=>(r(),c("section",{key:i.engine.id,class:"settings-card engine-card","data-engine":i.engine.id,"data-state":i.status.state},[e("header",Pe,[e("div",null,[e("h2",null,t(s(n)(i.engine.nameKey)),1),e("p",null,t(s(n)(i.engine.summaryKey)),1)]),e("span",{class:"engine-state-pill","data-state":i.status.state},t(F(i.status.state)),9,De)]),i.engine.sizeHintKey||i.engine.requiresGpu||i.engine.kind==="builtin"?(r(),c("ul",Re,[i.engine.kind==="builtin"?(r(),c("li",He,t(s(n)("settings.engines.meta.builtin")),1)):w("",!0),i.engine.sizeHintKey?(r(),c("li",Be,t(s(n)(i.engine.sizeHintKey)),1)):w("",!0),i.engine.requiresGpu?(r(),c("li",Fe,t(s(n)("settings.engines.meta.gpu")),1)):w("",!0),i.engine.kind==="planned"?(r(),c("li",Ge,t(s(n)("settings.engines.meta.planned")),1)):w("",!0)])):w("",!0),i.status.runtime?.animaRoot?(r(),c("p",Ue,[e("span",null,t(s(n)("settings.engines.meta.path")),1),e("code",null,t(i.status.runtime.animaRoot),1)])):w("",!0),i.engine.id==="anima-fast"?(r(),c("div",ze,[e("button",{class:"primary-action",disabled:a.value==="anima-fast"||["installing","auditing","ready"].includes(i.status.state)||!i.status.featureEnabled,onClick:l[1]||(l[1]=_=>g(!1))},t(["installing","auditing"].includes(i.status.state)?s(n)("settings.engines.actions.installing"):s(n)("settings.engines.actions.install")),9,Ve),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||!["broken","installed_unverified"].includes(i.status.state),title:s(n)("settings.engines.actions.reinstallHint"),onClick:l[2]||(l[2]=_=>g(!0))},t(s(n)("settings.engines.actions.reinstall")),9,We),e("button",{class:"secondary-action",disabled:a.value==="anima-fast"||["installing","auditing","not_installed","coming_soon"].includes(i.status.state),onClick:X},t(s(n)("settings.engines.actions.uninstall")),9,Me),e("button",{class:"ghost-button",disabled:a.value==="anima-fast",onClick:l[3]||(l[3]=_=>k())},t(s(n)("settings.engines.actions.refresh")),9,je)])):w("",!0),i.engine.id==="anima-fast"&&(u.value.length||["installing","auditing"].includes(i.status.state))?(r(),c("div",Je,[e("header",null,[e("span",null,t(p.value||s(n)("settings.engines.console.idle")),1),e("b",null,t(m.value)+"%",1)]),e("div",qe,[e("i",{style:se({width:`${m.value}%`})},null,4)]),e("pre",null,t(u.value.length?u.value.join(` `):s(n)("settings.engines.console.waiting")),1)])):w("",!0)],8,Oe))),128))]))}}),Y="vuepress-color-scheme";function Xe(){if(typeof document<"u"&&document.documentElement.classList.contains("dark"))return"dark";try{return localStorage.getItem(Y)==="dark"?"dark":"light"}catch{return"light"}}function Qe(x){document.documentElement.classList.toggle("dark",x==="dark");try{localStorage.setItem(Y,x)}catch{}}const Ze={class:"settings-page"},et={class:"settings-page-header"},tt={class:"settings-body"},st=["aria-label"],nt={class:"settings-content"},at={class:"settings-card"},it=["value"],ot=["value"],lt={class:"settings-field"},rt={class:"settings-field-label"},ut=["aria-label"],ct={for:"tensorboard-url"},gt=["placeholder"],dt={class:"form-actions"},mt={class:"settings-card"},ht={class:"settings-preview"},pt={class:"settings-preview-grid"},bt={class:"settings-preview-col"},ft={class:"settings-about-line"},_t={class:"version-badge"},vt={class:"settings-about-desc"},yt={class:"settings-preview-col"},kt={class:"settings-release-list"},xt=R({__name:"SettingsContainerPage",props:{tab:{}},setup(x){const n=x,{t:a}=H(),h=ne(),{version:u}=ae(h),m=S(ie()),p=S(Xe()),N=z(()=>q.slice(0,3));function y(){try{const d=JSON.parse(localStorage.getItem(U)||"{}");return d&&typeof d=="object"?d:{}}catch{return{}}}const v=oe({tensorboard_url:String(y().tensorboard_url??"")}),L=z(()=>[{key:"ui",to:"/settings/ui",label:a("settings.nav.ui")},{key:"engines",to:"/settings/engines",label:a("settings.nav.engines")},{key:"about",to:"/settings/about",label:a("settings.nav.about")},{key:"changelog",to:"/settings/changelog",label:a("settings.nav.changelog")}]);function B(d){m.value=d,ue(d)}function A(d){p.value=d,Qe(d)}function F(){const d=y();d.tensorboard_url=v.tensorboard_url.trim(),localStorage.setItem(U,JSON.stringify(d)),$.success(a("settings.ui.saved"))}function O(){v.tensorboard_url="";const d=y();delete d.tensorboard_url,localStorage.setItem(U,JSON.stringify(d)),$.success(a("settings.ui.resetDone"))}return(d,b)=>{const k=V("RouterLink");return r(),c("div",Ze,[e("header",et,[e("h1",null,t(s(a)("settings.title")),1),e("p",null,t(s(a)("settings.subtitle")),1)]),e("div",tt,[e("nav",{class:"settings-nav","aria-label":s(a)("settings.navAria")},[(r(!0),c(C,null,I(L.value,g=>(r(),P(k,{key:g.key,to:g.to,class:G(["settings-nav-link",{active:n.tab===g.key}])},{default:E(()=>[T(t(g.label),1)]),_:2},1032,["to","class"]))),128))],8,st),e("main",nt,[n.tab==="ui"?(r(),c(C,{key:0},[e("section",at,[e("h2",null,t(s(a)("settings.nav.ui")),1),e("label",null,[T(t(s(a)("settings.ui.language"))+" ",1),e("select",{value:m.value,onChange:b[0]||(b[0]=g=>B(g.target.value))},[(r(!0),c(C,null,I(s(le),g=>(r(),c("option",{key:g.value,value:g.value},t(g.label),9,ot))),128))],40,it)]),e("div",lt,[e("span",rt,t(s(a)("settings.ui.theme")),1),e("div",{class:"segmented theme-switch",role:"group","aria-label":s(a)("settings.ui.theme")},[e("button",{class:G({active:p.value==="light"}),onClick:b[1]||(b[1]=g=>A("light"))},t(s(a)("settings.ui.themeLight")),3),e("button",{class:G({active:p.value==="dark"}),onClick:b[2]||(b[2]=g=>A("dark"))},t(s(a)("settings.ui.themeDark")),3)],8,ut)]),e("label",ct,t(s(a)("settings.ui.tensorboardUrl")),1),J(e("input",{id:"tensorboard-url","onUpdate:modelValue":b[3]||(b[3]=g=>v.tensorboard_url=g),placeholder:s(a)("settings.ui.tensorboardPlaceholder")},null,8,gt),[[re,v.tensorboard_url]]),e("small",null,t(s(a)("settings.ui.tensorboardHint")),1),e("div",dt,[e("button",{class:"primary-action",onClick:F},t(s(a)("settings.ui.save")),1),e("button",{class:"secondary-action",onClick:O},t(s(a)("settings.ui.reset")),1)])]),e("section",mt,[e("h2",null,t(s(a)("settings.tools.title")),1),e("small",null,t(s(a)("settings.tools.note")),1)]),e("section",ht,[e("header",null,t(s(a)("settings.preview")),1),e("div",pt,[e("div",bt,[e("h3",null,t(s(a)("settings.nav.about")),1),e("p",ft,[e("strong",null,t(s(a)("app.brand")),1),b[4]||(b[4]=T()),e("span",_t,t(s(u)?`v${s(u)}`:"dev"),1)]),e("p",vt,t(s(a)("settings.aboutDesc")),1),K(k,{class:"settings-more-link",to:"/settings/about"},{default:E(()=>[T(t(s(a)("settings.nav.about"))+" →",1)]),_:1})]),e("div",yt,[e("h3",null,t(s(a)("settings.nav.changelog")),1),e("ul",kt,[(r(!0),c(C,null,I(N.value,g=>(r(),c("li",{key:g.version},[e("time",null,t(g.date),1),e("strong",null,t(g.version),1),e("span",null,t(g.items[0]),1)]))),128))]),K(k,{class:"settings-more-link",to:"/settings/changelog"},{default:E(()=>[T(t(s(a)("settings.moreChangelog")),1)]),_:1})])])])],64)):n.tab==="engines"?(r(),P(Ye,{key:1})):n.tab==="about"?(r(),P(ye,{key:2})):(r(),P(xe,{key:3}))])])])}}});export{xt as default}; diff --git a/frontend/dist/assets/TasksPage-CeWYr9Xg.js b/frontend/dist/assets/TasksPage-xwxx8Gct.js similarity index 98% rename from frontend/dist/assets/TasksPage-CeWYr9Xg.js rename to frontend/dist/assets/TasksPage-xwxx8Gct.js index 25d42dff..ea1da841 100644 --- a/frontend/dist/assets/TasksPage-CeWYr9Xg.js +++ b/frontend/dist/assets/TasksPage-xwxx8Gct.js @@ -1,2 +1,2 @@ -import{E as Z}from"./index-DNZgQ1o0.js";import{E as ut}from"./index-DILr9bpz.js";import{d as lt,c as i,a as t,t as s,F as tt,r as et,h as E,o as n,n as it,f as O,u as rt,k as Q,l as ct,m as B,b as l,p as M,q as J,s as T,v as dt,x as vt,y as ht,e as W,w as ot,z as pt,j as kt,i as nt}from"./index-BlvrX0Zy.js";import{t as mt,a as st,u as _t}from"./tasks-CTZb2r1_.js";const ft={class:"loss-chart"},gt=["viewBox"],bt=["x1","y1","x2","y2"],yt=["x1","y1","x2","y2"],wt=["y"],xt=["y"],Et=["x","y"],Tt=["x","y"],$t=["d","stroke"],It={class:"loss-legend"},K=600,A=170,Nt=lt({__name:"LossChart",props:{series:{}},setup(U){const b=U,o={top:14,right:14,bottom:24,left:52},y=E(()=>{const p=b.series.flatMap(d=>d.points);if(!p.length)return{minX:0,maxX:1,minY:0,maxY:1};const k=Math.min(...p.map(d=>d.step)),v=Math.max(...p.map(d=>d.step)),_=Math.min(...p.map(d=>d.value)),h=Math.max(...p.map(d=>d.value));return{minX:k,maxX:v===k?k+1:v,minY:_,maxY:h===_?_+1:h}});function w(p){const{minX:k,maxX:v,minY:_,maxY:h}=y.value;return p.map((d,S)=>{const I=o.left+(d.step-k)/(v-k)*(K-o.left-o.right),R=o.top+(1-(d.value-_)/(h-_))*(A-o.top-o.bottom);return`${S===0?"M":"L"}${I.toFixed(1)},${R.toFixed(1)}`}).join(" ")}function f(p){const k=p.points[p.points.length-1];return k?k.value.toPrecision(4):"-"}function a(p){return Math.abs(p)<.01?p.toExponential(1):String(Number(p.toPrecision(3)))}return(p,k)=>(n(),i("div",ft,[(n(),i("svg",{viewBox:`0 0 ${K} ${A}`,role:"img"},[t("line",{x1:o.left,y1:o.top,x2:o.left,y2:A-o.bottom,class:"axis"},null,8,bt),t("line",{x1:o.left,y1:A-o.bottom,x2:K-o.right,y2:A-o.bottom,class:"axis"},null,8,yt),t("text",{x:4,y:o.top+8,class:"tick"},s(a(y.value.maxY)),9,wt),t("text",{x:4,y:A-o.bottom,class:"tick"},s(a(y.value.minY)),9,xt),t("text",{x:o.left,y:A-6,class:"tick"},s(y.value.minX),9,Et),t("text",{x:K-o.right,y:A-6,class:"tick","text-anchor":"end"},s(y.value.maxX),9,Tt),(n(!0),i(tt,null,et(U.series,v=>(n(),i("path",{key:v.name,d:w(v.points),stroke:v.color,class:"line"},null,8,$t))),128))],8,gt)),t("div",It,[(n(!0),i(tt,null,et(U.series,v=>(n(),i("span",{key:v.name},[t("i",{style:it({background:v.color})},null,4),O(s(v.name)+" ",1),t("b",null,s(f(v)),1)]))),128))])]))}}),Rt={class:"log-title"},Ct=["title"],Lt={class:"log-toggle"},At={key:0,class:"log-body"},St={class:"log-toolbar"},Dt=["disabled"],Bt=["disabled"],Mt=["disabled"],Ut={class:"log-count"},jt={key:0,class:"log-hint"},Pt={key:1,class:"log-hint"},Ot=4e3,Ht=2e3,Ft=lt({__name:"TaskLogPanel",props:{taskId:{},status:{}},setup(U){const b=U,{t:o}=rt(),y=/\berror\b|\btraceback\b|out of memory|\boom\b/i,w=T(!1),f=T([]),a=T(!1),p=T(!1),k=T(!0),v=T();let _,h,d;const S=E(()=>b.status==="FAILED"||a.value),I=E(()=>f.value.join(` +import{E as Z}from"./index-BC7FDA30.js";import{E as ut}from"./index-Bff4F9zQ.js";import{d as lt,c as i,a as t,t as s,F as tt,r as et,h as E,o as n,n as it,f as O,u as rt,k as Q,l as ct,m as B,b as l,p as M,q as J,s as T,v as dt,x as vt,y as ht,e as W,w as ot,z as pt,j as kt,i as nt}from"./index-BoQWc9mA.js";import{t as mt,a as st,u as _t}from"./tasks-E6KkxTMs.js";const ft={class:"loss-chart"},gt=["viewBox"],bt=["x1","y1","x2","y2"],yt=["x1","y1","x2","y2"],wt=["y"],xt=["y"],Et=["x","y"],Tt=["x","y"],$t=["d","stroke"],It={class:"loss-legend"},K=600,A=170,Nt=lt({__name:"LossChart",props:{series:{}},setup(U){const b=U,o={top:14,right:14,bottom:24,left:52},y=E(()=>{const p=b.series.flatMap(d=>d.points);if(!p.length)return{minX:0,maxX:1,minY:0,maxY:1};const k=Math.min(...p.map(d=>d.step)),v=Math.max(...p.map(d=>d.step)),_=Math.min(...p.map(d=>d.value)),h=Math.max(...p.map(d=>d.value));return{minX:k,maxX:v===k?k+1:v,minY:_,maxY:h===_?_+1:h}});function w(p){const{minX:k,maxX:v,minY:_,maxY:h}=y.value;return p.map((d,S)=>{const I=o.left+(d.step-k)/(v-k)*(K-o.left-o.right),R=o.top+(1-(d.value-_)/(h-_))*(A-o.top-o.bottom);return`${S===0?"M":"L"}${I.toFixed(1)},${R.toFixed(1)}`}).join(" ")}function f(p){const k=p.points[p.points.length-1];return k?k.value.toPrecision(4):"-"}function a(p){return Math.abs(p)<.01?p.toExponential(1):String(Number(p.toPrecision(3)))}return(p,k)=>(n(),i("div",ft,[(n(),i("svg",{viewBox:`0 0 ${K} ${A}`,role:"img"},[t("line",{x1:o.left,y1:o.top,x2:o.left,y2:A-o.bottom,class:"axis"},null,8,bt),t("line",{x1:o.left,y1:A-o.bottom,x2:K-o.right,y2:A-o.bottom,class:"axis"},null,8,yt),t("text",{x:4,y:o.top+8,class:"tick"},s(a(y.value.maxY)),9,wt),t("text",{x:4,y:A-o.bottom,class:"tick"},s(a(y.value.minY)),9,xt),t("text",{x:o.left,y:A-6,class:"tick"},s(y.value.minX),9,Et),t("text",{x:K-o.right,y:A-6,class:"tick","text-anchor":"end"},s(y.value.maxX),9,Tt),(n(!0),i(tt,null,et(U.series,v=>(n(),i("path",{key:v.name,d:w(v.points),stroke:v.color,class:"line"},null,8,$t))),128))],8,gt)),t("div",It,[(n(!0),i(tt,null,et(U.series,v=>(n(),i("span",{key:v.name},[t("i",{style:it({background:v.color})},null,4),O(s(v.name)+" ",1),t("b",null,s(f(v)),1)]))),128))])]))}}),Rt={class:"log-title"},Ct=["title"],Lt={class:"log-toggle"},At={key:0,class:"log-body"},St={class:"log-toolbar"},Dt=["disabled"],Bt=["disabled"],Mt=["disabled"],Ut={class:"log-count"},jt={key:0,class:"log-hint"},Pt={key:1,class:"log-hint"},Ot=4e3,Ht=2e3,Ft=lt({__name:"TaskLogPanel",props:{taskId:{},status:{}},setup(U){const b=U,{t:o}=rt(),y=/\berror\b|\btraceback\b|out of memory|\boom\b/i,w=T(!1),f=T([]),a=T(!1),p=T(!1),k=T(!0),v=T();let _,h,d;const S=E(()=>b.status==="FAILED"||a.value),I=E(()=>f.value.join(` `)),R=E(()=>{for(let r=f.value.length-1;r>=0;r--)if(y.test(f.value[r]))return r;return-1});function D(){h!==void 0&&(window.clearInterval(h),h=void 0),d!==void 0&&(window.clearInterval(d),d=void 0)}function j(){_?.close(),_=void 0}async function P(){try{const r=await st.logTail(b.taskId,240);p.value=!1,r.lines.some(g=>y.test(g))&&(a.value=!0),r.done&&h!==void 0&&(window.clearInterval(h),h=void 0)}catch{p.value=!0,h!==void 0&&(window.clearInterval(h),h=void 0)}}function H(){D(),j(),P(),h=window.setInterval(P,Ot)}function N(){!k.value||!w.value||dt(()=>{v.value&&(v.value.scrollTop=v.value.scrollHeight)})}async function $(){try{const r=await st.logTail(b.taskId,1e3);p.value=!1,f.value=r.lines,r.lines.some(g=>y.test(g))&&(a.value=!0),N(),r.done&&d!==void 0&&(window.clearInterval(d),d=void 0)}catch{p.value=!0,d!==void 0&&(window.clearInterval(d),d=void 0)}}function F(){D(),$(),d=window.setInterval($,Ht)}function X(){if(D(),f.value=[],typeof EventSource>"u"){F();return}const r=new EventSource(mt(b.taskId));_=r,r.onmessage=g=>{try{const e=JSON.parse(g.data);if(e.done){j();return}typeof e.text=="string"&&(f.value.push(e.text),!a.value&&y.test(e.text)&&(a.value=!0),N())}catch{}},r.onerror=()=>{j(),F()}}function Y(){w.value=!w.value,w.value?X():H()}function G(){const r=v.value;r&&(k.value=r.scrollTop+r.clientHeight>=r.scrollHeight-8)}function m(){const r=v.value;if(!r||R.value<0)return;k.value=!1;const g=parseFloat(getComputedStyle(r).lineHeight)||18;r.scrollTop=Math.max(0,R.value*g-r.clientHeight/3)}async function V(){try{await navigator.clipboard.writeText(I.value),Z.success(o("tasks.log.copied"))}catch{Z.error(o("tasks.log.copyFail"))}}function z(){const r=URL.createObjectURL(new Blob([I.value],{type:"text/plain;charset=utf-8"})),g=document.createElement("a");g.href=r,g.download=`train-log-${b.taskId}.txt`,g.click(),URL.revokeObjectURL(r)}return Q(()=>b.taskId,()=>{w.value=!1,f.value=[],a.value=!1,p.value=!1,k.value=!0,H()},{immediate:!0}),ct(()=>{D(),j()}),(r,g)=>(n(),i("section",{class:B(["task-log-panel",{open:w.value}])},[t("header",{class:"log-header",onClick:Y},[t("span",Rt,[O(s(l(o)("tasks.log.title")),1),S.value?(n(),i("i",{key:0,class:"log-alert",title:l(o)("tasks.log.errorBadge")},null,8,Ct)):M("",!0)]),t("button",Lt,s(w.value?l(o)("tasks.log.collapse"):l(o)("tasks.log.expand")),1)]),w.value?(n(),i("div",At,[t("div",St,[t("button",{class:B({active:k.value}),onClick:g[0]||(g[0]=J(e=>{k.value=!k.value,N()},["stop"]))},s(l(o)("tasks.log.follow")),3),t("button",{disabled:R.value<0,onClick:J(m,["stop"])},s(l(o)("tasks.log.jumpToError")),9,Dt),t("button",{disabled:!f.value.length,onClick:J(V,["stop"])},s(l(o)("tasks.log.copy")),9,Bt),t("button",{disabled:!f.value.length,onClick:J(z,["stop"])},s(l(o)("tasks.log.download")),9,Mt),t("span",Ut,s(l(o)("tasks.log.count",{n:f.value.length})),1)]),p.value?(n(),i("p",jt,s(l(o)("tasks.log.unavailable")),1)):f.value.length?(n(),i("pre",{key:2,ref_key:"logBody",ref:v,class:"log-lines",onScrollPassive:G},s(I.value),545)):(n(),i("p",Pt,s(l(o)("tasks.log.empty")),1))])):M("",!0)],2))}}),Gt={class:"tasks-board"},Xt={class:"tasks-board-header"},Yt=["disabled"],Vt={key:0,class:"task-error"},zt={key:1,class:"task-empty"},qt={key:2,class:"task-empty"},Jt={key:3,class:"tasks-columns"},Wt={class:"tasks-list-panel"},Kt=["aria-label"],Qt={key:0,class:"tasks-tab-empty"},Zt=["data-status","onClick"],te={class:"task-status"},ee={class:"task-row-main"},se=["data-status"],ae={class:"task-detail-header"},le={class:"task-detail-title"},oe={class:"task-status"},ne=["disabled"],ie={key:0,class:"task-progress"},re={class:"task-progress-meta"},ce={key:0},ue={class:"task-progress-track"},de={class:"task-meta-grid"},ve=["title"],he={class:"task-detail-actions"},pe=["href"],ke={key:0,class:"preview-scroll"},me=["href"],_e=["src","alt"],fe={key:0},ge={key:1},be={key:2},ye={key:1},we={key:1,class:"task-detail task-detail-empty"},Ie=lt({__name:"TasksPage",setup(U){const b=_t(),{tasks:o,loading:y,error:w,terminatingId:f}=vt(b),{t:a}=rt();let p,k=0;const v=T([]),_=T({}),h=T({}),d=T(!0);let S="",I="";function R(e){return e.epoch!=null?a("tasks.detail.epochLabel",{n:e.epoch}):e.step!=null?a("tasks.detail.stepLabel",{n:e.step}):""}const D=E(()=>Object.values(_.value).some(e=>e.length>0)),j=E(()=>{const e=[],c=_.value["loss/average"],x=_.value["loss/current"];if(c?.length&&e.push({name:"loss/average",color:"#2563eb",points:c}),x?.length&&e.push({name:"loss/current",color:"#d97706",points:x}),!e.length)for(const[C,u]of Object.entries(_.value))u.length&&e.push({name:C,color:e.length?"#d97706":"#2563eb",points:u});return e});async function P(e){try{const[c,x]=await Promise.all([st.previews(e),st.metrics(e)]);d.value=c.preview_enabled!==!1;const C=c.images;if(C.length>0){const L=C.map(q=>`${q.name}:${q.mtime}`).join("|");L!==S&&(S=L,v.value=C)}const u=x.tags;if(Object.values(u).some(L=>L.length>0)){const L=Object.entries(u).map(([q,at])=>`${q}:${at.length}:${at[at.length-1]?.step??0}`).join("|");L!==I&&(I=L,_.value=u)}x.progress&&Object.keys(x.progress).length>0&&(h.value=x.progress)}catch{}}const H=E(()=>({CREATED:a("tasks.status.created"),RUNNING:a("tasks.status.running"),FINISHED:a("tasks.status.finished"),TERMINATED:a("tasks.status.terminated"),FAILED:a("tasks.status.failed")})),N=T("running"),$=T(""),F=E(()=>[...o.value].reverse()),X=E(()=>F.value.filter(e=>e.status==="RUNNING"||e.status==="CREATED")),Y=E(()=>F.value.filter(e=>e.status!=="RUNNING"&&e.status!=="CREATED")),G=E(()=>N.value==="running"?X.value:Y.value),m=E(()=>o.value.find(e=>e.id===$.value));function V(e){return String(e.metadata.output_name||e.metadata.trainer_file||e.metadata.backend||a("tasks.defaultName"))}function z(e){return String(e.metadata.config_path||e.metadata.command||a("tasks.noDetail"))}function r(e){$.value=e.id}Q(G,e=>{e.some(c=>c.id===$.value)||($.value=e[0]?.id??"")},{immediate:!0}),Q($,e=>{v.value=[],_.value={},h.value={},d.value=!0,S="",I="",e&&P(e)}),Q(()=>m.value?.status,(e,c)=>{(c==="RUNNING"||c==="CREATED")&&e&&!(e==="RUNNING"||e==="CREATED")&&$.value&&P($.value)});async function g(e){try{await ut.confirm(a("tasks.terminate.confirm",{id:e.id}),a("tasks.terminate.title"),{confirmButtonText:a("tasks.terminate.confirmButton"),cancelButtonText:a("tasks.terminate.cancel"),type:"warning"}),await b.terminate(e.id),Z.success(a("tasks.terminate.success"))}catch(c){c!=="cancel"&&c!=="close"&&Z.error(c instanceof Error?c.message:a("tasks.terminate.fail"))}}return ht(async()=>{await b.refresh(),p=window.setInterval(()=>{if(!o.value.some(x=>x.status==="RUNNING"||x.status==="CREATED"))return;b.refresh({silent:!0}),k+=1;const c=m.value;c&&(c.status==="RUNNING"||c.status==="CREATED")&&k%4===0&&P(c.id)},2e3)}),ct(()=>window.clearInterval(p)),(e,c)=>{const x=nt("el-icon"),C=nt("RouterLink");return n(),i("div",Gt,[t("header",Xt,[t("h1",null,s(l(a)("tasks.title")),1),t("button",{class:"ghost-button",disabled:l(y),onClick:c[0]||(c[0]=u=>l(b).refresh())},[W(x,null,{default:ot(()=>[W(l(pt))]),_:1}),O(s(l(a)("tasks.refresh")),1)],8,Yt)]),l(w)?(n(),i("div",Vt,[t("strong",null,s(l(a)("tasks.loadError")),1),t("span",null,s(l(w)),1),t("button",{onClick:c[1]||(c[1]=u=>l(b).refresh())},s(l(a)("tasks.retry")),1)])):l(y)&&!l(o).length?(n(),i("div",zt,s(l(a)("tasks.loading")),1)):l(o).length?(n(),i("div",Jt,[t("aside",Wt,[t("div",{class:"tasks-tabs",role:"group","aria-label":l(a)("tasks.filterAria")},[t("button",{class:B({active:N.value==="running"}),onClick:c[2]||(c[2]=u=>N.value="running")},[O(s(l(a)("tasks.tabs.running")),1),t("b",null,s(X.value.length),1)],2),t("button",{class:B({active:N.value==="recent"}),onClick:c[3]||(c[3]=u=>N.value="recent")},[O(s(l(a)("tasks.tabs.recent")),1),t("b",null,s(Y.value.length),1)],2)],8,Kt),G.value.length?M("",!0):(n(),i("p",Qt,s(l(a)("tasks.tabEmpty")),1)),(n(!0),i(tt,null,et(G.value,u=>(n(),i("article",{key:u.id,class:B(["task-row",{selected:u.id===$.value}]),"data-status":u.status.toLowerCase(),onClick:L=>r(u)},[t("span",te,s(H.value[u.status]||u.status),1),t("div",ee,[t("h2",null,s(V(u)),1),t("code",null,s(u.id),1)])],10,Zt))),128))]),m.value?(n(),i("section",{key:0,class:"task-detail","data-status":m.value.status.toLowerCase()},[t("header",ae,[t("div",le,[t("h2",null,s(V(m.value)),1),t("span",oe,s(H.value[m.value.status]||m.value.status),1)]),m.value.status==="RUNNING"?(n(),i("button",{key:0,class:"danger-action",disabled:l(f)===m.value.id,onClick:c[4]||(c[4]=u=>g(m.value))},s(l(f)===m.value.id?l(a)("tasks.detail.stopping"):l(a)("tasks.detail.stop")),9,ne)):M("",!0)]),h.value.total_steps?(n(),i("div",ie,[t("div",re,[t("span",null,s(l(a)("tasks.detail.stepProgress",{step:h.value.step,total:h.value.total_steps})),1),h.value.total_epochs?(n(),i("span",ce,s(l(a)("tasks.detail.epochProgress",{epoch:h.value.epoch,total:h.value.total_epochs})),1)):M("",!0),t("b",null,s(h.value.percent)+"%",1)]),t("div",ue,[t("i",{style:it({width:`${h.value.percent}%`})},null,4)])])):M("",!0),t("dl",de,[t("div",null,[t("dt",null,s(l(a)("tasks.detail.taskId")),1),t("dd",null,[t("code",null,s(m.value.id),1)])]),t("div",null,[t("dt",null,s(l(a)("tasks.detail.config")),1),t("dd",{title:z(m.value)},s(z(m.value)),9,ve)]),t("div",null,[t("dt",null,s(l(a)("tasks.detail.returncode")),1),t("dd",null,s(m.value.returncode??"-"),1)])]),t("div",he,[t("a",{class:"ghost-button",href:`/train-log?task_id=${encodeURIComponent(m.value.id)}`,target:"_blank",rel:"noreferrer"},s(l(a)("tasks.detail.viewLog")),9,pe),W(C,{class:"ghost-button",to:"/tensorboard.html"},{default:ot(()=>[O(s(l(a)("tasks.detail.tensorboard")),1)]),_:1})]),t("section",{class:B(["task-preview-strip task-placeholder",{"has-data":v.value.length>0}])},[t("header",null,s(l(a)("tasks.detail.previewTitle")),1),v.value.length?(n(),i("div",ke,[(n(!0),i(tt,null,et(v.value,u=>(n(),i("div",{key:u.name,class:"preview-item"},[t("a",{href:u.url,target:"_blank",rel:"noreferrer"},[t("img",{src:u.thumb_url||u.url,alt:u.name,loading:"lazy"},null,8,_e)],8,me),R(u)?(n(),i("span",fe,s(R(u)),1)):M("",!0)]))),128))])):d.value?(n(),i("p",be,s(l(a)("tasks.detail.previewEmpty")),1)):(n(),i("p",ge,s(l(a)("tasks.detail.previewDisabled")),1))],2),t("section",{class:B(["task-loss-panel task-placeholder",{"has-data":D.value}])},[t("header",null,s(l(a)("tasks.detail.lossTitle")),1),D.value?(n(),kt(Nt,{key:0,series:j.value},null,8,["series"])):(n(),i("p",ye,s(l(a)("tasks.detail.lossEmpty")),1))],2),W(Ft,{"task-id":m.value.id,status:m.value.status},null,8,["task-id","status"])],8,se)):(n(),i("section",we,[t("p",null,s(l(a)("tasks.detail.empty")),1)]))])):(n(),i("div",qt,[t("strong",null,s(l(a)("tasks.emptyTitle")),1),t("span",null,s(l(a)("tasks.emptyDesc")),1)]))])}}});export{Ie as default}; diff --git a/frontend/dist/assets/ToolsPage-DH5QX7Cd.js b/frontend/dist/assets/ToolsPage-C0sSOLKL.js similarity index 94% rename from frontend/dist/assets/ToolsPage-DH5QX7Cd.js rename to frontend/dist/assets/ToolsPage-C0sSOLKL.js index 79a418a5..078eeeaa 100644 --- a/frontend/dist/assets/ToolsPage-DH5QX7Cd.js +++ b/frontend/dist/assets/ToolsPage-C0sSOLKL.js @@ -1 +1 @@ -import{A as S,d as T,u as E,c as i,a as e,t as r,b as a,B as m,C as P,F as y,r as h,s as v,D as B,o as u,E as b}from"./index-BlvrX0Zy.js";import{E as k}from"./index-DNZgQ1o0.js";const V=["networks/extract_lora_from_models.py","networks/extract_lora_from_dylora.py","networks/merge_lora.py","tools/merge_models.py"],L={run:(_,t)=>S("/api/run_script",{method:"POST",body:JSON.stringify({script_name:_,...t})})},R={class:"simple-page"},U={class:"settings-card"},x={for:"tool-script"},F=["value"],I={class:"argument-heading"},N=["onUpdate:modelValue","placeholder"],O=["onUpdate:modelValue","placeholder"],D=["aria-label","onClick"],M={class:"form-actions"},q=["disabled"],$=T({__name:"ToolsPage",setup(_){const{t}=E(),p=v(V[0]),n=B([{key:"",value:""}]),c=v(!1);function f(){n.push({key:"",value:""})}function w(l){n.splice(l,1),n.length||f()}function A(l){if(l==="true")return!0;if(l==="false")return!1;const o=Number(l);return l!==""&&Number.isFinite(o)?o:l}async function C(){const l={};for(const o of n){const s=o.key.trim().replace(/^--/,"");s&&(l[s]=A(o.value.trim()))}c.value=!0;try{await L.run(p.value,l),k.success(t("tools.msg.submitted"))}catch(o){k.error(o instanceof Error?o.message:t("tools.msg.submitFail"))}finally{c.value=!1}}return(l,o)=>(u(),i("div",R,[e("header",null,[o[1]||(o[1]=e("span",{class:"eyebrow"},"SCRIPT TOOLS",-1)),e("h1",null,r(a(t)("tools.title")),1),e("p",null,r(a(t)("tools.subtitle")),1)]),e("section",U,[e("label",x,r(a(t)("tools.scriptLabel")),1),m(e("select",{id:"tool-script","onUpdate:modelValue":o[0]||(o[0]=s=>p.value=s)},[(u(!0),i(y,null,h(a(V),s=>(u(),i("option",{key:s,value:s},r(s),9,F))),128))],512),[[P,p.value]]),e("div",I,[e("strong",null,r(a(t)("tools.argsTitle")),1),e("button",{onClick:f},r(a(t)("tools.addArg")),1)]),(u(!0),i(y,null,h(n,(s,g)=>(u(),i("div",{key:g,class:"argument-row"},[m(e("input",{"onUpdate:modelValue":d=>s.key=d,placeholder:a(t)("tools.argKeyPlaceholder")},null,8,N),[[b,s.key]]),m(e("input",{"onUpdate:modelValue":d=>s.value=d,placeholder:a(t)("tools.argValuePlaceholder")},null,8,O),[[b,s.value]]),e("button",{"aria-label":a(t)("tools.removeArgAria"),onClick:d=>w(g)},"×",8,D)]))),128)),e("div",M,[e("button",{class:"primary-action",disabled:c.value,onClick:C},r(c.value?a(t)("tools.submitting"):a(t)("tools.run")),9,q)])])]))}});export{$ as default}; +import{A as S,d as T,u as E,c as i,a as e,t as r,b as a,B as m,C as P,F as y,r as h,s as v,D as B,o as u,E as b}from"./index-BoQWc9mA.js";import{E as k}from"./index-BC7FDA30.js";const V=["networks/extract_lora_from_models.py","networks/extract_lora_from_dylora.py","networks/merge_lora.py","tools/merge_models.py"],L={run:(_,t)=>S("/api/run_script",{method:"POST",body:JSON.stringify({script_name:_,...t})})},R={class:"simple-page"},U={class:"settings-card"},x={for:"tool-script"},F=["value"],I={class:"argument-heading"},N=["onUpdate:modelValue","placeholder"],O=["onUpdate:modelValue","placeholder"],D=["aria-label","onClick"],M={class:"form-actions"},q=["disabled"],$=T({__name:"ToolsPage",setup(_){const{t}=E(),p=v(V[0]),n=B([{key:"",value:""}]),c=v(!1);function f(){n.push({key:"",value:""})}function w(l){n.splice(l,1),n.length||f()}function A(l){if(l==="true")return!0;if(l==="false")return!1;const o=Number(l);return l!==""&&Number.isFinite(o)?o:l}async function C(){const l={};for(const o of n){const s=o.key.trim().replace(/^--/,"");s&&(l[s]=A(o.value.trim()))}c.value=!0;try{await L.run(p.value,l),k.success(t("tools.msg.submitted"))}catch(o){k.error(o instanceof Error?o.message:t("tools.msg.submitFail"))}finally{c.value=!1}}return(l,o)=>(u(),i("div",R,[e("header",null,[o[1]||(o[1]=e("span",{class:"eyebrow"},"SCRIPT TOOLS",-1)),e("h1",null,r(a(t)("tools.title")),1),e("p",null,r(a(t)("tools.subtitle")),1)]),e("section",U,[e("label",x,r(a(t)("tools.scriptLabel")),1),m(e("select",{id:"tool-script","onUpdate:modelValue":o[0]||(o[0]=s=>p.value=s)},[(u(!0),i(y,null,h(a(V),s=>(u(),i("option",{key:s,value:s},r(s),9,F))),128))],512),[[P,p.value]]),e("div",I,[e("strong",null,r(a(t)("tools.argsTitle")),1),e("button",{onClick:f},r(a(t)("tools.addArg")),1)]),(u(!0),i(y,null,h(n,(s,g)=>(u(),i("div",{key:g,class:"argument-row"},[m(e("input",{"onUpdate:modelValue":d=>s.key=d,placeholder:a(t)("tools.argKeyPlaceholder")},null,8,N),[[b,s.key]]),m(e("input",{"onUpdate:modelValue":d=>s.value=d,placeholder:a(t)("tools.argValuePlaceholder")},null,8,O),[[b,s.value]]),e("button",{"aria-label":a(t)("tools.removeArgAria"),onClick:d=>w(g)},"×",8,D)]))),128)),e("div",M,[e("button",{class:"primary-action",disabled:c.value,onClick:C},r(c.value?a(t)("tools.submitting"):a(t)("tools.run")),9,q)])])]))}});export{$ as default}; diff --git a/frontend/dist/assets/TrainingWorkbenchPage-ByP70JIG.js b/frontend/dist/assets/TrainingWorkbenchPage-ByP70JIG.js deleted file mode 100644 index 65b91153..00000000 --- a/frontend/dist/assets/TrainingWorkbenchPage-ByP70JIG.js +++ /dev/null @@ -1,34 +0,0 @@ -import{d as ee,u as te,c as $,a as m,t as b,p as P,F as U,b as y,e as L,R as pt,w as K,f as ie,h as z,o as k,K as Y,i as G,m as Z,j as J,r as H,q as lt,s as F,B as de,L as ht,y as Ge,k as ce,l as Ze,M as Bt,N as zt,G as yt,O as Ue,P as vt,Q as Lt,n as Kt,S as Pe,C as ut,T as Ut}from"./index-BlvrX0Zy.js";import{E as R}from"./index-DNZgQ1o0.js";import{E as ue}from"./index-DILr9bpz.js";import{e as Re,l as Jt,r as qt}from"./prefs-L1LFxgf4.js";import{s as ge}from"./schemas-BVh9ipN3.js";import{u as Ht}from"./tasks-CTZb2r1_.js";const Wt=["data-state"],Gt={class:"engine-status-copy"},Zt={key:0},Yt={class:"engine-status-actions"},Xt=["disabled"],Qt=["disabled"],en=["disabled"],tn=ee({__name:"EngineStatusBar",props:{state:{},title:{},hint:{},loading:{type:Boolean},showInstall:{type:Boolean},showReinstall:{type:Boolean},showRefresh:{type:Boolean,default:!1},manageOnly:{type:Boolean,default:!1},manageTo:{default:"/settings/engines"}},emits:["refresh","install","reinstall"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=z(()=>{if(n.title)return n.title;const g=`settings.engines.state.${n.state}`,f=a(g);return f===g?n.state:f}),u=z(()=>{if(n.hint)return n.hint;const g=`settings.engines.hint.${n.state}`,f=a(g);return f===g?"":f});return(g,f)=>(k(),$("div",{class:"engine-status-bar","data-state":e.state,"data-testid":"engine-status-bar"},[m("div",Gt,[m("b",null,b(i.value),1),u.value?(k(),$("span",Zt,b(u.value),1)):P("",!0)]),m("div",Yt,[e.manageOnly?P("",!0):(k(),$(U,{key:0},[e.showRefresh?(k(),$("button",{key:0,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[0]||(f[0]=c=>r("refresh"))},b(y(a)("settings.engines.actions.refresh")),9,Xt)):P("",!0),e.showInstall?(k(),$("button",{key:1,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[1]||(f[1]=c=>r("install"))},b(y(a)("settings.engines.actions.install")),9,Qt)):P("",!0),e.showReinstall?(k(),$("button",{key:2,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[2]||(f[2]=c=>r("reinstall"))},b(y(a)("settings.engines.actions.reinstall")),9,en)):P("",!0)],64)),L(y(pt),{class:"ghost-button",to:e.manageTo},{default:K(()=>[ie(b(y(a)("settings.engines.actions.manage")),1)]),_:1},8,["to"])])],8,Wt))}});let nn=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class se extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,r=!0,a="Z";if(typeof t=="string"){let i=t.match(nn);i?(i[1]||(n=!1,t=`0000-01-01T${t}`),r=!!i[2],r&&t[10]===" "&&(t=t.replace(" ","T")),i[2]&&+i[2]>23?t="":(a=i[3]||null,t=t.toUpperCase(),!a&&r&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=n,this.#n=r,this.#e=a)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let r=new se(t);return r.#e=n,r}static wrapAsLocalDateTime(t){let n=new se(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new se(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new se(t);return n.#t=!1,n.#e=null,n}}function rn(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function an(e,t,n){let r=e.split(/\r\n|\n|\r/g),a="",i=(Math.log10(t+1)|0)+1;for(let u=t-1;u<=t+1;u++){let g=r[u-1];g&&(a+=u.toString().padEnd(i," "),a+=": ",a+=g,a+=` -`,u===t&&(a+=" ".repeat(i+n+2),a+=`^ -`))}return a}class j extends Error{line;column;codeblock;constructor(t,n){const[r,a]=rn(n.toml,n.ptr),i=an(n.toml,r,a);super(`Invalid TOML document: ${t} - -${i}`,n),this.line=r,this.column=a,this.codeblock=i}}let on=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,sn=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,ln=/^[+-]?0[0-9_]/;function bt(e,t){let n=e[t++],r=n,a=n==="'",i=n===e[t]&&n===e[t+1];i&&(e[t+=2]===` -`?t++:e[t]==="\r"&&e[t+1]===` -`&&(t+=2));let u="",g=t,f=0;for(let c=t;c=48&&_<=57?_-48:_>=65&&_<=70?_-65+10:_>=97&&_<=102?_-97+10:-1;if(v<0)throw new j("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});w=w<<4|v}if(w<0||w>1114111||w>=55296&&w<=57343)throw new j("invalid unicode escape",{toml:e,ptr:c});u+=String.fromCodePoint(w),g=c+1,f=0}else if(n===" "||n===" ")f=2;else{if(n==="b")u+="\b";else if(n==="t")u+=" ";else if(n==="n")u+=` -`;else if(n==="f")u+="\f";else if(n==="r")u+="\r";else if(n==="e")u+="\x1B";else if(n==='"')u+='"';else if(n==="\\")u+="\\";else throw new j("unrecognized escape sequence",{toml:e,ptr:c});g=c+1,f=0}else if(n!==" "&&n!==" "){if(f===2)throw new j("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:g});f=!a&&n==="\\"?1:0,g=c}}throw new j("unfinished string",{toml:e,ptr:t})}function un(e,t,n,r){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return r?0n:0;let a=on.test(e);if(a||sn.test(e)){if(ln.test(e))throw new j("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let u=+e;if(isNaN(u))throw new j("invalid number",{toml:t,ptr:n});if(a){if((a=!Number.isSafeInteger(u))&&!r)throw new j("integer value cannot be represented losslessly",{toml:t,ptr:n});(a||r===!0)&&(u=BigInt(e))}return u}const i=new se(e);if(!i.isValid())throw new j("invalid value",{toml:t,ptr:n});return i}function Je(e,t=0,n=e.length){let r=e.indexOf(` -`,t);return e[r-1]==="\r"&&r--,r<=n?r:-1}function Ie(e,t){for(let n=t;n-1&&(Ie(e,a),r=r.slice(0,a)),[r.trimEnd(),a]}function Ye(e,t,n,r,a){if(r===0)throw new j("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let i=e[t];if(i==="["||i==="{"){let[f,c]=i==="["?mn(e,t,r,a):gn(e,t,r,a);if(n){if(c=re(e,c),e[c]===",")c++;else if(e[c]!==n)throw new j("expected comma or end of structure",{toml:e,ptr:c})}return[f,c]}if(i==='"'||i==="'"){let[f,c]=bt(e,t);if(n){if(c=re(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==` -`&&e[c]!=="\r")throw new j("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[f,c]}let u=cn(e,t,",",n),g=fn(e,t,u-(e[u-1]===","?1:0));if(!g[0])throw new j("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&g[1]>-1&&(u=re(e,t+g[1]),e[u]===","&&u++),[un(g[0],e,t,a),u]}let dn=/^[a-zA-Z0-9-_]+[ \t]*$/;function qe(e,t,n="="){let r=t-1,a=[],i=e.indexOf(n,t);if(i<0)throw new j("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let u=e[t=++r];if(u!==" "&&u!==" ")if(u==='"'||u==="'"){if(u===e[t+1]&&u===e[t+2])throw new j("multiline strings are not allowed in keys",{toml:e,ptr:t});let[g,f]=bt(e,t);r=e.indexOf(".",f);let c=e.slice(f,r<0||r>i?i:r),w=Je(c);if(w>-1)throw new j("newlines are not allowed in keys",{toml:e,ptr:t+r+w});if(c.trimStart())throw new j("found extra tokens after the string part",{toml:e,ptr:f});if(ii?i:r);if(!dn.test(g))throw new j("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});a.push(g.trimEnd())}}while(r+1&&rt(n,r)))}function ne(e,t){return Object.fromEntries(Object.entries(e).map(([n,r])=>[n,t(r,n)]))}function _n(e,t,n){if(!t)return{...e};const r={};for(const a of t)e[a]!==void 0&&(r[a]=e[a]);return r}function ae(e,t){return arguments.length===1?n=>ae(e,n):e in globalThis&&t instanceof globalThis[e]||Object.prototype.toString.call(t).slice(8,-1)===e}function Te(e){return ae("ArrayBuffer",e)||ae("SharedArrayBuffer",e)}function wn(e){return Te(e)||ArrayBuffer.isView(e)}var X;(e=>{e.is=Te,e.isSource=wn;function t(u){return ArrayBuffer.isView(u)?u.buffer.slice(u.byteOffset,u.byteOffset+u.byteLength):u}e.fromSource=t;function n(u){if(u=t(u),typeof Buffer<"u")return Buffer.from(u).toString("base64");let g="";const f=new Uint8Array(u);for(let c=0;cg.charCodeAt(0))}e.fromBase64=r;function a(u){return u=t(u),typeof Buffer<"u"?Buffer.from(u).toString("hex"):Array.from(new Uint8Array(u),g=>g.toString(16).padStart(2,"0")).join("")}e.toHex=a;function i(u){if(typeof Buffer<"u")return t(Buffer.from(u,"hex"));const g=u.length%2===0?u:u.slice(0,u.length-1),f=[];for(let c=0;c{a[u]=Reflect.apply(He,null,[i,t])}),a}const r=Object.create(Object.getPrototypeOf(e));t.set(e,r);for(const a of Reflect.ownKeys(e)){const i={...Reflect.getOwnPropertyDescriptor(e,a)};"value"in i&&(i.value=Reflect.apply(He,null,[i.value,t])),Reflect.defineProperty(r,a,i)}return r}function fe(e,t,n){if(e===t||!n&&q(e)&&q(t))return!0;if(typeof e!=typeof t||typeof e!="object"||!e||!t)return!1;function r(a,i){return a(e)?a(t)?i(e,t):!1:a(t)?!1:void 0}return r(Array.isArray,(a,i)=>a.length===i.length&&a.every((u,g)=>fe(u,i[g])))??r(ae("Date"),(a,i)=>a.valueOf()===i.valueOf())??r(ae("RegExp"),(a,i)=>a.source===i.source&&a.flags===i.flags)??r(Te,(a,i)=>{if(a.byteLength!==i.byteLength)return!1;const u=new Uint8Array(a),g=new Uint8Array(i);for(let f=0;ffe(e[a],t[a],n))}var dt;(e=>{e.millisecond=1,e.second=1e3,e.minute=e.second*60,e.hour=e.minute*60,e.day=e.hour*24,e.week=e.day*7;let t=new Date().getTimezoneOffset();function n(_){t=_}e.setTimezoneOffset=n;function r(){return t}e.getTimezoneOffset=r;function a(_=new Date,v){return typeof _=="number"&&(_=new Date(_)),v===void 0&&(v=t),Math.floor((_.valueOf()/e.minute-v)/1440)}e.getDateNumber=a;function i(_,v){const I=new Date(_*e.day);return v===void 0&&(v=t),new Date(+I+v*e.minute)}e.fromDateNumber=i;const u=/\d+(?:\.\d+)?/.source,g=new RegExp(`^${["w(?:eek(?:s)?)?","d(?:ay(?:s)?)?","h(?:our(?:s)?)?","m(?:in(?:ute)?(?:s)?)?","s(?:ec(?:ond)?(?:s)?)?"].map(_=>`(${u}${_})?`).join("")}$`);function f(_){const v=g.exec(_);return v?(parseFloat(v[1])*e.week||0)+(parseFloat(v[2])*e.day||0)+(parseFloat(v[3])*e.hour||0)+(parseFloat(v[4])*e.minute||0)+(parseFloat(v[5])*e.second||0):0}e.parseTime=f;function c(_){const v=f(_);return v?_=Date.now()+v:/^\d{1,2}(:\d{1,2}){1,2}$/.test(_)?_=`${new Date().toLocaleDateString()}-${_}`:/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test(_)&&(_=`${new Date().getFullYear()}-${_}`),_?new Date(_):new Date}e.parseDate=c;function w(_){const v=Math.abs(_);return v>=e.day-e.hour/2?Math.round(_/e.day)+"d":v>=e.hour-e.minute/2?Math.round(_/e.hour)+"h":v>=e.minute-e.second/2?Math.round(_/e.minute)+"m":v>=e.second?Math.round(_/e.second)+"s":_+"ms"}e.format=w;function O(_,v=2){return _.toString().padStart(v,"0")}e.toDigits=O;function A(_,v=new Date){return _.replace("yyyy",v.getFullYear().toString()).replace("yy",v.getFullYear().toString().slice(2)).replace("MM",O(v.getMonth()+1)).replace("dd",O(v.getDate())).replace("hh",O(v.getHours())).replace("mm",O(v.getMinutes())).replace("ss",O(v.getSeconds())).replace("SSS",O(v.getMilliseconds(),3))}e.template=A})(dt||(dt={}));var kn=Object.defineProperty,xn=Object.getOwnPropertyNames,M=(e,t)=>kn(e,"name",{value:t,configurable:!0}),Sn=(e,t)=>function(){return t||(0,e[xn(e)[0]])((t={exports:{}}).exports,t),t.exports},$n=Sn({"src/index.ts"(e,t){var D;var n=Symbol.for("schemastery"),r=Symbol.for("ValidationError");globalThis.__schemastery_index__??=0,globalThis.__schemastery_refs__=void 0;var a=(D=class extends TypeError{constructor(s,o){let d="$";for(const p of o.path||[])typeof p=="string"?d+="."+p:typeof p=="number"?d+="["+p+"]":typeof p=="symbol"&&(d+=`[Symbol(${p.toString()})]`);d.startsWith(".")&&(d=d.slice(1)),super((d==="$"?"":`${d} `)+s),this.options=o}name="ValidationError";static is(s){return!!s?.[r]}},M(D,"ValidationError"),D);Object.defineProperty(a.prototype,r,{value:!0});var i=M(function(l){const s=M(function(o,d={}){return i.resolve(o,s,d)[0]},"schema");if(l.refs){const o=ne(l.refs,p=>new i(p)),d=M(p=>o[p],"getRef");for(const p in o){const h=o[p];h.sKey=d(h.sKey),h.inner=d(h.inner),h.list=h.list&&h.list.map(d),h.dict=h.dict&&ne(h.dict,d)}return o[l.uid]}if(Object.assign(s,l),typeof s.callback=="string")try{s.callback=new Function("return "+s.callback)()}catch{}return Object.defineProperty(s,"uid",{value:globalThis.__schemastery_index__++}),Object.setPrototypeOf(s,i.prototype),s.meta||={},s.toString=s.toString.bind(s),s},"Schema");i.prototype=Object.create(Function.prototype),i.prototype[n]=!0,Object.defineProperty(i.prototype,"~standard",{get(){return{version:1,vendor:"schemastery",validate:M(l=>{try{return{value:i.resolve(l,this,{})[0]}}catch(s){if(a.is(s))return{issues:[{message:s.message,path:s.options.path}]};throw s}},"validate")}}}),i.ValidationError=a,i.prototype.toJSON=M(function(){if(globalThis.__schemastery_refs__)return globalThis.__schemastery_refs__[this.uid]??=JSON.parse(JSON.stringify({...this})),this.uid;globalThis.__schemastery_refs__={[this.uid]:{...this}},globalThis.__schemastery_refs__[this.uid]=JSON.parse(JSON.stringify({...this}));const s={uid:this.uid,refs:globalThis.__schemastery_refs__};return globalThis.__schemastery_refs__=void 0,s},"toJSON"),i.prototype.set=M(function(s,o){return this.dict[s]=o,this},"set"),i.prototype.push=M(function(s){return this.list.push(s),this},"push");function u(l,s){const o=typeof l=="string"?{"":l}:{...l};for(const d in s){const p=s[d];p?.$description||p?.$desc?o[d]=p.$description||p.$desc:typeof p=="string"&&(o[d]=p)}return o}M(u,"mergeDesc");function g(l){return l?.$value??l?.$inner}M(g,"getInner");function f(l){return bn(l??{},s=>!s.startsWith("$"))}M(f,"extractKeys"),i.prototype.i18n=M(function(s){const o=i(this),d=u(o.meta.description,s);return Object.keys(d).length&&(o.meta.description=d),o.dict&&(o.dict=ne(o.dict,(p,h)=>p.i18n(ne(s,S=>g(S)?.[h]??S?.[h])))),o.list&&(o.list=o.list.map((p,h)=>p.i18n(ne(s,(S={})=>Array.isArray(g(S))?g(S)[h]:Array.isArray(S)?S[h]:f(S))))),o.inner&&(o.inner=o.inner.i18n(ne(s,p=>g(p)?g(p):f(p)))),o.sKey&&(o.sKey=o.sKey.i18n(ne(s,p=>p?.$key))),o},"i18n"),i.prototype.extra=M(function(s,o){const d=i(this);return d.meta={...d.meta,[s]:o},d},"extra");for(const l of["required","disabled","collapse","hidden","loose"])Object.assign(i.prototype,{[l](s=!0){const o=i(this);return o.meta={...o.meta,[l]:s},o}});i.prototype.deprecated=M(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"deprecated",type:"danger"}),s},"deprecated"),i.prototype.experimental=M(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"experimental",type:"warning"}),s},"experimental"),i.prototype.pattern=M(function(s){const o=i(this),d=_n(s,["source","flags"]);return o.meta={...o.meta,pattern:d},o},"pattern"),i.prototype.simplify=M(function(s){if(fe(s,this.meta.default,this.type==="dict"))return null;if(q(s))return s;if(this.type==="object"||this.type==="dict"){const o={};for(const d in s){const h=(this.type==="object"?this.dict[d]:this.inner)?.simplify(s[d]);(this.type==="dict"||!q(h))&&(o[d]=h)}return fe(o,this.meta.default,this.type==="dict")?null:o}else if(this.type==="array"||this.type==="tuple"){const o=[];return s.forEach((d,p)=>{const h=this.type==="array"?this.inner:this.list[p],S=h?h.simplify(d):d;o.push(S)}),o}else if(this.type==="intersect"){const o={};for(const d of this.list)Object.assign(o,d.simplify(s));return o}else if(this.type==="union")for(const o of this.list)try{return i.resolve(s,o,{}),o.simplify(s)}catch{}return s},"simplify"),i.prototype.toString=M(function(s){return I[this.type]?.(this,s)??`Schema<${this.type}>`},"toString"),i.prototype.role=M(function(l,s){const o=i(this);return o.meta={...o.meta,role:l,extra:s},o},"role");for(const l of["default","link","comment","description","max","min","step"])Object.assign(i.prototype,{[l](s){const o=i(this);return o.meta={...o.meta,[l]:s},o}});var c={};i.extend=M(function(s,o){c[s]=o},"extend"),i.resolve=M(function(s,o,d={},p=!1){if(!o)return[s];if(d.ignore?.(s,o))return[s];if(q(s)&&o.type!=="lazy"){if(o.meta.required)throw new a("missing required value",d);let S=o,C=o.meta.default;for(;S?.type==="intersect"&&q(C);)S=S.list[0],C=S?.meta.default;if(q(C))return[s];s=He(C)}const h=c[o.type];if(!h)throw new a(`unsupported type "${o.type}"`,d);try{return h(s,o,d,p)}catch(S){if(!o.meta.loose)throw S;return[o.meta.default]}},"resolve"),i.from=M(function(s){if(q(s))return i.any();if(["string","number","boolean"].includes(typeof s))return i.const(s).required();if(s[n])return s;if(typeof s=="function")switch(s){case String:return i.string().required();case Number:return i.number().required();case Boolean:return i.boolean().required();case Function:return i.function().required();default:return i.is(s).required()}else throw new TypeError(`cannot infer schema from ${s}`)},"from"),i.lazy=M(function(s){const o=M(()=>(d.inner[n]||(d.inner=d.builder(),d.inner.meta={...d.meta,...d.inner.meta}),d.inner.toJSON()),"toJSON"),d=new i({type:"lazy",builder:s,inner:{toJSON:o}});return d},"lazy"),i.natural=M(function(){return i.number().step(1).min(0)},"natural"),i.percent=M(function(){return i.number().step(.01).min(0).max(1).role("slider")},"percent"),i.date=M(function(){return i.union([i.is(Date),i.transform(i.string().role("datetime"),(s,o)=>{const d=new Date(s);if(isNaN(+d))throw new a(`invalid date "${s}"`,o);return d},!0)])},"date"),i.regExp=M(function(s=""){return i.union([i.is(RegExp),i.transform(i.string().role("regexp",{flag:s}),(o,d)=>{try{return new RegExp(o,s)}catch(p){throw new a(p.message,d)}},!0)])},"regExp"),i.arrayBuffer=M(function(s){return i.union([i.is(ArrayBuffer),i.is(SharedArrayBuffer),i.transform(i.any(),(o,d)=>{if(X.isSource(o))return X.fromSource(o);throw new a(`expected ArrayBufferSource but got ${o}`,d)},!0),...s?[i.transform(i.string(),(o,d)=>{try{return s==="base64"?X.fromBase64(o):X.fromHex(o)}catch(p){throw new a(p.message,d)}},!0)]:[]])},"arrayBuffer"),i.extend("lazy",(l,s,o,d)=>(s.inner[n]||(s.inner=s.builder(),s.inner.meta={...s.meta,...s.inner.meta}),i.resolve(l,s.inner,o,d))),i.extend("any",l=>[l]),i.extend("never",(l,s,o)=>{throw new a(`expected nullable but got ${l}`,o)}),i.extend("const",(l,{value:s},o)=>{if(fe(l,s))return[s];throw new a(`expected ${s} but got ${l}`,o)});function w(l,s,o,d,p=!1){const{max:h=1/0,min:S=-1/0}=s;if(l>h)throw new a(`expected ${o} <= ${h} but got ${l}`,d);if(l= ${S} but got ${l}`,d)}M(w,"checkWithinRange"),i.extend("string",(l,{meta:s},o)=>{if(typeof l!="string")throw new a(`expected string but got ${l}`,o);if(s.pattern){const d=new RegExp(s.pattern.source,s.pattern.flags);if(!d.test(l))throw new a(`expect string to match regexp ${d}`,o)}return w(l.length,s,"string length",o),[l]});function O(l,s){const o=l.toString();if(o.includes("e"))return l*Math.pow(10,s);const d=o.indexOf(".");if(d===-1)return l*Math.pow(10,s);const p=o.slice(d+1),h=o.slice(0,d);return p.length<=s?+(h+p.padEnd(s,"0")):+(h+p.slice(0,s)+"."+p.slice(s))}M(O,"decimalShift");function A(l,s,o){if(o=Math.abs(o),!/^\d+\.\d+$/.test(o.toString()))return(l-s)%o===0;const d=o.toString().indexOf("."),p=o.toString().slice(d+1).length;return Math.abs(O(l,p)-O(s,p))%O(o,p)===0}M(A,"isMultipleOf"),i.extend("number",(l,{meta:s},o)=>{if(typeof l!="number")throw new a(`expected number but got ${l}`,o);w(l,s,"number",o);const{step:d}=s;if(d&&!A(l,s.min??0,d))throw new a(`expected number multiple of ${d} but got ${l}`,o);return[l]}),i.extend("boolean",(l,s,o)=>{if(typeof l=="boolean")return[l];throw new a(`expected boolean but got ${l}`,o)}),i.extend("bitset",(l,{bits:s,meta:o},d)=>{let p=0,h=[];if(typeof l=="number"){p=l;for(const S in s)l&s[S]&&h.push(S)}else if(Array.isArray(l)){h=l;for(const S of h){if(typeof S!="string")throw new a(`expected string but got ${S}`,d);S in s&&(p|=s[S])}}else throw new a(`expected number or array but got ${l}`,d);return p===o.default?[p]:[p,h]}),i.extend("function",(l,s,o)=>{if(typeof l=="function")return[l];throw new a(`expected function but got ${l}`,o)}),i.extend("is",(l,{constructor:s},o)=>{if(typeof s=="function"){if(l instanceof s)return[l];throw new a(`expected ${s.name} but got ${l}`,o)}else{if(q(l))throw new a(`expected ${s} but got ${l}`,o);let d=Object.getPrototypeOf(l);for(;d;){if(d.constructor?.name===s)return[l];d=Object.getPrototypeOf(d)}throw new a(`expected ${s} but got ${l}`,o)}});function _(l,s,o,d){try{const[p,h]=i.resolve(l[s],o,{...d,path:[...d.path||[],s]});return h!==void 0&&(l[s]=h),p}catch(p){if(!d?.autofix)throw p;return delete l[s],o.meta.default}}M(_,"property"),i.extend("array",(l,{inner:s,meta:o},d)=>{if(!Array.isArray(l))throw new a(`expected array but got ${l}`,d);return w(l.length,o,"array length",d,!q(s.meta.default)),[l.map((p,h)=>_(l,h,s,d))]}),i.extend("dict",(l,{inner:s,sKey:o},d,p)=>{if(!Be(l))throw new a(`expected object but got ${l}`,d);const h={};for(const S in l){let C;try{C=i.resolve(S,o,d)[0]}catch(ve){if(p)continue;throw ve}h[C]=_(l,S,s,d),l[C]=l[S],S!==C&&delete l[S]}return[h]}),i.extend("tuple",(l,{list:s},o,d)=>{if(!Array.isArray(l))throw new a(`expected array but got ${l}`,o);const p=s.map((h,S)=>_(l,S,h,o));return d?[p]:(p.push(...l.slice(s.length)),[p])});function v(l,s){for(const o in s)o in l||(l[o]=s[o])}M(v,"merge"),i.extend("object",(l,{dict:s},o,d)=>{if(!Be(l))throw new a(`expected object but got ${l}`,o);const p={};for(const h in s){const S=_(l,h,s[h],o);(!q(S)||h in l)&&(p[h]=S)}return d||v(p,l),[p]}),i.extend("union",(l,{list:s,toString:o},d,p)=>{for(const h of s)try{return i.resolve(l,h,d,p)}catch{}throw new a(`expected ${o()} but got ${JSON.stringify(l)}`,d)}),i.extend("intersect",(l,{list:s,toString:o},d,p)=>{if(!s.length)return[l];let h;for(const S of s){const C=i.resolve(l,S,d,!0)[0];if(!q(C))if(q(h))h=C;else{if(typeof h!=typeof C)throw new a(`expected ${o()} but got ${JSON.stringify(l)}`,d);if(typeof C=="object")v(h??={},C);else if(h!==C)throw new a(`expected ${o()} but got ${JSON.stringify(l)}`,d)}}return!p&&Be(l)&&v(h,l),[h]}),i.extend("transform",(l,{inner:s,callback:o,preserve:d},p)=>{const[h,S=l]=i.resolve(l,s,p,!0);return d?[o(h)]:[o(h),o(S)]});var I={};function E(l,s,o){I[l]=o,Object.assign(i,{[l](...d){const p=new i({type:l});return s.forEach((h,S)=>{switch(h){case"sKey":p.sKey=d[S]??i.string();break;case"inner":p.inner=i.from(d[S]);break;case"list":p.list=d[S].map(i.from);break;case"dict":p.dict=ne(d[S],i.from);break;case"bits":{p.bits={};for(const C in d[S])typeof d[S][C]=="number"&&(p.bits[C]=d[S][C]);break}case"callback":{const C=p.callback=d[S];C.toJSON||=()=>C.toString();break}case"constructor":{const C=p.constructor=d[S];typeof C=="function"&&(C.toJSON||=()=>C.name);break}default:p[h]=d[S]}}),l==="object"||l==="dict"?p.meta.default={}:l==="array"||l==="tuple"?p.meta.default=[]:l==="bitset"&&(p.meta.default=0),p}})}M(E,"defineMethod"),E("is",["constructor"],({constructor:l})=>typeof l=="function"?l.name:l),E("any",[],()=>"any"),E("never",[],()=>"never"),E("const",["value"],({value:l})=>typeof l=="string"?JSON.stringify(l):l),E("string",[],()=>"string"),E("number",[],()=>"number"),E("boolean",[],()=>"boolean"),E("bitset",["bits"],()=>"bitset"),E("function",[],()=>"function"),E("array",["inner"],({inner:l})=>`${l.toString(!0)}[]`),E("dict",["inner","sKey"],({inner:l,sKey:s})=>`{ [key: ${s.toString()}]: ${l.toString()} }`),E("tuple",["list"],({list:l})=>`[${l.map(s=>s.toString()).join(", ")}]`),E("object",["dict"],({dict:l})=>Object.keys(l).length===0?"{}":`{ ${Object.entries(l).map(([s,o])=>`${s}${o.meta.required?"":"?"}: ${o.toString()}`).join(", ")} }`),E("union",["list"],({list:l},s)=>{const o=l.map(({toString:d})=>d()).join(" | ");return s?`(${o})`:o}),E("intersect",["list"],({list:l})=>`${l.map(s=>s.toString(!0)).join(" & ")}`),E("transform",["inner","callback","preserve"],({inner:l},s)=>l.toString(s)),t.exports=i}});const On=$n();function tt(e){return Array.isArray(e)?[...e]:e}function Ee(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,tt(n)]))}const An="(masterpiece, best quality:1.2), 1girl, solo, --n lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, --w 512 --h 768 --l 7 --s 24 --d 1337";function En(e,t,n){const r={...e,...t};return n?.forEach(a=>delete r[a]),r}function gt(e,t){const n={__MIKAZUKI__:{SAMPLE_PROMPTS_DEFAULT:An,SAMPLE_PROMPTS_DESCRIPTION:Y.global.t("schema.samplePromptsDescription")}},r=e.trim().replace(/;\s*$/,"");return new Function("Schema","SHARED_SCHEMAS","UpdateSchema","window",`"use strict"; return (${r});`)(On,t,En,n)}function Nn(e,t){const n=e.find(u=>u.name==="shared"),r=e.find(u=>u.name===t);if(!r)throw new Error(Y.global.t("schema.notProvided",{name:t}));const a=n?gt(n.schema):void 0,i=gt(r.schema,a);if(typeof i!="function"||!i.type)throw new Error(Y.global.t("schema.invalid",{name:t}));return{name:t,hash:r.hash,schema:i,sections:In(i)}}function We(e){return typeof e?.description=="string"?e.description:e?.description?.["zh-CN"]||e?.description?.[""]}function kt(e){return e.type==="object"?Object.entries(e.dict??{}).filter(([,t])=>t.type==="const"&&!t.meta.hidden).map(([t,n])=>({key:t,value:n.value})):e.type==="intersect"?(e.list??[]).flatMap(kt):[]}function Cn(e,t,n){if(t.type==="union"&&t.list?.every(r=>r.type==="const"))return{key:e,type:"string",description:We(t.meta),defaultValue:t.meta.default,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,options:t.list.map(r=>r.value),conditions:n};if(["string","number","boolean","array","const"].includes(t.type))return{key:e,type:t.type,description:We(t.meta),role:t.meta.role,extra:t.meta.extra,defaultValue:t.meta.default??(t.type==="array"?[]:void 0),constValue:t.value,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,min:t.meta.min,max:t.meta.max,step:t.meta.step,conditions:n}}function Ae(e,t=[]){return e.type==="object"?Object.entries(e.dict??{}).flatMap(([n,r])=>{const a=Cn(n,r,t);return a?[a]:Ae(r,t)}):e.type==="intersect"?(e.list??[]).flatMap(n=>Ae(n,t)):e.type==="union"?(e.list??[]).flatMap(n=>{const r=kt(n),a=new Set(r.map(i=>i.key));return Ae(n,[...t,...r]).filter(i=>!a.has(i.key))}):[]}function In(e){const t=e.type==="intersect"?e.list??[]:[e],n=[];let r=0;const a=(u,g)=>{if(!g.length)return;const f=n.at(-1);if(!u&&f){f.fields.push(...g);return}const c=u||Y.global.t("schema.advancedSection");n.push({id:`${c}-${r++}`,title:c,fields:g})},i=u=>{const g=We(u.meta);if(!g&&u.type==="intersect"){for(const f of u.list??[])i(f);return}a(g,Ae(u))};for(const u of t)i(u);return n}function Me(e,t){return e.conditions.every(n=>t[n.key]===n.value)}function xe(e){const t={};for(const n of e.sections.flatMap(r=>r.fields)){const r=n.defaultValue??n.constValue;r!==void 0&&t[n.key]===void 0&&(t[n.key]=tt(r))}return t}function Tn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Me(r,t))continue;const a=r.type==="const"?r.constValue:t[r.key];a===void 0||a===""||Array.isArray(a)&&!a.length||(n[r.key]=tt(a))}return n}function Mn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Me(r,t)||r.hidden)continue;const a=t[r.key];r.required&&(a===void 0||a===""||Array.isArray(a)&&!a.length)?n[r.key]=Y.global.t("schema.required"):typeof a=="number"&&r.min!==void 0&&ar.max&&(n[r.key]=Y.global.t("schema.tooLarge",{max:r.max}))}return n}const jn={class:"field-text"},Dn={class:"field-label"},Vn={key:0},Fn={key:0,class:"field-description"},Pn={class:"field-control"},Rn={key:5,class:"filepicker-control"},Bn={key:0,class:"field-error"},zn={class:"picker-list"},Ln=["onClick"],Kn={key:0},Un=ee({__name:"SchemaField",props:{field:{},modelValue:{type:[String,Number,Boolean,Array]},error:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=F([]),u=F(!1),g=F(!1),f=z(()=>String(n.field.extra?.type||"folder")),c=z(()=>n.field.extra?.internal?String(n.field.extra.internal):""),w=z({get:()=>Array.isArray(n.modelValue)?n.modelValue.join(` -`):"",set:v=>r("update:modelValue",v.split(/\r?\n/).filter(Boolean))}),O=z(()=>n.field.type==="boolean"||n.field.type==="number"||n.field.options?!0:n.field.type==="string"&&!n.field.role);async function A(){g.value=!0;try{const v=await ge.pickFile(f.value);r("update:modelValue",v.path.replaceAll("\\","/"))}catch(v){R.error(v instanceof Error?v.message:a("schemaForm.pickFail"))}finally{g.value=!1}}async function _(){try{i.value=(await ge.files(c.value)).files,u.value=!0}catch(v){R.error(v instanceof Error?v.message:a("schemaForm.catalogFail"))}}return(v,I)=>{const E=G("el-switch"),D=G("el-option"),l=G("el-select"),s=G("el-input-number"),o=G("el-input"),d=G("el-button"),p=G("el-dialog");return k(),$(U,null,[m("label",{class:Z(["schema-field",{"has-error":e.error,"schema-field--compact":O.value}])},[m("span",jn,[m("span",Dn,[m("code",null,b(e.field.key),1),e.field.required?(k(),$("b",Vn,b(y(a)("schemaForm.required")),1)):P("",!0)]),e.field.description?(k(),$("span",Fn,b(e.field.description),1)):P("",!0)]),m("span",Pn,[e.field.type==="boolean"?(k(),J(E,{key:0,"model-value":!!e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":I[0]||(I[0]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.options?(k(),J(l,{key:1,"model-value":e.modelValue,disabled:e.field.disabled,multiple:e.field.type==="array",clearable:"","onUpdate:modelValue":I[1]||(I[1]=h=>r("update:modelValue",h))},{default:K(()=>[(k(!0),$(U,null,H(e.field.options,h=>(k(),J(D,{key:String(h),label:String(h)||y(a)("schemaForm.emptyOption"),value:h??""},null,8,["label","value"]))),128))]),_:1},8,["model-value","disabled","multiple"])):e.field.type==="number"?(k(),J(s,{key:2,"model-value":e.modelValue,disabled:e.field.disabled,min:e.field.min,max:e.field.max,step:e.field.step||1,"controls-position":"right","onUpdate:modelValue":I[2]||(I[2]=h=>r("update:modelValue",h??void 0))},null,8,["model-value","disabled","min","max","step"])):e.field.type==="array"||e.field.role==="table"?(k(),J(o,{key:3,modelValue:w.value,"onUpdate:modelValue":I[3]||(I[3]=h=>w.value=h),type:"textarea",rows:4,disabled:e.field.disabled,placeholder:y(a)("schemaForm.arrayPlaceholder")},null,8,["modelValue","disabled","placeholder"])):e.field.role==="textarea"?(k(),J(o,{key:4,"model-value":e.modelValue,type:"textarea",rows:5,disabled:e.field.disabled,"onUpdate:modelValue":I[4]||(I[4]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.role==="filepicker"?(k(),$("span",Rn,[L(o,{"model-value":e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":I[5]||(I[5]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]),L(d,{loading:g.value,disabled:e.field.disabled,onClick:lt(A,["prevent"])},{default:K(()=>[ie(b(y(a)("schemaForm.browse")),1)]),_:1},8,["loading","disabled"]),c.value?(k(),J(d,{key:0,disabled:e.field.disabled,onClick:lt(_,["prevent"])},{default:K(()=>[ie(b(y(a)("schemaForm.commonPaths")),1)]),_:1},8,["disabled"])):P("",!0)])):(k(),J(o,{key:6,"model-value":e.modelValue,disabled:e.field.disabled||e.field.type==="const","onUpdate:modelValue":I[6]||(I[6]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]))]),e.error?(k(),$("span",Bn,b(e.error),1)):P("",!0)],2),L(p,{modelValue:u.value,"onUpdate:modelValue":I[7]||(I[7]=h=>u.value=h),title:y(a)("schemaForm.catalogTitle"),width:"min(680px, 92vw)"},{default:K(()=>[m("div",zn,[(k(!0),$(U,null,H(i.value,h=>(k(),$("button",{key:h.path,onClick:S=>{r("update:modelValue",h.path),u.value=!1}},[m("strong",null,b(h.name),1),m("span",null,b(h.path),1),h.size?(k(),$("small",Kn,b(h.size),1)):P("",!0)],8,Ln))),128))])]),_:1},8,["modelValue","title"])],64)}}}),Jn={class:"schema-form"},qn=["id"],Hn={class:"schema-fields"},Wn=ee({__name:"DynamicSchemaForm",props:{schema:{},modelValue:{},errors:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=z(()=>{const f=new Map;for(const c of n.schema.sections)for(const w of c.fields)Me(w,n.modelValue)&&f.set(w.key,w);return f});function u(f){return f.filter(c=>!c.hidden&&i.value.get(c.key)===c)}function g(f,c){r("update:modelValue",{...n.modelValue,[f]:c})}return(f,c)=>(k(),$("div",Jn,[(k(!0),$(U,null,H(e.schema.sections,w=>de((k(),$("section",{id:`sec-${w.id}`,key:w.id,class:"schema-section"},[m("header",null,[m("h2",null,b(w.title),1),m("span",null,b(y(a)("schemaForm.fieldCount",{n:u(w.fields).length})),1)]),m("div",Hn,[(k(!0),$(U,null,H(u(w.fields),O=>(k(),J(Un,{key:O.key,field:O,"model-value":e.modelValue[O.key],error:e.errors[O.key],"onUpdate:modelValue":A=>g(O.key,A)},null,8,["field","model-value","error","onUpdate:modelValue"]))),128))])],8,qn)),[[ht,u(w.fields).length]])),128))]))}}),Gn=["aria-label"],Zn=["title","aria-label","aria-expanded"],Yn=["aria-hidden"],Xn={class:"schema-toc-head"},Qn={class:"schema-toc-caption"},er=["title","aria-label"],tr={class:"schema-toc-list"},nr=["title","onClick"],rr=3500,ir=ee({__name:"SectionToc",props:{sections:{}},setup(e){const t=e,{t:n}=te(),r=F(!1),a=F("");let i,u;function g(I){return`sec-${I}`}function f(){u!==void 0&&(window.clearTimeout(u),u=void 0)}function c(){f(),r.value&&(u=window.setTimeout(()=>{r.value=!1,u=void 0},rr))}function w(){r.value=!0,c()}function O(){f(),r.value=!1}function A(){f(),r.value=!0}function _(I){a.value=I,document.getElementById(g(I))?.scrollIntoView({behavior:"smooth",block:"start"}),r.value=!0,c()}function v(){if(i?.disconnect(),typeof IntersectionObserver>"u"){!a.value&&t.sections[0]&&(a.value=t.sections[0].id);return}i=new IntersectionObserver(I=>{const E=I.filter(D=>D.isIntersecting).sort((D,l)=>D.boundingClientRect.top-l.boundingClientRect.top)[0];E?.target instanceof HTMLElement&&(a.value=E.target.id.replace(/^sec-/,""))},{rootMargin:"-15% 0px -75% 0px",threshold:[0,.12,.4]});for(const I of t.sections){const E=document.getElementById(g(I.id));E&&i.observe(E)}!a.value&&t.sections[0]&&(a.value=t.sections[0].id)}return Ge(v),ce(()=>t.sections,v),Ze(()=>{f(),i?.disconnect()}),(I,E)=>{const D=G("el-icon");return k(),$("aside",{class:Z(["section-toc schema-toc",{open:r.value,collapsed:!r.value}]),"aria-label":y(n)("training.toc.title")},[m("button",{type:"button",class:"toc-seam schema-toc-seam",title:y(n)("training.toc.expand"),"aria-label":y(n)("training.toc.expand"),"aria-expanded":r.value?"true":"false",onMouseenter:w,onClick:E[0]||(E[0]=l=>r.value?O():w())},[L(D,{class:"schema-toc-seam-icon",size:12},{default:K(()=>[L(y(Bt))]),_:1})],40,Zn),m("div",{class:"toc-panel schema-toc-panel","aria-hidden":r.value?"false":"true",onMouseenter:A,onMouseleave:c},[m("header",Xn,[m("p",Qn,b(y(n)("training.toc.title")),1),m("button",{type:"button",class:"schema-toc-toggle icon-btn",title:y(n)("training.toc.collapse"),"aria-label":y(n)("training.toc.collapse"),onClick:O},[L(D,{size:14},{default:K(()=>[L(y(zt))]),_:1})],8,er)]),m("div",tr,[(k(!0),$(U,null,H(e.sections,l=>(k(),$("button",{key:l.id,type:"button",class:Z(["toc-item schema-toc-tab",{active:a.value===l.id}]),title:l.title,onClick:s=>_(l.id)},[E[1]||(E[1]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,b(l.title),1)],10,nr))),128))])],40,Yn)],10,Gn)}}});function Se(e,t){return yt(e,{method:"POST",body:JSON.stringify(t)})}const le={presets:async()=>(await yt("/api/presets")).presets,validateImport:(e,t)=>Se("/api/config/validate-import",{page_train_type:e,config:t}),normalizeExport:(e,t)=>Se("/api/config/normalize-for-export",{page_train_type:e,config:t}),run:e=>Se("/api/run",e),animaFastPreflight:e=>Se("/api/anima-fast/preflight",e)},xt="schemas";function ar(){try{const e=JSON.parse(localStorage.getItem(xt)||"[]");return Array.isArray(e)?e:[]}catch{return[]}}async function or(e){let t=ar();try{const{schemas:n}=await ge.hashes(),r=new Map(t.map(i=>[i.name,i.hash]));(n.length!==t.length||n.some(i=>r.get(i.name)!==i.hash))&&(t=(await ge.all()).schemas,localStorage.setItem(xt,JSON.stringify(t)))}catch(n){if(!t.length)throw n}return Nn(t,e)}const St=["learning_rate","unet_lr","text_encoder_lr","learning_rate_te","learning_rate_te1","learning_rate_te2","sigmoid_scale","guidance_scale"],sr=["vae","reg_data_dir","network_weights","noise_offset","multires_noise_iterations","multires_noise_discount","caption_dropout_rate","network_dropout","scale_weight_norms","gpu_ids"],lr=["pretrained_model_name_or_path","vae","qwen3","llm_adapter_path","t5_tokenizer_path","resume","train_data_dir","reg_data_dir","output_dir","logging_dir","network_weights","sample_prompts"],ur=["lycoris_algo","conv_dim","conv_alpha","dropout","dylora_unit","lokr_factor","train_norm","down_lr_weight","mid_lr_weight","up_lr_weight","block_lr_zero_threshold","enable_block_weights","network_args_custom","optimizer_args_custom","enable_base_weight","prodigy_d0","prodigy_d_coef","ui_custom_params"],cr=["v2","v_parameterization","scale_v_pred_loss_like_noise_pred","clip_skip","learning_rate_te","stop_text_encoder_training"],fr=["learning_rate_te1","learning_rate_te2"],mt=["prompt_file","sample_width","sample_height","sample_cfg","sample_seed","sample_steps","sample_sampler","randomly_choice_prompt","sample_at_first","sample_every_n_epochs","sample_every_n_steps","positive_prompts","negative_prompts","sample_prompts"],dr={model_train_type:"sd-lora",enable_bucket:!0,min_bucket_reso:256,max_bucket_reso:1024,save_model_as:"safetensors",network_train_unet_only:!1,network_train_text_encoder_only:!1,learning_rate:1e-4,network_module:"networks.lora",logging_dir:"./logs",caption_extension:".txt",max_token_length:255,seed:1337,prior_loss_weight:1,clip_skip:2,save_precision:"fp16",persistent_data_loader_workers:!0};function $e(e){return Array.isArray(e)?e:[]}function Oe(e,t){t.forEach(n=>delete e[n])}function gr(e,t){const n=t==="lora-basic"?{...dr,...Ee(e)}:Ee(e);let r=[],a=[];n.network_module==="lycoris.kohya"?(r.push(`conv_dim=${n.conv_dim}`,`conv_alpha=${n.conv_alpha}`,`dropout=${n.dropout}`,`algo=${n.lycoris_algo}`),n.lokr_factor&&r.push(`factor=${n.lokr_factor}`),n.train_norm&&r.push("train_norm=True")):n.network_module==="networks.dylora"&&r.push(`unit=${n.dylora_unit}`);const i=String(n.optimizer_type||"");i.toLowerCase().startsWith("dada")?(["DAdaptation","DAdaptAdam"].includes(i)&&(a=["decouple=True","weight_decay=0.01"]),n.learning_rate=1,n.unet_lr=1,n.text_encoder_lr=1):i.toLowerCase()==="prodigy"&&(a=["decouple=True","weight_decay=0.01","use_bias_correction=True",`d_coef=${n.prodigy_d_coef}`],n.lr_warmup_steps&&a.push("safeguard_warmup=True"),n.prodigy_d0&&a.push(`d0=${n.prodigy_d0}`)),n.enable_block_weights&&r.push(`down_lr_weight=${n.down_lr_weight}`,`mid_lr_weight=${n.mid_lr_weight}`,`up_lr_weight=${n.up_lr_weight}`,`block_lr_zero_threshold=${n.block_lr_zero_threshold}`),n.enable_base_weight?(typeof n.base_weights=="string"&&(n.base_weights=n.base_weights.split(/\r?\n/).filter(Boolean)),typeof n.base_weights_multiplier=="string"&&(n.base_weights_multiplier=n.base_weights_multiplier.split(/\r?\n/).filter(Boolean).map(Number))):Oe(n,["base_weights","base_weights_multiplier"]),r.push(...$e(n.network_args).map(String),...$e(n.network_args_custom).map(String)),a.push(...$e(n.optimizer_args).map(String),...$e(n.optimizer_args_custom).map(String)),r.length?n.network_args=r:delete n.network_args,a.length?n.optimizer_args=a:delete n.optimizer_args,mt.some(f=>{const c=n[f];return c!==void 0&&c!==""&&(!Array.isArray(c)||c.length>0)})&&(n.enable_preview=!0),n.enable_preview||Oe(n,mt);for(const f of St){if(n[f]===void 0)continue;const c=Number.parseFloat(String(n[f]));n[f]=Number.isNaN(c)?0:c}for(const f of sr){const c=n[f];(c===0||c===""||Array.isArray(c)&&!c.length)&&delete n[f]}for(const f of lr)typeof n[f]=="string"&&(n[f]=n[f].replaceAll("\\","/"));typeof e.ui_custom_params=="string"&&e.ui_custom_params.trim()&&Object.assign(n,_t(e.ui_custom_params));const g=String(n.model_train_type||"").startsWith("sdxl");return g&&(n.learning_rate_te1||n.learning_rate_te2)&&(n.train_text_encoder=!0),Oe(n,g?cr:fr),Oe(n,ur),Array.isArray(n.gpu_ids)&&(n.gpu_ids=n.gpu_ids.map(f=>String(f).match(/GPU (\d+):/)?.[1]||String(f)).filter(Boolean)),n}function mr(e){const t=Ee(e);for(const n of St){const r=t[n];if(typeof r!="number")continue;const a=r.toExponential();t[n]=a.length<=6?a:String(r)}if(Array.isArray(t.network_args)){for(const n of t.network_args){const[r,...a]=String(n).split("="),i=a.join("=");r&&(t[r==="algo"?"lycoris_algo":r]=i)}delete t.network_args}return Array.isArray(t.optimizer_args)&&(t.optimizer_args_custom=t.optimizer_args,delete t.optimizer_args),t}function pr(e){const t=[],n=[],r=String(e.optimizer_type||"");r.startsWith("DAdapt")&&e.lr_scheduler!=="constant"&&t.push(Y.global.t("training.diagnostics.dadaptScheduler")),r.toLowerCase().startsWith("prodigy")&&(e.unet_lr!==1||e.text_encoder_lr!==1)&&t.push(Y.global.t("training.diagnostics.prodigyLr")),e.network_module==="networks.oft"&&e.model_train_type!=="sdxl-lora"&&n.push(Y.global.t("training.diagnostics.oftSdxl"));for(const[a,i]of[["cache_text_encoder_outputs","shuffle_caption"],["noise_offset","multires_noise_iterations"],["cache_latents","color_aug"],["cache_latents","random_crop"]])e[a]&&e[i]&&n.push(Y.global.t("training.diagnostics.conflict",{left:a,right:i}));return{warnings:t,errors:n}}const $t=["anima","sd15","sdxl","flux","lumina"],Ne=["kohya","anima-fast","musubi"],Ce=["lora","finetune"],ze={model:"anima",engine:"kohya",target:"lora"},me=[{model:"anima",engine:"kohya",target:"lora",schemaName:"sd3-lora"},{model:"anima",engine:"anima-fast",target:"lora",schemaName:"anima-lora-fast"},{model:"anima",engine:"kohya",target:"finetune",schemaName:"anima-finetune"},{model:"sdxl",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sdxl-lora"},storageKey:"sdxl-lora",legacyStorageKey:"lora-master"},{model:"sd15",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sd-lora"},storageKey:"sd15-lora"},{model:"sdxl",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sdxl-finetune"},storageKey:"sdxl-dreambooth",legacyStorageKey:"dreambooth"},{model:"sd15",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sd-dreambooth"},storageKey:"sd15-dreambooth"},{model:"flux",engine:"kohya",target:"lora",schemaName:"flux-lora"},{model:"lumina",engine:"kohya",target:"lora",schemaName:"lumina2-lora"}],hr={"sd3-lora":{titleKey:"training.schemas.sd3-lora.title",areaKey:"training.schemas.sd3-lora.area"},"anima-lora-fast":{titleKey:"training.schemas.anima-lora-fast.title",areaKey:"training.schemas.anima-lora-fast.area"},"anima-finetune":{titleKey:"training.schemas.anima-finetune.title",areaKey:"training.schemas.anima-finetune.area"},"lora-master":{titleKey:"training.schemas.lora-master.title",areaKey:"training.schemas.lora-master.area"},dreambooth:{titleKey:"training.schemas.dreambooth.title",areaKey:"training.schemas.dreambooth.area"},"flux-lora":{titleKey:"training.schemas.flux-lora.title",areaKey:"training.schemas.flux-lora.area"},"lumina2-lora":{titleKey:"training.schemas.lumina2-lora.title",areaKey:"training.schemas.lumina2-lora.area"}};function yr(e){return e==="sd"?"sdxl":$t.includes(e)?e:void 0}function Ot(e,t,n){return me.find(r=>r.model===e&&r.engine===t&&r.target===n)}function vr(e){return me.find(t=>t.schemaName===e)}function br(e){if(!(typeof e!="string"||!e))return me.find(t=>t.defaults?.model_train_type===e)??me.find(t=>t.schemaName===e)}function pe(e,t){return me.some(n=>n.model===e&&n.engine===t)}function he(e,t,n){return!!Ot(e,t,n)}function _r(e){return Ne.find(t=>pe(e,t))}function wr(e,t){return Ce.find(n=>he(e,t,n))}const kr={class:"schema-form-binder"},xr={key:0,class:"section-heading"},Sr={key:1,class:"schema-state"},$r={key:2,class:"schema-state schema-error"},Or={class:"panel-rail"},Ar={class:"rail-label"},Er=["disabled"],Nr=["disabled"],Cr={class:"panel-full"},Ir={key:0,class:"panel-copy"},Tr={key:1,class:"param-diagnostics"},Mr={key:2,class:"started-task"},jr=["href"],Dr={class:"preview-actions"},Vr=["title","aria-label"],Fr={class:"panel-actions"},Pr=["disabled"],Rr={class:"submit-row"},Br=["disabled"],zr=["disabled"],Lr={class:"config-list"},Kr=["onClick"],Ur=["onClick"],Jr={key:0},qr={class:"config-list"},Hr=["onClick"],Wr={key:0},At=ee({__name:"TrainingPage",props:{title:{},area:{},schemaName:{},bare:{type:Boolean,default:!1},fieldDefaults:{default:void 0},storageKey:{default:void 0},legacyStorageKey:{default:void 0}},setup(e){const t=e,n=vt(),{t:r}=te(),a=F(),i=F({}),u=F(!0),g=F(""),f=F({}),c=F(!1),w=F(!1),O=Ht(),A=z(()=>O.runningTasks.at(-1));let _;function v(){try{const x=JSON.parse(localStorage.getItem("ui-configs")||"{}");return!!(x&&typeof x=="object"&&x.training_preview_collapsed)}catch{return!1}}function I(x){try{const N=JSON.parse(localStorage.getItem("ui-configs")||"{}"),T=N&&typeof N=="object"?N:{};localStorage.setItem("ui-configs",JSON.stringify({...T,training_preview_collapsed:x}))}catch{}}const E=F(!1),D=F([]),l=F([]),s=F(!1),o=F(),d=F(v()),p=F(),h=z(()=>a.value?Tn(a.value,i.value):{}),S=z(()=>gr(h.value,t.schemaName)),C=z(()=>pr(S.value)),ve=z(()=>ft(S.value)),nt=z(()=>l.value.filter(x=>!x.metadata.train_type||x.metadata.train_type===t.schemaName)),be=z(()=>{if(!a.value)return[];const x=new Map;for(const N of a.value.sections)for(const T of N.fields)Me(T,i.value)&&x.set(T.key,T);return a.value.sections.filter(N=>N.fields.some(T=>!T.hidden&&x.get(T.key)===T)).map(N=>({id:N.id,title:N.title}))}),Et=z(()=>o.value?`${o.value.train_log_path||"/train-log"}?${o.value.train_log_query||`task_id=${encodeURIComponent(o.value.task_id)}`}`:"");function _e(){return t.storageKey||t.schemaName}function we(){return`configs-${_e()}-autosave`}function je(){return`configs-${_e()}`}function Nt(){if(!(!t.legacyStorageKey||t.legacyStorageKey===_e()))for(const x of["","-autosave"]){const N=`configs-${t.legacyStorageKey}${x}`,T=`configs-${_e()}${x}`,B=localStorage.getItem(N);B!==null&&localStorage.getItem(T)===null&&localStorage.setItem(T,B)}}function rt(){try{D.value=JSON.parse(localStorage.getItem(je())||"[]")}catch{D.value=[]}}async function it(x,N){const T=await le.validateImport(t.schemaName,x);if(T.result==="reject")throw new Error(T.errors?.join(` -`)||T.message||r("training.importMsg.reject"));if(T.result==="redirect"&&T.target_path){await ue.confirm(T.message||r("training.importMsg.mismatchConfirm"),r("training.importMsg.mismatchTitle"),{confirmButtonText:r("training.importMsg.jump"),cancelButtonText:r("training.importMsg.cancel"),type:"warning"}),sessionStorage.setItem("mikazuki-pending-import",JSON.stringify(T.config||x));const B=br((T.config||x).model_train_type);B?await n.push({path:"/training",query:{model:B.model,engine:B.engine,target:B.target}}):await n.push(T.target_path);return}i.value={...xe(a.value),...mr(T.config||x)},T.notice&&R.info(T.notice),R.success(N??r("training.importMsg.imported"))}function Ct(){try{const x=JSON.parse(sessionStorage.getItem("mikazuki-carry-over")||"null");return x&&typeof x=="object"?x:{}}catch{return{}}}async function De(){u.value=!0,g.value="";try{const x=await or(t.schemaName),N={...xe(x),...t.fieldDefaults},T=Ct();sessionStorage.removeItem("mikazuki-carry-over");const B={};for(const[W,Fe]of Object.entries(T))W in N&&!(t.fieldDefaults&&W in t.fieldDefaults)&&(B[W]=Fe);const Q={...N,...B};try{const W=JSON.parse(localStorage.getItem(we())||"null");i.value=W&&typeof W=="object"?{...Q,...W}:Q}catch{i.value=Q}const V=await ge.graphicCards();if(V.length>1){const W=V.map((ke,Rt)=>typeof ke=="object"?ke.value??ke.label??Rt:ke),Fe={key:"gpu_ids",type:"array",role:"select",description:r("training.gpu.fieldDescription"),options:W,conditions:[]};x.sections.push({id:"gpu-settings",title:r("training.gpu.sectionTitle"),fields:[Fe]})}a.value=x;const oe=sessionStorage.getItem("mikazuki-pending-import");oe&&(sessionStorage.removeItem("mikazuki-pending-import"),await it(JSON.parse(oe),r("training.importMsg.importedRedirect")))}catch(x){g.value=x instanceof Error?x.message:r("training.schemaLoadFail")}finally{u.value=!1}}function Ve(){if(!a.value)return!1;f.value=Mn(a.value,i.value);const x=[...Object.values(f.value),...C.value.errors];return x.length?(R.error(x[0]),!1):(C.value.warnings.length?R.warning(C.value.warnings[0]):R.success(r("training.validatePassed")),!0)}function at(){const x={time:new Date().toLocaleString(),value:Ee(i.value)};typeof i.value.output_name=="string"&&(x.name=i.value.output_name),D.value.push(x),localStorage.setItem(je(),JSON.stringify(D.value)),R.success(r("training.historyDialog.saved"))}function It(x){D.value.splice(x,1),localStorage.setItem(je(),JSON.stringify(D.value))}async function Tt(){if(E.value=!0,!l.value.length){s.value=!0;try{l.value=await le.presets()}catch(x){R.error(x instanceof Error?x.message:r("training.presetsDialog.loadFail"))}finally{s.value=!1}}}function Mt(x){i.value={...i.value,...x.data},E.value=!1,R.success(r("training.presetsDialog.applied",{name:x.metadata.name}))}async function jt(x){const N=x.target,T=N.files?.[0];if(N.value="",!!T)try{const B=await T.text(),Q=T.name.toLowerCase().endsWith(".json")?JSON.parse(B):_t(B);await it(Q)}catch(B){B!=="cancel"&&B!=="close"&&R.error(B instanceof Error?B.message:r("training.importMsg.fail"))}}async function Dt(){if(Ve())try{const x=await le.normalizeExport(t.schemaName,S.value),N=new Blob([ft(x.config)],{type:"application/toml;charset=utf-8"}),T=URL.createObjectURL(N),B=document.createElement("a");B.href=T,B.download=`${String(x.config.output_name||t.schemaName)}.toml`,B.click(),URL.revokeObjectURL(T),x.warnings.forEach(Q=>R.warning(Q))}catch(x){R.error(x instanceof Error?x.message:r("training.exportFail"))}}async function ot(){if(!(!Ve()||c.value))try{if(await ue.confirm(r("training.submitConfirm.message"),r("training.submitConfirm.title"),{confirmButtonText:r("training.submitConfirm.confirm"),cancelButtonText:r("training.submitConfirm.cancel"),type:"warning"}),c.value=!0,t.schemaName==="anima-lora-fast"){const x=await le.animaFastPreflight(S.value);if(!x.ok)throw new Error(x.errors?.join(` -`)||r("training.submitConfirm.preflightFail"));x.warnings?.forEach(N=>R.warning(N))}o.value=await le.run(S.value),O.refresh({silent:!0}),at(),R.success(r("training.submitConfirm.started",{id:o.value.task_id}))}catch(x){x!=="cancel"&&x!=="close"&&R.error(x instanceof Error?x.message:r("training.submitConfirm.fail"))}finally{c.value=!1}}async function Vt(){if(a.value){try{await ue.confirm(r("training.actions.resetConfirm"),r("training.resetDialog.title"),{confirmButtonText:r("training.actions.reset"),cancelButtonText:r("training.resetDialog.cancel"),type:"warning"})}catch{return}localStorage.removeItem(we()),i.value={...xe(a.value),...t.fieldDefaults},R.success(r("training.actions.resetDone"))}}async function Ft(){try{await navigator.clipboard.writeText(ve.value),R.success(r("training.preview.copied"))}catch{R.error(r("training.preview.copyFail"))}}function Pt(){p.value?.click()}async function st(){const x=A.value;if(x)try{await ue.confirm(r("tasks.terminate.confirm",{id:x.id}),r("tasks.terminate.title"),{confirmButtonText:r("tasks.terminate.confirmButton"),cancelButtonText:r("tasks.terminate.cancel"),type:"warning"}),await O.terminate(x.id),R.success(r("tasks.terminate.success"))}catch(N){N!=="cancel"&&N!=="close"&&R.error(N instanceof Error?N.message:r("tasks.terminate.fail"))}}return ce(()=>t.schemaName,()=>{o.value=void 0,rt(),De()}),ce(i,x=>localStorage.setItem(we(),JSON.stringify(x)),{deep:!0}),ce(d,x=>I(x)),Ge(()=>{Nt(),rt(),De(),O.refresh(),_=window.setInterval(()=>O.refresh({silent:!0}),2e3)}),Ze(()=>{window.clearInterval(_),localStorage.setItem(we(),JSON.stringify(i.value)),sessionStorage.setItem("mikazuki-carry-over",JSON.stringify(i.value))}),(x,N)=>{const T=G("RouterLink"),B=G("el-dialog"),Q=Lt("loading");return k(),$(U,null,[m("div",{class:Z(["training-layout schema-training-layout",{bare:e.bare,"preview-docked":d.value}])},[m("section",{class:Z(["form-canvas",{"with-schema-toc":be.value.length>1}])},[m("div",{class:Z(["schema-form-shell",{"has-toc":be.value.length>1}])},[be.value.length>1?(k(),J(ir,{key:0,sections:be.value},null,8,["sections"])):P("",!0),m("div",kr,[e.bare?P("",!0):(k(),$("div",xr,[m("span",null,b(e.area),1),m("h1",null,b(e.title),1),m("p",null,b(y(r)("training.intro")),1)])),m("input",{ref_key:"importInput",ref:p,class:"visually-hidden",type:"file",accept:".toml,.json",onChange:jt},null,544),Ue(x.$slots,"form-top"),u.value?(k(),$("div",Sr,[m("strong",null,b(y(r)("training.loadingSchema")),1),m("span",null,b(y(r)("training.loadingSchemaHint")),1)])):g.value?(k(),$("div",$r,[m("strong",null,b(y(r)("training.schemaError")),1),m("span",null,b(g.value),1),m("button",{onClick:De},b(y(r)("training.retry")),1)])):a.value?(k(),J(Wn,{key:3,modelValue:i.value,"onUpdate:modelValue":N[0]||(N[0]=V=>i.value=V),schema:a.value,errors:f.value},null,8,["modelValue","schema","errors"])):P("",!0)])],2)],2),m("aside",{class:Z(["control-panel",{collapsed:d.value}])},[m("div",Or,[m("button",{class:"rail-handle",onClick:N[1]||(N[1]=V=>d.value=!1)},[N[6]||(N[6]=m("span",{class:"rail-arrow","aria-hidden":"true"},"←",-1)),C.value.errors.length||C.value.warnings.length?(k(),$("span",{key:0,class:Z(["rail-alert",{error:C.value.errors.length>0}])},null,2)):P("",!0),m("span",Ar,b(y(r)("training.preview.railTitle")),1),m("b",null,b(y(r)("training.preview.count",{n:Object.keys(S.value).length})),1)]),m("button",{class:"primary-action rail-submit",disabled:!a.value||c.value||C.value.errors.length>0,onClick:ot},b(c.value?y(r)("training.railSubmitting"):y(r)("training.railStart")),9,Er),m("button",{class:"danger-action rail-stop",disabled:!A.value||!!y(O).terminatingId,onClick:st},b(y(r)("training.railStop")),9,Nr)]),m("div",Cr,[e.bare?P("",!0):(k(),$("div",Ir,[N[7]||(N[7]=m("span",{class:"eyebrow"},"TRAINING CONTROL",-1)),m("h2",null,b(e.title),1),m("p",null,b(y(r)("training.panelHint")),1)])),C.value.errors.length||C.value.warnings.length?(k(),$("div",Tr,[(k(!0),$(U,null,H(C.value.errors,V=>(k(),$("p",{key:V,class:"error"},b(V),1))),128)),(k(!0),$(U,null,H(C.value.warnings,V=>(k(),$("p",{key:V},b(V),1))),128))])):P("",!0),o.value?(k(),$("div",Mr,[m("strong",null,b(y(r)("training.startedTask")),1),m("code",null,b(o.value.task_id),1),m("a",{href:Et.value,target:"_blank",rel:"noreferrer"},b(y(r)("training.openLog")),9,jr),L(T,{to:"/tasks"},{default:K(()=>[ie(b(y(r)("training.viewTasks")),1)]),_:1})])):P("",!0),m("section",{class:Z(["preview-panel",{collapsed:d.value}])},[m("header",null,[m("span",null,b(y(r)("training.preview.panelTitle")),1),m("b",null,b(y(r)("training.preview.count",{n:Object.keys(S.value).length})),1),m("span",Dr,[m("button",{class:"preview-collapse",title:d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),"aria-label":d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),onClick:N[2]||(N[2]=V=>d.value=!d.value)},b(d.value?"←":"→"),9,Vr),m("button",{onClick:Ft},b(y(r)("training.preview.copy")),1)])]),de(m("pre",null,b(ve.value),513),[[ht,!d.value]])],2),m("div",Fr,[m("button",{onClick:Tt},b(y(r)("training.toolbar.presets")),1),m("button",{onClick:at},b(y(r)("training.toolbar.save")),1),m("button",{onClick:Pt},b(y(r)("training.toolbar.import")),1),m("button",{onClick:N[3]||(N[3]=V=>w.value=!0)},b(y(r)("training.toolbar.history")),1),m("button",{onClick:Dt},b(y(r)("training.toolbar.export")),1),m("button",{onClick:Vt},b(y(r)("training.toolbar.reset")),1)]),m("button",{class:"secondary-action schema-validate",disabled:!a.value,onClick:Ve},b(y(r)("training.validate")),9,Pr),m("div",Rr,[m("button",{class:"primary-action train-submit",disabled:!a.value||c.value||C.value.errors.length>0,onClick:ot},b(c.value?y(r)("training.submitting"):y(r)("training.start")),9,Br),m("button",{class:"danger-action stop-training",disabled:!A.value||!!y(O).terminatingId,onClick:st},b(y(O).terminatingId?y(r)("tasks.detail.stopping"):y(r)("training.stop")),9,zr)])])],2)],2),L(B,{modelValue:w.value,"onUpdate:modelValue":N[4]||(N[4]=V=>w.value=V),title:y(r)("training.historyDialog.title"),width:"min(760px, 92vw)"},{default:K(()=>[m("div",Lr,[(k(!0),$(U,null,H(D.value,(V,oe)=>(k(),$("article",{key:`${V.time}-${oe}`},[m("div",null,[m("strong",null,b(V.name||y(r)("training.historyDialog.unnamed")),1),m("span",null,b(V.time),1)]),m("button",{onClick:W=>{i.value={...y(xe)(a.value),...V.value},w.value=!1}},b(y(r)("training.historyDialog.use")),9,Kr),m("button",{class:"danger",onClick:W=>It(oe)},b(y(r)("training.historyDialog.delete")),9,Ur)]))),128)),D.value.length?P("",!0):(k(),$("p",Jr,b(y(r)("training.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"]),L(B,{modelValue:E.value,"onUpdate:modelValue":N[5]||(N[5]=V=>E.value=V),title:y(r)("training.presetsDialog.title"),width:"min(760px, 92vw)"},{default:K(()=>[de((k(),$("div",qr,[(k(!0),$(U,null,H(nt.value,V=>(k(),$("article",{key:V.metadata.name},[m("div",null,[m("strong",null,b(V.metadata.name),1),m("span",null,b(V.metadata.description||`${V.metadata.author||""} ${V.metadata.version||""}`),1)]),m("button",{onClick:oe=>Mt(V)},b(y(r)("training.presetsDialog.apply")),9,Hr)]))),128)),!s.value&&!nt.value.length?(k(),$("p",Wr,b(y(r)("training.presetsDialog.empty")),1)):P("",!0)])),[[Q,s.value]])]),_:1},8,["modelValue","title"])],64)}}}),Gr=["title"],Zr={class:"engine-credit","data-testid":"anima-fast-credit"},Yr={class:"fast-main"},Xr={class:"fast-intro"},Qr={key:0,class:"eyebrow"},ei={key:1},ti={key:2},ni={class:"engine-credit","data-testid":"anima-fast-credit"},ri=["data-state"],ii={key:3,class:"audit-errors"},ai={class:"fast-actions"},oi=["disabled"],si=["disabled"],li={class:"install-console"},ui={class:"install-progress"},ci=ee({__name:"AnimaFastPage",props:{bare:{type:Boolean,default:!1}},setup(e){const t=F({id:"anima-fast",state:"unknown",featureEnabled:!0}),n=F(!1),r=F([]),a=F(0),i=F("");let u,g,f;const{t:c}=te(),w=z(()=>t.value.state==="ready"),O=z(()=>["installing","auditing"].includes(t.value.state)),A=z(()=>{const s=`settings.engines.state.${t.value.state}`,o=c(s);return o===s?t.value.state:o}),_=z(()=>{if(!t.value.featureEnabled||t.value.state==="disabled")return c("settings.engines.hint.disabled");const s=`settings.engines.hint.${t.value.state}`,o=c(s);return o===s?c("settings.engines.hint.unknown"):o});function v(){u!==void 0&&(window.clearInterval(u),u=void 0)}function I(){g?.close(),f?.close(),g=void 0,f=void 0}function E(s,o,d){I(),g=new EventSource(o||`/api/plugins/anima-lora/install/log/stream/${s}`),g.onmessage=p=>{try{const h=JSON.parse(p.data);h.text&&r.value.push(h.text),h.done&&g?.close()}catch{r.value.push(p.data)}},f=new EventSource(d||`/api/plugins/anima-lora/install/progress/stream/${s}`),f.onmessage=p=>{try{const h=JSON.parse(p.data);h.type==="progress"&&(a.value=Number(h.percent||0),i.value=h.message||h.phase||""),(h.done||h.type==="done")&&f?.close()}catch{}}}async function D(s=!0){try{t.value=await Re.status("anima-fast"),w.value&&v();const o=t.value.facts?.task_id;o&&O.value&&!g&&E(o)}catch(o){s&&R.error(o instanceof Error?o.message:c("settings.engines.msg.statusFail"))}}async function l(s=!1){try{await ue.confirm(c(s?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),c(s?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),n.value=!0,r.value=[],a.value=0;const o=s?await Re.repair("anima-fast"):await Re.install("anima-fast");if(o.alreadyReady)return t.value=o.status||t.value,w.value&&v(),R.success(c("settings.engines.msg.ready"));o.taskId&&(E(o.taskId,o.logStream,o.progressStream),u||(u=window.setInterval(()=>D(!1),2e3))),await D(),R.success(c("settings.engines.msg.started"))}catch(o){o!=="cancel"&&o!=="close"&&R.error(o instanceof Error?o.message:c("settings.engines.msg.fail"))}finally{n.value=!1}}return Ge(async()=>{await D(),w.value||(u=window.setInterval(()=>D(!1),2e3))}),Ze(()=>{v(),I()}),(s,o)=>{const d=G("i18n-t");return w.value?(k(),J(At,{key:0,title:"Anima LoRA Fast",area:"anima-lora-fast","schema-name":"anima-lora-fast",bare:e.bare},{"form-top":K(()=>[Ue(s.$slots,"form-top"),m("p",{class:"engine-ready-chip","data-testid":"engine-ready-chip",title:y(c)("settings.engines.hint.ready")},[o[4]||(o[4]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,b(y(c)("settings.engines.readyChip")),1)],8,Gr),m("p",Zr,[L(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:K(()=>[...o[5]||(o[5]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:K(()=>[...o[6]||(o[6]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])]),_:3},8,["bare"])):(k(),$("div",{key:1,class:Z(["fast-page",{bare:e.bare}])},[m("div",Yr,[Ue(s.$slots,"form-top"),L(tn,{state:t.value.state,title:A.value,hint:_.value,loading:n.value,"show-install":t.value.featureEnabled&&!O.value,"show-reinstall":t.value.state==="broken",onInstall:o[0]||(o[0]=p=>l(!1)),onReinstall:o[1]||(o[1]=p=>l(!0))},null,8,["state","title","hint","loading","show-install","show-reinstall"]),m("section",Xr,[e.bare?P("",!0):(k(),$("span",Qr,"ANIMA FAST RUNTIME")),e.bare?P("",!0):(k(),$("h1",ei,"Anima LoRA Fast")),e.bare?P("",!0):(k(),$("p",ti,b(y(c)("animaFast.intro")),1)),m("p",ni,[L(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:K(()=>[...o[7]||(o[7]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:K(()=>[...o[8]||(o[8]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})]),m("div",{class:"fast-state","data-state":t.value.state},[m("span",null,b(A.value),1),m("strong",null,b(t.value.state),1)],8,ri),t.value.facts?.audit?.errors?.length?(k(),$("div",ii,[m("strong",null,b(y(c)("animaFast.auditTitle")),1),(k(!0),$(U,null,H(t.value.facts.audit.errors,p=>(k(),$("p",{key:p},b(p),1))),128))])):P("",!0),m("div",ai,[m("button",{class:"primary-action",disabled:n.value||O.value||!t.value.featureEnabled,onClick:o[2]||(o[2]=p=>l(!1))},b(O.value?y(c)("animaFast.installWorking"):y(c)("animaFast.install")),9,oi),t.value.state==="broken"?(k(),$("button",{key:0,class:"secondary-action",disabled:n.value,onClick:o[3]||(o[3]=p=>l(!0))},b(y(c)("settings.engines.actions.reinstall")),9,si)):P("",!0),L(y(pt),{class:"secondary-action",to:"/settings/engines"},{default:K(()=>[ie(b(y(c)("settings.engines.actions.manage")),1)]),_:1})])])]),m("aside",li,[m("header",null,[m("span",null,b(i.value||y(c)("animaFast.consoleIdle")),1),m("b",null,b(a.value)+"%",1)]),m("div",ui,[m("i",{style:Kt({width:`${a.value}%`})},null,4)]),m("pre",null,b(r.value.length?r.value.join(` -`):y(c)("animaFast.consoleWaiting")),1)])],2))}}}),fi={class:"workbench-selector"},di={class:"selector-card"},gi={class:"selector-grid"},mi=["value"],pi=["value","disabled"],hi={key:0,class:"selector-hint"},yi={class:"selector-card"},vi=["aria-label"],bi=["disabled","onClick"],_i={key:0,class:"selector-hint"},Le=ee({__name:"TrainingSelector",props:{model:{required:!0},modelModifiers:{},engine:{required:!0},engineModifiers:{},target:{required:!0},targetModifiers:{}},emits:["update:model","update:engine","update:target"],setup(e){const t=Pe(e,"model"),n=Pe(e,"engine"),r=Pe(e,"target"),{t:a}=te(),i=z(()=>Ne.filter(g=>!pe(t.value,g))),u=z(()=>Ce.filter(g=>!he(t.value,n.value,g)));return(g,f)=>(k(),$("div",fi,[m("div",di,[m("h2",null,b(y(a)("training.selector.group")),1),m("div",gi,[m("label",null,[ie(b(y(a)("training.selector.model"))+" ",1),de(m("select",{"onUpdate:modelValue":f[0]||(f[0]=c=>t.value=c)},[(k(!0),$(U,null,H(y($t),c=>(k(),$("option",{key:c,value:c},b(y(a)(`training.selector.models.${c}`)),9,mi))),128))],512),[[ut,t.value]])]),m("label",null,[ie(b(y(a)("training.selector.engine"))+" ",1),de(m("select",{"onUpdate:modelValue":f[1]||(f[1]=c=>n.value=c)},[(k(!0),$(U,null,H(y(Ne),c=>(k(),$("option",{key:c,value:c,disabled:!y(pe)(t.value,c)},b(y(a)(`training.selector.engines.${c}`)),9,pi))),128))],512),[[ut,n.value]])]),i.value.length?(k(),$("p",hi,b(y(a)("training.selector.unsupportedForModel",{list:i.value.map(c=>y(a)(`training.selector.engines.${c}`)).join(" / ")})),1)):P("",!0)])]),m("div",yi,[m("h2",null,b(y(a)("training.selector.target")),1),m("div",{class:"segmented",role:"group","aria-label":y(a)("training.selector.targetType")},[(k(!0),$(U,null,H(y(Ce),c=>(k(),$("button",{key:c,class:Z({active:r.value===c}),disabled:!y(he)(t.value,n.value,c),onClick:w=>r.value=c},b(y(a)(`training.selector.targets.${c}`)),11,bi))),128))],8,vi),u.value.length?(k(),$("p",_i,b(y(a)("training.selector.unsupportedForModel",{list:u.value.map(c=>y(a)(`training.selector.targets.${c}`)).join(" / ")})),1)):P("",!0)])]))}}),wi={class:"workbench-header"},Ke=ee({__name:"WorkbenchHeader",setup(e){const{t}=te();return(n,r)=>(k(),$("header",wi,[m("div",null,[m("h1",null,b(y(t)("training.title")),1),m("p",null,b(y(t)("training.subtitle")),1)])]))}}),ki={class:"workbench-page"},xi={key:0,class:"workbench-fallback"},Si={class:"unsupported-hint"},Ii=ee({__name:"TrainingWorkbenchPage",setup(e){const t=Ut(),n=vt(),{t:r}=te(),a=F(ze.model),i=F(ze.engine),u=F(ze.target);function g(A){return Ne.includes(A)}function f(A){return Ce.includes(A)}function c(){const A=t.query,_=typeof A.schema=="string"?vr(A.schema):void 0;if(_){a.value=_.model,i.value=_.engine,u.value=_.target;return}const v=!!(A.model||A.engine||A.target),I=yr(A.model);if(I&&(a.value=I),g(A.engine)&&(i.value=A.engine),f(A.target)&&(u.value=A.target),!v){const E=Jt(a.value);E&&(g(E.engine)&&pe(a.value,E.engine)&&(i.value=E.engine),f(E.target)&&he(a.value,i.value,E.target)&&(u.value=E.target))}}c();const w=z(()=>Ot(a.value,i.value,u.value)),O=z(()=>{if(!w.value)return;const A=hr[w.value.schemaName];return{title:r(A.titleKey),area:r(A.areaKey)}});return ce([a,i,u],()=>{let A=!1;pe(a.value,i.value)||(i.value=_r(a.value)??i.value,A=!0),he(a.value,i.value,u.value)||(u.value=wr(a.value,i.value)??u.value,A=!0),A&&R.info(r("training.selector.autoAdjusted")),qt(a.value,i.value,u.value),n.replace({query:{model:a.value,engine:i.value,target:u.value}})}),(A,_)=>(k(),$("div",ki,[w.value?w.value.schemaName==="anima-lora-fast"?(k(),J(ci,{key:1,bare:""},{"form-top":K(()=>[L(Ke),L(Le,{model:a.value,"onUpdate:model":_[3]||(_[3]=v=>a.value=v),engine:i.value,"onUpdate:engine":_[4]||(_[4]=v=>i.value=v),target:u.value,"onUpdate:target":_[5]||(_[5]=v=>u.value=v)},null,8,["model","engine","target"])]),_:1})):O.value?(k(),J(At,{key:w.value.storageKey||w.value.schemaName,bare:"",title:O.value.title,area:O.value.area,"schema-name":w.value.schemaName,"field-defaults":w.value.defaults,"storage-key":w.value.storageKey,"legacy-storage-key":w.value.legacyStorageKey},{"form-top":K(()=>[L(Ke),L(Le,{model:a.value,"onUpdate:model":_[6]||(_[6]=v=>a.value=v),engine:i.value,"onUpdate:engine":_[7]||(_[7]=v=>i.value=v),target:u.value,"onUpdate:target":_[8]||(_[8]=v=>u.value=v)},null,8,["model","engine","target"])]),_:1},8,["title","area","schema-name","field-defaults","storage-key","legacy-storage-key"])):P("",!0):(k(),$("div",xi,[L(Ke),L(Le,{model:a.value,"onUpdate:model":_[0]||(_[0]=v=>a.value=v),engine:i.value,"onUpdate:engine":_[1]||(_[1]=v=>i.value=v),target:u.value,"onUpdate:target":_[2]||(_[2]=v=>u.value=v)},null,8,["model","engine","target"]),m("div",Si,[m("strong",null,b(y(r)("training.selector.unsupported")),1)])]))]))}});export{Ii as default}; diff --git a/frontend/dist/assets/TrainingWorkbenchPage-C86jNxDA.js b/frontend/dist/assets/TrainingWorkbenchPage-C86jNxDA.js new file mode 100644 index 00000000..06f6e846 --- /dev/null +++ b/frontend/dist/assets/TrainingWorkbenchPage-C86jNxDA.js @@ -0,0 +1,34 @@ +import{d as ee,u as te,c as O,a as m,t as v,p as P,F as U,b as y,e as L,R as yt,w as K,f as ie,h as z,o as b,K as Y,i as G,m as Z,j as J,r as H,q as ut,s as F,B as me,L as vt,y as Ze,k as de,l as Ye,M as Lt,N as Kt,G as bt,O as Je,P as _t,Q as Ut,n as Jt,S as Pe,C as ct,T as qt}from"./index-BoQWc9mA.js";import{E as R}from"./index-BC7FDA30.js";import{E as fe}from"./index-Bff4F9zQ.js";import{e as Re,l as Ht,a as Wt,r as Gt}from"./prefs-hyqYnVPm.js";import{s as pe}from"./schemas-QXoCLd-0.js";import{u as Zt}from"./tasks-E6KkxTMs.js";const Yt=["data-state"],Xt={class:"engine-status-copy"},Qt={key:0},en={class:"engine-status-actions"},tn=["disabled"],nn=["disabled"],rn=["disabled"],an=ee({__name:"EngineStatusBar",props:{state:{},title:{},hint:{},loading:{type:Boolean},showInstall:{type:Boolean},showReinstall:{type:Boolean},showRefresh:{type:Boolean,default:!1},manageOnly:{type:Boolean,default:!1},manageTo:{default:"/settings/engines"}},emits:["refresh","install","reinstall"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=z(()=>{if(n.title)return n.title;const g=`settings.engines.state.${n.state}`,f=a(g);return f===g?n.state:f}),l=z(()=>{if(n.hint)return n.hint;const g=`settings.engines.hint.${n.state}`,f=a(g);return f===g?"":f});return(g,f)=>(b(),O("div",{class:"engine-status-bar","data-state":e.state,"data-testid":"engine-status-bar"},[m("div",Xt,[m("b",null,v(i.value),1),l.value?(b(),O("span",Qt,v(l.value),1)):P("",!0)]),m("div",en,[e.manageOnly?P("",!0):(b(),O(U,{key:0},[e.showRefresh?(b(),O("button",{key:0,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[0]||(f[0]=c=>r("refresh"))},v(y(a)("settings.engines.actions.refresh")),9,tn)):P("",!0),e.showInstall?(b(),O("button",{key:1,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[1]||(f[1]=c=>r("install"))},v(y(a)("settings.engines.actions.install")),9,nn)):P("",!0),e.showReinstall?(b(),O("button",{key:2,type:"button",class:"ghost-button",disabled:e.loading,onClick:f[2]||(f[2]=c=>r("reinstall"))},v(y(a)("settings.engines.actions.reinstall")),9,rn)):P("",!0)],64)),L(y(yt),{class:"ghost-button",to:e.manageTo},{default:K(()=>[ie(v(y(a)("settings.engines.actions.manage")),1)]),_:1},8,["to"])])],8,Yt))}});let on=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class se extends Date{#t=!1;#n=!1;#e=null;constructor(t){let n=!0,r=!0,a="Z";if(typeof t=="string"){let i=t.match(on);i?(i[1]||(n=!1,t=`0000-01-01T${t}`),r=!!i[2],r&&t[10]===" "&&(t=t.replace(" ","T")),i[2]&&+i[2]>23?t="":(a=i[3]||null,t=t.toUpperCase(),!a&&r&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=n,this.#n=r,this.#e=a)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let r=new se(t);return r.#e=n,r}static wrapAsLocalDateTime(t){let n=new se(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new se(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new se(t);return n.#t=!1,n.#e=null,n}}function sn(e,t){let n=e.slice(0,t).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function ln(e,t,n){let r=e.split(/\r\n|\n|\r/g),a="",i=(Math.log10(t+1)|0)+1;for(let l=t-1;l<=t+1;l++){let g=r[l-1];g&&(a+=l.toString().padEnd(i," "),a+=": ",a+=g,a+=` +`,l===t&&(a+=" ".repeat(i+n+2),a+=`^ +`))}return a}class j extends Error{line;column;codeblock;constructor(t,n){const[r,a]=sn(n.toml,n.ptr),i=ln(n.toml,r,a);super(`Invalid TOML document: ${t} + +${i}`,n),this.line=r,this.column=a,this.codeblock=i}}let un=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,cn=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,fn=/^[+-]?0[0-9_]/;function wt(e,t){let n=e[t++],r=n,a=n==="'",i=n===e[t]&&n===e[t+1];i&&(e[t+=2]===` +`?t++:e[t]==="\r"&&e[t+1]===` +`&&(t+=2));let l="",g=t,f=0;for(let c=t;c=48&&$<=57?$-48:$>=65&&$<=70?$-65+10:$>=97&&$<=102?$-97+10:-1;if(S<0)throw new j("invalid non-hex character in unicode escape",{toml:e,ptr:c+1});_=_<<4|S}if(_<0||_>1114111||_>=55296&&_<=57343)throw new j("invalid unicode escape",{toml:e,ptr:c});l+=String.fromCodePoint(_),g=c+1,f=0}else if(n===" "||n===" ")f=2;else{if(n==="b")l+="\b";else if(n==="t")l+=" ";else if(n==="n")l+=` +`;else if(n==="f")l+="\f";else if(n==="r")l+="\r";else if(n==="e")l+="\x1B";else if(n==='"')l+='"';else if(n==="\\")l+="\\";else throw new j("unrecognized escape sequence",{toml:e,ptr:c});g=c+1,f=0}else if(n!==" "&&n!==" "){if(f===2)throw new j("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:g});f=!a&&n==="\\"?1:0,g=c}}throw new j("unfinished string",{toml:e,ptr:t})}function dn(e,t,n,r){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return r?0n:0;let a=un.test(e);if(a||cn.test(e)){if(fn.test(e))throw new j("leading zeroes are not allowed",{toml:t,ptr:n});e=e.replace(/_/g,"");let l=+e;if(isNaN(l))throw new j("invalid number",{toml:t,ptr:n});if(a){if((a=!Number.isSafeInteger(l))&&!r)throw new j("integer value cannot be represented losslessly",{toml:t,ptr:n});(a||r===!0)&&(l=BigInt(e))}return l}const i=new se(e);if(!i.isValid())throw new j("invalid value",{toml:t,ptr:n});return i}function qe(e,t=0,n=e.length){let r=e.indexOf(` +`,t);return e[r-1]==="\r"&&r--,r<=n?r:-1}function Ie(e,t){for(let n=t;n-1&&(Ie(e,a),r=r.slice(0,a)),[r.trimEnd(),a]}function Xe(e,t,n,r,a){if(r===0)throw new j("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let i=e[t];if(i==="["||i==="{"){let[f,c]=i==="["?yn(e,t,r,a):hn(e,t,r,a);if(n){if(c=re(e,c),e[c]===",")c++;else if(e[c]!==n)throw new j("expected comma or end of structure",{toml:e,ptr:c})}return[f,c]}if(i==='"'||i==="'"){let[f,c]=wt(e,t);if(n){if(c=re(e,c),e[c]&&e[c]!==","&&e[c]!==n&&e[c]!==` +`&&e[c]!=="\r")throw new j("unexpected character encountered",{toml:e,ptr:c});e[c]===","&&c++}return[f,c]}let l=gn(e,t,",",n),g=mn(e,t,l-(e[l-1]===","?1:0));if(!g[0])throw new j("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return n&&g[1]>-1&&(l=re(e,t+g[1]),e[l]===","&&l++),[dn(g[0],e,t,a),l]}let pn=/^[a-zA-Z0-9-_]+[ \t]*$/;function He(e,t,n="="){let r=t-1,a=[],i=e.indexOf(n,t);if(i<0)throw new j("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let l=e[t=++r];if(l!==" "&&l!==" ")if(l==='"'||l==="'"){if(l===e[t+1]&&l===e[t+2])throw new j("multiline strings are not allowed in keys",{toml:e,ptr:t});let[g,f]=wt(e,t);r=e.indexOf(".",f);let c=e.slice(f,r<0||r>i?i:r),_=qe(c);if(_>-1)throw new j("newlines are not allowed in keys",{toml:e,ptr:t+r+_});if(c.trimStart())throw new j("found extra tokens after the string part",{toml:e,ptr:f});if(ii?i:r);if(!pn.test(g))throw new j("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});a.push(g.trimEnd())}}while(r+1&&rt(n,r)))}function ne(e,t){return Object.fromEntries(Object.entries(e).map(([n,r])=>[n,t(r,n)]))}function Sn(e,t,n){if(!t)return{...e};const r={};for(const a of t)e[a]!==void 0&&(r[a]=e[a]);return r}function ae(e,t){return arguments.length===1?n=>ae(e,n):e in globalThis&&t instanceof globalThis[e]||Object.prototype.toString.call(t).slice(8,-1)===e}function Te(e){return ae("ArrayBuffer",e)||ae("SharedArrayBuffer",e)}function xn(e){return Te(e)||ArrayBuffer.isView(e)}var X;(e=>{e.is=Te,e.isSource=xn;function t(l){return ArrayBuffer.isView(l)?l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength):l}e.fromSource=t;function n(l){if(l=t(l),typeof Buffer<"u")return Buffer.from(l).toString("base64");let g="";const f=new Uint8Array(l);for(let c=0;cg.charCodeAt(0))}e.fromBase64=r;function a(l){return l=t(l),typeof Buffer<"u"?Buffer.from(l).toString("hex"):Array.from(new Uint8Array(l),g=>g.toString(16).padStart(2,"0")).join("")}e.toHex=a;function i(l){if(typeof Buffer<"u")return t(Buffer.from(l,"hex"));const g=l.length%2===0?l:l.slice(0,l.length-1),f=[];for(let c=0;c{a[l]=Reflect.apply(We,null,[i,t])}),a}const r=Object.create(Object.getPrototypeOf(e));t.set(e,r);for(const a of Reflect.ownKeys(e)){const i={...Reflect.getOwnPropertyDescriptor(e,a)};"value"in i&&(i.value=Reflect.apply(We,null,[i.value,t])),Reflect.defineProperty(r,a,i)}return r}function ge(e,t,n){if(e===t||!n&&q(e)&&q(t))return!0;if(typeof e!=typeof t||typeof e!="object"||!e||!t)return!1;function r(a,i){return a(e)?a(t)?i(e,t):!1:a(t)?!1:void 0}return r(Array.isArray,(a,i)=>a.length===i.length&&a.every((l,g)=>ge(l,i[g])))??r(ae("Date"),(a,i)=>a.valueOf()===i.valueOf())??r(ae("RegExp"),(a,i)=>a.source===i.source&&a.flags===i.flags)??r(Te,(a,i)=>{if(a.byteLength!==i.byteLength)return!1;const l=new Uint8Array(a),g=new Uint8Array(i);for(let f=0;fge(e[a],t[a],n))}var gt;(e=>{e.millisecond=1,e.second=1e3,e.minute=e.second*60,e.hour=e.minute*60,e.day=e.hour*24,e.week=e.day*7;let t=new Date().getTimezoneOffset();function n($){t=$}e.setTimezoneOffset=n;function r(){return t}e.getTimezoneOffset=r;function a($=new Date,S){return typeof $=="number"&&($=new Date($)),S===void 0&&(S=t),Math.floor(($.valueOf()/e.minute-S)/1440)}e.getDateNumber=a;function i($,S){const I=new Date($*e.day);return S===void 0&&(S=t),new Date(+I+S*e.minute)}e.fromDateNumber=i;const l=/\d+(?:\.\d+)?/.source,g=new RegExp(`^${["w(?:eek(?:s)?)?","d(?:ay(?:s)?)?","h(?:our(?:s)?)?","m(?:in(?:ute)?(?:s)?)?","s(?:ec(?:ond)?(?:s)?)?"].map($=>`(${l}${$})?`).join("")}$`);function f($){const S=g.exec($);return S?(parseFloat(S[1])*e.week||0)+(parseFloat(S[2])*e.day||0)+(parseFloat(S[3])*e.hour||0)+(parseFloat(S[4])*e.minute||0)+(parseFloat(S[5])*e.second||0):0}e.parseTime=f;function c($){const S=f($);return S?$=Date.now()+S:/^\d{1,2}(:\d{1,2}){1,2}$/.test($)?$=`${new Date().toLocaleDateString()}-${$}`:/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test($)&&($=`${new Date().getFullYear()}-${$}`),$?new Date($):new Date}e.parseDate=c;function _($){const S=Math.abs($);return S>=e.day-e.hour/2?Math.round($/e.day)+"d":S>=e.hour-e.minute/2?Math.round($/e.hour)+"h":S>=e.minute-e.second/2?Math.round($/e.minute)+"m":S>=e.second?Math.round($/e.second)+"s":$+"ms"}e.format=_;function k($,S=2){return $.toString().padStart(S,"0")}e.toDigits=k;function E($,S=new Date){return $.replace("yyyy",S.getFullYear().toString()).replace("yy",S.getFullYear().toString().slice(2)).replace("MM",k(S.getMonth()+1)).replace("dd",k(S.getDate())).replace("hh",k(S.getHours())).replace("mm",k(S.getMinutes())).replace("ss",k(S.getSeconds())).replace("SSS",k(S.getMilliseconds(),3))}e.template=E})(gt||(gt={}));var $n=Object.defineProperty,On=Object.getOwnPropertyNames,M=(e,t)=>$n(e,"name",{value:t,configurable:!0}),An=(e,t)=>function(){return t||(0,e[On(e)[0]])((t={exports:{}}).exports,t),t.exports},En=An({"src/index.ts"(e,t){var D;var n=Symbol.for("schemastery"),r=Symbol.for("ValidationError");globalThis.__schemastery_index__??=0,globalThis.__schemastery_refs__=void 0;var a=(D=class extends TypeError{constructor(s,o){let d="$";for(const p of o.path||[])typeof p=="string"?d+="."+p:typeof p=="number"?d+="["+p+"]":typeof p=="symbol"&&(d+=`[Symbol(${p.toString()})]`);d.startsWith(".")&&(d=d.slice(1)),super((d==="$"?"":`${d} `)+s),this.options=o}name="ValidationError";static is(s){return!!s?.[r]}},M(D,"ValidationError"),D);Object.defineProperty(a.prototype,r,{value:!0});var i=M(function(u){const s=M(function(o,d={}){return i.resolve(o,s,d)[0]},"schema");if(u.refs){const o=ne(u.refs,p=>new i(p)),d=M(p=>o[p],"getRef");for(const p in o){const h=o[p];h.sKey=d(h.sKey),h.inner=d(h.inner),h.list=h.list&&h.list.map(d),h.dict=h.dict&&ne(h.dict,d)}return o[u.uid]}if(Object.assign(s,u),typeof s.callback=="string")try{s.callback=new Function("return "+s.callback)()}catch{}return Object.defineProperty(s,"uid",{value:globalThis.__schemastery_index__++}),Object.setPrototypeOf(s,i.prototype),s.meta||={},s.toString=s.toString.bind(s),s},"Schema");i.prototype=Object.create(Function.prototype),i.prototype[n]=!0,Object.defineProperty(i.prototype,"~standard",{get(){return{version:1,vendor:"schemastery",validate:M(u=>{try{return{value:i.resolve(u,this,{})[0]}}catch(s){if(a.is(s))return{issues:[{message:s.message,path:s.options.path}]};throw s}},"validate")}}}),i.ValidationError=a,i.prototype.toJSON=M(function(){if(globalThis.__schemastery_refs__)return globalThis.__schemastery_refs__[this.uid]??=JSON.parse(JSON.stringify({...this})),this.uid;globalThis.__schemastery_refs__={[this.uid]:{...this}},globalThis.__schemastery_refs__[this.uid]=JSON.parse(JSON.stringify({...this}));const s={uid:this.uid,refs:globalThis.__schemastery_refs__};return globalThis.__schemastery_refs__=void 0,s},"toJSON"),i.prototype.set=M(function(s,o){return this.dict[s]=o,this},"set"),i.prototype.push=M(function(s){return this.list.push(s),this},"push");function l(u,s){const o=typeof u=="string"?{"":u}:{...u};for(const d in s){const p=s[d];p?.$description||p?.$desc?o[d]=p.$description||p.$desc:typeof p=="string"&&(o[d]=p)}return o}M(l,"mergeDesc");function g(u){return u?.$value??u?.$inner}M(g,"getInner");function f(u){return kn(u??{},s=>!s.startsWith("$"))}M(f,"extractKeys"),i.prototype.i18n=M(function(s){const o=i(this),d=l(o.meta.description,s);return Object.keys(d).length&&(o.meta.description=d),o.dict&&(o.dict=ne(o.dict,(p,h)=>p.i18n(ne(s,x=>g(x)?.[h]??x?.[h])))),o.list&&(o.list=o.list.map((p,h)=>p.i18n(ne(s,(x={})=>Array.isArray(g(x))?g(x)[h]:Array.isArray(x)?x[h]:f(x))))),o.inner&&(o.inner=o.inner.i18n(ne(s,p=>g(p)?g(p):f(p)))),o.sKey&&(o.sKey=o.sKey.i18n(ne(s,p=>p?.$key))),o},"i18n"),i.prototype.extra=M(function(s,o){const d=i(this);return d.meta={...d.meta,[s]:o},d},"extra");for(const u of["required","disabled","collapse","hidden","loose"])Object.assign(i.prototype,{[u](s=!0){const o=i(this);return o.meta={...o.meta,[u]:s},o}});i.prototype.deprecated=M(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"deprecated",type:"danger"}),s},"deprecated"),i.prototype.experimental=M(function(){const s=i(this);return s.meta.badges||=[],s.meta.badges.push({text:"experimental",type:"warning"}),s},"experimental"),i.prototype.pattern=M(function(s){const o=i(this),d=Sn(s,["source","flags"]);return o.meta={...o.meta,pattern:d},o},"pattern"),i.prototype.simplify=M(function(s){if(ge(s,this.meta.default,this.type==="dict"))return null;if(q(s))return s;if(this.type==="object"||this.type==="dict"){const o={};for(const d in s){const h=(this.type==="object"?this.dict[d]:this.inner)?.simplify(s[d]);(this.type==="dict"||!q(h))&&(o[d]=h)}return ge(o,this.meta.default,this.type==="dict")?null:o}else if(this.type==="array"||this.type==="tuple"){const o=[];return s.forEach((d,p)=>{const h=this.type==="array"?this.inner:this.list[p],x=h?h.simplify(d):d;o.push(x)}),o}else if(this.type==="intersect"){const o={};for(const d of this.list)Object.assign(o,d.simplify(s));return o}else if(this.type==="union")for(const o of this.list)try{return i.resolve(s,o,{}),o.simplify(s)}catch{}return s},"simplify"),i.prototype.toString=M(function(s){return I[this.type]?.(this,s)??`Schema<${this.type}>`},"toString"),i.prototype.role=M(function(u,s){const o=i(this);return o.meta={...o.meta,role:u,extra:s},o},"role");for(const u of["default","link","comment","description","max","min","step"])Object.assign(i.prototype,{[u](s){const o=i(this);return o.meta={...o.meta,[u]:s},o}});var c={};i.extend=M(function(s,o){c[s]=o},"extend"),i.resolve=M(function(s,o,d={},p=!1){if(!o)return[s];if(d.ignore?.(s,o))return[s];if(q(s)&&o.type!=="lazy"){if(o.meta.required)throw new a("missing required value",d);let x=o,N=o.meta.default;for(;x?.type==="intersect"&&q(N);)x=x.list[0],N=x?.meta.default;if(q(N))return[s];s=We(N)}const h=c[o.type];if(!h)throw new a(`unsupported type "${o.type}"`,d);try{return h(s,o,d,p)}catch(x){if(!o.meta.loose)throw x;return[o.meta.default]}},"resolve"),i.from=M(function(s){if(q(s))return i.any();if(["string","number","boolean"].includes(typeof s))return i.const(s).required();if(s[n])return s;if(typeof s=="function")switch(s){case String:return i.string().required();case Number:return i.number().required();case Boolean:return i.boolean().required();case Function:return i.function().required();default:return i.is(s).required()}else throw new TypeError(`cannot infer schema from ${s}`)},"from"),i.lazy=M(function(s){const o=M(()=>(d.inner[n]||(d.inner=d.builder(),d.inner.meta={...d.meta,...d.inner.meta}),d.inner.toJSON()),"toJSON"),d=new i({type:"lazy",builder:s,inner:{toJSON:o}});return d},"lazy"),i.natural=M(function(){return i.number().step(1).min(0)},"natural"),i.percent=M(function(){return i.number().step(.01).min(0).max(1).role("slider")},"percent"),i.date=M(function(){return i.union([i.is(Date),i.transform(i.string().role("datetime"),(s,o)=>{const d=new Date(s);if(isNaN(+d))throw new a(`invalid date "${s}"`,o);return d},!0)])},"date"),i.regExp=M(function(s=""){return i.union([i.is(RegExp),i.transform(i.string().role("regexp",{flag:s}),(o,d)=>{try{return new RegExp(o,s)}catch(p){throw new a(p.message,d)}},!0)])},"regExp"),i.arrayBuffer=M(function(s){return i.union([i.is(ArrayBuffer),i.is(SharedArrayBuffer),i.transform(i.any(),(o,d)=>{if(X.isSource(o))return X.fromSource(o);throw new a(`expected ArrayBufferSource but got ${o}`,d)},!0),...s?[i.transform(i.string(),(o,d)=>{try{return s==="base64"?X.fromBase64(o):X.fromHex(o)}catch(p){throw new a(p.message,d)}},!0)]:[]])},"arrayBuffer"),i.extend("lazy",(u,s,o,d)=>(s.inner[n]||(s.inner=s.builder(),s.inner.meta={...s.meta,...s.inner.meta}),i.resolve(u,s.inner,o,d))),i.extend("any",u=>[u]),i.extend("never",(u,s,o)=>{throw new a(`expected nullable but got ${u}`,o)}),i.extend("const",(u,{value:s},o)=>{if(ge(u,s))return[s];throw new a(`expected ${s} but got ${u}`,o)});function _(u,s,o,d,p=!1){const{max:h=1/0,min:x=-1/0}=s;if(u>h)throw new a(`expected ${o} <= ${h} but got ${u}`,d);if(u= ${x} but got ${u}`,d)}M(_,"checkWithinRange"),i.extend("string",(u,{meta:s},o)=>{if(typeof u!="string")throw new a(`expected string but got ${u}`,o);if(s.pattern){const d=new RegExp(s.pattern.source,s.pattern.flags);if(!d.test(u))throw new a(`expect string to match regexp ${d}`,o)}return _(u.length,s,"string length",o),[u]});function k(u,s){const o=u.toString();if(o.includes("e"))return u*Math.pow(10,s);const d=o.indexOf(".");if(d===-1)return u*Math.pow(10,s);const p=o.slice(d+1),h=o.slice(0,d);return p.length<=s?+(h+p.padEnd(s,"0")):+(h+p.slice(0,s)+"."+p.slice(s))}M(k,"decimalShift");function E(u,s,o){if(o=Math.abs(o),!/^\d+\.\d+$/.test(o.toString()))return(u-s)%o===0;const d=o.toString().indexOf("."),p=o.toString().slice(d+1).length;return Math.abs(k(u,p)-k(s,p))%k(o,p)===0}M(E,"isMultipleOf"),i.extend("number",(u,{meta:s},o)=>{if(typeof u!="number")throw new a(`expected number but got ${u}`,o);_(u,s,"number",o);const{step:d}=s;if(d&&!E(u,s.min??0,d))throw new a(`expected number multiple of ${d} but got ${u}`,o);return[u]}),i.extend("boolean",(u,s,o)=>{if(typeof u=="boolean")return[u];throw new a(`expected boolean but got ${u}`,o)}),i.extend("bitset",(u,{bits:s,meta:o},d)=>{let p=0,h=[];if(typeof u=="number"){p=u;for(const x in s)u&s[x]&&h.push(x)}else if(Array.isArray(u)){h=u;for(const x of h){if(typeof x!="string")throw new a(`expected string but got ${x}`,d);x in s&&(p|=s[x])}}else throw new a(`expected number or array but got ${u}`,d);return p===o.default?[p]:[p,h]}),i.extend("function",(u,s,o)=>{if(typeof u=="function")return[u];throw new a(`expected function but got ${u}`,o)}),i.extend("is",(u,{constructor:s},o)=>{if(typeof s=="function"){if(u instanceof s)return[u];throw new a(`expected ${s.name} but got ${u}`,o)}else{if(q(u))throw new a(`expected ${s} but got ${u}`,o);let d=Object.getPrototypeOf(u);for(;d;){if(d.constructor?.name===s)return[u];d=Object.getPrototypeOf(d)}throw new a(`expected ${s} but got ${u}`,o)}});function $(u,s,o,d){try{const[p,h]=i.resolve(u[s],o,{...d,path:[...d.path||[],s]});return h!==void 0&&(u[s]=h),p}catch(p){if(!d?.autofix)throw p;return delete u[s],o.meta.default}}M($,"property"),i.extend("array",(u,{inner:s,meta:o},d)=>{if(!Array.isArray(u))throw new a(`expected array but got ${u}`,d);return _(u.length,o,"array length",d,!q(s.meta.default)),[u.map((p,h)=>$(u,h,s,d))]}),i.extend("dict",(u,{inner:s,sKey:o},d,p)=>{if(!Be(u))throw new a(`expected object but got ${u}`,d);const h={};for(const x in u){let N;try{N=i.resolve(x,o,d)[0]}catch(ve){if(p)continue;throw ve}h[N]=$(u,x,s,d),u[N]=u[x],x!==N&&delete u[x]}return[h]}),i.extend("tuple",(u,{list:s},o,d)=>{if(!Array.isArray(u))throw new a(`expected array but got ${u}`,o);const p=s.map((h,x)=>$(u,x,h,o));return d?[p]:(p.push(...u.slice(s.length)),[p])});function S(u,s){for(const o in s)o in u||(u[o]=s[o])}M(S,"merge"),i.extend("object",(u,{dict:s},o,d)=>{if(!Be(u))throw new a(`expected object but got ${u}`,o);const p={};for(const h in s){const x=$(u,h,s[h],o);(!q(x)||h in u)&&(p[h]=x)}return d||S(p,u),[p]}),i.extend("union",(u,{list:s,toString:o},d,p)=>{for(const h of s)try{return i.resolve(u,h,d,p)}catch{}throw new a(`expected ${o()} but got ${JSON.stringify(u)}`,d)}),i.extend("intersect",(u,{list:s,toString:o},d,p)=>{if(!s.length)return[u];let h;for(const x of s){const N=i.resolve(u,x,d,!0)[0];if(!q(N))if(q(h))h=N;else{if(typeof h!=typeof N)throw new a(`expected ${o()} but got ${JSON.stringify(u)}`,d);if(typeof N=="object")S(h??={},N);else if(h!==N)throw new a(`expected ${o()} but got ${JSON.stringify(u)}`,d)}}return!p&&Be(u)&&S(h,u),[h]}),i.extend("transform",(u,{inner:s,callback:o,preserve:d},p)=>{const[h,x=u]=i.resolve(u,s,p,!0);return d?[o(h)]:[o(h),o(x)]});var I={};function C(u,s,o){I[u]=o,Object.assign(i,{[u](...d){const p=new i({type:u});return s.forEach((h,x)=>{switch(h){case"sKey":p.sKey=d[x]??i.string();break;case"inner":p.inner=i.from(d[x]);break;case"list":p.list=d[x].map(i.from);break;case"dict":p.dict=ne(d[x],i.from);break;case"bits":{p.bits={};for(const N in d[x])typeof d[x][N]=="number"&&(p.bits[N]=d[x][N]);break}case"callback":{const N=p.callback=d[x];N.toJSON||=()=>N.toString();break}case"constructor":{const N=p.constructor=d[x];typeof N=="function"&&(N.toJSON||=()=>N.name);break}default:p[h]=d[x]}}),u==="object"||u==="dict"?p.meta.default={}:u==="array"||u==="tuple"?p.meta.default=[]:u==="bitset"&&(p.meta.default=0),p}})}M(C,"defineMethod"),C("is",["constructor"],({constructor:u})=>typeof u=="function"?u.name:u),C("any",[],()=>"any"),C("never",[],()=>"never"),C("const",["value"],({value:u})=>typeof u=="string"?JSON.stringify(u):u),C("string",[],()=>"string"),C("number",[],()=>"number"),C("boolean",[],()=>"boolean"),C("bitset",["bits"],()=>"bitset"),C("function",[],()=>"function"),C("array",["inner"],({inner:u})=>`${u.toString(!0)}[]`),C("dict",["inner","sKey"],({inner:u,sKey:s})=>`{ [key: ${s.toString()}]: ${u.toString()} }`),C("tuple",["list"],({list:u})=>`[${u.map(s=>s.toString()).join(", ")}]`),C("object",["dict"],({dict:u})=>Object.keys(u).length===0?"{}":`{ ${Object.entries(u).map(([s,o])=>`${s}${o.meta.required?"":"?"}: ${o.toString()}`).join(", ")} }`),C("union",["list"],({list:u},s)=>{const o=u.map(({toString:d})=>d()).join(" | ");return s?`(${o})`:o}),C("intersect",["list"],({list:u})=>`${u.map(s=>s.toString(!0)).join(" & ")}`),C("transform",["inner","callback","preserve"],({inner:u},s)=>u.toString(s)),t.exports=i}});const Nn=En();function nt(e){return Array.isArray(e)?[...e]:e}function Ee(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,nt(n)]))}const Cn="(masterpiece, best quality:1.2), 1girl, solo, --n lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, --w 512 --h 768 --l 7 --s 24 --d 1337";function In(e,t,n){const r={...e,...t};return n?.forEach(a=>delete r[a]),r}function mt(e,t){const n={__MIKAZUKI__:{SAMPLE_PROMPTS_DEFAULT:Cn,SAMPLE_PROMPTS_DESCRIPTION:Y.global.t("schema.samplePromptsDescription")}},r=e.trim().replace(/;\s*$/,"");return new Function("Schema","SHARED_SCHEMAS","UpdateSchema","window",`"use strict"; return (${r});`)(Nn,t,In,n)}function Tn(e,t){const n=e.find(l=>l.name==="shared"),r=e.find(l=>l.name===t);if(!r)throw new Error(Y.global.t("schema.notProvided",{name:t}));const a=n?mt(n.schema):void 0,i=mt(r.schema,a);if(typeof i!="function"||!i.type)throw new Error(Y.global.t("schema.invalid",{name:t}));return{name:t,hash:r.hash,schema:i,sections:jn(i)}}function Ge(e){return typeof e?.description=="string"?e.description:e?.description?.["zh-CN"]||e?.description?.[""]}function xt(e){return e.type==="object"?Object.entries(e.dict??{}).filter(([,t])=>t.type==="const"&&!t.meta.hidden).map(([t,n])=>({key:t,value:n.value})):e.type==="intersect"?(e.list??[]).flatMap(xt):[]}function Mn(e,t,n){if(t.type==="union"&&t.list?.every(r=>r.type==="const"))return{key:e,type:"string",description:Ge(t.meta),defaultValue:t.meta.default,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,options:t.list.map(r=>r.value),conditions:n};if(["string","number","boolean","array","const"].includes(t.type))return{key:e,type:t.type,description:Ge(t.meta),role:t.meta.role,extra:t.meta.extra,defaultValue:t.meta.default??(t.type==="array"?[]:void 0),constValue:t.value,required:t.meta.required,hidden:t.meta.hidden,disabled:t.meta.disabled,min:t.meta.min,max:t.meta.max,step:t.meta.step,conditions:n}}function Ae(e,t=[]){return e.type==="object"?Object.entries(e.dict??{}).flatMap(([n,r])=>{const a=Mn(n,r,t);return a?[a]:Ae(r,t)}):e.type==="intersect"?(e.list??[]).flatMap(n=>Ae(n,t)):e.type==="union"?(e.list??[]).flatMap(n=>{const r=xt(n),a=new Set(r.map(i=>i.key));return Ae(n,[...t,...r]).filter(i=>!a.has(i.key))}):[]}function jn(e){const t=e.type==="intersect"?e.list??[]:[e],n=[];let r=0;const a=(l,g)=>{if(!g.length)return;const f=n.at(-1);if(!l&&f){f.fields.push(...g);return}const c=l||Y.global.t("schema.advancedSection");n.push({id:`${c}-${r++}`,title:c,fields:g})},i=l=>{const g=Ge(l.meta);if(!g&&l.type==="intersect"){for(const f of l.list??[])i(f);return}a(g,Ae(l))};for(const l of t)i(l);return n}function Me(e,t){return e.conditions.every(n=>t[n.key]===n.value)}function Se(e){const t={};for(const n of e.sections.flatMap(r=>r.fields)){const r=n.defaultValue??n.constValue;r!==void 0&&t[n.key]===void 0&&(t[n.key]=nt(r))}return t}function Dn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Me(r,t))continue;const a=r.type==="const"?r.constValue:t[r.key];a===void 0||a===""||Array.isArray(a)&&!a.length||(n[r.key]=nt(a))}return n}function Vn(e,t){const n={};for(const r of e.sections.flatMap(a=>a.fields)){if(!Me(r,t)||r.hidden)continue;const a=t[r.key];r.required&&(a===void 0||a===""||Array.isArray(a)&&!a.length)?n[r.key]=Y.global.t("schema.required"):typeof a=="number"&&r.min!==void 0&&ar.max&&(n[r.key]=Y.global.t("schema.tooLarge",{max:r.max}))}return n}const Fn={class:"field-text"},Pn={class:"field-label"},Rn={key:0},Bn={key:0,class:"field-description"},zn={class:"field-control"},Ln={key:5,class:"filepicker-control"},Kn={key:0,class:"field-error"},Un={class:"picker-list"},Jn=["onClick"],qn={key:0},Hn=ee({__name:"SchemaField",props:{field:{},modelValue:{type:[String,Number,Boolean,Array]},error:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=F([]),l=F(!1),g=F(!1),f=z(()=>String(n.field.extra?.type||"folder")),c=z(()=>n.field.extra?.internal?String(n.field.extra.internal):""),_=z({get:()=>Array.isArray(n.modelValue)?n.modelValue.join(` +`):"",set:S=>r("update:modelValue",S.split(/\r?\n/).filter(Boolean))}),k=z(()=>n.field.type==="boolean"||n.field.type==="number"||n.field.options?!0:n.field.type==="string"&&!n.field.role);async function E(){g.value=!0;try{const S=await pe.pickFile(f.value);r("update:modelValue",S.path.replaceAll("\\","/"))}catch(S){R.error(S instanceof Error?S.message:a("schemaForm.pickFail"))}finally{g.value=!1}}async function $(){try{i.value=(await pe.files(c.value)).files,l.value=!0}catch(S){R.error(S instanceof Error?S.message:a("schemaForm.catalogFail"))}}return(S,I)=>{const C=G("el-switch"),D=G("el-option"),u=G("el-select"),s=G("el-input-number"),o=G("el-input"),d=G("el-button"),p=G("el-dialog");return b(),O(U,null,[m("label",{class:Z(["schema-field",{"has-error":e.error,"schema-field--compact":k.value}])},[m("span",Fn,[m("span",Pn,[m("code",null,v(e.field.key),1),e.field.required?(b(),O("b",Rn,v(y(a)("schemaForm.required")),1)):P("",!0)]),e.field.description?(b(),O("span",Bn,v(e.field.description),1)):P("",!0)]),m("span",zn,[e.field.type==="boolean"?(b(),J(C,{key:0,"model-value":!!e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":I[0]||(I[0]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.options?(b(),J(u,{key:1,"model-value":e.modelValue,disabled:e.field.disabled,multiple:e.field.type==="array",clearable:"","onUpdate:modelValue":I[1]||(I[1]=h=>r("update:modelValue",h))},{default:K(()=>[(b(!0),O(U,null,H(e.field.options,h=>(b(),J(D,{key:String(h),label:String(h)||y(a)("schemaForm.emptyOption"),value:h??""},null,8,["label","value"]))),128))]),_:1},8,["model-value","disabled","multiple"])):e.field.type==="number"?(b(),J(s,{key:2,"model-value":e.modelValue,disabled:e.field.disabled,min:e.field.min,max:e.field.max,step:e.field.step||1,"controls-position":"right","onUpdate:modelValue":I[2]||(I[2]=h=>r("update:modelValue",h??void 0))},null,8,["model-value","disabled","min","max","step"])):e.field.type==="array"||e.field.role==="table"?(b(),J(o,{key:3,modelValue:_.value,"onUpdate:modelValue":I[3]||(I[3]=h=>_.value=h),type:"textarea",rows:4,disabled:e.field.disabled,placeholder:y(a)("schemaForm.arrayPlaceholder")},null,8,["modelValue","disabled","placeholder"])):e.field.role==="textarea"?(b(),J(o,{key:4,"model-value":e.modelValue,type:"textarea",rows:5,disabled:e.field.disabled,"onUpdate:modelValue":I[4]||(I[4]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"])):e.field.role==="filepicker"?(b(),O("span",Ln,[L(o,{"model-value":e.modelValue,disabled:e.field.disabled,"onUpdate:modelValue":I[5]||(I[5]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]),L(d,{loading:g.value,disabled:e.field.disabled,onClick:ut(E,["prevent"])},{default:K(()=>[ie(v(y(a)("schemaForm.browse")),1)]),_:1},8,["loading","disabled"]),c.value?(b(),J(d,{key:0,disabled:e.field.disabled,onClick:ut($,["prevent"])},{default:K(()=>[ie(v(y(a)("schemaForm.commonPaths")),1)]),_:1},8,["disabled"])):P("",!0)])):(b(),J(o,{key:6,"model-value":e.modelValue,disabled:e.field.disabled||e.field.type==="const","onUpdate:modelValue":I[6]||(I[6]=h=>r("update:modelValue",h))},null,8,["model-value","disabled"]))]),e.error?(b(),O("span",Kn,v(e.error),1)):P("",!0)],2),L(p,{modelValue:l.value,"onUpdate:modelValue":I[7]||(I[7]=h=>l.value=h),title:y(a)("schemaForm.catalogTitle"),width:"min(680px, 92vw)"},{default:K(()=>[m("div",Un,[(b(!0),O(U,null,H(i.value,h=>(b(),O("button",{key:h.path,onClick:x=>{r("update:modelValue",h.path),l.value=!1}},[m("strong",null,v(h.name),1),m("span",null,v(h.path),1),h.size?(b(),O("small",qn,v(h.size),1)):P("",!0)],8,Jn))),128))])]),_:1},8,["modelValue","title"])],64)}}}),Wn={class:"schema-form"},Gn=["id"],Zn={class:"schema-fields"},Yn=ee({__name:"DynamicSchemaForm",props:{schema:{},modelValue:{},errors:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,r=t,{t:a}=te(),i=z(()=>{const f=new Map;for(const c of n.schema.sections)for(const _ of c.fields)Me(_,n.modelValue)&&f.set(_.key,_);return f});function l(f){return f.filter(c=>!c.hidden&&i.value.get(c.key)===c)}function g(f,c){r("update:modelValue",{...n.modelValue,[f]:c})}return(f,c)=>(b(),O("div",Wn,[(b(!0),O(U,null,H(e.schema.sections,_=>me((b(),O("section",{id:`sec-${_.id}`,key:_.id,class:"schema-section"},[m("header",null,[m("h2",null,v(_.title),1),m("span",null,v(y(a)("schemaForm.fieldCount",{n:l(_.fields).length})),1)]),m("div",Zn,[(b(!0),O(U,null,H(l(_.fields),k=>(b(),J(Hn,{key:k.key,field:k,"model-value":e.modelValue[k.key],error:e.errors[k.key],"onUpdate:modelValue":E=>g(k.key,E)},null,8,["field","model-value","error","onUpdate:modelValue"]))),128))])],8,Gn)),[[vt,l(_.fields).length]])),128))]))}}),Xn=["aria-label"],Qn=["title","aria-label","aria-expanded"],er=["aria-hidden"],tr={class:"schema-toc-head"},nr={class:"schema-toc-caption"},rr=["title","aria-label"],ir={class:"schema-toc-list"},ar=["title","onClick"],or=3500,sr=ee({__name:"SectionToc",props:{sections:{}},setup(e){const t=e,{t:n}=te(),r=F(!1),a=F("");let i,l;function g(I){return`sec-${I}`}function f(){l!==void 0&&(window.clearTimeout(l),l=void 0)}function c(){f(),r.value&&(l=window.setTimeout(()=>{r.value=!1,l=void 0},or))}function _(){r.value=!0,c()}function k(){f(),r.value=!1}function E(){f(),r.value=!0}function $(I){a.value=I,document.getElementById(g(I))?.scrollIntoView({behavior:"smooth",block:"start"}),r.value=!0,c()}function S(){if(i?.disconnect(),typeof IntersectionObserver>"u"){!a.value&&t.sections[0]&&(a.value=t.sections[0].id);return}i=new IntersectionObserver(I=>{const C=I.filter(D=>D.isIntersecting).sort((D,u)=>D.boundingClientRect.top-u.boundingClientRect.top)[0];C?.target instanceof HTMLElement&&(a.value=C.target.id.replace(/^sec-/,""))},{rootMargin:"-15% 0px -75% 0px",threshold:[0,.12,.4]});for(const I of t.sections){const C=document.getElementById(g(I.id));C&&i.observe(C)}!a.value&&t.sections[0]&&(a.value=t.sections[0].id)}return Ze(S),de(()=>t.sections,S),Ye(()=>{f(),i?.disconnect()}),(I,C)=>{const D=G("el-icon");return b(),O("aside",{class:Z(["section-toc schema-toc",{open:r.value,collapsed:!r.value}]),"aria-label":y(n)("training.toc.title")},[m("button",{type:"button",class:"toc-seam schema-toc-seam",title:y(n)("training.toc.expand"),"aria-label":y(n)("training.toc.expand"),"aria-expanded":r.value?"true":"false",onMouseenter:_,onClick:C[0]||(C[0]=u=>r.value?k():_())},[L(D,{class:"schema-toc-seam-icon",size:12},{default:K(()=>[L(y(Lt))]),_:1})],40,Qn),m("div",{class:"toc-panel schema-toc-panel","aria-hidden":r.value?"false":"true",onMouseenter:E,onMouseleave:c},[m("header",tr,[m("p",nr,v(y(n)("training.toc.title")),1),m("button",{type:"button",class:"schema-toc-toggle icon-btn",title:y(n)("training.toc.collapse"),"aria-label":y(n)("training.toc.collapse"),onClick:k},[L(D,{size:14},{default:K(()=>[L(y(Kt))]),_:1})],8,rr)]),m("div",ir,[(b(!0),O(U,null,H(e.sections,u=>(b(),O("button",{key:u.id,type:"button",class:Z(["toc-item schema-toc-tab",{active:a.value===u.id}]),title:u.title,onClick:s=>$(u.id)},[C[1]||(C[1]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,v(u.title),1)],10,ar))),128))])],40,er)],10,Xn)}}});function xe(e,t){return bt(e,{method:"POST",body:JSON.stringify(t)})}const ce={presets:async()=>(await bt("/api/presets")).presets,validateImport:(e,t)=>xe("/api/config/validate-import",{page_train_type:e,config:t}),normalizeExport:(e,t)=>xe("/api/config/normalize-for-export",{page_train_type:e,config:t}),run:e=>xe("/api/run",e),animaFastPreflight:e=>xe("/api/anima-fast/preflight",e)},$t="schemas";function lr(){try{const e=JSON.parse(localStorage.getItem($t)||"[]");return Array.isArray(e)?e:[]}catch{return[]}}async function ur(e){let t=lr();try{const{schemas:n}=await pe.hashes(),r=new Map(t.map(i=>[i.name,i.hash]));(n.length!==t.length||n.some(i=>r.get(i.name)!==i.hash))&&(t=(await pe.all()).schemas,localStorage.setItem($t,JSON.stringify(t)))}catch(n){if(!t.length)throw n}return Tn(t,e)}const Ot=["learning_rate","unet_lr","text_encoder_lr","learning_rate_te","learning_rate_te1","learning_rate_te2","sigmoid_scale","guidance_scale"],cr=["vae","reg_data_dir","network_weights","noise_offset","multires_noise_iterations","multires_noise_discount","caption_dropout_rate","network_dropout","scale_weight_norms","gpu_ids"],fr=["pretrained_model_name_or_path","vae","qwen3","llm_adapter_path","t5_tokenizer_path","resume","train_data_dir","reg_data_dir","output_dir","logging_dir","network_weights","sample_prompts"],dr=["lycoris_algo","conv_dim","conv_alpha","dropout","dylora_unit","lokr_factor","train_norm","down_lr_weight","mid_lr_weight","up_lr_weight","block_lr_zero_threshold","enable_block_weights","network_args_custom","optimizer_args_custom","enable_base_weight","prodigy_d0","prodigy_d_coef","ui_custom_params"],gr=["v2","v_parameterization","scale_v_pred_loss_like_noise_pred","clip_skip","learning_rate_te","stop_text_encoder_training"],mr=["learning_rate_te1","learning_rate_te2"],pt=["prompt_file","sample_width","sample_height","sample_cfg","sample_seed","sample_steps","sample_sampler","randomly_choice_prompt","sample_at_first","sample_every_n_epochs","sample_every_n_steps","positive_prompts","negative_prompts","sample_prompts"],pr={model_train_type:"sd-lora",enable_bucket:!0,min_bucket_reso:256,max_bucket_reso:1024,save_model_as:"safetensors",network_train_unet_only:!1,network_train_text_encoder_only:!1,learning_rate:1e-4,network_module:"networks.lora",logging_dir:"./logs",caption_extension:".txt",max_token_length:255,seed:1337,prior_loss_weight:1,clip_skip:2,save_precision:"fp16",persistent_data_loader_workers:!0};function $e(e){return Array.isArray(e)?e:[]}function Oe(e,t){t.forEach(n=>delete e[n])}function hr(e,t){const n=t==="lora-basic"?{...pr,...Ee(e)}:Ee(e);let r=[],a=[];n.network_module==="lycoris.kohya"?(r.push(`conv_dim=${n.conv_dim}`,`conv_alpha=${n.conv_alpha}`,`dropout=${n.dropout}`,`algo=${n.lycoris_algo}`),n.lokr_factor&&r.push(`factor=${n.lokr_factor}`),n.train_norm&&r.push("train_norm=True")):n.network_module==="networks.dylora"&&r.push(`unit=${n.dylora_unit}`);const i=String(n.optimizer_type||"");i.toLowerCase().startsWith("dada")?(["DAdaptation","DAdaptAdam"].includes(i)&&(a=["decouple=True","weight_decay=0.01"]),n.learning_rate=1,n.unet_lr=1,n.text_encoder_lr=1):i.toLowerCase()==="prodigy"&&(a=["decouple=True","weight_decay=0.01","use_bias_correction=True",`d_coef=${n.prodigy_d_coef}`],n.lr_warmup_steps&&a.push("safeguard_warmup=True"),n.prodigy_d0&&a.push(`d0=${n.prodigy_d0}`)),n.enable_block_weights&&r.push(`down_lr_weight=${n.down_lr_weight}`,`mid_lr_weight=${n.mid_lr_weight}`,`up_lr_weight=${n.up_lr_weight}`,`block_lr_zero_threshold=${n.block_lr_zero_threshold}`),n.enable_base_weight?(typeof n.base_weights=="string"&&(n.base_weights=n.base_weights.split(/\r?\n/).filter(Boolean)),typeof n.base_weights_multiplier=="string"&&(n.base_weights_multiplier=n.base_weights_multiplier.split(/\r?\n/).filter(Boolean).map(Number))):Oe(n,["base_weights","base_weights_multiplier"]),r.push(...$e(n.network_args).map(String),...$e(n.network_args_custom).map(String)),a.push(...$e(n.optimizer_args).map(String),...$e(n.optimizer_args_custom).map(String)),r.length?n.network_args=r:delete n.network_args,a.length?n.optimizer_args=a:delete n.optimizer_args,pt.some(f=>{const c=n[f];return c!==void 0&&c!==""&&(!Array.isArray(c)||c.length>0)})&&(n.enable_preview=!0),n.enable_preview||Oe(n,pt);for(const f of Ot){if(n[f]===void 0)continue;const c=Number.parseFloat(String(n[f]));n[f]=Number.isNaN(c)?0:c}for(const f of cr){const c=n[f];(c===0||c===""||Array.isArray(c)&&!c.length)&&delete n[f]}for(const f of fr)typeof n[f]=="string"&&(n[f]=n[f].replaceAll("\\","/"));typeof e.ui_custom_params=="string"&&e.ui_custom_params.trim()&&Object.assign(n,kt(e.ui_custom_params));const g=String(n.model_train_type||"").startsWith("sdxl");return g&&(n.learning_rate_te1||n.learning_rate_te2)&&(n.train_text_encoder=!0),Oe(n,g?gr:mr),Oe(n,dr),Array.isArray(n.gpu_ids)&&(n.gpu_ids=n.gpu_ids.map(f=>String(f).match(/GPU (\d+):/)?.[1]||String(f)).filter(Boolean)),n}function yr(e){const t=Ee(e);for(const n of Ot){const r=t[n];if(typeof r!="number")continue;const a=r.toExponential();t[n]=a.length<=6?a:String(r)}if(Array.isArray(t.network_args)){for(const n of t.network_args){const[r,...a]=String(n).split("="),i=a.join("=");r&&(t[r==="algo"?"lycoris_algo":r]=i)}delete t.network_args}return Array.isArray(t.optimizer_args)&&(t.optimizer_args_custom=t.optimizer_args,delete t.optimizer_args),t}function vr(e){const t=[],n=[],r=String(e.optimizer_type||"");r.startsWith("DAdapt")&&e.lr_scheduler!=="constant"&&t.push(Y.global.t("training.diagnostics.dadaptScheduler")),r.toLowerCase().startsWith("prodigy")&&(e.unet_lr!==1||e.text_encoder_lr!==1)&&t.push(Y.global.t("training.diagnostics.prodigyLr")),e.network_module==="networks.oft"&&e.model_train_type!=="sdxl-lora"&&n.push(Y.global.t("training.diagnostics.oftSdxl"));for(const[a,i]of[["cache_text_encoder_outputs","shuffle_caption"],["noise_offset","multires_noise_iterations"],["cache_latents","color_aug"],["cache_latents","random_crop"]])e[a]&&e[i]&&n.push(Y.global.t("training.diagnostics.conflict",{left:a,right:i}));return{warnings:t,errors:n}}const At=["anima","sd15","sdxl","flux","lumina"],Ne=["kohya","anima-fast","musubi"],Ce=["lora","finetune"],br={model:"anima",engine:"kohya",target:"lora"},he=[{model:"anima",engine:"kohya",target:"lora",schemaName:"sd3-lora"},{model:"anima",engine:"anima-fast",target:"lora",schemaName:"anima-lora-fast"},{model:"anima",engine:"kohya",target:"finetune",schemaName:"anima-finetune"},{model:"sdxl",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sdxl-lora"},storageKey:"sdxl-lora",legacyStorageKey:"lora-master"},{model:"sd15",engine:"kohya",target:"lora",schemaName:"lora-master",defaults:{model_train_type:"sd-lora"},storageKey:"sd15-lora"},{model:"sdxl",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sdxl-finetune"},storageKey:"sdxl-dreambooth",legacyStorageKey:"dreambooth"},{model:"sd15",engine:"kohya",target:"finetune",schemaName:"dreambooth",defaults:{model_train_type:"sd-dreambooth"},storageKey:"sd15-dreambooth"},{model:"flux",engine:"kohya",target:"lora",schemaName:"flux-lora"},{model:"lumina",engine:"kohya",target:"lora",schemaName:"lumina2-lora"}],_r={"sd3-lora":{titleKey:"training.schemas.sd3-lora.title",areaKey:"training.schemas.sd3-lora.area"},"anima-lora-fast":{titleKey:"training.schemas.anima-lora-fast.title",areaKey:"training.schemas.anima-lora-fast.area"},"anima-finetune":{titleKey:"training.schemas.anima-finetune.title",areaKey:"training.schemas.anima-finetune.area"},"lora-master":{titleKey:"training.schemas.lora-master.title",areaKey:"training.schemas.lora-master.area"},dreambooth:{titleKey:"training.schemas.dreambooth.title",areaKey:"training.schemas.dreambooth.area"},"flux-lora":{titleKey:"training.schemas.flux-lora.title",areaKey:"training.schemas.flux-lora.area"},"lumina2-lora":{titleKey:"training.schemas.lumina2-lora.title",areaKey:"training.schemas.lumina2-lora.area"}};function ht(e){return e==="sd"?"sdxl":At.includes(e)?e:void 0}function Et(e,t,n){return he.find(r=>r.model===e&&r.engine===t&&r.target===n)}function wr(e){return he.find(t=>t.schemaName===e)}function kr(e){if(!(typeof e!="string"||!e))return he.find(t=>t.defaults?.model_train_type===e)??he.find(t=>t.schemaName===e)}function le(e,t){return he.some(n=>n.model===e&&n.engine===t)}function ue(e,t,n){return!!Et(e,t,n)}function Sr(e){return Ne.find(t=>le(e,t))}function xr(e,t){return Ce.find(n=>ue(e,t,n))}const $r={class:"schema-form-binder"},Or={key:0,class:"section-heading"},Ar={key:1,class:"schema-state"},Er={key:2,class:"schema-state schema-error"},Nr={class:"panel-rail"},Cr={class:"rail-label"},Ir=["disabled"],Tr=["disabled"],Mr={class:"panel-full"},jr={key:0,class:"panel-copy"},Dr={key:1,class:"param-diagnostics"},Vr={key:2,class:"started-task"},Fr=["href"],Pr={class:"preview-actions"},Rr=["title","aria-label"],Br={class:"panel-actions"},zr=["disabled"],Lr={class:"submit-row"},Kr=["disabled"],Ur=["disabled"],Jr={class:"config-list"},qr=["onClick"],Hr=["onClick"],Wr={key:0},Gr={class:"config-list"},Zr=["onClick"],Yr={key:0},Nt=ee({__name:"TrainingPage",props:{title:{},area:{},schemaName:{},bare:{type:Boolean,default:!1},fieldDefaults:{default:void 0},storageKey:{default:void 0},legacyStorageKey:{default:void 0}},setup(e){const t=e,n=_t(),{t:r}=te(),a=F(),i=F({}),l=F(!0),g=F(""),f=F({}),c=F(!1),_=F(!1),k=Zt(),E=z(()=>k.runningTasks.at(-1));let $;function S(){try{const w=JSON.parse(localStorage.getItem("ui-configs")||"{}");return!!(w&&typeof w=="object"&&w.training_preview_collapsed)}catch{return!1}}function I(w){try{const A=JSON.parse(localStorage.getItem("ui-configs")||"{}"),T=A&&typeof A=="object"?A:{};localStorage.setItem("ui-configs",JSON.stringify({...T,training_preview_collapsed:w}))}catch{}}const C=F(!1),D=F([]),u=F([]),s=F(!1),o=F(),d=F(S()),p=F(),h=z(()=>a.value?Dn(a.value,i.value):{}),x=z(()=>hr(h.value,t.schemaName)),N=z(()=>vr(x.value)),ve=z(()=>dt(x.value)),rt=z(()=>u.value.filter(w=>!w.metadata.train_type||w.metadata.train_type===t.schemaName)),be=z(()=>{if(!a.value)return[];const w=new Map;for(const A of a.value.sections)for(const T of A.fields)Me(T,i.value)&&w.set(T.key,T);return a.value.sections.filter(A=>A.fields.some(T=>!T.hidden&&w.get(T.key)===T)).map(A=>({id:A.id,title:A.title}))}),Ct=z(()=>o.value?`${o.value.train_log_path||"/train-log"}?${o.value.train_log_query||`task_id=${encodeURIComponent(o.value.task_id)}`}`:"");function _e(){return t.storageKey||t.schemaName}function we(){return`configs-${_e()}-autosave`}function je(){return`configs-${_e()}`}function It(){if(!(!t.legacyStorageKey||t.legacyStorageKey===_e()))for(const w of["","-autosave"]){const A=`configs-${t.legacyStorageKey}${w}`,T=`configs-${_e()}${w}`,B=localStorage.getItem(A);B!==null&&localStorage.getItem(T)===null&&localStorage.setItem(T,B)}}function it(){try{D.value=JSON.parse(localStorage.getItem(je())||"[]")}catch{D.value=[]}}async function at(w,A){const T=await ce.validateImport(t.schemaName,w);if(T.result==="reject")throw new Error(T.errors?.join(` +`)||T.message||r("training.importMsg.reject"));if(T.result==="redirect"&&T.target_path){await fe.confirm(T.message||r("training.importMsg.mismatchConfirm"),r("training.importMsg.mismatchTitle"),{confirmButtonText:r("training.importMsg.jump"),cancelButtonText:r("training.importMsg.cancel"),type:"warning"}),sessionStorage.setItem("mikazuki-pending-import",JSON.stringify(T.config||w));const B=kr((T.config||w).model_train_type);B?await n.push({path:"/training",query:{model:B.model,engine:B.engine,target:B.target}}):await n.push(T.target_path);return}i.value={...Se(a.value),...yr(T.config||w)},T.notice&&R.info(T.notice),R.success(A??r("training.importMsg.imported"))}function Tt(){try{const w=JSON.parse(sessionStorage.getItem("mikazuki-carry-over")||"null");return w&&typeof w=="object"?w:{}}catch{return{}}}async function De(){l.value=!0,g.value="";try{const w=await ur(t.schemaName),A={...Se(w),...t.fieldDefaults},T=Tt();sessionStorage.removeItem("mikazuki-carry-over");const B={};for(const[W,Fe]of Object.entries(T))W in A&&!(t.fieldDefaults&&W in t.fieldDefaults)&&(B[W]=Fe);const Q={...A,...B};try{const W=JSON.parse(localStorage.getItem(we())||"null");i.value=W&&typeof W=="object"?{...Q,...W}:Q}catch{i.value=Q}const V=await pe.graphicCards();if(V.length>1){const W=V.map((ke,zt)=>typeof ke=="object"?ke.value??ke.label??zt:ke),Fe={key:"gpu_ids",type:"array",role:"select",description:r("training.gpu.fieldDescription"),options:W,conditions:[]};w.sections.push({id:"gpu-settings",title:r("training.gpu.sectionTitle"),fields:[Fe]})}a.value=w;const oe=sessionStorage.getItem("mikazuki-pending-import");oe&&(sessionStorage.removeItem("mikazuki-pending-import"),await at(JSON.parse(oe),r("training.importMsg.importedRedirect")))}catch(w){g.value=w instanceof Error?w.message:r("training.schemaLoadFail")}finally{l.value=!1}}function Ve(){if(!a.value)return!1;f.value=Vn(a.value,i.value);const w=[...Object.values(f.value),...N.value.errors];return w.length?(R.error(w[0]),!1):(N.value.warnings.length?R.warning(N.value.warnings[0]):R.success(r("training.validatePassed")),!0)}function ot(){const w={time:new Date().toLocaleString(),value:Ee(i.value)};typeof i.value.output_name=="string"&&(w.name=i.value.output_name),D.value.push(w),localStorage.setItem(je(),JSON.stringify(D.value)),R.success(r("training.historyDialog.saved"))}function Mt(w){D.value.splice(w,1),localStorage.setItem(je(),JSON.stringify(D.value))}async function jt(){if(C.value=!0,!u.value.length){s.value=!0;try{u.value=await ce.presets()}catch(w){R.error(w instanceof Error?w.message:r("training.presetsDialog.loadFail"))}finally{s.value=!1}}}function Dt(w){i.value={...i.value,...w.data},C.value=!1,R.success(r("training.presetsDialog.applied",{name:w.metadata.name}))}async function Vt(w){const A=w.target,T=A.files?.[0];if(A.value="",!!T)try{const B=await T.text(),Q=T.name.toLowerCase().endsWith(".json")?JSON.parse(B):kt(B);await at(Q)}catch(B){B!=="cancel"&&B!=="close"&&R.error(B instanceof Error?B.message:r("training.importMsg.fail"))}}async function Ft(){if(Ve())try{const w=await ce.normalizeExport(t.schemaName,x.value),A=new Blob([dt(w.config)],{type:"application/toml;charset=utf-8"}),T=URL.createObjectURL(A),B=document.createElement("a");B.href=T,B.download=`${String(w.config.output_name||t.schemaName)}.toml`,B.click(),URL.revokeObjectURL(T),w.warnings.forEach(Q=>R.warning(Q))}catch(w){R.error(w instanceof Error?w.message:r("training.exportFail"))}}async function st(){if(!(!Ve()||c.value))try{if(await fe.confirm(r("training.submitConfirm.message"),r("training.submitConfirm.title"),{confirmButtonText:r("training.submitConfirm.confirm"),cancelButtonText:r("training.submitConfirm.cancel"),type:"warning"}),c.value=!0,t.schemaName==="anima-lora-fast"){const w=await ce.animaFastPreflight(x.value);if(!w.ok)throw new Error(w.errors?.join(` +`)||r("training.submitConfirm.preflightFail"));w.warnings?.forEach(A=>R.warning(A))}o.value=await ce.run(x.value),k.refresh({silent:!0}),ot(),R.success(r("training.submitConfirm.started",{id:o.value.task_id}))}catch(w){w!=="cancel"&&w!=="close"&&R.error(w instanceof Error?w.message:r("training.submitConfirm.fail"))}finally{c.value=!1}}async function Pt(){if(a.value){try{await fe.confirm(r("training.actions.resetConfirm"),r("training.resetDialog.title"),{confirmButtonText:r("training.actions.reset"),cancelButtonText:r("training.resetDialog.cancel"),type:"warning"})}catch{return}localStorage.removeItem(we()),i.value={...Se(a.value),...t.fieldDefaults},R.success(r("training.actions.resetDone"))}}async function Rt(){try{await navigator.clipboard.writeText(ve.value),R.success(r("training.preview.copied"))}catch{R.error(r("training.preview.copyFail"))}}function Bt(){p.value?.click()}async function lt(){const w=E.value;if(w)try{await fe.confirm(r("tasks.terminate.confirm",{id:w.id}),r("tasks.terminate.title"),{confirmButtonText:r("tasks.terminate.confirmButton"),cancelButtonText:r("tasks.terminate.cancel"),type:"warning"}),await k.terminate(w.id),R.success(r("tasks.terminate.success"))}catch(A){A!=="cancel"&&A!=="close"&&R.error(A instanceof Error?A.message:r("tasks.terminate.fail"))}}return de(()=>t.schemaName,()=>{o.value=void 0,it(),De()}),de(i,w=>localStorage.setItem(we(),JSON.stringify(w)),{deep:!0}),de(d,w=>I(w)),Ze(()=>{It(),it(),De(),k.refresh(),$=window.setInterval(()=>k.refresh({silent:!0}),2e3)}),Ye(()=>{window.clearInterval($),localStorage.setItem(we(),JSON.stringify(i.value)),sessionStorage.setItem("mikazuki-carry-over",JSON.stringify(i.value))}),(w,A)=>{const T=G("RouterLink"),B=G("el-dialog"),Q=Ut("loading");return b(),O(U,null,[m("div",{class:Z(["training-layout schema-training-layout",{bare:e.bare,"preview-docked":d.value}])},[m("section",{class:Z(["form-canvas",{"with-schema-toc":be.value.length>1}])},[m("div",{class:Z(["schema-form-shell",{"has-toc":be.value.length>1}])},[be.value.length>1?(b(),J(sr,{key:0,sections:be.value},null,8,["sections"])):P("",!0),m("div",$r,[e.bare?P("",!0):(b(),O("div",Or,[m("span",null,v(e.area),1),m("h1",null,v(e.title),1),m("p",null,v(y(r)("training.intro")),1)])),m("input",{ref_key:"importInput",ref:p,class:"visually-hidden",type:"file",accept:".toml,.json",onChange:Vt},null,544),Je(w.$slots,"form-top"),l.value?(b(),O("div",Ar,[m("strong",null,v(y(r)("training.loadingSchema")),1),m("span",null,v(y(r)("training.loadingSchemaHint")),1)])):g.value?(b(),O("div",Er,[m("strong",null,v(y(r)("training.schemaError")),1),m("span",null,v(g.value),1),m("button",{onClick:De},v(y(r)("training.retry")),1)])):a.value?(b(),J(Yn,{key:3,modelValue:i.value,"onUpdate:modelValue":A[0]||(A[0]=V=>i.value=V),schema:a.value,errors:f.value},null,8,["modelValue","schema","errors"])):P("",!0)])],2)],2),m("aside",{class:Z(["control-panel",{collapsed:d.value}])},[m("div",Nr,[m("button",{class:"rail-handle",onClick:A[1]||(A[1]=V=>d.value=!1)},[A[6]||(A[6]=m("span",{class:"rail-arrow","aria-hidden":"true"},"←",-1)),N.value.errors.length||N.value.warnings.length?(b(),O("span",{key:0,class:Z(["rail-alert",{error:N.value.errors.length>0}])},null,2)):P("",!0),m("span",Cr,v(y(r)("training.preview.railTitle")),1),m("b",null,v(y(r)("training.preview.count",{n:Object.keys(x.value).length})),1)]),m("button",{class:"primary-action rail-submit",disabled:!a.value||c.value||N.value.errors.length>0,onClick:st},v(c.value?y(r)("training.railSubmitting"):y(r)("training.railStart")),9,Ir),m("button",{class:"danger-action rail-stop",disabled:!E.value||!!y(k).terminatingId,onClick:lt},v(y(r)("training.railStop")),9,Tr)]),m("div",Mr,[e.bare?P("",!0):(b(),O("div",jr,[A[7]||(A[7]=m("span",{class:"eyebrow"},"TRAINING CONTROL",-1)),m("h2",null,v(e.title),1),m("p",null,v(y(r)("training.panelHint")),1)])),N.value.errors.length||N.value.warnings.length?(b(),O("div",Dr,[(b(!0),O(U,null,H(N.value.errors,V=>(b(),O("p",{key:V,class:"error"},v(V),1))),128)),(b(!0),O(U,null,H(N.value.warnings,V=>(b(),O("p",{key:V},v(V),1))),128))])):P("",!0),o.value?(b(),O("div",Vr,[m("strong",null,v(y(r)("training.startedTask")),1),m("code",null,v(o.value.task_id),1),m("a",{href:Ct.value,target:"_blank",rel:"noreferrer"},v(y(r)("training.openLog")),9,Fr),L(T,{to:"/tasks"},{default:K(()=>[ie(v(y(r)("training.viewTasks")),1)]),_:1})])):P("",!0),m("section",{class:Z(["preview-panel",{collapsed:d.value}])},[m("header",null,[m("span",null,v(y(r)("training.preview.panelTitle")),1),m("b",null,v(y(r)("training.preview.count",{n:Object.keys(x.value).length})),1),m("span",Pr,[m("button",{class:"preview-collapse",title:d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),"aria-label":d.value?y(r)("training.preview.expand"):y(r)("training.preview.collapse"),onClick:A[2]||(A[2]=V=>d.value=!d.value)},v(d.value?"←":"→"),9,Rr),m("button",{onClick:Rt},v(y(r)("training.preview.copy")),1)])]),me(m("pre",null,v(ve.value),513),[[vt,!d.value]])],2),m("div",Br,[m("button",{onClick:jt},v(y(r)("training.toolbar.presets")),1),m("button",{onClick:ot},v(y(r)("training.toolbar.save")),1),m("button",{onClick:Bt},v(y(r)("training.toolbar.import")),1),m("button",{onClick:A[3]||(A[3]=V=>_.value=!0)},v(y(r)("training.toolbar.history")),1),m("button",{onClick:Ft},v(y(r)("training.toolbar.export")),1),m("button",{onClick:Pt},v(y(r)("training.toolbar.reset")),1)]),m("button",{class:"secondary-action schema-validate",disabled:!a.value,onClick:Ve},v(y(r)("training.validate")),9,zr),m("div",Lr,[m("button",{class:"primary-action train-submit",disabled:!a.value||c.value||N.value.errors.length>0,onClick:st},v(c.value?y(r)("training.submitting"):y(r)("training.start")),9,Kr),m("button",{class:"danger-action stop-training",disabled:!E.value||!!y(k).terminatingId,onClick:lt},v(y(k).terminatingId?y(r)("tasks.detail.stopping"):y(r)("training.stop")),9,Ur)])])],2)],2),L(B,{modelValue:_.value,"onUpdate:modelValue":A[4]||(A[4]=V=>_.value=V),title:y(r)("training.historyDialog.title"),width:"min(760px, 92vw)"},{default:K(()=>[m("div",Jr,[(b(!0),O(U,null,H(D.value,(V,oe)=>(b(),O("article",{key:`${V.time}-${oe}`},[m("div",null,[m("strong",null,v(V.name||y(r)("training.historyDialog.unnamed")),1),m("span",null,v(V.time),1)]),m("button",{onClick:W=>{i.value={...y(Se)(a.value),...V.value},_.value=!1}},v(y(r)("training.historyDialog.use")),9,qr),m("button",{class:"danger",onClick:W=>Mt(oe)},v(y(r)("training.historyDialog.delete")),9,Hr)]))),128)),D.value.length?P("",!0):(b(),O("p",Wr,v(y(r)("training.historyDialog.empty")),1))])]),_:1},8,["modelValue","title"]),L(B,{modelValue:C.value,"onUpdate:modelValue":A[5]||(A[5]=V=>C.value=V),title:y(r)("training.presetsDialog.title"),width:"min(760px, 92vw)"},{default:K(()=>[me((b(),O("div",Gr,[(b(!0),O(U,null,H(rt.value,V=>(b(),O("article",{key:V.metadata.name},[m("div",null,[m("strong",null,v(V.metadata.name),1),m("span",null,v(V.metadata.description||`${V.metadata.author||""} ${V.metadata.version||""}`),1)]),m("button",{onClick:oe=>Dt(V)},v(y(r)("training.presetsDialog.apply")),9,Zr)]))),128)),!s.value&&!rt.value.length?(b(),O("p",Yr,v(y(r)("training.presetsDialog.empty")),1)):P("",!0)])),[[Q,s.value]])]),_:1},8,["modelValue","title"])],64)}}}),Xr=["title"],Qr={class:"engine-credit","data-testid":"anima-fast-credit"},ei={class:"fast-main"},ti={class:"fast-intro"},ni={key:0,class:"eyebrow"},ri={key:1},ii={key:2},ai={class:"engine-credit","data-testid":"anima-fast-credit"},oi=["data-state"],si={key:3,class:"audit-errors"},li={class:"fast-actions"},ui=["disabled"],ci=["disabled"],fi={class:"install-console"},di={class:"install-progress"},gi=ee({__name:"AnimaFastPage",props:{bare:{type:Boolean,default:!1}},setup(e){const t=F({id:"anima-fast",state:"unknown",featureEnabled:!0}),n=F(!1),r=F([]),a=F(0),i=F("");let l,g,f;const{t:c}=te(),_=z(()=>t.value.state==="ready"),k=z(()=>["installing","auditing"].includes(t.value.state)),E=z(()=>{const s=`settings.engines.state.${t.value.state}`,o=c(s);return o===s?t.value.state:o}),$=z(()=>{if(!t.value.featureEnabled||t.value.state==="disabled")return c("settings.engines.hint.disabled");const s=`settings.engines.hint.${t.value.state}`,o=c(s);return o===s?c("settings.engines.hint.unknown"):o});function S(){l!==void 0&&(window.clearInterval(l),l=void 0)}function I(){g?.close(),f?.close(),g=void 0,f=void 0}function C(s,o,d){I(),g=new EventSource(o||`/api/plugins/anima-lora/install/log/stream/${s}`),g.onmessage=p=>{try{const h=JSON.parse(p.data);h.text&&r.value.push(h.text),h.done&&g?.close()}catch{r.value.push(p.data)}},f=new EventSource(d||`/api/plugins/anima-lora/install/progress/stream/${s}`),f.onmessage=p=>{try{const h=JSON.parse(p.data);h.type==="progress"&&(a.value=Number(h.percent||0),i.value=h.message||h.phase||""),(h.done||h.type==="done")&&f?.close()}catch{}}}async function D(s=!0){try{t.value=await Re.status("anima-fast"),_.value&&S();const o=t.value.facts?.task_id;o&&k.value&&!g&&C(o)}catch(o){s&&R.error(o instanceof Error?o.message:c("settings.engines.msg.statusFail"))}}async function u(s=!1){try{await fe.confirm(c(s?"settings.engines.confirm.reinstall":"settings.engines.confirm.animaFast"),c(s?"settings.engines.actions.reinstall":"settings.engines.actions.install"),{type:"warning"}),n.value=!0,r.value=[],a.value=0;const o=s?await Re.repair("anima-fast"):await Re.install("anima-fast");if(o.alreadyReady)return t.value=o.status||t.value,_.value&&S(),R.success(c("settings.engines.msg.ready"));o.taskId&&(C(o.taskId,o.logStream,o.progressStream),l||(l=window.setInterval(()=>D(!1),2e3))),await D(),R.success(c("settings.engines.msg.started"))}catch(o){o!=="cancel"&&o!=="close"&&R.error(o instanceof Error?o.message:c("settings.engines.msg.fail"))}finally{n.value=!1}}return Ze(async()=>{await D(),_.value||(l=window.setInterval(()=>D(!1),2e3))}),Ye(()=>{S(),I()}),(s,o)=>{const d=G("i18n-t");return _.value?(b(),J(Nt,{key:0,title:"Anima LoRA Fast",area:"anima-lora-fast","schema-name":"anima-lora-fast",bare:e.bare},{"form-top":K(()=>[Je(s.$slots,"form-top"),m("p",{class:"engine-ready-chip","data-testid":"engine-ready-chip",title:y(c)("settings.engines.hint.ready")},[o[4]||(o[4]=m("i",{"aria-hidden":"true"},null,-1)),m("span",null,v(y(c)("settings.engines.readyChip")),1)],8,Xr),m("p",Qr,[L(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:K(()=>[...o[5]||(o[5]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:K(()=>[...o[6]||(o[6]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})])]),_:3},8,["bare"])):(b(),O("div",{key:1,class:Z(["fast-page",{bare:e.bare}])},[m("div",ei,[Je(s.$slots,"form-top"),L(an,{state:t.value.state,title:E.value,hint:$.value,loading:n.value,"show-install":t.value.featureEnabled&&!k.value,"show-reinstall":t.value.state==="broken",onInstall:o[0]||(o[0]=p=>u(!1)),onReinstall:o[1]||(o[1]=p=>u(!0))},null,8,["state","title","hint","loading","show-install","show-reinstall"]),m("section",ti,[e.bare?P("",!0):(b(),O("span",ni,"ANIMA FAST RUNTIME")),e.bare?P("",!0):(b(),O("h1",ri,"Anima LoRA Fast")),e.bare?P("",!0):(b(),O("p",ii,v(y(c)("animaFast.intro")),1)),m("p",ai,[L(d,{keypath:"animaFast.credit",tag:"span",scope:"global"},{upstream:K(()=>[...o[7]||(o[7]=[m("a",{href:"https://github.com/sorryhyun/anima_lora",target:"_blank",rel:"noreferrer"},"sorryhyun/anima_lora",-1)])]),notice:K(()=>[...o[8]||(o[8]=[m("a",{href:"https://github.com/wochenlong/lora-scripts-next/blob/dev/NOTICE.md",target:"_blank",rel:"noreferrer"},"NOTICE.md",-1)])]),_:1})]),m("div",{class:"fast-state","data-state":t.value.state},[m("span",null,v(E.value),1),m("strong",null,v(t.value.state),1)],8,oi),t.value.facts?.audit?.errors?.length?(b(),O("div",si,[m("strong",null,v(y(c)("animaFast.auditTitle")),1),(b(!0),O(U,null,H(t.value.facts.audit.errors,p=>(b(),O("p",{key:p},v(p),1))),128))])):P("",!0),m("div",li,[m("button",{class:"primary-action",disabled:n.value||k.value||!t.value.featureEnabled,onClick:o[2]||(o[2]=p=>u(!1))},v(k.value?y(c)("animaFast.installWorking"):y(c)("animaFast.install")),9,ui),t.value.state==="broken"?(b(),O("button",{key:0,class:"secondary-action",disabled:n.value,onClick:o[3]||(o[3]=p=>u(!0))},v(y(c)("settings.engines.actions.reinstall")),9,ci)):P("",!0),L(y(yt),{class:"secondary-action",to:"/settings/engines"},{default:K(()=>[ie(v(y(c)("settings.engines.actions.manage")),1)]),_:1})])])]),m("aside",fi,[m("header",null,[m("span",null,v(i.value||y(c)("animaFast.consoleIdle")),1),m("b",null,v(a.value)+"%",1)]),m("div",di,[m("i",{style:Jt({width:`${a.value}%`})},null,4)]),m("pre",null,v(r.value.length?r.value.join(` +`):y(c)("animaFast.consoleWaiting")),1)])],2))}}}),mi={class:"workbench-selector"},pi={class:"selector-card"},hi={class:"selector-grid"},yi=["value"],vi=["value","disabled"],bi={key:0,class:"selector-hint"},_i={class:"selector-card"},wi=["aria-label"],ki=["disabled","onClick"],Si={key:0,class:"selector-hint"},ze=ee({__name:"TrainingSelector",props:{model:{required:!0},modelModifiers:{},engine:{required:!0},engineModifiers:{},target:{required:!0},targetModifiers:{}},emits:["update:model","update:engine","update:target"],setup(e){const t=Pe(e,"model"),n=Pe(e,"engine"),r=Pe(e,"target"),{t:a}=te(),i=z(()=>Ne.filter(g=>!le(t.value,g))),l=z(()=>Ce.filter(g=>!ue(t.value,n.value,g)));return(g,f)=>(b(),O("div",mi,[m("div",pi,[m("h2",null,v(y(a)("training.selector.group")),1),m("div",hi,[m("label",null,[ie(v(y(a)("training.selector.model"))+" ",1),me(m("select",{"onUpdate:modelValue":f[0]||(f[0]=c=>t.value=c)},[(b(!0),O(U,null,H(y(At),c=>(b(),O("option",{key:c,value:c},v(y(a)(`training.selector.models.${c}`)),9,yi))),128))],512),[[ct,t.value]])]),m("label",null,[ie(v(y(a)("training.selector.engine"))+" ",1),me(m("select",{"onUpdate:modelValue":f[1]||(f[1]=c=>n.value=c)},[(b(!0),O(U,null,H(y(Ne),c=>(b(),O("option",{key:c,value:c,disabled:!y(le)(t.value,c)},v(y(a)(`training.selector.engines.${c}`)),9,vi))),128))],512),[[ct,n.value]])]),i.value.length?(b(),O("p",bi,v(y(a)("training.selector.unsupportedForModel",{list:i.value.map(c=>y(a)(`training.selector.engines.${c}`)).join(" / ")})),1)):P("",!0)])]),m("div",_i,[m("h2",null,v(y(a)("training.selector.target")),1),m("div",{class:"segmented",role:"group","aria-label":y(a)("training.selector.targetType")},[(b(!0),O(U,null,H(y(Ce),c=>(b(),O("button",{key:c,class:Z({active:r.value===c}),disabled:!y(ue)(t.value,n.value,c),onClick:_=>r.value=c},v(y(a)(`training.selector.targets.${c}`)),11,ki))),128))],8,wi),l.value.length?(b(),O("p",Si,v(y(a)("training.selector.unsupportedForModel",{list:l.value.map(c=>y(a)(`training.selector.targets.${c}`)).join(" / ")})),1)):P("",!0)])]))}}),xi={class:"workbench-header"},Le=ee({__name:"WorkbenchHeader",setup(e){const{t}=te();return(n,r)=>(b(),O("header",xi,[m("div",null,[m("h1",null,v(y(t)("training.title")),1),m("p",null,v(y(t)("training.subtitle")),1)])]))}}),Ke=e=>Ne.includes(e),Ue=e=>Ce.includes(e);function $i(e){const t=typeof e.schema=="string"?wr(e.schema):void 0;if(t)return{model:t.model,engine:t.engine,target:t.target};const n={...br},r=!!(e.model||e.engine||e.target),a=ht(e.model);if(a&&(n.model=a),Ke(e.engine)&&(n.engine=e.engine),Ue(e.target)&&(n.target=e.target),r)return n;const i=Ht();if(i){const g=ht(i.model);return g&&(n.model=g,Ke(i.engine)&&le(n.model,i.engine)&&(n.engine=i.engine),Ue(i.target)&&ue(n.model,n.engine,i.target)&&(n.target=i.target)),n}const l=Wt(n.model);return l&&(Ke(l.engine)&&le(n.model,l.engine)&&(n.engine=l.engine),Ue(l.target)&&ue(n.model,n.engine,l.target)&&(n.target=l.target)),n}const Oi={class:"workbench-page"},Ai={key:0,class:"workbench-fallback"},Ei={class:"unsupported-hint"},Di=ee({__name:"TrainingWorkbenchPage",setup(e){const t=qt(),n=_t(),{t:r}=te(),a=$i(t.query),i=F(a.model),l=F(a.engine),g=F(a.target),f=z(()=>Et(i.value,l.value,g.value)),c=z(()=>{if(!f.value)return;const _=_r[f.value.schemaName];return{title:r(_.titleKey),area:r(_.areaKey)}});return de([i,l,g],()=>{let _=!1;le(i.value,l.value)||(l.value=Sr(i.value)??l.value,_=!0),ue(i.value,l.value,g.value)||(g.value=xr(i.value,l.value)??g.value,_=!0),_&&R.info(r("training.selector.autoAdjusted")),Gt(i.value,l.value,g.value),n.replace({query:{model:i.value,engine:l.value,target:g.value}})}),(_,k)=>(b(),O("div",Oi,[f.value?f.value.schemaName==="anima-lora-fast"?(b(),J(gi,{key:1,bare:""},{"form-top":K(()=>[L(Le),L(ze,{model:i.value,"onUpdate:model":k[3]||(k[3]=E=>i.value=E),engine:l.value,"onUpdate:engine":k[4]||(k[4]=E=>l.value=E),target:g.value,"onUpdate:target":k[5]||(k[5]=E=>g.value=E)},null,8,["model","engine","target"])]),_:1})):c.value?(b(),J(Nt,{key:f.value.storageKey||f.value.schemaName,bare:"",title:c.value.title,area:c.value.area,"schema-name":f.value.schemaName,"field-defaults":f.value.defaults,"storage-key":f.value.storageKey,"legacy-storage-key":f.value.legacyStorageKey},{"form-top":K(()=>[L(Le),L(ze,{model:i.value,"onUpdate:model":k[6]||(k[6]=E=>i.value=E),engine:l.value,"onUpdate:engine":k[7]||(k[7]=E=>l.value=E),target:g.value,"onUpdate:target":k[8]||(k[8]=E=>g.value=E)},null,8,["model","engine","target"])]),_:1},8,["title","area","schema-name","field-defaults","storage-key","legacy-storage-key"])):P("",!0):(b(),O("div",Ai,[L(Le),L(ze,{model:i.value,"onUpdate:model":k[0]||(k[0]=E=>i.value=E),engine:l.value,"onUpdate:engine":k[1]||(k[1]=E=>l.value=E),target:g.value,"onUpdate:target":k[2]||(k[2]=E=>g.value=E)},null,8,["model","engine","target"]),m("div",Ei,[m("strong",null,v(y(r)("training.selector.unsupported")),1)])]))]))}});export{Di as default}; diff --git a/frontend/dist/assets/index-DNZgQ1o0.js b/frontend/dist/assets/index-BC7FDA30.js similarity index 99% rename from frontend/dist/assets/index-DNZgQ1o0.js rename to frontend/dist/assets/index-BC7FDA30.js index 64c49381..026b92c9 100644 --- a/frontend/dist/assets/index-DNZgQ1o0.js +++ b/frontend/dist/assets/index-BC7FDA30.js @@ -1 +1 @@ -import{at as J,au as k,d as K,av as ve,o as m,c as M,O as L,e as P,w as N,n as Q,m as g,b as l,f as X,t as Y,p as b,ak as _,h as d,aw as C,ax as j,ay as ye,az as he,al as ee,aA as be,aB as te,a7 as Ce,y as Te,k as xe,aC as we,aD as Se,j as h,B as Be,a as Z,a2 as q,aj as Ee,F as Ne,q as ke,a1 as Me,L as $e,s as E,ag as G,aE as Ie,v as Oe,_ as Le,$ as De,aF as c,ad as F,am as se,ac as D,aG as O,ao as Pe,an as W,aq as Fe,ar as ne,aH as Ae}from"./index-BlvrX0Zy.js";const He=J({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:k([String,Object,Array,Boolean]),default:void 0},offset:{type:k(Array),default:()=>[0,0]},badgeClass:{type:String}});var ze=K({name:"ElBadge",__name:"badge",props:He,setup(e,{expose:s}){const t=e,n=ve("badge"),a=d(()=>t.isDot?"":C(t.value)&&C(t.max)?t.max[{backgroundColor:t.color,marginRight:j(-t.offset[0]),marginTop:j(t.offset[1])},t.badgeStyle??{}]);return s({content:a}),(i,o)=>(m(),M("div",{class:g(l(n).b())},[L(i.$slots,"default"),P(_,{name:`${l(n).namespace.value}-zoom-in-center`},{default:N(()=>[!e.hidden&&(a.value||e.isDot||i.$slots.content)?(m(),M("sup",{key:0,class:g([l(n).e("content"),l(n).em("content",e.type),l(n).is("fixed",!!i.$slots.default),l(n).is("dot",e.isDot),l(n).is("hide-zero",!e.showZero&&e.value===0),e.badgeClass]),style:Q(u.value)},[L(i.$slots,"content",{value:a.value},()=>[X(Y(a.value),1)])],6)):b("v-if",!0)]),_:3},8,["name"])],2))}}),Re=ze;const Ve=ye(Re),ae=["primary","success","info","warning","error"],oe=["top","top-left","top-right","bottom","bottom-left","bottom-right"],r=he({customClass:"",dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,placement:void 0,zIndex:0,grouping:!1,repeatNum:1,appendTo:ee?document.body:void 0}),Ue=J({customClass:{type:String,default:r.customClass},dangerouslyUseHTMLString:{type:Boolean,default:r.dangerouslyUseHTMLString},duration:{type:Number,default:r.duration},icon:{type:be,default:r.icon},id:{type:String,default:r.id},message:{type:k([String,Object,Function]),default:r.message},onClose:{type:k(Function),default:r.onClose},showClose:{type:Boolean,default:r.showClose},type:{type:String,values:ae,default:r.type},plain:{type:Boolean,default:r.plain},offset:{type:Number,default:r.offset},placement:{type:String,values:oe,default:r.placement},zIndex:{type:Number,default:r.zIndex},grouping:{type:Boolean,default:r.grouping},repeatNum:{type:Number,default:r.repeatNum}}),je={destroy:()=>!0},p=te({}),Ze=e=>(p[e]||(p[e]=te([])),p[e]),qe=(e,s)=>{const t=p[s]||[],n=t.findIndex(i=>i.id===e),a=t[n];let u;return n>0&&(u=t[n-1]),{current:a,prev:u}},Ge=(e,s)=>{const{prev:t}=qe(e,s);return t?t.vm.exposed.bottom.value:0},We=(e,s,t)=>(p[t]||[]).findIndex(n=>n.id===e)>0?16:s,Je=["id"],Ke=["innerHTML"];var Qe=K({name:"ElMessage",__name:"message",props:Ue,emits:je,setup(e,{expose:s,emit:t}){const{Close:n}=Me,a=e,u=t,i=E(!1),{ns:o,zIndex:T}=Ce("message"),{currentZIndex:x,nextZIndex:ie}=T,$=E(),w=E(!1),A=E(0);let H;const re=d(()=>a.type?a.type==="error"?"danger":a.type:"info"),ue=d(()=>{const f=a.type;return{[o.bm("icon",f)]:f&&G[f]}}),z=d(()=>a.icon||G[a.type]||""),y=d(()=>a.placement||"top"),ce=d(()=>Ge(a.id,y.value)),R=d(()=>Math.max(We(a.id,a.offset,y.value)+ce.value,a.offset)),de=d(()=>A.value+R.value),pe=d(()=>y.value.includes("left")?o.is("left"):y.value.includes("right")?o.is("right"):o.is("center")),V=d(()=>y.value.startsWith("top")?"top":"bottom"),fe=d(()=>({[V.value]:`${R.value}px`,zIndex:x.value}));function I(){a.duration!==0&&({stop:H}=Ie(()=>{S()},a.duration))}function U(){H?.()}function S(){w.value=!1,Oe(()=>{i.value||(a.onClose?.(),u("destroy"))})}function me(f){Le(f)===De.esc&&S()}return Te(()=>{I(),ie(),w.value=!0}),xe(()=>a.repeatNum,()=>{U(),I()}),we(document,"keydown",me),Se($,()=>{A.value=$.value.getBoundingClientRect().height}),s({visible:w,bottom:de,close:S}),(f,B)=>(m(),h(_,{name:l(o).b("fade"),onBeforeEnter:B[0]||(B[0]=ge=>i.value=!0),onBeforeLeave:e.onClose,onAfterLeave:B[1]||(B[1]=ge=>f.$emit("destroy")),persisted:""},{default:N(()=>[Be(Z("div",{id:e.id,ref_key:"messageRef",ref:$,class:g([l(o).b(),{[l(o).m(e.type)]:e.type},l(o).is("closable",e.showClose),l(o).is("plain",e.plain),l(o).is("bottom",V.value==="bottom"),pe.value,e.customClass]),style:Q(fe.value),role:"alert",onMouseenter:U,onMouseleave:I},[e.repeatNum>1?(m(),h(l(Ve),{key:0,value:e.repeatNum,type:re.value,class:g(l(o).e("badge"))},null,8,["value","type","class"])):b("v-if",!0),z.value?(m(),h(l(q),{key:1,class:g([l(o).e("icon"),ue.value])},{default:N(()=>[(m(),h(Ee(z.value)))]),_:1},8,["class"])):b("v-if",!0),!e.dangerouslyUseHTMLString||f.$slots.default?(m(),M("p",{key:2,class:g(l(o).e("content"))},[L(f.$slots,"default",{},()=>[X(Y(e.message),1)])],2)):(m(),M(Ne,{key:3},[b(" Caution here, message could've been compromised, never use user's input as message "),Z("p",{class:g(l(o).e("content")),innerHTML:e.message},null,10,Ke)],2112)),e.showClose?(m(),h(l(q),{key:4,class:g(l(o).e("closeBtn")),onClick:ke(S,["stop"])},{default:N(()=>[P(l(n))]),_:1},8,["class"])):b("v-if",!0)],46,Je),[[$e,w.value]])]),_:3},8,["name","onBeforeLeave"]))}}),Xe=Qe;let Ye=1;const _e=e=>{if(!e.appendTo)e.appendTo=document.body;else if(F(e.appendTo)){let s=document.querySelector(e.appendTo);Fe(s)||(ne("ElMessage","the appendTo option is not an HTMLElement. Falling back to document.body."),s=document.body),e.appendTo=s}},et=e=>{!e.placement&&F(c.placement)&&c.placement&&(e.placement=c.placement),e.placement||(e.placement="top"),oe.includes(e.placement)||(ne("ElMessage",`Invalid placement: ${e.placement}. Falling back to 'top'.`),e.placement="top")},le=e=>{const s=!e||F(e)||se(e)||D(e)?{message:e}:e,t={...r,...s};return _e(t),et(t),O(c.grouping)&&!t.grouping&&(t.grouping=c.grouping),C(c.duration)&&t.duration===3e3&&(t.duration=c.duration),C(c.offset)&&t.offset===16&&(t.offset=c.offset),O(c.showClose)&&!t.showClose&&(t.showClose=c.showClose),O(c.plain)&&!t.plain&&(t.plain=c.plain),t},tt=e=>{const s=p[e.props.placement||"top"],t=s.indexOf(e);if(t===-1)return;s.splice(t,1);const{handler:n}=e;n.close()},st=({appendTo:e,...s},t)=>{const n=`message_${Ye++}`,a=s.onClose,u=document.createElement("div"),i={...s,id:n,onClose:()=>{a?.(),tt(x)},onDestroy:()=>{W(null,u)}},o=P(Xe,i,D(i.message)||se(i.message)?{default:D(i.message)?i.message:()=>i.message}:null);o.appContext=t||v._context,W(o,u),e.appendChild(u.firstElementChild);const T=o.component,x={id:n,vnode:o,vm:T,handler:{close:()=>{T.exposed.close()}},props:o.component.props};return x},v=(e={},s)=>{if(!ee)return{close:()=>{}};const t=le(e),n=Ze(t.placement||"top");if(t.grouping&&n.length){const u=n.find(({vnode:i})=>i.props?.message===t.message);if(u)return u.props.repeatNum+=1,u.props.type=t.type,u.handler}if(C(c.max)&&n.length>=c.max)return{close:()=>{}};const a=st(t,s);return n.push(a),a.handler};ae.forEach(e=>{v[e]=(s={},t)=>v({...le(s),type:e},t)});function nt(e){for(const s in p)if(Pe(p,s)){const t=[...p[s]];for(const n of t)(!e||e===n.props.type)&&n.handler.close()}}function at(e){p[e]&&[...p[e]].forEach(s=>s.handler.close())}v.closeAll=nt;v.closeAllByPlacement=at;v._context=null;const lt=Ae(v,"$message");export{lt as E}; +import{at as J,au as k,d as K,av as ve,o as m,c as M,O as L,e as P,w as N,n as Q,m as g,b as l,f as X,t as Y,p as b,ak as _,h as d,aw as C,ax as j,ay as ye,az as he,al as ee,aA as be,aB as te,a7 as Ce,y as Te,k as xe,aC as we,aD as Se,j as h,B as Be,a as Z,a2 as q,aj as Ee,F as Ne,q as ke,a1 as Me,L as $e,s as E,ag as G,aE as Ie,v as Oe,_ as Le,$ as De,aF as c,ad as F,am as se,ac as D,aG as O,ao as Pe,an as W,aq as Fe,ar as ne,aH as Ae}from"./index-BoQWc9mA.js";const He=J({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:k([String,Object,Array,Boolean]),default:void 0},offset:{type:k(Array),default:()=>[0,0]},badgeClass:{type:String}});var ze=K({name:"ElBadge",__name:"badge",props:He,setup(e,{expose:s}){const t=e,n=ve("badge"),a=d(()=>t.isDot?"":C(t.value)&&C(t.max)?t.max[{backgroundColor:t.color,marginRight:j(-t.offset[0]),marginTop:j(t.offset[1])},t.badgeStyle??{}]);return s({content:a}),(i,o)=>(m(),M("div",{class:g(l(n).b())},[L(i.$slots,"default"),P(_,{name:`${l(n).namespace.value}-zoom-in-center`},{default:N(()=>[!e.hidden&&(a.value||e.isDot||i.$slots.content)?(m(),M("sup",{key:0,class:g([l(n).e("content"),l(n).em("content",e.type),l(n).is("fixed",!!i.$slots.default),l(n).is("dot",e.isDot),l(n).is("hide-zero",!e.showZero&&e.value===0),e.badgeClass]),style:Q(u.value)},[L(i.$slots,"content",{value:a.value},()=>[X(Y(a.value),1)])],6)):b("v-if",!0)]),_:3},8,["name"])],2))}}),Re=ze;const Ve=ye(Re),ae=["primary","success","info","warning","error"],oe=["top","top-left","top-right","bottom","bottom-left","bottom-right"],r=he({customClass:"",dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,placement:void 0,zIndex:0,grouping:!1,repeatNum:1,appendTo:ee?document.body:void 0}),Ue=J({customClass:{type:String,default:r.customClass},dangerouslyUseHTMLString:{type:Boolean,default:r.dangerouslyUseHTMLString},duration:{type:Number,default:r.duration},icon:{type:be,default:r.icon},id:{type:String,default:r.id},message:{type:k([String,Object,Function]),default:r.message},onClose:{type:k(Function),default:r.onClose},showClose:{type:Boolean,default:r.showClose},type:{type:String,values:ae,default:r.type},plain:{type:Boolean,default:r.plain},offset:{type:Number,default:r.offset},placement:{type:String,values:oe,default:r.placement},zIndex:{type:Number,default:r.zIndex},grouping:{type:Boolean,default:r.grouping},repeatNum:{type:Number,default:r.repeatNum}}),je={destroy:()=>!0},p=te({}),Ze=e=>(p[e]||(p[e]=te([])),p[e]),qe=(e,s)=>{const t=p[s]||[],n=t.findIndex(i=>i.id===e),a=t[n];let u;return n>0&&(u=t[n-1]),{current:a,prev:u}},Ge=(e,s)=>{const{prev:t}=qe(e,s);return t?t.vm.exposed.bottom.value:0},We=(e,s,t)=>(p[t]||[]).findIndex(n=>n.id===e)>0?16:s,Je=["id"],Ke=["innerHTML"];var Qe=K({name:"ElMessage",__name:"message",props:Ue,emits:je,setup(e,{expose:s,emit:t}){const{Close:n}=Me,a=e,u=t,i=E(!1),{ns:o,zIndex:T}=Ce("message"),{currentZIndex:x,nextZIndex:ie}=T,$=E(),w=E(!1),A=E(0);let H;const re=d(()=>a.type?a.type==="error"?"danger":a.type:"info"),ue=d(()=>{const f=a.type;return{[o.bm("icon",f)]:f&&G[f]}}),z=d(()=>a.icon||G[a.type]||""),y=d(()=>a.placement||"top"),ce=d(()=>Ge(a.id,y.value)),R=d(()=>Math.max(We(a.id,a.offset,y.value)+ce.value,a.offset)),de=d(()=>A.value+R.value),pe=d(()=>y.value.includes("left")?o.is("left"):y.value.includes("right")?o.is("right"):o.is("center")),V=d(()=>y.value.startsWith("top")?"top":"bottom"),fe=d(()=>({[V.value]:`${R.value}px`,zIndex:x.value}));function I(){a.duration!==0&&({stop:H}=Ie(()=>{S()},a.duration))}function U(){H?.()}function S(){w.value=!1,Oe(()=>{i.value||(a.onClose?.(),u("destroy"))})}function me(f){Le(f)===De.esc&&S()}return Te(()=>{I(),ie(),w.value=!0}),xe(()=>a.repeatNum,()=>{U(),I()}),we(document,"keydown",me),Se($,()=>{A.value=$.value.getBoundingClientRect().height}),s({visible:w,bottom:de,close:S}),(f,B)=>(m(),h(_,{name:l(o).b("fade"),onBeforeEnter:B[0]||(B[0]=ge=>i.value=!0),onBeforeLeave:e.onClose,onAfterLeave:B[1]||(B[1]=ge=>f.$emit("destroy")),persisted:""},{default:N(()=>[Be(Z("div",{id:e.id,ref_key:"messageRef",ref:$,class:g([l(o).b(),{[l(o).m(e.type)]:e.type},l(o).is("closable",e.showClose),l(o).is("plain",e.plain),l(o).is("bottom",V.value==="bottom"),pe.value,e.customClass]),style:Q(fe.value),role:"alert",onMouseenter:U,onMouseleave:I},[e.repeatNum>1?(m(),h(l(Ve),{key:0,value:e.repeatNum,type:re.value,class:g(l(o).e("badge"))},null,8,["value","type","class"])):b("v-if",!0),z.value?(m(),h(l(q),{key:1,class:g([l(o).e("icon"),ue.value])},{default:N(()=>[(m(),h(Ee(z.value)))]),_:1},8,["class"])):b("v-if",!0),!e.dangerouslyUseHTMLString||f.$slots.default?(m(),M("p",{key:2,class:g(l(o).e("content"))},[L(f.$slots,"default",{},()=>[X(Y(e.message),1)])],2)):(m(),M(Ne,{key:3},[b(" Caution here, message could've been compromised, never use user's input as message "),Z("p",{class:g(l(o).e("content")),innerHTML:e.message},null,10,Ke)],2112)),e.showClose?(m(),h(l(q),{key:4,class:g(l(o).e("closeBtn")),onClick:ke(S,["stop"])},{default:N(()=>[P(l(n))]),_:1},8,["class"])):b("v-if",!0)],46,Je),[[$e,w.value]])]),_:3},8,["name","onBeforeLeave"]))}}),Xe=Qe;let Ye=1;const _e=e=>{if(!e.appendTo)e.appendTo=document.body;else if(F(e.appendTo)){let s=document.querySelector(e.appendTo);Fe(s)||(ne("ElMessage","the appendTo option is not an HTMLElement. Falling back to document.body."),s=document.body),e.appendTo=s}},et=e=>{!e.placement&&F(c.placement)&&c.placement&&(e.placement=c.placement),e.placement||(e.placement="top"),oe.includes(e.placement)||(ne("ElMessage",`Invalid placement: ${e.placement}. Falling back to 'top'.`),e.placement="top")},le=e=>{const s=!e||F(e)||se(e)||D(e)?{message:e}:e,t={...r,...s};return _e(t),et(t),O(c.grouping)&&!t.grouping&&(t.grouping=c.grouping),C(c.duration)&&t.duration===3e3&&(t.duration=c.duration),C(c.offset)&&t.offset===16&&(t.offset=c.offset),O(c.showClose)&&!t.showClose&&(t.showClose=c.showClose),O(c.plain)&&!t.plain&&(t.plain=c.plain),t},tt=e=>{const s=p[e.props.placement||"top"],t=s.indexOf(e);if(t===-1)return;s.splice(t,1);const{handler:n}=e;n.close()},st=({appendTo:e,...s},t)=>{const n=`message_${Ye++}`,a=s.onClose,u=document.createElement("div"),i={...s,id:n,onClose:()=>{a?.(),tt(x)},onDestroy:()=>{W(null,u)}},o=P(Xe,i,D(i.message)||se(i.message)?{default:D(i.message)?i.message:()=>i.message}:null);o.appContext=t||v._context,W(o,u),e.appendChild(u.firstElementChild);const T=o.component,x={id:n,vnode:o,vm:T,handler:{close:()=>{T.exposed.close()}},props:o.component.props};return x},v=(e={},s)=>{if(!ee)return{close:()=>{}};const t=le(e),n=Ze(t.placement||"top");if(t.grouping&&n.length){const u=n.find(({vnode:i})=>i.props?.message===t.message);if(u)return u.props.repeatNum+=1,u.props.type=t.type,u.handler}if(C(c.max)&&n.length>=c.max)return{close:()=>{}};const a=st(t,s);return n.push(a),a.handler};ae.forEach(e=>{v[e]=(s={},t)=>v({...le(s),type:e},t)});function nt(e){for(const s in p)if(Pe(p,s)){const t=[...p[s]];for(const n of t)(!e||e===n.props.type)&&n.handler.close()}}function at(e){p[e]&&[...p[e]].forEach(s=>s.handler.close())}v.closeAll=nt;v.closeAllByPlacement=at;v._context=null;const lt=Ae(v,"$message");export{lt as E}; diff --git a/frontend/dist/assets/index-DILr9bpz.js b/frontend/dist/assets/index-Bff4F9zQ.js similarity index 99% rename from frontend/dist/assets/index-DILr9bpz.js rename to frontend/dist/assets/index-Bff4F9zQ.js index 6b5638f2..66b0f53d 100644 --- a/frontend/dist/assets/index-DILr9bpz.js +++ b/frontend/dist/assets/index-Bff4F9zQ.js @@ -1 +1 @@ -import{v as $,Z as x,_ as he,$ as Ee,d as Be,a0 as we,a1 as Te,a2 as Me,a3 as ke,a4 as Ie,a5 as Se,a6 as Ae,a7 as Le,h as C,D as $e,a8 as K,a9 as _,aa as ee,k as ne,ab as Re,y as Oe,l as Ve,ac as j,ad as G,ae as ze,af as De,s as B,ag as oe,ah as Pe,ai as Fe,i as S,o as d,j as m,w as g,B as H,e as w,a as v,m as i,q as V,n as se,c as z,aj as A,p as b,t as L,H as D,O as He,L as N,f as te,ak as Ne,al as Ue,am as ie,an as ue,ao as ae,ap as de,aq as le,ar as Ke,as as je}from"./index-BlvrX0Zy.js";const q="_trap-focus-children",h=[],re=e=>{if(h.length===0)return;const n=he(e),s=h[h.length-1][q];if(s.length>0&&n===Ee.tab){if(s.length===1){e.preventDefault(),document.activeElement!==s[0]&&s[0].focus();return}const l=e.shiftKey,r=e.target===s[0],t=e.target===s[s.length-1];r&&l&&(e.preventDefault(),s[s.length-1].focus()),t&&!l&&(e.preventDefault(),s[0].focus())}},qe={beforeMount(e){e[q]=x(e),h.push(e),h.length<=1&&document.addEventListener("keydown",re)},updated(e){$(()=>{e[q]=x(e)})},unmounted(){h.shift(),h.length===0&&document.removeEventListener("keydown",re)}};var Ge=Be({name:"ElMessageBox",directives:{TrapFocus:qe},components:{ElButton:Ae,ElFocusTrap:Se,ElInput:Ie,ElOverlay:ke,ElIcon:Me,...Te},inheritAttrs:!1,props:{buttonSize:{type:String,validator:we},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:Boolean,container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:n}){const{locale:s,zIndex:l,ns:r,size:t}=Le("message-box",C(()=>e.buttonSize)),{t:c}=s,{nextZIndex:f}=l,p=B(!1),o=$e({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",cancelButtonType:"",confirmButtonType:"primary",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",closeIcon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:"",inputValidator:void 0,inputErrorMessage:"",message:"",modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:K(_),cancelButtonLoadingIcon:K(_),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:f()}),P=C(()=>{const a=o.type;return{[r.bm("icon",a)]:a&&oe[a]}}),u=ee(),ce=ee(),fe=C(()=>{const a=o.type;return o.icon||a&&oe[a]||""}),me=C(()=>!!o.message),E=B(),W=B(),M=B(),k=B(),X=B(),pe=C(()=>o.confirmButtonClass);ne(()=>o.inputValue,async a=>{await $(),e.boxType==="prompt"&&a&&J()},{immediate:!0}),ne(()=>p.value,a=>{a&&(e.boxType!=="prompt"&&(o.autofocus?M.value=X.value?.$el??E.value:M.value=E.value),o.zIndex=f()),e.boxType==="prompt"&&(a?$().then(()=>{k.value&&k.value.$el&&(o.autofocus?M.value=Ce()??E.value:M.value=E.value)}):(o.editorErrorMessage="",o.validateError=!1))});const{isDragging:ge}=Re(E,W,C(()=>e.draggable),C(()=>e.overflow));Oe(async()=>{await $(),e.closeOnHashChange&&window.addEventListener("hashchange",I)}),Ve(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",I)});function I(){p.value&&(p.value=!1,$(()=>{o.action&&n("action",o.action)}))}const Z=()=>{e.closeOnClickModal&&O(o.distinguishCancelAndClose?"close":"cancel")},ve=Pe(Z),ye=a=>{if(o.inputType!=="textarea"&&!k.value?.isComposing)return a.preventDefault(),O("confirm")},O=a=>{e.boxType==="prompt"&&a==="confirm"&&!J()||(o.action=a,o.beforeClose?o.beforeClose?.(a,o,I):I())},J=()=>{if(e.boxType==="prompt"){const a=o.inputPattern;if(a&&!a.test(o.inputValue||""))return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;const Y=o.inputValidator;if(j(Y)){const F=Y(o.inputValue);if(F===!1)return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;if(G(F))return o.editorErrorMessage=F,o.validateError=!0,!1}}return o.editorErrorMessage="",o.validateError=!1,!0},Ce=()=>{const a=k.value?.$refs;return a?.input??a?.textarea},Q=()=>{O("close")},be=()=>{e.closeOnPressEscape&&Q()};return e.lockScroll&&ze(p,{ns:r}),{...De(o),ns:r,overlayEvent:ve,visible:p,hasMessage:me,typeClass:P,contentId:u,inputId:ce,btnSize:t,iconComponent:fe,confirmButtonClasses:pe,rootRef:E,focusStartRef:M,headerRef:W,inputRef:k,isDragging:ge,confirmRef:X,doClose:I,handleClose:Q,onCloseRequested:be,handleWrapperClick:Z,handleInputEnter:ye,handleAction:O,t:c}}});const We=["aria-label","aria-describedby"],Xe=["aria-label"],Ze=["id"];function Je(e,n,s,l,r,t){const c=S("el-icon"),f=S("el-input"),p=S("el-button"),o=S("el-focus-trap"),P=S("el-overlay");return d(),m(Ne,{name:"fade-in-linear",onAfterLeave:n[11]||(n[11]=u=>e.$emit("vanish")),persisted:""},{default:g(()=>[H(w(P,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:g(()=>[v("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:i(`${e.ns.namespace.value}-overlay-message-box`),onClick:n[8]||(n[8]=(...u)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...u)),onMousedown:n[9]||(n[9]=(...u)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...u)),onMouseup:n[10]||(n[10]=(...u)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...u))},[w(o,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:g(()=>[v("div",{ref:"rootRef",class:i([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),e.ns.is("dragging",e.isDragging),{[e.ns.m("center")]:e.center}]),style:se(e.customStyle),tabindex:"-1",onClick:n[7]||(n[7]=V(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(d(),z("div",{key:0,ref:"headerRef",class:i([e.ns.e("header"),{"show-close":e.showClose}])},[v("div",{class:i(e.ns.e("title"))},[e.iconComponent&&e.center?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),v("span",null,L(e.title),1)],2),e.showClose?(d(),z("button",{key:0,type:"button",class:i(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:n[0]||(n[0]=u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:n[1]||(n[1]=D(V(u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[w(c,{class:i(e.ns.e("close"))},{default:g(()=>[(d(),m(A(e.closeIcon||"close")))]),_:1},8,["class"])],42,Xe)):b("v-if",!0)],2)):b("v-if",!0),v("div",{id:e.contentId,class:i(e.ns.e("content"))},[v("div",{class:i(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),e.hasMessage?(d(),z("div",{key:1,class:i(e.ns.e("message"))},[He(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(d(),m(A(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(d(),m(A(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0,textContent:L(e.message)},null,8,["for","textContent"]))])],2)):b("v-if",!0)],2),H(v("div",{class:i(e.ns.e("input"))},[w(f,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":n[2]||(n[2]=u=>e.inputValue=u),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:i({invalid:e.validateError}),onKeydown:D(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),v("div",{class:i(e.ns.e("errormsg")),style:se({visibility:e.editorErrorMessage?"visible":"hidden"})},L(e.editorErrorMessage),7)],2),[[N,e.showInput]])],10,Ze),e.showCancelButton||e.showConfirmButton?(d(),z("div",{key:1,class:i(e.ns.e("btns"))},[e.showCancelButton?(d(),m(p,{key:0,type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:i([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:n[3]||(n[3]=u=>e.handleAction("cancel")),onKeydown:n[4]||(n[4]=D(V(u=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","size"])):b("v-if",!0),H(w(p,{ref:"confirmRef",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:i([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:n[5]||(n[5]=u=>e.handleAction("confirm")),onKeydown:n[6]||(n[6]=D(V(u=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","disabled","size"]),[[N,e.showConfirmButton]])],2)):b("v-if",!0)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,We)]),_:3},8,["z-index","overlay-class","mask"]),[[N,e.visible]])]),_:3})}var Qe=Fe(Ge,[["render",Je]]);const R=new Map,Ye=e=>{let n=document.body;return e.appendTo&&(G(e.appendTo)&&(n=document.querySelector(e.appendTo)),le(e.appendTo)&&(n=e.appendTo),le(n)||(Ke("ElMessageBox","the appendTo option is not an HTMLElement. Falling back to document.body."),n=document.body)),n},U=(e,n)=>{const s=e.component?.proxy;return()=>s.handleAction(n)},xe=(e,n,s=null)=>{const l=w(Qe,e,j(e.message)||ie(e.message)?{default:j(e.message)?()=>e.message({confirm:U(l,"confirm"),cancel:U(l,"cancel"),close:U(l,"close")}):()=>e.message}:null);return l.appContext=s,ue(l,n),Ye(e).appendChild(n.firstElementChild),l.component},_e=()=>document.createElement("div"),en=(e,n)=>{const s=_e();e.onVanish=()=>{ue(null,s),R.delete(r)},e.onAction=t=>{const c=R.get(r);let f;e.showInput?f={value:r.inputValue,action:t}:f=t,e.callback?e.callback(f,l.proxy):t==="cancel"||t==="close"?e.distinguishCancelAndClose&&t!=="cancel"?c.reject("close"):c.reject("cancel"):c.resolve(f)};const l=xe(e,s,n),r=l.proxy;for(const t in e)ae(e,t)&&!ae(r.$props,t)&&(t==="closeIcon"&&de(e[t])?r[t]=K(e[t]):r[t]=e[t]);return r.visible=!0,r};function T(e,n=null){if(!Ue)return Promise.reject();let s;return G(e)||ie(e)?e={message:e}:s=e.callback,new Promise((l,r)=>{const t=en(e,n??T._context);R.set(t,{options:e,callback:s,resolve:l,reject:r})})}const nn=["alert","confirm","prompt"],on={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};nn.forEach(e=>{T[e]=sn(e)});function sn(e){return(n,s,l,r)=>{let t="";return de(s)?(l=s,t=""):je(s)?t="":t=s,T(Object.assign({title:t,message:n,type:"",...on[e]},l,{boxType:e}),r)}}T.close=()=>{R.forEach((e,n)=>{n.doClose()}),R.clear()};T._context=null;const y=T;y.install=e=>{y._context=e._context,e.config.globalProperties.$msgbox=y,e.config.globalProperties.$messageBox=y,e.config.globalProperties.$alert=y.alert,e.config.globalProperties.$confirm=y.confirm,e.config.globalProperties.$prompt=y.prompt};const an=y;export{an as E}; +import{v as $,Z as x,_ as he,$ as Ee,d as Be,a0 as we,a1 as Te,a2 as Me,a3 as ke,a4 as Ie,a5 as Se,a6 as Ae,a7 as Le,h as C,D as $e,a8 as K,a9 as _,aa as ee,k as ne,ab as Re,y as Oe,l as Ve,ac as j,ad as G,ae as ze,af as De,s as B,ag as oe,ah as Pe,ai as Fe,i as S,o as d,j as m,w as g,B as H,e as w,a as v,m as i,q as V,n as se,c as z,aj as A,p as b,t as L,H as D,O as He,L as N,f as te,ak as Ne,al as Ue,am as ie,an as ue,ao as ae,ap as de,aq as le,ar as Ke,as as je}from"./index-BoQWc9mA.js";const q="_trap-focus-children",h=[],re=e=>{if(h.length===0)return;const n=he(e),s=h[h.length-1][q];if(s.length>0&&n===Ee.tab){if(s.length===1){e.preventDefault(),document.activeElement!==s[0]&&s[0].focus();return}const l=e.shiftKey,r=e.target===s[0],t=e.target===s[s.length-1];r&&l&&(e.preventDefault(),s[s.length-1].focus()),t&&!l&&(e.preventDefault(),s[0].focus())}},qe={beforeMount(e){e[q]=x(e),h.push(e),h.length<=1&&document.addEventListener("keydown",re)},updated(e){$(()=>{e[q]=x(e)})},unmounted(){h.shift(),h.length===0&&document.removeEventListener("keydown",re)}};var Ge=Be({name:"ElMessageBox",directives:{TrapFocus:qe},components:{ElButton:Ae,ElFocusTrap:Se,ElInput:Ie,ElOverlay:ke,ElIcon:Me,...Te},inheritAttrs:!1,props:{buttonSize:{type:String,validator:we},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:Boolean,container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:n}){const{locale:s,zIndex:l,ns:r,size:t}=Le("message-box",C(()=>e.buttonSize)),{t:c}=s,{nextZIndex:f}=l,p=B(!1),o=$e({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",cancelButtonType:"",confirmButtonType:"primary",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",closeIcon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:"",inputValidator:void 0,inputErrorMessage:"",message:"",modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:K(_),cancelButtonLoadingIcon:K(_),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:f()}),P=C(()=>{const a=o.type;return{[r.bm("icon",a)]:a&&oe[a]}}),u=ee(),ce=ee(),fe=C(()=>{const a=o.type;return o.icon||a&&oe[a]||""}),me=C(()=>!!o.message),E=B(),W=B(),M=B(),k=B(),X=B(),pe=C(()=>o.confirmButtonClass);ne(()=>o.inputValue,async a=>{await $(),e.boxType==="prompt"&&a&&J()},{immediate:!0}),ne(()=>p.value,a=>{a&&(e.boxType!=="prompt"&&(o.autofocus?M.value=X.value?.$el??E.value:M.value=E.value),o.zIndex=f()),e.boxType==="prompt"&&(a?$().then(()=>{k.value&&k.value.$el&&(o.autofocus?M.value=Ce()??E.value:M.value=E.value)}):(o.editorErrorMessage="",o.validateError=!1))});const{isDragging:ge}=Re(E,W,C(()=>e.draggable),C(()=>e.overflow));Oe(async()=>{await $(),e.closeOnHashChange&&window.addEventListener("hashchange",I)}),Ve(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",I)});function I(){p.value&&(p.value=!1,$(()=>{o.action&&n("action",o.action)}))}const Z=()=>{e.closeOnClickModal&&O(o.distinguishCancelAndClose?"close":"cancel")},ve=Pe(Z),ye=a=>{if(o.inputType!=="textarea"&&!k.value?.isComposing)return a.preventDefault(),O("confirm")},O=a=>{e.boxType==="prompt"&&a==="confirm"&&!J()||(o.action=a,o.beforeClose?o.beforeClose?.(a,o,I):I())},J=()=>{if(e.boxType==="prompt"){const a=o.inputPattern;if(a&&!a.test(o.inputValue||""))return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;const Y=o.inputValidator;if(j(Y)){const F=Y(o.inputValue);if(F===!1)return o.editorErrorMessage=o.inputErrorMessage||c("el.messagebox.error"),o.validateError=!0,!1;if(G(F))return o.editorErrorMessage=F,o.validateError=!0,!1}}return o.editorErrorMessage="",o.validateError=!1,!0},Ce=()=>{const a=k.value?.$refs;return a?.input??a?.textarea},Q=()=>{O("close")},be=()=>{e.closeOnPressEscape&&Q()};return e.lockScroll&&ze(p,{ns:r}),{...De(o),ns:r,overlayEvent:ve,visible:p,hasMessage:me,typeClass:P,contentId:u,inputId:ce,btnSize:t,iconComponent:fe,confirmButtonClasses:pe,rootRef:E,focusStartRef:M,headerRef:W,inputRef:k,isDragging:ge,confirmRef:X,doClose:I,handleClose:Q,onCloseRequested:be,handleWrapperClick:Z,handleInputEnter:ye,handleAction:O,t:c}}});const We=["aria-label","aria-describedby"],Xe=["aria-label"],Ze=["id"];function Je(e,n,s,l,r,t){const c=S("el-icon"),f=S("el-input"),p=S("el-button"),o=S("el-focus-trap"),P=S("el-overlay");return d(),m(Ne,{name:"fade-in-linear",onAfterLeave:n[11]||(n[11]=u=>e.$emit("vanish")),persisted:""},{default:g(()=>[H(w(P,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:g(()=>[v("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:i(`${e.ns.namespace.value}-overlay-message-box`),onClick:n[8]||(n[8]=(...u)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...u)),onMousedown:n[9]||(n[9]=(...u)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...u)),onMouseup:n[10]||(n[10]=(...u)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...u))},[w(o,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:g(()=>[v("div",{ref:"rootRef",class:i([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),e.ns.is("dragging",e.isDragging),{[e.ns.m("center")]:e.center}]),style:se(e.customStyle),tabindex:"-1",onClick:n[7]||(n[7]=V(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(d(),z("div",{key:0,ref:"headerRef",class:i([e.ns.e("header"),{"show-close":e.showClose}])},[v("div",{class:i(e.ns.e("title"))},[e.iconComponent&&e.center?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),v("span",null,L(e.title),1)],2),e.showClose?(d(),z("button",{key:0,type:"button",class:i(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:n[0]||(n[0]=u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:n[1]||(n[1]=D(V(u=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[w(c,{class:i(e.ns.e("close"))},{default:g(()=>[(d(),m(A(e.closeIcon||"close")))]),_:1},8,["class"])],42,Xe)):b("v-if",!0)],2)):b("v-if",!0),v("div",{id:e.contentId,class:i(e.ns.e("content"))},[v("div",{class:i(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(d(),m(c,{key:0,class:i([e.ns.e("status"),e.typeClass])},{default:g(()=>[(d(),m(A(e.iconComponent)))]),_:1},8,["class"])):b("v-if",!0),e.hasMessage?(d(),z("div",{key:1,class:i(e.ns.e("message"))},[He(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(d(),m(A(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(d(),m(A(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0,textContent:L(e.message)},null,8,["for","textContent"]))])],2)):b("v-if",!0)],2),H(v("div",{class:i(e.ns.e("input"))},[w(f,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":n[2]||(n[2]=u=>e.inputValue=u),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:i({invalid:e.validateError}),onKeydown:D(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),v("div",{class:i(e.ns.e("errormsg")),style:se({visibility:e.editorErrorMessage?"visible":"hidden"})},L(e.editorErrorMessage),7)],2),[[N,e.showInput]])],10,Ze),e.showCancelButton||e.showConfirmButton?(d(),z("div",{key:1,class:i(e.ns.e("btns"))},[e.showCancelButton?(d(),m(p,{key:0,type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:i([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:n[3]||(n[3]=u=>e.handleAction("cancel")),onKeydown:n[4]||(n[4]=D(V(u=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","size"])):b("v-if",!0),H(w(p,{ref:"confirmRef",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:i([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:n[5]||(n[5]=u=>e.handleAction("confirm")),onKeydown:n[6]||(n[6]=D(V(u=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:g(()=>[te(L(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","disabled","size"]),[[N,e.showConfirmButton]])],2)):b("v-if",!0)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,We)]),_:3},8,["z-index","overlay-class","mask"]),[[N,e.visible]])]),_:3})}var Qe=Fe(Ge,[["render",Je]]);const R=new Map,Ye=e=>{let n=document.body;return e.appendTo&&(G(e.appendTo)&&(n=document.querySelector(e.appendTo)),le(e.appendTo)&&(n=e.appendTo),le(n)||(Ke("ElMessageBox","the appendTo option is not an HTMLElement. Falling back to document.body."),n=document.body)),n},U=(e,n)=>{const s=e.component?.proxy;return()=>s.handleAction(n)},xe=(e,n,s=null)=>{const l=w(Qe,e,j(e.message)||ie(e.message)?{default:j(e.message)?()=>e.message({confirm:U(l,"confirm"),cancel:U(l,"cancel"),close:U(l,"close")}):()=>e.message}:null);return l.appContext=s,ue(l,n),Ye(e).appendChild(n.firstElementChild),l.component},_e=()=>document.createElement("div"),en=(e,n)=>{const s=_e();e.onVanish=()=>{ue(null,s),R.delete(r)},e.onAction=t=>{const c=R.get(r);let f;e.showInput?f={value:r.inputValue,action:t}:f=t,e.callback?e.callback(f,l.proxy):t==="cancel"||t==="close"?e.distinguishCancelAndClose&&t!=="cancel"?c.reject("close"):c.reject("cancel"):c.resolve(f)};const l=xe(e,s,n),r=l.proxy;for(const t in e)ae(e,t)&&!ae(r.$props,t)&&(t==="closeIcon"&&de(e[t])?r[t]=K(e[t]):r[t]=e[t]);return r.visible=!0,r};function T(e,n=null){if(!Ue)return Promise.reject();let s;return G(e)||ie(e)?e={message:e}:s=e.callback,new Promise((l,r)=>{const t=en(e,n??T._context);R.set(t,{options:e,callback:s,resolve:l,reject:r})})}const nn=["alert","confirm","prompt"],on={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};nn.forEach(e=>{T[e]=sn(e)});function sn(e){return(n,s,l,r)=>{let t="";return de(s)?(l=s,t=""):je(s)?t="":t=s,T(Object.assign({title:t,message:n,type:"",...on[e]},l,{boxType:e}),r)}}T.close=()=>{R.forEach((e,n)=>{n.doClose()}),R.clear()};T._context=null;const y=T;y.install=e=>{y._context=e._context,e.config.globalProperties.$msgbox=y,e.config.globalProperties.$messageBox=y,e.config.globalProperties.$alert=y.alert,e.config.globalProperties.$confirm=y.confirm,e.config.globalProperties.$prompt=y.prompt};const an=y;export{an as E}; diff --git a/frontend/dist/assets/index-BlvrX0Zy.js b/frontend/dist/assets/index-BoQWc9mA.js similarity index 99% rename from frontend/dist/assets/index-BlvrX0Zy.js rename to frontend/dist/assets/index-BoQWc9mA.js index 09f7a132..cb8fadf6 100644 --- a/frontend/dist/assets/index-BlvrX0Zy.js +++ b/frontend/dist/assets/index-BoQWc9mA.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomePage-ChxMX_IM.js","assets/home-logo-Bq2pf2HD.js","assets/TasksPage-CeWYr9Xg.js","assets/index-DNZgQ1o0.js","assets/index-DILr9bpz.js","assets/tasks-CTZb2r1_.js","assets/ToolsPage-DH5QX7Cd.js","assets/DatasetPage-CoWjms-D.js","assets/schemas-BVh9ipN3.js","assets/TrainingWorkbenchPage-ByP70JIG.js","assets/prefs-L1LFxgf4.js","assets/SettingsContainerPage-9zJ1w2a2.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomePage-qalEt5mU.js","assets/home-logo-Bq2pf2HD.js","assets/TasksPage-xwxx8Gct.js","assets/index-BC7FDA30.js","assets/index-Bff4F9zQ.js","assets/tasks-E6KkxTMs.js","assets/ToolsPage-C0sSOLKL.js","assets/DatasetPage-CoK9ZAdm.js","assets/schemas-QXoCLd-0.js","assets/TrainingWorkbenchPage-C86jNxDA.js","assets/prefs-hyqYnVPm.js","assets/SettingsContainerPage-CEKsAhum.js"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();function Tc(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const je={},ko=[],qe=()=>{},kp=()=>!1,fi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),di=e=>e.startsWith("onUpdate:"),Et=Object.assign,Cc=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},P0=Object.prototype.hasOwnProperty,He=(e,t)=>P0.call(e,t),ue=Array.isArray,Ro=e=>Ys(e)==="[object Map]",qo=e=>Ys(e)==="[object Set]",Pu=e=>Ys(e)==="[object Date]",ge=e=>typeof e=="function",De=e=>typeof e=="string",on=e=>typeof e=="symbol",Ie=e=>e!==null&&typeof e=="object",Ua=e=>(Ie(e)||ge(e))&&ge(e.then)&&ge(e.catch),Rp=Object.prototype.toString,Ys=e=>Rp.call(e),k0=e=>Ys(e).slice(8,-1),Ac=e=>Ys(e)==="[object Object]",pi=e=>De(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ms=Tc(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),hi=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},R0=/-\w/g,Rt=hi(e=>e.replace(R0,t=>t.slice(1).toUpperCase())),N0=/\B([A-Z])/g,Jn=hi(e=>e.replace(N0,"-$1").toLowerCase()),mi=hi(e=>e.charAt(0).toUpperCase()+e.slice(1)),gs=hi(e=>e?`on${mi(e)}`:""),Pt=(e,t)=>!Object.is(e,t),Ma=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},gi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},M0=e=>{const t=De(e)?Number(e):NaN;return isNaN(t)?e:t};let ku;const vi=()=>ku||(ku=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function yt(e){if(ue(e)){const t={};for(let n=0;n{if(n){const r=n.split(D0);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function ae(e){let t="";if(De(e))t=e;else if(ue(e))for(let n=0;nXo(n,t))}const Fp=e=>!!(e&&e.__v_isRef===!0),st=e=>De(e)?e:e==null?"":ue(e)||Ie(e)&&(e.toString===Rp||!ge(e.toString))?Fp(e)?st(e.value):JSON.stringify(e,Dp,2):String(e),Dp=(e,t)=>Fp(t)?Dp(e,t.value):Ro(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],s)=>(n[nl(r,s)+" =>"]=o,n),{})}:qo(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>nl(n))}:on(t)?nl(t):Ie(t)&&!ue(t)&&!Ac(t)?String(t):t,nl=(e,t="")=>{var n;return on(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Ct;class $p{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Ct&&(Ct.active?(this.parent=Ct,this.index=(Ct.scopes||(Ct.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const r=this.scopes.slice();for(t=0,n=r.length;t0&&--this._on===0){if(Ct===this)Ct=this.prevScope;else{let t=Ct;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(bs){let t=bs;for(bs=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;vs;){let t=vs;for(vs=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function Up(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function jp(e){let t,n=e.depsTail,r=n;for(;r;){const o=r.prevDep;r.version===-1?(r===n&&(n=o),Pc(r),j0(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=o}e.deps=t,e.depsTail=n}function Pl(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Wp(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Wp(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===As)||(e.globalVersion=As,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Pl(e))))return;e.flags|=2;const t=e.dep,n=et,r=An;et=e,An=!0;try{Up(e);const o=e.fn(e._value);(t.version===0||Pt(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{et=n,An=r,jp(e),e.flags&=-3}}function Pc(e,t=!1){const{dep:n,prevSub:r,nextSub:o}=e;if(r&&(r.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let s=n.computed.deps;s;s=s.nextDep)Pc(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function j0(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let An=!0;const zp=[];function vr(){zp.push(An),An=!1}function br(){const e=zp.pop();An=e===void 0?!0:e}function Ru(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=et;et=void 0;try{t()}finally{et=n}}}let As=0;class W0{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class _i{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!et||!An||et===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==et)n=this.activeLink=new W0(et,this),et.deps?(n.prevDep=et.depsTail,et.depsTail.nextDep=n,et.depsTail=n):et.deps=et.depsTail=n,Kp(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=et.depsTail,n.nextDep=void 0,et.depsTail.nextDep=n,et.depsTail=n,et.deps===n&&(et.deps=r)}return n}trigger(t){this.version++,As++,this.notify(t)}notify(t){Lc();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ic()}}}function Kp(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)Kp(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ja=new WeakMap,ao=Symbol(""),kl=Symbol(""),Os=Symbol("");function Dt(e,t,n){if(An&&et){let r=ja.get(e);r||ja.set(e,r=new Map);let o=r.get(n);o||(r.set(n,o=new _i),o.map=r,o.key=n),o.track()}}function ir(e,t,n,r,o,s){const a=ja.get(e);if(!a){As++;return}const i=l=>{l&&l.trigger()};if(Lc(),t==="clear")a.forEach(i);else{const l=ue(e),c=l&&pi(n);if(l&&n==="length"){const u=Number(r);a.forEach((f,d)=>{(d==="length"||d===Os||!on(d)&&d>=u)&&i(f)})}else switch((n!==void 0||a.has(void 0))&&i(a.get(n)),c&&i(a.get(Os)),t){case"add":l?c&&i(a.get("length")):(i(a.get(ao)),Ro(e)&&i(a.get(kl)));break;case"delete":l||(i(a.get(ao)),Ro(e)&&i(a.get(kl)));break;case"set":Ro(e)&&i(a.get(ao));break}}Ic()}function z0(e,t){const n=ja.get(e);return n&&n.get(t)}function So(e){const t=Ve(e);return t===e?t:(Dt(t,"iterate",Os),rn(e)?t:t.map(xn))}function wi(e){return Dt(e=Ve(e),"iterate",Os),e}function Un(e,t){return yr(e)?Fo(zn(e)?xn(t):t):xn(t)}const K0={__proto__:null,[Symbol.iterator](){return ol(this,Symbol.iterator,e=>Un(this,e))},concat(...e){return So(this).concat(...e.map(t=>ue(t)?So(t):t))},entries(){return ol(this,"entries",e=>(e[1]=Un(this,e[1]),e))},every(e,t){return Qn(this,"every",e,t,void 0,arguments)},filter(e,t){return Qn(this,"filter",e,t,n=>n.map(r=>Un(this,r)),arguments)},find(e,t){return Qn(this,"find",e,t,n=>Un(this,n),arguments)},findIndex(e,t){return Qn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Qn(this,"findLast",e,t,n=>Un(this,n),arguments)},findLastIndex(e,t){return Qn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Qn(this,"forEach",e,t,void 0,arguments)},includes(...e){return sl(this,"includes",e)},indexOf(...e){return sl(this,"indexOf",e)},join(e){return So(this).join(e)},lastIndexOf(...e){return sl(this,"lastIndexOf",e)},map(e,t){return Qn(this,"map",e,t,void 0,arguments)},pop(){return es(this,"pop")},push(...e){return es(this,"push",e)},reduce(e,...t){return Nu(this,"reduce",e,t)},reduceRight(e,...t){return Nu(this,"reduceRight",e,t)},shift(){return es(this,"shift")},some(e,t){return Qn(this,"some",e,t,void 0,arguments)},splice(...e){return es(this,"splice",e)},toReversed(){return So(this).toReversed()},toSorted(e){return So(this).toSorted(e)},toSpliced(...e){return So(this).toSpliced(...e)},unshift(...e){return es(this,"unshift",e)},values(){return ol(this,"values",e=>Un(this,e))}};function ol(e,t,n){const r=wi(e),o=r[t]();return r!==e&&!rn(e)&&(o._next=o.next,o.next=()=>{const s=o._next();return s.done||(s.value=n(s.value)),s}),o}const G0=Array.prototype;function Qn(e,t,n,r,o,s){const a=wi(e),i=a!==e&&!rn(e),l=a[t];if(l!==G0[t]){const f=l.apply(e,s);return i?xn(f):f}let c=n;a!==e&&(i?c=function(f,d){return n.call(this,Un(e,f),d,e)}:n.length>2&&(c=function(f,d){return n.call(this,f,d,e)}));const u=l.call(a,c,r);return i&&o?o(u):u}function Nu(e,t,n,r){const o=wi(e),s=o!==e&&!rn(e);let a=n,i=!1;o!==e&&(s?(i=r.length===0,a=function(c,u,f){return i&&(i=!1,c=Un(e,c)),n.call(this,c,Un(e,u),f,e)}):n.length>3&&(a=function(c,u,f){return n.call(this,c,u,f,e)}));const l=o[t](a,...r);return i?Un(e,l):l}function sl(e,t,n){const r=Ve(e);Dt(r,"iterate",Os);const o=r[t](...n);return(o===-1||o===!1)&&Ti(n[0])?(n[0]=Ve(n[0]),r[t](...n)):o}function es(e,t,n=[]){vr(),Lc();const r=Ve(e)[t].apply(e,n);return Ic(),br(),r}const Y0=Tc("__proto__,__v_isRef,__isVue"),Gp=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(on));function q0(e){on(e)||(e=String(e));const t=Ve(this);return Dt(t,"has",e),t.hasOwnProperty(e)}class Yp{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,s=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return s;if(n==="__v_raw")return r===(o?s?eh:Qp:s?Zp:Jp).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const a=ue(t);if(!o){let l;if(a&&(l=K0[n]))return l;if(n==="hasOwnProperty")return q0}const i=Reflect.get(t,n,Ze(t)?t:r);if((on(n)?Gp.has(n):Y0(n))||(o||Dt(t,"get",n),s))return i;if(Ze(i)){const l=a&&pi(n)?i:i.value;return o&&Ie(l)?xs(l):l}return Ie(i)?o?xs(i):Jt(i):i}}class qp extends Yp{constructor(t=!1){super(!1,t)}set(t,n,r,o){let s=t[n];const a=ue(t)&&pi(n);if(!this._isShallow){const c=yr(s);if(!rn(r)&&!yr(r)&&(s=Ve(s),r=Ve(r)),!a&&Ze(s)&&!Ze(r))return c||(s.value=r),!0}const i=a?Number(n)e,ma=e=>Reflect.getPrototypeOf(e);function ev(e,t,n){return function(...r){const o=this.__v_raw,s=Ve(o),a=Ro(s),i=e==="entries"||e===Symbol.iterator&&a,l=e==="keys"&&a,c=o[e](...r),u=n?Rl:t?Fo:xn;return!t&&Dt(s,"iterate",l?kl:ao),Et(Object.create(c),{next(){const{value:f,done:d}=c.next();return d?{value:f,done:d}:{value:i?[u(f[0]),u(f[1])]:u(f),done:d}}})}}function ga(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function tv(e,t){const n={get(o){const s=this.__v_raw,a=Ve(s),i=Ve(o);e||(Pt(o,i)&&Dt(a,"get",o),Dt(a,"get",i));const{has:l}=ma(a),c=t?Rl:e?Fo:xn;if(l.call(a,o))return c(s.get(o));if(l.call(a,i))return c(s.get(i));s!==a&&s.get(o)},get size(){const o=this.__v_raw;return!e&&Dt(Ve(o),"iterate",ao),o.size},has(o){const s=this.__v_raw,a=Ve(s),i=Ve(o);return e||(Pt(o,i)&&Dt(a,"has",o),Dt(a,"has",i)),o===i?s.has(o):s.has(o)||s.has(i)},forEach(o,s){const a=this,i=a.__v_raw,l=Ve(i),c=t?Rl:e?Fo:xn;return!e&&Dt(l,"iterate",ao),i.forEach((u,f)=>o.call(s,c(u),c(f),a))}};return Et(n,e?{add:ga("add"),set:ga("set"),delete:ga("delete"),clear:ga("clear")}:{add(o){const s=Ve(this),a=ma(s),i=Ve(o),l=!t&&!rn(o)&&!yr(o)?i:o;return a.has.call(s,l)||Pt(o,l)&&a.has.call(s,o)||Pt(i,l)&&a.has.call(s,i)||(s.add(l),ir(s,"add",l,l)),this},set(o,s){!t&&!rn(s)&&!yr(s)&&(s=Ve(s));const a=Ve(this),{has:i,get:l}=ma(a);let c=i.call(a,o);c||(o=Ve(o),c=i.call(a,o));const u=l.call(a,o);return a.set(o,s),c?Pt(s,u)&&ir(a,"set",o,s):ir(a,"add",o,s),this},delete(o){const s=Ve(this),{has:a,get:i}=ma(s);let l=a.call(s,o);l||(o=Ve(o),l=a.call(s,o)),i&&i.call(s,o);const c=s.delete(o);return l&&ir(s,"delete",o,void 0),c},clear(){const o=Ve(this),s=o.size!==0,a=o.clear();return s&&ir(o,"clear",void 0,void 0),a}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=ev(o,e,t)}),n}function Ei(e,t){const n=tv(e,t);return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(He(n,o)&&o in r?n:r,o,s)}const nv={get:Ei(!1,!1)},rv={get:Ei(!1,!0)},ov={get:Ei(!0,!1)},sv={get:Ei(!0,!0)},Jp=new WeakMap,Zp=new WeakMap,Qp=new WeakMap,eh=new WeakMap;function av(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Jt(e){return yr(e)?e:Si(e,!1,X0,nv,Jp)}function th(e){return Si(e,!1,Z0,rv,Zp)}function xs(e){return Si(e,!0,J0,ov,Qp)}function iv(e){return Si(e,!0,Q0,sv,eh)}function Si(e,t,n,r,o){if(!Ie(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const s=o.get(e);if(s)return s;const a=av(k0(e));if(a===0)return e;const i=new Proxy(e,a===2?r:n);return o.set(e,i),i}function zn(e){return yr(e)?zn(e.__v_raw):!!(e&&e.__v_isReactive)}function yr(e){return!!(e&&e.__v_isReadonly)}function rn(e){return!!(e&&e.__v_isShallow)}function Ti(e){return e?!!e.__v_raw:!1}function Ve(e){const t=e&&e.__v_raw;return t?Ve(t):e}function Ci(e){return!He(e,"__v_skip")&&Object.isExtensible(e)&&Np(e,"__v_skip",!0),e}const xn=e=>Ie(e)?Jt(e):e,Fo=e=>Ie(e)?xs(e):e;function Ze(e){return e?e.__v_isRef===!0:!1}function re(e){return nh(e,!1)}function bn(e){return nh(e,!0)}function nh(e,t){return Ze(e)?e:new lv(e,t)}class lv{constructor(t,n){this.dep=new _i,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Ve(t),this._value=n?t:xn(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||rn(t)||yr(t);t=r?t:Ve(t),Pt(t,n)&&(this._rawValue=t,this._value=r?t:xn(t),this.dep.trigger())}}function w(e){return Ze(e)?e.value:e}function yn(e){return ge(e)?e():w(e)}const cv={get:(e,t,n)=>t==="__v_raw"?e:w(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ze(o)&&!Ze(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function rh(e){return zn(e)?e:new Proxy(e,cv)}class uv{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new _i,{get:r,set:o}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=o}get value(){return this._value=this._get()}set value(t){this._set(t)}}function fv(e){return new uv(e)}function qs(e){const t=ue(e)?new Array(e.length):{};for(const n in e)t[n]=oh(e,n);return t}class dv{constructor(t,n,r){this._object=t,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0,this._key=on(n)?n:String(n),this._raw=Ve(t);let o=!0,s=t;if(!ue(t)||on(this._key)||!pi(this._key))do o=!Ti(s)||rn(s);while(o&&(s=s.__v_raw));this._shallow=o}get value(){let t=this._object[this._key];return this._shallow&&(t=w(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Ze(this._raw[this._key])){const n=this._object[this._key];if(Ze(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return z0(this._raw,this._key)}}class pv{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function mn(e,t,n){return Ze(e)?e:ge(e)?new pv(e):Ie(e)&&arguments.length>1?oh(e,t,n):re(e)}function oh(e,t,n){return new dv(e,t,n)}class hv{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new _i(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=As-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&et!==this)return Hp(this,!0),!0}get value(){const t=this.dep.track();return Wp(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function mv(e,t,n=!1){let r,o;return ge(e)?r=e:(r=e.get,o=e.set),new hv(r,o,n)}const va={},Wa=new WeakMap;let Zr;function gv(e,t=!1,n=Zr){if(n){let r=Wa.get(n);r||Wa.set(n,r=[]),r.push(e)}}function vv(e,t,n=je){const{immediate:r,deep:o,once:s,scheduler:a,augmentJob:i,call:l}=n,c=y=>o?y:rn(y)||o===!1||o===0?lr(y,1):lr(y);let u,f,d,p,g=!1,h=!1;if(Ze(e)?(f=()=>e.value,g=rn(e)):zn(e)?(f=()=>c(e),g=!0):ue(e)?(h=!0,g=e.some(y=>zn(y)||rn(y)),f=()=>e.map(y=>{if(Ze(y))return y.value;if(zn(y))return c(y);if(ge(y))return l?l(y,2):y()})):ge(e)?t?f=l?()=>l(e,2):e:f=()=>{if(d){vr();try{d()}finally{br()}}const y=Zr;Zr=u;try{return l?l(e,3,[p]):e(p)}finally{Zr=y}}:f=qe,t&&o){const y=f,O=o===!0?1/0:o;f=()=>lr(y(),O)}const v=bi(),m=()=>{u.stop(),v&&v.active&&Cc(v.effects,u)};if(s&&t){const y=t;t=(...O)=>{const M=y(...O);return m(),M}}let b=h?new Array(e.length).fill(va):va;const S=y=>{if(!(!(u.flags&1)||!u.dirty&&!y))if(t){const O=u.run();if(y||o||g||(h?O.some((M,A)=>Pt(M,b[A])):Pt(O,b))){d&&d();const M=Zr;Zr=u;try{const A=[O,b===va?void 0:h&&b[0]===va?[]:b,p];b=O,l?l(t,3,A):t(...A)}finally{Zr=M}}}else u.run()};return i&&i(S),u=new Vp(f),u.scheduler=a?()=>a(S,!1):S,p=y=>gv(y,!1,u),d=u.onStop=()=>{const y=Wa.get(u);if(y){if(l)l(y,4);else for(const O of y)O();Wa.delete(u)}},t?r?S(!0):b=u.run():a?a(S.bind(null,!0),!0):u.run(),m.pause=u.pause.bind(u),m.resume=u.resume.bind(u),m.stop=m,m}function lr(e,t=1/0,n){if(t<=0||!Ie(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ze(e))lr(e.value,t,n);else if(ue(e))for(let r=0;r{lr(r,t,n)});else if(Ac(e)){for(const r in e)lr(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&lr(e[r],t,n)}return e}function Xs(e,t,n,r){try{return r?e(...r):e()}catch(o){Ai(o,t,n)}}function wn(e,t,n,r){if(ge(e)){const o=Xs(e,t,n,r);return o&&Ua(o)&&o.catch(s=>{Ai(s,t,n)}),o}if(ue(e)){const o=[];for(let s=0;s>>1,o=jt[r],s=Ls(o);s=Ls(n)?jt.push(e):jt.splice(yv(t),0,e),e.flags|=1,ah()}}function ah(){za||(za=sh.then(lh))}function _v(e){ue(e)?No.push(...e):Rr&&e.id===-1?Rr.splice(Ao+1,0,e):e.flags&1||(No.push(e),e.flags|=1),ah()}function Mu(e,t,n=Hn+1){for(;nLs(n)-Ls(r));if(No.length=0,Rr){Rr.push(...t);return}for(Rr=t,Ao=0;Aoe.id==null?e.flags&2?-1:1/0:e.id;function lh(e){try{for(Hn=0;Hn{r._d&&qa(-1);const s=Ka(t),a=dr.length;let i;try{i=e(...o)}finally{for(let l=dr.length;l>a;l--)Bc();Ka(s),r._d&&qa(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Ln(e,t){if(kt===null)return e;const n=Ri(kt),r=e.dirs||(e.dirs=[]);for(let o=0;o1)return n&&ge(t)?t.call(r&&r.proxy):t}}function wv(){return!!(ct()||io)}const Ev=Symbol.for("v-scx"),Sv=()=>Me(Ev);function Rc(e,t){return Oi(e,null,t)}function Tv(e,t){return Oi(e,null,{flush:"sync"})}function Te(e,t,n){return Oi(e,t,n)}function Oi(e,t,n=je){const{immediate:r,deep:o,flush:s,once:a}=n,i=Et({},n),l=t&&r||!t&&s!=="post";let c;if(ks){if(s==="sync"){const p=Sv();c=p.__watcherHandles||(p.__watcherHandles=[])}else if(!l){const p=()=>{};return p.stop=qe,p.resume=qe,p.pause=qe,p}}const u=$t;i.call=(p,g,h)=>wn(p,u,g,h);let f=!1;s==="post"?i.scheduler=p=>{Ht(p,u&&u.suspense)}:s!=="sync"&&(f=!0,i.scheduler=(p,g)=>{g?p():kc(p)}),i.augmentJob=p=>{t&&(p.flags|=4),f&&(p.flags|=2,u&&(p.id=u.uid,p.i=u))};const d=vv(e,t,i);return ks&&(c?c.push(d):l&&d()),d}function Cv(e,t,n){const r=this.proxy,o=De(e)?e.includes(".")?uh(r,e):()=>r[e]:e.bind(r,r);let s;ge(t)?s=t:(s=t.handler,n=t);const a=Js(this),i=Oi(o,s.bind(r),n);return a(),i}function uh(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;oe.__isTeleport,eo=e=>e&&(e.disabled||e.disabled===""),Av=e=>e&&(e.defer||e.defer===""),Fu=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Du=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Nl=(e,t)=>{const n=e&&e.to;return De(n)?t?t(n):null:n},Ov={name:"Teleport",__isTeleport:!0,process(e,t,n,r,o,s,a,i,l,c){const{mc:u,pc:f,pbc:d,o:{insert:p,querySelector:g,createText:h,createComment:v,parentNode:m}}=c,b=eo(t.props);let{dynamicChildren:S}=t;const y=(A,$,N)=>{A.shapeFlag&16&&u(A.children,$,N,o,s,a,i,l)},O=(A=t)=>{const $=eo(A.props),N=A.target=Nl(A.props,g),U=Ml(N,A,h,p);N&&(a!=="svg"&&Fu(N)?a="svg":a!=="mathml"&&Du(N)&&(a="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(N),$||(y(A,N,U),ls(A,!1)))},M=A=>{const $=()=>{if(Lr.get(A)===$){if(Lr.delete(A),eo(A.props)){const N=m(A.el)||n;y(A,N,A.anchor),ls(A,!0)}O(A)}};Lr.set(A,$),Ht($,s)};if(e==null){const A=t.el=h(""),$=t.anchor=h("");if(p(A,n,r),p($,n,r),Av(t.props)||s&&s.pendingBranch){M(t);return}b&&(y(t,n,$),ls(t,!0)),O()}else{t.el=e.el;const A=t.anchor=e.anchor,$=Lr.get(e);if($){$.flags|=8,Lr.delete(e),M(t);return}t.targetStart=e.targetStart;const N=t.target=e.target,U=t.targetAnchor=e.targetAnchor,z=eo(e.props),D=z?n:N,Q=z?A:U;if(a==="svg"||Fu(N)?a="svg":(a==="mathml"||Du(N))&&(a="mathml"),S?(d(e.dynamicChildren,S,D,o,s,a,i),Vc(e,t,!0)):l||f(e,t,D,Q,o,s,a,i,!1),b)z?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ba(t,n,A,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Z=Nl(t.props,g);Z&&(t.target=Z,ba(t,Z,null,c,0))}else z&&ba(t,N,U,c,1);ls(t,b)}},remove(e,t,n,{um:r,o:{remove:o}},s){const{shapeFlag:a,children:i,anchor:l,targetStart:c,targetAnchor:u,target:f,props:d}=e,p=eo(d),g=s||!p,h=Lr.get(e);if(h&&(h.flags|=8,Lr.delete(e)),f&&(o(c),o(u)),s&&o(l),!h&&(p||f)&&a&16)for(let v=0;v{e.isMounted=!0}),Lt(()=>{e.isUnmounting=!0}),e}const cn=[Function,Array],hh={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:cn,onEnter:cn,onAfterEnter:cn,onEnterCancelled:cn,onBeforeLeave:cn,onLeave:cn,onAfterLeave:cn,onLeaveCancelled:cn,onBeforeAppear:cn,onAppear:cn,onAfterAppear:cn,onAppearCancelled:cn},mh=e=>{const t=e.subTree;return t.component?mh(t.component):t},Iv={name:"BaseTransition",props:hh,setup(e,{slots:t}){const n=ct(),r=Lv();return()=>{const o=t.default&&bh(t.default(),!0),s=o&&o.length?gh(o):n.subTree?be():void 0;if(!s)return;const a=Ve(e),{mode:i}=a;if(r.isLeaving)return al(s);const l=$u(s);if(!l)return al(s);let c=Fl(l,a,r,n,f=>c=f);l.type!==At&&Is(l,c);let u=n.subTree&&$u(n.subTree);if(u&&u.type!==At&&!to(u,l)&&mh(n).type!==At){let f=Fl(u,a,r,n);if(Is(u,f),i==="out-in"&&l.type!==At)return r.isLeaving=!0,f.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,u=void 0},al(s);i==="in-out"&&l.type!==At?f.delayLeave=(d,p,g)=>{const h=vh(r,u);h[String(u.key)]=u,d[pn]=()=>{p(),d[pn]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{g(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return s}}};function gh(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==At){t=n;break}}return t}const Pv=Iv;function vh(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Fl(e,t,n,r,o){const{appear:s,mode:a,persisted:i=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:d,onLeave:p,onAfterLeave:g,onLeaveCancelled:h,onBeforeAppear:v,onAppear:m,onAfterAppear:b,onAppearCancelled:S}=t,y=String(e.key),O=vh(n,e),M=(N,U)=>{N&&wn(N,r,9,U)},A=(N,U)=>{const z=U[1];M(N,U),ue(N)?N.every(D=>D.length<=1)&&z():N.length<=1&&z()},$={mode:a,persisted:i,beforeEnter(N){let U=l;if(!n.isMounted)if(s)U=v||l;else return;N[pn]&&N[pn](!0);const z=O[y];z&&to(e,z)&&z.el[pn]&&z.el[pn](),M(U,[N])},enter(N){if(O[y]===e)return;let U=c,z=u,D=f;if(!n.isMounted)if(s)U=m||c,z=b||u,D=S||f;else return;let Q=!1;N[ts]=G=>{Q||(Q=!0,G?M(D,[N]):M(z,[N]),$.delayedLeave&&$.delayedLeave(),N[ts]=void 0)};const Z=N[ts].bind(null,!1);U?A(U,[N,Z]):Z()},leave(N,U){const z=String(e.key);if(N[ts]&&N[ts](!0),n.isUnmounting)return U();M(d,[N]);let D=!1;N[pn]=Z=>{D||(D=!0,U(),Z?M(h,[N]):M(g,[N]),N[pn]=void 0,O[z]===e&&delete O[z])};const Q=N[pn].bind(null,!1);O[z]=e,p?A(p,[N,Q]):Q()},clone(N){const U=Fl(N,t,n,r,o);return o&&o(U),U}};return $}function al(e){if(xi(e))return e=_r(e),e.children=null,e}function $u(e){if(!xi(e))return dh(e.type)&&e.children?gh(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ge(n.default))return n.default()}}function Is(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Is(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function bh(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;sys(h,t&&(ue(t)?t[v]:t),n,r,o));return}if(Mo(r)&&!o){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&ys(e,t,n,r.component.subTree);return}const s=r.shapeFlag&4?Ri(r.component):r.el,a=o?null:s,{i,r:l}=e,c=t&&t.r,u=i.refs===je?i.refs={}:i.refs,f=i.setupState,d=Ve(f),p=f===je?kp:h=>Vu(u,h)?!1:He(d,h),g=(h,v)=>!(v&&Vu(u,v));if(c!=null&&c!==l){if(Bu(t),De(c))u[c]=null,p(c)&&(f[c]=null);else if(Ze(c)){const h=t;g(c,h.k)&&(c.value=null),h.k&&(u[h.k]=null)}}if(ge(l))Xs(l,i,12,[a,u]);else{const h=De(l),v=Ze(l);if(h||v){const m=()=>{if(e.f){const b=h?p(l)?f[l]:u[l]:g()||!e.k?l.value:u[e.k];if(o)ue(b)&&Cc(b,s);else if(ue(b))b.includes(s)||b.push(s);else if(h)u[l]=[s],p(l)&&(f[l]=u[l]);else{const S=[s];g(l,e.k)&&(l.value=S),e.k&&(u[e.k]=S)}}else h?(u[l]=a,p(l)&&(f[l]=a)):v&&(g(l,e.k)&&(l.value=a),e.k&&(u[e.k]=a))};if(a){const b=()=>{m(),Ga.delete(e)};b.id=-1,Ga.set(e,b),Ht(b,n)}else Bu(e),m()}}}function Bu(e){const t=Ga.get(e);t&&(t.flags|=8,Ga.delete(e))}vi().requestIdleCallback;vi().cancelIdleCallback;const Mo=e=>!!e.type.__asyncLoader,xi=e=>e.type.__isKeepAlive;function _h(e,t){Eh(e,"a",t)}function wh(e,t){Eh(e,"da",t)}function Eh(e,t,n=$t){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Li(t,r,n),n){let o=n.parent;for(;o&&o.parent;)xi(o.parent.vnode)&&kv(r,t,n,o),o=o.parent}}function kv(e,t,n,r){const o=Li(t,e,r,!0);Ii(()=>{Cc(r[t],o)},n)}function Li(e,t,n=$t,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...a)=>{vr();const i=Js(n),l=wn(t,n,e,a);return i(),br(),l});return r?o.unshift(s):o.push(s),s}}const Sr=e=>(t,n=$t)=>{(!ks||e==="sp")&&Li(e,(...r)=>t(...r),n)},Sh=Sr("bm"),pt=Sr("m"),Rv=Sr("bu"),Nc=Sr("u"),Lt=Sr("bum"),Ii=Sr("um"),Nv=Sr("sp"),Mv=Sr("rtg"),Fv=Sr("rtc");function Dv(e,t=$t){Li("ec",e,t)}const Mc="components",$v="directives";function dn(e,t){return Fc(Mc,e,!0,t)||e}const Th=Symbol.for("v-ndc");function vt(e){return De(e)?Fc(Mc,e,!1)||e:e||Th}function Vv(e){return Fc($v,e)}function Fc(e,t,n=!0,r=!1){const o=kt||$t;if(o){const s=o.type;if(e===Mc){const i=_b(s,!1);if(i&&(i===t||i===Rt(t)||i===mi(Rt(t))))return s}const a=Hu(o[e]||s[e],t)||Hu(o.appContext[e],t);return!a&&r?s:a}}function Hu(e,t){return e&&(e[t]||e[Rt(t)]||e[mi(Rt(t))])}function cs(e,t,n,r){let o;const s=n&&n[r],a=ue(e);if(a||De(e)){const i=a&&zn(e);let l=!1,c=!1;i&&(l=!rn(e),c=yr(e),e=wi(e)),o=new Array(e.length);for(let u=0,f=e.length;ut(i,l,void 0,s&&s[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,c=i.length;l{const s=r.fn(...o);return s&&(s.key=r.key),s}:r.fn)}return e}function Ce(e,t,n={},r,o,s){if(kt.ce||kt.parent&&Mo(kt.parent)&&kt.parent.ce){const c=s!=null&&n.key==null?Et({},n,{key:s}):n,u=Object.keys(c).length>0;return t!=="default"&&(c.name=t),V(),ye(Qe,null,[xe("slot",c,r&&r())],u?-2:64)}let a=e[t];a&&a._c&&(a._d=!1);const i=dr.length;V();let l;try{const c=a&&Ah(a(n)),u=n.key||s||c&&c.key;l=ye(Qe,{key:(u&&!on(u)?u:`_${t}`)+(!c&&r?"_fb":"")},c||(r?r():[]),c&&e._===1?64:-2)}catch(c){for(let u=dr.length;u>i;u--)Bc();throw c}finally{a&&a._c&&(a._d=!0)}return!o&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),l}function Ah(e){return e.some(t=>pr(t)?!(t.type===At||t.type===Qe&&!Ah(t.children)):!0)?e:null}const Dl=e=>e?Gh(e)?Ri(e):Dl(e.parent):null,_s=Et(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Dl(e.parent),$root:e=>Dl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Lh(e),$forceUpdate:e=>e.f||(e.f=()=>{kc(e.update)}),$nextTick:e=>e.n||(e.n=Ye.bind(e.proxy)),$watch:e=>Cv.bind(e)}),il=(e,t)=>e!==je&&!e.__isScriptSetup&&He(e,t),Bv={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:s,accessCache:a,type:i,appContext:l}=e;if(t[0]!=="$"){const d=a[t];if(d!==void 0)switch(d){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(il(r,t))return a[t]=1,r[t];if(o!==je&&He(o,t))return a[t]=2,o[t];if(He(s,t))return a[t]=3,s[t];if(n!==je&&He(n,t))return a[t]=4,n[t];$l&&(a[t]=0)}}const c=_s[t];let u,f;if(c)return t==="$attrs"&&Dt(e.attrs,"get",""),c(e);if((u=i.__cssModules)&&(u=u[t]))return u;if(n!==je&&He(n,t))return a[t]=4,n[t];if(f=l.config.globalProperties,He(f,t))return f[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return il(o,t)?(o[t]=n,!0):r!==je&&He(r,t)?(r[t]=n,!0):He(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,props:s,type:a}},i){let l;return!!(n[i]||e!==je&&i[0]!=="$"&&He(e,i)||il(t,i)||He(s,i)||He(r,i)||He(_s,i)||He(o.config.globalProperties,i)||(l=a.__cssModules)&&l[i])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:He(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Pi(){return Oh().slots}function Hv(){return Oh().attrs}function Oh(e){const t=ct();return t.setupContext||(t.setupContext=qh(t))}function Uu(e){return ue(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let $l=!0;function Uv(e){const t=Lh(e),n=e.proxy,r=e.ctx;$l=!1,t.beforeCreate&&ju(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:a,watch:i,provide:l,inject:c,created:u,beforeMount:f,mounted:d,beforeUpdate:p,updated:g,activated:h,deactivated:v,beforeDestroy:m,beforeUnmount:b,destroyed:S,unmounted:y,render:O,renderTracked:M,renderTriggered:A,errorCaptured:$,serverPrefetch:N,expose:U,inheritAttrs:z,components:D,directives:Q,filters:Z}=t;if(c&&jv(c,r,null),a)for(const L in a){const F=a[L];ge(F)&&(r[L]=F.bind(n))}if(o){const L=o.call(n,n);Ie(L)&&(e.data=Jt(L))}if($l=!0,s)for(const L in s){const F=s[L],J=ge(F)?F.bind(n,n):ge(F.get)?F.get.bind(n,n):qe,te=!ge(F)&&ge(F.set)?F.set.bind(n):qe,ve=P({get:J,set:te});Object.defineProperty(r,L,{enumerable:!0,configurable:!0,get:()=>ve.value,set:le=>ve.value=le})}if(i)for(const L in i)xh(i[L],r,n,L);if(l){const L=ge(l)?l.call(n):l;Reflect.ownKeys(L).forEach(F=>{Vt(F,L[F])})}u&&ju(u,e,"c");function H(L,F){ue(F)?F.forEach(J=>L(J.bind(n))):F&&L(F.bind(n))}if(H(Sh,f),H(pt,d),H(Rv,p),H(Nc,g),H(_h,h),H(wh,v),H(Dv,$),H(Fv,M),H(Mv,A),H(Lt,b),H(Ii,y),H(Nv,N),ue(U))if(U.length){const L=e.exposed||(e.exposed={});U.forEach(F=>{Object.defineProperty(L,F,{get:()=>n[F],set:J=>n[F]=J,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===qe&&(e.render=O),z!=null&&(e.inheritAttrs=z),D&&(e.components=D),Q&&(e.directives=Q),N&&yh(e)}function jv(e,t,n=qe){ue(e)&&(e=Vl(e));for(const r in e){const o=e[r];let s;Ie(o)?"default"in o?s=Me(o.from||r,o.default,!0):s=Me(o.from||r):s=Me(o),Ze(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:a=>s.value=a}):t[r]=s}}function ju(e,t,n){wn(ue(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function xh(e,t,n,r){let o=r.includes(".")?uh(n,r):()=>n[r];if(De(e)){const s=t[e];ge(s)&&Te(o,s)}else if(ge(e))Te(o,e.bind(n));else if(Ie(e))if(ue(e))e.forEach(s=>xh(s,t,n,r));else{const s=ge(e.handler)?e.handler.bind(n):t[e.handler];ge(s)&&Te(o,s,e)}}function Lh(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:a}}=e.appContext,i=s.get(t);let l;return i?l=i:!o.length&&!n&&!r?l=t:(l={},o.length&&o.forEach(c=>Ya(l,c,a,!0)),Ya(l,t,a)),Ie(t)&&s.set(t,l),l}function Ya(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&Ya(e,s,n,!0),o&&o.forEach(a=>Ya(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const i=Wv[a]||n&&n[a];e[a]=i?i(e[a],t[a]):t[a]}return e}const Wv={data:Wu,props:zu,emits:zu,methods:us,computed:us,beforeCreate:Bt,created:Bt,beforeMount:Bt,mounted:Bt,beforeUpdate:Bt,updated:Bt,beforeDestroy:Bt,beforeUnmount:Bt,destroyed:Bt,unmounted:Bt,activated:Bt,deactivated:Bt,errorCaptured:Bt,serverPrefetch:Bt,components:us,directives:us,watch:Kv,provide:Wu,inject:zv};function Wu(e,t){return t?e?function(){return Et(ge(e)?e.call(this,this):e,ge(t)?t.call(this,this):t)}:t:e}function zv(e,t){return us(Vl(e),Vl(t))}function Vl(e){if(ue(e)){const t={};for(let n=0;n{let u,f=je,d;return Tv(()=>{const p=e[o];Pt(u,p)&&(u=p,c())}),{get(){return l(),n.get?n.get(u):u},set(p){const g=n.set?n.set(p):p;if(!Pt(g,u)&&!(f!==je&&Pt(p,f)))return;const h=r.vnode.props,v=!!(h&&(t in h||o in h||s in h)&&(`onUpdate:${t}`in h||`onUpdate:${o}`in h||`onUpdate:${s}`in h));v||(u=p,c()),r.emit(`update:${t}`,g),Pt(p,f)&&(Pt(p,g)&&!Pt(g,d)||v&&f!==je&&!Pt(g,u))&&c(),f=p,d=g}}});return i[Symbol.iterator]=()=>{let l=0;return{next(){return l<2?{value:l++?a||je:i,done:!1}:{done:!0}}}},i}const Ph=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Rt(t)}Modifiers`]||e[`${Jn(t)}Modifiers`];function qv(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||je;let o=n;const s=t.startsWith("update:"),a=s&&Ph(r,t.slice(7));a&&(a.trim&&(o=n.map(u=>De(u)?u.trim():u)),a.number&&(o=n.map(gi)));let i,l=r[i=gs(t)]||r[i=gs(Rt(t))];!l&&s&&(l=r[i=gs(Jn(t))]),l&&wn(l,e,6,o);const c=r[i+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,wn(c,e,6,o)}}const Xv=new WeakMap;function kh(e,t,n=!1){const r=n?Xv:t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let a={},i=!1;if(!ge(e)){const l=c=>{const u=kh(c,t,!0);u&&(i=!0,Et(a,u))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!s&&!i?(Ie(e)&&r.set(e,null),null):(ue(s)?s.forEach(l=>a[l]=null):Et(a,s),Ie(e)&&r.set(e,a),a)}function ki(e,t){return!e||!fi(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),He(e,t[0].toLowerCase()+t.slice(1))||He(e,Jn(t))||He(e,t))}function Ku(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[s],slots:a,attrs:i,emit:l,render:c,renderCache:u,props:f,data:d,setupState:p,ctx:g,inheritAttrs:h}=e,v=Ka(e);let m,b;try{if(n.shapeFlag&4){const y=o||r,O=y;m=jn(c.call(O,y,u,f,p,d,g)),b=i}else{const y=t;m=jn(y.length>1?y(f,{attrs:i,slots:a,emit:l}):y(f,null)),b=t.props?i:Jv(i)}}catch(y){dr.length=0,Ai(y,e,1),m=xe(At)}let S=m;if(b&&h!==!1){const y=Object.keys(b),{shapeFlag:O}=S;y.length&&O&7&&(s&&y.some(di)&&(b=Zv(b,s)),S=_r(S,b,!1,!0))}return n.dirs&&(S=_r(S,null,!1,!0),S.dirs=S.dirs?S.dirs.concat(n.dirs):n.dirs),n.transition&&Is(S,n.transition),m=S,Ka(v),m}const Jv=e=>{let t;for(const n in e)(n==="class"||n==="style"||fi(n))&&((t||(t={}))[n]=e[n]);return t},Zv=(e,t)=>{const n={};for(const r in e)(!di(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Qv(e,t,n){const{props:r,children:o,component:s}=e,{props:a,children:i,patchFlag:l}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?Gu(r,a,c):!!a;if(l&8){const u=t.dynamicProps;for(let f=0;fObject.create(Nh),Fh=e=>Object.getPrototypeOf(e)===Nh;function tb(e,t,n,r=!1){const o={},s=Mh();e.propsDefaults=Object.create(null),Dh(e,t,o,s);for(const a in e.propsOptions[0])a in o||(o[a]=void 0);n?e.props=r?o:th(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function nb(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:a}}=e,i=Ve(o),[l]=e.propsOptions;let c=!1;if((r||a>0)&&!(a&16)){if(a&8){const u=e.vnode.dynamicProps;for(let f=0;f{l=!0;const[d,p]=$h(f,t,!0);Et(a,d),p&&i.push(...p)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!s&&!l)return Ie(e)&&r.set(e,ko),ko;if(ue(s))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",$c=e=>ue(e)?e.map(jn):[jn(e)],ob=(e,t,n)=>{if(t._n)return t;const r=me((...o)=>$c(t(...o)),n);return r._c=!1,r},Vh=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Dc(o))continue;const s=e[o];if(ge(s))t[o]=ob(o,s,r);else if(s!=null){const a=$c(s);t[o]=()=>a}}},Bh=(e,t)=>{const n=$c(t);e.slots.default=()=>n},Hh=(e,t,n)=>{for(const r in t)(n||!Dc(r))&&(e[r]=t[r])},sb=(e,t,n)=>{const r=e.slots=Mh();if(e.vnode.shapeFlag&32){const o=t._;o?(Hh(r,t,n),n&&Np(r,"_",o,!0)):Vh(t,r)}else t&&Bh(e,t)},ab=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,a=je;if(r.shapeFlag&32){const i=t._;i?n&&i===1?s=!1:Hh(o,t,n):(s=!t.$stable,Vh(t,o)),a=t}else t&&(Bh(e,t),a={default:1});if(s)for(const i in o)!Dc(i)&&a[i]==null&&delete o[i]},Ht=fb;function ib(e){return lb(e)}function lb(e,t){const n=vi();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:a,createText:i,createComment:l,setText:c,setElementText:u,parentNode:f,nextSibling:d,setScopeId:p=qe,insertStaticContent:g}=e,h=(T,C,k,Y=null,q=null,K=null,_=void 0,E=null,x=!!C.dynamicChildren)=>{if(T===C)return;T&&!to(T,C)&&(Y=j(T),le(T,q,K,!0),T=null),C.patchFlag===-2&&(x=!1,C.dynamicChildren=null);const{type:R,ref:se,shapeFlag:X}=C;switch(R){case mo:v(T,C,k,Y);break;case At:m(T,C,k,Y);break;case Fa:T==null&&b(C,k,Y,_);break;case Qe:D(T,C,k,Y,q,K,_,E,x);break;default:X&1?O(T,C,k,Y,q,K,_,E,x):X&6?Q(T,C,k,Y,q,K,_,E,x):(X&64||X&128)&&R.process(T,C,k,Y,q,K,_,E,x,ne)}se!=null&&q?ys(se,T&&T.ref,K,C||T,!C):se==null&&T&&T.ref!=null&&ys(T.ref,null,K,T,!0)},v=(T,C,k,Y)=>{if(T==null)r(C.el=i(C.children),k,Y);else{const q=C.el=T.el;C.children!==T.children&&c(q,C.children)}},m=(T,C,k,Y)=>{T==null?r(C.el=l(C.children||""),k,Y):C.el=T.el},b=(T,C,k,Y)=>{[T.el,T.anchor]=g(T.children,C,k,Y,T.el,T.anchor)},S=({el:T,anchor:C},k,Y)=>{let q;for(;T&&T!==C;)q=d(T),r(T,k,Y),T=q;r(C,k,Y)},y=({el:T,anchor:C})=>{let k;for(;T&&T!==C;)k=d(T),o(T),T=k;o(C)},O=(T,C,k,Y,q,K,_,E,x)=>{if(C.type==="svg"?_="svg":C.type==="math"&&(_="mathml"),T==null)M(C,k,Y,q,K,_,E,x);else{const R=T.el&&T.el._isVueCE?T.el:null;try{R&&R._beginPatch(),N(T,C,q,K,_,E,x)}finally{R&&R._endPatch()}}},M=(T,C,k,Y,q,K,_,E)=>{let x,R;const{props:se,shapeFlag:X,transition:I,dirs:B}=T;if(x=T.el=a(T.type,K,se&&se.is,se),X&8?u(x,T.children):X&16&&$(T.children,x,null,Y,q,ll(T,K),_,E),B&&Gr(T,null,Y,"created"),A(x,T,T.scopeId,_,Y),se){for(const we in se)we!=="value"&&!ms(we)&&s(x,we,null,se[we],K,Y);"value"in se&&s(x,"value",null,se.value,K),(R=se.onVnodeBeforeMount)&&Dn(R,Y,T)}B&&Gr(T,null,Y,"beforeMount");const fe=cb(q,I);fe&&I.beforeEnter(x),r(x,C,k),((R=se&&se.onVnodeMounted)||fe||B)&&Ht(()=>{R&&Dn(R,Y,T),fe&&I.enter(x),B&&Gr(T,null,Y,"mounted")},q)},A=(T,C,k,Y,q)=>{if(k&&p(T,k),Y)for(let K=0;K{for(let R=x;R{const E=C.el=T.el;let{patchFlag:x,dynamicChildren:R,dirs:se}=C;x|=T.patchFlag&16;const X=T.props||je,I=C.props||je;let B;if(k&&Yr(k,!1),(B=I.onVnodeBeforeUpdate)&&Dn(B,k,C,T),se&&Gr(C,T,k,"beforeUpdate"),k&&Yr(k,!0),R&&(!T.dynamicChildren||T.dynamicChildren.length!==R.length)&&(x=0,_=!1,R=null),(X.innerHTML&&I.innerHTML==null||X.textContent&&I.textContent==null)&&u(E,""),R?U(T.dynamicChildren,R,E,k,Y,ll(C,q),K):_||F(T,C,E,null,k,Y,ll(C,q),K,!1),x>0){if(x&16)z(E,X,I,k,q);else if(x&2&&X.class!==I.class&&s(E,"class",null,I.class,q),x&4&&s(E,"style",X.style,I.style,q),x&8){const fe=C.dynamicProps;for(let we=0;we{B&&Dn(B,k,C,T),se&&Gr(C,T,k,"updated")},Y)},U=(T,C,k,Y,q,K,_)=>{for(let E=0;E{if(C!==k){if(C!==je)for(const K in C)!ms(K)&&!(K in k)&&s(T,K,C[K],null,q,Y);for(const K in k){if(ms(K))continue;const _=k[K],E=C[K];_!==E&&K!=="value"&&s(T,K,E,_,q,Y)}"value"in k&&s(T,"value",C.value,k.value,q)}},D=(T,C,k,Y,q,K,_,E,x)=>{const R=C.el=T?T.el:i(""),se=C.anchor=T?T.anchor:i("");let{patchFlag:X,dynamicChildren:I,slotScopeIds:B}=C;B&&(E=E?E.concat(B):B),T==null?(r(R,k,Y),r(se,k,Y),$(C.children||[],k,se,q,K,_,E,x)):X>0&&X&64&&I&&T.dynamicChildren&&T.dynamicChildren.length===I.length?(U(T.dynamicChildren,I,k,q,K,_,E),(C.key!=null||q&&C===q.subTree)&&Vc(T,C,!0)):F(T,C,k,se,q,K,_,E,x)},Q=(T,C,k,Y,q,K,_,E,x)=>{C.slotScopeIds=E,T==null?C.shapeFlag&512?q.ctx.activate(C,k,Y,_,x):Z(C,k,Y,q,K,_,x):G(T,C,x)},Z=(T,C,k,Y,q,K,_)=>{const E=T.component=gb(T,Y,q);if(xi(T)&&(E.ctx.renderer=ne),vb(E,!1,_),E.asyncDep){if(q&&q.registerDep(E,H,_),!T.el){const x=E.subTree=xe(At);m(null,x,C,k),T.placeholder=x.el}}else H(E,T,C,k,q,K,_)},G=(T,C,k)=>{const Y=C.component=T.component;if(Qv(T,C,k))if(Y.asyncDep&&!Y.asyncResolved){L(Y,C,k);return}else Y.next=C,Y.update();else C.el=T.el,Y.vnode=C},H=(T,C,k,Y,q,K,_)=>{const E=()=>{if(T.isMounted){let{next:X,bu:I,u:B,parent:fe,vnode:we}=T;{const ht=Uh(T);if(ht){X&&(X.el=we.el,L(T,X,_)),ht.asyncDep.then(()=>{Ht(()=>{T.isUnmounted||R()},q)});return}}let Re=X,Be;Yr(T,!1),X?(X.el=we.el,L(T,X,_)):X=we,I&&Ma(I),(Be=X.props&&X.props.onVnodeBeforeUpdate)&&Dn(Be,fe,X,we),Yr(T,!0);const $e=Ku(T),It=T.subTree;T.subTree=$e,h(It,$e,f(It.el),j(It),T,q,K),X.el=$e.el,Re===null&&eb(T,$e.el),B&&Ht(B,q),(Be=X.props&&X.props.onVnodeUpdated)&&Ht(()=>Dn(Be,fe,X,we),q)}else{let X;const{el:I,props:B}=C,{bm:fe,m:we,parent:Re,root:Be,type:$e}=T,It=Mo(C);Yr(T,!1),fe&&Ma(fe),!It&&(X=B&&B.onVnodeBeforeMount)&&Dn(X,Re,C),Yr(T,!0);{Be.ce&&Be.ce._hasShadowRoot()&&Be.ce._injectChildStyle($e,T.parent?T.parent.type:void 0);const ht=T.subTree=Ku(T);h(null,ht,k,Y,T,q,K),C.el=ht.el}if(we&&Ht(we,q),!It&&(X=B&&B.onVnodeMounted)){const ht=C;Ht(()=>Dn(X,Re,ht),q)}(C.shapeFlag&256||Re&&Mo(Re.vnode)&&Re.vnode.shapeFlag&256)&&T.a&&Ht(T.a,q),T.isMounted=!0,C=k=Y=null}};T.scope.on();const x=T.effect=new Vp(E);T.scope.off();const R=T.update=x.run.bind(x),se=T.job=x.runIfDirty.bind(x);se.i=T,se.id=T.uid,x.scheduler=()=>kc(se),Yr(T,!0),R()},L=(T,C,k)=>{C.component=T;const Y=T.vnode.props;T.vnode=C,T.next=null,nb(T,C.props,Y,k),ab(T,C.children,k),vr(),Mu(T),br()},F=(T,C,k,Y,q,K,_,E,x=!1)=>{const R=T&&T.children,se=T?T.shapeFlag:0,X=C.children,{patchFlag:I,shapeFlag:B}=C;if(I>0){if(I&128){te(R,X,k,Y,q,K,_,E,x);return}else if(I&256){J(R,X,k,Y,q,K,_,E,x);return}}B&8?(se&16&&Fe(R,q,K),X!==R&&u(k,X)):se&16?B&16?te(R,X,k,Y,q,K,_,E,x):Fe(R,q,K,!0):(se&8&&u(k,""),B&16&&$(X,k,Y,q,K,_,E,x))},J=(T,C,k,Y,q,K,_,E,x)=>{T=T||ko,C=C||ko;const R=T.length,se=C.length,X=Math.min(R,se);let I;for(I=0;Ise?Fe(T,q,K,!0,!1,X):$(C,k,Y,q,K,_,E,x,X)},te=(T,C,k,Y,q,K,_,E,x)=>{let R=0;const se=C.length;let X=T.length-1,I=se-1;for(;R<=X&&R<=I;){const B=T[R],fe=C[R]=x?ar(C[R]):jn(C[R]);if(to(B,fe))h(B,fe,k,null,q,K,_,E,x);else break;R++}for(;R<=X&&R<=I;){const B=T[X],fe=C[I]=x?ar(C[I]):jn(C[I]);if(to(B,fe))h(B,fe,k,null,q,K,_,E,x);else break;X--,I--}if(R>X){if(R<=I){const B=I+1,fe=BI)for(;R<=X;)le(T[R],q,K,!0),R++;else{const B=R,fe=R,we=new Map;for(R=fe;R<=I;R++){const Le=C[R]=x?ar(C[R]):jn(C[R]);Le.key!=null&&we.set(Le.key,R)}let Re,Be=0;const $e=I-fe+1;let It=!1,ht=0;const Oe=new Array($e);for(R=0;R<$e;R++)Oe[R]=0;for(R=B;R<=X;R++){const Le=T[R];if(Be>=$e){le(Le,q,K,!0);continue}let it;if(Le.key!=null)it=we.get(Le.key);else for(Re=fe;Re<=I;Re++)if(Oe[Re-fe]===0&&to(Le,C[Re])){it=Re;break}it===void 0?le(Le,q,K,!0):(Oe[it-fe]=R+1,it>=ht?ht=it:It=!0,h(Le,C[it],k,null,q,K,_,E,x),Be++)}const ke=It?ub(Oe):ko;for(Re=ke.length-1,R=$e-1;R>=0;R--){const Le=fe+R,it=C[Le],St=C[Le+1],kn=Le+1{const{el:K,type:_,transition:E,children:x,shapeFlag:R}=T;if(R&6){ve(T.component.subTree,C,k,Y);return}if(R&128){T.suspense.move(C,k,Y);return}if(R&64){_.move(T,C,k,ne);return}if(_===Qe){r(K,C,k);for(let X=0;XE.enter(K),q));else{const{leave:X,delayLeave:I,afterLeave:B}=E,fe=()=>{T.ctx.isUnmounted?o(K):r(K,C,k)},we=()=>{const Re=K._isLeaving||!!K[pn];K._isLeaving&&K[pn](!0),E.persisted&&!Re?fe():X(K,()=>{fe(),B&&B()})};I?I(K,fe,we):we()}else r(K,C,k)},le=(T,C,k,Y=!1,q=!1)=>{const{type:K,props:_,ref:E,children:x,dynamicChildren:R,shapeFlag:se,patchFlag:X,dirs:I,cacheIndex:B,memo:fe}=T;if(X===-2&&(q=!1),E!=null&&(vr(),ys(E,null,k,T,!0),br()),B!=null&&(C.renderCache[B]=void 0),se&256){C.ctx.deactivate(T);return}const we=se&1&&I,Re=!Mo(T);let Be;if(Re&&(Be=_&&_.onVnodeBeforeUnmount)&&Dn(Be,C,T),se&6)Se(T.component,k,Y);else{if(se&128){T.suspense.unmount(k,Y);return}we&&Gr(T,null,C,"beforeUnmount"),se&64?T.type.remove(T,C,k,ne,Y):R&&!R.hasOnce&&(K!==Qe||X>0&&X&64)?Fe(R,C,k,!1,!0):(K===Qe&&X&384||!q&&se&16)&&Fe(x,C,k),Y&&Pe(T)}const $e=fe!=null&&B==null;(Re&&(Be=_&&_.onVnodeUnmounted)||we||$e)&&Ht(()=>{Be&&Dn(Be,C,T),we&&Gr(T,null,C,"unmounted"),$e&&(T.el=null)},k)},Pe=T=>{const{type:C,el:k,anchor:Y,transition:q}=T;if(C===Qe){_e(k,Y);return}if(C===Fa){y(T);return}const K=()=>{o(k),q&&!q.persisted&&q.afterLeave&&q.afterLeave()};if(T.shapeFlag&1&&q&&!q.persisted){const{leave:_,delayLeave:E}=q,x=()=>_(k,K);E?E(T.el,K,x):x()}else K()},_e=(T,C)=>{let k;for(;T!==C;)k=d(T),o(T),T=k;o(C)},Se=(T,C,k)=>{const{bum:Y,scope:q,job:K,subTree:_,um:E,m:x,a:R}=T;qu(x),qu(R),Y&&Ma(Y),q.stop(),K&&(K.flags|=8,le(_,T,C,k)),E&&Ht(E,C),Ht(()=>{T.isUnmounted=!0},C)},Fe=(T,C,k,Y=!1,q=!1,K=0)=>{for(let _=K;_{if(T.shapeFlag&6)return j(T.component.subTree);if(T.shapeFlag&128)return T.suspense.next();const C=d(T.anchor||T.el),k=C&&C[fh];return k?d(k):C};let oe=!1;const ee=(T,C,k)=>{let Y;T==null?C._vnode&&(le(C._vnode,null,null,!0),Y=C._vnode.component):h(C._vnode||null,T,C,null,null,null,k),C._vnode=T,oe||(oe=!0,Mu(Y),ih(),oe=!1)},ne={p:h,um:le,m:ve,r:Pe,mt:Z,mc:$,pc:F,pbc:U,n:j,o:e};return{render:ee,hydrate:void 0,createApp:Yv(ee)}}function ll({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Yr({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function cb(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Vc(e,t,n=!1){const r=e.children,o=t.children;if(ue(r)&&ue(o))for(let s=0;s>1,e[n[i]]0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,a=n[s-1];s-- >0;)n[s]=a,a=t[a];return n}function Uh(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Uh(t)}function qu(e){if(e)for(let t=0;te.__isSuspense;function fb(e,t){t&&t.pendingBranch?ue(e)?t.effects.push(...e):t.effects.push(e):_v(e)}const Qe=Symbol.for("v-fgt"),mo=Symbol.for("v-txt"),At=Symbol.for("v-cmt"),Fa=Symbol.for("v-stc"),dr=[];let nn=null;function V(e=!1){dr.push(nn=e?null:[])}function Bc(){dr.pop(),nn=dr[dr.length-1]||null}let Ps=1;function qa(e,t=!1){Ps+=e,e<0&&nn&&t&&(nn.hasOnce=!0)}function zh(e){return e.dynamicChildren=Ps>0?nn||ko:null,Bc(),Ps>0&&nn&&nn.push(e),e}function ie(e,t,n,r,o,s){return zh(ce(e,t,n,r,o,s,!0))}function ye(e,t,n,r,o){return zh(xe(e,t,n,r,o,!0))}function pr(e){return e?e.__v_isVNode===!0:!1}function to(e,t){return e.type===t.type&&e.key===t.key}const Kh=({key:e})=>e??null,Da=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?De(e)||Ze(e)||ge(e)?{i:kt,r:e,k:t,f:!!n}:e:null);function ce(e,t=null,n=null,r=0,o=null,s=e===Qe?0:1,a=!1,i=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Kh(t),ref:t&&Da(t),scopeId:ch,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:kt};return i?(Ja(l,n),s&128&&e.normalize(l)):n&&(l.shapeFlag|=De(n)?8:16),Ps>0&&!a&&nn&&(l.patchFlag>0||s&6)&&l.patchFlag!==32&&nn.push(l),l}const xe=db;function db(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===Th)&&(e=At),pr(e)){const i=_r(e,t,!0);return n&&Ja(i,n),Ps>0&&!s&&nn&&(i.shapeFlag&6?nn[nn.indexOf(e)]=i:nn.push(i)),i.patchFlag=-2,i}if(wb(e)&&(e=e.__vccOpts),t){t=pb(t);let{class:i,style:l}=t;i&&!De(i)&&(t.class=ae(i)),Ie(l)&&(Ti(l)&&!ue(l)&&(l=Et({},l)),t.style=yt(l))}const a=De(e)?1:Wh(e)?128:dh(e)?64:Ie(e)?4:ge(e)?2:0;return ce(e,t,n,r,o,a,s,!0)}function pb(e){return e?Ti(e)||Fh(e)?Et({},e):e:null}function _r(e,t,n=!1,r=!1){const{props:o,ref:s,patchFlag:a,children:i,transition:l}=e,c=t?Gt(o||{},t):o,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Kh(c),ref:t&&t.ref?n&&s?ue(s)?s.concat(Da(t)):[s,Da(t)]:Da(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Qe?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_r(e.ssContent),ssFallback:e.ssFallback&&_r(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&r&&Is(u,l.clone(u)),u}function Xa(e=" ",t=0){return xe(mo,null,e,t)}function QA(e,t){const n=xe(Fa,null,e);return n.staticCount=t,n}function be(e="",t=!1){return t?(V(),ye(At,null,e)):xe(At,null,e)}function jn(e){return e==null||typeof e=="boolean"?xe(At):ue(e)?xe(Qe,null,e.slice()):pr(e)?ar(e):xe(mo,null,String(e))}function ar(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_r(e)}function Ja(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(ue(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Ja(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Fh(t)?t._ctx=kt:o===3&&kt&&(kt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(ge(t)){if(r&65){Ja(e,{default:t});return}t={default:t,_ctx:kt},n=32}else t=String(t),r&64?(n=16,t=[Xa(t)]):n=8;e.children=t,e.shapeFlag|=n}function Gt(...e){const t={};for(let n=0;n$t||kt;let Za,Hl;{const e=vi(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),s=>{o.length>1?o.forEach(a=>a(s)):o[0](s)}};Za=t("__VUE_INSTANCE_SETTERS__",n=>$t=n),Hl=t("__VUE_SSR_SETTERS__",n=>ks=n)}const Js=e=>{const t=$t;return Za(e),e.scope.on(),()=>{e.scope.off(),Za(t)}},Xu=()=>{$t&&$t.scope.off(),Za(null)};function Gh(e){return e.vnode.shapeFlag&4}let ks=!1;function vb(e,t=!1,n=!1){t&&Hl(t);const{props:r,children:o}=e.vnode,s=Gh(e);tb(e,r,s,t),sb(e,o,n||t);const a=s?bb(e,t):void 0;return t&&Hl(!1),a}function bb(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bv);const{setup:r}=n;if(r){vr();const o=e.setupContext=r.length>1?qh(e):null,s=Js(e),a=Xs(r,e,0,[e.props,o]),i=Ua(a);if(br(),s(),(i||e.sp)&&!Mo(e)&&yh(e),i){if(a.then(Xu,Xu),t)return a.then(l=>{Ju(e,l)}).catch(l=>{Ai(l,e,0)});e.asyncDep=a}else Ju(e,a)}else Yh(e)}function Ju(e,t,n){ge(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ie(t)&&(e.setupState=rh(t)),Yh(e)}function Yh(e,t,n){const r=e.type;e.render||(e.render=r.render||qe);{const o=Js(e);vr();try{Uv(e)}finally{br(),o()}}}const yb={get(e,t){return Dt(e,"get",""),e[t]}};function qh(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,yb),slots:e.slots,emit:e.emit,expose:t}}function Ri(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(rh(Ci(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in _s)return _s[n](e)},has(t,n){return n in t||n in _s}})):e.proxy}function _b(e,t=!0){return ge(e)?e.displayName||e.name:e.name||t&&e.__name}function wb(e){return ge(e)&&"__vccOpts"in e}const P=(e,t)=>mv(e,t,ks);function tn(e,t,n){try{qa(-1);const r=arguments.length;return r===2?Ie(t)&&!ue(t)?pr(t)?xe(e,null,[t]):xe(e,t):xe(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&pr(n)&&(n=[n]),xe(e,t,n))}finally{qa(1)}}const Eb="3.5.40",Sb=qe;let Ul;const Zu=typeof window<"u"&&window.trustedTypes;if(Zu)try{Ul=Zu.createPolicy("vue",{createHTML:e=>e})}catch{}const Xh=Ul?e=>Ul.createHTML(e):e=>e,Tb="http://www.w3.org/2000/svg",Cb="http://www.w3.org/1998/Math/MathML",or=typeof document<"u"?document:null,Qu=or&&or.createElement("template"),Ab={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?or.createElementNS(Tb,e):t==="mathml"?or.createElementNS(Cb,e):n?or.createElement(e,{is:n}):or.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>or.createTextNode(e),createComment:e=>or.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>or.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const a=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{Qu.innerHTML=Xh(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const i=Qu.content;if(r==="svg"||r==="mathml"){const l=i.firstChild;for(;l.firstChild;)i.appendChild(l.firstChild);i.removeChild(l)}t.insertBefore(i,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Or="transition",ns="animation",Rs=Symbol("_vtc"),Jh={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Ob=Et({},hh,Jh),xb=e=>(e.displayName="Transition",e.props=Ob,e),Zs=xb((e,{slots:t})=>tn(Pv,Lb(e),t)),qr=(e,t=[])=>{ue(e)?e.forEach(n=>n(...t)):e&&e(...t)},ef=e=>e?ue(e)?e.some(t=>t.length>1):e.length>1:!1;function Lb(e){const t={};for(const D in e)D in Jh||(t[D]=e[D]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:i=`${n}-enter-to`,appearFromClass:l=s,appearActiveClass:c=a,appearToClass:u=i,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,g=Ib(o),h=g&&g[0],v=g&&g[1],{onBeforeEnter:m,onEnter:b,onEnterCancelled:S,onLeave:y,onLeaveCancelled:O,onBeforeAppear:M=m,onAppear:A=b,onAppearCancelled:$=S}=t,N=(D,Q,Z,G)=>{D._enterCancelled=G,Xr(D,Q?u:i),Xr(D,Q?c:a),Z&&Z()},U=(D,Q)=>{D._isLeaving=!1,Xr(D,f),Xr(D,p),Xr(D,d),Q&&Q()},z=D=>(Q,Z)=>{const G=D?A:b,H=()=>N(Q,D,Z);qr(G,[Q,H]),tf(()=>{Xr(Q,D?l:s),er(Q,D?u:i),ef(G)||nf(Q,r,h,H)})};return Et(t,{onBeforeEnter(D){qr(m,[D]),er(D,s),er(D,a)},onBeforeAppear(D){qr(M,[D]),er(D,l),er(D,c)},onEnter:z(!1),onAppear:z(!0),onLeave(D,Q){D._isLeaving=!0;const Z=()=>U(D,Q);er(D,f),D._enterCancelled?(er(D,d),sf(D)):(sf(D),er(D,d)),tf(()=>{D._isLeaving&&(Xr(D,f),er(D,p),ef(y)||nf(D,r,v,Z))}),qr(y,[D,Z])},onEnterCancelled(D){N(D,!1,void 0,!0),qr(S,[D])},onAppearCancelled(D){N(D,!0,void 0,!0),qr($,[D])},onLeaveCancelled(D){U(D),qr(O,[D])}})}function Ib(e){if(e==null)return null;if(Ie(e))return[cl(e.enter),cl(e.leave)];{const t=cl(e);return[t,t]}}function cl(e){return M0(e)}function er(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Rs]||(e[Rs]=new Set)).add(t)}function Xr(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Rs];n&&(n.delete(t),n.size||(e[Rs]=void 0))}function tf(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Pb=0;function nf(e,t,n,r){const o=e._endId=++Pb,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:a,timeout:i,propCount:l}=kb(e,t);if(!a)return r();const c=a+"end";let u=0;const f=()=>{e.removeEventListener(c,d),s()},d=p=>{p.target===e&&++u>=l&&f()};setTimeout(()=>{u(n[g]||"").split(", "),o=r(`${Or}Delay`),s=r(`${Or}Duration`),a=rf(o,s),i=r(`${ns}Delay`),l=r(`${ns}Duration`),c=rf(i,l);let u=null,f=0,d=0;t===Or?a>0&&(u=Or,f=a,d=s.length):t===ns?c>0&&(u=ns,f=c,d=l.length):(f=Math.max(a,c),u=f>0?a>c?Or:ns:null,d=u?u===Or?s.length:l.length:0);const p=u===Or&&/\b(?:transform|all)(?:,|$)/.test(r(`${Or}Property`).toString());return{type:u,timeout:f,propCount:d,hasTransform:p}}function rf(e,t){for(;e.lengthof(n)+of(e[r])))}function of(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function sf(e){return(e?e.ownerDocument:document).body.offsetHeight}function Rb(e,t,n){const r=e[Rs];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Qa=Symbol("_vod"),Zh=Symbol("_vsh"),go={name:"show",beforeMount(e,{value:t},{transition:n}){e[Qa]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):rs(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),rs(e,!0),r.enter(e)):r.leave(e,()=>{rs(e,!1)}):rs(e,t))},beforeUnmount(e,{value:t}){rs(e,t)}};function rs(e,t){e.style.display=t?e[Qa]:"none",e[Zh]=!t}const Nb=Symbol(""),Mb=/(?:^|;)\s*display\s*:/;function Fb(e,t,n){const r=e.style,o=De(n);let s=!1;if(n&&!o){if(t)if(De(t))for(const a of t.split(";")){const i=a.slice(0,a.indexOf(":")).trim();n[i]==null&&fs(r,i,"")}else for(const a in t)n[a]==null&&fs(r,a,"");for(const a in n){a==="display"&&(s=!0);const i=n[a];i!=null?$b(e,a,!De(t)&&t?t[a]:void 0,i)||fs(r,a,i):fs(r,a,"")}}else if(o){if(t!==n){const a=r[Nb];a&&(n+=";"+a),r.cssText=n,s=Mb.test(n)}}else t&&e.removeAttribute("style");Qa in e&&(e[Qa]=s?r.display:"",e[Zh]&&(r.display="none"))}const af=/\s*!important$/;function fs(e,t,n){if(ue(n))n.forEach(r=>fs(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Db(e,t);af.test(n)?e.setProperty(Jn(r),n.replace(af,""),"important"):e[r]=n}}const lf=["Webkit","Moz","ms"],ul={};function Db(e,t){const n=ul[t];if(n)return n;let r=Rt(t);if(r!=="filter"&&r in e)return ul[t]=r;r=mi(r);for(let o=0;ofl||(Wb.then(()=>fl=0),fl=Date.now());function Kb(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;const o=n.value;if(ue(o)){const s=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{s.call(r),r._stopped=!0};const a=o.slice(),i=[r];for(let l=0;le.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Gb=(e,t,n,r,o,s)=>{const a=o==="svg";t==="class"?Rb(e,r,a):t==="style"?Fb(e,n,r):fi(t)?di(t)||Bb(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yb(e,t,r,a))?(ff(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&uf(e,t,r,a,s,t!=="value")):e._isVueCE&&(qb(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!De(r)))?ff(e,Rt(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),uf(e,t,r,a))};function Yb(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&pf(t)&&ge(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return pf(t)&&De(n)?!1:t in e}function qb(e,t){const n=e._def.props;if(!n)return!1;const r=Rt(t);return Array.isArray(n)?n.some(o=>Rt(o)===r):Object.keys(n).some(o=>Rt(o)===r)}const Do=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ue(t)?n=>Ma(t,n):t};function Xb(e){e.target.composing=!0}function hf(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const hr=Symbol("_assign");function mf(e,t,n){return t&&(e=e.trim()),n&&(e=gi(e)),e}const eO={created(e,{modifiers:{lazy:t,trim:n,number:r}},o){e[hr]=Do(o);const s=r||o.props&&o.props.type==="number";Dr(e,t?"change":"input",a=>{a.target.composing||e[hr](mf(e.value,n,s))}),(n||s)&&Dr(e,"change",()=>{e.value=mf(e.value,n,s)}),t||(Dr(e,"compositionstart",Xb),Dr(e,"compositionend",hf),Dr(e,"change",hf))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:o,number:s}},a){if(e[hr]=Do(a),e.composing)return;const i=(s||e.type==="number")&&!/^0\d/.test(e.value)?gi(e.value):e.value,l=t??"";if(i===l)return;const c=e.getRootNode();(c instanceof Document||c instanceof ShadowRoot)&&c.activeElement===e&&e.type!=="range"&&(r&&t===n||o&&e.value.trim()===l)||(e.value=l)}},tO={deep:!0,created(e,t,n){e[hr]=Do(n),Dr(e,"change",()=>{const r=e._modelValue,o=Ns(e),s=e.checked,a=e[hr];if(ue(r)){const i=Oc(r,o),l=i!==-1;if(s&&!l)a(r.concat(o));else if(!s&&l){const c=[...r];c.splice(i,1),a(c)}}else if(qo(r)){const i=new Set(r);s?i.add(o):i.delete(o),a(i)}else a(Qh(e,s))})},mounted:gf,beforeUpdate(e,t,n){e[hr]=Do(n),gf(e,t,n)}};function gf(e,{value:t,oldValue:n},r){e._modelValue=t;let o;if(ue(t))o=Oc(t,r.props.value)>-1;else if(qo(t))o=t.has(r.props.value);else{if(t===n)return;o=Xo(t,Qh(e,!0))}e.checked!==o&&(e.checked=o)}const nO={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,Dr(e,"change",()=>{const o=Array.prototype.filter.call(e.options,s=>s.selected).map(s=>n?gi(Ns(s)):Ns(s));e[hr](e.multiple?qo(e._modelValue)?new Set(o):o:o[0]),e._assigning=!0,Ye(()=>{e._assigning=!1})}),e[hr]=Do(r)},mounted(e,{value:t}){vf(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[hr]=Do(n)},updated(e,{value:t}){e._assigning||vf(e,t)}};function vf(e,t){const n=e.multiple,r=ue(t);if(!(n&&!r&&!qo(t))){for(let o=0,s=e.options.length;oString(c)===String(i)):a.selected=Oc(t,i)>-1}else a.selected=t.has(i);else if(Xo(Ns(a),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ns(e){return"_value"in e?e._value:e.value}function Qh(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Jb=["ctrl","shift","alt","meta"],Zb={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Jb.some(n=>e[`${n}Key`]&&!t.includes(n))},Wt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=((o,...s)=>{for(let a=0;a{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=(o=>{if(!("key"in o))return;const s=Jn(o.key);if(t.some(a=>a===s||Qb[a]===s))return e(o)}))},ey=Et({patchProp:Gb},Ab);let bf;function em(){return bf||(bf=ib(ey))}const rO=((...e)=>{em().render(...e)}),tm=((...e)=>{const t=em().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=ny(r);if(!o)return;const s=t._component;!ge(s)&&!s.render&&!s.template&&(s.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const a=n(o,!1,ty(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),a},t});function ty(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ny(e){return De(e)?document.querySelector(e):e}let nm;const Ni=e=>nm=e,rm=Symbol();function Wl(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ws;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ws||(ws={}));function ry(){const e=xc(!0),t=e.run(()=>re({}));let n=[],r=[];const o=Ci({install(s){Ni(o),o._a=s,s.provide(rm,o),s.config.globalProperties.$pinia=o,r.forEach(a=>n.push(a)),r=[]},use(s){return this._a?n.push(s):r.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}const om=()=>{};function yf(e,t,n,r=om){e.add(t);const o=()=>{e.delete(t)&&r()};return!n&&bi()&&yi(o),o}function To(e,...t){e.forEach(n=>{n(...t)})}const oy=e=>e(),_f=Symbol(),dl=Symbol();function zl(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,r)=>e.set(r,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const r=t[n],o=e[n];Wl(o)&&Wl(r)&&e.hasOwnProperty(n)&&!Ze(r)&&!zn(r)?e[n]=zl(o,r):e[n]=r}return e}const sy=Symbol();function ay(e){return!Wl(e)||!Object.prototype.hasOwnProperty.call(e,sy)}const{assign:Ir}=Object;function iy(e){return!!(Ze(e)&&e.effect)}function ly(e,t,n,r){const{state:o,actions:s,getters:a}=t,i=n.state.value[e];let l;function c(){i||(n.state.value[e]=o?o():{});const u=qs(n.state.value[e]);return Ir(u,s,Object.keys(a||{}).reduce((f,d)=>(f[d]=Ci(P(()=>{Ni(n);const p=n._s.get(e);return a[d].call(p,p)})),f),{}))}return l=sm(e,c,t,n,r,!0),l}function sm(e,t,n={},r,o,s){let a;const i=Ir({actions:{}},n),l={deep:!0};let c,u,f=new Set,d=new Set,p;const g=r.state.value[e];!s&&!g&&(r.state.value[e]={});let h;function v($){let N;c=u=!1,typeof $=="function"?($(r.state.value[e]),N={type:ws.patchFunction,storeId:e,events:p}):(zl(r.state.value[e],$),N={type:ws.patchObject,payload:$,storeId:e,events:p});const U=h=Symbol();Ye().then(()=>{h===U&&(c=!0)}),u=!0,To(f,N,r.state.value[e])}const m=s?function(){const{state:N}=n,U=N?N():{};this.$patch(z=>{Ir(z,U)})}:om;function b(){a.stop(),f.clear(),d.clear(),r._s.delete(e)}const S=($,N="")=>{if(_f in $)return $[dl]=N,$;const U=function(){Ni(r);const z=Array.from(arguments),D=new Set,Q=new Set;function Z(L){D.add(L)}function G(L){Q.add(L)}To(d,{args:z,name:U[dl],store:O,after:Z,onError:G});let H;try{H=$.apply(this&&this.$id===e?this:O,z)}catch(L){throw To(Q,L),L}return H instanceof Promise?H.then(L=>(To(D,L),L)).catch(L=>(To(Q,L),Promise.reject(L))):(To(D,H),H)};return U[_f]=!0,U[dl]=N,U},y={_p:r,$id:e,$onAction:yf.bind(null,d),$patch:v,$reset:m,$subscribe($,N={}){const U=yf(f,$,N.detached,()=>z()),z=a.run(()=>Te(()=>r.state.value[e],D=>{(N.flush==="sync"?u:c)&&$({storeId:e,type:ws.direct,events:p},D)},Ir({},l,N)));return U},$dispose:b},O=Jt(y);r._s.set(e,O);const A=(r._a&&r._a.runWithContext||oy)(()=>r._e.run(()=>(a=xc()).run(()=>t({action:S}))));for(const $ in A){const N=A[$];if(Ze(N)&&!iy(N)||zn(N))s||(g&&ay(N)&&(Ze(N)?N.value=g[$]:zl(N,g[$])),r.state.value[e][$]=N);else if(typeof N=="function"){const U=S(N,$);A[$]=U,i.actions[$]=N}}return Ir(O,A),Ir(Ve(O),A),Object.defineProperty(O,"$state",{get:()=>r.state.value[e],set:$=>{v(N=>{Ir(N,$)})}}),r._p.forEach($=>{Ir(O,a.run(()=>$({store:O,app:r._a,pinia:r,options:i})))}),g&&s&&n.hydrate&&n.hydrate(O.$state,g),c=!0,u=!0,O}function cy(e,t,n){let r;const o=typeof t=="function";r=o?n:t;function s(a,i){const l=wv();return a=a||(l?Me(rm,null):null),a&&Ni(a),a=nm,a._s.has(e)||(o?sm(e,t,r,a):ly(e,r,a)),a._s.get(e)}return s.$id=e,s}function uy(e){const t=Ve(e),n={};for(const r in t){const o=t[r];o.effect?n[r]=P({get:()=>e[r],set(s){e[r]=s}}):(Ze(o)||zn(o))&&(n[r]=mn(e,r))}return n}const bt={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},Ot="update:modelValue",wr="change",Kn="input",Hc=["","default","small","large"];var am=typeof global=="object"&&global&&global.Object===Object&&global,fy=typeof self=="object"&&self&&self.Object===Object&&self,Tr=am||fy||Function("return this")(),qn=Tr.Symbol,im=Object.prototype,dy=im.hasOwnProperty,py=im.toString,os=qn?qn.toStringTag:void 0;function hy(e){var t=dy.call(e,os),n=e[os];try{e[os]=void 0;var r=!0}catch{}var o=py.call(e);return r&&(t?e[os]=n:delete e[os]),o}var my=Object.prototype,gy=my.toString;function vy(e){return gy.call(e)}var by="[object Null]",yy="[object Undefined]",wf=qn?qn.toStringTag:void 0;function vo(e){return e==null?e===void 0?yy:by:wf&&wf in Object(e)?hy(e):vy(e)}function co(e){return e!=null&&typeof e=="object"}var _y="[object Symbol]";function Mi(e){return typeof e=="symbol"||co(e)&&vo(e)==_y}function wy(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n0){if(++t>=Gy)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Jy(e){return function(){return e}}var ei=(function(){try{var e=yo(Object,"defineProperty");return e({},"",{}),e}catch{}})(),Zy=ei?function(e,t){return ei(e,"toString",{configurable:!0,enumerable:!1,value:Jy(t),writable:!0})}:cm,Qy=Xy(Zy);function e1(e,t,n,r){for(var o=e.length,s=n+(r?1:-1);r?s--:++s-1&&e%1==0&&e-1&&e%1==0&&e<=i1}function l1(e){return e!=null&&Wc(e.length)&&!um(e)}var c1=Object.prototype;function u1(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||c1;return e===n}function f1(e,t){for(var n=-1,r=Array(e);++n-1}function v2(e,t){var n=this.__data__,r=Fi(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}function Cr(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(i)?t>1?ym(i,t-1,n,r,o):bm(o,i):r||(o[o.length]=i)}return o}function k2(e){var t=e==null?0:e.length;return t?ym(e,1):[]}function R2(e){return Qy(a1(e,void 0,k2),e+"")}var N2=gm(Object.getPrototypeOf,Object),M2="[object Object]",F2=Function.prototype,D2=Object.prototype,_m=F2.toString,$2=D2.hasOwnProperty,V2=_m.call(Object);function B2(e){if(!co(e)||vo(e)!=M2)return!1;var t=N2(e);if(t===null)return!0;var n=$2.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&_m.call(n)==V2}function $r(){if(!arguments.length)return[];var e=arguments[0];return In(e)?e:[e]}function H2(e,t,n){return e===e&&(n!==void 0&&(e=e<=n?e:n),t!==void 0&&(e=e>=t?e:t)),e}function Yl(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=pl(n),n=n===n?n:0),t!==void 0&&(t=pl(t),t=t===t?t:0),H2(pl(e),t,n)}function U2(){this.__data__=new Cr,this.size=0}function j2(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function W2(e){return this.__data__.get(e)}function z2(e){return this.__data__.has(e)}var K2=200;function G2(e,t){var n=this.__data__;if(n instanceof Cr){var r=n.__data__;if(!Fs||r.lengthi))return!1;var c=s.get(e),u=s.get(t);if(c&&u)return c==t&&u==e;var f=-1,d=!0,p=n&d_?new ti:void 0;for(s.set(e,t),s.set(t,e);++fe===void 0,Ur=e=>typeof e=="boolean",at=e=>typeof e=="number",nw=e=>!e&&e!==0||ue(e)&&e.length===0||Ie(e)&&!Object.keys(e).length,no=e=>typeof Element>"u"?!1:e instanceof Element;const rw=e=>De(e)?!Number.isNaN(Number(e)):!1;const zf=e=>Object.keys(e);const ow="__epPropKey",he=e=>e,sw=e=>Ie(e)&&!!e.__epPropKey,Bi=(e,t)=>{if(!Ie(e)||sw(e))return e;const{values:n,required:r,default:o,type:s,validator:a}=e,i={type:s,required:!!r,validator:n||a?l=>{let c=!1,u=[];if(n&&(u=Array.from(n),He(e,"default")&&u.push(o),c||=u.includes(l)),a&&(c||=a(l)),!c&&u.length>0){const f=[...new Set(u)].map(d=>JSON.stringify(d)).join(", ");Sb(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${f}], got value ${JSON.stringify(l)}.`)}return c}:void 0,[ow]:!0};return He(e,"default")&&(i.default=o),i},rt=e=>Ds(Object.entries(e).map(([t,n])=>[t,Bi(n,t)]));var Cm=class extends Error{constructor(e){super(e),this.name="ElementPlusError"}};function ea(e,t){throw new Cm(`[${e}] ${t}`)}function xt(e,t){{const n=De(e)?new Cm(`[${e}] ${t}`):e;console.warn(n)}}const aw=["class","style"],iw=/^on[A-Z]/,lw=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,r=P(()=>(n?.value||[]).concat(aw)),o=ct();return o?P(()=>Ds(Object.entries(o.proxy?.$attrs).filter(([s])=>!r.value.includes(s)&&!(t&&iw.test(s))))):(xt("use-attrs","getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function"),P(()=>({})))};function Am(e,t){var n;const r=bn();return Rc(()=>{r.value=e()},{...t,flush:(n=t?.flush)!==null&&n!==void 0?n:"sync"}),xs(r)}function Hi(e,t){return bi()?(yi(e,t),!0):!1}const tt=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const cw=e=>e!=null,uw=Object.prototype.toString,fw=e=>uw.call(e)==="[object Object]";const Mr=()=>{},ni=dw();function dw(){var e,t,n;return tt&&!!(!((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function pw(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}function hw(e,t={}){let n,r,o=Mr;const s=l=>{clearTimeout(l),o(),o=Mr};let a;return l=>{const c=yn(e),u=yn(t.maxWait);return n&&s(n),c<=0||u!==void 0&&u<=0?(r&&(s(r),r=void 0),Promise.resolve(l())):new Promise((f,d)=>{o=t.rejectOnCancel?d:f,a=l,u&&!r&&(r=setTimeout(()=>{n&&s(n),r=void 0,f(a())},u)),n=setTimeout(()=>{r&&s(r),r=void 0,f(l())},c)})}}function $a(e){return Array.isArray(e)?e:[e]}function mw(e,t=200,n={}){return pw(hw(t,n),e)}function Kf(e,t,n={}){const{immediate:r=!0,immediateCallback:o=!1}=n,s=bn(!1);let a;function i(){a&&(clearTimeout(a),a=void 0)}function l(){s.value=!1,i()}function c(...u){o&&e(),i(),s.value=!0,a=setTimeout(()=>{s.value=!1,a=void 0,e(...u)},yn(t))}return r&&(s.value=!0,tt&&c()),Hi(l),{isPending:iv(s),start:c,stop:l}}function gw(e,t,n){return Te(e,t,{...n,immediate:!0})}const Ui=tt?window:void 0,oO=tt?window.document:void 0;function Wn(e){var t;const n=yn(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function gr(...e){const t=(r,o,s,a)=>(r.addEventListener(o,s,a),()=>r.removeEventListener(o,s,a)),n=P(()=>{const r=$a(yn(e[0])).filter(o=>o!=null);return r.every(o=>typeof o!="string")?r:void 0});return gw(()=>{var r,o;return[(r=(o=n.value)===null||o===void 0?void 0:o.map(s=>Wn(s)))!==null&&r!==void 0?r:[Ui].filter(s=>s!=null),$a(yn(n.value?e[1]:e[0])),$a(w(n.value?e[2]:e[1])),yn(n.value?e[3]:e[2])]},([r,o,s,a],i,l)=>{if(!r?.length||!o?.length||!s?.length)return;const c=fw(a)?{...a}:a,u=r.flatMap(f=>o.flatMap(d=>s.map(p=>t(f,d,p,c))));l(()=>{u.forEach(f=>f())})},{flush:"post"})}let Gf=!1;function vw(e,t,n={}){const{window:r=Ui,ignore:o=[],capture:s=!0,detectIframe:a=!1,controls:i=!1}=n;if(!r)return i?{stop:Mr,cancel:Mr,trigger:Mr}:Mr;if(ni&&!Gf){Gf=!0;const v={passive:!0};Array.from(r.document.body.children).forEach(m=>m.addEventListener("click",Mr,v)),r.document.documentElement.addEventListener("click",Mr,v)}let l=!0;const c=v=>yn(o).some(m=>{if(typeof m=="string")return Array.from(r.document.querySelectorAll(m)).some(b=>b===v.target||v.composedPath().includes(b));{const b=Wn(m);return b&&(v.target===b||v.composedPath().includes(b))}});function u(v){const m=yn(v);return m&&m.$.subTree.shapeFlag===16}function f(v,m){const b=yn(v),S=b.$.subTree&&b.$.subTree.children;return S==null||!Array.isArray(S)?!1:S.some(y=>y.el===m.target||m.composedPath().includes(y.el))}const d=v=>{const m=Wn(e);if(v.target!=null&&!(!(m instanceof Element)&&u(e)&&f(e,v))&&!(!m||m===v.target||v.composedPath().includes(m))){if("detail"in v&&v.detail===0&&(l=!c(v)),!l){l=!0;return}t(v)}};let p=!1;const g=[gr(r,"click",v=>{p||(p=!0,setTimeout(()=>{p=!1},0),d(v))},{passive:!0,capture:s}),gr(r,"pointerdown",v=>{const m=Wn(e);l=!c(v)&&!!(m&&!v.composedPath().includes(m))},{passive:!0}),a&&gr(r,"blur",v=>{setTimeout(()=>{const m=Wn(e);let b=r.document.activeElement;for(;b?.shadowRoot;)b=b.shadowRoot.activeElement;b?.tagName==="IFRAME"&&!m?.contains(r.document.activeElement)&&t(v)},0)},{passive:!0})].filter(Boolean),h=()=>g.forEach(v=>v());return i?{stop:h,cancel:()=>{l=!1},trigger:v=>{l=!0,d(v),l=!1}}:h}function bw(){const e=bn(!1),t=ct();return t&&pt(()=>{e.value=!0},t),e}function Om(e){const t=bw();return P(()=>(t.value,!!e()))}function yw(e,t,n={}){const{window:r=Ui,...o}=n;let s;const a=Om(()=>r&&"MutationObserver"in r),i=()=>{s&&(s.disconnect(),s=void 0)},l=Te(P(()=>{const f=$a(yn(e)).map(Wn).filter(cw);return new Set(f)}),f=>{i(),a.value&&f.size&&(s=new MutationObserver(t),f.forEach(d=>s.observe(d,o)))},{immediate:!0,flush:"post"}),c=()=>s?.takeRecords(),u=()=>{l(),i()};return Hi(u),{isSupported:a,stop:u,takeRecords:c}}function Cn(e,t,n={}){const{window:r=Ui,...o}=n;let s;const a=Om(()=>r&&"ResizeObserver"in r),i=()=>{s&&(s.disconnect(),s=void 0)},l=Te(P(()=>{const u=yn(e);return Array.isArray(u)?u.map(f=>Wn(f)):[Wn(u)]}),u=>{if(i(),a.value&&r){s=new ResizeObserver(t);for(const f of u)f&&s.observe(f,o)}},{immediate:!0,flush:"post"}),c=()=>{i(),l()};return Hi(c),{isSupported:a,stop:c}}function _w(){const e=bn(),t=re(0),n=P(()=>({minWidth:`${Math.max(t.value,11)}px`}));return Cn(e,()=>{t.value=e.value?.getBoundingClientRect().width??0}),{calculatorRef:e,calculatorWidth:t,inputStyle:n}}const xm=({from:e,replacement:t,scope:n,version:r,ref:o,type:s="API"},a)=>{Te(()=>w(a),i=>{i&&xt(n,`[${s}] ${e} is about to be deprecated in version ${r}, please use ${t} instead. For more detail, please visit: ${o} `)},{immediate:!0})},ww='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',Ew=e=>typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot,Yf=e=>typeof Element>"u"?!1:e instanceof Element,Sw=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,sO=e=>Array.from(e.querySelectorAll(ww)).filter(t=>$o(t)&&Sw(t)),$o=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}};const qc=(e,t)=>{if(!e||!e.focus)return;let n=!1;Yf(e)&&!$o(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),n=!0),e.focus(t),Yf(e)&&n&&e.removeAttribute("tabindex")};const Lm=()=>tt&&/firefox/i.test(window.navigator.userAgent),Tw=()=>tt&&/android/i.test(window.navigator.userAgent),Cw=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d");const Aw="utils/dom/style",Im=(e="")=>e.split(" ").filter(t=>!!t.trim()),Ow=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Zl=(e,t)=>{!e||!t.trim()||e.classList.add(...Im(t))},$s=(e,t)=>{!e||!t.trim()||e.classList.remove(...Im(t))},Oo=(e,t)=>{if(!tt||!e||!t||Ew(e))return"";let n=Rt(t);n==="float"&&(n="cssFloat");try{const r=e.style[n];if(r)return r;const o=document.defaultView?.getComputedStyle(e,"");return o?o[n]:""}catch{return e.style[n]}};function po(e,t="px"){if(!e&&e!==0)return"";if(at(e)||rw(e))return`${e}${t}`;if(De(e))return e;xt(Aw,"binding value must be a string or number")}const xw=(e,t,n,r)=>{const o={offsetX:0,offsetY:0},s=re(!1),a=(d,p)=>{if(e.value){const{offsetX:g,offsetY:h}=o,v=e.value.getBoundingClientRect(),m=Math.max(v.left,0),b=Math.max(v.top,0),S=v.width,y=v.height,O=document.documentElement.clientWidth,M=document.documentElement.clientHeight,A=-m+g,$=-b+h,N=O-m-S+g,U=M-b-(y{const p=d.clientX,g=d.clientY,{offsetX:h,offsetY:v}=o,m=S=>{s.value||(s.value=!0),a(h+S.clientX-p,v+S.clientY-g)},b=()=>{s.value=!1,document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",b)};document.addEventListener("mousemove",m),document.addEventListener("mouseup",b)},l=()=>{t.value&&e.value&&(t.value.addEventListener("mousedown",i),window.addEventListener("resize",f))},c=()=>{t.value&&e.value&&(t.value.removeEventListener("mousedown",i),window.removeEventListener("resize",f))},u=()=>{o.offsetX=0,o.offsetY=0,e.value&&(e.value.style.transform="")},f=()=>{const{offsetX:d,offsetY:p}=o;a(d,p)};return pt(()=>{Rc(()=>{n.value?l():c()})}),Lt(()=>{c()}),{isDragging:s,resetPosition:u,updatePosition:f}};var Pm={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value",alphaDescription:"alpha {alpha}, current color is {color}",hueLabel:"pick hue value",hueDescription:"hue {hue}, current color is {color}",svLabel:"pick saturation and brightness value",svDescription:"saturation {saturation}, brightness {brightness}, current color is {color}",predefineDescription:"select {value} as the color"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum",selectAllLabel:"Select all rows",selectRowLabel:"Select this row",expandRowLabel:"Expand this row",collapseRowLabel:"Collapse this row",sortLabel:"Sort by {column}",filterLabel:"Filter by {column}"},tag:{close:"Close this tag"},tour:{next:"Next",previous:"Previous",finish:"Finish",close:"Close this dialog"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"},inputOTP:{groupLabel:"OTP Input",defaultLabel:"Please enter OTP character {index}"}}};const Lw=e=>(t,n)=>Iw(t,n,w(e)),Iw=(e,t,n)=>Kt(n,e,e).replace(/\{(\w+)\}/g,(r,o)=>`${t?.[o]??`{${o}}`}`),Pw=e=>({lang:P(()=>w(e).name),locale:Ze(e)?e:re(e),t:Lw(e)}),km=Symbol("localeContextKey"),ta=e=>{const t=e||Me(km,re());return Pw(P(()=>t.value||Pm))},kw="is-",Jr=(e,t,n,r,o)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),r&&(s+=`__${r}`),o&&(s+=`--${o}`),s},Rm=Symbol("namespaceContextKey"),Xc=e=>{const t=e||(ct()?Me(Rm,re("el")):re("el"));return P(()=>w(t)||"el")},nt=(e,t)=>{const n=Xc(t);return{namespace:n,b:(h="")=>Jr(n.value,e,h,"",""),e:h=>h?Jr(n.value,e,"",h,""):"",m:h=>h?Jr(n.value,e,"","",h):"",be:(h,v)=>h&&v?Jr(n.value,e,h,v,""):"",em:(h,v)=>h&&v?Jr(n.value,e,"",h,v):"",bm:(h,v)=>h&&v?Jr(n.value,e,h,"",v):"",bem:(h,v,m)=>h&&v&&m?Jr(n.value,e,h,v,m):"",is:(h,...v)=>{const m=v.length>=1?v[0]:!0;return h&&m?`${kw}${h}`:""},cssVar:h=>{const v={};for(const m in h)h[m]&&(v[`--${n.value}-${m}`]=h[m]);return v},cssVarName:h=>`--${n.value}-${h}`,cssVarBlock:h=>{const v={};for(const m in h)h[m]&&(v[`--${n.value}-${e}-${m}`]=h[m]);return v},cssVarBlockName:h=>`--${n.value}-${e}-${h}`}};const Rw=e=>tt?window.requestAnimationFrame(e):setTimeout(e,16),qf=e=>tt?window.cancelAnimationFrame(e):clearTimeout(e);let _a;const Nw=e=>{if(!tt)return 0;if(_a!==void 0)return _a;const t=document.createElement("div");t.className=`${e}-scrollbar__wrap`,t.style.visibility="hidden",t.style.width="100px",t.style.position="absolute",t.style.top="-9999px",document.body.appendChild(t);const n=t.offsetWidth;t.style.overflow="scroll";const r=document.createElement("div");r.style.width="100%",t.appendChild(r);const o=r.offsetWidth;return t.parentNode?.removeChild(t),_a=n-o,_a};function Mw(e,t){if(!tt)return;if(!t){e.scrollTop=0;return}const n=[];let r=t.offsetParent;for(;r!==null&&e!==r&&e.contains(r);)n.push(r),r=r.offsetParent;const o=t.offsetTop+n.reduce((l,c)=>l+c.offsetTop,0),s=o+t.offsetHeight,a=e.scrollTop,i=a+e.clientHeight;oi&&(e.scrollTop=s-e.clientHeight)}const Fw=(e,t={})=>{Ze(e)||ea("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||nt("popup"),r=P(()=>n.bm("parent","hidden"));let o=0,s=!1,a="0",i=!1;const l=()=>{i||(i=!0,setTimeout(()=>{typeof document>"u"||s&&document&&(document.body.style.width=a,$s(document.body,r.value))},200))};Te(e,c=>{if(!c){l();return}i=!1,s=!Ow(document.body,r.value),s&&(a=document.body.style.width,Zl(document.body,r.value)),o=Nw(n.namespace.value);const u=document.documentElement.clientHeight0&&(u||f==="scroll")&&s&&(document.body.style.width=`calc(100% - ${o}px)`)}),yi(()=>l())},sr=(e,t,{checkForDefaultPrevented:n=!0}={})=>o=>{const s=e?.(o);if(n===!1||!s)return t?.(o)};const Vo=e=>{if(e.code&&e.code!=="Unidentified")return e.code;const t=Nm(e);return t?Object.values(bt).includes(t)?t:t===" "?bt.space:"":""},Nm=e=>{let t=e.key&&e.key!=="Unidentified"?e.key:"";if(!t&&e.type==="keyup"&&Tw()){const n=e.target;t=n.value.charAt(n.selectionStart-1)}return t},Dw=Bi({type:he(Boolean),default:null}),$w=Bi({type:he(Function)}),Vw=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,r=[t],o={[e]:Dw,[n]:$w};return{useModelToggle:({indicator:a,toggleReason:i,shouldHideWhenRouteChanges:l,shouldProceed:c,onShow:u,onHide:f})=>{const d=ct(),{emit:p}=d,g=d.props,h=P(()=>ge(g[n])),v=P(()=>g[e]===null),m=A=>{a.value!==!0&&(a.value=!0,i&&(i.value=A),ge(u)&&u(A))},b=A=>{a.value!==!1&&(a.value=!1,i&&(i.value=A),ge(f)&&f(A))},S=A=>{if(g.disabled===!0||ge(c)&&!c())return;const $=h.value&&tt;$&&p(t,!0),(v.value||!$)&&m(A)},y=A=>{if(g.disabled===!0||!tt)return;const $=h.value&&tt;$&&p(t,!1),(v.value||!$)&&b(A)},O=A=>{Ur(A)&&(g.disabled&&A?h.value&&p(t,!1):a.value!==A&&(A?m():b()))},M=()=>{a.value?y():S()};return Te(()=>g[e],O),l&&d.appContext.config.globalProperties.$route!==void 0&&Te(()=>({...d.proxy.$route}),()=>{l.value&&a.value&&y()}),pt(()=>{O(g[e])}),{hide:y,show:S,toggle:M,hasUpdateHandler:h}},useModelToggleProps:o,useModelToggleEmits:r}},Mm=e=>{const t=ct();return P(()=>t?.proxy?.$props?.[e])};var Yt="top",En="bottom",Sn="right",qt="left",Jc="auto",na=[Yt,En,Sn,qt],Bo="start",Vs="end",Bw="clippingParents",Fm="viewport",ss="popper",Hw="reference",Xf=na.reduce(function(e,t){return e.concat([t+"-"+Bo,t+"-"+Vs])},[]),ji=[].concat(na,[Jc]).reduce(function(e,t){return e.concat([t,t+"-"+Bo,t+"-"+Vs])},[]),Uw="beforeRead",jw="read",Ww="afterRead",zw="beforeMain",Kw="main",Gw="afterMain",Yw="beforeWrite",qw="write",Xw="afterWrite",Jw=[Uw,jw,Ww,zw,Kw,Gw,Yw,qw,Xw];function Xn(e){return e?(e.nodeName||"").toLowerCase():null}function sn(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function ho(e){var t=sn(e).Element;return e instanceof t||e instanceof Element}function _n(e){var t=sn(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Zc(e){if(typeof ShadowRoot>"u")return!1;var t=sn(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function Zw(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var r=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!_n(s)||!Xn(s)||(Object.assign(s.style,r),Object.keys(o).forEach(function(a){var i=o[a];i===!1?s.removeAttribute(a):s.setAttribute(a,i===!0?"":i)}))})}function Qw(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(r){var o=t.elements[r],s=t.attributes[r]||{},a=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:n[r]),i=a.reduce(function(l,c){return l[c]="",l},{});!_n(o)||!Xn(o)||(Object.assign(o.style,i),Object.keys(s).forEach(function(l){o.removeAttribute(l)}))})}}var Dm={name:"applyStyles",enabled:!0,phase:"write",fn:Zw,effect:Qw,requires:["computeStyles"]};function Gn(e){return e.split("-")[0]}var lo=Math.max,ri=Math.min,Ho=Math.round;function Ql(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function $m(){return!/^((?!chrome|android).)*safari/i.test(Ql())}function Uo(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var r=e.getBoundingClientRect(),o=1,s=1;t&&_n(e)&&(o=e.offsetWidth>0&&Ho(r.width)/e.offsetWidth||1,s=e.offsetHeight>0&&Ho(r.height)/e.offsetHeight||1);var a=ho(e)?sn(e):window,i=a.visualViewport,l=!$m()&&n,c=(r.left+(l&&i?i.offsetLeft:0))/o,u=(r.top+(l&&i?i.offsetTop:0))/s,f=r.width/o,d=r.height/s;return{width:f,height:d,top:u,right:c+f,bottom:u+d,left:c,x:c,y:u}}function Qc(e){var t=Uo(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function Vm(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Zc(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function Er(e){return sn(e).getComputedStyle(e)}function e3(e){return["table","td","th"].indexOf(Xn(e))>=0}function jr(e){return((ho(e)?e.ownerDocument:e.document)||window.document).documentElement}function Wi(e){return Xn(e)==="html"?e:e.assignedSlot||e.parentNode||(Zc(e)?e.host:null)||jr(e)}function Jf(e){return!_n(e)||Er(e).position==="fixed"?null:e.offsetParent}function t3(e){var t=/firefox/i.test(Ql()),n=/Trident/i.test(Ql());if(n&&_n(e)){var r=Er(e);if(r.position==="fixed")return null}var o=Wi(e);for(Zc(o)&&(o=o.host);_n(o)&&["html","body"].indexOf(Xn(o))<0;){var s=Er(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function ra(e){for(var t=sn(e),n=Jf(e);n&&e3(n)&&Er(n).position==="static";)n=Jf(n);return n&&(Xn(n)==="html"||Xn(n)==="body"&&Er(n).position==="static")?t:n||t3(e)||t}function eu(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Ss(e,t,n){return lo(e,ri(t,n))}function n3(e,t,n){var r=Ss(e,t,n);return r>n?n:r}function Bm(){return{top:0,right:0,bottom:0,left:0}}function Hm(e){return Object.assign({},Bm(),e)}function Um(e,t){return t.reduce(function(n,r){return n[r]=e,n},{})}var r3=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,Hm(typeof e!="number"?e:Um(e,na))};function o3(e){var t,n=e.state,r=e.name,o=e.options,s=n.elements.arrow,a=n.modifiersData.popperOffsets,i=Gn(n.placement),l=eu(i),c=[qt,Sn].indexOf(i)>=0,u=c?"height":"width";if(!(!s||!a)){var f=r3(o.padding,n),d=Qc(s),p=l==="y"?Yt:qt,g=l==="y"?En:Sn,h=n.rects.reference[u]+n.rects.reference[l]-a[l]-n.rects.popper[u],v=a[l]-n.rects.reference[l],m=ra(s),b=m?l==="y"?m.clientHeight||0:m.clientWidth||0:0,S=h/2-v/2,y=f[p],O=b-d[u]-f[g],M=b/2-d[u]/2+S,A=Ss(y,M,O),$=l;n.modifiersData[r]=(t={},t[$]=A,t.centerOffset=A-M,t)}}function s3(e){var t=e.state,n=e.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||Vm(t.elements.popper,o)&&(t.elements.arrow=o))}var a3={name:"arrow",enabled:!0,phase:"main",fn:o3,effect:s3,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function jo(e){return e.split("-")[1]}var i3={top:"auto",right:"auto",bottom:"auto",left:"auto"};function l3(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:Ho(n*o)/o||0,y:Ho(r*o)/o||0}}function Zf(e){var t,n=e.popper,r=e.popperRect,o=e.placement,s=e.variation,a=e.offsets,i=e.position,l=e.gpuAcceleration,c=e.adaptive,u=e.roundOffsets,f=e.isFixed,d=a.x,p=d===void 0?0:d,g=a.y,h=g===void 0?0:g,v=typeof u=="function"?u({x:p,y:h}):{x:p,y:h};p=v.x,h=v.y;var m=a.hasOwnProperty("x"),b=a.hasOwnProperty("y"),S=qt,y=Yt,O=window;if(c){var M=ra(n),A="clientHeight",$="clientWidth";if(M===sn(n)&&(M=jr(n),Er(M).position!=="static"&&i==="absolute"&&(A="scrollHeight",$="scrollWidth")),M=M,o===Yt||(o===qt||o===Sn)&&s===Vs){y=En;var N=f&&M===O&&O.visualViewport?O.visualViewport.height:M[A];h-=N-r.height,h*=l?1:-1}if(o===qt||(o===Yt||o===En)&&s===Vs){S=Sn;var U=f&&M===O&&O.visualViewport?O.visualViewport.width:M[$];p-=U-r.width,p*=l?1:-1}}var z=Object.assign({position:i},c&&i3),D=u===!0?l3({x:p,y:h},sn(n)):{x:p,y:h};if(p=D.x,h=D.y,l){var Q;return Object.assign({},z,(Q={},Q[y]=b?"0":"",Q[S]=m?"0":"",Q.transform=(O.devicePixelRatio||1)<=1?"translate("+p+"px, "+h+"px)":"translate3d("+p+"px, "+h+"px, 0)",Q))}return Object.assign({},z,(t={},t[y]=b?h+"px":"",t[S]=m?p+"px":"",t.transform="",t))}function c3(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=r===void 0?!0:r,s=n.adaptive,a=s===void 0?!0:s,i=n.roundOffsets,l=i===void 0?!0:i,c={placement:Gn(t.placement),variation:jo(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Zf(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Zf(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var jm={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:c3,data:{}},wa={passive:!0};function u3(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,s=o===void 0?!0:o,a=r.resize,i=a===void 0?!0:a,l=sn(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&c.forEach(function(u){u.addEventListener("scroll",n.update,wa)}),i&&l.addEventListener("resize",n.update,wa),function(){s&&c.forEach(function(u){u.removeEventListener("scroll",n.update,wa)}),i&&l.removeEventListener("resize",n.update,wa)}}var Wm={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:u3,data:{}},f3={left:"right",right:"left",bottom:"top",top:"bottom"};function Va(e){return e.replace(/left|right|bottom|top/g,function(t){return f3[t]})}var d3={start:"end",end:"start"};function Qf(e){return e.replace(/start|end/g,function(t){return d3[t]})}function tu(e){var t=sn(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}}function nu(e){return Uo(jr(e)).left+tu(e).scrollLeft}function p3(e,t){var n=sn(e),r=jr(e),o=n.visualViewport,s=r.clientWidth,a=r.clientHeight,i=0,l=0;if(o){s=o.width,a=o.height;var c=$m();(c||!c&&t==="fixed")&&(i=o.offsetLeft,l=o.offsetTop)}return{width:s,height:a,x:i+nu(e),y:l}}function h3(e){var t,n=jr(e),r=tu(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=lo(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),a=lo(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),i=-r.scrollLeft+nu(e),l=-r.scrollTop;return Er(o||n).direction==="rtl"&&(i+=lo(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:a,x:i,y:l}}function ru(e){var t=Er(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function zm(e){return["html","body","#document"].indexOf(Xn(e))>=0?e.ownerDocument.body:_n(e)&&ru(e)?e:zm(Wi(e))}function Ts(e,t){var n;t===void 0&&(t=[]);var r=zm(e),o=r===((n=e.ownerDocument)==null?void 0:n.body),s=sn(r),a=o?[s].concat(s.visualViewport||[],ru(r)?r:[]):r,i=t.concat(a);return o?i:i.concat(Ts(Wi(a)))}function ec(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function m3(e,t){var n=Uo(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function ed(e,t,n){return t===Fm?ec(p3(e,n)):ho(t)?m3(t,n):ec(h3(jr(e)))}function g3(e){var t=Ts(Wi(e)),n=["absolute","fixed"].indexOf(Er(e).position)>=0,r=n&&_n(e)?ra(e):e;return ho(r)?t.filter(function(o){return ho(o)&&Vm(o,r)&&Xn(o)!=="body"}):[]}function v3(e,t,n,r){var o=t==="clippingParents"?g3(e):[].concat(t),s=[].concat(o,[n]),a=s[0],i=s.reduce(function(l,c){var u=ed(e,c,r);return l.top=lo(u.top,l.top),l.right=ri(u.right,l.right),l.bottom=ri(u.bottom,l.bottom),l.left=lo(u.left,l.left),l},ed(e,a,r));return i.width=i.right-i.left,i.height=i.bottom-i.top,i.x=i.left,i.y=i.top,i}function Km(e){var t=e.reference,n=e.element,r=e.placement,o=r?Gn(r):null,s=r?jo(r):null,a=t.x+t.width/2-n.width/2,i=t.y+t.height/2-n.height/2,l;switch(o){case Yt:l={x:a,y:t.y-n.height};break;case En:l={x:a,y:t.y+t.height};break;case Sn:l={x:t.x+t.width,y:i};break;case qt:l={x:t.x-n.width,y:i};break;default:l={x:t.x,y:t.y}}var c=o?eu(o):null;if(c!=null){var u=c==="y"?"height":"width";switch(s){case Bo:l[c]=l[c]-(t[u]/2-n[u]/2);break;case Vs:l[c]=l[c]+(t[u]/2-n[u]/2);break}}return l}function Bs(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=r===void 0?e.placement:r,s=n.strategy,a=s===void 0?e.strategy:s,i=n.boundary,l=i===void 0?Bw:i,c=n.rootBoundary,u=c===void 0?Fm:c,f=n.elementContext,d=f===void 0?ss:f,p=n.altBoundary,g=p===void 0?!1:p,h=n.padding,v=h===void 0?0:h,m=Hm(typeof v!="number"?v:Um(v,na)),b=d===ss?Hw:ss,S=e.rects.popper,y=e.elements[g?b:d],O=v3(ho(y)?y:y.contextElement||jr(e.elements.popper),l,u,a),M=Uo(e.elements.reference),A=Km({reference:M,element:S,placement:o}),$=ec(Object.assign({},S,A)),N=d===ss?$:M,U={top:O.top-N.top+m.top,bottom:N.bottom-O.bottom+m.bottom,left:O.left-N.left+m.left,right:N.right-O.right+m.right},z=e.modifiersData.offset;if(d===ss&&z){var D=z[o];Object.keys(U).forEach(function(Q){var Z=[Sn,En].indexOf(Q)>=0?1:-1,G=[Yt,En].indexOf(Q)>=0?"y":"x";U[Q]+=D[G]*Z})}return U}function b3(e,t){t===void 0&&(t={});var n=t,r=n.placement,o=n.boundary,s=n.rootBoundary,a=n.padding,i=n.flipVariations,l=n.allowedAutoPlacements,c=l===void 0?ji:l,u=jo(r),f=u?i?Xf:Xf.filter(function(g){return jo(g)===u}):na,d=f.filter(function(g){return c.indexOf(g)>=0});d.length===0&&(d=f);var p=d.reduce(function(g,h){return g[h]=Bs(e,{placement:h,boundary:o,rootBoundary:s,padding:a})[Gn(h)],g},{});return Object.keys(p).sort(function(g,h){return p[g]-p[h]})}function y3(e){if(Gn(e)===Jc)return[];var t=Va(e);return[Qf(e),t,Qf(t)]}function _3(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,a=n.altAxis,i=a===void 0?!0:a,l=n.fallbackPlacements,c=n.padding,u=n.boundary,f=n.rootBoundary,d=n.altBoundary,p=n.flipVariations,g=p===void 0?!0:p,h=n.allowedAutoPlacements,v=t.options.placement,m=Gn(v),b=m===v,S=l||(b||!g?[Va(v)]:y3(v)),y=[v].concat(S).reduce(function(_e,Se){return _e.concat(Gn(Se)===Jc?b3(t,{placement:Se,boundary:u,rootBoundary:f,padding:c,flipVariations:g,allowedAutoPlacements:h}):Se)},[]),O=t.rects.reference,M=t.rects.popper,A=new Map,$=!0,N=y[0],U=0;U=0,G=Z?"width":"height",H=Bs(t,{placement:z,boundary:u,rootBoundary:f,altBoundary:d,padding:c}),L=Z?Q?Sn:qt:Q?En:Yt;O[G]>M[G]&&(L=Va(L));var F=Va(L),J=[];if(s&&J.push(H[D]<=0),i&&J.push(H[L]<=0,H[F]<=0),J.every(function(_e){return _e})){N=z,$=!1;break}A.set(z,J)}if($)for(var te=g?3:1,ve=function(_e){var Se=y.find(function(Fe){var j=A.get(Fe);if(j)return j.slice(0,_e).every(function(oe){return oe})});if(Se)return N=Se,"break"},le=te;le>0;le--){var Pe=ve(le);if(Pe==="break")break}t.placement!==N&&(t.modifiersData[r]._skip=!0,t.placement=N,t.reset=!0)}}var w3={name:"flip",enabled:!0,phase:"main",fn:_3,requiresIfExists:["offset"],data:{_skip:!1}};function td(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function nd(e){return[Yt,Sn,En,qt].some(function(t){return e[t]>=0})}function E3(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,a=Bs(t,{elementContext:"reference"}),i=Bs(t,{altBoundary:!0}),l=td(a,r),c=td(i,o,s),u=nd(l),f=nd(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":f})}var S3={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:E3};function T3(e,t,n){var r=Gn(e),o=[qt,Yt].indexOf(r)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,a=s[0],i=s[1];return a=a||0,i=(i||0)*o,[qt,Sn].indexOf(r)>=0?{x:i,y:a}:{x:a,y:i}}function C3(e){var t=e.state,n=e.options,r=e.name,o=n.offset,s=o===void 0?[0,0]:o,a=ji.reduce(function(u,f){return u[f]=T3(f,t.rects,s),u},{}),i=a[t.placement],l=i.x,c=i.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}var A3={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:C3};function O3(e){var t=e.state,n=e.name;t.modifiersData[n]=Km({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}var Gm={name:"popperOffsets",enabled:!0,phase:"read",fn:O3,data:{}};function x3(e){return e==="x"?"y":"x"}function L3(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=o===void 0?!0:o,a=n.altAxis,i=a===void 0?!1:a,l=n.boundary,c=n.rootBoundary,u=n.altBoundary,f=n.padding,d=n.tether,p=d===void 0?!0:d,g=n.tetherOffset,h=g===void 0?0:g,v=Bs(t,{boundary:l,rootBoundary:c,padding:f,altBoundary:u}),m=Gn(t.placement),b=jo(t.placement),S=!b,y=eu(m),O=x3(y),M=t.modifiersData.popperOffsets,A=t.rects.reference,$=t.rects.popper,N=typeof h=="function"?h(Object.assign({},t.rects,{placement:t.placement})):h,U=typeof N=="number"?{mainAxis:N,altAxis:N}:Object.assign({mainAxis:0,altAxis:0},N),z=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,D={x:0,y:0};if(M){if(s){var Q,Z=y==="y"?Yt:qt,G=y==="y"?En:Sn,H=y==="y"?"height":"width",L=M[y],F=L+v[Z],J=L-v[G],te=p?-$[H]/2:0,ve=b===Bo?A[H]:$[H],le=b===Bo?-$[H]:-A[H],Pe=t.elements.arrow,_e=p&&Pe?Qc(Pe):{width:0,height:0},Se=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:Bm(),Fe=Se[Z],j=Se[G],oe=Ss(0,A[H],_e[H]),ee=S?A[H]/2-te-oe-Fe-U.mainAxis:ve-oe-Fe-U.mainAxis,ne=S?-A[H]/2+te+oe+j+U.mainAxis:le+oe+j+U.mainAxis,Ae=t.elements.arrow&&ra(t.elements.arrow),T=Ae?y==="y"?Ae.clientTop||0:Ae.clientLeft||0:0,C=(Q=z?.[y])!=null?Q:0,k=L+ee-C-T,Y=L+ne-C,q=Ss(p?ri(F,k):F,L,p?lo(J,Y):J);M[y]=q,D[y]=q-L}if(i){var K,_=y==="x"?Yt:qt,E=y==="x"?En:Sn,x=M[O],R=O==="y"?"height":"width",se=x+v[_],X=x-v[E],I=[Yt,qt].indexOf(m)!==-1,B=(K=z?.[O])!=null?K:0,fe=I?se:x-A[R]-$[R]-B+U.altAxis,we=I?x+A[R]+$[R]-B-U.altAxis:X,Re=p&&I?n3(fe,x,we):Ss(p?fe:se,x,p?we:X);M[O]=Re,D[O]=Re-x}t.modifiersData[r]=D}}var I3={name:"preventOverflow",enabled:!0,phase:"main",fn:L3,requiresIfExists:["offset"]};function P3(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function k3(e){return e===sn(e)||!_n(e)?tu(e):P3(e)}function R3(e){var t=e.getBoundingClientRect(),n=Ho(t.width)/e.offsetWidth||1,r=Ho(t.height)/e.offsetHeight||1;return n!==1||r!==1}function N3(e,t,n){n===void 0&&(n=!1);var r=_n(t),o=_n(t)&&R3(t),s=jr(t),a=Uo(e,o,n),i={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(r||!r&&!n)&&((Xn(t)!=="body"||ru(s))&&(i=k3(t)),_n(t)?(l=Uo(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):s&&(l.x=nu(s))),{x:a.left+i.scrollLeft-l.x,y:a.top+i.scrollTop-l.y,width:a.width,height:a.height}}function M3(e){var t=new Map,n=new Set,r=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var a=[].concat(s.requires||[],s.requiresIfExists||[]);a.forEach(function(i){if(!n.has(i)){var l=t.get(i);l&&o(l)}}),r.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),r}function F3(e){var t=M3(e);return Jw.reduce(function(n,r){return n.concat(t.filter(function(o){return o.phase===r}))},[])}function D3(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function $3(e){var t=e.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(t).map(function(n){return t[n]})}var rd={placement:"bottom",modifiers:[],strategy:"absolute"};function od(){for(var e=arguments.length,t=new Array(e),n=0;n{const r={name:"updateState",enabled:!0,phase:"write",fn:({state:l})=>{const c=j3(l);Object.assign(a.value,c)},requires:["computeStyles"]},o=P(()=>{const{onFirstUpdate:l,placement:c,strategy:u,modifiers:f}=w(n);return{onFirstUpdate:l,placement:c||"bottom",strategy:u||"absolute",modifiers:[...f||[],r,{name:"applyStyles",enabled:!1}]}}),s=bn(),a=re({styles:{popper:{position:w(o).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return Te(o,l=>{const c=w(s);c&&c.setOptions(l)},{deep:!0}),Te([e,t],([l,c])=>{i(),!(!l||!c)&&(s.value=H3(l,c,w(o)))}),Lt(()=>{i()}),{state:P(()=>({...w(s)?.state||{}})),styles:P(()=>w(a).styles),attributes:P(()=>w(a).attributes),update:()=>w(s)?.update(),forceUpdate:()=>w(s)?.forceUpdate(),instanceRef:P(()=>w(s))}};function j3(e){const t=Object.keys(e.elements);return{styles:Ds(t.map(n=>[n,e.styles[n]||{}])),attributes:Ds(t.map(n=>[n,e.attributes[n]]))}}const Ym=e=>{if(!e)return{onClick:qe,onMousedown:qe,onMouseup:qe};let t=!1,n=!1;return{onClick:a=>{t&&n&&e(a),t=n=!1},onMousedown:a=>{t=a.target===a.currentTarget},onMouseup:a=>{n=a.target===a.currentTarget}}};function sd(){let e;const t=(r,o)=>{n(),e=globalThis.setTimeout(r,o)},n=()=>{e!==void 0&&(globalThis.clearTimeout(e),e=void 0)};return Hi(()=>n()),{registerTimeout:t,cancelTimeout:n}}const tc={prefix:Math.floor(Math.random()*1e4),current:0},W3=Symbol("elIdInjection"),qm=()=>ct()?Me(W3,tc):tc,Wo=e=>{const t=qm();!tt&&t===tc&&xt("IdInjection",`Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed @@ -31,4 +31,4 @@ e w`,count:"{n} items",collapse:"Collapse",expand:"Expand",copy:"Copy",copied:"TOML copied to clipboard",copyFail:"Copy failed. Please select the text and copy it manually"},toc:{title:"Contents",expand:"Expand contents",collapse:"Collapse contents"},start:"Start Training",stop:"Stop Training",railStart:`Start Train`,railStop:`Stop Train`,railSubmitting:`Wait -…`,startHint:"Click Start Training when the configuration is complete. Run status and training logs will appear on the right.",intro:"Fill in model, dataset, and training parameters in order. Parameter conversion, conflict checks, and backend training constraints run before submission.",panelHint:"The right side shows the TOML that will actually be submitted. Validate parameters first, then start the background training task.",toolbar:{presets:"Presets",import:"Import Config",save:"Save Parameters",history:"History",export:"Export TOML",reset:"Reset"},loadingSchema:"Loading training schema",loadingSchemaHint:"Checking cache and backend version…",schemaError:"Failed to load schema",schemaLoadFail:"Failed to load schema",retry:"Retry",startedTask:"Task started",openLog:"Open Training Log",viewTasks:"View Tasks",validate:"Validate Parameters",validatePassed:"Parameters validated",submitting:"Submitting…",gpu:{sectionTitle:"GPU Settings",fieldDescription:"Select the GPUs used for training"},historyDialog:{title:"Parameter History",unnamed:"Unnamed config",use:"Use",delete:"Delete",empty:"No parameter history",saved:"Parameters saved to browser history"},presetsDialog:{title:"Training Presets",apply:"Apply",empty:"No presets for this training type",loadFail:"Failed to load presets",applied:"Preset applied: {name}"},importMsg:{imported:"Config imported",importedRedirect:"Config imported on the target page",reject:"The config does not apply to this page",mismatchTitle:"Training Type Mismatch",mismatchConfirm:"This config belongs to another training page. Jump there?",jump:"Jump and Import",cancel:"Cancel",fail:"Failed to import config"},exportFail:"Failed to export config",submitConfirm:{message:"Training will occupy the GPU and create a background task. Start now?",title:"Start Training",confirm:"Start Training",cancel:"Cancel",started:"Training task started: {id}",fail:"Failed to submit training",preflightFail:"Anima Fast preflight checks failed"},resetDialog:{title:"Reset Parameters",cancel:"Cancel"},diagnostics:{dadaptScheduler:"DAdaptation-family optimizers work best with lr_scheduler set to constant",prodigyLr:"Prodigy works best with unet_lr and text_encoder_lr set to 1",oftSdxl:"OFT is currently only available for SDXL",conflict:"Parameters {left} and {right} conflict; enable only one of them"},schemas:{"sd3-lora":{title:"Anima LoRA",area:"Anima DiT · Kohya-ss · LoRA"},"anima-lora-fast":{title:"Anima LoRA Fast",area:"Anima DiT · Anima Fast · LoRA"},"anima-finetune":{title:"Anima Full Fine-tune",area:"Anima DiT · Kohya-ss · Full Fine-tune"},"lora-master":{title:"SD / SDXL LoRA",area:"SD / SDXL · Kohya-ss · LoRA"},dreambooth:{title:"SD / SDXL Full Fine-tune",area:"SD / SDXL · Kohya-ss · Full Fine-tune"},"flux-lora":{title:"Flux LoRA",area:"Flux · Kohya-ss · LoRA"},"lumina2-lora":{title:"Lumina 2 LoRA",area:"Lumina 2 · Kohya-ss · LoRA"}}},dataset:{title:"Dataset",switchAria:"Dataset sub-pages",tab:{editor:"Tag Editor",tagger:"Model Tagging"}},tasks:{title:"Tasks",refresh:"Refresh",tabs:{running:"Running",recent:"Recent"},status:{created:"Created",running:"Running",finished:"Finished",terminated:"Terminated",failed:"Failed"},loadError:"Failed to load tasks",retry:"Retry",loading:"Loading task list…",emptyTitle:"No training tasks yet",emptyDesc:"Submit a task from the Training page and its status and log entries will appear here.",filterAria:"Task filter",tabEmpty:"No tasks",defaultName:"Training Task",noDetail:"No task description",listLoadFail:"Failed to load the task list",terminate:{confirm:"Stop task {id}?",title:"Terminate Training",confirmButton:"Stop Task",cancel:"Cancel",success:"Task stopped",fail:"Failed to stop the task"},detail:{stop:"Stop Task",stopping:"Stopping…",viewLog:"View Log",tensorboard:"TensorBoard",empty:"Select a task on the left to view details",taskId:"Task ID",config:"Training Config",returncode:"Return Code",overview:"Overview",previewTitle:"Training previews",previewEmpty:"No training previews yet",previewDisabled:"Preview sampling is disabled for this task, so no images will be generated. Enable it in the training form's preview settings.",lossTitle:"Loss curves",lossEmpty:"No loss data yet",epochLabel:"Epoch {n}",stepLabel:"Step {n}",stepProgress:"Step {step}/{total}",epochProgress:"Epoch {epoch}/{total}"},log:{title:"Training Log",expand:"Expand",collapse:"Collapse",errorBadge:"Errors found in the log, expand to inspect",follow:"Follow Tail",jumpToError:"Jump to Error",copy:"Copy",copied:"Log copied to clipboard",copyFail:"Copy failed. Please select the text and copy it manually",download:"Download",count:"{n} lines",empty:"No log output yet",unavailable:"This task is not in the current server session; no embedded log available."}},settings:{title:"Settings",subtitle:"Training UI, engines, and about",nav:{ui:"UI",engines:"Engines",about:"About",changelog:"Changelog"},ui:{language:"Language",theme:"Theme",themeLight:"Light",themeDark:"Dark",tensorboardUrl:"TensorBoard URL",tensorboardPlaceholder:"Leave empty to use the default proxy",tensorboardHint:"You can provide a standalone TensorBoard address; when empty, access continues through the same-origin backend proxy.",save:"Save",reset:"Reset",saved:"Settings saved",resetDone:"Settings reset"},engines:{title:"Training Engine Management",lead:"Manage optional training runtimes. Built-in engines need no install; optional engines are large and must be installed before use.",readyChip:"Training environment ready",defaultPolicy:{title:"Default policy",body:"The product default remains Kohya (ready out of the box). Anima Fast is large and slow to install, so it is never the global default. If you use Fast often, enable “Remember last engine” below."},rememberLast:{label:"Remember last training engine",hint:"Remembers engine and target per base model. Cold start for new users still defaults to Kohya."},catalog:{kohya:{name:"Kohya-ss",summary:"Built-in engine using the main environment. Ready out of the box."},"anima-fast":{name:"Anima Fast",summary:"Standalone high-performance runtime with install auditing for Anima LoRA.",sizeHint:"Large download (typically several GB) and extra disk space"},musubi:{name:"Musubi-Tuner",summary:"Planned optional training engine."}},state:{ready:"Ready",not_installed:"Not installed",unknown:"Unknown",installing:"Installing",auditing:"Auditing",broken:"Broken",disabled:"Disabled",coming_soon:"Coming soon",installed_unverified:"Awaiting audit"},hint:{ready:"Runtime is installed. You can start training.",not_installed:"Not installed yet. Install before training with this engine.",unknown:"Install status is unclear. Refresh, or open engine management to install.",installing:"Install is in progress. Please wait.",auditing:"Environment audit is in progress.",broken:"Runtime is broken. Check engine management; reinstall only if needed (full reinstall, may re-download several GB).",disabled:"This engine is disabled.",coming_soon:"Not available yet.",installed_unverified:"Installed but not audited yet."},actions:{refresh:"Refresh",install:"Install",installing:"Installing…",reinstall:"Reinstall",reinstallHint:"Only when the runtime is broken; fully reinstalls and may re-download several GB",uninstall:"Uninstall",manage:"Manage"},meta:{builtin:"Built-in · no install needed",gpu:"Requires an NVIDIA GPU",planned:"Not available yet",path:"Runtime path"},console:{idle:"Install log",waiting:"Waiting for install task output…"},confirm:{animaFast:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",reinstall:"Reinstall fully replaces the standalone runtime and usually re-downloads several GB. Use only when the environment is broken or incomplete. Continue?",uninstall:"Uninstall will remove the Anima Fast standalone runtime. Continue?"},msg:{ready:"Engine ready",started:"Install task started",uninstalled:"Uninstalled",fail:"Operation failed",statusFail:"Failed to read status",prefsSaved:"Preference saved"}},navAria:"Settings navigation",tools:{title:"LoRA Script Tools",note:"LoRA script tools are not yet part of the v1 IA. You can still access them directly at /lora/tools.html."},preview:"Preview (switch options on the left)",aboutDesc:"Next Trainer is a powerful, flexible, and easy-to-use local training tool.",moreChangelog:"More changelog…"},home:{heroTitle:"Model training, starting from a clear workflow.",heroSubtitle:"Next Trainer brings training configuration, dataset preparation, and run monitoring together in a local UI.",startTraining:"Configure Training",readGuide:"Read the Guide",portalAria:"Feature portals",enter:"Enter workspace",status:{local:"Local service architecture",vue:"Vue 3 training workspace",models:"Stable Diffusion · Flux · Anima"},credit:"Built on Akegarasu lora-scripts, kohya-ss/sd-scripts, and other open-source projects. Credits and licenses: {about} / {notice}.",portals:{training:{title:"Training",text:"Base model × engine × target — configure and submit in one place."},dataset:{title:"Dataset",text:"Tag editing and model tagging to prepare captions for training."},tasks:{title:"Tasks",text:"View training task status, log entries, and run monitoring."}}},about:{tagline:"A local training WebUI for Stable Diffusion, Flux, and Anima.",projectTitle:"About the Project",projectDesc:"Next Trainer builds on the Akegarasu lora-scripts ecosystem and the kohya-ss/sd-scripts training backend, providing training configuration, dataset preparation, task management, and training monitoring in one place. Dynamic forms are powered by {schemastery}.",creditsTitle:"Open-Source Credits",creditsIntro:"This project depends on and adapts multiple open-source components. Please respect each component's license when using or redistributing. Full notices are in the repository NOTICE file.",credits:{akegarasu:"Upstream GUI and community packaging (Akegarasu SD-Trainer / lora-scripts)",kohya:"Training scripts and Anima / Flux / SD backends (AGPL-3.0)",animaFast:"Optional Anima Fast training engine (MIT)",lycoris:"LoKr / LoHa network modules (Apache-2.0)",tagger:"Default WD14 tagger model and tag list",schemastery:"Dynamic form schema runtime"},creditsNotice:"Full third-party notices: {notice}. This repository license: {license}.",feedbackTitle:"Feedback",feedbackDesc:"When reporting a problem, include the version (including beta builds), training type, reproduction steps, and relevant logs, and submit it on {issues}.",linksTitle:"Project Links",source:"Source Code",releases:"Releases",issues:"Issue Tracker"},guide:{title:"Getting Started",subtitle:"From preparing images to viewing results, complete a local training run step by step.",mascotAlt:"Next Trainer guide",step1Title:"1. Prepare Data",step1:"Prepare training images and matching {ext} caption files. If you don't have captions, use {tagger} first, then clean up captions in {editor}.",step2Title:"2. Choose a Training Type",loraTitle:"LoRA Training",loraDesc:"On the {page}, choose the base model, training engine, and training target: Anima DiT, Flux, or SD / SDXL, with Kohya-ss or Anima Fast.",finetuneTitle:"Full Fine-tune",finetuneDesc:"{anima} is for full DiT fine-tuning; {dreambooth} is for full Stable Diffusion training.",step3Title:"3. Fill Parameters and Train",step3a:"Choose the base model, image directory, and output directory.",step3b:"Pick a training preset or adjust parameters as needed; the TOML preview updates in real time on the right.",step3c:'Run parameter validation first, then click "Start Training" and confirm creating a background task.',step4Title:"4. Check Progress",step4:"After submitting, you can open the training log, or go to {tasks} to stop a task; view metrics and curves in {tensorboard}.",migrateTitle:"Migrating from the Aki Version",migrate1:"Training types are now organized as LoRA and full fine-tune; legacy URLs remain compatible.",migrate2:"Anima Standard, Fast, and Finetune each use their own schema and constraints.",migrate3:"Historical configs and autosave drafts continue to use the legacy browser storage keys.",link:{tagger:"Dataset Tagger",editor:"Tag Editor",trainingPage:"Training page",animaFinetune:"Anima Full Fine-tune",tasks:"Training Tasks"}},changelog:{title:"Changelog",subtitle:"The full repository history lives in {file}; major releases are shown here.",bannerAlt:"Next Trainer changelog",full:"View Full Changelog"},notFound:{title:"Page Not Found",desc:"The requested page does not exist, or the entry has moved.",back:"Back to Home"},datasetEditor:{title:"Tag Editor",pathLabel:"Dataset Directory",scan:"Scan Dataset",scanning:"Scanning…",categoryLabel:"Category",allCategories:"All",queryLabel:"Caption / Filename Filter",batch:{title:"Batch Edit",selected:"{n} selected",filtered:"{n} in filter results",appendPlaceholder:"Tags to append, comma-separated",position:"Append position",positionBack:"Append at end",positionFront:"Prepend at front",removePlaceholder:"Tags to remove, comma-separated",replaceFrom:"Replace from",replaceTo:"Replace to",clean:"Clean separators, whitespace, and duplicates",underscore:"Replace underscores with spaces",stripEscape:"Strip escape characters",sort:"Sort alphabetically",apply:"Apply Batch Operations",confirm:"This will modify {n} images. Continue?",confirmSelected:"Batch Edit Selected Images",confirmFiltered:"Batch Edit Current Filter",done:"Modified {n} images",fail:"Batch edit failed"},quickTag:{title:"Quick Tags",addPlaceholder:"Add a quick tag",add:"Add",hint:"Right-click to remove a custom quick tag"},gallery:{count:"{filtered} / {total} images, {selected} selected",togglePage:"Toggle This Page",undo:"Undo",redo:"Redo",history:"History",emptyTitle:"No dataset loaded",emptyHint:"Enter the dataset folder on the left (or use Browse), then click Scan to start editing tags."},pager:{first:"First",prev:"Previous",next:"Next",last:"Last",perPage:"{size} / page"},caption:{chars:"{n} chars",addPlaceholder:"Add a tag",add:"Add",removeAria:"Remove tag {tag}",save:"Save Caption",saved:"Caption saved",saveFail:"Failed to save",empty:"Scan and select an image to start editing."},historyDialog:{title:"Session Edit History",count:"{n} images",detail:"View Details",noCaption:"(no caption)",empty:"No edits in this session yet"},historyMsg:{undone:"Undone",redone:"Redone",none:"No history operation available",fail:"Operation failed"},scanMsg:{loaded:"Loaded {n} images",fail:"Scan failed"}},paramsPage:{title:"Training Parameter Tuning",subtitle:"The fields actually available are determined by the backend schema of the current training page. The notes below keep the most common tuning principles from the legacy version.",s1Title:"Model and Dataset",baseModel:"Base Model Choice",baseModelDesc:"Prefer a base model that matches the target architecture and comes from a trusted source. Training on a merged model may work well for that model, but usually reduces how well the LoRA transfers to other base models.",resolution:"Training Resolution",resolutionDesc:"Match the model's native resolution and your data quality. With bucketing enabled, images of different aspect ratios are assigned to similarly sized buckets; overly high resolution significantly increases VRAM usage and training time.",s2Title:"Training Intensity",epochDesc:"Together these decide how many times the data is learned. Start from a preset baseline, then adjust after observing sample images.",batchDesc:"A larger batch is usually more stable but uses more VRAM; don't exceed your device's capability just for speed.",lrDesc:"Too high easily harms generalization and image quality; too low may underfit. Reasonable ranges differ across optimizers.",s3Title:"Network and Optimizer",s3a:"determines LoRA capacity; higher values capture more features but increase file size and overfitting risk. LyCORIS, LoKr, DyLoRA, and plain LoRA parameters are not fully interchangeable.",s3b:"Optimizers such as AdamW, Prodigy, and DAdaptation have different learning rate conventions; after choosing a preset, don't copy a learning rate from another optimizer. The UI warns about known conflicting combinations.",s4Title:"Saving and Preview",s4a:"Set a reasonable save interval and enable sample previews to catch underfitting, overfitting, or caption issues early. Check the TOML on the right before submitting; exported configs are normalized by the backend first."},animaFast:{intro:"A standalone runtime with install auditing and a high-performance training entry.",credit:"The Fast training engine is based on the open-source project {upstream} (MIT). Thanks to the authors and community; this page integrates it as an optional plugin under the respective licenses. Full notices: {notice}.",refresh:"Refresh status",statusBar:{readyHint:"Anima Fast runtime is installed. You can start training.",needInstallHint:"Not installed or not ready. Install the plugin before Fast training.",workingHint:"Install or audit is in progress. Please wait.",brokenHint:"Runtime is broken. Open engine management; reinstall only if needed (full reinstall).",disabledHint:"Anima Fast is disabled."},state:{ready:"Plugin ready",installing:"Installing",auditing:"Auditing",broken:"Broken",installed_unverified:"Awaiting audit",unknown:"Unknown state",disabled:"Feature disabled",not_installed:"Not installed"},auditTitle:"Environment Audit",installWorking:"Installing",install:"Install Plugin",repair:"Reinstall",consoleIdle:"Install Log",consoleWaiting:"Waiting for install task output…",confirm:{message:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",installTitle:"Install Plugin",repairTitle:"Reinstall"},msg:{ready:"Plugin ready",started:"Install task started",fail:"Operation failed",statusFail:"Failed to read status"}},integration:{openExternal:"Open in New Window",legacyTagEditor:"Legacy Tag Editor"},api:{network:"Cannot connect to the backend",unparseable:"The backend returned an unparseable response (HTTP {status})",httpFail:"Request failed (HTTP {status})",fail:"Request failed",missingData:"Backend response is missing data"},schema:{notProvided:"Backend did not provide schema: {name}",invalid:"Schema {name} did not return a valid definition",advancedSection:"Advanced Settings",required:"This field is required",tooSmall:"Must be at least {min}",tooLarge:"Must be at most {max}",samplePromptsDescription:"Preview image generation parameters. Text after `--n` is the negative prompt, `--w/--h` sets the size, `--l` is the CFG scale, `--s` is the step count, and `--d` is the seed."},schemaForm:{fieldCount:"{n} items",required:"Required",emptyOption:"(empty)",arrayPlaceholder:"One item per line",browse:"Browse",commonPaths:"Common Paths",catalogTitle:"Choose a Common Path",pickFail:"Failed to pick a path",catalogFail:"Failed to read the directory"},tagger:{title:"Tagger",subtitle:"Choose a model and an image directory to automatically generate matching caption files.",modelLabel:"Tagger Model",pathLabel:"Image Folder",thresholdLabel:"General Tag Threshold",characterThresholdLabel:"Character Tag Threshold",additionalTagsLabel:"Additional Tags",excludeTagsLabel:"Exclude Tags",endpointLabel:"Download Mirror",endpointPlaceholder:"Leave empty to use the default Hugging Face",conflictLabel:"Existing Caption",conflict:{ignore:"Ignore",copy:"Overwrite",prepend:"Prepend"},recursive:"Recursive search",replaceUnderscore:"Replace underscores with spaces",escapeTag:"Escape brackets",addRatingTag:"Add rating tag",addModelTag:"Add model tag",idle:"Configure parameters, then click Start",downloadMeter:"Model Download",downloadIdle:"Not started",taggingMeter:"Image Tagging",cancel:"Cancel Task",start:"Start Tagging",prefetch:"Pre-download Model",reset:"Reset Status",msg:{pathRequired:"Please enter the image folder path first",submitted:"Tagging task submitted",submitFail:"Submission failed",cancelRequested:"Cancellation requested",resetDone:"Status reset",prefetchStarted:"Model download started",actionFail:"Operation failed",statusFail:"Failed to read status"}},tools:{title:"LoRA Script Tools",subtitle:"Run whitelisted model and LoRA processing scripts on the backend. Tasks run in the background.",scriptLabel:"Script",argsTitle:"Arguments",addArg:"Add Argument",argKeyPlaceholder:"Argument name, e.g. model_org",argValuePlaceholder:"Argument value",removeArgAria:"Remove argument",submitting:"Submitting…",run:"Run Tool",msg:{submitted:"Tool task submitted",submitFail:"Failed to submit the task"}}},SA=[{value:"zh-CN",label:"简体中文"},{value:"en-US",label:"English"}],_0="zh-CN",w0="ui-configs";function E0(){try{const e=localStorage.getItem(w0),t=e?JSON.parse(e):{};return t&&typeof t=="object"?t:{}}catch{return{}}}function TA(e){return SA.some(t=>t.value===e)}function CA(){const e=E0().language;return TA(e)?e:_0}function AA(e){const t=E0();t.language=e,localStorage.setItem(w0,JSON.stringify(t))}const fr=o6({legacy:!1,locale:CA(),fallbackLocale:_0,messages:{"zh-CN":wA,"en-US":EA}});function mO(e){fr.global.locale.value=e,AA(e)}const OA={"zh-CN":y0,"en-US":Pm};function xA(e){return OA[e]??y0}class hs extends Error{constructor(t,n,r){super(t),this.status=n,this.response=r,this.name="ApiError"}status;response}async function LA(e,t={}){const{allowPending:n=!1,headers:r,...o}=t;let s;try{s=await fetch(e,{...o,headers:{...o.body?{"Content-Type":"application/json"}:{},...r}})}catch(i){throw new hs(i instanceof Error?i.message:fr.global.t("api.network"),"network")}let a;try{a=await s.json()}catch{throw new hs(fr.global.t("api.unparseable",{status:s.status}),"http")}if(!s.ok)throw new hs(a.message||fr.global.t("api.httpFail",{status:s.status}),"http",a);if(a.status!=="success"&&!(n&&a.status==="pending"))throw new hs(a.message||fr.global.t("api.fail"),a.status,a);return a}async function IA(e,t){const n=await LA(e,t);if(n.data==null)throw new hs(fr.global.t("api.missingData"),n.status,n);return n.data}const PA={getVersion:()=>IA("/api/version")},kA=cy("app",()=>{const e=re("");async function t(){try{e.value=(await PA.getVersion()).version}catch{e.value=""}}return{version:e,loadVersion:t}}),RA={class:"app-shell"},NA={class:"mobile-header"},MA=["aria-label"],FA=["aria-label"],DA=["aria-label"],$A={class:"sidebar-footer"},VA={class:"app-content"},BA=Ee({__name:"AppShell",setup(e){const t=_A(),{t:n}=ia(),r=re(!1),o=kA(),{version:s}=uy(o),a=P(()=>s.value?/(?:alpha|beta|rc)/i.test(s.value)?`v${s.value} · ${n("app.prerelease")}`:`v${s.value}`:"beta"),i=[{key:"training",to:"/training",icon:m4,match:["/training","/lora/","/dreambooth/"]},{key:"dataset",to:"/dataset",icon:y4,match:["/dataset","/tagger.html","/native-tageditor.html","/dataset-editor.html","/tageditor.html"]},{key:"tasks",to:"/tasks",icon:v4,match:["/tasks","/task.html","/tensorboard.html"]},{key:"settings",to:"/settings",icon:N4,match:["/settings","/other/"]}],l=P(()=>t.path);function c(u){return u.some(f=>l.value.startsWith(f))}return pt(()=>o.loadVersion()),(u,f)=>{const d=dn("el-icon"),p=dn("RouterLink"),g=dn("RouterView");return V(),ie("div",RA,[ce("header",NA,[ce("button",{class:"icon-button","aria-label":w(n)("nav.openNav"),onClick:f[0]||(f[0]=h=>r.value=!r.value)},[xe(d,null,{default:me(()=>[xe(w(C4))]),_:1})],8,MA),xe(p,{class:"mobile-brand",to:"/"},{default:me(()=>[Xa(st(w(n)("app.brand")),1)]),_:1})]),r.value?(V(),ie("button",{key:0,class:"sidebar-mask","aria-label":w(n)("nav.closeNav"),onClick:f[1]||(f[1]=h=>r.value=!1)},null,8,FA)):be("",!0),ce("aside",{class:ae(["sidebar",{"is-open":r.value}])},[xe(p,{class:"brand",to:"/",onClick:f[2]||(f[2]=h=>r.value=!1)},{default:me(()=>[f[5]||(f[5]=ce("span",{class:"brand-mark"},"N",-1)),ce("span",null,[ce("strong",null,st(w(n)("app.brand")),1),ce("small",null,st(a.value),1)])]),_:1}),ce("nav",{class:"navigation","aria-label":w(n)("nav.mainAria")},[(V(),ie(Qe,null,cs(i,h=>xe(p,{key:h.key,to:h.to,class:ae(["nav-link",{active:c(h.match)}]),onClick:f[3]||(f[3]=v=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[(V(),ye(vt(h.icon)))]),_:2},1024),ce("span",null,st(w(n)(`nav.${h.key}`)),1)]),_:2},1032,["to","class"])),64))],8,DA),ce("footer",$A,[xe(p,{to:"/help/guide.html",class:"nav-link help-link",onClick:f[4]||(f[4]=h=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[xe(w(P4))]),_:1}),ce("span",null,st(w(n)("nav.help")),1)]),_:1}),f[6]||(f[6]=ce("a",{href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer",class:"github-link"},"GitHub",-1))])],2),ce("main",VA,[xe(g)])])}}}),HA=Ee({__name:"App",setup(e){const{locale:t}=ia(),n=P(()=>xA(t.value));return(r,o)=>{const s=dn("el-config-provider");return V(),ye(s,{locale:n.value},{default:me(()=>[xe(BA)]),_:1},8,["locale"])}}}),UA="modulepreload",jA=function(e){return"/"+e},Lp={},Zn=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let l=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),i=a?.nonce||a?.getAttribute("nonce");o=l(n.map(c=>{if(c=jA(c),c in Lp)return;Lp[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":UA,u||(d.as="script"),d.crossOrigin="",d.href=c,i&&d.setAttribute("nonce",i),document.head.appendChild(d),u)return new Promise((p,g)=>{d.addEventListener("load",p),d.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(a){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=a,window.dispatchEvent(i),!i.defaultPrevented)throw a}return o.then(a=>{for(const i of a||[])i.status==="rejected"&&s(i.reason);return t().catch(s)})},WA=()=>Zn(()=>import("./HomePage-ChxMX_IM.js"),__vite__mapDeps([0,1])),Ip=()=>Zn(()=>import("./IntegrationPage-DlxzcFZI.js"),[]),zA=()=>Zn(()=>import("./NotFoundPage-8auRhUvD.js"),[]),KA=()=>Zn(()=>import("./TasksPage-CeWYr9Xg.js"),__vite__mapDeps([2,3,4,5])),GA=()=>Zn(()=>import("./ToolsPage-DH5QX7Cd.js"),__vite__mapDeps([6,3])),Pp=()=>Zn(()=>import("./DatasetPage-CoWjms-D.js"),__vite__mapDeps([7,3,4,8])),YA=()=>Zn(()=>import("./TrainingWorkbenchPage-ByP70JIG.js"),__vite__mapDeps([9,3,4,10,8,5])),Na=()=>Zn(()=>import("./SettingsContainerPage-9zJ1w2a2.js"),__vite__mapDeps([11,3,1,4,10])),qA=()=>Zn(()=>import("./GuidePage-Ds9mS5xC.js"),[]),XA=()=>Zn(()=>import("./ParamsPage-BkK-W4SI.js"),[]),rr=(e,t,n)=>({path:"/training",query:{model:e,engine:t,target:n}}),JA=[{path:"/",component:WA,meta:{titleKey:"app.brand"}},{path:"/training",component:YA,meta:{titleKey:"training.title"}},{path:"/dataset",redirect:"/dataset/tagger"},{path:"/dataset/editor",component:Pp,props:{tab:"editor"},meta:{titleKey:"dataset.title"}},{path:"/dataset/tagger",component:Pp,props:{tab:"tagger"},meta:{titleKey:"dataset.title"}},{path:"/tasks",component:KA,meta:{titleKey:"tasks.title"}},{path:"/settings",redirect:"/settings/ui"},{path:"/settings/ui",component:Na,props:{tab:"ui"},meta:{titleKey:"settings.title"}},{path:"/settings/engines",component:Na,props:{tab:"engines"},meta:{titleKey:"settings.title"}},{path:"/settings/about",component:Na,props:{tab:"about"},meta:{titleKey:"settings.title"}},{path:"/settings/changelog",component:Na,props:{tab:"changelog"},meta:{titleKey:"settings.title"}},{path:"/help/guide.html",component:qA,meta:{titleKey:"guide.title"}},{path:"/lora/index.html",redirect:"/training"},{path:"/lora/basic.html",redirect:()=>rr("sd15","kohya","lora")},{path:"/lora/master.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/sdxl.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/flux.html",redirect:()=>rr("flux","kohya","lora")},{path:"/lora/sd3.html",redirect:()=>rr("anima","kohya","lora")},{path:"/lora/anima-fast.html",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-fast",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-finetune.html",redirect:()=>rr("anima","kohya","finetune")},{path:"/dreambooth/index.html",redirect:()=>rr("sdxl","kohya","finetune")},{path:"/tagger.html",redirect:"/dataset/tagger"},{path:"/native-tageditor.html",redirect:"/dataset/editor"},{path:"/dataset-editor.html",redirect:"/dataset/editor"},{path:"/task.html",redirect:"/tasks"},{path:"/other/settings.html",redirect:"/settings/ui"},{path:"/other/about.html",redirect:"/settings/about"},{path:"/other/changelog.html",redirect:"/settings/changelog"},{path:"/tensorboard.html",component:Ip,props:{title:"TensorBoard",src:"/proxy/tensorboard/",configurable:!0},meta:{title:"TensorBoard"}},{path:"/lora/tools.html",component:GA,meta:{titleKey:"tools.title"}},{path:"/lora/params.html",component:XA,meta:{titleKey:"paramsPage.title"}},{path:"/tageditor.html",component:Ip,props:{titleKey:"integration.legacyTagEditor",src:"/proxy/tageditor/"},meta:{titleKey:"integration.legacyTagEditor"}},{path:"/:pathMatch(.*)*",component:zA,meta:{titleKey:"notFound.title"}}],S0=yA({history:J6(),routes:JA,scrollBehavior:()=>({top:0})});S0.afterEach(e=>{const t=typeof e.meta.titleKey=="string"?e.meta.titleKey:"app.brand";document.title=`${fr.global.t(t)} | ${fr.global.t("app.brand")}`});const T0=tm(HA);for(const e of[NS,hS,NT,ft,wg,HT,hT,pT,ZT])T0.component(e.name,e);T0.directive("loading",bu).use(ry()).use(S0).use(fr).mount("#app");export{bt as $,LA as A,Ln as B,nO as C,Jt as D,eO as E,Qe as F,IA as G,jl as H,tO as I,cy as J,fr as K,go as L,lO as M,iO as N,Ce as O,hO as P,Vv as Q,hA as R,ZA as S,_A as T,kA as U,CA as V,SA as W,w0 as X,mO as Y,sO as Z,Vo as _,ce as a,UT as a0,uO as a1,ft as a2,ET as a3,wg as a4,yg as a5,NS as a6,cS as a7,Ci as a8,iu as a9,gn as aA,th as aB,gr as aC,Cn as aD,Kf as aE,dS as aF,Ur as aG,aO as aH,Wo as aa,xw as ab,ge as ac,De as ad,Fw as ae,qs as af,fO as ag,Ym as ah,aa as ai,vt as aj,Zs as ak,tt as al,pr as am,rO as an,He as ao,Ie as ap,no as aq,xt as ar,Br as as,rt as at,he as au,nt as av,at as aw,po as ax,Tn as ay,DE as az,w as b,ie as c,Ee as d,xe as e,Xa as f,QA as g,P as h,dn as i,ye as j,Te as k,Lt as l,ae as m,yt as n,V as o,be as p,Wt as q,cs as r,re as s,st as t,ia as u,Ye as v,me as w,uy as x,pt as y,cO as z}; +…`,startHint:"Click Start Training when the configuration is complete. Run status and training logs will appear on the right.",intro:"Fill in model, dataset, and training parameters in order. Parameter conversion, conflict checks, and backend training constraints run before submission.",panelHint:"The right side shows the TOML that will actually be submitted. Validate parameters first, then start the background training task.",toolbar:{presets:"Presets",import:"Import Config",save:"Save Parameters",history:"History",export:"Export TOML",reset:"Reset"},loadingSchema:"Loading training schema",loadingSchemaHint:"Checking cache and backend version…",schemaError:"Failed to load schema",schemaLoadFail:"Failed to load schema",retry:"Retry",startedTask:"Task started",openLog:"Open Training Log",viewTasks:"View Tasks",validate:"Validate Parameters",validatePassed:"Parameters validated",submitting:"Submitting…",gpu:{sectionTitle:"GPU Settings",fieldDescription:"Select the GPUs used for training"},historyDialog:{title:"Parameter History",unnamed:"Unnamed config",use:"Use",delete:"Delete",empty:"No parameter history",saved:"Parameters saved to browser history"},presetsDialog:{title:"Training Presets",apply:"Apply",empty:"No presets for this training type",loadFail:"Failed to load presets",applied:"Preset applied: {name}"},importMsg:{imported:"Config imported",importedRedirect:"Config imported on the target page",reject:"The config does not apply to this page",mismatchTitle:"Training Type Mismatch",mismatchConfirm:"This config belongs to another training page. Jump there?",jump:"Jump and Import",cancel:"Cancel",fail:"Failed to import config"},exportFail:"Failed to export config",submitConfirm:{message:"Training will occupy the GPU and create a background task. Start now?",title:"Start Training",confirm:"Start Training",cancel:"Cancel",started:"Training task started: {id}",fail:"Failed to submit training",preflightFail:"Anima Fast preflight checks failed"},resetDialog:{title:"Reset Parameters",cancel:"Cancel"},diagnostics:{dadaptScheduler:"DAdaptation-family optimizers work best with lr_scheduler set to constant",prodigyLr:"Prodigy works best with unet_lr and text_encoder_lr set to 1",oftSdxl:"OFT is currently only available for SDXL",conflict:"Parameters {left} and {right} conflict; enable only one of them"},schemas:{"sd3-lora":{title:"Anima LoRA",area:"Anima DiT · Kohya-ss · LoRA"},"anima-lora-fast":{title:"Anima LoRA Fast",area:"Anima DiT · Anima Fast · LoRA"},"anima-finetune":{title:"Anima Full Fine-tune",area:"Anima DiT · Kohya-ss · Full Fine-tune"},"lora-master":{title:"SD / SDXL LoRA",area:"SD / SDXL · Kohya-ss · LoRA"},dreambooth:{title:"SD / SDXL Full Fine-tune",area:"SD / SDXL · Kohya-ss · Full Fine-tune"},"flux-lora":{title:"Flux LoRA",area:"Flux · Kohya-ss · LoRA"},"lumina2-lora":{title:"Lumina 2 LoRA",area:"Lumina 2 · Kohya-ss · LoRA"}}},dataset:{title:"Dataset",switchAria:"Dataset sub-pages",tab:{editor:"Tag Editor",tagger:"Model Tagging"}},tasks:{title:"Tasks",refresh:"Refresh",tabs:{running:"Running",recent:"Recent"},status:{created:"Created",running:"Running",finished:"Finished",terminated:"Terminated",failed:"Failed"},loadError:"Failed to load tasks",retry:"Retry",loading:"Loading task list…",emptyTitle:"No training tasks yet",emptyDesc:"Submit a task from the Training page and its status and log entries will appear here.",filterAria:"Task filter",tabEmpty:"No tasks",defaultName:"Training Task",noDetail:"No task description",listLoadFail:"Failed to load the task list",terminate:{confirm:"Stop task {id}?",title:"Terminate Training",confirmButton:"Stop Task",cancel:"Cancel",success:"Task stopped",fail:"Failed to stop the task"},detail:{stop:"Stop Task",stopping:"Stopping…",viewLog:"View Log",tensorboard:"TensorBoard",empty:"Select a task on the left to view details",taskId:"Task ID",config:"Training Config",returncode:"Return Code",overview:"Overview",previewTitle:"Training previews",previewEmpty:"No training previews yet",previewDisabled:"Preview sampling is disabled for this task, so no images will be generated. Enable it in the training form's preview settings.",lossTitle:"Loss curves",lossEmpty:"No loss data yet",epochLabel:"Epoch {n}",stepLabel:"Step {n}",stepProgress:"Step {step}/{total}",epochProgress:"Epoch {epoch}/{total}"},log:{title:"Training Log",expand:"Expand",collapse:"Collapse",errorBadge:"Errors found in the log, expand to inspect",follow:"Follow Tail",jumpToError:"Jump to Error",copy:"Copy",copied:"Log copied to clipboard",copyFail:"Copy failed. Please select the text and copy it manually",download:"Download",count:"{n} lines",empty:"No log output yet",unavailable:"This task is not in the current server session; no embedded log available."}},settings:{title:"Settings",subtitle:"Training UI, engines, and about",nav:{ui:"UI",engines:"Engines",about:"About",changelog:"Changelog"},ui:{language:"Language",theme:"Theme",themeLight:"Light",themeDark:"Dark",tensorboardUrl:"TensorBoard URL",tensorboardPlaceholder:"Leave empty to use the default proxy",tensorboardHint:"You can provide a standalone TensorBoard address; when empty, access continues through the same-origin backend proxy.",save:"Save",reset:"Reset",saved:"Settings saved",resetDone:"Settings reset"},engines:{title:"Training Engine Management",lead:"Manage optional training runtimes. Built-in engines need no install; optional engines are large and must be installed before use.",readyChip:"Training environment ready",defaultPolicy:{title:"Default policy",body:"The product default remains Kohya (ready out of the box). Anima Fast is large and slow to install, so it is never the global default. If you use Fast often, enable “Remember last engine” below."},rememberLast:{label:"Remember last training engine",hint:"Remembers engine and target per base model. Cold start for new users still defaults to Kohya."},catalog:{kohya:{name:"Kohya-ss",summary:"Built-in engine using the main environment. Ready out of the box."},"anima-fast":{name:"Anima Fast",summary:"Standalone high-performance runtime with install auditing for Anima LoRA.",sizeHint:"Large download (typically several GB) and extra disk space"},musubi:{name:"Musubi-Tuner",summary:"Planned optional training engine."}},state:{ready:"Ready",not_installed:"Not installed",unknown:"Unknown",installing:"Installing",auditing:"Auditing",broken:"Broken",disabled:"Disabled",coming_soon:"Coming soon",installed_unverified:"Awaiting audit"},hint:{ready:"Runtime is installed. You can start training.",not_installed:"Not installed yet. Install before training with this engine.",unknown:"Install status is unclear. Refresh, or open engine management to install.",installing:"Install is in progress. Please wait.",auditing:"Environment audit is in progress.",broken:"Runtime is broken. Check engine management; reinstall only if needed (full reinstall, may re-download several GB).",disabled:"This engine is disabled.",coming_soon:"Not available yet.",installed_unverified:"Installed but not audited yet."},actions:{refresh:"Refresh",install:"Install",installing:"Installing…",reinstall:"Reinstall",reinstallHint:"Only when the runtime is broken; fully reinstalls and may re-download several GB",uninstall:"Uninstall",manage:"Manage"},meta:{builtin:"Built-in · no install needed",gpu:"Requires an NVIDIA GPU",planned:"Not available yet",path:"Runtime path"},console:{idle:"Install log",waiting:"Waiting for install task output…"},confirm:{animaFast:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",reinstall:"Reinstall fully replaces the standalone runtime and usually re-downloads several GB. Use only when the environment is broken or incomplete. Continue?",uninstall:"Uninstall will remove the Anima Fast standalone runtime. Continue?"},msg:{ready:"Engine ready",started:"Install task started",uninstalled:"Uninstalled",fail:"Operation failed",statusFail:"Failed to read status",prefsSaved:"Preference saved"}},navAria:"Settings navigation",tools:{title:"LoRA Script Tools",note:"LoRA script tools are not yet part of the v1 IA. You can still access them directly at /lora/tools.html."},preview:"Preview (switch options on the left)",aboutDesc:"Next Trainer is a powerful, flexible, and easy-to-use local training tool.",moreChangelog:"More changelog…"},home:{heroTitle:"Model training, starting from a clear workflow.",heroSubtitle:"Next Trainer brings training configuration, dataset preparation, and run monitoring together in a local UI.",startTraining:"Configure Training",readGuide:"Read the Guide",portalAria:"Feature portals",enter:"Enter workspace",status:{local:"Local service architecture",vue:"Vue 3 training workspace",models:"Stable Diffusion · Flux · Anima"},credit:"Built on Akegarasu lora-scripts, kohya-ss/sd-scripts, and other open-source projects. Credits and licenses: {about} / {notice}.",portals:{training:{title:"Training",text:"Base model × engine × target — configure and submit in one place."},dataset:{title:"Dataset",text:"Tag editing and model tagging to prepare captions for training."},tasks:{title:"Tasks",text:"View training task status, log entries, and run monitoring."}}},about:{tagline:"A local training WebUI for Stable Diffusion, Flux, and Anima.",projectTitle:"About the Project",projectDesc:"Next Trainer builds on the Akegarasu lora-scripts ecosystem and the kohya-ss/sd-scripts training backend, providing training configuration, dataset preparation, task management, and training monitoring in one place. Dynamic forms are powered by {schemastery}.",creditsTitle:"Open-Source Credits",creditsIntro:"This project depends on and adapts multiple open-source components. Please respect each component's license when using or redistributing. Full notices are in the repository NOTICE file.",credits:{akegarasu:"Upstream GUI and community packaging (Akegarasu SD-Trainer / lora-scripts)",kohya:"Training scripts and Anima / Flux / SD backends (AGPL-3.0)",animaFast:"Optional Anima Fast training engine (MIT)",lycoris:"LoKr / LoHa network modules (Apache-2.0)",tagger:"Default WD14 tagger model and tag list",schemastery:"Dynamic form schema runtime"},creditsNotice:"Full third-party notices: {notice}. This repository license: {license}.",feedbackTitle:"Feedback",feedbackDesc:"When reporting a problem, include the version (including beta builds), training type, reproduction steps, and relevant logs, and submit it on {issues}.",linksTitle:"Project Links",source:"Source Code",releases:"Releases",issues:"Issue Tracker"},guide:{title:"Getting Started",subtitle:"From preparing images to viewing results, complete a local training run step by step.",mascotAlt:"Next Trainer guide",step1Title:"1. Prepare Data",step1:"Prepare training images and matching {ext} caption files. If you don't have captions, use {tagger} first, then clean up captions in {editor}.",step2Title:"2. Choose a Training Type",loraTitle:"LoRA Training",loraDesc:"On the {page}, choose the base model, training engine, and training target: Anima DiT, Flux, or SD / SDXL, with Kohya-ss or Anima Fast.",finetuneTitle:"Full Fine-tune",finetuneDesc:"{anima} is for full DiT fine-tuning; {dreambooth} is for full Stable Diffusion training.",step3Title:"3. Fill Parameters and Train",step3a:"Choose the base model, image directory, and output directory.",step3b:"Pick a training preset or adjust parameters as needed; the TOML preview updates in real time on the right.",step3c:'Run parameter validation first, then click "Start Training" and confirm creating a background task.',step4Title:"4. Check Progress",step4:"After submitting, you can open the training log, or go to {tasks} to stop a task; view metrics and curves in {tensorboard}.",migrateTitle:"Migrating from the Aki Version",migrate1:"Training types are now organized as LoRA and full fine-tune; legacy URLs remain compatible.",migrate2:"Anima Standard, Fast, and Finetune each use their own schema and constraints.",migrate3:"Historical configs and autosave drafts continue to use the legacy browser storage keys.",link:{tagger:"Dataset Tagger",editor:"Tag Editor",trainingPage:"Training page",animaFinetune:"Anima Full Fine-tune",tasks:"Training Tasks"}},changelog:{title:"Changelog",subtitle:"The full repository history lives in {file}; major releases are shown here.",bannerAlt:"Next Trainer changelog",full:"View Full Changelog"},notFound:{title:"Page Not Found",desc:"The requested page does not exist, or the entry has moved.",back:"Back to Home"},datasetEditor:{title:"Tag Editor",pathLabel:"Dataset Directory",scan:"Scan Dataset",scanning:"Scanning…",categoryLabel:"Category",allCategories:"All",queryLabel:"Caption / Filename Filter",batch:{title:"Batch Edit",selected:"{n} selected",filtered:"{n} in filter results",appendPlaceholder:"Tags to append, comma-separated",position:"Append position",positionBack:"Append at end",positionFront:"Prepend at front",removePlaceholder:"Tags to remove, comma-separated",replaceFrom:"Replace from",replaceTo:"Replace to",clean:"Clean separators, whitespace, and duplicates",underscore:"Replace underscores with spaces",stripEscape:"Strip escape characters",sort:"Sort alphabetically",apply:"Apply Batch Operations",confirm:"This will modify {n} images. Continue?",confirmSelected:"Batch Edit Selected Images",confirmFiltered:"Batch Edit Current Filter",done:"Modified {n} images",fail:"Batch edit failed"},quickTag:{title:"Quick Tags",addPlaceholder:"Add a quick tag",add:"Add",hint:"Right-click to remove a custom quick tag"},gallery:{count:"{filtered} / {total} images, {selected} selected",togglePage:"Toggle This Page",undo:"Undo",redo:"Redo",history:"History",emptyTitle:"No dataset loaded",emptyHint:"Enter the dataset folder on the left (or use Browse), then click Scan to start editing tags."},pager:{first:"First",prev:"Previous",next:"Next",last:"Last",perPage:"{size} / page"},caption:{chars:"{n} chars",addPlaceholder:"Add a tag",add:"Add",removeAria:"Remove tag {tag}",save:"Save Caption",saved:"Caption saved",saveFail:"Failed to save",empty:"Scan and select an image to start editing."},historyDialog:{title:"Session Edit History",count:"{n} images",detail:"View Details",noCaption:"(no caption)",empty:"No edits in this session yet"},historyMsg:{undone:"Undone",redone:"Redone",none:"No history operation available",fail:"Operation failed"},scanMsg:{loaded:"Loaded {n} images",fail:"Scan failed"}},paramsPage:{title:"Training Parameter Tuning",subtitle:"The fields actually available are determined by the backend schema of the current training page. The notes below keep the most common tuning principles from the legacy version.",s1Title:"Model and Dataset",baseModel:"Base Model Choice",baseModelDesc:"Prefer a base model that matches the target architecture and comes from a trusted source. Training on a merged model may work well for that model, but usually reduces how well the LoRA transfers to other base models.",resolution:"Training Resolution",resolutionDesc:"Match the model's native resolution and your data quality. With bucketing enabled, images of different aspect ratios are assigned to similarly sized buckets; overly high resolution significantly increases VRAM usage and training time.",s2Title:"Training Intensity",epochDesc:"Together these decide how many times the data is learned. Start from a preset baseline, then adjust after observing sample images.",batchDesc:"A larger batch is usually more stable but uses more VRAM; don't exceed your device's capability just for speed.",lrDesc:"Too high easily harms generalization and image quality; too low may underfit. Reasonable ranges differ across optimizers.",s3Title:"Network and Optimizer",s3a:"determines LoRA capacity; higher values capture more features but increase file size and overfitting risk. LyCORIS, LoKr, DyLoRA, and plain LoRA parameters are not fully interchangeable.",s3b:"Optimizers such as AdamW, Prodigy, and DAdaptation have different learning rate conventions; after choosing a preset, don't copy a learning rate from another optimizer. The UI warns about known conflicting combinations.",s4Title:"Saving and Preview",s4a:"Set a reasonable save interval and enable sample previews to catch underfitting, overfitting, or caption issues early. Check the TOML on the right before submitting; exported configs are normalized by the backend first."},animaFast:{intro:"A standalone runtime with install auditing and a high-performance training entry.",credit:"The Fast training engine is based on the open-source project {upstream} (MIT). Thanks to the authors and community; this page integrates it as an optional plugin under the respective licenses. Full notices: {notice}.",refresh:"Refresh status",statusBar:{readyHint:"Anima Fast runtime is installed. You can start training.",needInstallHint:"Not installed or not ready. Install the plugin before Fast training.",workingHint:"Install or audit is in progress. Please wait.",brokenHint:"Runtime is broken. Open engine management; reinstall only if needed (full reinstall).",disabledHint:"Anima Fast is disabled."},state:{ready:"Plugin ready",installing:"Installing",auditing:"Auditing",broken:"Broken",installed_unverified:"Awaiting audit",unknown:"Unknown state",disabled:"Feature disabled",not_installed:"Not installed"},auditTitle:"Environment Audit",installWorking:"Installing",install:"Install Plugin",repair:"Reinstall",consoleIdle:"Install Log",consoleWaiting:"Waiting for install task output…",confirm:{message:"Anima Fast downloads a standalone Python environment and several GB of dependencies, and requires an NVIDIA GPU. Continue?",installTitle:"Install Plugin",repairTitle:"Reinstall"},msg:{ready:"Plugin ready",started:"Install task started",fail:"Operation failed",statusFail:"Failed to read status"}},integration:{openExternal:"Open in New Window",legacyTagEditor:"Legacy Tag Editor"},api:{network:"Cannot connect to the backend",unparseable:"The backend returned an unparseable response (HTTP {status})",httpFail:"Request failed (HTTP {status})",fail:"Request failed",missingData:"Backend response is missing data"},schema:{notProvided:"Backend did not provide schema: {name}",invalid:"Schema {name} did not return a valid definition",advancedSection:"Advanced Settings",required:"This field is required",tooSmall:"Must be at least {min}",tooLarge:"Must be at most {max}",samplePromptsDescription:"Preview image generation parameters. Text after `--n` is the negative prompt, `--w/--h` sets the size, `--l` is the CFG scale, `--s` is the step count, and `--d` is the seed."},schemaForm:{fieldCount:"{n} items",required:"Required",emptyOption:"(empty)",arrayPlaceholder:"One item per line",browse:"Browse",commonPaths:"Common Paths",catalogTitle:"Choose a Common Path",pickFail:"Failed to pick a path",catalogFail:"Failed to read the directory"},tagger:{title:"Tagger",subtitle:"Choose a model and an image directory to automatically generate matching caption files.",modelLabel:"Tagger Model",pathLabel:"Image Folder",thresholdLabel:"General Tag Threshold",characterThresholdLabel:"Character Tag Threshold",additionalTagsLabel:"Additional Tags",excludeTagsLabel:"Exclude Tags",endpointLabel:"Download Mirror",endpointPlaceholder:"Leave empty to use the default Hugging Face",conflictLabel:"Existing Caption",conflict:{ignore:"Ignore",copy:"Overwrite",prepend:"Prepend"},recursive:"Recursive search",replaceUnderscore:"Replace underscores with spaces",escapeTag:"Escape brackets",addRatingTag:"Add rating tag",addModelTag:"Add model tag",idle:"Configure parameters, then click Start",downloadMeter:"Model Download",downloadIdle:"Not started",taggingMeter:"Image Tagging",cancel:"Cancel Task",start:"Start Tagging",prefetch:"Pre-download Model",reset:"Reset Status",msg:{pathRequired:"Please enter the image folder path first",submitted:"Tagging task submitted",submitFail:"Submission failed",cancelRequested:"Cancellation requested",resetDone:"Status reset",prefetchStarted:"Model download started",actionFail:"Operation failed",statusFail:"Failed to read status"}},tools:{title:"LoRA Script Tools",subtitle:"Run whitelisted model and LoRA processing scripts on the backend. Tasks run in the background.",scriptLabel:"Script",argsTitle:"Arguments",addArg:"Add Argument",argKeyPlaceholder:"Argument name, e.g. model_org",argValuePlaceholder:"Argument value",removeArgAria:"Remove argument",submitting:"Submitting…",run:"Run Tool",msg:{submitted:"Tool task submitted",submitFail:"Failed to submit the task"}}},SA=[{value:"zh-CN",label:"简体中文"},{value:"en-US",label:"English"}],_0="zh-CN",w0="ui-configs";function E0(){try{const e=localStorage.getItem(w0),t=e?JSON.parse(e):{};return t&&typeof t=="object"?t:{}}catch{return{}}}function TA(e){return SA.some(t=>t.value===e)}function CA(){const e=E0().language;return TA(e)?e:_0}function AA(e){const t=E0();t.language=e,localStorage.setItem(w0,JSON.stringify(t))}const fr=o6({legacy:!1,locale:CA(),fallbackLocale:_0,messages:{"zh-CN":wA,"en-US":EA}});function mO(e){fr.global.locale.value=e,AA(e)}const OA={"zh-CN":y0,"en-US":Pm};function xA(e){return OA[e]??y0}class hs extends Error{constructor(t,n,r){super(t),this.status=n,this.response=r,this.name="ApiError"}status;response}async function LA(e,t={}){const{allowPending:n=!1,headers:r,...o}=t;let s;try{s=await fetch(e,{...o,headers:{...o.body?{"Content-Type":"application/json"}:{},...r}})}catch(i){throw new hs(i instanceof Error?i.message:fr.global.t("api.network"),"network")}let a;try{a=await s.json()}catch{throw new hs(fr.global.t("api.unparseable",{status:s.status}),"http")}if(!s.ok)throw new hs(a.message||fr.global.t("api.httpFail",{status:s.status}),"http",a);if(a.status!=="success"&&!(n&&a.status==="pending"))throw new hs(a.message||fr.global.t("api.fail"),a.status,a);return a}async function IA(e,t){const n=await LA(e,t);if(n.data==null)throw new hs(fr.global.t("api.missingData"),n.status,n);return n.data}const PA={getVersion:()=>IA("/api/version")},kA=cy("app",()=>{const e=re("");async function t(){try{e.value=(await PA.getVersion()).version}catch{e.value=""}}return{version:e,loadVersion:t}}),RA={class:"app-shell"},NA={class:"mobile-header"},MA=["aria-label"],FA=["aria-label"],DA=["aria-label"],$A={class:"sidebar-footer"},VA={class:"app-content"},BA=Ee({__name:"AppShell",setup(e){const t=_A(),{t:n}=ia(),r=re(!1),o=kA(),{version:s}=uy(o),a=P(()=>s.value?/(?:alpha|beta|rc)/i.test(s.value)?`v${s.value} · ${n("app.prerelease")}`:`v${s.value}`:"beta"),i=[{key:"training",to:"/training",icon:m4,match:["/training","/lora/","/dreambooth/"]},{key:"dataset",to:"/dataset",icon:y4,match:["/dataset","/tagger.html","/native-tageditor.html","/dataset-editor.html","/tageditor.html"]},{key:"tasks",to:"/tasks",icon:v4,match:["/tasks","/task.html","/tensorboard.html"]},{key:"settings",to:"/settings",icon:N4,match:["/settings","/other/"]}],l=P(()=>t.path);function c(u){return u.some(f=>l.value.startsWith(f))}return pt(()=>o.loadVersion()),(u,f)=>{const d=dn("el-icon"),p=dn("RouterLink"),g=dn("RouterView");return V(),ie("div",RA,[ce("header",NA,[ce("button",{class:"icon-button","aria-label":w(n)("nav.openNav"),onClick:f[0]||(f[0]=h=>r.value=!r.value)},[xe(d,null,{default:me(()=>[xe(w(C4))]),_:1})],8,MA),xe(p,{class:"mobile-brand",to:"/"},{default:me(()=>[Xa(st(w(n)("app.brand")),1)]),_:1})]),r.value?(V(),ie("button",{key:0,class:"sidebar-mask","aria-label":w(n)("nav.closeNav"),onClick:f[1]||(f[1]=h=>r.value=!1)},null,8,FA)):be("",!0),ce("aside",{class:ae(["sidebar",{"is-open":r.value}])},[xe(p,{class:"brand",to:"/",onClick:f[2]||(f[2]=h=>r.value=!1)},{default:me(()=>[f[5]||(f[5]=ce("span",{class:"brand-mark"},"N",-1)),ce("span",null,[ce("strong",null,st(w(n)("app.brand")),1),ce("small",null,st(a.value),1)])]),_:1}),ce("nav",{class:"navigation","aria-label":w(n)("nav.mainAria")},[(V(),ie(Qe,null,cs(i,h=>xe(p,{key:h.key,to:h.to,class:ae(["nav-link",{active:c(h.match)}]),onClick:f[3]||(f[3]=v=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[(V(),ye(vt(h.icon)))]),_:2},1024),ce("span",null,st(w(n)(`nav.${h.key}`)),1)]),_:2},1032,["to","class"])),64))],8,DA),ce("footer",$A,[xe(p,{to:"/help/guide.html",class:"nav-link help-link",onClick:f[4]||(f[4]=h=>r.value=!1)},{default:me(()=>[xe(d,null,{default:me(()=>[xe(w(P4))]),_:1}),ce("span",null,st(w(n)("nav.help")),1)]),_:1}),f[6]||(f[6]=ce("a",{href:"https://github.com/wochenlong/lora-scripts-next",target:"_blank",rel:"noreferrer",class:"github-link"},"GitHub",-1))])],2),ce("main",VA,[xe(g)])])}}}),HA=Ee({__name:"App",setup(e){const{locale:t}=ia(),n=P(()=>xA(t.value));return(r,o)=>{const s=dn("el-config-provider");return V(),ye(s,{locale:n.value},{default:me(()=>[xe(BA)]),_:1},8,["locale"])}}}),UA="modulepreload",jA=function(e){return"/"+e},Lp={},Zn=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let l=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),i=a?.nonce||a?.getAttribute("nonce");o=l(n.map(c=>{if(c=jA(c),c in Lp)return;Lp[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":UA,u||(d.as="script"),d.crossOrigin="",d.href=c,i&&d.setAttribute("nonce",i),document.head.appendChild(d),u)return new Promise((p,g)=>{d.addEventListener("load",p),d.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(a){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=a,window.dispatchEvent(i),!i.defaultPrevented)throw a}return o.then(a=>{for(const i of a||[])i.status==="rejected"&&s(i.reason);return t().catch(s)})},WA=()=>Zn(()=>import("./HomePage-qalEt5mU.js"),__vite__mapDeps([0,1])),Ip=()=>Zn(()=>import("./IntegrationPage-CefHnPho.js"),[]),zA=()=>Zn(()=>import("./NotFoundPage-BQmyvMef.js"),[]),KA=()=>Zn(()=>import("./TasksPage-xwxx8Gct.js"),__vite__mapDeps([2,3,4,5])),GA=()=>Zn(()=>import("./ToolsPage-C0sSOLKL.js"),__vite__mapDeps([6,3])),Pp=()=>Zn(()=>import("./DatasetPage-CoK9ZAdm.js"),__vite__mapDeps([7,3,4,8])),YA=()=>Zn(()=>import("./TrainingWorkbenchPage-C86jNxDA.js"),__vite__mapDeps([9,3,4,10,8,5])),Na=()=>Zn(()=>import("./SettingsContainerPage-CEKsAhum.js"),__vite__mapDeps([11,3,1,4,10])),qA=()=>Zn(()=>import("./GuidePage-m1i_JIjs.js"),[]),XA=()=>Zn(()=>import("./ParamsPage-DGNkcvK9.js"),[]),rr=(e,t,n)=>({path:"/training",query:{model:e,engine:t,target:n}}),JA=[{path:"/",component:WA,meta:{titleKey:"app.brand"}},{path:"/training",component:YA,meta:{titleKey:"training.title"}},{path:"/dataset",redirect:"/dataset/tagger"},{path:"/dataset/editor",component:Pp,props:{tab:"editor"},meta:{titleKey:"dataset.title"}},{path:"/dataset/tagger",component:Pp,props:{tab:"tagger"},meta:{titleKey:"dataset.title"}},{path:"/tasks",component:KA,meta:{titleKey:"tasks.title"}},{path:"/settings",redirect:"/settings/ui"},{path:"/settings/ui",component:Na,props:{tab:"ui"},meta:{titleKey:"settings.title"}},{path:"/settings/engines",component:Na,props:{tab:"engines"},meta:{titleKey:"settings.title"}},{path:"/settings/about",component:Na,props:{tab:"about"},meta:{titleKey:"settings.title"}},{path:"/settings/changelog",component:Na,props:{tab:"changelog"},meta:{titleKey:"settings.title"}},{path:"/help/guide.html",component:qA,meta:{titleKey:"guide.title"}},{path:"/lora/index.html",redirect:"/training"},{path:"/lora/basic.html",redirect:()=>rr("sd15","kohya","lora")},{path:"/lora/master.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/sdxl.html",redirect:()=>rr("sdxl","kohya","lora")},{path:"/lora/flux.html",redirect:()=>rr("flux","kohya","lora")},{path:"/lora/sd3.html",redirect:()=>rr("anima","kohya","lora")},{path:"/lora/anima-fast.html",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-fast",redirect:()=>rr("anima","anima-fast","lora")},{path:"/lora/anima-finetune.html",redirect:()=>rr("anima","kohya","finetune")},{path:"/dreambooth/index.html",redirect:()=>rr("sdxl","kohya","finetune")},{path:"/tagger.html",redirect:"/dataset/tagger"},{path:"/native-tageditor.html",redirect:"/dataset/editor"},{path:"/dataset-editor.html",redirect:"/dataset/editor"},{path:"/task.html",redirect:"/tasks"},{path:"/other/settings.html",redirect:"/settings/ui"},{path:"/other/about.html",redirect:"/settings/about"},{path:"/other/changelog.html",redirect:"/settings/changelog"},{path:"/tensorboard.html",component:Ip,props:{title:"TensorBoard",src:"/proxy/tensorboard/",configurable:!0},meta:{title:"TensorBoard"}},{path:"/lora/tools.html",component:GA,meta:{titleKey:"tools.title"}},{path:"/lora/params.html",component:XA,meta:{titleKey:"paramsPage.title"}},{path:"/tageditor.html",component:Ip,props:{titleKey:"integration.legacyTagEditor",src:"/proxy/tageditor/"},meta:{titleKey:"integration.legacyTagEditor"}},{path:"/:pathMatch(.*)*",component:zA,meta:{titleKey:"notFound.title"}}],S0=yA({history:J6(),routes:JA,scrollBehavior:()=>({top:0})});S0.afterEach(e=>{const t=typeof e.meta.titleKey=="string"?e.meta.titleKey:"app.brand";document.title=`${fr.global.t(t)} | ${fr.global.t("app.brand")}`});const T0=tm(HA);for(const e of[NS,hS,NT,ft,wg,HT,hT,pT,ZT])T0.component(e.name,e);T0.directive("loading",bu).use(ry()).use(S0).use(fr).mount("#app");export{bt as $,LA as A,Ln as B,nO as C,Jt as D,eO as E,Qe as F,IA as G,jl as H,tO as I,cy as J,fr as K,go as L,lO as M,iO as N,Ce as O,hO as P,Vv as Q,hA as R,ZA as S,_A as T,kA as U,CA as V,SA as W,w0 as X,mO as Y,sO as Z,Vo as _,ce as a,UT as a0,uO as a1,ft as a2,ET as a3,wg as a4,yg as a5,NS as a6,cS as a7,Ci as a8,iu as a9,gn as aA,th as aB,gr as aC,Cn as aD,Kf as aE,dS as aF,Ur as aG,aO as aH,Wo as aa,xw as ab,ge as ac,De as ad,Fw as ae,qs as af,fO as ag,Ym as ah,aa as ai,vt as aj,Zs as ak,tt as al,pr as am,rO as an,He as ao,Ie as ap,no as aq,xt as ar,Br as as,rt as at,he as au,nt as av,at as aw,po as ax,Tn as ay,DE as az,w as b,ie as c,Ee as d,xe as e,Xa as f,QA as g,P as h,dn as i,ye as j,Te as k,Lt as l,ae as m,yt as n,V as o,be as p,Wt as q,cs as r,re as s,st as t,ia as u,Ye as v,me as w,uy as x,pt as y,cO as z}; diff --git a/frontend/dist/assets/prefs-L1LFxgf4.js b/frontend/dist/assets/prefs-hyqYnVPm.js similarity index 53% rename from frontend/dist/assets/prefs-L1LFxgf4.js rename to frontend/dist/assets/prefs-hyqYnVPm.js index 19af8635..f468c329 100644 --- a/frontend/dist/assets/prefs-L1LFxgf4.js +++ b/frontend/dist/assets/prefs-hyqYnVPm.js @@ -1 +1 @@ -import{G as n}from"./index-BlvrX0Zy.js";const r={status:()=>n("/api/plugins/anima-lora/status"),install:()=>n("/api/plugins/anima-lora/install",{method:"POST",body:JSON.stringify({dry_run:!1})}),repair:()=>n("/api/plugins/anima-lora/repair",{method:"POST",body:JSON.stringify({dry_run:!1})})};function f(a){return a==="ready"?"ready":a==="installing"?"installing":a==="auditing"?"auditing":a==="broken"?"broken":a==="disabled"?"disabled":a==="installed_unverified"?"installed_unverified":a==="not_installed"?"not_installed":"unknown"}function i(a){const e=a.runtime||{};return{id:"anima-fast",state:f(a.state),featureEnabled:a.feature_enabled!==!1,message:a.message,facts:a.facts,runtime:{python:e.python,environmentPath:e.environment_path,version:e.version,cuda:e.cuda,animaRoot:e.anima_root,externalRuntimeExists:e.external_runtime_exists},raw:a}}function s(a){return{alreadyReady:a.already_ready,taskId:a.task_id,logStream:a.log_stream||a.log_stream_url,progressStream:a.progress_stream||a.progress_stream_url,status:a.status?i(a.status):void 0}}const p={async status(a){return a==="kohya"?{id:"kohya",state:"ready",featureEnabled:!0}:a==="musubi"?{id:"musubi",state:"coming_soon",featureEnabled:!1}:a==="anima-fast"?i(await r.status()):{id:a,state:"unknown",featureEnabled:!1}},async list(){const a=["kohya","anima-fast","musubi"];return Promise.all(a.map(e=>this.status(e)))},async install(a){if(a!=="anima-fast")throw new Error(`Install is not supported for engine: ${a}`);return s(await r.install())},async repair(a){if(a!=="anima-fast")throw new Error(`Repair is not supported for engine: ${a}`);return s(await r.repair())},async uninstall(a){if(a!=="anima-fast")throw new Error(`Uninstall is not supported for engine: ${a}`);const e=await n("/api/plugins/anima-lora/uninstall",{method:"POST",body:"{}"});return e.status?i(e.status):{id:"anima-fast",state:"not_installed",featureEnabled:!0}}},o="nt.training.enginePrefs";function l(){try{const a=JSON.parse(localStorage.getItem(o)||"{}");return!a||typeof a!="object"?{rememberLast:!0}:{rememberLast:a.rememberLast!==!1,lastByModel:a.lastByModel&&typeof a.lastByModel=="object"?a.lastByModel:{}}}catch{return{rememberLast:!0}}}function m(a){localStorage.setItem(o,JSON.stringify(a))}function y(a,e,u){const t=l();t.rememberLast&&(t.lastByModel={...t.lastByModel||{},[a]:{engine:e,target:u}},m(t))}function c(a){const e=l();if(e.rememberLast)return e.lastByModel?.[a]}export{l as a,p as e,c as l,y as r,m as w}; +import{G as n}from"./index-BoQWc9mA.js";const r={status:()=>n("/api/plugins/anima-lora/status"),install:()=>n("/api/plugins/anima-lora/install",{method:"POST",body:JSON.stringify({dry_run:!1})}),repair:()=>n("/api/plugins/anima-lora/repair",{method:"POST",body:JSON.stringify({dry_run:!1})})};function f(a){return a==="ready"?"ready":a==="installing"?"installing":a==="auditing"?"auditing":a==="broken"?"broken":a==="disabled"?"disabled":a==="installed_unverified"?"installed_unverified":a==="not_installed"?"not_installed":"unknown"}function s(a){const e=a.runtime||{};return{id:"anima-fast",state:f(a.state),featureEnabled:a.feature_enabled!==!1,message:a.message,facts:a.facts,runtime:{python:e.python,environmentPath:e.environment_path,version:e.version,cuda:e.cuda,animaRoot:e.anima_root,externalRuntimeExists:e.external_runtime_exists},raw:a}}function l(a){return{alreadyReady:a.already_ready,taskId:a.task_id,logStream:a.log_stream||a.log_stream_url,progressStream:a.progress_stream||a.progress_stream_url,status:a.status?s(a.status):void 0}}const p={async status(a){return a==="kohya"?{id:"kohya",state:"ready",featureEnabled:!0}:a==="musubi"?{id:"musubi",state:"coming_soon",featureEnabled:!1}:a==="anima-fast"?s(await r.status()):{id:a,state:"unknown",featureEnabled:!1}},async list(){const a=["kohya","anima-fast","musubi"];return Promise.all(a.map(e=>this.status(e)))},async install(a){if(a!=="anima-fast")throw new Error(`Install is not supported for engine: ${a}`);return l(await r.install())},async repair(a){if(a!=="anima-fast")throw new Error(`Repair is not supported for engine: ${a}`);return l(await r.repair())},async uninstall(a){if(a!=="anima-fast")throw new Error(`Uninstall is not supported for engine: ${a}`);const e=await n("/api/plugins/anima-lora/uninstall",{method:"POST",body:"{}"});return e.status?s(e.status):{id:"anima-fast",state:"not_installed",featureEnabled:!0}}},u="nt.training.enginePrefs";function i(){try{const a=JSON.parse(localStorage.getItem(u)||"{}");return!a||typeof a!="object"?{rememberLast:!0}:{rememberLast:a.rememberLast!==!1,lastByModel:a.lastByModel&&typeof a.lastByModel=="object"?a.lastByModel:{},last:a.last&&typeof a.last=="object"?a.last:void 0}}catch{return{rememberLast:!0}}}function m(a){localStorage.setItem(u,JSON.stringify(a))}function c(a,e,o){const t=i();t.rememberLast&&(t.lastByModel={...t.lastByModel||{},[a]:{engine:e,target:o}},t.last={model:a,engine:e,target:o},m(t))}function y(a){const e=i();if(e.rememberLast)return e.lastByModel?.[a]}function g(){const a=i();if(a.rememberLast)return a.last}export{y as a,i as b,p as e,g as l,c as r,m as w}; diff --git a/frontend/dist/assets/schemas-BVh9ipN3.js b/frontend/dist/assets/schemas-QXoCLd-0.js similarity index 83% rename from frontend/dist/assets/schemas-BVh9ipN3.js rename to frontend/dist/assets/schemas-QXoCLd-0.js index 88576160..9fad9399 100644 --- a/frontend/dist/assets/schemas-BVh9ipN3.js +++ b/frontend/dist/assets/schemas-QXoCLd-0.js @@ -1 +1 @@ -import{G as s,A as e}from"./index-BlvrX0Zy.js";const p={hashes:()=>s("/api/schemas/hashes"),all:()=>s("/api/schemas/all"),async graphicCards(){const a=await e("/api/graphic_cards",{allowPending:!0});return a.status==="success"?a.data?.cards??[]:[]},pickFile:a=>s(`/api/pick_file?picker_type=${encodeURIComponent(a)}`),files:a=>s(`/api/get_files?pick_type=${encodeURIComponent(a)}`)};export{p as s}; +import{G as s,A as e}from"./index-BoQWc9mA.js";const p={hashes:()=>s("/api/schemas/hashes"),all:()=>s("/api/schemas/all"),async graphicCards(){const a=await e("/api/graphic_cards",{allowPending:!0});return a.status==="success"?a.data?.cards??[]:[]},pickFile:a=>s(`/api/pick_file?picker_type=${encodeURIComponent(a)}`),files:a=>s(`/api/get_files?pick_type=${encodeURIComponent(a)}`)};export{p as s}; diff --git a/frontend/dist/assets/tasks-CTZb2r1_.js b/frontend/dist/assets/tasks-E6KkxTMs.js similarity index 86% rename from frontend/dist/assets/tasks-CTZb2r1_.js rename to frontend/dist/assets/tasks-E6KkxTMs.js index 859c6a00..fa86e55f 100644 --- a/frontend/dist/assets/tasks-CTZb2r1_.js +++ b/frontend/dist/assets/tasks-E6KkxTMs.js @@ -1 +1 @@ -import{G as s,A as p,J as f,s as n,h as g,K as k}from"./index-BlvrX0Zy.js";const d=a=>`/api/train/log/stream/${encodeURIComponent(a)}`,c={list:async()=>(await s("/api/tasks")).tasks,terminate:a=>p(`/api/tasks/terminate/${encodeURIComponent(a)}`),previews:a=>s(`/api/tasks/${encodeURIComponent(a)}/previews`),metrics:a=>s(`/api/tasks/${encodeURIComponent(a)}/metrics`),logTail:(a,e=240)=>s(`/api/train/log/tail/${encodeURIComponent(a)}?limit=${e}`)},y=f("tasks",()=>{const a=n([]),e=n(!1),i=n(""),o=n(""),u=g(()=>a.value.filter(t=>t.status==="RUNNING"));async function r(t={}){t.silent||(e.value=!0);try{a.value=await c.list(),i.value=""}catch(l){i.value=l instanceof Error?l.message:k.global.t("tasks.listLoadFail")}finally{e.value=!1}}async function m(t){o.value=t;try{await c.terminate(t),await r({silent:!0})}finally{o.value=""}}return{tasks:a,runningTasks:u,loading:e,error:i,terminatingId:o,refresh:r,terminate:m}});export{c as a,d as t,y as u}; +import{G as s,A as p,J as f,s as n,h as g,K as k}from"./index-BoQWc9mA.js";const d=a=>`/api/train/log/stream/${encodeURIComponent(a)}`,c={list:async()=>(await s("/api/tasks")).tasks,terminate:a=>p(`/api/tasks/terminate/${encodeURIComponent(a)}`),previews:a=>s(`/api/tasks/${encodeURIComponent(a)}/previews`),metrics:a=>s(`/api/tasks/${encodeURIComponent(a)}/metrics`),logTail:(a,e=240)=>s(`/api/train/log/tail/${encodeURIComponent(a)}?limit=${e}`)},y=f("tasks",()=>{const a=n([]),e=n(!1),i=n(""),o=n(""),u=g(()=>a.value.filter(t=>t.status==="RUNNING"));async function r(t={}){t.silent||(e.value=!0);try{a.value=await c.list(),i.value=""}catch(l){i.value=l instanceof Error?l.message:k.global.t("tasks.listLoadFail")}finally{e.value=!1}}async function m(t){o.value=t;try{await c.terminate(t),await r({silent:!0})}finally{o.value=""}}return{tasks:a,runningTasks:u,loading:e,error:i,terminatingId:o,refresh:r,terminate:m}});export{c as a,d as t,y as u}; diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 8a8cb466..2f08f602 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -11,10 +11,10 @@ const systemDark = window.matchMedia?.("(prefers-color-scheme: dark)").matches document.documentElement.classList.toggle("dark", mode === "dark" || (mode !== "light" && systemDark)) - + -
+
From 302b8a42344c392cbd43f3037ccf3623f1d1e087 Mon Sep 17 00:00:00 2001 From: "xixun.bu" Date: Mon, 10 Aug 2026 21:15:25 +0800 Subject: [PATCH 3/6] feat(frontend): hover-pinned schema toc with loading placeholder --- frontend/src/components/SectionToc.test.ts | 47 +++++++++++------- frontend/src/components/SectionToc.vue | 56 ++++++---------------- frontend/src/pages/TrainingPage.vue | 7 +-- frontend/src/styles/layout.css | 1 + 4 files changed, 49 insertions(+), 62 deletions(-) diff --git a/frontend/src/components/SectionToc.test.ts b/frontend/src/components/SectionToc.test.ts index 5ade7acd..528bb935 100644 --- a/frontend/src/components/SectionToc.test.ts +++ b/frontend/src/components/SectionToc.test.ts @@ -1,6 +1,6 @@ // @vitest-environment jsdom import { mount } from "@vue/test-utils" -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" +import { describe, expect, it, vi } from "vitest" import SectionToc from "./SectionToc.vue" import { i18n } from "../i18n" @@ -9,42 +9,53 @@ const sections = [ { id: "network", title: "网络设置" }, ] -describe("SectionToc", () => { - beforeEach(() => { - vi.useFakeTimers() - }) - afterEach(() => { - vi.useRealTimers() - }) +function mountToc(props: { sections?: { id: string; title: string }[] } = {}) { + return mount(SectionToc, { props: { sections: sections, ...props }, global: { plugins: [i18n] } }) +} - it("starts collapsed and expands on seam click", async () => { - const wrapper = mount(SectionToc, { props: { sections }, global: { plugins: [i18n] } }) +describe("SectionToc", () => { + it("opens on hover and stays open until the pointer leaves", async () => { + const wrapper = mountToc() expect(wrapper.classes()).not.toContain("open") - await wrapper.get(".toc-seam").trigger("click") + await wrapper.trigger("mouseenter") expect(wrapper.classes()).toContain("open") expect(wrapper.text()).toContain("基础参数") expect(wrapper.text()).toContain("网络设置") + await wrapper.trigger("mouseleave") + expect(wrapper.classes()).not.toContain("open") + }) + + it("pins open on seam click and ignores mouseleave until toggled again", async () => { + const wrapper = mountToc() + await wrapper.get(".toc-seam").trigger("click") + expect(wrapper.classes()).toContain("open") + await wrapper.trigger("mouseenter") + await wrapper.trigger("mouseleave") + expect(wrapper.classes()).toContain("open") await wrapper.get(".toc-panel header button").trigger("click") expect(wrapper.classes()).not.toContain("open") }) - it("navigates without closing immediately, then auto-collapses after idle", async () => { + it("navigates on item click without closing a pinned panel", async () => { const target = document.createElement("div") target.id = "sec-network" const scrollIntoView = vi.fn() target.scrollIntoView = scrollIntoView document.body.appendChild(target) - const wrapper = mount(SectionToc, { props: { sections }, global: { plugins: [i18n] } }) + const wrapper = mountToc() await wrapper.get(".toc-seam").trigger("click") const items = wrapper.findAll(".toc-item") await items[1].trigger("click") expect(scrollIntoView).toHaveBeenCalledWith({ behavior: "smooth", block: "start" }) expect(wrapper.classes()).toContain("open") - await vi.advanceTimersByTimeAsync(3499) - expect(wrapper.classes()).toContain("open") - await vi.advanceTimersByTimeAsync(1) - await wrapper.vm.$nextTick() - expect(wrapper.classes()).not.toContain("open") target.remove() }) + + it("stays closed and disabled when there are no sections yet", async () => { + const wrapper = mountToc({ sections: [] }) + expect(wrapper.classes()).toContain("empty") + expect(wrapper.get(".toc-seam").attributes("disabled")).toBeDefined() + await wrapper.trigger("mouseenter") + expect(wrapper.classes()).not.toContain("open") + }) }) diff --git a/frontend/src/components/SectionToc.vue b/frontend/src/components/SectionToc.vue index 3409f9b5..253a5443 100644 --- a/frontend/src/components/SectionToc.vue +++ b/frontend/src/components/SectionToc.vue @@ -1,59 +1,34 @@ @@ -88,8 +62,10 @@ onBeforeUnmount(() => {