From c34d861604ee06f75df13a79cd9e7110e1fff766 Mon Sep 17 00:00:00 2001 From: Harsh-2002 Date: Thu, 4 Jun 2026 12:50:05 +0000 Subject: [PATCH] fix(security): resolve real CodeQL findings + upgrade vulnerable frontend deps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Triaged all CodeQL + Dependabot alerts against the code; fixes the genuine ones, hardens one, and upgrades vulnerable deps. (Verified false-positives — backup extractor, kv alloc clamp, API-key SHA256, OAuth redirect_uri validation, logout deletion cookie — are left as-is and will be dismissed with reasons.) - path-injection (functions.go rollback, builder/activate.go): code_hash from the request body flowed into a versions/ filesystem path. Validate it is a 64-char lowercase-hex sha256 (its only legitimate shape) before use; defensive re-check in ActivateVersion. + builder/activate_test.go. - zipslip (builder.go extractTarGz): add the joined-path-under-destDir guard the backup extractor already uses (defense-in-depth; deploy tarballs). - biased-random (Onboarding.vue): replace `crypto % n` in the password generator + Fisher-Yates shuffle with unbiased rejection sampling. - CI: add least-privilege `permissions: contents: read` to cli-e2e/e2e/install-e2e workflows (clears 10 actions/missing-workflow-permissions). - deps: bump axios 1.15→1.17 + npm audit fix (follow-redirects, postcss); `npm audit` now reports 0 vulnerabilities. Supersedes Dependabot PR #11. go build/vet/test green; npm audit 0; ui rebuilt + re-embedded. --- .github/workflows/cli-e2e.yml | 4 ++ .github/workflows/e2e.yml | 4 ++ .github/workflows/install-e2e.yml | 4 ++ backend/internal/builder/activate.go | 20 +++++++ backend/internal/builder/activate_test.go | 35 +++++++++++ backend/internal/builder/builder.go | 6 ++ backend/internal/server/handlers/functions.go | 23 ++++++++ .../assets/{AI-CRINc2rq.js => AI-BV7LwjfA.js} | 2 +- ...ivity-CUYXvjyS.js => Activity-DN8mbB-1.js} | 2 +- ...piKeys-D_0i_tEn.js => ApiKeys-p9xM5dML.js} | 2 +- ...nnels-BVCLEepx.js => Channels-BrmOc5pT.js} | 2 +- ...tor-1BBBEH1J.js => CodeEditor-Cyik7IS9.js} | 2 +- ...nJobs-C1Lm7OXf.js => CronJobs-CHCHOKdI.js} | 2 +- ...oard-DdCcITCh.js => Dashboard-C27lk4MJ.js} | 2 +- ...ts-HGMJdPkO.js => Deployments-DjklWQL1.js} | 2 +- .../{Docs-D8EdWzOh.js => Docs-DVOuRCTb.js} | 2 +- ...{Drawer-C3AFLOZb.js => Drawer-D-dO6A0-.js} | 2 +- ...{Editor-CGt5HsZM.js => Editor--3DRfIJD.js} | 6 +- ...ewall-BXu8MFSv.js => Firewall-pkdJLyXh.js} | 2 +- ...f-B5S0Jfo_.js => FunctionDiff-B96TQktv.js} | 2 +- ...-ClWQkTrs.js => FunctionsList-BlLl9Ji5.js} | 2 +- ...ton-BgeMzwXv.js => IconButton-CnguiHlc.js} | 2 +- ...eKosJjA.js => InboundWebhooks-DXNQPsKe.js} | 2 +- .../{Input-i1hDoPmt.js => Input-RIxOCNDe.js} | 2 +- ...TKQA0zvQ.js => InvocationsLog-BWp_rnmb.js} | 2 +- .../{Jobs-BuEpd4mz.js => Jobs-CU8XnJK3.js} | 2 +- ...VStore-BJOrSxjD.js => KVStore-CfuA6xj9.js} | 2 +- .../{Login-YGsZM8PV.js => Login-DmrBAvpc.js} | 2 +- .../{Modal-jEhKmxZK.js => Modal-DRIalOH5.js} | 2 +- ...Found-BmRAxlxU.js => NotFound-CcZlcrLG.js} | 2 +- .../ui_dist/assets/Onboarding-CknTZuQK.js | 6 ++ .../ui_dist/assets/Onboarding-DOb5mnY3.js | 6 -- ...tings-DhV460vi.js => Settings-B47Vm5f4.js} | 2 +- ...ge-Cj_PlPFZ.js => StatusBadge-U9tC82MH.js} | 2 +- ...il-DlY0pIfy.js => TraceDetail-DTbv7Wsg.js} | 2 +- ...{Traces-Cr9wsEkz.js => Traces-CejEofjO.js} | 2 +- ...hooks-DwuKsY7O.js => Webhooks-DYEPaH1Y.js} | 2 +- .../assets/{ai-DmyZUAtW.js => ai-B3sDNfeq.js} | 2 +- ...eft-C4STwFAY.js => arrow-left-DiLFZEkx.js} | 2 +- ...open-CAmAR_fB.js => book-open-HLcwtuYW.js} | 2 +- .../server/ui_dist/assets/check-C4wzjDZN.js | 1 - .../server/ui_dist/assets/check-Cwg1V2MO.js | 1 + .../ui_dist/assets/chevron-down-BTZfO5Md.js | 1 - .../ui_dist/assets/chevron-down-BcMN1rmG.js | 1 + .../ui_dist/assets/chevron-right-BrmZtzfn.js | 1 + .../ui_dist/assets/chevron-right-OdWgNfOU.js | 1 - ...t-DJMgVejj.js => circle-alert-C9zmFbXU.js} | 2 +- ...{circle-DJWJGpv0.js => circle-u9aj3idX.js} | 2 +- .../{clock-BWp9w4xs.js => clock-C4Bm6ngE.js} | 2 +- .../{copy-CTb6u-fx.js => copy-DJiur09W.js} | 2 +- .../{flag-BkRqUrT5.js => flag-CL7jr_Ab.js} | 2 +- ...re-omnJl6y2.js => git-compare-5RUagJlb.js} | 2 +- .../{globe-CR2M7Azm.js => globe-DtEgS3Yf.js} | 2 +- .../server/ui_dist/assets/index-BMkkwZ9q.js | 10 ---- .../server/ui_dist/assets/index-fIeDYqWy.js | 10 ++++ ...ound-BccKiRw7.js => key-round-BR2mpVu3.js} | 2 +- .../{lock-Dpr2FIZ9.js => lock-D649KWfg.js} | 2 +- ...{pencil-DTkm5-NQ.js => pencil-IX2SrcHQ.js} | 2 +- .../{play-CPjfKIOc.js => play-CmOm4UFE.js} | 2 +- ...-cw-C7sR7ShF.js => refresh-cw-9T7Tp2vI.js} | 2 +- ...ccw-CsgWy1Bs.js => rotate-ccw-BYpihd4d.js} | 2 +- ...s-2-CcqGdzLw.js => settings-2-DcdHMrV8.js} | 2 +- ...k-sW6QCkG0.js => shield-check-BHGT5Xmy.js} | 2 +- ...rkles-BVQ_t_Q_.js => sparkles-B00DiY2I.js} | 2 +- ...pen-CsqFW8Ka.js => square-pen-BfULFvug.js} | 2 +- ...minal-DAVNGL0P.js => terminal-DWMuaXnV.js} | 2 +- ...rash-2-BXf2uqQH.js => trash-2-B2Wniuw-.js} | 2 +- ...iable-b2EnW52t.js => variable-C2-uCEoV.js} | 2 +- .../{zap-DvhWYa2n.js => zap-BoY-LImv.js} | 2 +- backend/internal/server/ui_dist/index.html | 2 +- frontend/package-lock.json | 58 +++++++++++++------ frontend/package.json | 2 +- frontend/src/views/Onboarding.vue | 16 ++++- 73 files changed, 225 insertions(+), 95 deletions(-) create mode 100644 backend/internal/builder/activate_test.go rename backend/internal/server/ui_dist/assets/{AI-CRINc2rq.js => AI-BV7LwjfA.js} (99%) rename backend/internal/server/ui_dist/assets/{Activity-CUYXvjyS.js => Activity-DN8mbB-1.js} (97%) rename backend/internal/server/ui_dist/assets/{ApiKeys-D_0i_tEn.js => ApiKeys-p9xM5dML.js} (96%) rename backend/internal/server/ui_dist/assets/{Channels-BVCLEepx.js => Channels-BrmOc5pT.js} (97%) rename backend/internal/server/ui_dist/assets/{CodeEditor-1BBBEH1J.js => CodeEditor-Cyik7IS9.js} (95%) rename backend/internal/server/ui_dist/assets/{CronJobs-C1Lm7OXf.js => CronJobs-CHCHOKdI.js} (98%) rename backend/internal/server/ui_dist/assets/{Dashboard-DdCcITCh.js => Dashboard-C27lk4MJ.js} (99%) rename backend/internal/server/ui_dist/assets/{Deployments-HGMJdPkO.js => Deployments-DjklWQL1.js} (95%) rename backend/internal/server/ui_dist/assets/{Docs-D8EdWzOh.js => Docs-DVOuRCTb.js} (99%) rename backend/internal/server/ui_dist/assets/{Drawer-C3AFLOZb.js => Drawer-D-dO6A0-.js} (96%) rename backend/internal/server/ui_dist/assets/{Editor-CGt5HsZM.js => Editor--3DRfIJD.js} (99%) rename backend/internal/server/ui_dist/assets/{Firewall-BXu8MFSv.js => Firewall-pkdJLyXh.js} (98%) rename backend/internal/server/ui_dist/assets/{FunctionDiff-B5S0Jfo_.js => FunctionDiff-B96TQktv.js} (99%) rename backend/internal/server/ui_dist/assets/{FunctionsList-ClWQkTrs.js => FunctionsList-BlLl9Ji5.js} (96%) rename backend/internal/server/ui_dist/assets/{IconButton-BgeMzwXv.js => IconButton-CnguiHlc.js} (94%) rename backend/internal/server/ui_dist/assets/{InboundWebhooks-CeKosJjA.js => InboundWebhooks-DXNQPsKe.js} (98%) rename backend/internal/server/ui_dist/assets/{Input-i1hDoPmt.js => Input-RIxOCNDe.js} (95%) rename backend/internal/server/ui_dist/assets/{InvocationsLog-TKQA0zvQ.js => InvocationsLog-BWp_rnmb.js} (97%) rename backend/internal/server/ui_dist/assets/{Jobs-BuEpd4mz.js => Jobs-CU8XnJK3.js} (96%) rename backend/internal/server/ui_dist/assets/{KVStore-BJOrSxjD.js => KVStore-CfuA6xj9.js} (98%) rename backend/internal/server/ui_dist/assets/{Login-YGsZM8PV.js => Login-DmrBAvpc.js} (95%) rename backend/internal/server/ui_dist/assets/{Modal-jEhKmxZK.js => Modal-DRIalOH5.js} (97%) rename backend/internal/server/ui_dist/assets/{NotFound-BmRAxlxU.js => NotFound-CcZlcrLG.js} (89%) create mode 100644 backend/internal/server/ui_dist/assets/Onboarding-CknTZuQK.js delete mode 100644 backend/internal/server/ui_dist/assets/Onboarding-DOb5mnY3.js rename backend/internal/server/ui_dist/assets/{Settings-DhV460vi.js => Settings-B47Vm5f4.js} (98%) rename backend/internal/server/ui_dist/assets/{StatusBadge-Cj_PlPFZ.js => StatusBadge-U9tC82MH.js} (79%) rename backend/internal/server/ui_dist/assets/{TraceDetail-DlY0pIfy.js => TraceDetail-DTbv7Wsg.js} (95%) rename backend/internal/server/ui_dist/assets/{Traces-Cr9wsEkz.js => Traces-CejEofjO.js} (95%) rename backend/internal/server/ui_dist/assets/{Webhooks-DwuKsY7O.js => Webhooks-DYEPaH1Y.js} (96%) rename backend/internal/server/ui_dist/assets/{ai-DmyZUAtW.js => ai-B3sDNfeq.js} (98%) rename backend/internal/server/ui_dist/assets/{arrow-left-C4STwFAY.js => arrow-left-DiLFZEkx.js} (60%) rename backend/internal/server/ui_dist/assets/{book-open-CAmAR_fB.js => book-open-HLcwtuYW.js} (76%) delete mode 100644 backend/internal/server/ui_dist/assets/check-C4wzjDZN.js create mode 100644 backend/internal/server/ui_dist/assets/check-Cwg1V2MO.js delete mode 100644 backend/internal/server/ui_dist/assets/chevron-down-BTZfO5Md.js create mode 100644 backend/internal/server/ui_dist/assets/chevron-down-BcMN1rmG.js create mode 100644 backend/internal/server/ui_dist/assets/chevron-right-BrmZtzfn.js delete mode 100644 backend/internal/server/ui_dist/assets/chevron-right-OdWgNfOU.js rename backend/internal/server/ui_dist/assets/{circle-alert-DJMgVejj.js => circle-alert-C9zmFbXU.js} (74%) rename backend/internal/server/ui_dist/assets/{circle-DJWJGpv0.js => circle-u9aj3idX.js} (76%) rename backend/internal/server/ui_dist/assets/{clock-BWp9w4xs.js => clock-C4Bm6ngE.js} (77%) rename backend/internal/server/ui_dist/assets/{copy-CTb6u-fx.js => copy-DJiur09W.js} (71%) rename backend/internal/server/ui_dist/assets/{flag-BkRqUrT5.js => flag-CL7jr_Ab.js} (74%) rename backend/internal/server/ui_dist/assets/{git-compare-omnJl6y2.js => git-compare-5RUagJlb.js} (86%) rename backend/internal/server/ui_dist/assets/{globe-CR2M7Azm.js => globe-DtEgS3Yf.js} (73%) delete mode 100644 backend/internal/server/ui_dist/assets/index-BMkkwZ9q.js create mode 100644 backend/internal/server/ui_dist/assets/index-fIeDYqWy.js rename backend/internal/server/ui_dist/assets/{key-round-BccKiRw7.js => key-round-BR2mpVu3.js} (81%) rename backend/internal/server/ui_dist/assets/{lock-Dpr2FIZ9.js => lock-D649KWfg.js} (68%) rename backend/internal/server/ui_dist/assets/{pencil-DTkm5-NQ.js => pencil-IX2SrcHQ.js} (76%) rename backend/internal/server/ui_dist/assets/{play-CPjfKIOc.js => play-CmOm4UFE.js} (65%) rename backend/internal/server/ui_dist/assets/{refresh-cw-C7sR7ShF.js => refresh-cw-9T7Tp2vI.js} (79%) rename backend/internal/server/ui_dist/assets/{rotate-ccw-CsgWy1Bs.js => rotate-ccw-BYpihd4d.js} (67%) rename backend/internal/server/ui_dist/assets/{settings-2-CcqGdzLw.js => settings-2-DcdHMrV8.js} (92%) rename backend/internal/server/ui_dist/assets/{shield-check-sW6QCkG0.js => shield-check-BHGT5Xmy.js} (79%) rename backend/internal/server/ui_dist/assets/{sparkles-BVQ_t_Q_.js => sparkles-B00DiY2I.js} (86%) rename backend/internal/server/ui_dist/assets/{square-pen-CsqFW8Ka.js => square-pen-BfULFvug.js} (79%) rename backend/internal/server/ui_dist/assets/{terminal-DAVNGL0P.js => terminal-DWMuaXnV.js} (59%) rename backend/internal/server/ui_dist/assets/{trash-2-BXf2uqQH.js => trash-2-B2Wniuw-.js} (80%) rename backend/internal/server/ui_dist/assets/{variable-b2EnW52t.js => variable-C2-uCEoV.js} (77%) rename backend/internal/server/ui_dist/assets/{zap-DvhWYa2n.js => zap-BoY-LImv.js} (75%) diff --git a/.github/workflows/cli-e2e.yml b/.github/workflows/cli-e2e.yml index 5d2bc52..3b5631b 100644 --- a/.github/workflows/cli-e2e.yml +++ b/.github/workflows/cli-e2e.yml @@ -8,6 +8,10 @@ name: cli-e2e # installer scripts themselves change, or on schedule, or on manual # dispatch — they no longer run on every CLI code change. +# Least-privilege default token (these jobs only read the repo). +permissions: + contents: read + on: # Source validation (unit + cross-build) runs on PRs. The install jobs # download the RELEASED CLI, so they run on release:published (against the diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 871d8a1..11298bb 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -4,6 +4,10 @@ # (real nsjail) self-skip in CI, where nested sandboxing is unavailable. name: e2e +# Least-privilege default token (these jobs only read the repo). +permissions: + contents: read + on: push: branches: [main, dev] diff --git a/.github/workflows/install-e2e.yml b/.github/workflows/install-e2e.yml index 821c338..50bb4a3 100644 --- a/.github/workflows/install-e2e.yml +++ b/.github/workflows/install-e2e.yml @@ -5,6 +5,10 @@ name: install-e2e # install scripts themselves) lives in ci.yml — this workflow assumes # the scripts pass lint and focuses on actually running them. +# Least-privilege default token (these jobs only read the repo). +permissions: + contents: read + on: # Runs AFTER a release publishes — these download the released binary, so # they must not run on main-push: during a release cut the old release is diff --git a/backend/internal/builder/activate.go b/backend/internal/builder/activate.go index 02abc5a..e5515aa 100644 --- a/backend/internal/builder/activate.go +++ b/backend/internal/builder/activate.go @@ -22,6 +22,12 @@ func ActivateVersion(dataDir, fnID, codeHash string) error { if codeHash == "" { return fmt.Errorf("activate: empty code hash") } + // codeHash becomes part of a filesystem path (versions/); it is + // always a sha256 hex digest. Reject anything else defensively so a + // traversal value can never reach the symlink target. + if !isHexHash(codeHash) { + return fmt.Errorf("activate: invalid code hash %q", codeHash) + } fnDir := filepath.Join(dataDir, "functions", fnID) target := filepath.Join("versions", codeHash) // relative; see comment above @@ -38,6 +44,20 @@ func ActivateVersion(dataDir, fnID, codeHash string) error { return nil } +// isHexHash reports whether s is a 64-char lowercase-hex sha256 digest. +func isHexHash(s string) bool { + if len(s) != 64 { + return false + } + for i := 0; i < len(s); i++ { + c := s[i] + if !((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) { + return false + } + } + return true +} + // ResolveActiveHash reads `/functions//current` and returns // the hash it points at, or "" if the symlink is missing or malformed. // Used by GC to know which version not to delete. diff --git a/backend/internal/builder/activate_test.go b/backend/internal/builder/activate_test.go new file mode 100644 index 0000000..51e52ad --- /dev/null +++ b/backend/internal/builder/activate_test.go @@ -0,0 +1,35 @@ +package builder + +import ( + "strings" + "testing" +) + +// TestActivateVersionRejectsBadHash ensures a traversal/garbage code hash never +// reaches the symlink target (path-injection defense). +func TestActivateVersionRejectsBadHash(t *testing.T) { + dir := t.TempDir() + bad := []string{"../../etc", "..", "abc", "ZZZ", strings.Repeat("g", 64), "/abs/path"} + for _, h := range bad { + if err := ActivateVersion(dir, "fn1", h); err == nil { + t.Errorf("ActivateVersion accepted invalid hash %q", h) + } + } + // A well-formed 64-hex hash passes validation (it then fails later only + // because the version dir doesn't exist, which is fine — not our concern). + good := strings.Repeat("a", 64) + if err := ActivateVersion(dir, "fn1", good); err != nil && strings.Contains(err.Error(), "invalid code hash") { + t.Errorf("ActivateVersion wrongly rejected a valid hash: %v", err) + } +} + +func TestIsHexHash(t *testing.T) { + if !isHexHash(strings.Repeat("a", 64)) { + t.Error("valid 64-hex rejected") + } + for _, s := range []string{"", "abc", strings.Repeat("A", 64), strings.Repeat("a", 63), "../" + strings.Repeat("a", 61)} { + if isHexHash(s) { + t.Errorf("isHexHash accepted invalid %q", s) + } + } +} diff --git a/backend/internal/builder/builder.go b/backend/internal/builder/builder.go index 90476dd..1874c34 100644 --- a/backend/internal/builder/builder.go +++ b/backend/internal/builder/builder.go @@ -341,6 +341,12 @@ func extractTarGz(archivePath, destDir string) error { } target := filepath.Join(destDir, cleanName) + // Defense-in-depth: the joined path must still live under destDir even + // after Clean (mirrors the backup extractor). + if target != filepath.Clean(destDir) && + !strings.HasPrefix(target, filepath.Clean(destDir)+string(os.PathSeparator)) { + return fmt.Errorf("path traversal in archive: %s", hdr.Name) + } switch hdr.Typeflag { case tar.TypeDir: diff --git a/backend/internal/server/handlers/functions.go b/backend/internal/server/handlers/functions.go index ef5a586..4b1d97a 100644 --- a/backend/internal/server/handlers/functions.go +++ b/backend/internal/server/handlers/functions.go @@ -133,6 +133,22 @@ var validRuntimes = map[string]bool{ func runtimeIsNode(r string) bool { return r == "node" } func runtimeIsPython(r string) bool { return r == "python" } +// isValidCodeHash reports whether s is a 64-char lowercase-hex sha256 digest — +// the exact shape every Orva code_hash has. Used to reject untrusted code_hash +// values before they reach a filesystem path (path-traversal defense). +func isValidCodeHash(s string) bool { + if len(s) != 64 { + return false + } + for i := 0; i < len(s); i++ { + c := s[i] + if !((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) { + return false + } + } + return true +} + // Create handles POST /api/v1/functions. func (h *FunctionHandler) Create(w http.ResponseWriter, r *http.Request) { reqID := r.Header.Get("X-Request-ID") @@ -871,6 +887,13 @@ func (h *FunctionHandler) Rollback(w http.ResponseWriter, r *http.Request) { respond.Error(w, http.StatusBadRequest, "VALIDATION", "deployment_id or code_hash is required", reqID) return } + // A code_hash from the request body flows into a filesystem path + // (versions/); enforce the format it always has (sha256 hex) so a + // crafted value like "../.." can't escape the function's versions dir. + if req.CodeHash != "" && !isValidCodeHash(req.CodeHash) { + respond.Error(w, http.StatusBadRequest, "VALIDATION", "code_hash must be 64 lowercase hex characters", reqID) + return + } // Serialize against deploys on the same fn. if h.FnLock != nil { diff --git a/backend/internal/server/ui_dist/assets/AI-CRINc2rq.js b/backend/internal/server/ui_dist/assets/AI-BV7LwjfA.js similarity index 99% rename from backend/internal/server/ui_dist/assets/AI-CRINc2rq.js rename to backend/internal/server/ui_dist/assets/AI-BV7LwjfA.js index 161fe66..4ef51ab 100644 --- a/backend/internal/server/ui_dist/assets/AI-CRINc2rq.js +++ b/backend/internal/server/ui_dist/assets/AI-BV7LwjfA.js @@ -1,4 +1,4 @@ -import{c as V,j as g,a as y,b as k,d as D,f as x,t as N,g as F,C as Uu,h as $,P as gu,k as q,_ as oe,F as O,p as ue,s as T,w as xu,r as S,M as Bt,D as Oe,E as ce,G as ju,n as I,H as _e,q as z,o as be,y as iu,I as le,T as Lt,J as Hu,K as We,L as Ot,N as $t,Q as Pt,S as qt,e as Zu,v as Gu,R as Ut,i as jt}from"./index-BMkkwZ9q.js";import{D as Vu}from"./Drawer-C3AFLOZb.js";import{D as Ht,u as $e}from"./ai-DmyZUAtW.js";import{P as Wu}from"./pencil-DTkm5-NQ.js";import{T as tu}from"./trash-2-BXf2uqQH.js";import{H as Z,j as Zt,p as Gt,a as Vt,b as Wt}from"./github-dark-BrynTfs3.js";import{c as Ku}from"./clipboard-CmSw2rR-.js";import{C as ye}from"./check-C4wzjDZN.js";import{C as Ju}from"./copy-CTb6u-fx.js";import{C as au}from"./chevron-down-BTZfO5Md.js";import{R as Qu}from"./rotate-ccw-CsgWy1Bs.js";import{Z as Kt}from"./zap-DvhWYa2n.js";import{S as Jt}from"./sparkles-BVQ_t_Q_.js";const Qt=V("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);const Xt=V("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);const Yt=V("ban",[["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const Xu=V("brain",[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]]);const en=V("chevrons-down-up",[["path",{d:"m7 20 5-5 5 5",key:"13a0gw"}],["path",{d:"m7 4 5 5 5-5",key:"1kwcof"}]]);const un=V("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);const tn=V("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]]);const Yu=V("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]]);const nn=V("panel-left",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]]);const rn=V("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);const on=V("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]),an={class:"flex h-16 shrink-0 items-center justify-between gap-3 border-b border-border px-4"},sn={class:"flex min-w-0 items-center gap-2"},cn={class:"truncate text-sm font-semibold tracking-tight text-white"},ln={class:"flex items-center gap-0.5"},dn={__name:"ChatHeader",props:{title:{type:String,default:"Assistant"},canExport:{type:Boolean,default:!1}},emits:["toggle-rail","export"],setup(e){return(u,t)=>(g(),y("header",an,[k("div",sn,[k("button",{class:"touch-expand-iconbtn -ml-1 rounded-md p-2 text-foreground-muted transition-colors hover:bg-surface-hover hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background md:hidden","aria-label":"Conversations",onClick:t[0]||(t[0]=n=>u.$emit("toggle-rail"))},[D(x(nn),{class:"h-4 w-4"})]),D(x(Yu),{class:"hidden h-4 w-4 shrink-0 text-foreground-muted md:block"}),k("h1",cn,N(e.title),1)]),k("div",ln,[e.canExport?(g(),y("button",{key:0,class:"touch-expand-iconbtn -mr-1 rounded-md p-2 text-foreground-muted transition-colors hover:bg-surface-hover hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background","aria-label":"Export conversation as Markdown",title:"Export conversation",onClick:t[1]||(t[1]=n=>u.$emit("export"))},[D(x(Ht),{class:"h-4 w-4"})])):F("",!0)])]))}},fn={class:"flex h-full flex-col"},bn={key:0,class:"flex h-16 shrink-0 items-center justify-between px-4 border-b border-border"},pn={class:"flex-1 overflow-y-auto scrollable p-2 space-y-0.5"},hn=["aria-current","onClick"],mn={class:"flex-1 truncate"},gn=["onClick"],xn=["onClick"],kn={key:1,class:"px-2.5 py-2 text-xs text-foreground-muted"},ku={__name:"ConversationRail",props:{embedded:{type:Boolean,default:!1}},emits:["select"],setup(e,{emit:u}){const t=$e(),n=Uu();async function r(c){const d=await n.prompt({title:"Rename conversation",defaultValue:c.title||"",placeholder:"Conversation name",confirmLabel:"Rename"});d!=null&&d.trim()&&t.renameConversation(c.id,d.trim())}async function o(c){await n.ask({title:"Delete conversation?",message:"This permanently deletes the conversation and all its messages.",danger:!0,confirmLabel:"Delete"})&&t.deleteConversation(c)}const a=u;function i(){t.newConversation(),a("select")}function s(c){t.openConversation(c),a("select")}return(c,d)=>(g(),y("div",fn,[e.embedded?F("",!0):(g(),y("div",bn,[d[1]||(d[1]=k("span",{class:"text-sm font-semibold tracking-tight text-white"},"Conversations",-1)),D(oe,{size:"xs",variant:"secondary",onClick:i},{default:$(()=>[D(x(gu),{class:"h-3.5 w-3.5"}),d[0]||(d[0]=q(" New ",-1))]),_:1})])),k("div",pn,[e.embedded?(g(),y("button",{key:0,class:"touch-expand-sm mb-1 flex w-full items-center gap-2 rounded-md border border-border px-2.5 py-2 text-left text-sm text-foreground transition-colors hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",onClick:i},[D(x(gu),{class:"h-3.5 w-3.5 shrink-0"}),d[2]||(d[2]=q(" New conversation ",-1))])):F("",!0),(g(!0),y(O,null,ue(x(t).conversations,f=>(g(),y("div",{key:f.id,class:T(["group flex w-full items-center gap-0.5 rounded-md pr-1 transition-colors",f.id===x(t).activeId?"bg-primary/15":"hover:bg-surface-hover"])},[k("button",{class:T(["touch-expand-sm flex min-w-0 flex-1 items-center gap-2 rounded-md px-2.5 py-2 text-left text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",f.id===x(t).activeId?"text-white":"text-foreground-muted group-hover:text-white"]),"aria-current":f.id===x(t).activeId?"page":void 0,onClick:b=>s(f.id)},[D(x(Yu),{class:"h-3.5 w-3.5 shrink-0 opacity-70"}),k("span",mn,N(f.title||"New conversation"),1)],10,hn),k("button",{type:"button",class:"touch-expand-xs shrink-0 rounded-md p-2 text-foreground-muted opacity-0 transition-opacity hover:bg-surface-hover hover:text-white focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary group-hover:opacity-100 max-md:opacity-100",title:"Rename conversation","aria-label":"Rename conversation",onClick:xu(b=>r(f),["stop"])},[D(x(Wu),{class:"h-3.5 w-3.5"})],8,gn),k("button",{type:"button",class:"touch-expand-xs shrink-0 rounded-md p-2 text-foreground-muted opacity-0 transition-opacity hover:bg-surface-hover hover:text-danger-fg focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary group-hover:opacity-100 max-md:opacity-100",title:"Delete conversation","aria-label":"Delete conversation",onClick:xu(b=>o(f.id),["stop"])},[D(x(tu),{class:"h-3.5 w-3.5"})],8,xn)],2))),128)),x(t).conversations.length?F("",!0):(g(),y("p",kn," No conversations yet. "))])]))}},_n={class:"text-center"},yn={class:"mx-auto mb-4 flex h-11 w-11 items-center justify-center rounded-xl bg-primary/15 text-primary"},vn={class:"mx-auto mt-6 grid max-w-xl gap-2 sm:grid-cols-2"},En=["onClick"],Cn={class:"line-clamp-2"},Dn={__name:"EmptyState",emits:["pick"],setup(e){const u=["How many functions do I have?","Which function ran most recently?","Any errors in the last 24 hours?","Show my most recent executions.","List my deployed functions.","Summarize today’s invocation errors.","Show failed deployments and why.","What’s my system health right now?","Show storage usage for my instance.","List my cron schedules.","Are any background jobs failing?","Check for failed webhook deliveries.","Which runtimes are available?","Show my slowest functions by duration.","Which functions have egress enabled?","List my secrets by name only.","Write a Python function that returns the current UTC time.","Write a Node function that echoes the request body.","Create an hourly cron schedule for a function.","Walk me through deploying a new function."];function t(r,o){const a=[...r];for(let i=a.length-1;i>0;i--){const s=Math.floor(Math.random()*(i+1));[a[i],a[s]]=[a[s],a[i]]}return a.slice(0,o)}const n=S(t(u,4));return(r,o)=>(g(),y("div",_n,[k("div",yn,[D(x(Bt),{class:"h-5 w-5"})]),o[0]||(o[0]=k("h2",{class:"text-lg font-semibold tracking-tight text-white"}," What would you like to do? ",-1)),o[1]||(o[1]=k("p",{class:"mx-auto mt-1.5 max-w-md text-sm leading-relaxed text-foreground-muted"}," Ask about your functions, logs, deployments, and operations. Or have me create, deploy, and invoke functions for you. ",-1)),k("div",vn,[(g(!0),y(O,null,ue(n.value,(a,i)=>(g(),y("button",{key:i,type:"button",class:"flex min-h-[4.25rem] items-center rounded-lg border border-border bg-surface/50 px-3.5 py-3 text-left text-[13px] leading-snug text-foreground-muted transition-colors hover:border-foreground-muted/40 hover:bg-surface-hover hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background",onClick:s=>r.$emit("pick",a)},[k("span",Cn,N(a),1)],8,En))),128))])]))}},_u={};function An(e){let u=_u[e];if(u)return u;u=_u[e]=[];for(let t=0;t<128;t++){const n=String.fromCharCode(t);u.push(n)}for(let t=0;t=55296&&d<=57343?r+="���":r+=String.fromCharCode(d),o+=6;continue}}if((i&248)===240&&o+91114111?r+="����":(f-=65536,r+=String.fromCharCode(55296+(f>>10),56320+(f&1023))),o+=9;continue}}r+="�"}return r})}pe.defaultChars=";/?:@&=+$,#";pe.componentChars="";const yu={};function wn(e){let u=yu[e];if(u)return u;u=yu[e]=[];for(let t=0;t<128;t++){const n=String.fromCharCode(t);/^[0-9a-z]$/i.test(n)?u.push(n):u.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2))}for(let t=0;t"u"&&(t=!0);const n=wn(u);let r="";for(let o=0,a=e.length;o=55296&&i<=57343){if(i>=55296&&i<=56319&&o+1=56320&&s<=57343){r+=encodeURIComponent(e[o]+e[o+1]),o++;continue}}r+="%EF%BF%BD";continue}r+=encodeURIComponent(e[o])}return r}we.defaultChars=";/?:@&=+$,-_.!~*'()#";we.componentChars="-_.!~*'()";function su(e){let u="";return u+=e.protocol||"",u+=e.slashes?"//":"",u+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?u+="["+e.hostname+"]":u+=e.hostname||"",u+=e.port?":"+e.port:"",u+=e.pathname||"",u+=e.search||"",u+=e.hash||"",u}function ze(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}const Fn=/^([a-z0-9.+-]+:)/i,Sn=/:[0-9]*$/,Tn=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Mn=["<",">",'"',"`"," ","\r",` +import{c as V,j as g,a as y,b as k,d as D,f as x,t as N,g as F,C as Uu,h as $,P as gu,k as q,_ as oe,F as O,p as ue,s as T,w as xu,r as S,M as Bt,D as Oe,E as ce,G as ju,n as I,H as _e,q as z,o as be,y as iu,I as le,T as Lt,J as Hu,K as We,L as Ot,N as $t,Q as Pt,S as qt,e as Zu,v as Gu,R as Ut,i as jt}from"./index-fIeDYqWy.js";import{D as Vu}from"./Drawer-D-dO6A0-.js";import{D as Ht,u as $e}from"./ai-B3sDNfeq.js";import{P as Wu}from"./pencil-IX2SrcHQ.js";import{T as tu}from"./trash-2-B2Wniuw-.js";import{H as Z,j as Zt,p as Gt,a as Vt,b as Wt}from"./github-dark-BrynTfs3.js";import{c as Ku}from"./clipboard-CmSw2rR-.js";import{C as ye}from"./check-Cwg1V2MO.js";import{C as Ju}from"./copy-DJiur09W.js";import{C as au}from"./chevron-down-BcMN1rmG.js";import{R as Qu}from"./rotate-ccw-BYpihd4d.js";import{Z as Kt}from"./zap-BoY-LImv.js";import{S as Jt}from"./sparkles-B00DiY2I.js";const Qt=V("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);const Xt=V("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);const Yt=V("ban",[["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const Xu=V("brain",[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]]);const en=V("chevrons-down-up",[["path",{d:"m7 20 5-5 5 5",key:"13a0gw"}],["path",{d:"m7 4 5 5 5-5",key:"1kwcof"}]]);const un=V("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);const tn=V("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]]);const Yu=V("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]]);const nn=V("panel-left",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]]);const rn=V("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);const on=V("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]),an={class:"flex h-16 shrink-0 items-center justify-between gap-3 border-b border-border px-4"},sn={class:"flex min-w-0 items-center gap-2"},cn={class:"truncate text-sm font-semibold tracking-tight text-white"},ln={class:"flex items-center gap-0.5"},dn={__name:"ChatHeader",props:{title:{type:String,default:"Assistant"},canExport:{type:Boolean,default:!1}},emits:["toggle-rail","export"],setup(e){return(u,t)=>(g(),y("header",an,[k("div",sn,[k("button",{class:"touch-expand-iconbtn -ml-1 rounded-md p-2 text-foreground-muted transition-colors hover:bg-surface-hover hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background md:hidden","aria-label":"Conversations",onClick:t[0]||(t[0]=n=>u.$emit("toggle-rail"))},[D(x(nn),{class:"h-4 w-4"})]),D(x(Yu),{class:"hidden h-4 w-4 shrink-0 text-foreground-muted md:block"}),k("h1",cn,N(e.title),1)]),k("div",ln,[e.canExport?(g(),y("button",{key:0,class:"touch-expand-iconbtn -mr-1 rounded-md p-2 text-foreground-muted transition-colors hover:bg-surface-hover hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background","aria-label":"Export conversation as Markdown",title:"Export conversation",onClick:t[1]||(t[1]=n=>u.$emit("export"))},[D(x(Ht),{class:"h-4 w-4"})])):F("",!0)])]))}},fn={class:"flex h-full flex-col"},bn={key:0,class:"flex h-16 shrink-0 items-center justify-between px-4 border-b border-border"},pn={class:"flex-1 overflow-y-auto scrollable p-2 space-y-0.5"},hn=["aria-current","onClick"],mn={class:"flex-1 truncate"},gn=["onClick"],xn=["onClick"],kn={key:1,class:"px-2.5 py-2 text-xs text-foreground-muted"},ku={__name:"ConversationRail",props:{embedded:{type:Boolean,default:!1}},emits:["select"],setup(e,{emit:u}){const t=$e(),n=Uu();async function r(c){const d=await n.prompt({title:"Rename conversation",defaultValue:c.title||"",placeholder:"Conversation name",confirmLabel:"Rename"});d!=null&&d.trim()&&t.renameConversation(c.id,d.trim())}async function o(c){await n.ask({title:"Delete conversation?",message:"This permanently deletes the conversation and all its messages.",danger:!0,confirmLabel:"Delete"})&&t.deleteConversation(c)}const a=u;function i(){t.newConversation(),a("select")}function s(c){t.openConversation(c),a("select")}return(c,d)=>(g(),y("div",fn,[e.embedded?F("",!0):(g(),y("div",bn,[d[1]||(d[1]=k("span",{class:"text-sm font-semibold tracking-tight text-white"},"Conversations",-1)),D(oe,{size:"xs",variant:"secondary",onClick:i},{default:$(()=>[D(x(gu),{class:"h-3.5 w-3.5"}),d[0]||(d[0]=q(" New ",-1))]),_:1})])),k("div",pn,[e.embedded?(g(),y("button",{key:0,class:"touch-expand-sm mb-1 flex w-full items-center gap-2 rounded-md border border-border px-2.5 py-2 text-left text-sm text-foreground transition-colors hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",onClick:i},[D(x(gu),{class:"h-3.5 w-3.5 shrink-0"}),d[2]||(d[2]=q(" New conversation ",-1))])):F("",!0),(g(!0),y(O,null,ue(x(t).conversations,f=>(g(),y("div",{key:f.id,class:T(["group flex w-full items-center gap-0.5 rounded-md pr-1 transition-colors",f.id===x(t).activeId?"bg-primary/15":"hover:bg-surface-hover"])},[k("button",{class:T(["touch-expand-sm flex min-w-0 flex-1 items-center gap-2 rounded-md px-2.5 py-2 text-left text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",f.id===x(t).activeId?"text-white":"text-foreground-muted group-hover:text-white"]),"aria-current":f.id===x(t).activeId?"page":void 0,onClick:b=>s(f.id)},[D(x(Yu),{class:"h-3.5 w-3.5 shrink-0 opacity-70"}),k("span",mn,N(f.title||"New conversation"),1)],10,hn),k("button",{type:"button",class:"touch-expand-xs shrink-0 rounded-md p-2 text-foreground-muted opacity-0 transition-opacity hover:bg-surface-hover hover:text-white focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary group-hover:opacity-100 max-md:opacity-100",title:"Rename conversation","aria-label":"Rename conversation",onClick:xu(b=>r(f),["stop"])},[D(x(Wu),{class:"h-3.5 w-3.5"})],8,gn),k("button",{type:"button",class:"touch-expand-xs shrink-0 rounded-md p-2 text-foreground-muted opacity-0 transition-opacity hover:bg-surface-hover hover:text-danger-fg focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary group-hover:opacity-100 max-md:opacity-100",title:"Delete conversation","aria-label":"Delete conversation",onClick:xu(b=>o(f.id),["stop"])},[D(x(tu),{class:"h-3.5 w-3.5"})],8,xn)],2))),128)),x(t).conversations.length?F("",!0):(g(),y("p",kn," No conversations yet. "))])]))}},_n={class:"text-center"},yn={class:"mx-auto mb-4 flex h-11 w-11 items-center justify-center rounded-xl bg-primary/15 text-primary"},vn={class:"mx-auto mt-6 grid max-w-xl gap-2 sm:grid-cols-2"},En=["onClick"],Cn={class:"line-clamp-2"},Dn={__name:"EmptyState",emits:["pick"],setup(e){const u=["How many functions do I have?","Which function ran most recently?","Any errors in the last 24 hours?","Show my most recent executions.","List my deployed functions.","Summarize today’s invocation errors.","Show failed deployments and why.","What’s my system health right now?","Show storage usage for my instance.","List my cron schedules.","Are any background jobs failing?","Check for failed webhook deliveries.","Which runtimes are available?","Show my slowest functions by duration.","Which functions have egress enabled?","List my secrets by name only.","Write a Python function that returns the current UTC time.","Write a Node function that echoes the request body.","Create an hourly cron schedule for a function.","Walk me through deploying a new function."];function t(r,o){const a=[...r];for(let i=a.length-1;i>0;i--){const s=Math.floor(Math.random()*(i+1));[a[i],a[s]]=[a[s],a[i]]}return a.slice(0,o)}const n=S(t(u,4));return(r,o)=>(g(),y("div",_n,[k("div",yn,[D(x(Bt),{class:"h-5 w-5"})]),o[0]||(o[0]=k("h2",{class:"text-lg font-semibold tracking-tight text-white"}," What would you like to do? ",-1)),o[1]||(o[1]=k("p",{class:"mx-auto mt-1.5 max-w-md text-sm leading-relaxed text-foreground-muted"}," Ask about your functions, logs, deployments, and operations. Or have me create, deploy, and invoke functions for you. ",-1)),k("div",vn,[(g(!0),y(O,null,ue(n.value,(a,i)=>(g(),y("button",{key:i,type:"button",class:"flex min-h-[4.25rem] items-center rounded-lg border border-border bg-surface/50 px-3.5 py-3 text-left text-[13px] leading-snug text-foreground-muted transition-colors hover:border-foreground-muted/40 hover:bg-surface-hover hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background",onClick:s=>r.$emit("pick",a)},[k("span",Cn,N(a),1)],8,En))),128))])]))}},_u={};function An(e){let u=_u[e];if(u)return u;u=_u[e]=[];for(let t=0;t<128;t++){const n=String.fromCharCode(t);u.push(n)}for(let t=0;t=55296&&d<=57343?r+="���":r+=String.fromCharCode(d),o+=6;continue}}if((i&248)===240&&o+91114111?r+="����":(f-=65536,r+=String.fromCharCode(55296+(f>>10),56320+(f&1023))),o+=9;continue}}r+="�"}return r})}pe.defaultChars=";/?:@&=+$,#";pe.componentChars="";const yu={};function wn(e){let u=yu[e];if(u)return u;u=yu[e]=[];for(let t=0;t<128;t++){const n=String.fromCharCode(t);/^[0-9a-z]$/i.test(n)?u.push(n):u.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2))}for(let t=0;t"u"&&(t=!0);const n=wn(u);let r="";for(let o=0,a=e.length;o=55296&&i<=57343){if(i>=55296&&i<=56319&&o+1=56320&&s<=57343){r+=encodeURIComponent(e[o]+e[o+1]),o++;continue}}r+="%EF%BF%BD";continue}r+=encodeURIComponent(e[o])}return r}we.defaultChars=";/?:@&=+$,-_.!~*'()#";we.componentChars="-_.!~*'()";function su(e){let u="";return u+=e.protocol||"",u+=e.slashes?"//":"",u+=e.auth?e.auth+"@":"",e.hostname&&e.hostname.indexOf(":")!==-1?u+="["+e.hostname+"]":u+=e.hostname||"",u+=e.port?":"+e.port:"",u+=e.pathname||"",u+=e.search||"",u+=e.hash||"",u}function ze(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}const Fn=/^([a-z0-9.+-]+:)/i,Sn=/:[0-9]*$/,Tn=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,Mn=["<",">",'"',"`"," ","\r",` `," "],Rn=["{","}","|","\\","^","`"].concat(Mn),Nn=["'"].concat(Rn),vu=["%","/","?",";","#"].concat(Nn),Eu=["/","?","#"],In=255,Cu=/^[+a-z0-9A-Z_-]{0,63}$/,zn=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Du={javascript:!0,"javascript:":!0},Au={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function cu(e,u){if(e&&e instanceof ze)return e;const t=new ze;return t.parse(e,u),t}ze.prototype.parse=function(e,u){let t,n,r,o=e;if(o=o.trim(),!u&&e.split("#").length===1){const c=Tn.exec(o);if(c)return this.pathname=c[1],c[2]&&(this.search=c[2]),this}let a=Fn.exec(o);if(a&&(a=a[0],t=a.toLowerCase(),this.protocol=a,o=o.substr(a.length)),(u||a||o.match(/^\/\/[^@\/]+@[^@\/]+/))&&(r=o.substr(0,2)==="//",r&&!(a&&Du[a])&&(o=o.substr(2),this.slashes=!0)),!Du[a]&&(r||a&&!Au[a])){let c=-1;for(let l=0;l127?_+="x":_+=E[v];if(!_.match(Cu)){const v=l.slice(0,m),C=l.slice(m+1),A=E.match(zn);A&&(v.push(A[1]),C.unshift(A[2])),C.length&&(o=C.join(".")+o),this.hostname=v.join(".");break}}}}this.hostname.length>In&&(this.hostname=""),p&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}const i=o.indexOf("#");i!==-1&&(this.hash=o.substr(i),o=o.slice(0,i));const s=o.indexOf("?");return s!==-1&&(this.search=o.substr(s),o=o.slice(0,s)),o&&(this.pathname=o),Au[t]&&this.hostname&&!this.pathname&&(this.pathname=""),this};ze.prototype.parseHost=function(e){let u=Sn.exec(e);u&&(u=u[0],u!==":"&&(this.port=u.substr(1)),e=e.substr(0,e.length-u.length)),e&&(this.hostname=e)};const Bn=Object.freeze(Object.defineProperty({__proto__:null,decode:pe,encode:we,format:su,parse:cu},Symbol.toStringTag,{value:"Module"})),et=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,ut=/[\0-\x1F\x7F-\x9F]/,Ln=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/,lu=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,tt=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/,nt=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,On=Object.freeze(Object.defineProperty({__proto__:null,Any:et,Cc:ut,Cf:Ln,P:lu,S:tt,Z:nt},Symbol.toStringTag,{value:"Module"})),$n=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(e=>e.charCodeAt(0))),Pn=new Uint16Array("Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(e=>e.charCodeAt(0)));var Ke;const qn=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),Un=(Ke=String.fromCodePoint)!==null&&Ke!==void 0?Ke:function(e){let u="";return e>65535&&(e-=65536,u+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),u+=String.fromCharCode(e),u};function jn(e){var u;return e>=55296&&e<=57343||e>1114111?65533:(u=qn.get(e))!==null&&u!==void 0?u:e}var L;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(L||(L={}));const Hn=32;var re;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(re||(re={}));function nu(e){return e>=L.ZERO&&e<=L.NINE}function Zn(e){return e>=L.UPPER_A&&e<=L.UPPER_F||e>=L.LOWER_A&&e<=L.LOWER_F}function Gn(e){return e>=L.UPPER_A&&e<=L.UPPER_Z||e>=L.LOWER_A&&e<=L.LOWER_Z||nu(e)}function Vn(e){return e===L.EQUALS||Gn(e)}var B;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(B||(B={}));var ee;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(ee||(ee={}));class Wn{constructor(u,t,n){this.decodeTree=u,this.emitCodePoint=t,this.errors=n,this.state=B.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=ee.Strict}startEntity(u){this.decodeMode=u,this.state=B.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(u,t){switch(this.state){case B.EntityStart:return u.charCodeAt(t)===L.NUM?(this.state=B.NumericStart,this.consumed+=1,this.stateNumericStart(u,t+1)):(this.state=B.NamedEntity,this.stateNamedEntity(u,t));case B.NumericStart:return this.stateNumericStart(u,t);case B.NumericDecimal:return this.stateNumericDecimal(u,t);case B.NumericHex:return this.stateNumericHex(u,t);case B.NamedEntity:return this.stateNamedEntity(u,t)}}stateNumericStart(u,t){return t>=u.length?-1:(u.charCodeAt(t)|Hn)===L.LOWER_X?(this.state=B.NumericHex,this.consumed+=1,this.stateNumericHex(u,t+1)):(this.state=B.NumericDecimal,this.stateNumericDecimal(u,t))}addToNumericResult(u,t,n,r){if(t!==n){const o=n-t;this.result=this.result*Math.pow(r,o)+parseInt(u.substr(t,o),r),this.consumed+=o}}stateNumericHex(u,t){const n=t;for(;t>14;for(;t>14,o!==0){if(a===L.SEMI)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);this.decodeMode!==ee.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var u;const{result:t,decodeTree:n}=this,r=(n[t]&re.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,r,this.consumed),(u=this.errors)===null||u===void 0||u.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(u,t,n){const{decodeTree:r}=this;return this.emitCodePoint(t===1?r[u]&~re.VALUE_LENGTH:r[u+1],n),t===3&&this.emitCodePoint(r[u+2],n),n}end(){var u;switch(this.state){case B.NamedEntity:return this.result!==0&&(this.decodeMode!==ee.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case B.NumericDecimal:return this.emitNumericEntity(0,2);case B.NumericHex:return this.emitNumericEntity(0,3);case B.NumericStart:return(u=this.errors)===null||u===void 0||u.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case B.EntityStart:return 0}}}function rt(e){let u="";const t=new Wn(e,n=>u+=Un(n));return function(r,o){let a=0,i=0;for(;(i=r.indexOf("&",i))>=0;){u+=r.slice(a,i),t.startEntity(o);const c=t.write(r,i+1);if(c<0){a=i+t.end();break}a=i+c,i=c===0?a+1:a}const s=u+r.slice(a);return u="",s}}function Kn(e,u,t,n){const r=(u&re.BRANCH_LENGTH)>>7,o=u&re.JUMP_TABLE;if(r===0)return o!==0&&n===o?t:-1;if(o){const s=n-o;return s<0||s>=r?-1:e[t+s]-1}let a=t,i=a+r-1;for(;a<=i;){const s=a+i>>>1,c=e[s];if(cn)i=s-1;else return e[s+r]}return-1}const ot=rt($n);rt(Pn);function Jn(e,u=ee.Legacy){return ot(e,u)}function Qn(e){return ot(e,ee.Strict)}function Xn(e){return Object.prototype.toString.call(e)}function du(e){return Xn(e)==="[object String]"}const Yn=Object.prototype.hasOwnProperty;function e0(e,u){return Yn.call(e,u)}function Pe(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){if(t){if(typeof t!="object")throw new TypeError(t+"must be object");Object.keys(t).forEach(function(n){e[n]=t[n]})}}),e}function it(e,u,t){return[].concat(e.slice(0,u),t,e.slice(u+1))}function fu(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||(e&65535)===65535||(e&65535)===65534||e>=0&&e<=8||e===11||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function ve(e){if(e>65535){e-=65536;const u=55296+(e>>10),t=56320+(e&1023);return String.fromCharCode(u,t)}return String.fromCharCode(e)}const at=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,u0=/&([a-z#][a-z0-9]{1,31});/gi,t0=new RegExp(at.source+"|"+u0.source,"gi"),n0=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function r0(e,u){if(u.charCodeAt(0)===35&&n0.test(u)){const n=u[1].toLowerCase()==="x"?parseInt(u.slice(2),16):parseInt(u.slice(1),10);return fu(n)?ve(n):e}const t=Jn(e);return t!==e?t:e}function o0(e){return e.indexOf("\\")<0?e:e.replace(at,"$1")}function he(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(t0,function(u,t,n){return t||r0(u,n)})}const i0=/[&<>"]/,a0=/[&<>"]/g,s0={"&":"&","<":"<",">":">",'"':"""};function c0(e){return s0[e]}function ie(e){return i0.test(e)?e.replace(a0,c0):e}const l0=/[.?*+^$[\]\\(){}|-]/g;function d0(e){return e.replace(l0,"\\$&")}function M(e){switch(e){case 9:case 32:return!0}return!1}function Ee(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function st(e){return lu.test(e)||tt.test(e)}function Ce(e){return st(ve(e))}function De(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function qe(e){return e=e.trim().replace(/\s+/g," "),"ẞ".toLowerCase()==="Ṿ"&&(e=e.replace(/ẞ/g,"ß")),e.toLowerCase().toUpperCase()}function wu(e){return e===32||e===9||e===10||e===13}function Ue(e){let u=0;for(;u=u&&wu(e.charCodeAt(t));t--);return e.slice(u,t+1)}const f0={mdurl:Bn,ucmicro:On},b0=Object.freeze(Object.defineProperty({__proto__:null,arrayReplaceAt:it,asciiTrim:Ue,assign:Pe,escapeHtml:ie,escapeRE:d0,fromCodePoint:ve,has:e0,isMdAsciiPunct:De,isPunctChar:st,isPunctCharCode:Ce,isSpace:M,isString:du,isValidEntityCode:fu,isWhiteSpace:Ee,lib:f0,normalizeReference:qe,unescapeAll:he,unescapeMd:o0},Symbol.toStringTag,{value:"Module"}));function p0(e,u,t){let n,r,o,a;const i=e.posMax,s=e.pos;for(e.pos=u+1,n=1;e.pos32))return o;if(n===41){if(a===0)break;a--}r++}return u===r||a!==0||(o.str=he(e.slice(u,r)),o.pos=r,o.ok=!0),o}function m0(e,u,t,n){let r,o=u;const a={ok:!1,can_continue:!1,pos:0,str:"",marker:0};if(n)a.str=n.str,a.marker=n.marker;else{if(o>=t)return a;let i=e.charCodeAt(o);if(i!==34&&i!==39&&i!==40)return a;u++,o++,i===40&&(i=41),a.marker=i}for(;o"+ie(o.content)+""};X.code_block=function(e,u,t,n,r){const o=e[u];return""+ie(e[u].content)+` `};X.fence=function(e,u,t,n,r){const o=e[u],a=o.info?he(o.info).trim():"";let i="",s="";if(a){const d=a.split(/(\s+)/g);i=d[0],s=d.slice(2).join("")}let c;if(t.highlight?c=t.highlight(o.content,i,s)||ie(o.content):c=ie(o.content),c.indexOf("${c} diff --git a/backend/internal/server/ui_dist/assets/Activity-CUYXvjyS.js b/backend/internal/server/ui_dist/assets/Activity-DN8mbB-1.js similarity index 97% rename from backend/internal/server/ui_dist/assets/Activity-CUYXvjyS.js rename to backend/internal/server/ui_dist/assets/Activity-DN8mbB-1.js index 17bf349..ccd7606 100644 --- a/backend/internal/server/ui_dist/assets/Activity-CUYXvjyS.js +++ b/backend/internal/server/ui_dist/assets/Activity-DN8mbB-1.js @@ -1 +1 @@ -import{c as ue,j as o,a as l,t as r,f as c,s as ie,q as _,U as de,o as ce,y as ve,R as xe,V as me,b as t,d as f,S as fe,e as pe,v as be,F as k,p as w,g as d,h,_ as C,r as p,aB as he,k as S,n as q}from"./index-BMkkwZ9q.js";import{E as v}from"./format-CsU4_SPu.js";import{D as _e}from"./Drawer-C3AFLOZb.js";import{_ as N}from"./StatusBadge-Cj_PlPFZ.js";import{C as ge}from"./chevron-right-OdWgNfOU.js";import"./circle-DJWJGpv0.js";import"./clock-BWp9w4xs.js";const ye=ue("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),F={__name:"SourceTag",props:{source:{type:String,default:""}},setup(A){const P=A,L=_(()=>{switch(P.source){case"web":return"text-indigo-300 border-indigo-900/40";case"api":return"text-sky-300 border-sky-900/40";case"mcp":return"text-violet-300 border-violet-900/40";case"sdk":return"text-teal-300 border-teal-900/40";case"webhook":return"text-amber-300 border-amber-900/40";case"cron":return"text-emerald-300 border-emerald-900/40";case"internal":return"text-foreground-muted border-border";default:return"text-foreground-muted border-border"}});return(O,R)=>(o(),l("span",{class:ie(["inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono uppercase tracking-wide",L.value])},r(A.source||c(v)),3))}},ke={class:"space-y-6"},we={class:"flex flex-col sm:flex-row sm:items-center gap-2 sm:flex-wrap"},Ce={class:"relative w-full sm:flex-1 sm:min-w-[260px] sm:max-w-[420px]"},Se={class:"flex items-center gap-2 sm:flex-wrap overflow-x-auto sm:overflow-visible scrollable snap-x min-w-0"},Te={key:0,class:"ml-1 opacity-60 tabular-nums"},Pe={class:"bg-background border border-border rounded-lg overflow-x-auto"},De={class:"sm:hidden divide-y divide-border"},Me=["onClick"],$e={class:"flex items-start justify-between gap-2"},qe={class:"min-w-0 flex-1"},Ae={class:"flex items-center gap-2 flex-wrap"},Le={class:"mt-1 text-xs font-mono text-white break-all"},Be={key:0,class:"mt-1 text-[11px] text-foreground-muted break-words"},Ee={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted font-mono"},Ie={key:0},Ve={key:1,class:"break-all"},Ne={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},Fe={class:"hidden sm:table w-full text-sm text-left"},Oe={class:"divide-y divide-border"},Re=["onClick"],ze={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted"},Ue={class:"px-4 py-2.5"},Ke={class:"px-4 py-2.5 hidden md:table-cell"},je={class:"text-xs text-white truncate max-w-[200px]"},Je={key:0,class:"text-[10px] text-foreground-muted/70 font-mono truncate"},We={class:"px-4 py-2.5 text-xs font-mono text-foreground-muted hidden sm:table-cell"},Ge={class:"px-4 py-2.5 text-xs font-mono text-white truncate max-w-[440px]"},He={class:"px-4 py-2.5 hidden sm:table-cell"},Xe={key:1,class:"text-foreground-muted text-xs"},Ye={class:"px-4 py-2.5 text-xs font-mono text-foreground-muted hidden lg:table-cell"},Ze={class:"px-4 py-2.5 text-xs text-foreground-muted truncate max-w-[280px] hidden xl:table-cell"},Qe={key:0},et={key:0,class:"flex items-center justify-between text-xs"},tt={class:"text-foreground-muted"},st={class:"flex items-center gap-1"},at={key:0,class:"p-5 space-y-5 text-sm"},rt={class:"grid grid-cols-2 gap-3"},ot={class:"bg-surface border border-border rounded p-3 min-w-0"},lt={class:"text-xs text-white font-mono truncate"},nt={class:"bg-surface border border-border rounded p-3 min-w-0"},ut={class:"bg-surface border border-border rounded p-3 min-w-0"},it={class:"text-sm text-white truncate"},dt={key:0,class:"text-[11px] text-foreground-muted font-mono truncate mt-0.5"},ct={class:"bg-surface border border-border rounded p-3 min-w-0"},vt={class:"flex items-center gap-2"},xt={key:1,class:"text-foreground-muted text-xs"},mt={key:2,class:"text-xs text-foreground-muted font-mono"},ft={class:"bg-surface border border-border rounded p-3 min-w-0"},pt={class:"text-xs text-white font-mono truncate"},bt={class:"bg-surface border border-border rounded p-3 min-w-0"},ht={class:"text-xs text-white font-mono"},_t={class:"bg-surface border border-border rounded p-3 text-xs text-white font-mono whitespace-pre-wrap break-all"},gt={class:"text-foreground break-words"},yt={key:0},kt={class:"bg-surface border border-border rounded p-3 text-xs text-foreground-muted font-mono whitespace-pre-wrap break-all"},wt={key:1},Ct={class:"bg-surface border border-border rounded p-3 text-xs text-foreground font-mono overflow-auto max-h-72 whitespace-pre-wrap break-words"},Y=100,Z=200,At={__name:"Activity",setup(A){const P=de(),L=[{label:"All",value:""},{label:"Web",value:"web"},{label:"API",value:"api"},{label:"MCP",value:"mcp"},{label:"SDK",value:"sdk"},{label:"Webhook",value:"webhook"},{label:"Internal",value:"internal"}],O=[{label:"All",value:""},{label:"Success",value:"ok"},{label:"Errors",value:"err"}],R=[{label:"5m",value:"5m"},{label:"1h",value:"1h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"}],u=p({q:"",source:"",statusBucket:"",range:"24h"}),D=p([]),b=p([]),B=p(!1),n=p(null),z=p(0),E=p(!1),x=p(1),m=p([{since:void 0,until:void 0}]),g=_(()=>x.value===1?[...b.value,...D.value]:D.value),U=_(()=>{const a={};for(const s of g.value)a[s.source]=(a[s.source]||0)+1;return a[""]=g.value.length,a}),M=_(()=>Math.max(m.value.length,x.value)),Q=_(()=>{const a=M.value,s=x.value;return[...new Set([1,a,s-1,s,s+1])].filter(i=>i>=1&&i<=a).sort((i,ne)=>i-ne)}),ee=a=>{switch(a){case"5m":return 5*6e4;case"1h":return 60*6e4;case"24h":return 1440*6e4;case"7d":return 10080*6e4;default:return 0}},te=(a={})=>{const s={limit:Y};u.value.source&&(s.source=u.value.source),u.value.statusBucket==="err"&&(s.status_min=400),u.value.q&&(s.q=u.value.q);const e=ee(u.value.range);return e&&(s.since=Date.now()-e),Object.assign(s,a)},$=async a=>{if(a<1||a>m.value.length+1)return;const s=m.value[a-1]?.cursor,e=await he(te(s?{cursor:s}:{}));D.value=e.data?.rows||[];const i=e.data?.next_cursor||0;E.value=i>0,m.value[a-1]||(m.value[a-1]={}),m.value[a-1].cursor=s,i?(m.value[a]||(m.value[a]={}),m.value[a].cursor=i):m.value=m.value.slice(0,a),z.value=(a-1)*Y+D.value.length,x.value=a,a>1&&(b.value=[])},y=async()=>{m.value=[{since:void 0,until:void 0}],b.value=[],x.value=1,await $(1)};let T=null;const se=a=>{if(u.value.source&&a.source!==u.value.source||u.value.statusBucket==="err"&&(a.status||0)<400)return!1;if(u.value.q){const s=u.value.q.toLowerCase();if(!(a.path+" "+a.summary+" "+a.actor_label).toLowerCase().includes(s))return!1}return!0},ae=a=>{se(a)&&x.value===1&&(b.value.unshift(a),b.value.length>Z&&(b.value=b.value.slice(0,Z)))};let K=null;const re=()=>{clearTimeout(K),K=setTimeout(y,250)},j=a=>{n.value=a,B.value=!0},oe=_(()=>n.value?n.value.summary||n.value.method+" "+n.value.path:"Activity"),J=_(()=>{if(!n.value?.metadata)return"";try{return JSON.stringify(JSON.parse(n.value.metadata),null,2)}catch{return n.value.metadata}}),W=a=>a?new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}):v,le=a=>a?new Date(a).toLocaleString():v,I=a=>a==null?v:a<1?"<1ms":a<1e3?a+"ms":(a/1e3).toFixed(2)+"s",V=a=>a?a>=500?"error":a>=400?"failed":a>=200?"success":"pending":"",G=a=>a.id?`db-${a.id}`:`live-${a.ts}-${a.request_id}-${a.path}`,H=()=>{T||(T=P.subscribe("activity",ae),P.connect())},X=()=>{T&&(T(),T=null)};return ce(()=>{H(),y()}),ve(X),xe(()=>{H(),y()}),me(X),(a,s)=>(o(),l("div",ke,[s[20]||(s[20]=t("div",null,[t("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Activity "),t("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Live feed of every API call hitting Orva: UI clicks, REST/SDK, MCP tools, webhook deliveries. ")],-1)),t("div",we,[t("div",Ce,[f(c(fe),{class:"w-3.5 h-3.5 absolute left-2.5 top-1/2 -translate-y-1/2 text-foreground-muted/60 pointer-events-none"}),pe(t("input",{"onUpdate:modelValue":s[0]||(s[0]=e=>u.value.q=e),"aria-label":"Search activity by path, summary, or actor",placeholder:"Search path, summary, actor…",class:"w-full bg-background border border-border rounded-md pl-8 pr-3 py-1.5 text-base sm:text-xs text-foreground placeholder-foreground-muted/60 focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:re},null,544),[[be,u.value.q]])]),t("div",Se,[(o(),l(k,null,w(L,e=>f(C,{key:e.value,variant:"chip",size:"xs",active:u.value.source===e.value,class:"shrink-0 snap-start",onClick:i=>{u.value.source=e.value,y()}},{default:h(()=>[S(r(e.label)+" ",1),U.value[e.value]!=null&&e.value!==""?(o(),l("span",Te,r(U.value[e.value]),1)):d("",!0)]),_:2},1032,["active","onClick"])),64)),s[4]||(s[4]=t("span",{class:"text-foreground-muted/40 shrink-0"},"·",-1)),(o(),l(k,null,w(O,e=>f(C,{key:e.value,variant:"chip",size:"xs",active:u.value.statusBucket===e.value,class:"shrink-0 snap-start",onClick:i=>{u.value.statusBucket=e.value,y()}},{default:h(()=>[S(r(e.label),1)]),_:2},1032,["active","onClick"])),64)),s[5]||(s[5]=t("span",{class:"text-foreground-muted/40 shrink-0"},"·",-1)),(o(),l(k,null,w(R,e=>f(C,{key:e.value,variant:"chip",size:"xs",active:u.value.range===e.value,class:"shrink-0 snap-start",onClick:i=>{u.value.range=e.value,y()}},{default:h(()=>[S(r(e.label),1)]),_:2},1032,["active","onClick"])),64))])]),t("div",Pe,[t("ul",De,[(o(!0),l(k,null,w(g.value,e=>(o(),l("li",{key:G(e),class:"px-4 py-3 cursor-pointer hover:bg-surface-hover transition-colors",onClick:i=>j(e)},[t("div",$e,[t("div",qe,[t("div",Ae,[f(F,{source:e.source},null,8,["source"]),e.status?(o(),q(N,{key:0,status:V(e.status)},null,8,["status"])):d("",!0)]),t("div",Le,r(e.method?e.method+" ":"")+r(e.path||c(v)),1),e.summary?(o(),l("div",Be,r(e.summary),1)):d("",!0),t("div",Ee,[t("span",null,r(W(e.ts)),1),e.duration_ms!=null?(o(),l("span",Ie,r(I(e.duration_ms)),1)):d("",!0),e.actor_label||e.actor_id?(o(),l("span",Ve,r(e.actor_label||e.actor_id),1)):d("",!0)])])])],8,Me))),128)),g.value.length?d("",!0):(o(),l("li",Ne," No activity yet. Drive any action (open the dashboard, call a function, fire an MCP tool) and rows will land here. "))]),t("table",Fe,[s[7]||(s[7]=t("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[t("tr",null,[t("th",{class:"px-4 py-3 w-32"},"Time"),t("th",{class:"px-4 py-3 w-24"},"Source"),t("th",{class:"px-4 py-3 w-40 hidden md:table-cell"},"Actor"),t("th",{class:"px-4 py-3 w-20 hidden sm:table-cell"},"Method"),t("th",{class:"px-4 py-3"},"Path / Tool"),t("th",{class:"px-4 py-3 w-16 hidden sm:table-cell"},"Status"),t("th",{class:"px-4 py-3 w-20 hidden lg:table-cell"},"Duration"),t("th",{class:"px-4 py-3 hidden xl:table-cell"},"Summary")])],-1)),t("tbody",Oe,[(o(!0),l(k,null,w(g.value,e=>(o(),l("tr",{key:G(e),class:"hover:bg-surface-hover cursor-pointer transition-colors",onClick:i=>j(e)},[t("td",ze,r(W(e.ts)),1),t("td",Ue,[f(F,{source:e.source},null,8,["source"])]),t("td",Ke,[t("div",je,r(e.actor_label||e.actor_id||c(v)),1),e.actor_label&&e.actor_id&&e.actor_label!==e.actor_id?(o(),l("div",Je,r(e.actor_id),1)):d("",!0)]),t("td",We,r(e.method||c(v)),1),t("td",Ge,r(e.path||c(v)),1),t("td",He,[e.status?(o(),q(N,{key:0,status:V(e.status)},null,8,["status"])):(o(),l("span",Xe,r(c(v)),1))]),t("td",Ye,r(I(e.duration_ms)),1),t("td",Ze,r(e.summary),1)],8,Re))),128)),g.value.length?d("",!0):(o(),l("tr",Qe,[...s[6]||(s[6]=[t("td",{colspan:"8",class:"px-4 py-12 text-center text-foreground-muted text-sm"}," No activity yet. Drive any action (open the dashboard, call a function, fire an MCP tool) and rows will land here. ",-1)])]))])])]),M.value>1?(o(),l("div",et,[t("div",tt," Page "+r(x.value)+" of "+r(M.value)+" · "+r(z.value)+r(E.value?"+":"")+" rows ",1),t("div",st,[f(C,{variant:"secondary",size:"xs",disabled:x.value<=1,onClick:s[1]||(s[1]=e=>$(x.value-1))},{default:h(()=>[f(c(ye),{class:"w-3.5 h-3.5"}),s[8]||(s[8]=S(" Prev ",-1))]),_:1},8,["disabled"]),(o(!0),l(k,null,w(Q.value,e=>(o(),q(C,{key:e,variant:e===x.value?"primary":"secondary",size:"xs",onClick:i=>$(e)},{default:h(()=>[S(r(e),1)]),_:2},1032,["variant","onClick"]))),128)),f(C,{variant:"secondary",size:"xs",disabled:x.value>=M.value&&!E.value,onClick:s[2]||(s[2]=e=>$(x.value+1))},{default:h(()=>[s[9]||(s[9]=S(" Next ",-1)),f(c(ge),{class:"w-3.5 h-3.5"})]),_:1},8,["disabled"])])])):d("",!0),f(_e,{modelValue:B.value,"onUpdate:modelValue":s[3]||(s[3]=e=>B.value=e),title:oe.value,width:"640px"},{default:h(()=>[n.value?(o(),l("div",at,[t("div",rt,[t("div",ot,[s[10]||(s[10]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Time",-1)),t("div",lt,r(le(n.value.ts)),1)]),t("div",nt,[s[11]||(s[11]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Source",-1)),f(F,{source:n.value.source},null,8,["source"])]),t("div",ut,[s[12]||(s[12]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Actor",-1)),t("div",it,r(n.value.actor_label||c(v)),1),n.value.actor_id?(o(),l("div",dt,r(n.value.actor_id),1)):d("",!0)]),t("div",ct,[s[13]||(s[13]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Status",-1)),t("div",vt,[n.value.status?(o(),q(N,{key:0,status:V(n.value.status)},null,8,["status"])):(o(),l("span",xt,r(c(v)),1)),n.value.status?(o(),l("span",mt,"HTTP "+r(n.value.status),1)):d("",!0)])]),t("div",ft,[s[14]||(s[14]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Method",-1)),t("div",pt,r(n.value.method||c(v)),1)]),t("div",bt,[s[15]||(s[15]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Duration",-1)),t("div",ht,r(I(n.value.duration_ms)),1)])]),t("div",null,[s[16]||(s[16]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Path / Tool",-1)),t("pre",_t,r(n.value.path||c(v)),1)]),t("div",null,[s[17]||(s[17]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Summary",-1)),t("div",gt,r(n.value.summary||c(v)),1)]),n.value.request_id?(o(),l("div",yt,[s[18]||(s[18]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Request ID",-1)),t("pre",kt,r(n.value.request_id),1)])):d("",!0),J.value?(o(),l("div",wt,[s[19]||(s[19]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Metadata",-1)),t("pre",Ct,r(J.value),1)])):d("",!0)])):d("",!0)]),_:1},8,["modelValue","title"])]))}};export{At as default}; +import{c as ue,j as o,a as l,t as r,f as c,s as ie,q as _,U as de,o as ce,y as ve,R as xe,V as me,b as t,d as f,S as fe,e as pe,v as be,F as k,p as w,g as d,h,_ as C,r as p,aB as he,k as S,n as q}from"./index-fIeDYqWy.js";import{E as v}from"./format-CsU4_SPu.js";import{D as _e}from"./Drawer-D-dO6A0-.js";import{_ as N}from"./StatusBadge-U9tC82MH.js";import{C as ge}from"./chevron-right-BrmZtzfn.js";import"./circle-u9aj3idX.js";import"./clock-C4Bm6ngE.js";const ye=ue("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),F={__name:"SourceTag",props:{source:{type:String,default:""}},setup(A){const P=A,L=_(()=>{switch(P.source){case"web":return"text-indigo-300 border-indigo-900/40";case"api":return"text-sky-300 border-sky-900/40";case"mcp":return"text-violet-300 border-violet-900/40";case"sdk":return"text-teal-300 border-teal-900/40";case"webhook":return"text-amber-300 border-amber-900/40";case"cron":return"text-emerald-300 border-emerald-900/40";case"internal":return"text-foreground-muted border-border";default:return"text-foreground-muted border-border"}});return(O,R)=>(o(),l("span",{class:ie(["inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono uppercase tracking-wide",L.value])},r(A.source||c(v)),3))}},ke={class:"space-y-6"},we={class:"flex flex-col sm:flex-row sm:items-center gap-2 sm:flex-wrap"},Ce={class:"relative w-full sm:flex-1 sm:min-w-[260px] sm:max-w-[420px]"},Se={class:"flex items-center gap-2 sm:flex-wrap overflow-x-auto sm:overflow-visible scrollable snap-x min-w-0"},Te={key:0,class:"ml-1 opacity-60 tabular-nums"},Pe={class:"bg-background border border-border rounded-lg overflow-x-auto"},De={class:"sm:hidden divide-y divide-border"},Me=["onClick"],$e={class:"flex items-start justify-between gap-2"},qe={class:"min-w-0 flex-1"},Ae={class:"flex items-center gap-2 flex-wrap"},Le={class:"mt-1 text-xs font-mono text-white break-all"},Be={key:0,class:"mt-1 text-[11px] text-foreground-muted break-words"},Ee={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted font-mono"},Ie={key:0},Ve={key:1,class:"break-all"},Ne={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},Fe={class:"hidden sm:table w-full text-sm text-left"},Oe={class:"divide-y divide-border"},Re=["onClick"],ze={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted"},Ue={class:"px-4 py-2.5"},Ke={class:"px-4 py-2.5 hidden md:table-cell"},je={class:"text-xs text-white truncate max-w-[200px]"},Je={key:0,class:"text-[10px] text-foreground-muted/70 font-mono truncate"},We={class:"px-4 py-2.5 text-xs font-mono text-foreground-muted hidden sm:table-cell"},Ge={class:"px-4 py-2.5 text-xs font-mono text-white truncate max-w-[440px]"},He={class:"px-4 py-2.5 hidden sm:table-cell"},Xe={key:1,class:"text-foreground-muted text-xs"},Ye={class:"px-4 py-2.5 text-xs font-mono text-foreground-muted hidden lg:table-cell"},Ze={class:"px-4 py-2.5 text-xs text-foreground-muted truncate max-w-[280px] hidden xl:table-cell"},Qe={key:0},et={key:0,class:"flex items-center justify-between text-xs"},tt={class:"text-foreground-muted"},st={class:"flex items-center gap-1"},at={key:0,class:"p-5 space-y-5 text-sm"},rt={class:"grid grid-cols-2 gap-3"},ot={class:"bg-surface border border-border rounded p-3 min-w-0"},lt={class:"text-xs text-white font-mono truncate"},nt={class:"bg-surface border border-border rounded p-3 min-w-0"},ut={class:"bg-surface border border-border rounded p-3 min-w-0"},it={class:"text-sm text-white truncate"},dt={key:0,class:"text-[11px] text-foreground-muted font-mono truncate mt-0.5"},ct={class:"bg-surface border border-border rounded p-3 min-w-0"},vt={class:"flex items-center gap-2"},xt={key:1,class:"text-foreground-muted text-xs"},mt={key:2,class:"text-xs text-foreground-muted font-mono"},ft={class:"bg-surface border border-border rounded p-3 min-w-0"},pt={class:"text-xs text-white font-mono truncate"},bt={class:"bg-surface border border-border rounded p-3 min-w-0"},ht={class:"text-xs text-white font-mono"},_t={class:"bg-surface border border-border rounded p-3 text-xs text-white font-mono whitespace-pre-wrap break-all"},gt={class:"text-foreground break-words"},yt={key:0},kt={class:"bg-surface border border-border rounded p-3 text-xs text-foreground-muted font-mono whitespace-pre-wrap break-all"},wt={key:1},Ct={class:"bg-surface border border-border rounded p-3 text-xs text-foreground font-mono overflow-auto max-h-72 whitespace-pre-wrap break-words"},Y=100,Z=200,At={__name:"Activity",setup(A){const P=de(),L=[{label:"All",value:""},{label:"Web",value:"web"},{label:"API",value:"api"},{label:"MCP",value:"mcp"},{label:"SDK",value:"sdk"},{label:"Webhook",value:"webhook"},{label:"Internal",value:"internal"}],O=[{label:"All",value:""},{label:"Success",value:"ok"},{label:"Errors",value:"err"}],R=[{label:"5m",value:"5m"},{label:"1h",value:"1h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"}],u=p({q:"",source:"",statusBucket:"",range:"24h"}),D=p([]),b=p([]),B=p(!1),n=p(null),z=p(0),E=p(!1),x=p(1),m=p([{since:void 0,until:void 0}]),g=_(()=>x.value===1?[...b.value,...D.value]:D.value),U=_(()=>{const a={};for(const s of g.value)a[s.source]=(a[s.source]||0)+1;return a[""]=g.value.length,a}),M=_(()=>Math.max(m.value.length,x.value)),Q=_(()=>{const a=M.value,s=x.value;return[...new Set([1,a,s-1,s,s+1])].filter(i=>i>=1&&i<=a).sort((i,ne)=>i-ne)}),ee=a=>{switch(a){case"5m":return 5*6e4;case"1h":return 60*6e4;case"24h":return 1440*6e4;case"7d":return 10080*6e4;default:return 0}},te=(a={})=>{const s={limit:Y};u.value.source&&(s.source=u.value.source),u.value.statusBucket==="err"&&(s.status_min=400),u.value.q&&(s.q=u.value.q);const e=ee(u.value.range);return e&&(s.since=Date.now()-e),Object.assign(s,a)},$=async a=>{if(a<1||a>m.value.length+1)return;const s=m.value[a-1]?.cursor,e=await he(te(s?{cursor:s}:{}));D.value=e.data?.rows||[];const i=e.data?.next_cursor||0;E.value=i>0,m.value[a-1]||(m.value[a-1]={}),m.value[a-1].cursor=s,i?(m.value[a]||(m.value[a]={}),m.value[a].cursor=i):m.value=m.value.slice(0,a),z.value=(a-1)*Y+D.value.length,x.value=a,a>1&&(b.value=[])},y=async()=>{m.value=[{since:void 0,until:void 0}],b.value=[],x.value=1,await $(1)};let T=null;const se=a=>{if(u.value.source&&a.source!==u.value.source||u.value.statusBucket==="err"&&(a.status||0)<400)return!1;if(u.value.q){const s=u.value.q.toLowerCase();if(!(a.path+" "+a.summary+" "+a.actor_label).toLowerCase().includes(s))return!1}return!0},ae=a=>{se(a)&&x.value===1&&(b.value.unshift(a),b.value.length>Z&&(b.value=b.value.slice(0,Z)))};let K=null;const re=()=>{clearTimeout(K),K=setTimeout(y,250)},j=a=>{n.value=a,B.value=!0},oe=_(()=>n.value?n.value.summary||n.value.method+" "+n.value.path:"Activity"),J=_(()=>{if(!n.value?.metadata)return"";try{return JSON.stringify(JSON.parse(n.value.metadata),null,2)}catch{return n.value.metadata}}),W=a=>a?new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}):v,le=a=>a?new Date(a).toLocaleString():v,I=a=>a==null?v:a<1?"<1ms":a<1e3?a+"ms":(a/1e3).toFixed(2)+"s",V=a=>a?a>=500?"error":a>=400?"failed":a>=200?"success":"pending":"",G=a=>a.id?`db-${a.id}`:`live-${a.ts}-${a.request_id}-${a.path}`,H=()=>{T||(T=P.subscribe("activity",ae),P.connect())},X=()=>{T&&(T(),T=null)};return ce(()=>{H(),y()}),ve(X),xe(()=>{H(),y()}),me(X),(a,s)=>(o(),l("div",ke,[s[20]||(s[20]=t("div",null,[t("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Activity "),t("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Live feed of every API call hitting Orva: UI clicks, REST/SDK, MCP tools, webhook deliveries. ")],-1)),t("div",we,[t("div",Ce,[f(c(fe),{class:"w-3.5 h-3.5 absolute left-2.5 top-1/2 -translate-y-1/2 text-foreground-muted/60 pointer-events-none"}),pe(t("input",{"onUpdate:modelValue":s[0]||(s[0]=e=>u.value.q=e),"aria-label":"Search activity by path, summary, or actor",placeholder:"Search path, summary, actor…",class:"w-full bg-background border border-border rounded-md pl-8 pr-3 py-1.5 text-base sm:text-xs text-foreground placeholder-foreground-muted/60 focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:re},null,544),[[be,u.value.q]])]),t("div",Se,[(o(),l(k,null,w(L,e=>f(C,{key:e.value,variant:"chip",size:"xs",active:u.value.source===e.value,class:"shrink-0 snap-start",onClick:i=>{u.value.source=e.value,y()}},{default:h(()=>[S(r(e.label)+" ",1),U.value[e.value]!=null&&e.value!==""?(o(),l("span",Te,r(U.value[e.value]),1)):d("",!0)]),_:2},1032,["active","onClick"])),64)),s[4]||(s[4]=t("span",{class:"text-foreground-muted/40 shrink-0"},"·",-1)),(o(),l(k,null,w(O,e=>f(C,{key:e.value,variant:"chip",size:"xs",active:u.value.statusBucket===e.value,class:"shrink-0 snap-start",onClick:i=>{u.value.statusBucket=e.value,y()}},{default:h(()=>[S(r(e.label),1)]),_:2},1032,["active","onClick"])),64)),s[5]||(s[5]=t("span",{class:"text-foreground-muted/40 shrink-0"},"·",-1)),(o(),l(k,null,w(R,e=>f(C,{key:e.value,variant:"chip",size:"xs",active:u.value.range===e.value,class:"shrink-0 snap-start",onClick:i=>{u.value.range=e.value,y()}},{default:h(()=>[S(r(e.label),1)]),_:2},1032,["active","onClick"])),64))])]),t("div",Pe,[t("ul",De,[(o(!0),l(k,null,w(g.value,e=>(o(),l("li",{key:G(e),class:"px-4 py-3 cursor-pointer hover:bg-surface-hover transition-colors",onClick:i=>j(e)},[t("div",$e,[t("div",qe,[t("div",Ae,[f(F,{source:e.source},null,8,["source"]),e.status?(o(),q(N,{key:0,status:V(e.status)},null,8,["status"])):d("",!0)]),t("div",Le,r(e.method?e.method+" ":"")+r(e.path||c(v)),1),e.summary?(o(),l("div",Be,r(e.summary),1)):d("",!0),t("div",Ee,[t("span",null,r(W(e.ts)),1),e.duration_ms!=null?(o(),l("span",Ie,r(I(e.duration_ms)),1)):d("",!0),e.actor_label||e.actor_id?(o(),l("span",Ve,r(e.actor_label||e.actor_id),1)):d("",!0)])])])],8,Me))),128)),g.value.length?d("",!0):(o(),l("li",Ne," No activity yet. Drive any action (open the dashboard, call a function, fire an MCP tool) and rows will land here. "))]),t("table",Fe,[s[7]||(s[7]=t("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[t("tr",null,[t("th",{class:"px-4 py-3 w-32"},"Time"),t("th",{class:"px-4 py-3 w-24"},"Source"),t("th",{class:"px-4 py-3 w-40 hidden md:table-cell"},"Actor"),t("th",{class:"px-4 py-3 w-20 hidden sm:table-cell"},"Method"),t("th",{class:"px-4 py-3"},"Path / Tool"),t("th",{class:"px-4 py-3 w-16 hidden sm:table-cell"},"Status"),t("th",{class:"px-4 py-3 w-20 hidden lg:table-cell"},"Duration"),t("th",{class:"px-4 py-3 hidden xl:table-cell"},"Summary")])],-1)),t("tbody",Oe,[(o(!0),l(k,null,w(g.value,e=>(o(),l("tr",{key:G(e),class:"hover:bg-surface-hover cursor-pointer transition-colors",onClick:i=>j(e)},[t("td",ze,r(W(e.ts)),1),t("td",Ue,[f(F,{source:e.source},null,8,["source"])]),t("td",Ke,[t("div",je,r(e.actor_label||e.actor_id||c(v)),1),e.actor_label&&e.actor_id&&e.actor_label!==e.actor_id?(o(),l("div",Je,r(e.actor_id),1)):d("",!0)]),t("td",We,r(e.method||c(v)),1),t("td",Ge,r(e.path||c(v)),1),t("td",He,[e.status?(o(),q(N,{key:0,status:V(e.status)},null,8,["status"])):(o(),l("span",Xe,r(c(v)),1))]),t("td",Ye,r(I(e.duration_ms)),1),t("td",Ze,r(e.summary),1)],8,Re))),128)),g.value.length?d("",!0):(o(),l("tr",Qe,[...s[6]||(s[6]=[t("td",{colspan:"8",class:"px-4 py-12 text-center text-foreground-muted text-sm"}," No activity yet. Drive any action (open the dashboard, call a function, fire an MCP tool) and rows will land here. ",-1)])]))])])]),M.value>1?(o(),l("div",et,[t("div",tt," Page "+r(x.value)+" of "+r(M.value)+" · "+r(z.value)+r(E.value?"+":"")+" rows ",1),t("div",st,[f(C,{variant:"secondary",size:"xs",disabled:x.value<=1,onClick:s[1]||(s[1]=e=>$(x.value-1))},{default:h(()=>[f(c(ye),{class:"w-3.5 h-3.5"}),s[8]||(s[8]=S(" Prev ",-1))]),_:1},8,["disabled"]),(o(!0),l(k,null,w(Q.value,e=>(o(),q(C,{key:e,variant:e===x.value?"primary":"secondary",size:"xs",onClick:i=>$(e)},{default:h(()=>[S(r(e),1)]),_:2},1032,["variant","onClick"]))),128)),f(C,{variant:"secondary",size:"xs",disabled:x.value>=M.value&&!E.value,onClick:s[2]||(s[2]=e=>$(x.value+1))},{default:h(()=>[s[9]||(s[9]=S(" Next ",-1)),f(c(ge),{class:"w-3.5 h-3.5"})]),_:1},8,["disabled"])])])):d("",!0),f(_e,{modelValue:B.value,"onUpdate:modelValue":s[3]||(s[3]=e=>B.value=e),title:oe.value,width:"640px"},{default:h(()=>[n.value?(o(),l("div",at,[t("div",rt,[t("div",ot,[s[10]||(s[10]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Time",-1)),t("div",lt,r(le(n.value.ts)),1)]),t("div",nt,[s[11]||(s[11]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Source",-1)),f(F,{source:n.value.source},null,8,["source"])]),t("div",ut,[s[12]||(s[12]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Actor",-1)),t("div",it,r(n.value.actor_label||c(v)),1),n.value.actor_id?(o(),l("div",dt,r(n.value.actor_id),1)):d("",!0)]),t("div",ct,[s[13]||(s[13]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Status",-1)),t("div",vt,[n.value.status?(o(),q(N,{key:0,status:V(n.value.status)},null,8,["status"])):(o(),l("span",xt,r(c(v)),1)),n.value.status?(o(),l("span",mt,"HTTP "+r(n.value.status),1)):d("",!0)])]),t("div",ft,[s[14]||(s[14]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Method",-1)),t("div",pt,r(n.value.method||c(v)),1)]),t("div",bt,[s[15]||(s[15]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Duration",-1)),t("div",ht,r(I(n.value.duration_ms)),1)])]),t("div",null,[s[16]||(s[16]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Path / Tool",-1)),t("pre",_t,r(n.value.path||c(v)),1)]),t("div",null,[s[17]||(s[17]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Summary",-1)),t("div",gt,r(n.value.summary||c(v)),1)]),n.value.request_id?(o(),l("div",yt,[s[18]||(s[18]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Request ID",-1)),t("pre",kt,r(n.value.request_id),1)])):d("",!0),J.value?(o(),l("div",wt,[s[19]||(s[19]=t("h3",{class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},"Metadata",-1)),t("pre",Ct,r(J.value),1)])):d("",!0)])):d("",!0)]),_:1},8,["modelValue","title"])]))}};export{At as default}; diff --git a/backend/internal/server/ui_dist/assets/ApiKeys-D_0i_tEn.js b/backend/internal/server/ui_dist/assets/ApiKeys-p9xM5dML.js similarity index 96% rename from backend/internal/server/ui_dist/assets/ApiKeys-D_0i_tEn.js rename to backend/internal/server/ui_dist/assets/ApiKeys-p9xM5dML.js index 317de89..ddfdb31 100644 --- a/backend/internal/server/ui_dist/assets/ApiKeys-D_0i_tEn.js +++ b/backend/internal/server/ui_dist/assets/ApiKeys-p9xM5dML.js @@ -1,3 +1,3 @@ -import{C as L,o as M,a,b as e,d as c,h,_ as w,f as n,aa as j,t as l,n as C,k as i,g as y,e as D,v as B,a1 as F,F as K,p as N,aN as R,r as p,j as o,aO as G,aP as H}from"./index-BMkkwZ9q.js";import{E as O}from"./format-CsU4_SPu.js";import{_ as I}from"./IconButton-BgeMzwXv.js";import{c as X}from"./clipboard-CmSw2rR-.js";import{f as x,i as A}from"./time-Cfu9zNbw.js";import{C as Y}from"./check-C4wzjDZN.js";import{C as q}from"./copy-CTb6u-fx.js";import{K as z}from"./key-round-BccKiRw7.js";import{T as P}from"./trash-2-BXf2uqQH.js";const J={class:"space-y-6"},Q={class:"flex items-start justify-between gap-4"},W={key:0,class:"bg-background border border-amber-700/40 rounded-lg p-4 space-y-2"},Z={class:"flex items-start justify-between gap-3"},ee={class:"flex items-center gap-2"},te={class:"flex-1 font-mono text-sm text-white break-all bg-surface px-3 py-2 rounded border border-border"},se={key:1,class:"bg-background border border-border rounded-lg p-5 space-y-4"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-3"},ae={class:"flex gap-2 pt-1"},re={class:"bg-background border border-border rounded-lg overflow-x-auto"},ne={class:"sm:hidden divide-y divide-border"},le={class:"flex items-start justify-between gap-2"},de={class:"min-w-0 flex-1"},ie={class:"flex items-center gap-2 flex-wrap"},ce={class:"font-medium text-white truncate"},ue={key:0,class:"text-[11px] font-mono text-foreground-muted bg-surface px-1.5 py-0.5 rounded"},pe={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},xe={key:0},me={key:1,class:"text-amber-400/80"},fe={key:2},ye={key:3,class:"text-red-400"},ve={key:4},ge={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted"},be={class:"hidden sm:table w-full text-sm text-left"},_e={class:"divide-y divide-border"},he={class:"px-6 py-4 text-white font-medium"},we={class:"px-6 py-4 text-foreground-muted font-mono text-xs hidden sm:table-cell"},ke={class:"px-6 py-4 text-foreground-muted hidden xl:table-cell"},Ce={class:"px-6 py-4 hidden md:table-cell"},De={key:0,class:"text-foreground-muted"},Ke={key:1,class:"text-amber-400/70 text-xs"},Ne={class:"px-6 py-4 hidden lg:table-cell"},Ie={key:0,class:"text-foreground-muted"},Ae={key:1,class:"text-red-400 text-xs"},Pe={key:2,class:"text-foreground-muted"},Te={class:"px-6 py-4 text-right"},Ee={key:0},Ge={__name:"ApiKeys",setup(Se){const v=L(),m=p([]),u=p(""),f=p(!1),g=p(!1),b=p(!1),d=p({name:"",expiresInDays:0}),_=async()=>{const r=await R();m.value=r.data.keys||[]},T=()=>{d.value={name:"",expiresInDays:0},g.value=!0},E=()=>{g.value=!1,d.value={name:"",expiresInDays:0}},S=async()=>{b.value=!0;try{const r={name:d.value.name.trim()};d.value.expiresInDays>0&&(r.expires_in_days=d.value.expiresInDays);const t=await G(r);u.value=t.data.key,f.value=!1,g.value=!1,await _()}catch(r){console.error(r),v.notify({title:"Failed to create key",message:r?.response?.data?.error?.message||"Unknown error",danger:!0})}finally{b.value=!1}},U=async()=>{await X(u.value)?(f.value=!0,setTimeout(()=>{f.value=!1},1500)):v.notify({title:"Copy failed",message:`Could not copy to clipboard. Select the key manually: +import{C as L,o as M,a,b as e,d as c,h,_ as w,f as n,aa as j,t as l,n as C,k as i,g as y,e as D,v as B,a1 as F,F as K,p as N,aN as R,r as p,j as o,aO as G,aP as H}from"./index-fIeDYqWy.js";import{E as O}from"./format-CsU4_SPu.js";import{_ as I}from"./IconButton-CnguiHlc.js";import{c as X}from"./clipboard-CmSw2rR-.js";import{f as x,i as A}from"./time-Cfu9zNbw.js";import{C as Y}from"./check-Cwg1V2MO.js";import{C as q}from"./copy-DJiur09W.js";import{K as z}from"./key-round-BR2mpVu3.js";import{T as P}from"./trash-2-B2Wniuw-.js";const J={class:"space-y-6"},Q={class:"flex items-start justify-between gap-4"},W={key:0,class:"bg-background border border-amber-700/40 rounded-lg p-4 space-y-2"},Z={class:"flex items-start justify-between gap-3"},ee={class:"flex items-center gap-2"},te={class:"flex-1 font-mono text-sm text-white break-all bg-surface px-3 py-2 rounded border border-border"},se={key:1,class:"bg-background border border-border rounded-lg p-5 space-y-4"},oe={class:"grid grid-cols-1 md:grid-cols-2 gap-3"},ae={class:"flex gap-2 pt-1"},re={class:"bg-background border border-border rounded-lg overflow-x-auto"},ne={class:"sm:hidden divide-y divide-border"},le={class:"flex items-start justify-between gap-2"},de={class:"min-w-0 flex-1"},ie={class:"flex items-center gap-2 flex-wrap"},ce={class:"font-medium text-white truncate"},ue={key:0,class:"text-[11px] font-mono text-foreground-muted bg-surface px-1.5 py-0.5 rounded"},pe={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},xe={key:0},me={key:1,class:"text-amber-400/80"},fe={key:2},ye={key:3,class:"text-red-400"},ve={key:4},ge={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted"},be={class:"hidden sm:table w-full text-sm text-left"},_e={class:"divide-y divide-border"},he={class:"px-6 py-4 text-white font-medium"},we={class:"px-6 py-4 text-foreground-muted font-mono text-xs hidden sm:table-cell"},ke={class:"px-6 py-4 text-foreground-muted hidden xl:table-cell"},Ce={class:"px-6 py-4 hidden md:table-cell"},De={key:0,class:"text-foreground-muted"},Ke={key:1,class:"text-amber-400/70 text-xs"},Ne={class:"px-6 py-4 hidden lg:table-cell"},Ie={key:0,class:"text-foreground-muted"},Ae={key:1,class:"text-red-400 text-xs"},Pe={key:2,class:"text-foreground-muted"},Te={class:"px-6 py-4 text-right"},Ee={key:0},Ge={__name:"ApiKeys",setup(Se){const v=L(),m=p([]),u=p(""),f=p(!1),g=p(!1),b=p(!1),d=p({name:"",expiresInDays:0}),_=async()=>{const r=await R();m.value=r.data.keys||[]},T=()=>{d.value={name:"",expiresInDays:0},g.value=!0},E=()=>{g.value=!1,d.value={name:"",expiresInDays:0}},S=async()=>{b.value=!0;try{const r={name:d.value.name.trim()};d.value.expiresInDays>0&&(r.expires_in_days=d.value.expiresInDays);const t=await G(r);u.value=t.data.key,f.value=!1,g.value=!1,await _()}catch(r){console.error(r),v.notify({title:"Failed to create key",message:r?.response?.data?.error?.message||"Unknown error",danger:!0})}finally{b.value=!1}},U=async()=>{await X(u.value)?(f.value=!0,setTimeout(()=>{f.value=!1},1500)):v.notify({title:"Copy failed",message:`Could not copy to clipboard. Select the key manually: `+u.value})},k=async r=>{if(await v.ask({title:"Delete API key?",message:`"${r.name||r.id}" will stop working immediately. This cannot be undone.`,confirmLabel:"Delete",danger:!0}))try{await H(r.id),await _()}catch(s){console.error(s),v.notify({title:"Failed to delete key",message:s?.response?.data?.error?.message||"Unknown error",danger:!0})}},V=r=>new Date(r).toLocaleString();return M(_),(r,t)=>(o(),a("div",J,[e("div",Q,[t[4]||(t[4]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," API Keys "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Long-lived bearer tokens that authorise REST and MCP calls from CI, scripts, and external services. Plaintext is shown once at creation; the server keeps only a SHA-256 hash. ")],-1)),c(w,{onClick:T},{default:h(()=>[c(n(z),{class:"w-4 h-4"}),t[3]||(t[3]=i(" New Key ",-1))]),_:1})]),u.value?(o(),a("div",W,[e("div",Z,[t[5]||(t[5]=e("div",null,[e("h2",{class:"text-xs font-bold text-amber-300 uppercase tracking-wider"}," Copy this key now "),e("div",{class:"text-xs text-foreground-muted mt-0.5"}," It will not be shown again. Anyone with this key can invoke your functions. ")],-1)),e("button",{class:"text-foreground-muted hover:text-white",title:"Dismiss",onClick:t[0]||(t[0]=s=>u.value="")},[c(n(j),{class:"w-4 h-4"})])]),e("div",ee,[e("code",te,l(u.value),1),e("button",{class:"px-3 py-2 rounded-md border border-border bg-surface-hover hover:bg-surface text-foreground-muted hover:text-white transition-colors flex items-center gap-1.5 text-xs",onClick:U},[f.value?(o(),C(n(Y),{key:0,class:"w-3.5 h-3.5 text-success"})):(o(),C(n(q),{key:1,class:"w-3.5 h-3.5"})),i(" "+l(f.value?"Copied":"Copy"),1)])])])):y("",!0),g.value?(o(),a("div",se,[t[11]||(t[11]=e("div",{class:"text-sm font-semibold text-white"}," New API Key ",-1)),e("div",oe,[e("div",null,[t[6]||(t[6]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Name",-1)),D(e("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>d.value.name=s),placeholder:"e.g. ci-deployer",class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:border-white"},null,512),[[B,d.value.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Expires in",-1)),D(e("select",{"onUpdate:modelValue":t[2]||(t[2]=s=>d.value.expiresInDays=s),class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:border-white"},[...t[7]||(t[7]=[e("option",{value:0}," Never ",-1),e("option",{value:1}," 1 day ",-1),e("option",{value:7}," 7 days ",-1),e("option",{value:30}," 30 days ",-1),e("option",{value:90}," 90 days ",-1),e("option",{value:365}," 1 year ",-1)])],512),[[F,d.value.expiresInDays]])])]),e("div",ae,[c(w,{disabled:!d.value.name.trim()||b.value,loading:b.value,onClick:S},{default:h(()=>[...t[9]||(t[9]=[i(" Generate Key ",-1)])]),_:1},8,["disabled","loading"]),c(w,{variant:"secondary",onClick:E},{default:h(()=>[...t[10]||(t[10]=[i(" Cancel ",-1)])]),_:1})])])):y("",!0),e("div",re,[e("ul",ne,[(o(!0),a(K,null,N(m.value,s=>(o(),a("li",{key:s.id,class:"px-4 py-3"},[e("div",le,[e("div",de,[e("div",ie,[e("span",ce,l(s.name||"Unnamed"),1),s.prefix?(o(),a("code",ue,l(s.prefix)+"…",1)):y("",!0)]),e("div",pe,[s.last_used_at?(o(),a("span",xe,"used "+l(n(x)(s.last_used_at)),1)):(o(),a("span",me,"never used")),s.expires_at?n(A)(s.expires_at)?(o(),a("span",ye,"expired "+l(n(x)(s.expires_at)),1)):(o(),a("span",ve,"expires "+l(n(x)(s.expires_at)),1)):(o(),a("span",fe,"no expiry"))])]),c(I,{icon:n(P),variant:"danger",title:"Delete key",onClick:$=>k(s)},null,8,["icon","onClick"])])]))),128)),m.value.length===0?(o(),a("li",ge,[...t[12]||(t[12]=[i(" No API keys yet. Tap ",-1),e("span",{class:"text-white"},"New Key",-1),i(" to generate one. ",-1)])])):y("",!0)]),e("table",be,[t[14]||(t[14]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{scope:"col",class:"px-6 py-3 font-medium"}," Name "),e("th",{scope:"col",class:"px-6 py-3 font-medium hidden sm:table-cell"}," Prefix "),e("th",{scope:"col",class:"px-6 py-3 font-medium hidden xl:table-cell"}," Created "),e("th",{scope:"col",class:"px-6 py-3 font-medium hidden md:table-cell"}," Last Used "),e("th",{scope:"col",class:"px-6 py-3 font-medium hidden lg:table-cell"}," Expires "),e("th",{scope:"col",class:"px-6 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",_e,[(o(!0),a(K,null,N(m.value,s=>(o(),a("tr",{key:s.id,class:"hover:bg-surface/50 transition-colors"},[e("td",he,l(s.name||"Unnamed"),1),e("td",we,l(s.prefix?s.prefix+"…":n(O)),1),e("td",ke,l(V(s.created_at)),1),e("td",Ce,[s.last_used_at?(o(),a("span",De,l(n(x)(s.last_used_at)),1)):(o(),a("span",Ke,"Never used"))]),e("td",Ne,[s.expires_at?n(A)(s.expires_at)?(o(),a("span",Ae,"Expired "+l(n(x)(s.expires_at)),1)):(o(),a("span",Pe,l(n(x)(s.expires_at)),1)):(o(),a("span",Ie,"Never"))]),e("td",Te,[c(I,{icon:n(P),variant:"danger",title:"Delete key",onClick:$=>k(s)},null,8,["icon","onClick"])])]))),128)),m.value.length===0?(o(),a("tr",Ee,[...t[13]||(t[13]=[e("td",{colspan:"6",class:"px-6 py-8 text-center text-foreground-muted"},[i(" No API keys yet. Click "),e("span",{class:"text-white"},"New Key"),i(" to generate one. ")],-1)])])):y("",!0)])])])]))}};export{Ge as default}; diff --git a/backend/internal/server/ui_dist/assets/Channels-BVCLEepx.js b/backend/internal/server/ui_dist/assets/Channels-BrmOc5pT.js similarity index 97% rename from backend/internal/server/ui_dist/assets/Channels-BVCLEepx.js rename to backend/internal/server/ui_dist/assets/Channels-BrmOc5pT.js index 7fd4598..f6a6cda 100644 --- a/backend/internal/server/ui_dist/assets/Channels-BVCLEepx.js +++ b/backend/internal/server/ui_dist/assets/Channels-BrmOc5pT.js @@ -1 +1 @@ -import{r as f,o as G,W as Z,j as o,a as n,b as e,k as u,d,f as r,aa as H,S as U,e as L,v as E,F as N,t as i,p as F,s as J,w as z,g as v,h as w,_ as C,q as M,C as Y,n as P,a1 as ee,aQ as te,Z as se,B as j,aR as oe,aS as ne,aT as ae}from"./index-BMkkwZ9q.js";import{_ as I}from"./IconButton-BgeMzwXv.js";import{c as ie}from"./clipboard-CmSw2rR-.js";import{f as $,i as q}from"./time-Cfu9zNbw.js";import{C as le}from"./check-C4wzjDZN.js";import{C as re}from"./copy-CTb6u-fx.js";import{C as de}from"./circle-alert-DJMgVejj.js";import{R as O}from"./rotate-ccw-CsgWy1Bs.js";import{T as W}from"./trash-2-BXf2uqQH.js";const ue={class:"w-full max-w-2xl bg-background border border-border rounded-lg shadow-lg flex flex-col max-h-[80vh]"},ce={class:"px-5 py-4 border-b border-border flex items-start justify-between gap-3"},pe={class:"px-5 py-3 border-b border-border flex items-center gap-2"},me={class:"flex-1 overflow-y-auto"},xe={key:0,class:"px-5 py-10 text-center text-xs text-foreground-muted italic"},fe={key:1,class:"px-5 py-10 text-center"},ve={class:"text-xs text-foreground-muted"},ge={key:2,class:"divide-y divide-border"},he=["onClick"],ye=["checked","onClick"],be={class:"flex-1 min-w-0"},_e={class:"text-sm font-medium text-white truncate"},ke={key:0,class:"text-xs text-foreground-muted mt-0.5 line-clamp-1"},we={class:"text-[11px] text-foreground-muted font-mono shrink-0"},Ce={class:"px-5 py-3 border-t border-border flex items-center justify-between gap-3"},$e={class:"text-xs text-foreground-muted tabular-nums"},Ne={class:"flex gap-2"},De={__name:"FunctionPickerModal",props:{selected:{type:Array,default:()=>[]}},emits:["close","apply"],setup(T,{emit:D}){const b=T,h=D,g=f([]),_=f(!0),y=f(""),x=f(new Set(b.selected)),k=c=>{const a=new Set(x.value);a.has(c)?a.delete(c):a.add(c),x.value=a},l=M(()=>{const c=y.value.trim().toLowerCase();return c?g.value.filter(a=>a.name.toLowerCase().includes(c)||(a.description||"").toLowerCase().includes(c)||(a.runtime||"").toLowerCase().includes(c)):g.value}),R=()=>{h("apply",Array.from(x.value))};return G(async()=>{try{const c=await Z({limit:200});g.value=c.data.functions||[]}finally{_.value=!1}}),(c,a)=>(o(),n("div",{class:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",onClick:a[3]||(a[3]=z(p=>c.$emit("close"),["self"]))},[e("div",ue,[e("div",ce,[a[4]||(a[4]=e("div",null,[e("div",{class:"text-sm font-semibold text-white"}," Pick functions "),e("div",{class:"text-xs text-foreground-muted mt-0.5 max-w-prose leading-relaxed"},[u(" Each selected function becomes one MCP tool in this channel. Names with dashes are converted to snake_case (e.g. "),e("code",{class:"text-foreground"},"stripe-charge"),u(" → "),e("code",{class:"text-foreground"},"stripe_charge"),u("). ")])],-1)),e("button",{class:"text-foreground-muted hover:text-white transition-colors",title:"Dismiss",onClick:a[0]||(a[0]=p=>c.$emit("close"))},[d(r(H),{class:"w-4 h-4"})])]),e("div",pe,[d(r(U),{class:"w-4 h-4 text-foreground-muted shrink-0"}),L(e("input",{"onUpdate:modelValue":a[1]||(a[1]=p=>y.value=p),type:"text",placeholder:"Filter by name, description, or runtime",class:"flex-1 bg-transparent text-sm text-foreground placeholder-foreground-muted focus:outline-none"},null,512),[[E,y.value]])]),e("div",me,[_.value?(o(),n("div",xe," Loading functions… ")):l.value.length===0?(o(),n("div",fe,[d(r(U),{class:"w-8 h-8 text-foreground-muted mx-auto mb-2 opacity-30"}),e("p",ve,[g.value.length===0?(o(),n(N,{key:0},[u(" No functions deployed yet. ")],64)):(o(),n(N,{key:1},[u(' No functions match "'+i(y.value)+'". ',1)],64))])])):(o(),n("ul",ge,[(o(!0),n(N,null,F(l.value,p=>(o(),n("li",{key:p.id,class:J(["px-5 py-3 flex items-center gap-3 cursor-pointer transition-colors",x.value.has(p.id)?"bg-surface/30 hover:bg-surface/50":"hover:bg-surface/40"]),onClick:S=>k(p.id)},[e("input",{type:"checkbox",checked:x.value.has(p.id),class:"accent-primary cursor-pointer",onClick:z(S=>k(p.id),["stop"])},null,8,ye),e("div",be,[e("div",_e,i(p.name),1),p.description?(o(),n("div",ke,i(p.description),1)):v("",!0)]),e("code",we,i(p.runtime),1)],10,he))),128))]))]),e("div",Ce,[e("div",$e,i(x.value.size)+" of "+i(g.value.length)+" selected ",1),e("div",Ne,[d(C,{variant:"secondary",onClick:a[2]||(a[2]=p=>c.$emit("close"))},{default:w(()=>[...a[5]||(a[5]=[u(" Cancel ",-1)])]),_:1}),d(C,{disabled:x.value.size===0,onClick:R},{default:w(()=>[...a[6]||(a[6]=[u(" Apply ",-1)])]),_:1},8,["disabled"])])])])]))}},Ie={class:"space-y-6"},Le={class:"flex items-center justify-between gap-4"},Re={key:0,class:"bg-background border border-warning-ring rounded-lg p-4 space-y-3"},Se={class:"flex items-start justify-between gap-3"},Ae={class:"flex items-center gap-2"},Pe={class:"flex-1 font-mono text-sm text-white break-all bg-surface px-3 py-2 rounded border border-border"},je={class:"text-[11px] text-foreground-muted flex flex-wrap items-center gap-x-3 gap-y-1"},Ee={class:"text-foreground bg-surface px-1.5 py-0.5 rounded"},Fe={key:1,class:"bg-background border border-border rounded-lg p-5 space-y-4"},Me={class:"grid grid-cols-1 md:grid-cols-2 gap-3"},Te={class:"flex items-center justify-between mb-1.5"},Be={key:0,class:"text-[11px] text-foreground-muted"},Ve={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200 flex items-start gap-2"},Ue={class:"flex gap-2 pt-1"},ze={class:"bg-background border border-border rounded-lg overflow-x-auto"},qe={class:"sm:hidden divide-y divide-border"},Oe={class:"flex items-start justify-between gap-2"},We={class:"min-w-0 flex-1"},Ge={class:"flex items-center gap-2 flex-wrap"},He={class:"font-medium text-white truncate"},Ke={class:"inline-flex items-center gap-1 text-[11px] text-foreground-muted"},Qe={key:0,class:"mt-1 text-xs text-foreground-muted line-clamp-2"},Xe={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Ze={class:"font-mono"},Je={key:0},Ye={key:1,class:"text-amber-400/80"},et={key:2,class:"text-red-400"},tt={key:3},st={class:"flex items-center gap-1 shrink-0"},ot={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted"},nt={class:"hidden sm:table w-full text-sm text-left"},at={class:"divide-y divide-border"},it={class:"px-6 py-4"},lt={class:"font-medium text-white"},rt={key:0,class:"text-xs text-foreground-muted mt-0.5 line-clamp-1 max-w-md"},dt={class:"px-6 py-4"},ut={class:"inline-flex items-center gap-1.5 text-foreground-muted"},ct={class:"tabular-nums"},pt={class:"px-6 py-4 hidden sm:table-cell"},mt={class:"text-foreground-muted font-mono text-xs"},xt={class:"px-6 py-4 hidden md:table-cell"},ft={key:0,class:"text-foreground-muted"},vt={key:1,class:"text-amber-400/70 text-xs"},gt={class:"px-6 py-4 hidden lg:table-cell"},ht={key:0,class:"text-foreground-muted"},yt={key:1,class:"text-red-400 text-xs"},bt={key:2,class:"text-foreground-muted"},_t={class:"px-6 py-4 text-right"},kt={class:"inline-flex justify-end gap-1"},wt={key:0},Pt={__name:"Channels",setup(T){const D=Y(),b=f([]),h=f(""),g=f(!1),_=f(!1),y=f(!1),x=f(""),k=f(!1),l=f({name:"",description:"",expiresInDays:0,functionIds:[]}),R=M(()=>`${window.location.origin}/mcp`),c=M(()=>l.value.name.trim()&&l.value.functionIds.length>0),a=async()=>{const m=await te();b.value=m.data.channels||[]},p=()=>{l.value={name:"",description:"",expiresInDays:0,functionIds:[]},x.value="",_.value=!0},S=()=>{_.value=!1},K=m=>{l.value.functionIds=m,k.value=!1},Q=async()=>{y.value=!0,x.value="";try{const m={name:l.value.name.trim(),description:l.value.description.trim(),function_ids:l.value.functionIds};l.value.expiresInDays>0&&(m.expires_in_days=l.value.expiresInDays);const t=await oe(m);h.value=t.data.token,_.value=!1,await a()}catch(m){x.value=m?.response?.data?.error?.message||"Failed to create channel."}finally{y.value=!1}},X=async()=>{h.value&&await ie(h.value)&&(g.value=!0,setTimeout(()=>{g.value=!1},1500))},B=async m=>{if(!await D.ask({title:`Rotate ${m.name}?`,message:"A new token will be issued. The previous token stops working immediately. Agents using it will need the new value.",confirmLabel:"Rotate",danger:!0}))return;const s=await ne(m.id);h.value=s.data.token,await a()},V=async m=>{await D.ask({title:`Delete ${m.name}?`,message:`${m.name} will lose MCP access immediately. Functions inside are not affected. Re-create the channel if you need it again.`,confirmLabel:"Delete",danger:!0})&&(await ae(m.id),await a())};return G(a),(m,t)=>(o(),n("div",Ie,[e("div",Le,[t[7]||(t[7]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Channels "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Bundle deployed functions and expose them as MCP tools to a third-party agent. Each channel has its own bearer token that grants invoke-only access to its functions and nothing else on Orva, but the bundled functions themselves remain as powerful as you've configured them, including any in-sandbox SDK calls they make. ")],-1)),d(C,{onClick:p},{default:w(()=>[d(r(se),{class:"w-4 h-4"}),t[6]||(t[6]=u(" New channel ",-1))]),_:1})]),h.value?(o(),n("div",Re,[e("div",Se,[t[8]||(t[8]=e("div",null,[e("h2",{class:"text-xs font-bold text-warning-fg uppercase tracking-wider"}," Copy this token now "),e("div",{class:"text-xs text-foreground-muted mt-0.5"}," It will not be shown again. Configure it in your agent's MCP client. ")],-1)),e("button",{class:"text-foreground-muted hover:text-white transition-colors",title:"Dismiss",onClick:t[0]||(t[0]=s=>h.value="")},[d(r(H),{class:"w-4 h-4"})])]),e("div",Ae,[e("code",Pe,i(h.value),1),e("button",{class:"px-3 py-2 rounded-md border border-border bg-surface-hover hover:bg-surface text-foreground-muted hover:text-white transition-colors flex items-center gap-1.5 text-xs",onClick:X},[g.value?(o(),P(r(le),{key:0,class:"w-3.5 h-3.5 text-success"})):(o(),P(r(re),{key:1,class:"w-3.5 h-3.5"})),u(" "+i(g.value?"Copied":"Copy"),1)])]),e("div",je,[e("span",null,[t[9]||(t[9]=u("URL ",-1)),e("code",Ee,i(R.value),1)]),t[10]||(t[10]=e("span",null,[u("Header "),e("code",{class:"text-foreground bg-surface px-1.5 py-0.5 rounded"},"Authorization: Bearer ")],-1))])])):v("",!0),_.value?(o(),n("div",Fe,[t[18]||(t[18]=e("div",{class:"text-sm font-semibold text-white"}," New channel ",-1)),e("div",Me,[e("div",null,[t[11]||(t[11]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Name",-1)),L(e("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>l.value.name=s),placeholder:"e.g. support-bot",class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary transition-colors"},null,512),[[E,l.value.name]])]),e("div",null,[t[13]||(t[13]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Expires in",-1)),L(e("select",{"onUpdate:modelValue":t[2]||(t[2]=s=>l.value.expiresInDays=s),class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary transition-colors"},[...t[12]||(t[12]=[e("option",{value:0}," Never ",-1),e("option",{value:7}," 7 days ",-1),e("option",{value:30}," 30 days ",-1),e("option",{value:90}," 90 days ",-1)])],512),[[ee,l.value.expiresInDays]])])]),e("div",null,[t[14]||(t[14]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Description (optional)",-1)),L(e("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>l.value.description=s),placeholder:"What this channel is for",class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary transition-colors"},null,512),[[E,l.value.description]])]),e("div",null,[e("div",Te,[t[15]||(t[15]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},"Functions",-1)),l.value.functionIds.length>0?(o(),n("span",Be,i(l.value.functionIds.length)+" selected",1)):v("",!0)]),d(C,{variant:"secondary",onClick:t[4]||(t[4]=s=>k.value=!0)},{default:w(()=>[d(r(j),{class:"w-4 h-4"}),u(" "+i(l.value.functionIds.length===0?"Pick functions":"Edit selection"),1)]),_:1})]),x.value?(o(),n("div",Ve,[d(r(de),{class:"w-4 h-4 text-red-400 shrink-0 mt-0.5"}),e("span",null,i(x.value),1)])):v("",!0),e("div",Ue,[d(C,{disabled:!c.value||y.value,loading:y.value,onClick:Q},{default:w(()=>[...t[16]||(t[16]=[u(" Generate token ",-1)])]),_:1},8,["disabled","loading"]),d(C,{variant:"secondary",onClick:S},{default:w(()=>[...t[17]||(t[17]=[u(" Cancel ",-1)])]),_:1})])])):v("",!0),e("div",ze,[e("ul",qe,[(o(!0),n(N,null,F(b.value,s=>(o(),n("li",{key:s.id,class:"px-4 py-3"},[e("div",Oe,[e("div",We,[e("div",Ge,[e("span",He,i(s.name),1),e("span",Ke,[d(r(j),{class:"w-3 h-3"}),u(" "+i(s.function_count),1)])]),s.description?(o(),n("div",Qe,i(s.description),1)):v("",!0),e("div",Xe,[e("code",Ze,i(s.prefix)+"…",1),s.last_used_at?(o(),n("span",Je,"used "+i(r($)(s.last_used_at)),1)):(o(),n("span",Ye,"never used")),s.expires_at&&r(q)(s.expires_at)?(o(),n("span",et,"expired")):s.expires_at?(o(),n("span",tt,"expires "+i(r($)(s.expires_at)),1)):v("",!0)])]),e("div",st,[d(I,{icon:r(O),title:"Rotate token",onClick:A=>B(s)},null,8,["icon","onClick"]),d(I,{icon:r(W),variant:"danger",title:"Delete channel",onClick:A=>V(s)},null,8,["icon","onClick"])])])]))),128)),b.value.length===0?(o(),n("li",ot," No channels yet. ")):v("",!0)]),e("table",nt,[t[20]||(t[20]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-6 py-3 font-medium"}," Name "),e("th",{class:"px-6 py-3 font-medium"}," Functions "),e("th",{class:"px-6 py-3 font-medium hidden sm:table-cell"}," Prefix "),e("th",{class:"px-6 py-3 font-medium hidden md:table-cell"}," Last used "),e("th",{class:"px-6 py-3 font-medium hidden lg:table-cell"}," Expires "),e("th",{class:"px-6 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",at,[(o(!0),n(N,null,F(b.value,s=>(o(),n("tr",{key:s.id,class:"hover:bg-surface/50 transition-colors"},[e("td",it,[e("div",lt,i(s.name),1),s.description?(o(),n("div",rt,i(s.description),1)):v("",!0)]),e("td",dt,[e("span",ut,[d(r(j),{class:"w-3.5 h-3.5"}),e("span",ct,i(s.function_count),1)])]),e("td",pt,[e("code",mt,i(s.prefix)+"…",1)]),e("td",xt,[s.last_used_at?(o(),n("span",ft,i(r($)(s.last_used_at)),1)):(o(),n("span",vt,"Never used"))]),e("td",gt,[s.expires_at?r(q)(s.expires_at)?(o(),n("span",yt,"Expired "+i(r($)(s.expires_at)),1)):(o(),n("span",bt,i(r($)(s.expires_at)),1)):(o(),n("span",ht,"Never"))]),e("td",_t,[e("div",kt,[d(I,{icon:r(O),title:"Rotate token",onClick:A=>B(s)},null,8,["icon","onClick"]),d(I,{icon:r(W),variant:"danger",title:"Delete channel",onClick:A=>V(s)},null,8,["icon","onClick"])])])]))),128)),b.value.length===0?(o(),n("tr",wt,[...t[19]||(t[19]=[e("td",{colspan:"6",class:"px-6 py-8 text-center text-foreground-muted"},[u(" No channels yet. Click "),e("span",{class:"text-white"},"New channel"),u(" to bundle functions for an agent. ")],-1)])])):v("",!0)])])]),k.value?(o(),P(De,{key:2,selected:l.value.functionIds,onClose:t[5]||(t[5]=s=>k.value=!1),onApply:K},null,8,["selected"])):v("",!0)]))}};export{Pt as default}; +import{r as f,o as G,W as Z,j as o,a as n,b as e,k as u,d,f as r,aa as H,S as U,e as L,v as E,F as N,t as i,p as F,s as J,w as z,g as v,h as w,_ as C,q as M,C as Y,n as P,a1 as ee,aQ as te,Z as se,B as j,aR as oe,aS as ne,aT as ae}from"./index-fIeDYqWy.js";import{_ as I}from"./IconButton-CnguiHlc.js";import{c as ie}from"./clipboard-CmSw2rR-.js";import{f as $,i as q}from"./time-Cfu9zNbw.js";import{C as le}from"./check-Cwg1V2MO.js";import{C as re}from"./copy-DJiur09W.js";import{C as de}from"./circle-alert-C9zmFbXU.js";import{R as O}from"./rotate-ccw-BYpihd4d.js";import{T as W}from"./trash-2-B2Wniuw-.js";const ue={class:"w-full max-w-2xl bg-background border border-border rounded-lg shadow-lg flex flex-col max-h-[80vh]"},ce={class:"px-5 py-4 border-b border-border flex items-start justify-between gap-3"},pe={class:"px-5 py-3 border-b border-border flex items-center gap-2"},me={class:"flex-1 overflow-y-auto"},xe={key:0,class:"px-5 py-10 text-center text-xs text-foreground-muted italic"},fe={key:1,class:"px-5 py-10 text-center"},ve={class:"text-xs text-foreground-muted"},ge={key:2,class:"divide-y divide-border"},he=["onClick"],ye=["checked","onClick"],be={class:"flex-1 min-w-0"},_e={class:"text-sm font-medium text-white truncate"},ke={key:0,class:"text-xs text-foreground-muted mt-0.5 line-clamp-1"},we={class:"text-[11px] text-foreground-muted font-mono shrink-0"},Ce={class:"px-5 py-3 border-t border-border flex items-center justify-between gap-3"},$e={class:"text-xs text-foreground-muted tabular-nums"},Ne={class:"flex gap-2"},De={__name:"FunctionPickerModal",props:{selected:{type:Array,default:()=>[]}},emits:["close","apply"],setup(T,{emit:D}){const b=T,h=D,g=f([]),_=f(!0),y=f(""),x=f(new Set(b.selected)),k=c=>{const a=new Set(x.value);a.has(c)?a.delete(c):a.add(c),x.value=a},l=M(()=>{const c=y.value.trim().toLowerCase();return c?g.value.filter(a=>a.name.toLowerCase().includes(c)||(a.description||"").toLowerCase().includes(c)||(a.runtime||"").toLowerCase().includes(c)):g.value}),R=()=>{h("apply",Array.from(x.value))};return G(async()=>{try{const c=await Z({limit:200});g.value=c.data.functions||[]}finally{_.value=!1}}),(c,a)=>(o(),n("div",{class:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",onClick:a[3]||(a[3]=z(p=>c.$emit("close"),["self"]))},[e("div",ue,[e("div",ce,[a[4]||(a[4]=e("div",null,[e("div",{class:"text-sm font-semibold text-white"}," Pick functions "),e("div",{class:"text-xs text-foreground-muted mt-0.5 max-w-prose leading-relaxed"},[u(" Each selected function becomes one MCP tool in this channel. Names with dashes are converted to snake_case (e.g. "),e("code",{class:"text-foreground"},"stripe-charge"),u(" → "),e("code",{class:"text-foreground"},"stripe_charge"),u("). ")])],-1)),e("button",{class:"text-foreground-muted hover:text-white transition-colors",title:"Dismiss",onClick:a[0]||(a[0]=p=>c.$emit("close"))},[d(r(H),{class:"w-4 h-4"})])]),e("div",pe,[d(r(U),{class:"w-4 h-4 text-foreground-muted shrink-0"}),L(e("input",{"onUpdate:modelValue":a[1]||(a[1]=p=>y.value=p),type:"text",placeholder:"Filter by name, description, or runtime",class:"flex-1 bg-transparent text-sm text-foreground placeholder-foreground-muted focus:outline-none"},null,512),[[E,y.value]])]),e("div",me,[_.value?(o(),n("div",xe," Loading functions… ")):l.value.length===0?(o(),n("div",fe,[d(r(U),{class:"w-8 h-8 text-foreground-muted mx-auto mb-2 opacity-30"}),e("p",ve,[g.value.length===0?(o(),n(N,{key:0},[u(" No functions deployed yet. ")],64)):(o(),n(N,{key:1},[u(' No functions match "'+i(y.value)+'". ',1)],64))])])):(o(),n("ul",ge,[(o(!0),n(N,null,F(l.value,p=>(o(),n("li",{key:p.id,class:J(["px-5 py-3 flex items-center gap-3 cursor-pointer transition-colors",x.value.has(p.id)?"bg-surface/30 hover:bg-surface/50":"hover:bg-surface/40"]),onClick:S=>k(p.id)},[e("input",{type:"checkbox",checked:x.value.has(p.id),class:"accent-primary cursor-pointer",onClick:z(S=>k(p.id),["stop"])},null,8,ye),e("div",be,[e("div",_e,i(p.name),1),p.description?(o(),n("div",ke,i(p.description),1)):v("",!0)]),e("code",we,i(p.runtime),1)],10,he))),128))]))]),e("div",Ce,[e("div",$e,i(x.value.size)+" of "+i(g.value.length)+" selected ",1),e("div",Ne,[d(C,{variant:"secondary",onClick:a[2]||(a[2]=p=>c.$emit("close"))},{default:w(()=>[...a[5]||(a[5]=[u(" Cancel ",-1)])]),_:1}),d(C,{disabled:x.value.size===0,onClick:R},{default:w(()=>[...a[6]||(a[6]=[u(" Apply ",-1)])]),_:1},8,["disabled"])])])])]))}},Ie={class:"space-y-6"},Le={class:"flex items-center justify-between gap-4"},Re={key:0,class:"bg-background border border-warning-ring rounded-lg p-4 space-y-3"},Se={class:"flex items-start justify-between gap-3"},Ae={class:"flex items-center gap-2"},Pe={class:"flex-1 font-mono text-sm text-white break-all bg-surface px-3 py-2 rounded border border-border"},je={class:"text-[11px] text-foreground-muted flex flex-wrap items-center gap-x-3 gap-y-1"},Ee={class:"text-foreground bg-surface px-1.5 py-0.5 rounded"},Fe={key:1,class:"bg-background border border-border rounded-lg p-5 space-y-4"},Me={class:"grid grid-cols-1 md:grid-cols-2 gap-3"},Te={class:"flex items-center justify-between mb-1.5"},Be={key:0,class:"text-[11px] text-foreground-muted"},Ve={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200 flex items-start gap-2"},Ue={class:"flex gap-2 pt-1"},ze={class:"bg-background border border-border rounded-lg overflow-x-auto"},qe={class:"sm:hidden divide-y divide-border"},Oe={class:"flex items-start justify-between gap-2"},We={class:"min-w-0 flex-1"},Ge={class:"flex items-center gap-2 flex-wrap"},He={class:"font-medium text-white truncate"},Ke={class:"inline-flex items-center gap-1 text-[11px] text-foreground-muted"},Qe={key:0,class:"mt-1 text-xs text-foreground-muted line-clamp-2"},Xe={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Ze={class:"font-mono"},Je={key:0},Ye={key:1,class:"text-amber-400/80"},et={key:2,class:"text-red-400"},tt={key:3},st={class:"flex items-center gap-1 shrink-0"},ot={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted"},nt={class:"hidden sm:table w-full text-sm text-left"},at={class:"divide-y divide-border"},it={class:"px-6 py-4"},lt={class:"font-medium text-white"},rt={key:0,class:"text-xs text-foreground-muted mt-0.5 line-clamp-1 max-w-md"},dt={class:"px-6 py-4"},ut={class:"inline-flex items-center gap-1.5 text-foreground-muted"},ct={class:"tabular-nums"},pt={class:"px-6 py-4 hidden sm:table-cell"},mt={class:"text-foreground-muted font-mono text-xs"},xt={class:"px-6 py-4 hidden md:table-cell"},ft={key:0,class:"text-foreground-muted"},vt={key:1,class:"text-amber-400/70 text-xs"},gt={class:"px-6 py-4 hidden lg:table-cell"},ht={key:0,class:"text-foreground-muted"},yt={key:1,class:"text-red-400 text-xs"},bt={key:2,class:"text-foreground-muted"},_t={class:"px-6 py-4 text-right"},kt={class:"inline-flex justify-end gap-1"},wt={key:0},Pt={__name:"Channels",setup(T){const D=Y(),b=f([]),h=f(""),g=f(!1),_=f(!1),y=f(!1),x=f(""),k=f(!1),l=f({name:"",description:"",expiresInDays:0,functionIds:[]}),R=M(()=>`${window.location.origin}/mcp`),c=M(()=>l.value.name.trim()&&l.value.functionIds.length>0),a=async()=>{const m=await te();b.value=m.data.channels||[]},p=()=>{l.value={name:"",description:"",expiresInDays:0,functionIds:[]},x.value="",_.value=!0},S=()=>{_.value=!1},K=m=>{l.value.functionIds=m,k.value=!1},Q=async()=>{y.value=!0,x.value="";try{const m={name:l.value.name.trim(),description:l.value.description.trim(),function_ids:l.value.functionIds};l.value.expiresInDays>0&&(m.expires_in_days=l.value.expiresInDays);const t=await oe(m);h.value=t.data.token,_.value=!1,await a()}catch(m){x.value=m?.response?.data?.error?.message||"Failed to create channel."}finally{y.value=!1}},X=async()=>{h.value&&await ie(h.value)&&(g.value=!0,setTimeout(()=>{g.value=!1},1500))},B=async m=>{if(!await D.ask({title:`Rotate ${m.name}?`,message:"A new token will be issued. The previous token stops working immediately. Agents using it will need the new value.",confirmLabel:"Rotate",danger:!0}))return;const s=await ne(m.id);h.value=s.data.token,await a()},V=async m=>{await D.ask({title:`Delete ${m.name}?`,message:`${m.name} will lose MCP access immediately. Functions inside are not affected. Re-create the channel if you need it again.`,confirmLabel:"Delete",danger:!0})&&(await ae(m.id),await a())};return G(a),(m,t)=>(o(),n("div",Ie,[e("div",Le,[t[7]||(t[7]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Channels "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Bundle deployed functions and expose them as MCP tools to a third-party agent. Each channel has its own bearer token that grants invoke-only access to its functions and nothing else on Orva, but the bundled functions themselves remain as powerful as you've configured them, including any in-sandbox SDK calls they make. ")],-1)),d(C,{onClick:p},{default:w(()=>[d(r(se),{class:"w-4 h-4"}),t[6]||(t[6]=u(" New channel ",-1))]),_:1})]),h.value?(o(),n("div",Re,[e("div",Se,[t[8]||(t[8]=e("div",null,[e("h2",{class:"text-xs font-bold text-warning-fg uppercase tracking-wider"}," Copy this token now "),e("div",{class:"text-xs text-foreground-muted mt-0.5"}," It will not be shown again. Configure it in your agent's MCP client. ")],-1)),e("button",{class:"text-foreground-muted hover:text-white transition-colors",title:"Dismiss",onClick:t[0]||(t[0]=s=>h.value="")},[d(r(H),{class:"w-4 h-4"})])]),e("div",Ae,[e("code",Pe,i(h.value),1),e("button",{class:"px-3 py-2 rounded-md border border-border bg-surface-hover hover:bg-surface text-foreground-muted hover:text-white transition-colors flex items-center gap-1.5 text-xs",onClick:X},[g.value?(o(),P(r(le),{key:0,class:"w-3.5 h-3.5 text-success"})):(o(),P(r(re),{key:1,class:"w-3.5 h-3.5"})),u(" "+i(g.value?"Copied":"Copy"),1)])]),e("div",je,[e("span",null,[t[9]||(t[9]=u("URL ",-1)),e("code",Ee,i(R.value),1)]),t[10]||(t[10]=e("span",null,[u("Header "),e("code",{class:"text-foreground bg-surface px-1.5 py-0.5 rounded"},"Authorization: Bearer ")],-1))])])):v("",!0),_.value?(o(),n("div",Fe,[t[18]||(t[18]=e("div",{class:"text-sm font-semibold text-white"}," New channel ",-1)),e("div",Me,[e("div",null,[t[11]||(t[11]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Name",-1)),L(e("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>l.value.name=s),placeholder:"e.g. support-bot",class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary transition-colors"},null,512),[[E,l.value.name]])]),e("div",null,[t[13]||(t[13]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Expires in",-1)),L(e("select",{"onUpdate:modelValue":t[2]||(t[2]=s=>l.value.expiresInDays=s),class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary transition-colors"},[...t[12]||(t[12]=[e("option",{value:0}," Never ",-1),e("option",{value:7}," 7 days ",-1),e("option",{value:30}," 30 days ",-1),e("option",{value:90}," 90 days ",-1)])],512),[[ee,l.value.expiresInDays]])])]),e("div",null,[t[14]||(t[14]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Description (optional)",-1)),L(e("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>l.value.description=s),placeholder:"What this channel is for",class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary transition-colors"},null,512),[[E,l.value.description]])]),e("div",null,[e("div",Te,[t[15]||(t[15]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},"Functions",-1)),l.value.functionIds.length>0?(o(),n("span",Be,i(l.value.functionIds.length)+" selected",1)):v("",!0)]),d(C,{variant:"secondary",onClick:t[4]||(t[4]=s=>k.value=!0)},{default:w(()=>[d(r(j),{class:"w-4 h-4"}),u(" "+i(l.value.functionIds.length===0?"Pick functions":"Edit selection"),1)]),_:1})]),x.value?(o(),n("div",Ve,[d(r(de),{class:"w-4 h-4 text-red-400 shrink-0 mt-0.5"}),e("span",null,i(x.value),1)])):v("",!0),e("div",Ue,[d(C,{disabled:!c.value||y.value,loading:y.value,onClick:Q},{default:w(()=>[...t[16]||(t[16]=[u(" Generate token ",-1)])]),_:1},8,["disabled","loading"]),d(C,{variant:"secondary",onClick:S},{default:w(()=>[...t[17]||(t[17]=[u(" Cancel ",-1)])]),_:1})])])):v("",!0),e("div",ze,[e("ul",qe,[(o(!0),n(N,null,F(b.value,s=>(o(),n("li",{key:s.id,class:"px-4 py-3"},[e("div",Oe,[e("div",We,[e("div",Ge,[e("span",He,i(s.name),1),e("span",Ke,[d(r(j),{class:"w-3 h-3"}),u(" "+i(s.function_count),1)])]),s.description?(o(),n("div",Qe,i(s.description),1)):v("",!0),e("div",Xe,[e("code",Ze,i(s.prefix)+"…",1),s.last_used_at?(o(),n("span",Je,"used "+i(r($)(s.last_used_at)),1)):(o(),n("span",Ye,"never used")),s.expires_at&&r(q)(s.expires_at)?(o(),n("span",et,"expired")):s.expires_at?(o(),n("span",tt,"expires "+i(r($)(s.expires_at)),1)):v("",!0)])]),e("div",st,[d(I,{icon:r(O),title:"Rotate token",onClick:A=>B(s)},null,8,["icon","onClick"]),d(I,{icon:r(W),variant:"danger",title:"Delete channel",onClick:A=>V(s)},null,8,["icon","onClick"])])])]))),128)),b.value.length===0?(o(),n("li",ot," No channels yet. ")):v("",!0)]),e("table",nt,[t[20]||(t[20]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-6 py-3 font-medium"}," Name "),e("th",{class:"px-6 py-3 font-medium"}," Functions "),e("th",{class:"px-6 py-3 font-medium hidden sm:table-cell"}," Prefix "),e("th",{class:"px-6 py-3 font-medium hidden md:table-cell"}," Last used "),e("th",{class:"px-6 py-3 font-medium hidden lg:table-cell"}," Expires "),e("th",{class:"px-6 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",at,[(o(!0),n(N,null,F(b.value,s=>(o(),n("tr",{key:s.id,class:"hover:bg-surface/50 transition-colors"},[e("td",it,[e("div",lt,i(s.name),1),s.description?(o(),n("div",rt,i(s.description),1)):v("",!0)]),e("td",dt,[e("span",ut,[d(r(j),{class:"w-3.5 h-3.5"}),e("span",ct,i(s.function_count),1)])]),e("td",pt,[e("code",mt,i(s.prefix)+"…",1)]),e("td",xt,[s.last_used_at?(o(),n("span",ft,i(r($)(s.last_used_at)),1)):(o(),n("span",vt,"Never used"))]),e("td",gt,[s.expires_at?r(q)(s.expires_at)?(o(),n("span",yt,"Expired "+i(r($)(s.expires_at)),1)):(o(),n("span",bt,i(r($)(s.expires_at)),1)):(o(),n("span",ht,"Never"))]),e("td",_t,[e("div",kt,[d(I,{icon:r(O),title:"Rotate token",onClick:A=>B(s)},null,8,["icon","onClick"]),d(I,{icon:r(W),variant:"danger",title:"Delete channel",onClick:A=>V(s)},null,8,["icon","onClick"])])])]))),128)),b.value.length===0?(o(),n("tr",wt,[...t[19]||(t[19]=[e("td",{colspan:"6",class:"px-6 py-8 text-center text-foreground-muted"},[u(" No channels yet. Click "),e("span",{class:"text-white"},"New channel"),u(" to bundle functions for an agent. ")],-1)])])):v("",!0)])])]),k.value?(o(),P(De,{key:2,selected:l.value.functionIds,onClose:t[5]||(t[5]=s=>k.value=!1),onApply:K},null,8,["selected"])):v("",!0)]))}};export{Pt as default}; diff --git a/backend/internal/server/ui_dist/assets/CodeEditor-1BBBEH1J.js b/backend/internal/server/ui_dist/assets/CodeEditor-Cyik7IS9.js similarity index 95% rename from backend/internal/server/ui_dist/assets/CodeEditor-1BBBEH1J.js rename to backend/internal/server/ui_dist/assets/CodeEditor-Cyik7IS9.js index 190b930..4518d4f 100644 --- a/backend/internal/server/ui_dist/assets/CodeEditor-1BBBEH1J.js +++ b/backend/internal/server/ui_dist/assets/CodeEditor-Cyik7IS9.js @@ -1 +1 @@ -import{a as c,p as m,q as g,C as h,E as n,r as y,u as d}from"./index-BOWx3BJu.js";import{D as _,o as x,y as S,E as l,j as E,a as v,r as w}from"./index-BMkkwZ9q.js";const C={__name:"CodeEditor",props:{modelValue:{type:String,default:""},language:{type:String,default:"javascript"},readOnly:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(p,{emit:f}){const a=p,u=f,s=w(null);let t=null;const r=new h,i=e=>e?.startsWith("python")?y():e?.startsWith("node")||e==="javascript"?d():d();return x(()=>{const e=c.create({doc:a.modelValue,extensions:[m,r.of(i(a.language)),g,n.updateListener.of(o=>{o.docChanged&&u("update:modelValue",o.state.doc.toString())}),n.theme({"&":{fontSize:"16px",height:"100%"},"@media (min-width: 640px)":{"&":{fontSize:"14px"}},".cm-scroller":{fontFamily:"JetBrains Mono, monospace",lineHeight:"1.6"},".cm-content":{padding:"16px 0"},".cm-line":{padding:"0 16px"}}),c.readOnly.of(a.readOnly)]});t=new n({state:e,parent:s.value})}),S(()=>{t&&t.destroy()}),l(()=>a.modelValue,e=>{t&&e!==t.state.doc.toString()&&t.dispatch({changes:{from:0,to:t.state.doc.length,insert:e}})}),l(()=>a.language,e=>{t&&t.dispatch({effects:r.reconfigure(i(e))})}),(e,o)=>(E(),v("div",{ref_key:"editorRef",ref:s,class:"h-full w-full"},null,512))}},k=_(C,[["__scopeId","data-v-ccca551c"]]);export{k as default}; +import{a as c,p as m,q as g,C as h,E as n,r as y,u as d}from"./index-BOWx3BJu.js";import{D as _,o as x,y as S,E as l,j as E,a as v,r as w}from"./index-fIeDYqWy.js";const C={__name:"CodeEditor",props:{modelValue:{type:String,default:""},language:{type:String,default:"javascript"},readOnly:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(p,{emit:f}){const a=p,u=f,s=w(null);let t=null;const r=new h,i=e=>e?.startsWith("python")?y():e?.startsWith("node")||e==="javascript"?d():d();return x(()=>{const e=c.create({doc:a.modelValue,extensions:[m,r.of(i(a.language)),g,n.updateListener.of(o=>{o.docChanged&&u("update:modelValue",o.state.doc.toString())}),n.theme({"&":{fontSize:"16px",height:"100%"},"@media (min-width: 640px)":{"&":{fontSize:"14px"}},".cm-scroller":{fontFamily:"JetBrains Mono, monospace",lineHeight:"1.6"},".cm-content":{padding:"16px 0"},".cm-line":{padding:"0 16px"}}),c.readOnly.of(a.readOnly)]});t=new n({state:e,parent:s.value})}),S(()=>{t&&t.destroy()}),l(()=>a.modelValue,e=>{t&&e!==t.state.doc.toString()&&t.dispatch({changes:{from:0,to:t.state.doc.length,insert:e}})}),l(()=>a.language,e=>{t&&t.dispatch({effects:r.reconfigure(i(e))})}),(e,o)=>(E(),v("div",{ref_key:"editorRef",ref:s,class:"h-full w-full"},null,512))}},k=_(C,[["__scopeId","data-v-ccca551c"]]);export{k as default}; diff --git a/backend/internal/server/ui_dist/assets/CronJobs-C1Lm7OXf.js b/backend/internal/server/ui_dist/assets/CronJobs-CHCHOKdI.js similarity index 98% rename from backend/internal/server/ui_dist/assets/CronJobs-C1Lm7OXf.js rename to backend/internal/server/ui_dist/assets/CronJobs-CHCHOKdI.js index 4b75404..e67cf5b 100644 --- a/backend/internal/server/ui_dist/assets/CronJobs-C1Lm7OXf.js +++ b/backend/internal/server/ui_dist/assets/CronJobs-CHCHOKdI.js @@ -1 +1 @@ -import{c as X,as as oe,C as ne,o as se,a as l,b as e,d as c,h as _,_ as O,F as C,p as S,f as a,g as x,at as re,W as ae,r as v,j as d,k as m,t as r,s as q,n as J,H as R,e as f,a1 as F,v as U,ab as de,au as H,av as le,aw as ue}from"./index-BMkkwZ9q.js";import{E as P}from"./format-CsU4_SPu.js";import{_ as y}from"./IconButton-BgeMzwXv.js";import{_ as ie}from"./Modal-jEhKmxZK.js";import{a as D,C as Y}from"./clock-BWp9w4xs.js";import{P as G}from"./play-CPjfKIOc.js";import{S as K}from"./square-pen-CsqFW8Ka.js";import{T as Z}from"./trash-2-BXf2uqQH.js";const ce=X("circle-plus",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]]);const Q=X("pause",[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]),me={class:"space-y-6"},fe={class:"flex items-center justify-between"},pe={class:"bg-background border border-border rounded-lg overflow-x-auto"},xe={class:"sm:hidden divide-y divide-border"},ge={class:"flex items-start justify-between gap-2"},ve={class:"min-w-0 flex-1"},be={class:"flex items-center gap-2 flex-wrap"},ye={class:"font-medium text-foreground truncate"},he={class:"mt-1 text-[11px] text-foreground font-mono break-all"},ke={class:"mt-0.5 text-[11px] text-foreground-muted"},we={class:"text-foreground-muted/70"},_e={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Ce={class:"flex items-center gap-1 shrink-0"},Se={key:0,class:"px-6 py-12 text-center"},$e={class:"hidden sm:table w-full text-sm text-left"},Ae={class:"divide-y divide-border"},Me={class:"px-6 py-4 font-medium text-foreground max-w-[16rem] truncate"},Te={class:"px-6 py-4"},Ee={class:"flex flex-col gap-1"},ze={class:"text-foreground font-mono text-xs break-all"},Fe={class:"text-foreground-muted text-[10px]"},Ue={class:"text-foreground-muted/70"},Pe={class:"px-6 py-4 hidden sm:table-cell"},De={class:"px-6 py-4 text-foreground-muted text-xs hidden md:table-cell"},Ve={class:"px-6 py-4 text-foreground-muted text-xs hidden lg:table-cell"},Oe={class:"px-6 py-4 text-right"},qe={class:"inline-flex items-center gap-1"},Ne={key:0},We={colspan:"6",class:"px-6 py-12 text-center"},Le={class:"space-y-5"},Ie=["disabled"],Be=["value"],Je={class:"flex gap-2 bg-background rounded-lg p-1 border border-border"},Re=["onClick"],He={key:0,class:"space-y-4"},Ye={class:"grid grid-cols-3 gap-3"},Ge={key:0},Ke={key:1},Ze={key:2},Qe={key:3},Xe={class:"bg-background border border-border rounded-lg p-4"},je={class:"font-mono text-sm text-foreground"},et={class:"text-xs text-foreground-muted mt-1"},tt={key:1,class:"space-y-3"},ot={class:"bg-background border border-border rounded-lg p-4"},nt={class:"text-xs text-foreground"},st=["value"],rt={class:"text-xs text-foreground-muted mt-1.5"},at={class:"bg-surface px-1 rounded"},dt={class:"flex items-center gap-3"},bt={__name:"CronJobs",setup(lt){const $=oe(),j=(()=>{const n=["UTC","America/Los_Angeles","America/New_York","America/Chicago","America/Denver","America/Sao_Paulo","Europe/London","Europe/Berlin","Europe/Paris","Europe/Moscow","Africa/Lagos","Africa/Cairo","Africa/Johannesburg","Asia/Dubai","Asia/Kolkata","Asia/Singapore","Asia/Shanghai","Asia/Tokyo","Australia/Sydney","Pacific/Auckland"];return[...new Set([$,...n])]})(),N=ne(),h=v([]),W=v([]),A=v(!1),p=v(null),k=v("simple"),s=v({function_name:"",cron:"0 0 * * *",timezone:$,enabled:!0}),u=v({frequency:"day",minute:0,hour:0,dayOfWeek:1,dayOfMonth:1}),M=async()=>{try{const n=await re();h.value=n.data.schedules||[]}catch(n){console.error("Failed to load cron jobs",n)}},ee=async()=>{try{const n=await ae();W.value=n.data.functions||[]}catch(n){console.error("Failed to load functions",n)}},b=()=>{const{frequency:n,minute:t,hour:o,dayOfWeek:i,dayOfMonth:g}=u.value;switch(n){case"minute":s.value.cron="* * * * *";break;case"hour":s.value.cron=`${t} * * * *`;break;case"day":s.value.cron=`${t} ${o} * * *`;break;case"week":s.value.cron=`${t} ${o} * * ${i}`;break;case"month":s.value.cron=`${t} ${o} ${g} * *`;break}},T=n=>{if(!n)return"Invalid expression";const t=n.trim().split(/\s+/);if(t.length!==5)return"Invalid format (use 5 fields)";const[o,i,g,z,w]=t;return n==="* * * * *"?"Every minute":o!=="*"&&i==="*"&&g==="*"&&z==="*"&&w==="*"?`Every hour at minute ${o}`:o!=="*"&&i!=="*"&&g==="*"&&z==="*"&&w==="*"?`Every day at ${i.padStart(2,"0")}:${o.padStart(2,"0")}`:o!=="*"&&i!=="*"&&g==="*"&&z==="*"&&w!=="*"?`Every ${["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][w]} at ${i.padStart(2,"0")}:${o.padStart(2,"0")}`:o!=="*"&&i!=="*"&&g!=="*"&&z==="*"&&w==="*"?`On day ${g} of every month at ${i.padStart(2,"0")}:${o.padStart(2,"0")}`:`Custom: ${n}`},E=n=>new Date(n).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),te=async()=>{try{p.value?await H(p.value.id,{function_id:p.value.function_id,cron:s.value.cron,timezone:s.value.timezone,enabled:s.value.enabled}):await ue(s.value.function_name,{cron:s.value.cron,timezone:s.value.timezone,enabled:s.value.enabled}),await M(),V()}catch(n){console.error("Failed to save schedule",n),N.notify({title:"Failed to save schedule",danger:!0})}},L=n=>{p.value=n,s.value={function_name:n.function_name,cron:n.cron_expression,timezone:n.timezone||"UTC",enabled:n.enabled},A.value=!0},I=async n=>{try{await H(n.id,{function_id:n.function_id,enabled:!n.enabled}),await M()}catch(t){console.error("Failed to toggle schedule",t)}},B=async n=>{if(await N.ask({title:"Delete schedule?",message:`Cron schedule for "${n.function_name}" will be removed.`,confirmLabel:"Delete",danger:!0}))try{await le(n.id,n.function_id),await M()}catch(o){console.error("Failed to delete schedule",o)}},V=()=>{A.value=!1,p.value=null,s.value={function_name:"",cron:"0 0 * * *",timezone:$,enabled:!0},u.value={frequency:"day",minute:0,hour:0,dayOfWeek:1,dayOfMonth:1},k.value="simple"};return se(()=>{M(),ee(),b()}),(n,t)=>(d(),l("div",me,[e("div",fe,[t[12]||(t[12]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Scheduled Jobs "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Cron-driven triggers that fire any deployed function on a schedule. Use them for periodic cleanup, daily reports, polling external APIs, anything you'd normally pin to a server's crontab. Orva runs the schedule, captures stdout/stderr, and surfaces failures in the activity feed. ")],-1)),c(O,{onClick:t[0]||(t[0]=o=>A.value=!0)},{default:_(()=>[c(a(ce),{class:"w-4 h-4"}),t[11]||(t[11]=m(" New Schedule ",-1))]),_:1})]),e("div",pe,[e("ul",xe,[(d(!0),l(C,null,S(h.value,o=>(d(),l("li",{key:o.id,class:"px-4 py-3"},[e("div",ge,[e("div",ve,[e("div",be,[e("span",ye,r(o.function_name),1),e("span",{class:q(["inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium border",o.enabled?"bg-success-tint text-success-fg border-success-ring":"bg-warning-tint text-warning-fg border-warning-ring"])},[(d(),J(R(o.enabled?a(Y):a(D)),{class:"h-3 w-3 shrink-0","aria-hidden":"true"})),m(" "+r(o.enabled?"Active":"Paused"),1)],2)]),e("div",he,r(o.cron_expression),1),e("div",ke,[m(r(T(o.cron_expression))+" ",1),e("span",we,"· "+r(o.timezone||"UTC"),1)]),e("div",_e,[e("span",null,"last "+r(o.last_run_at?E(o.last_run_at):a(P)),1),e("span",null,"next "+r(o.next_run_at?E(o.next_run_at):a(P)),1)])]),e("div",Ce,[c(y,{icon:o.enabled?a(Q):a(G),title:o.enabled?"Pause":"Resume",onClick:i=>I(o)},null,8,["icon","title","onClick"]),c(y,{icon:a(K),title:"Edit",onClick:i=>L(o)},null,8,["icon","onClick"]),c(y,{icon:a(Z),variant:"danger",title:"Delete",onClick:i=>B(o)},null,8,["icon","onClick"])])])]))),128)),h.value.length===0?(d(),l("li",Se,[c(a(D),{class:"w-12 h-12 text-foreground-muted mx-auto mb-3 opacity-60"}),t[13]||(t[13]=e("p",{class:"text-foreground-muted"}," No scheduled jobs yet. ",-1)),t[14]||(t[14]=e("p",{class:"text-foreground-muted text-xs mt-1"}," Create your first schedule to automate function execution. ",-1))])):x("",!0)]),e("table",$e,[t[17]||(t[17]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-6 py-3 font-medium"}," Function "),e("th",{class:"px-6 py-3 font-medium"}," Schedule "),e("th",{class:"px-6 py-3 font-medium hidden sm:table-cell"}," Status "),e("th",{class:"px-6 py-3 font-medium hidden md:table-cell"}," Last Run "),e("th",{class:"px-6 py-3 font-medium hidden lg:table-cell"}," Next Run "),e("th",{class:"px-6 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",Ae,[(d(!0),l(C,null,S(h.value,o=>(d(),l("tr",{key:o.id,class:"hover:bg-surface-hover transition-colors"},[e("td",Me,r(o.function_name),1),e("td",Te,[e("div",Ee,[e("span",ze,r(o.cron_expression),1),e("span",Fe,[m(r(T(o.cron_expression))+" ",1),e("span",Ue,"· "+r(o.timezone||"UTC"),1)])])]),e("td",Pe,[e("span",{class:q(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-medium border",o.enabled?"bg-success-tint text-success-fg border-success-ring":"bg-warning-tint text-warning-fg border-warning-ring"])},[(d(),J(R(o.enabled?a(Y):a(D)),{class:"h-3 w-3 shrink-0","aria-hidden":"true"})),m(" "+r(o.enabled?"Active":"Paused"),1)],2)]),e("td",De,r(o.last_run_at?E(o.last_run_at):a(P)),1),e("td",Ve,r(o.next_run_at?E(o.next_run_at):a(P)),1),e("td",Oe,[e("div",qe,[c(y,{icon:o.enabled?a(Q):a(G),title:o.enabled?"Pause":"Resume",onClick:i=>I(o)},null,8,["icon","title","onClick"]),c(y,{icon:a(K),title:"Edit",onClick:i=>L(o)},null,8,["icon","onClick"]),c(y,{icon:a(Z),variant:"danger",title:"Delete",onClick:i=>B(o)},null,8,["icon","onClick"])])])]))),128)),h.value.length===0?(d(),l("tr",Ne,[e("td",We,[c(a(D),{class:"w-12 h-12 text-foreground-muted mx-auto mb-3 opacity-60"}),t[15]||(t[15]=e("p",{class:"text-foreground-muted"}," No scheduled jobs yet. ",-1)),t[16]||(t[16]=e("p",{class:"text-foreground-muted text-xs mt-1"}," Create your first schedule to automate function execution. ",-1))])])):x("",!0)])])]),c(ie,{"model-value":A.value,title:p.value?"Edit Schedule":"Create Schedule",size:"lg","onUpdate:modelValue":t[10]||(t[10]=o=>{o||V()})},{footer:_(()=>[c(O,{variant:"ghost",onClick:V},{default:_(()=>[...t[38]||(t[38]=[m(" Cancel ",-1)])]),_:1}),c(O,{disabled:!s.value.function_name||!s.value.cron,onClick:te},{default:_(()=>[m(r(p.value?"Update":"Create")+" Schedule ",1)]),_:1},8,["disabled"])]),default:_(()=>[e("div",Le,[e("div",null,[t[19]||(t[19]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"},"Function",-1)),f(e("select",{"onUpdate:modelValue":t[1]||(t[1]=o=>s.value.function_name=o),class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",disabled:!!p.value},[t[18]||(t[18]=e("option",{value:""}," Select a function ",-1)),(d(!0),l(C,null,S(W.value,o=>(d(),l("option",{key:o.name,value:o.name},r(o.name)+" ("+r(o.runtime)+") ",9,Be))),128))],8,Ie),[[F,s.value.function_name]])]),e("div",null,[t[20]||(t[20]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"},"Schedule Type",-1)),e("div",Je,[(d(),l(C,null,S(["simple","advanced"],o=>e("button",{key:o,class:q(["flex-1 py-2 px-3 text-sm font-medium rounded transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background",k.value===o?"bg-primary text-primary-foreground shadow-sm":"text-foreground-muted hover:text-foreground"]),onClick:i=>k.value=o},r(o==="simple"?"Natural Language":"Cron Expression"),11,Re)),64))])]),k.value==="simple"?(d(),l("div",He,[e("div",Ye,[e("div",null,[t[22]||(t[22]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Frequency",-1)),f(e("select",{"onUpdate:modelValue":t[2]||(t[2]=o=>u.value.frequency=o),class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onChange:b},[...t[21]||(t[21]=[e("option",{value:"minute"}," Every Minute ",-1),e("option",{value:"hour"}," Hourly ",-1),e("option",{value:"day"}," Daily ",-1),e("option",{value:"week"}," Weekly ",-1),e("option",{value:"month"}," Monthly ",-1)])],544),[[F,u.value.frequency]])]),["hour","day","week","month"].includes(u.value.frequency)?(d(),l("div",Ge,[t[23]||(t[23]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"At Minute",-1)),f(e("input",{"onUpdate:modelValue":t[3]||(t[3]=o=>u.value.minute=o),type:"number",min:"0",max:"59",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:b},null,544),[[U,u.value.minute,void 0,{number:!0}]])])):x("",!0),["day","week","month"].includes(u.value.frequency)?(d(),l("div",Ke,[t[24]||(t[24]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"At Hour",-1)),f(e("input",{"onUpdate:modelValue":t[4]||(t[4]=o=>u.value.hour=o),type:"number",min:"0",max:"23",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:b},null,544),[[U,u.value.hour,void 0,{number:!0}]])])):x("",!0),u.value.frequency==="week"?(d(),l("div",Ze,[t[26]||(t[26]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Day of Week",-1)),f(e("select",{"onUpdate:modelValue":t[5]||(t[5]=o=>u.value.dayOfWeek=o),class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onChange:b},[...t[25]||(t[25]=[e("option",{value:"0"}," Sunday ",-1),e("option",{value:"1"}," Monday ",-1),e("option",{value:"2"}," Tuesday ",-1),e("option",{value:"3"}," Wednesday ",-1),e("option",{value:"4"}," Thursday ",-1),e("option",{value:"5"}," Friday ",-1),e("option",{value:"6"}," Saturday ",-1)])],544),[[F,u.value.dayOfWeek]])])):x("",!0),u.value.frequency==="month"?(d(),l("div",Qe,[t[27]||(t[27]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Day of Month",-1)),f(e("input",{"onUpdate:modelValue":t[6]||(t[6]=o=>u.value.dayOfMonth=o),type:"number",min:"1",max:"31",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:b},null,544),[[U,u.value.dayOfMonth,void 0,{number:!0}]])])):x("",!0)]),e("div",Xe,[t[28]||(t[28]=e("div",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide mb-2"}," Generated Expression ",-1)),e("div",je,r(s.value.cron),1),e("div",et,r(T(s.value.cron)),1)])])):x("",!0),k.value==="advanced"?(d(),l("div",tt,[e("div",null,[t[29]||(t[29]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Cron Expression",-1)),f(e("input",{"onUpdate:modelValue":t[7]||(t[7]=o=>s.value.cron=o),placeholder:"* * * * *",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm font-mono text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[U,s.value.cron]]),t[30]||(t[30]=e("p",{class:"text-xs text-foreground-muted mt-1.5"}," Format: minute hour day month weekday ",-1))]),e("div",ot,[t[31]||(t[31]=e("div",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide mb-2"}," Preview ",-1)),e("div",nt,r(T(s.value.cron)),1)])])):x("",!0),e("div",null,[t[36]||(t[36]=e("label",{class:"block text-xs font-medium text-foreground-muted uppercase tracking-wide mb-1.5"}," Timezone ",-1)),f(e("select",{"onUpdate:modelValue":t[8]||(t[8]=o=>s.value.timezone=o),class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:border-white"},[(d(!0),l(C,null,S(a(j),o=>(d(),l("option",{key:o,value:o},r(o)+r(o===a($)?" (your browser)":""),9,st))),128))],512),[[F,s.value.timezone]]),e("div",rt,[t[32]||(t[32]=m(" The cron expression is interpreted in this zone (e.g. ",-1)),t[33]||(t[33]=e("code",{class:"bg-surface px-1 rounded"},"0 9 * * *",-1)),t[34]||(t[34]=m(" with timezone ",-1)),e("code",at,r(s.value.timezone),1),t[35]||(t[35]=m(" fires at 9 AM local time every day. ",-1))])]),e("div",dt,[f(e("input",{id:"enabled-toggle","onUpdate:modelValue":t[9]||(t[9]=o=>s.value.enabled=o),type:"checkbox",class:"w-4 h-4 text-primary bg-background border-border rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background"},null,512),[[de,s.value.enabled]]),t[37]||(t[37]=e("label",{for:"enabled-toggle",class:"text-sm font-medium text-foreground cursor-pointer"}," Enable schedule immediately ",-1))])])]),_:1},8,["model-value","title"])]))}};export{bt as default}; +import{c as X,as as oe,C as ne,o as se,a as l,b as e,d as c,h as _,_ as O,F as C,p as S,f as a,g as x,at as re,W as ae,r as v,j as d,k as m,t as r,s as q,n as J,H as R,e as f,a1 as F,v as U,ab as de,au as H,av as le,aw as ue}from"./index-fIeDYqWy.js";import{E as P}from"./format-CsU4_SPu.js";import{_ as y}from"./IconButton-CnguiHlc.js";import{_ as ie}from"./Modal-DRIalOH5.js";import{a as D,C as Y}from"./clock-C4Bm6ngE.js";import{P as G}from"./play-CmOm4UFE.js";import{S as K}from"./square-pen-BfULFvug.js";import{T as Z}from"./trash-2-B2Wniuw-.js";const ce=X("circle-plus",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]]);const Q=X("pause",[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]),me={class:"space-y-6"},fe={class:"flex items-center justify-between"},pe={class:"bg-background border border-border rounded-lg overflow-x-auto"},xe={class:"sm:hidden divide-y divide-border"},ge={class:"flex items-start justify-between gap-2"},ve={class:"min-w-0 flex-1"},be={class:"flex items-center gap-2 flex-wrap"},ye={class:"font-medium text-foreground truncate"},he={class:"mt-1 text-[11px] text-foreground font-mono break-all"},ke={class:"mt-0.5 text-[11px] text-foreground-muted"},we={class:"text-foreground-muted/70"},_e={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Ce={class:"flex items-center gap-1 shrink-0"},Se={key:0,class:"px-6 py-12 text-center"},$e={class:"hidden sm:table w-full text-sm text-left"},Ae={class:"divide-y divide-border"},Me={class:"px-6 py-4 font-medium text-foreground max-w-[16rem] truncate"},Te={class:"px-6 py-4"},Ee={class:"flex flex-col gap-1"},ze={class:"text-foreground font-mono text-xs break-all"},Fe={class:"text-foreground-muted text-[10px]"},Ue={class:"text-foreground-muted/70"},Pe={class:"px-6 py-4 hidden sm:table-cell"},De={class:"px-6 py-4 text-foreground-muted text-xs hidden md:table-cell"},Ve={class:"px-6 py-4 text-foreground-muted text-xs hidden lg:table-cell"},Oe={class:"px-6 py-4 text-right"},qe={class:"inline-flex items-center gap-1"},Ne={key:0},We={colspan:"6",class:"px-6 py-12 text-center"},Le={class:"space-y-5"},Ie=["disabled"],Be=["value"],Je={class:"flex gap-2 bg-background rounded-lg p-1 border border-border"},Re=["onClick"],He={key:0,class:"space-y-4"},Ye={class:"grid grid-cols-3 gap-3"},Ge={key:0},Ke={key:1},Ze={key:2},Qe={key:3},Xe={class:"bg-background border border-border rounded-lg p-4"},je={class:"font-mono text-sm text-foreground"},et={class:"text-xs text-foreground-muted mt-1"},tt={key:1,class:"space-y-3"},ot={class:"bg-background border border-border rounded-lg p-4"},nt={class:"text-xs text-foreground"},st=["value"],rt={class:"text-xs text-foreground-muted mt-1.5"},at={class:"bg-surface px-1 rounded"},dt={class:"flex items-center gap-3"},bt={__name:"CronJobs",setup(lt){const $=oe(),j=(()=>{const n=["UTC","America/Los_Angeles","America/New_York","America/Chicago","America/Denver","America/Sao_Paulo","Europe/London","Europe/Berlin","Europe/Paris","Europe/Moscow","Africa/Lagos","Africa/Cairo","Africa/Johannesburg","Asia/Dubai","Asia/Kolkata","Asia/Singapore","Asia/Shanghai","Asia/Tokyo","Australia/Sydney","Pacific/Auckland"];return[...new Set([$,...n])]})(),N=ne(),h=v([]),W=v([]),A=v(!1),p=v(null),k=v("simple"),s=v({function_name:"",cron:"0 0 * * *",timezone:$,enabled:!0}),u=v({frequency:"day",minute:0,hour:0,dayOfWeek:1,dayOfMonth:1}),M=async()=>{try{const n=await re();h.value=n.data.schedules||[]}catch(n){console.error("Failed to load cron jobs",n)}},ee=async()=>{try{const n=await ae();W.value=n.data.functions||[]}catch(n){console.error("Failed to load functions",n)}},b=()=>{const{frequency:n,minute:t,hour:o,dayOfWeek:i,dayOfMonth:g}=u.value;switch(n){case"minute":s.value.cron="* * * * *";break;case"hour":s.value.cron=`${t} * * * *`;break;case"day":s.value.cron=`${t} ${o} * * *`;break;case"week":s.value.cron=`${t} ${o} * * ${i}`;break;case"month":s.value.cron=`${t} ${o} ${g} * *`;break}},T=n=>{if(!n)return"Invalid expression";const t=n.trim().split(/\s+/);if(t.length!==5)return"Invalid format (use 5 fields)";const[o,i,g,z,w]=t;return n==="* * * * *"?"Every minute":o!=="*"&&i==="*"&&g==="*"&&z==="*"&&w==="*"?`Every hour at minute ${o}`:o!=="*"&&i!=="*"&&g==="*"&&z==="*"&&w==="*"?`Every day at ${i.padStart(2,"0")}:${o.padStart(2,"0")}`:o!=="*"&&i!=="*"&&g==="*"&&z==="*"&&w!=="*"?`Every ${["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][w]} at ${i.padStart(2,"0")}:${o.padStart(2,"0")}`:o!=="*"&&i!=="*"&&g!=="*"&&z==="*"&&w==="*"?`On day ${g} of every month at ${i.padStart(2,"0")}:${o.padStart(2,"0")}`:`Custom: ${n}`},E=n=>new Date(n).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),te=async()=>{try{p.value?await H(p.value.id,{function_id:p.value.function_id,cron:s.value.cron,timezone:s.value.timezone,enabled:s.value.enabled}):await ue(s.value.function_name,{cron:s.value.cron,timezone:s.value.timezone,enabled:s.value.enabled}),await M(),V()}catch(n){console.error("Failed to save schedule",n),N.notify({title:"Failed to save schedule",danger:!0})}},L=n=>{p.value=n,s.value={function_name:n.function_name,cron:n.cron_expression,timezone:n.timezone||"UTC",enabled:n.enabled},A.value=!0},I=async n=>{try{await H(n.id,{function_id:n.function_id,enabled:!n.enabled}),await M()}catch(t){console.error("Failed to toggle schedule",t)}},B=async n=>{if(await N.ask({title:"Delete schedule?",message:`Cron schedule for "${n.function_name}" will be removed.`,confirmLabel:"Delete",danger:!0}))try{await le(n.id,n.function_id),await M()}catch(o){console.error("Failed to delete schedule",o)}},V=()=>{A.value=!1,p.value=null,s.value={function_name:"",cron:"0 0 * * *",timezone:$,enabled:!0},u.value={frequency:"day",minute:0,hour:0,dayOfWeek:1,dayOfMonth:1},k.value="simple"};return se(()=>{M(),ee(),b()}),(n,t)=>(d(),l("div",me,[e("div",fe,[t[12]||(t[12]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Scheduled Jobs "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Cron-driven triggers that fire any deployed function on a schedule. Use them for periodic cleanup, daily reports, polling external APIs, anything you'd normally pin to a server's crontab. Orva runs the schedule, captures stdout/stderr, and surfaces failures in the activity feed. ")],-1)),c(O,{onClick:t[0]||(t[0]=o=>A.value=!0)},{default:_(()=>[c(a(ce),{class:"w-4 h-4"}),t[11]||(t[11]=m(" New Schedule ",-1))]),_:1})]),e("div",pe,[e("ul",xe,[(d(!0),l(C,null,S(h.value,o=>(d(),l("li",{key:o.id,class:"px-4 py-3"},[e("div",ge,[e("div",ve,[e("div",be,[e("span",ye,r(o.function_name),1),e("span",{class:q(["inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium border",o.enabled?"bg-success-tint text-success-fg border-success-ring":"bg-warning-tint text-warning-fg border-warning-ring"])},[(d(),J(R(o.enabled?a(Y):a(D)),{class:"h-3 w-3 shrink-0","aria-hidden":"true"})),m(" "+r(o.enabled?"Active":"Paused"),1)],2)]),e("div",he,r(o.cron_expression),1),e("div",ke,[m(r(T(o.cron_expression))+" ",1),e("span",we,"· "+r(o.timezone||"UTC"),1)]),e("div",_e,[e("span",null,"last "+r(o.last_run_at?E(o.last_run_at):a(P)),1),e("span",null,"next "+r(o.next_run_at?E(o.next_run_at):a(P)),1)])]),e("div",Ce,[c(y,{icon:o.enabled?a(Q):a(G),title:o.enabled?"Pause":"Resume",onClick:i=>I(o)},null,8,["icon","title","onClick"]),c(y,{icon:a(K),title:"Edit",onClick:i=>L(o)},null,8,["icon","onClick"]),c(y,{icon:a(Z),variant:"danger",title:"Delete",onClick:i=>B(o)},null,8,["icon","onClick"])])])]))),128)),h.value.length===0?(d(),l("li",Se,[c(a(D),{class:"w-12 h-12 text-foreground-muted mx-auto mb-3 opacity-60"}),t[13]||(t[13]=e("p",{class:"text-foreground-muted"}," No scheduled jobs yet. ",-1)),t[14]||(t[14]=e("p",{class:"text-foreground-muted text-xs mt-1"}," Create your first schedule to automate function execution. ",-1))])):x("",!0)]),e("table",$e,[t[17]||(t[17]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-6 py-3 font-medium"}," Function "),e("th",{class:"px-6 py-3 font-medium"}," Schedule "),e("th",{class:"px-6 py-3 font-medium hidden sm:table-cell"}," Status "),e("th",{class:"px-6 py-3 font-medium hidden md:table-cell"}," Last Run "),e("th",{class:"px-6 py-3 font-medium hidden lg:table-cell"}," Next Run "),e("th",{class:"px-6 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",Ae,[(d(!0),l(C,null,S(h.value,o=>(d(),l("tr",{key:o.id,class:"hover:bg-surface-hover transition-colors"},[e("td",Me,r(o.function_name),1),e("td",Te,[e("div",Ee,[e("span",ze,r(o.cron_expression),1),e("span",Fe,[m(r(T(o.cron_expression))+" ",1),e("span",Ue,"· "+r(o.timezone||"UTC"),1)])])]),e("td",Pe,[e("span",{class:q(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-medium border",o.enabled?"bg-success-tint text-success-fg border-success-ring":"bg-warning-tint text-warning-fg border-warning-ring"])},[(d(),J(R(o.enabled?a(Y):a(D)),{class:"h-3 w-3 shrink-0","aria-hidden":"true"})),m(" "+r(o.enabled?"Active":"Paused"),1)],2)]),e("td",De,r(o.last_run_at?E(o.last_run_at):a(P)),1),e("td",Ve,r(o.next_run_at?E(o.next_run_at):a(P)),1),e("td",Oe,[e("div",qe,[c(y,{icon:o.enabled?a(Q):a(G),title:o.enabled?"Pause":"Resume",onClick:i=>I(o)},null,8,["icon","title","onClick"]),c(y,{icon:a(K),title:"Edit",onClick:i=>L(o)},null,8,["icon","onClick"]),c(y,{icon:a(Z),variant:"danger",title:"Delete",onClick:i=>B(o)},null,8,["icon","onClick"])])])]))),128)),h.value.length===0?(d(),l("tr",Ne,[e("td",We,[c(a(D),{class:"w-12 h-12 text-foreground-muted mx-auto mb-3 opacity-60"}),t[15]||(t[15]=e("p",{class:"text-foreground-muted"}," No scheduled jobs yet. ",-1)),t[16]||(t[16]=e("p",{class:"text-foreground-muted text-xs mt-1"}," Create your first schedule to automate function execution. ",-1))])])):x("",!0)])])]),c(ie,{"model-value":A.value,title:p.value?"Edit Schedule":"Create Schedule",size:"lg","onUpdate:modelValue":t[10]||(t[10]=o=>{o||V()})},{footer:_(()=>[c(O,{variant:"ghost",onClick:V},{default:_(()=>[...t[38]||(t[38]=[m(" Cancel ",-1)])]),_:1}),c(O,{disabled:!s.value.function_name||!s.value.cron,onClick:te},{default:_(()=>[m(r(p.value?"Update":"Create")+" Schedule ",1)]),_:1},8,["disabled"])]),default:_(()=>[e("div",Le,[e("div",null,[t[19]||(t[19]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"},"Function",-1)),f(e("select",{"onUpdate:modelValue":t[1]||(t[1]=o=>s.value.function_name=o),class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",disabled:!!p.value},[t[18]||(t[18]=e("option",{value:""}," Select a function ",-1)),(d(!0),l(C,null,S(W.value,o=>(d(),l("option",{key:o.name,value:o.name},r(o.name)+" ("+r(o.runtime)+") ",9,Be))),128))],8,Ie),[[F,s.value.function_name]])]),e("div",null,[t[20]||(t[20]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"},"Schedule Type",-1)),e("div",Je,[(d(),l(C,null,S(["simple","advanced"],o=>e("button",{key:o,class:q(["flex-1 py-2 px-3 text-sm font-medium rounded transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background",k.value===o?"bg-primary text-primary-foreground shadow-sm":"text-foreground-muted hover:text-foreground"]),onClick:i=>k.value=o},r(o==="simple"?"Natural Language":"Cron Expression"),11,Re)),64))])]),k.value==="simple"?(d(),l("div",He,[e("div",Ye,[e("div",null,[t[22]||(t[22]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Frequency",-1)),f(e("select",{"onUpdate:modelValue":t[2]||(t[2]=o=>u.value.frequency=o),class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onChange:b},[...t[21]||(t[21]=[e("option",{value:"minute"}," Every Minute ",-1),e("option",{value:"hour"}," Hourly ",-1),e("option",{value:"day"}," Daily ",-1),e("option",{value:"week"}," Weekly ",-1),e("option",{value:"month"}," Monthly ",-1)])],544),[[F,u.value.frequency]])]),["hour","day","week","month"].includes(u.value.frequency)?(d(),l("div",Ge,[t[23]||(t[23]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"At Minute",-1)),f(e("input",{"onUpdate:modelValue":t[3]||(t[3]=o=>u.value.minute=o),type:"number",min:"0",max:"59",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:b},null,544),[[U,u.value.minute,void 0,{number:!0}]])])):x("",!0),["day","week","month"].includes(u.value.frequency)?(d(),l("div",Ke,[t[24]||(t[24]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"At Hour",-1)),f(e("input",{"onUpdate:modelValue":t[4]||(t[4]=o=>u.value.hour=o),type:"number",min:"0",max:"23",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:b},null,544),[[U,u.value.hour,void 0,{number:!0}]])])):x("",!0),u.value.frequency==="week"?(d(),l("div",Ze,[t[26]||(t[26]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Day of Week",-1)),f(e("select",{"onUpdate:modelValue":t[5]||(t[5]=o=>u.value.dayOfWeek=o),class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onChange:b},[...t[25]||(t[25]=[e("option",{value:"0"}," Sunday ",-1),e("option",{value:"1"}," Monday ",-1),e("option",{value:"2"}," Tuesday ",-1),e("option",{value:"3"}," Wednesday ",-1),e("option",{value:"4"}," Thursday ",-1),e("option",{value:"5"}," Friday ",-1),e("option",{value:"6"}," Saturday ",-1)])],544),[[F,u.value.dayOfWeek]])])):x("",!0),u.value.frequency==="month"?(d(),l("div",Qe,[t[27]||(t[27]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Day of Month",-1)),f(e("input",{"onUpdate:modelValue":t[6]||(t[6]=o=>u.value.dayOfMonth=o),type:"number",min:"1",max:"31",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:b},null,544),[[U,u.value.dayOfMonth,void 0,{number:!0}]])])):x("",!0)]),e("div",Xe,[t[28]||(t[28]=e("div",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide mb-2"}," Generated Expression ",-1)),e("div",je,r(s.value.cron),1),e("div",et,r(T(s.value.cron)),1)])])):x("",!0),k.value==="advanced"?(d(),l("div",tt,[e("div",null,[t[29]||(t[29]=e("label",{class:"text-xs font-medium text-foreground-muted block mb-1.5"},"Cron Expression",-1)),f(e("input",{"onUpdate:modelValue":t[7]||(t[7]=o=>s.value.cron=o),placeholder:"* * * * *",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm font-mono text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[U,s.value.cron]]),t[30]||(t[30]=e("p",{class:"text-xs text-foreground-muted mt-1.5"}," Format: minute hour day month weekday ",-1))]),e("div",ot,[t[31]||(t[31]=e("div",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide mb-2"}," Preview ",-1)),e("div",nt,r(T(s.value.cron)),1)])])):x("",!0),e("div",null,[t[36]||(t[36]=e("label",{class:"block text-xs font-medium text-foreground-muted uppercase tracking-wide mb-1.5"}," Timezone ",-1)),f(e("select",{"onUpdate:modelValue":t[8]||(t[8]=o=>s.value.timezone=o),class:"w-full bg-surface-hover border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:border-white"},[(d(!0),l(C,null,S(a(j),o=>(d(),l("option",{key:o,value:o},r(o)+r(o===a($)?" (your browser)":""),9,st))),128))],512),[[F,s.value.timezone]]),e("div",rt,[t[32]||(t[32]=m(" The cron expression is interpreted in this zone (e.g. ",-1)),t[33]||(t[33]=e("code",{class:"bg-surface px-1 rounded"},"0 9 * * *",-1)),t[34]||(t[34]=m(" with timezone ",-1)),e("code",at,r(s.value.timezone),1),t[35]||(t[35]=m(" fires at 9 AM local time every day. ",-1))])]),e("div",dt,[f(e("input",{id:"enabled-toggle","onUpdate:modelValue":t[9]||(t[9]=o=>s.value.enabled=o),type:"checkbox",class:"w-4 h-4 text-primary bg-background border-border rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background"},null,512),[[de,s.value.enabled]]),t[37]||(t[37]=e("label",{for:"enabled-toggle",class:"text-sm font-medium text-foreground cursor-pointer"}," Enable schedule immediately ",-1))])])]),_:1},8,["model-value","title"])]))}};export{bt as default}; diff --git a/backend/internal/server/ui_dist/assets/Dashboard-DdCcITCh.js b/backend/internal/server/ui_dist/assets/Dashboard-C27lk4MJ.js similarity index 99% rename from backend/internal/server/ui_dist/assets/Dashboard-DdCcITCh.js rename to backend/internal/server/ui_dist/assets/Dashboard-C27lk4MJ.js index fe72de3..e010ecc 100644 --- a/backend/internal/server/ui_dist/assets/Dashboard-DdCcITCh.js +++ b/backend/internal/server/ui_dist/assets/Dashboard-C27lk4MJ.js @@ -1 +1 @@ -import{E as y}from"./format-CsU4_SPu.js";import{c as B,x as O,o as V,y as z,a as v,b as e,d as r,f as c,B as W,A as G,t as n,k as i,g as M,F as Y,p as J,h as K,_ as Q,q as m,j as p,P as X,z as l}from"./index-BMkkwZ9q.js";const Z=B("snowflake",[["path",{d:"m10 20-1.25-2.5L6 18",key:"18frcb"}],["path",{d:"M10 4 8.75 6.5 6 6",key:"7mghy3"}],["path",{d:"m14 20 1.25-2.5L18 18",key:"1chtki"}],["path",{d:"m14 4 1.25 2.5L18 6",key:"1b4wsy"}],["path",{d:"m17 21-3-6h-4",key:"15hhxa"}],["path",{d:"m17 3-3 6 1.5 3",key:"11697g"}],["path",{d:"M2 12h6.5L10 9",key:"kv9z4n"}],["path",{d:"m20 10-1.5 2 1.5 2",key:"1swlpi"}],["path",{d:"M22 12h-6.5L14 15",key:"1mxi28"}],["path",{d:"m4 10 1.5 2L4 14",key:"k9enpj"}],["path",{d:"m7 21 3-6-1.5-3",key:"j8hb9u"}],["path",{d:"m7 3 3 6h4",key:"1otusx"}]]);const ee=B("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),te={class:"space-y-6"},se={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},oe={class:"grid grid-cols-1 lg:grid-cols-3 gap-4"},le={class:"bg-background border border-border rounded-lg p-5 lg:col-span-1"},ne={class:"bg-background border border-border rounded-lg p-5 lg:col-span-2 space-y-5"},ae={class:"grid grid-cols-2 gap-4 text-sm"},re={class:"text-lg font-mono text-white mt-0.5"},de={class:"text-lg font-mono text-white mt-0.5"},ie={class:"text-foreground-muted text-sm"},ue={class:"text-[11px] text-foreground-muted mt-0.5"},ce={class:"space-y-2"},me={class:"flex flex-wrap items-center gap-x-4 gap-y-1 text-[11px] text-foreground-muted"},ve={class:"flex items-center gap-1.5"},pe={class:"flex items-center gap-1.5"},ge={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},xe={class:"bg-background border border-border rounded-lg p-5 space-y-3"},be={class:"grid grid-cols-3 gap-3"},he={key:0,class:"text-xs text-red-400 flex items-center gap-1.5 pt-1"},fe={class:"bg-background border border-border rounded-lg p-5 space-y-3"},_e={class:"grid grid-cols-3 gap-3"},we={key:0},ye={class:"flex items-baseline justify-between mb-3"},ke={class:"text-xs font-bold text-white uppercase tracking-wider"},Se={class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4"},$e={class:"flex items-start justify-between gap-2"},Fe={class:"min-w-0"},Me={class:"text-sm font-medium text-white truncate"},Be={class:"text-[10px] text-foreground-muted font-mono truncate"},Ne={class:"text-right shrink-0"},Ae={class:"text-xs font-mono text-white"},Ce={class:"grid grid-cols-3 gap-2"},Le={class:"border-t border-border pt-3 grid grid-cols-2 gap-3 text-[11px]"},je={class:"font-mono text-white"},Pe={class:"font-mono text-white"},Re={class:"font-mono text-white",title:"Average memory used per invocation vs allocated limit"},qe={class:"text-foreground-muted"},Te={class:"font-mono text-white",title:"Average CPU cores consumed per invocation vs allocated"},Ue={key:0,class:"text-foreground-muted"},De={key:1,class:"bg-background border border-border rounded-lg p-8 text-center space-y-4"},Oe={__name:"Dashboard",setup(Ie){const b=O(),a=m(()=>b.metrics||{}),N=s=>b.poolHistory[s]||[],A=s=>s==null?y:`${s.toFixed(1)}%`,C=s=>s==null?"0":s.toFixed(1),g=s=>{const t=s||0;return t>=1024?`${(t/1024).toFixed(1)} GB`:`${Math.round(t)} MB`},_=s=>{const t=Number(s)||0;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)},u=m(()=>a.value.host?.mem_total_mb??0),k=m(()=>a.value.host?.mem_reserved_mb??0),L=m(()=>a.value.host?.mem_available_mb??0),h=m(()=>Math.max(0,u.value-L.value)),$=m(()=>Math.max(0,u.value-h.value)),j=m(()=>u.value>0?h.value/u.value*100:0),P=m(()=>u.value>0?k.value/u.value*100:0);V(()=>b.connect()),z(()=>b.disconnect());const w={props:{label:String,value:[String,Number],icon:Object,hint:String},setup(s){return()=>l("div",{class:"bg-background border border-border rounded-lg p-5 flex flex-col h-full hover:border-primary/50 transition-colors group"},[l("div",{class:"flex items-center justify-between mb-3"},[l("span",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},s.label),s.icon?l(s.icon,{class:"w-4 h-4 text-foreground-muted group-hover:text-primary"}):null]),l("div",{class:"text-2xl font-mono text-foreground leading-none"},String(s.value)),s.hint?l("div",{class:"text-[11px] text-foreground-muted mt-auto pt-3 leading-snug"},s.hint):null])}},R={props:{p50:Number,p95:Number,p99:Number},setup(s){return()=>{const t=[{label:"p50",ms:s.p50,color:"bg-success/70"},{label:"p95",ms:s.p95,color:"bg-warning/70"},{label:"p99",ms:s.p99,color:"bg-danger/70"}],o=Math.max(s.p50||0,s.p95||0,s.p99||0,1);return l("div",{class:"space-y-2.5"},t.map(d=>{const f=d.ms==null?0:d.ms/o*100;return l("div",{class:"space-y-1"},[l("div",{class:"flex items-baseline justify-between text-[11px]"},[l("span",{class:"font-mono uppercase text-foreground-muted tracking-wider"},d.label),l("span",{class:"font-mono text-white"},d.ms==null?y:`${d.ms}ms`)]),l("div",{class:"h-1.5 bg-surface rounded overflow-hidden"},[l("div",{class:`h-full ${d.color} transition-[width] duration-500 ease-out`,style:{width:`${f.toFixed(1)}%`}})])])}))}}},x={props:{label:String,value:[String,Number],hint:String},setup(s){return()=>l("div",{class:"bg-surface border border-border rounded p-3 flex flex-col h-full"},[l("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},s.label),l("div",{class:"text-lg font-mono text-white mt-0.5"},String(s.value??0)),s.hint?l("div",{class:"text-[10px] text-foreground-muted mt-auto pt-1.5 leading-snug"},s.hint):null])}},S={props:{label:String,value:[String,Number],hint:String},setup(s){return()=>l("div",{class:"bg-surface border border-border rounded p-2.5 flex flex-col h-full"},[l("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},s.label),l("div",{class:"text-base font-mono text-white mt-0.5 leading-none"},String(s.value??0)),s.hint?l("div",{class:"text-[10px] text-foreground-muted mt-auto pt-1.5"},s.hint):null])}},q={props:{total:{type:Number,required:!0},segments:{type:Array,required:!0}},setup(s){return()=>{const t=s.total>0?s.total:1;return l("div",{class:"h-2.5 bg-surface rounded overflow-hidden flex",role:"img","aria-label":s.segments.map(o=>`${o.label}: ${o.value} of ${s.total}`).join("; ")},s.segments.map(o=>l("div",{class:`h-full ${o.color}`,style:{width:`${(o.value/t*100).toFixed(2)}%`},title:`${o.label}: ${o.value}`})))}}},T={props:{points:{type:Array,default:()=>[]}},setup(s){return()=>{const t=s.points||[];if(t.length<2)return l("div",{class:"h-8 flex items-center text-[10px] text-foreground-muted"},"(collecting samples…)");const o=Math.max(...t,1),d=100,f=32,U=d/(t.length-1),D=t.map((I,F)=>{const E=(F*U).toFixed(2),H=(f-I/o*f).toFixed(2);return`${F===0?"M":"L"}${E},${H}`}).join(" ");return l("svg",{viewBox:`0 0 ${d} ${f}`,class:"w-full h-8 text-blue-400",preserveAspectRatio:"none"},[l("path",{d:D,fill:"none",stroke:"currentColor","stroke-width":"1.5"})])}}};return(s,t)=>(p(),v("div",te,[t[21]||(t[21]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"},"System Overview"),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},"Live snapshot of what your platform is doing right now.")],-1)),e("div",se,[r(w,{label:"Functions",hint:"Deployed in this workspace",value:c(b).functionsCount,icon:c(W)},null,8,["value","icon"]),r(w,{label:"In flight",hint:"Requests being handled right now",value:a.value.active_requests??0,icon:c(G)},null,8,["value","icon"]),r(w,{label:"Invocations",hint:"Total calls served since the platform started",value:_(a.value.totals?.invocations??0),icon:c(ee)},null,8,["value","icon"]),r(w,{label:"Cold starts",hint:"Calls that had to spawn a fresh sandbox",value:A(a.value.rates?.cold_start_pct),icon:c(Z)},null,8,["value","icon"])]),e("div",oe,[e("div",le,[t[1]||(t[1]=e("div",{class:"mb-3"},[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Response time "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," How long calls take to come back. p99 is the worst-case 1-in-100. ")],-1)),r(R,{p50:a.value.latency_ms?.p50,p95:a.value.latency_ms?.p95,p99:a.value.latency_ms?.p99},null,8,["p50","p95","p99"])]),e("div",ne,[t[7]||(t[7]=e("div",null,[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Host machine "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," The server Orva is running on: how much of its RAM is actually in use, and how much your warm pools reserve as headroom. ")],-1)),e("div",ae,[e("div",null,[t[2]||(t[2]=e("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},"CPU cores",-1)),e("div",re,n(a.value.host?.num_cpu??"?"),1),t[3]||(t[3]=e("div",{class:"text-[11px] text-foreground-muted mt-0.5"}," available to functions on this host ",-1))]),e("div",null,[t[4]||(t[4]=e("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},"Memory in use",-1)),e("div",de,[i(n(g(h.value))+" ",1),e("span",ie,"/ "+n(g(u.value)),1)]),e("div",ue,n(j.value.toFixed(1))+"% used · "+n(g(k.value))+" reserved by warm pools ",1)])]),e("div",ce,[r(q,{total:u.value,segments:[{label:"In use",value:h.value,color:"bg-info/70"},{label:"Free",value:$.value,color:"bg-success/40"}]},null,8,["total","segments"]),e("div",me,[e("span",ve,[t[5]||(t[5]=e("span",{class:"w-2 h-2 rounded-full bg-info/70"},null,-1)),i(" "+n(g(h.value))+" in use ",1)]),e("span",pe,[t[6]||(t[6]=e("span",{class:"w-2 h-2 rounded-full bg-success/40"},null,-1)),i(" "+n(g($.value))+" free ",1)]),e("span",null,n(g(k.value))+" reserved by warm pools ("+n(P.value.toFixed(1))+"% — held ready, not all in use) ",1)])])])]),e("div",ge,[e("div",xe,[t[9]||(t[9]=e("div",null,[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Builds "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," Where deploys go: extracted, dependencies installed, then activated. ")],-1)),e("div",be,[r(x,{label:"In queue",value:a.value.build_queue?.pending??0,hint:"waiting to start"},null,8,["value"]),r(x,{label:"Build workers",value:a.value.build_queue?.workers??0,hint:"parallel slots"},null,8,["value"]),r(x,{label:"Built so far",value:_(a.value.totals?.builds??0),hint:"lifetime total"},null,8,["value"])]),(a.value.totals?.build_errors??0)>0?(p(),v("div",he,[t[8]||(t[8]=e("span",{class:"w-1.5 h-1.5 rounded-full bg-red-400"},null,-1)),i(" "+n(a.value.totals.build_errors)+" build"+n(a.value.totals.build_errors===1?" has":"s have")+" failed since start ",1)])):M("",!0)]),e("div",fe,[t[10]||(t[10]=e("div",null,[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Sandbox activity "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," Each invocation runs inside an isolated nsjail sandbox process. ")],-1)),e("div",_e,[r(x,{label:"Running now",value:a.value.sandbox?.active??0,hint:"serving a request"},null,8,["value"]),r(x,{label:"Reused",value:_(a.value.totals?.warm_hits??0),hint:"warm-pool hits"},null,8,["value"]),r(x,{label:"Spawned fresh",value:_(a.value.totals?.cold_starts??0),hint:"cold starts"},null,8,["value"])])])]),(a.value.pools||[]).length?(p(),v("div",we,[e("div",ye,[e("div",null,[e("h2",ke," Warm pools ("+n(a.value.pools.length)+") ",1),t[11]||(t[11]=e("div",{class:"text-[11px] text-foreground-muted mt-1"}," One pool per active function. Sandboxes stay ready so the next call doesn't pay a cold start. ",-1))])]),e("div",Se,[(p(!0),v(Y,null,J(a.value.pools,o=>(p(),v("div",{key:o.function_id,class:"bg-background border border-border rounded-lg p-4 space-y-3"},[e("div",$e,[e("div",Fe,[e("div",Me,n(o.function_name||o.function_id),1),e("div",Be,n(o.function_id),1)]),e("div",Ne,[t[13]||(t[13]=e("div",{class:"text-[10px] text-foreground-muted"},"Target / cap",-1)),e("div",Ae,[i(n(o.target)+" ",1),t[12]||(t[12]=e("span",{class:"text-foreground-muted"},"/",-1)),i(" "+n(o.dynamic_max),1)])])]),e("div",Ce,[r(S,{label:"Ready",value:o.idle,hint:"idle workers"},null,8,["value"]),r(S,{label:"Busy",value:o.busy,hint:"serving now"},null,8,["value"]),r(S,{label:"Calls / sec",value:C(o.rate_ewma),hint:"recent rate"},null,8,["value"])]),e("div",null,[r(T,{points:N(o.function_id)},null,8,["points"]),t[14]||(t[14]=e("div",{class:"text-[10px] text-foreground-muted mt-1"}," Recent calls per second (last 5 min) ",-1))]),e("div",Le,[e("div",null,[t[15]||(t[15]=e("div",{class:"text-foreground-muted"},"Spawned · killed",-1)),e("div",je,n(o.spawned)+" · "+n(o.killed),1)]),e("div",null,[t[16]||(t[16]=e("div",{class:"text-foreground-muted"},"Avg latency",-1)),e("div",Pe,n(o.latency_ewma_ms?.toFixed?.(1)??0)+" ms",1)]),e("div",null,[t[17]||(t[17]=e("div",{class:"text-foreground-muted"},"Avg memory",-1)),e("div",Re,[i(n(o.mem_used_avg_mb>0?"~"+Math.round(o.mem_used_avg_mb):c(y))+" ",1),e("span",qe,"/ "+n(o.mem_limit_mb)+" MB",1)])]),e("div",null,[t[18]||(t[18]=e("div",{class:"text-foreground-muted"},"Avg CPU",-1)),e("div",Te,[i(n(o.cpu_frac_avg>0&&o.cpu_limit>0?(o.cpu_frac_avg*o.cpu_limit).toFixed(2):c(y))+" ",1),o.cpu_limit>0?(p(),v("span",Ue,"/ "+n(o.cpu_limit)+" CPU",1)):M("",!0)])])])]))),128))])])):(p(),v("div",De,[t[20]||(t[20]=e("div",null,[e("div",{class:"text-sm text-white"},"No warm pools yet"),e("div",{class:"text-xs text-foreground-muted mt-1 max-w-prose mx-auto leading-body"}," Deploy your first function to see live worker pools, latency, and cold-start rate land in the tiles above. ")],-1)),e("div",null,[r(Q,{onClick:t[0]||(t[0]=o=>s.$router.push("/functions/new"))},{default:K(()=>[r(c(X),{class:"w-4 h-4"}),t[19]||(t[19]=i(" Deploy your first function ",-1))]),_:1})])]))]))}};export{Oe as default}; +import{E as y}from"./format-CsU4_SPu.js";import{c as B,x as O,o as V,y as z,a as v,b as e,d as r,f as c,B as W,A as G,t as n,k as i,g as M,F as Y,p as J,h as K,_ as Q,q as m,j as p,P as X,z as l}from"./index-fIeDYqWy.js";const Z=B("snowflake",[["path",{d:"m10 20-1.25-2.5L6 18",key:"18frcb"}],["path",{d:"M10 4 8.75 6.5 6 6",key:"7mghy3"}],["path",{d:"m14 20 1.25-2.5L18 18",key:"1chtki"}],["path",{d:"m14 4 1.25 2.5L18 6",key:"1b4wsy"}],["path",{d:"m17 21-3-6h-4",key:"15hhxa"}],["path",{d:"m17 3-3 6 1.5 3",key:"11697g"}],["path",{d:"M2 12h6.5L10 9",key:"kv9z4n"}],["path",{d:"m20 10-1.5 2 1.5 2",key:"1swlpi"}],["path",{d:"M22 12h-6.5L14 15",key:"1mxi28"}],["path",{d:"m4 10 1.5 2L4 14",key:"k9enpj"}],["path",{d:"m7 21 3-6-1.5-3",key:"j8hb9u"}],["path",{d:"m7 3 3 6h4",key:"1otusx"}]]);const ee=B("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),te={class:"space-y-6"},se={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},oe={class:"grid grid-cols-1 lg:grid-cols-3 gap-4"},le={class:"bg-background border border-border rounded-lg p-5 lg:col-span-1"},ne={class:"bg-background border border-border rounded-lg p-5 lg:col-span-2 space-y-5"},ae={class:"grid grid-cols-2 gap-4 text-sm"},re={class:"text-lg font-mono text-white mt-0.5"},de={class:"text-lg font-mono text-white mt-0.5"},ie={class:"text-foreground-muted text-sm"},ue={class:"text-[11px] text-foreground-muted mt-0.5"},ce={class:"space-y-2"},me={class:"flex flex-wrap items-center gap-x-4 gap-y-1 text-[11px] text-foreground-muted"},ve={class:"flex items-center gap-1.5"},pe={class:"flex items-center gap-1.5"},ge={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},xe={class:"bg-background border border-border rounded-lg p-5 space-y-3"},be={class:"grid grid-cols-3 gap-3"},he={key:0,class:"text-xs text-red-400 flex items-center gap-1.5 pt-1"},fe={class:"bg-background border border-border rounded-lg p-5 space-y-3"},_e={class:"grid grid-cols-3 gap-3"},we={key:0},ye={class:"flex items-baseline justify-between mb-3"},ke={class:"text-xs font-bold text-white uppercase tracking-wider"},Se={class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4"},$e={class:"flex items-start justify-between gap-2"},Fe={class:"min-w-0"},Me={class:"text-sm font-medium text-white truncate"},Be={class:"text-[10px] text-foreground-muted font-mono truncate"},Ne={class:"text-right shrink-0"},Ae={class:"text-xs font-mono text-white"},Ce={class:"grid grid-cols-3 gap-2"},Le={class:"border-t border-border pt-3 grid grid-cols-2 gap-3 text-[11px]"},je={class:"font-mono text-white"},Pe={class:"font-mono text-white"},Re={class:"font-mono text-white",title:"Average memory used per invocation vs allocated limit"},qe={class:"text-foreground-muted"},Te={class:"font-mono text-white",title:"Average CPU cores consumed per invocation vs allocated"},Ue={key:0,class:"text-foreground-muted"},De={key:1,class:"bg-background border border-border rounded-lg p-8 text-center space-y-4"},Oe={__name:"Dashboard",setup(Ie){const b=O(),a=m(()=>b.metrics||{}),N=s=>b.poolHistory[s]||[],A=s=>s==null?y:`${s.toFixed(1)}%`,C=s=>s==null?"0":s.toFixed(1),g=s=>{const t=s||0;return t>=1024?`${(t/1024).toFixed(1)} GB`:`${Math.round(t)} MB`},_=s=>{const t=Number(s)||0;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)},u=m(()=>a.value.host?.mem_total_mb??0),k=m(()=>a.value.host?.mem_reserved_mb??0),L=m(()=>a.value.host?.mem_available_mb??0),h=m(()=>Math.max(0,u.value-L.value)),$=m(()=>Math.max(0,u.value-h.value)),j=m(()=>u.value>0?h.value/u.value*100:0),P=m(()=>u.value>0?k.value/u.value*100:0);V(()=>b.connect()),z(()=>b.disconnect());const w={props:{label:String,value:[String,Number],icon:Object,hint:String},setup(s){return()=>l("div",{class:"bg-background border border-border rounded-lg p-5 flex flex-col h-full hover:border-primary/50 transition-colors group"},[l("div",{class:"flex items-center justify-between mb-3"},[l("span",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},s.label),s.icon?l(s.icon,{class:"w-4 h-4 text-foreground-muted group-hover:text-primary"}):null]),l("div",{class:"text-2xl font-mono text-foreground leading-none"},String(s.value)),s.hint?l("div",{class:"text-[11px] text-foreground-muted mt-auto pt-3 leading-snug"},s.hint):null])}},R={props:{p50:Number,p95:Number,p99:Number},setup(s){return()=>{const t=[{label:"p50",ms:s.p50,color:"bg-success/70"},{label:"p95",ms:s.p95,color:"bg-warning/70"},{label:"p99",ms:s.p99,color:"bg-danger/70"}],o=Math.max(s.p50||0,s.p95||0,s.p99||0,1);return l("div",{class:"space-y-2.5"},t.map(d=>{const f=d.ms==null?0:d.ms/o*100;return l("div",{class:"space-y-1"},[l("div",{class:"flex items-baseline justify-between text-[11px]"},[l("span",{class:"font-mono uppercase text-foreground-muted tracking-wider"},d.label),l("span",{class:"font-mono text-white"},d.ms==null?y:`${d.ms}ms`)]),l("div",{class:"h-1.5 bg-surface rounded overflow-hidden"},[l("div",{class:`h-full ${d.color} transition-[width] duration-500 ease-out`,style:{width:`${f.toFixed(1)}%`}})])])}))}}},x={props:{label:String,value:[String,Number],hint:String},setup(s){return()=>l("div",{class:"bg-surface border border-border rounded p-3 flex flex-col h-full"},[l("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},s.label),l("div",{class:"text-lg font-mono text-white mt-0.5"},String(s.value??0)),s.hint?l("div",{class:"text-[10px] text-foreground-muted mt-auto pt-1.5 leading-snug"},s.hint):null])}},S={props:{label:String,value:[String,Number],hint:String},setup(s){return()=>l("div",{class:"bg-surface border border-border rounded p-2.5 flex flex-col h-full"},[l("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},s.label),l("div",{class:"text-base font-mono text-white mt-0.5 leading-none"},String(s.value??0)),s.hint?l("div",{class:"text-[10px] text-foreground-muted mt-auto pt-1.5"},s.hint):null])}},q={props:{total:{type:Number,required:!0},segments:{type:Array,required:!0}},setup(s){return()=>{const t=s.total>0?s.total:1;return l("div",{class:"h-2.5 bg-surface rounded overflow-hidden flex",role:"img","aria-label":s.segments.map(o=>`${o.label}: ${o.value} of ${s.total}`).join("; ")},s.segments.map(o=>l("div",{class:`h-full ${o.color}`,style:{width:`${(o.value/t*100).toFixed(2)}%`},title:`${o.label}: ${o.value}`})))}}},T={props:{points:{type:Array,default:()=>[]}},setup(s){return()=>{const t=s.points||[];if(t.length<2)return l("div",{class:"h-8 flex items-center text-[10px] text-foreground-muted"},"(collecting samples…)");const o=Math.max(...t,1),d=100,f=32,U=d/(t.length-1),D=t.map((I,F)=>{const E=(F*U).toFixed(2),H=(f-I/o*f).toFixed(2);return`${F===0?"M":"L"}${E},${H}`}).join(" ");return l("svg",{viewBox:`0 0 ${d} ${f}`,class:"w-full h-8 text-blue-400",preserveAspectRatio:"none"},[l("path",{d:D,fill:"none",stroke:"currentColor","stroke-width":"1.5"})])}}};return(s,t)=>(p(),v("div",te,[t[21]||(t[21]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"},"System Overview"),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},"Live snapshot of what your platform is doing right now.")],-1)),e("div",se,[r(w,{label:"Functions",hint:"Deployed in this workspace",value:c(b).functionsCount,icon:c(W)},null,8,["value","icon"]),r(w,{label:"In flight",hint:"Requests being handled right now",value:a.value.active_requests??0,icon:c(G)},null,8,["value","icon"]),r(w,{label:"Invocations",hint:"Total calls served since the platform started",value:_(a.value.totals?.invocations??0),icon:c(ee)},null,8,["value","icon"]),r(w,{label:"Cold starts",hint:"Calls that had to spawn a fresh sandbox",value:A(a.value.rates?.cold_start_pct),icon:c(Z)},null,8,["value","icon"])]),e("div",oe,[e("div",le,[t[1]||(t[1]=e("div",{class:"mb-3"},[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Response time "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," How long calls take to come back. p99 is the worst-case 1-in-100. ")],-1)),r(R,{p50:a.value.latency_ms?.p50,p95:a.value.latency_ms?.p95,p99:a.value.latency_ms?.p99},null,8,["p50","p95","p99"])]),e("div",ne,[t[7]||(t[7]=e("div",null,[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Host machine "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," The server Orva is running on: how much of its RAM is actually in use, and how much your warm pools reserve as headroom. ")],-1)),e("div",ae,[e("div",null,[t[2]||(t[2]=e("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},"CPU cores",-1)),e("div",re,n(a.value.host?.num_cpu??"?"),1),t[3]||(t[3]=e("div",{class:"text-[11px] text-foreground-muted mt-0.5"}," available to functions on this host ",-1))]),e("div",null,[t[4]||(t[4]=e("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted"},"Memory in use",-1)),e("div",de,[i(n(g(h.value))+" ",1),e("span",ie,"/ "+n(g(u.value)),1)]),e("div",ue,n(j.value.toFixed(1))+"% used · "+n(g(k.value))+" reserved by warm pools ",1)])]),e("div",ce,[r(q,{total:u.value,segments:[{label:"In use",value:h.value,color:"bg-info/70"},{label:"Free",value:$.value,color:"bg-success/40"}]},null,8,["total","segments"]),e("div",me,[e("span",ve,[t[5]||(t[5]=e("span",{class:"w-2 h-2 rounded-full bg-info/70"},null,-1)),i(" "+n(g(h.value))+" in use ",1)]),e("span",pe,[t[6]||(t[6]=e("span",{class:"w-2 h-2 rounded-full bg-success/40"},null,-1)),i(" "+n(g($.value))+" free ",1)]),e("span",null,n(g(k.value))+" reserved by warm pools ("+n(P.value.toFixed(1))+"% — held ready, not all in use) ",1)])])])]),e("div",ge,[e("div",xe,[t[9]||(t[9]=e("div",null,[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Builds "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," Where deploys go: extracted, dependencies installed, then activated. ")],-1)),e("div",be,[r(x,{label:"In queue",value:a.value.build_queue?.pending??0,hint:"waiting to start"},null,8,["value"]),r(x,{label:"Build workers",value:a.value.build_queue?.workers??0,hint:"parallel slots"},null,8,["value"]),r(x,{label:"Built so far",value:_(a.value.totals?.builds??0),hint:"lifetime total"},null,8,["value"])]),(a.value.totals?.build_errors??0)>0?(p(),v("div",he,[t[8]||(t[8]=e("span",{class:"w-1.5 h-1.5 rounded-full bg-red-400"},null,-1)),i(" "+n(a.value.totals.build_errors)+" build"+n(a.value.totals.build_errors===1?" has":"s have")+" failed since start ",1)])):M("",!0)]),e("div",fe,[t[10]||(t[10]=e("div",null,[e("h2",{class:"text-xs font-bold text-white uppercase tracking-wider"}," Sandbox activity "),e("div",{class:"text-[11px] text-foreground-muted mt-1"}," Each invocation runs inside an isolated nsjail sandbox process. ")],-1)),e("div",_e,[r(x,{label:"Running now",value:a.value.sandbox?.active??0,hint:"serving a request"},null,8,["value"]),r(x,{label:"Reused",value:_(a.value.totals?.warm_hits??0),hint:"warm-pool hits"},null,8,["value"]),r(x,{label:"Spawned fresh",value:_(a.value.totals?.cold_starts??0),hint:"cold starts"},null,8,["value"])])])]),(a.value.pools||[]).length?(p(),v("div",we,[e("div",ye,[e("div",null,[e("h2",ke," Warm pools ("+n(a.value.pools.length)+") ",1),t[11]||(t[11]=e("div",{class:"text-[11px] text-foreground-muted mt-1"}," One pool per active function. Sandboxes stay ready so the next call doesn't pay a cold start. ",-1))])]),e("div",Se,[(p(!0),v(Y,null,J(a.value.pools,o=>(p(),v("div",{key:o.function_id,class:"bg-background border border-border rounded-lg p-4 space-y-3"},[e("div",$e,[e("div",Fe,[e("div",Me,n(o.function_name||o.function_id),1),e("div",Be,n(o.function_id),1)]),e("div",Ne,[t[13]||(t[13]=e("div",{class:"text-[10px] text-foreground-muted"},"Target / cap",-1)),e("div",Ae,[i(n(o.target)+" ",1),t[12]||(t[12]=e("span",{class:"text-foreground-muted"},"/",-1)),i(" "+n(o.dynamic_max),1)])])]),e("div",Ce,[r(S,{label:"Ready",value:o.idle,hint:"idle workers"},null,8,["value"]),r(S,{label:"Busy",value:o.busy,hint:"serving now"},null,8,["value"]),r(S,{label:"Calls / sec",value:C(o.rate_ewma),hint:"recent rate"},null,8,["value"])]),e("div",null,[r(T,{points:N(o.function_id)},null,8,["points"]),t[14]||(t[14]=e("div",{class:"text-[10px] text-foreground-muted mt-1"}," Recent calls per second (last 5 min) ",-1))]),e("div",Le,[e("div",null,[t[15]||(t[15]=e("div",{class:"text-foreground-muted"},"Spawned · killed",-1)),e("div",je,n(o.spawned)+" · "+n(o.killed),1)]),e("div",null,[t[16]||(t[16]=e("div",{class:"text-foreground-muted"},"Avg latency",-1)),e("div",Pe,n(o.latency_ewma_ms?.toFixed?.(1)??0)+" ms",1)]),e("div",null,[t[17]||(t[17]=e("div",{class:"text-foreground-muted"},"Avg memory",-1)),e("div",Re,[i(n(o.mem_used_avg_mb>0?"~"+Math.round(o.mem_used_avg_mb):c(y))+" ",1),e("span",qe,"/ "+n(o.mem_limit_mb)+" MB",1)])]),e("div",null,[t[18]||(t[18]=e("div",{class:"text-foreground-muted"},"Avg CPU",-1)),e("div",Te,[i(n(o.cpu_frac_avg>0&&o.cpu_limit>0?(o.cpu_frac_avg*o.cpu_limit).toFixed(2):c(y))+" ",1),o.cpu_limit>0?(p(),v("span",Ue,"/ "+n(o.cpu_limit)+" CPU",1)):M("",!0)])])])]))),128))])])):(p(),v("div",De,[t[20]||(t[20]=e("div",null,[e("div",{class:"text-sm text-white"},"No warm pools yet"),e("div",{class:"text-xs text-foreground-muted mt-1 max-w-prose mx-auto leading-body"}," Deploy your first function to see live worker pools, latency, and cold-start rate land in the tiles above. ")],-1)),e("div",null,[r(Q,{onClick:t[0]||(t[0]=o=>s.$router.push("/functions/new"))},{default:K(()=>[r(c(X),{class:"w-4 h-4"}),t[19]||(t[19]=i(" Deploy your first function ",-1))]),_:1})])]))]))}};export{Oe as default}; diff --git a/backend/internal/server/ui_dist/assets/Deployments-HGMJdPkO.js b/backend/internal/server/ui_dist/assets/Deployments-DjklWQL1.js similarity index 95% rename from backend/internal/server/ui_dist/assets/Deployments-HGMJdPkO.js rename to backend/internal/server/ui_dist/assets/Deployments-DjklWQL1.js index 84fae08..dc8a6e2 100644 --- a/backend/internal/server/ui_dist/assets/Deployments-HGMJdPkO.js +++ b/backend/internal/server/ui_dist/assets/Deployments-DjklWQL1.js @@ -1,4 +1,4 @@ -import{C as de,E as ce,U as me,o as pe,G as ve,a as n,b as s,k as h,d as i,h as b,_ as I,f as c,t as r,g as u,F as ee,p as te,ah as fe,ai as P,q as M,a2 as xe,r as p,W as he,a9 as be,j as a,s as E,w as se,n as O,aj as ge,z as J,af as _e}from"./index-BMkkwZ9q.js";import{E as g}from"./format-CsU4_SPu.js";import{D as ye}from"./Drawer-C3AFLOZb.js";import{_ as W}from"./StatusBadge-Cj_PlPFZ.js";import{d as ke}from"./rollbackDiff-Cvt2Ss82.js";import{C as we}from"./clock-BWp9w4xs.js";import{C as Ce,G as oe}from"./git-compare-omnJl6y2.js";import{R as $e}from"./refresh-cw-C7sR7ShF.js";import{R as ae}from"./rotate-ccw-CsgWy1Bs.js";import"./circle-DJWJGpv0.js";const Se={class:"space-y-6"},De={class:"flex items-center justify-between"},Re={class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},Ee={class:"flex items-center gap-2"},Ne={key:0,class:"bg-background border border-border rounded-lg p-4 flex items-center gap-4"},Ve={class:"w-10 h-10 rounded-md bg-success/15 border border-success/30 flex items-center justify-center shrink-0"},Fe={class:"flex-1 min-w-0"},Le={class:"flex items-center gap-2 flex-wrap"},Te={class:"text-xs px-2 py-0.5 rounded bg-success/15 text-success border border-success/30 font-mono"},je={key:0,class:"text-xs px-2 py-0.5 rounded bg-amber-500/15 text-amber-400 border border-amber-500/30"},Be={class:"text-xs text-foreground-muted mt-1 font-mono truncate"},qe={key:1,class:"bg-red-950/30 border border-red-900/40 rounded p-3 text-xs text-red-300"},ze={class:"bg-background border border-border rounded-lg overflow-x-auto"},Ae={class:"sm:hidden divide-y divide-border"},Ge=["onClick"],Ie={class:"flex items-start justify-between gap-2"},Me={class:"min-w-0 flex-1"},Oe={class:"flex items-center gap-2 flex-wrap"},Ue={key:0,class:"px-1.5 py-0.5 rounded text-[10px] bg-success/15 text-success border border-success/30"},He={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Pe={key:0,class:"font-mono"},Je={key:1},We={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted"},Ye={class:"hidden sm:table w-full text-sm text-left"},Ke={class:"divide-y divide-border"},Qe=["onClick"],Xe={class:"px-6 py-4 font-mono text-xs"},Ze={class:"flex items-center gap-2"},et={key:0,class:"px-1.5 py-0.5 rounded text-[10px] bg-success/15 text-success border border-success/30 normal-case"},tt={class:"px-6 py-4 text-foreground"},st={class:"px-6 py-4"},ot={class:"px-6 py-4 text-foreground-muted text-xs hidden md:table-cell"},at={class:"px-6 py-4 text-foreground-muted font-mono text-xs hidden sm:table-cell"},nt={class:"px-6 py-4 text-foreground-muted font-mono text-xs hidden xl:table-cell"},lt={class:"inline-flex items-center gap-2 justify-end"},rt={key:2,class:"text-foreground-muted/50"},it={key:3,class:"text-foreground-muted/30"},ut={key:0},dt={key:0,class:"p-6 text-sm text-foreground-muted"},ct={key:1,class:"p-5 space-y-4"},mt={class:"flex items-center gap-2 flex-wrap"},pt={key:0,class:"inline-flex items-center px-2.5 py-1 rounded text-xs border bg-background font-mono text-foreground-muted"},vt={class:"grid grid-cols-2 gap-3 text-sm"},ft={key:0},xt={class:"bg-red-950/30 border border-red-900/40 rounded p-3 text-xs text-red-300 font-mono whitespace-pre-wrap break-words"},ht={class:"flex items-center justify-between mb-2"},bt={key:0,class:"text-[10px] text-green-400"},gt={class:"bg-surface border border-border rounded p-3 text-xs text-foreground font-mono overflow-auto max-h-96 whitespace-pre-wrap break-words"},Vt={__name:"Deployments",setup(_t){const U=de(),ne=be(),x=M(()=>ne.params.name),N=p(null),d=p(null),_=p([]),C=p(!1),V=p(""),$=p(!1),F=t=>t&&t.status==="succeeded"&&t.code_hash&&!v(t),y=M(()=>_.value.find(e=>v(e))?.id||null),H=t=>t&&t.status==="succeeded"&&t.code_hash&&!v(t)&&y.value,Y=async t=>{if(!N.value||!t?.id||$.value)return;const e=(t.code_hash||"").slice(0,12);let m=`Code hash ${e}. Current ${d.value?"v"+d.value.version:"version"} stays in history.`;try{const G=(await P(t.id))?.data?.snapshot;if(G&&d.value){const R=ke(d.value,G);R.length?m=`Rolling back to v${t.version} (code ${e}) will also change: +import{C as de,E as ce,U as me,o as pe,G as ve,a as n,b as s,k as h,d as i,h as b,_ as I,f as c,t as r,g as u,F as ee,p as te,ah as fe,ai as P,q as M,a2 as xe,r as p,W as he,a9 as be,j as a,s as E,w as se,n as O,aj as ge,z as J,af as _e}from"./index-fIeDYqWy.js";import{E as g}from"./format-CsU4_SPu.js";import{D as ye}from"./Drawer-D-dO6A0-.js";import{_ as W}from"./StatusBadge-U9tC82MH.js";import{d as ke}from"./rollbackDiff-Cvt2Ss82.js";import{C as we}from"./clock-C4Bm6ngE.js";import{C as Ce,G as oe}from"./git-compare-5RUagJlb.js";import{R as $e}from"./refresh-cw-9T7Tp2vI.js";import{R as ae}from"./rotate-ccw-BYpihd4d.js";import"./circle-u9aj3idX.js";const Se={class:"space-y-6"},De={class:"flex items-center justify-between"},Re={class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},Ee={class:"flex items-center gap-2"},Ne={key:0,class:"bg-background border border-border rounded-lg p-4 flex items-center gap-4"},Ve={class:"w-10 h-10 rounded-md bg-success/15 border border-success/30 flex items-center justify-center shrink-0"},Fe={class:"flex-1 min-w-0"},Le={class:"flex items-center gap-2 flex-wrap"},Te={class:"text-xs px-2 py-0.5 rounded bg-success/15 text-success border border-success/30 font-mono"},je={key:0,class:"text-xs px-2 py-0.5 rounded bg-amber-500/15 text-amber-400 border border-amber-500/30"},Be={class:"text-xs text-foreground-muted mt-1 font-mono truncate"},qe={key:1,class:"bg-red-950/30 border border-red-900/40 rounded p-3 text-xs text-red-300"},ze={class:"bg-background border border-border rounded-lg overflow-x-auto"},Ae={class:"sm:hidden divide-y divide-border"},Ge=["onClick"],Ie={class:"flex items-start justify-between gap-2"},Me={class:"min-w-0 flex-1"},Oe={class:"flex items-center gap-2 flex-wrap"},Ue={key:0,class:"px-1.5 py-0.5 rounded text-[10px] bg-success/15 text-success border border-success/30"},He={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Pe={key:0,class:"font-mono"},Je={key:1},We={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted"},Ye={class:"hidden sm:table w-full text-sm text-left"},Ke={class:"divide-y divide-border"},Qe=["onClick"],Xe={class:"px-6 py-4 font-mono text-xs"},Ze={class:"flex items-center gap-2"},et={key:0,class:"px-1.5 py-0.5 rounded text-[10px] bg-success/15 text-success border border-success/30 normal-case"},tt={class:"px-6 py-4 text-foreground"},st={class:"px-6 py-4"},ot={class:"px-6 py-4 text-foreground-muted text-xs hidden md:table-cell"},at={class:"px-6 py-4 text-foreground-muted font-mono text-xs hidden sm:table-cell"},nt={class:"px-6 py-4 text-foreground-muted font-mono text-xs hidden xl:table-cell"},lt={class:"inline-flex items-center gap-2 justify-end"},rt={key:2,class:"text-foreground-muted/50"},it={key:3,class:"text-foreground-muted/30"},ut={key:0},dt={key:0,class:"p-6 text-sm text-foreground-muted"},ct={key:1,class:"p-5 space-y-4"},mt={class:"flex items-center gap-2 flex-wrap"},pt={key:0,class:"inline-flex items-center px-2.5 py-1 rounded text-xs border bg-background font-mono text-foreground-muted"},vt={class:"grid grid-cols-2 gap-3 text-sm"},ft={key:0},xt={class:"bg-red-950/30 border border-red-900/40 rounded p-3 text-xs text-red-300 font-mono whitespace-pre-wrap break-words"},ht={class:"flex items-center justify-between mb-2"},bt={key:0,class:"text-[10px] text-green-400"},gt={class:"bg-surface border border-border rounded p-3 text-xs text-foreground font-mono overflow-auto max-h-96 whitespace-pre-wrap break-words"},Vt={__name:"Deployments",setup(_t){const U=de(),ne=be(),x=M(()=>ne.params.name),N=p(null),d=p(null),_=p([]),C=p(!1),V=p(""),$=p(!1),F=t=>t&&t.status==="succeeded"&&t.code_hash&&!v(t),y=M(()=>_.value.find(e=>v(e))?.id||null),H=t=>t&&t.status==="succeeded"&&t.code_hash&&!v(t)&&y.value,Y=async t=>{if(!N.value||!t?.id||$.value)return;const e=(t.code_hash||"").slice(0,12);let m=`Code hash ${e}. Current ${d.value?"v"+d.value.version:"version"} stays in history.`;try{const G=(await P(t.id))?.data?.snapshot;if(G&&d.value){const R=ke(d.value,G);R.length?m=`Rolling back to v${t.version} (code ${e}) will also change: ${R.join(` `)} diff --git a/backend/internal/server/ui_dist/assets/Docs-D8EdWzOh.js b/backend/internal/server/ui_dist/assets/Docs-DVOuRCTb.js similarity index 99% rename from backend/internal/server/ui_dist/assets/Docs-D8EdWzOh.js rename to backend/internal/server/ui_dist/assets/Docs-DVOuRCTb.js index b505a02..6ace581 100644 --- a/backend/internal/server/ui_dist/assets/Docs-D8EdWzOh.js +++ b/backend/internal/server/ui_dist/assets/Docs-DVOuRCTb.js @@ -1,4 +1,4 @@ -import{E as V}from"./format-CsU4_SPu.js";import{c as G}from"./clipboard-CmSw2rR-.js";import{a as Ee,b as De}from"./aiPrompts-DGZ6L7ag.js";import{C as Re,o as W,G as He,a as g,b as e,s as P,n as I,f as n,F as _,p as A,d,l as b,k as a,h as C,bb as $e,t as l,g as Me,r as k,q as v,aD as x,z as s,a2 as Le,Y as qe,j as u,H as Y,X as Be}from"./index-BMkkwZ9q.js";import{H as f,p as Ne,j as J,a as ze,b as B}from"./github-dark-BrynTfs3.js";import{C as N}from"./check-C4wzjDZN.js";import{C as z}from"./copy-CTb6u-fx.js";import{G as K}from"./globe-CR2M7Azm.js";import{C as Z}from"./chevron-right-OdWgNfOU.js";import{K as M}from"./key-round-BccKiRw7.js";import{C as Ke}from"./chevron-down-BTZfO5Md.js";import{V as Ue}from"./variable-b2EnW52t.js";import{L as Xe}from"./lock-Dpr2FIZ9.js";function Fe(L){const q=L.regex,r="HTTP/([32]|1\\.[01])",j=/[A-Za-z][A-Za-z0-9-]*/,E={className:"attribute",begin:q.concat("^",j,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},T=[E,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+r+" \\d{3})",end:/$/,contains:[{className:"meta",begin:r},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:T}},{begin:"(?=^[A-Z]+ (.*?) "+r+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:r},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:T}},L.inherit(E,{relevance:0})]}}const Ve={class:"space-y-12 pb-16"},Ge={class:"docs-hero"},We={class:"docs-hero-content"},Ye={class:"docs-hero-row"},Je={class:"docs-hero-actions"},Ze=["title","aria-label"],Qe={class:"docs-hero-toc","aria-label":"Jump to docs section"},eo=["href"],oo={class:"docs-hero-toc-num"},so={id:"handler",class:"space-y-5 scroll-mt-6"},to={class:"doc-table-wrap"},ao={class:"doc-table"},no={class:"doc-cell-key"},co={class:"doc-cell-mono"},ro={class:"doc-cell-mono hidden sm:table-cell"},io={class:"doc-cell-mono hidden md:table-cell"},lo={id:"deploy",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},po={class:"grid grid-cols-1 lg:grid-cols-2 gap-3"},uo={class:"space-y-2"},ho={class:"space-y-2"},vo={class:"space-y-2"},mo={id:"config",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},bo={class:"doc-table-wrap"},go={class:"doc-table"},yo={class:"doc-cell-key whitespace-nowrap"},fo={class:"doc-cell-mono hidden sm:table-cell whitespace-nowrap"},ko={class:"doc-cell-body"},wo={class:"space-y-2"},Co={class:"doc-details group"},xo={class:"doc-details-summary"},To={class:"doc-details-body"},So={id:"sdk",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},_o={class:"space-y-2"},Ao={class:"space-y-2"},Oo={class:"space-y-2"},Po={id:"schedules",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},Io={class:"doc-section-head"},jo={class:"doc-lede"},Eo={id:"webhooks",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},Do={class:"doc-section-head"},Ro={class:"doc-lede"},Ho={class:"doc-table-wrap"},$o={class:"doc-table"},Mo={class:"doc-cell-key whitespace-nowrap"},Lo={class:"doc-cell-body"},qo={class:"space-y-2"},Bo={id:"mcp",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},No={class:"grid grid-cols-1 md:grid-cols-3 gap-3"},zo={class:"doc-card"},Ko={class:"doc-card-body"},Uo={class:"doc-chip break-all"},Xo={class:"doc-token-bar"},Fo={class:"flex items-center gap-2 min-w-0 flex-1"},Vo={key:0,class:"text-sm text-foreground-muted truncate"},Go={key:1,class:"text-sm text-success truncate"},Wo={class:"doc-chip"},Yo=["disabled"],Jo={class:"doc-details group"},Zo={class:"doc-details-summary"},Qo={class:"doc-details-body space-y-4"},es={id:"generate",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},os={class:"ai-prompt-actions"},ss={key:0,class:"prompt-collapse-fade","aria-hidden":"true"},ts=["aria-expanded"],as={id:"tracing",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},ns={class:"doc-table-wrap"},cs={class:"doc-table"},ds={class:"doc-cell-key whitespace-nowrap"},rs={class:"doc-cell-body"},is={id:"errors",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},ls={class:"doc-table-wrap"},ps={class:"doc-table"},us={class:"doc-cell-key whitespace-nowrap"},hs={class:"doc-cell-body"},vs={id:"cli",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},ms={class:"doc-prose"},bs={class:"doc-table-wrap"},gs={class:"doc-table"},ys={class:"doc-cell-key whitespace-nowrap"},fs={class:"doc-cell-mono"},ks={class:"doc-cell-body hidden md:table-cell"},ws={class:"space-y-2"},Cs={class:"space-y-2"},xs={class:"space-y-2"},Ts={class:"space-y-2"},Ss={class:"space-y-2"},_s=`# Available inside every running function — refresh per-invocation: +import{E as V}from"./format-CsU4_SPu.js";import{c as G}from"./clipboard-CmSw2rR-.js";import{a as Ee,b as De}from"./aiPrompts-DGZ6L7ag.js";import{C as Re,o as W,G as He,a as g,b as e,s as P,n as I,f as n,F as _,p as A,d,l as b,k as a,h as C,bb as $e,t as l,g as Me,r as k,q as v,aD as x,z as s,a2 as Le,Y as qe,j as u,H as Y,X as Be}from"./index-fIeDYqWy.js";import{H as f,p as Ne,j as J,a as ze,b as B}from"./github-dark-BrynTfs3.js";import{C as N}from"./check-Cwg1V2MO.js";import{C as z}from"./copy-DJiur09W.js";import{G as K}from"./globe-DtEgS3Yf.js";import{C as Z}from"./chevron-right-BrmZtzfn.js";import{K as M}from"./key-round-BR2mpVu3.js";import{C as Ke}from"./chevron-down-BcMN1rmG.js";import{V as Ue}from"./variable-C2-uCEoV.js";import{L as Xe}from"./lock-D649KWfg.js";function Fe(L){const q=L.regex,r="HTTP/([32]|1\\.[01])",j=/[A-Za-z][A-Za-z0-9-]*/,E={className:"attribute",begin:q.concat("^",j,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},T=[E,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+r+" \\d{3})",end:/$/,contains:[{className:"meta",begin:r},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:T}},{begin:"(?=^[A-Z]+ (.*?) "+r+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:r},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:T}},L.inherit(E,{relevance:0})]}}const Ve={class:"space-y-12 pb-16"},Ge={class:"docs-hero"},We={class:"docs-hero-content"},Ye={class:"docs-hero-row"},Je={class:"docs-hero-actions"},Ze=["title","aria-label"],Qe={class:"docs-hero-toc","aria-label":"Jump to docs section"},eo=["href"],oo={class:"docs-hero-toc-num"},so={id:"handler",class:"space-y-5 scroll-mt-6"},to={class:"doc-table-wrap"},ao={class:"doc-table"},no={class:"doc-cell-key"},co={class:"doc-cell-mono"},ro={class:"doc-cell-mono hidden sm:table-cell"},io={class:"doc-cell-mono hidden md:table-cell"},lo={id:"deploy",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},po={class:"grid grid-cols-1 lg:grid-cols-2 gap-3"},uo={class:"space-y-2"},ho={class:"space-y-2"},vo={class:"space-y-2"},mo={id:"config",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},bo={class:"doc-table-wrap"},go={class:"doc-table"},yo={class:"doc-cell-key whitespace-nowrap"},fo={class:"doc-cell-mono hidden sm:table-cell whitespace-nowrap"},ko={class:"doc-cell-body"},wo={class:"space-y-2"},Co={class:"doc-details group"},xo={class:"doc-details-summary"},To={class:"doc-details-body"},So={id:"sdk",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},_o={class:"space-y-2"},Ao={class:"space-y-2"},Oo={class:"space-y-2"},Po={id:"schedules",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},Io={class:"doc-section-head"},jo={class:"doc-lede"},Eo={id:"webhooks",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},Do={class:"doc-section-head"},Ro={class:"doc-lede"},Ho={class:"doc-table-wrap"},$o={class:"doc-table"},Mo={class:"doc-cell-key whitespace-nowrap"},Lo={class:"doc-cell-body"},qo={class:"space-y-2"},Bo={id:"mcp",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},No={class:"grid grid-cols-1 md:grid-cols-3 gap-3"},zo={class:"doc-card"},Ko={class:"doc-card-body"},Uo={class:"doc-chip break-all"},Xo={class:"doc-token-bar"},Fo={class:"flex items-center gap-2 min-w-0 flex-1"},Vo={key:0,class:"text-sm text-foreground-muted truncate"},Go={key:1,class:"text-sm text-success truncate"},Wo={class:"doc-chip"},Yo=["disabled"],Jo={class:"doc-details group"},Zo={class:"doc-details-summary"},Qo={class:"doc-details-body space-y-4"},es={id:"generate",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},os={class:"ai-prompt-actions"},ss={key:0,class:"prompt-collapse-fade","aria-hidden":"true"},ts=["aria-expanded"],as={id:"tracing",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},ns={class:"doc-table-wrap"},cs={class:"doc-table"},ds={class:"doc-cell-key whitespace-nowrap"},rs={class:"doc-cell-body"},is={id:"errors",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},ls={class:"doc-table-wrap"},ps={class:"doc-table"},us={class:"doc-cell-key whitespace-nowrap"},hs={class:"doc-cell-body"},vs={id:"cli",class:"space-y-5 scroll-mt-6 border-t border-border pt-12"},ms={class:"doc-prose"},bs={class:"doc-table-wrap"},gs={class:"doc-table"},ys={class:"doc-cell-key whitespace-nowrap"},fs={class:"doc-cell-mono"},ks={class:"doc-cell-body hidden md:table-cell"},ws={class:"space-y-2"},Cs={class:"space-y-2"},xs={class:"space-y-2"},Ts={class:"space-y-2"},Ss={class:"space-y-2"},_s=`# Available inside every running function — refresh per-invocation: ORVA_TRACE_ID=tr_3e39f6991c66f140577c6021da7dd13b # one per causal chain ORVA_SPAN_ID=sp_4ceba57f6b1c982e # this execution diff --git a/backend/internal/server/ui_dist/assets/Drawer-C3AFLOZb.js b/backend/internal/server/ui_dist/assets/Drawer-D-dO6A0-.js similarity index 96% rename from backend/internal/server/ui_dist/assets/Drawer-C3AFLOZb.js rename to backend/internal/server/ui_dist/assets/Drawer-D-dO6A0-.js index cfe56f2..bacc270 100644 --- a/backend/internal/server/ui_dist/assets/Drawer-C3AFLOZb.js +++ b/backend/internal/server/ui_dist/assets/Drawer-D-dO6A0-.js @@ -1 +1 @@ -import{D as h,E as p,o as y,y as x,j as a,n as k,d as r,h as m,a as n,b as o,J as f,L as v,N as V,K as d,f as _,aa as g,g as l,Q as B,r as C,k as D,t as E,I as N}from"./index-BMkkwZ9q.js";const S={key:0,class:"fixed inset-0 z-50 pointer-events-none"},K={class:"px-5 py-3 border-b border-border flex items-center justify-between shrink-0"},T={class:"text-sm font-medium text-white truncate"},$={class:"flex-1 overflow-y-auto scrollable"},L={key:0,class:"px-5 py-3 border-t border-border shrink-0"},j={__name:"Drawer",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},width:{type:String,default:"560px"}},emits:["update:modelValue"],setup(t,{emit:b}){const i=t,w=b,c=C(null),s=()=>w("update:modelValue",!1);p(()=>i.modelValue,async e=>{e&&(await N(),c.value?.focus?.())});const u=e=>{e.key==="Escape"&&i.modelValue&&s()};return y(()=>window.addEventListener("keydown",u)),x(()=>window.removeEventListener("keydown",u)),(e,z)=>(a(),k(B,{to:"body"},[r(f,{name:"drawer-fade"},{default:m(()=>[t.modelValue?(a(),n("div",S,[o("div",{class:"absolute inset-0 pointer-events-auto",onClick:s}),r(f,{name:"drawer-slide"},{default:m(()=>[t.modelValue?(a(),n("div",{key:0,class:"absolute pointer-events-auto bg-background flex flex-col inset-x-0 bottom-0 max-h-[85dvh] border-t border-border rounded-t-lg pb-safe sm:inset-x-auto sm:right-0 sm:top-0 sm:bottom-0 sm:max-h-none sm:border-t-0 sm:border-l sm:rounded-none sm:pb-0 sm:w-[var(--drawer-w,560px)]",style:V({"--drawer-w":t.width}),onKeydown:v(s,["esc"]),tabindex:"-1",ref_key:"root",ref:c},[o("header",K,[o("div",T,[d(e.$slots,"title",{},()=>[D(E(t.title),1)],!0)]),o("button",{class:"text-foreground-muted hover:text-white transition-colors touch-expand-iconbtn -mr-1",onClick:s,"aria-label":"Close"},[r(_(g),{class:"w-4 h-4"})])]),o("div",$,[d(e.$slots,"default",{},void 0,!0)]),e.$slots.footer?(a(),n("footer",L,[d(e.$slots,"footer",{},void 0,!0)])):l("",!0)],36)):l("",!0)]),_:3})])):l("",!0)]),_:3})]))}},J=h(j,[["__scopeId","data-v-bda4ef6c"]]);export{J as D}; +import{D as h,E as p,o as y,y as x,j as a,n as k,d as r,h as m,a as n,b as o,J as f,L as v,N as V,K as d,f as _,aa as g,g as l,Q as B,r as C,k as D,t as E,I as N}from"./index-fIeDYqWy.js";const S={key:0,class:"fixed inset-0 z-50 pointer-events-none"},K={class:"px-5 py-3 border-b border-border flex items-center justify-between shrink-0"},T={class:"text-sm font-medium text-white truncate"},$={class:"flex-1 overflow-y-auto scrollable"},L={key:0,class:"px-5 py-3 border-t border-border shrink-0"},j={__name:"Drawer",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},width:{type:String,default:"560px"}},emits:["update:modelValue"],setup(t,{emit:b}){const i=t,w=b,c=C(null),s=()=>w("update:modelValue",!1);p(()=>i.modelValue,async e=>{e&&(await N(),c.value?.focus?.())});const u=e=>{e.key==="Escape"&&i.modelValue&&s()};return y(()=>window.addEventListener("keydown",u)),x(()=>window.removeEventListener("keydown",u)),(e,z)=>(a(),k(B,{to:"body"},[r(f,{name:"drawer-fade"},{default:m(()=>[t.modelValue?(a(),n("div",S,[o("div",{class:"absolute inset-0 pointer-events-auto",onClick:s}),r(f,{name:"drawer-slide"},{default:m(()=>[t.modelValue?(a(),n("div",{key:0,class:"absolute pointer-events-auto bg-background flex flex-col inset-x-0 bottom-0 max-h-[85dvh] border-t border-border rounded-t-lg pb-safe sm:inset-x-auto sm:right-0 sm:top-0 sm:bottom-0 sm:max-h-none sm:border-t-0 sm:border-l sm:rounded-none sm:pb-0 sm:w-[var(--drawer-w,560px)]",style:V({"--drawer-w":t.width}),onKeydown:v(s,["esc"]),tabindex:"-1",ref_key:"root",ref:c},[o("header",K,[o("div",T,[d(e.$slots,"title",{},()=>[D(E(t.title),1)],!0)]),o("button",{class:"text-foreground-muted hover:text-white transition-colors touch-expand-iconbtn -mr-1",onClick:s,"aria-label":"Close"},[r(_(g),{class:"w-4 h-4"})])]),o("div",$,[d(e.$slots,"default",{},void 0,!0)]),e.$slots.footer?(a(),n("footer",L,[d(e.$slots,"footer",{},void 0,!0)])):l("",!0)],36)):l("",!0)]),_:3})])):l("",!0)]),_:3})]))}},J=h(j,[["__scopeId","data-v-bda4ef6c"]]);export{J as D}; diff --git a/backend/internal/server/ui_dist/assets/Editor-CGt5HsZM.js b/backend/internal/server/ui_dist/assets/Editor--3DRfIJD.js similarity index 99% rename from backend/internal/server/ui_dist/assets/Editor-CGt5HsZM.js rename to backend/internal/server/ui_dist/assets/Editor--3DRfIJD.js index e33d904..7016fd3 100644 --- a/backend/internal/server/ui_dist/assets/Editor-CGt5HsZM.js +++ b/backend/internal/server/ui_dist/assets/Editor--3DRfIJD.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeEditor-1BBBEH1J.js","assets/index-BOWx3BJu.js","assets/index-BMkkwZ9q.js","assets/index-De6hiwes.css","assets/CodeEditor-tn0RQdqM.css"])))=>i.map(i=>d[i]); -import{c as He,D as co,C as mo,E as ge,o as po,G as vt,a as l,b as o,t as p,d,f,e as _,v as O,g,k as u,Z as fo,$ as vo,h,_ as M,n as le,F as S,p as C,s as oe,a0 as go,a1 as Oe,Y as T,r as v,q as E,a2 as ho,a3 as bo,a4 as yo,a5 as xo,a6 as _o,i as wo,a7 as ko,a8 as So,a9 as Co,j as i,H as To,w as Eo,aa as $e,ab as Oo,L as Ro,ac as jo,ad as No,ae as Do,af as Ao,ag as Po,z as he}from"./index-BMkkwZ9q.js";import{_ as de}from"./Input-i1hDoPmt.js";import{_ as ne}from"./Modal-jEhKmxZK.js";import{c as Io}from"./clipboard-CmSw2rR-.js";import{c as Mo}from"./aiPrompts-DGZ6L7ag.js";import{d as Vo}from"./rollbackDiff-Cvt2Ss82.js";import{F as gt,S as Ue,P as ht}from"./settings-2-CcqGdzLw.js";import{C as be}from"./chevron-down-BTZfO5Md.js";import{V as bt}from"./variable-b2EnW52t.js";import{K as yt}from"./key-round-BccKiRw7.js";import{B as xt}from"./book-open-CAmAR_fB.js";import{C as Lo}from"./check-C4wzjDZN.js";import{C as $o}from"./copy-CTb6u-fx.js";import{P as _t}from"./play-CPjfKIOc.js";import{S as Uo}from"./sparkles-BVQ_t_Q_.js";import{C as qe,G as qo}from"./git-compare-omnJl6y2.js";import{T as Be}from"./trash-2-BXf2uqQH.js";import{G as wt}from"./globe-CR2M7Azm.js";import{L as Bo}from"./lock-Dpr2FIZ9.js";import{S as zo}from"./shield-check-sW6QCkG0.js";import{R as Fo}from"./rotate-ccw-CsgWy1Bs.js";import{T as Ho}from"./terminal-DAVNGL0P.js";const Go=He("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);const kt=He("layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);const St=He("shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]]),Jo=["amber","arctic","aurora","bold","brave","breezy","bright","brisk","calm","celestial","cobalt","cosmic","crimson","crisp","crystal","dapper","dazzling","deep","eager","ember","fearless","feisty","fierce","flaming","fluent","fluorescent","frosty","gentle","glacial","golden","graceful","happy","hazy","icy","indigo","jade","jolly","jovial","keen","kindred","lavender","lively","lucent","lunar","magenta","magnetic","merry","midnight","mighty","mellow","mossy","mystic","neon","nimble","noble","obsidian","opal","pearl","peppy","pixel","plucky","plush","polar","prime","quartz","quick","quiet","radiant","rapid","rare","roaming","rosy","royal","rugged","runic","rustic","sapphire","scarlet","sharp","silent","silken","silver","sleek","smooth","snowy","snug","solar","sonic","spry","starlit","stellar","sturdy","sublime","sunny","svelte","swift","tame","tender","thunder","tidal","topaz","tropic","turquoise","twilight","urban","velvet","verdant","vibrant","violet","vivid","warm","whisper","wild","wise","witty","woven","zesty","zen"],Ko=["albatross","amber","antler","apricot","archer","arrow","atlas","aurora","badger","bayou","beacon","bison","blossom","bramble","breeze","cactus","canyon","caravan","cedar","cliff","comet","compass","coral","cosmos","cypress","dawn","delta","dolphin","drift","dune","eagle","ember","fable","falcon","fern","fjord","flame","flint","forest","galaxy","garnet","geyser","glacier","glade","glint","gorge","gull","harbor","haven","horizon","iceberg","iris","jaguar","jetty","jungle","kelp","kestrel","kettle","kraken","lagoon","lantern","lark","ledge","lily","lighthouse","lupine","lynx","maple","meadow","meridian","meteor","mirage","mistral","monsoon","moon","moss","mountain","nebula","oak","oasis","ocean","orchid","osprey","otter","panda","panther","parrot","pebble","phoenix","pine","pinion","pixel","planet","plume","pond","poppy","prairie","puffin","puma","quartz","quasar","quill","rapids","raven","reef","ridge","river","robin","rune","sage","satellite","savanna","sequoia","shadow","signal","silo","sky","sloth","snow","sparrow","spire","star","stream","summit","swan","tempest","thicket","thistle","thunder","tide","tiger","totem","tower","tundra","twilight","twister","valley","vortex","walnut","wave","whale","whisper","wildflower","willow","wolf","wren","zenith","zephyr"],Ct=Re=>Re[Math.floor(Math.random()*Re.length)];function Tt(){return`${Ct(Jo)}-${Ct(Ko)}`}const Ot=`import json +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeEditor-Cyik7IS9.js","assets/index-BOWx3BJu.js","assets/index-fIeDYqWy.js","assets/index-De6hiwes.css","assets/CodeEditor-tn0RQdqM.css"])))=>i.map(i=>d[i]); +import{c as He,D as co,C as mo,E as ge,o as po,G as vt,a as l,b as o,t as p,d,f,e as _,v as O,g,k as u,Z as fo,$ as vo,h,_ as M,n as le,F as S,p as C,s as oe,a0 as go,a1 as Oe,Y as T,r as v,q as E,a2 as ho,a3 as bo,a4 as yo,a5 as xo,a6 as _o,i as wo,a7 as ko,a8 as So,a9 as Co,j as i,H as To,w as Eo,aa as $e,ab as Oo,L as Ro,ac as jo,ad as No,ae as Do,af as Ao,ag as Po,z as he}from"./index-fIeDYqWy.js";import{_ as de}from"./Input-RIxOCNDe.js";import{_ as ne}from"./Modal-DRIalOH5.js";import{c as Io}from"./clipboard-CmSw2rR-.js";import{c as Mo}from"./aiPrompts-DGZ6L7ag.js";import{d as Vo}from"./rollbackDiff-Cvt2Ss82.js";import{F as gt,S as Ue,P as ht}from"./settings-2-DcdHMrV8.js";import{C as be}from"./chevron-down-BcMN1rmG.js";import{V as bt}from"./variable-C2-uCEoV.js";import{K as yt}from"./key-round-BR2mpVu3.js";import{B as xt}from"./book-open-HLcwtuYW.js";import{C as Lo}from"./check-Cwg1V2MO.js";import{C as $o}from"./copy-DJiur09W.js";import{P as _t}from"./play-CmOm4UFE.js";import{S as Uo}from"./sparkles-B00DiY2I.js";import{C as qe,G as qo}from"./git-compare-5RUagJlb.js";import{T as Be}from"./trash-2-B2Wniuw-.js";import{G as wt}from"./globe-DtEgS3Yf.js";import{L as Bo}from"./lock-D649KWfg.js";import{S as zo}from"./shield-check-BHGT5Xmy.js";import{R as Fo}from"./rotate-ccw-BYpihd4d.js";import{T as Ho}from"./terminal-DWMuaXnV.js";const Go=He("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);const kt=He("layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);const St=He("shuffle",[["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22",key:"1ailkh"}],["path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2",key:"km57vx"}],["path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45",key:"os18l9"}]]),Jo=["amber","arctic","aurora","bold","brave","breezy","bright","brisk","calm","celestial","cobalt","cosmic","crimson","crisp","crystal","dapper","dazzling","deep","eager","ember","fearless","feisty","fierce","flaming","fluent","fluorescent","frosty","gentle","glacial","golden","graceful","happy","hazy","icy","indigo","jade","jolly","jovial","keen","kindred","lavender","lively","lucent","lunar","magenta","magnetic","merry","midnight","mighty","mellow","mossy","mystic","neon","nimble","noble","obsidian","opal","pearl","peppy","pixel","plucky","plush","polar","prime","quartz","quick","quiet","radiant","rapid","rare","roaming","rosy","royal","rugged","runic","rustic","sapphire","scarlet","sharp","silent","silken","silver","sleek","smooth","snowy","snug","solar","sonic","spry","starlit","stellar","sturdy","sublime","sunny","svelte","swift","tame","tender","thunder","tidal","topaz","tropic","turquoise","twilight","urban","velvet","verdant","vibrant","violet","vivid","warm","whisper","wild","wise","witty","woven","zesty","zen"],Ko=["albatross","amber","antler","apricot","archer","arrow","atlas","aurora","badger","bayou","beacon","bison","blossom","bramble","breeze","cactus","canyon","caravan","cedar","cliff","comet","compass","coral","cosmos","cypress","dawn","delta","dolphin","drift","dune","eagle","ember","fable","falcon","fern","fjord","flame","flint","forest","galaxy","garnet","geyser","glacier","glade","glint","gorge","gull","harbor","haven","horizon","iceberg","iris","jaguar","jetty","jungle","kelp","kestrel","kettle","kraken","lagoon","lantern","lark","ledge","lily","lighthouse","lupine","lynx","maple","meadow","meridian","meteor","mirage","mistral","monsoon","moon","moss","mountain","nebula","oak","oasis","ocean","orchid","osprey","otter","panda","panther","parrot","pebble","phoenix","pine","pinion","pixel","planet","plume","pond","poppy","prairie","puffin","puma","quartz","quasar","quill","rapids","raven","reef","ridge","river","robin","rune","sage","satellite","savanna","sequoia","shadow","signal","silo","sky","sloth","snow","sparrow","spire","star","stream","summit","swan","tempest","thicket","thistle","thunder","tide","tiger","totem","tower","tundra","twilight","twister","valley","vortex","walnut","wave","whale","whisper","wildflower","willow","wolf","wren","zenith","zephyr"],Ct=Re=>Re[Math.floor(Math.random()*Re.length)];function Tt(){return`${Ct(Jo)}-${Ct(Ko)}`}const Ot=`import json def handler(event): @@ -1274,7 +1274,7 @@ exports.handler = async (event) => { return { statusCode: 200, body: JSON.stringify({ hits, stats }) } } -`,_s=[{id:"node-http-hello",category:"Starter",label:"HTTP Hello",description:"Minimal POST /. Echoes a name from the JSON body.",code:Rt,deps:""},{id:"node-discord-webhook",category:"Webhooks",label:"Discord webhook",description:"Ed25519 verify + slash command response.",code:ns,deps:as},{id:"node-jwt-validator",category:"Auth",label:"JWT validator",description:"Verify HS256 token from Authorization header.",code:is,deps:""},{id:"node-oauth-callback",category:"Auth",label:"OAuth callback",description:"Exchange authorization_code for an access token.",code:ls,deps:""},{id:"node-md-to-html",category:"Utility",label:"Markdown → HTML",description:"Render markdown via marked; safe inline HTML.",code:ds,deps:us},{id:"node-rest-proxy",category:"Utility",label:"REST proxy",description:"Forward to upstream + inject Authorization header.",code:cs,deps:""},{id:"node-email-digest",category:"Scheduled",label:"Email digest",cron:!0,description:"Send a daily summary via SMTP (nodemailer).",code:ms,deps:ps},{id:"node-url-shortener",category:"Utility",label:"URL shortener",description:"POST creates a slug, GET redirects. Uses Orva KV.",code:fs,deps:""},{id:"node-counter-cas",category:"Showcase",label:"v0.6 SDK counter (kv.incr + kv.cas)",description:"Atomic counter and a CAS-retry loop for richer state. Demonstrates v0.6 race-safe primitives and structured logging end-to-end.",code:xs,deps:""},{id:"ts-hello",category:"Starter",label:"TypeScript hello",description:"Typed handler compiled at deploy time via tsc. Outputs to dist/handler.js.",code:vs,deps:gs,extras:{"tsconfig.json":hs},entrypoint:"handler.ts"}],ze={python:ys,node:_s},Fe={python:Ot,node:Rt},Et=["Starter","Webhooks","Auth","Utility","Scheduled","Showcase"],ws={class:"flex flex-col h-full"},ks={class:"sr-only"},Ss={class:"flex flex-col sm:flex-row sm:flex-wrap sm:items-center gap-2 pb-3 border-b border-border"},Cs={class:"flex items-center gap-2 sm:mr-auto min-w-0 w-full sm:w-auto"},Ts=["disabled"],Es={class:"text-[11px] text-foreground-muted font-medium tracking-tight shrink-0"},Os={class:"flex flex-wrap items-center gap-2 sm:contents"},Rs=["aria-expanded"],js={key:0,class:"absolute right-0 mt-1 z-30 min-w-[210px] bg-background border border-border rounded-md shadow-xl overflow-hidden",role:"menu"},Ns={key:0,class:"text-[10px] text-foreground-muted tabular-nums"},Ds={key:0,class:"text-[10px] text-foreground-muted tabular-nums"},As={class:"text-[10px] text-foreground-muted tabular-nums"},Ps=["aria-expanded"],Is={key:0,class:"absolute right-0 mt-1 z-30 min-w-[210px] bg-background border border-border rounded-md shadow-xl overflow-hidden",role:"menu"},Ms={key:0,class:"flex items-center gap-2 px-2 py-1.5 mt-2 border border-border bg-surface rounded text-xs"},Vs={class:"font-mono text-white truncate flex-1 min-w-0"},Ls={class:"flex-1 flex flex-col min-h-0 mt-3 bg-background border border-border rounded-lg overflow-hidden shadow-sm"},$s={class:"h-9 border-b border-border flex items-center justify-between px-4 bg-surface shrink-0"},Us={class:"text-xs font-mono text-foreground-muted flex items-center gap-2"},qs={class:"text-white"},Bs={key:0,class:"text-foreground-muted"},zs={class:"text-[10px] text-foreground-muted font-mono"},Fs={class:"mt-3 bg-background border border-border rounded-lg overflow-hidden shrink-0"},Hs={class:"h-9 border-b border-border flex items-center px-2 bg-surface"},Gs=["onClick"],Js={key:0,class:"ml-1 text-[10px] px-1.5 rounded bg-surface-hover text-foreground-muted"},Ks={class:"ml-auto flex items-center gap-1"},Ws=["disabled","title"],Ys={key:1,class:"run-spinner"},Xs=["title"],Qs={class:"h-48 overflow-y-auto bg-background"},Zs={key:0,class:"p-3 font-mono text-xs space-y-0.5"},er={key:0,class:"text-foreground-muted"},tr={key:1,class:"grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1.3fr)] h-full"},or={class:"flex flex-col min-h-0 border-b md:border-b-0 md:border-r border-border"},sr={class:"h-7 px-2 flex items-center gap-1.5 bg-surface/60 border-b border-border shrink-0"},rr=["disabled"],nr=["value"],ar=["disabled"],ir={class:"relative shrink-0"},lr=["disabled","title"],dr={key:0,class:"text-[10px] text-foreground-muted"},ur={key:0,class:"px-3 py-3 text-[11px] text-foreground-muted italic"},cr={key:1,class:"max-h-56 overflow-y-auto"},mr=["onClick"],pr={class:"font-mono text-[10px] text-foreground-muted shrink-0"},fr={class:"truncate flex-1 text-foreground"},vr=["title","aria-label","onClick"],gr={class:"border-t border-border px-2 py-1.5 bg-surface/50"},hr=["disabled"],br={class:"border-b border-border shrink-0"},yr={key:0,class:"ml-1 text-foreground-muted/80 normal-case tracking-normal"},xr={key:0,class:"px-2 py-2 space-y-1"},_r=["onUpdate:modelValue","disabled"],wr=["onUpdate:modelValue","disabled"],kr=["onClick"],Sr=["disabled"],Cr={class:"h-6 px-3 flex items-center justify-between bg-surface/30 border-b border-border shrink-0"},Tr={key:0,class:"text-[10px] text-amber-400/80"},Er={key:1,class:"text-[10px] text-foreground-muted/70 font-mono"},Or=["disabled"],Rr={class:"flex flex-col min-h-0"},jr={class:"h-7 px-3 flex items-center justify-between bg-surface/60 border-b border-border shrink-0"},Nr={class:"flex items-center gap-2"},Dr=["disabled"],Ar={key:1,class:"text-[10px] text-foreground-muted/80 font-mono"},Pr={class:"flex-1 min-h-0 overflow-y-auto"},Ir={key:1,class:"px-3 py-3 text-xs text-foreground-muted italic"},Mr={key:2,class:"border-t border-border"},Vr={class:"h-6 px-3 flex items-center text-[10px] uppercase tracking-[0.14em] text-foreground-muted/80 bg-surface/30"},Lr={class:"px-3 py-2 font-mono text-xs space-y-0.5"},$r={class:"space-y-4"},Ur={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5 flex items-center justify-between"},qr={key:0,class:"text-[10px] normal-case tracking-normal text-success/80"},Br={class:"grid grid-cols-2 gap-2"},zr=["onClick"],Fr=["label"],Hr=["value"],Gr={key:0,class:"text-[11px] text-foreground-muted mt-1.5"},Jr={class:"grid grid-cols-2 gap-3"},Kr={class:"border-t border-border pt-4 space-y-2"},Wr={class:"grid grid-cols-2 gap-3"},Yr=["disabled"],Xr={class:"border-t border-border pt-4"},Qr={class:"flex items-start gap-3 cursor-pointer select-none"},Zr={class:"min-w-0"},en={class:"text-sm font-medium text-white flex items-center gap-2"},tn={class:"border-t border-border pt-4 space-y-2"},on={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide flex items-center gap-2"},sn={class:"border-t border-border pt-4 space-y-2"},rn={class:"border-t border-border pt-4 space-y-3"},nn={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide flex items-center gap-2"},an={key:0,class:"text-[10px] normal-case tracking-normal text-foreground-muted"},ln={key:0,class:"text-[11px] text-foreground-muted leading-snug"},dn={key:1,class:"text-[11px] text-foreground-muted leading-snug"},un={class:"font-mono"},cn={key:2,class:"space-y-1.5"},mn={class:"flex-1 min-w-0 font-mono text-xs text-foreground truncate"},pn={key:0,class:"text-[10px] font-mono text-foreground-muted"},fn=["onClick"],vn={key:3,class:"space-y-2 pt-1"},gn={class:"flex items-center gap-2"},hn={key:0,class:"text-[11px] text-amber-400 leading-snug"},bn={class:"font-mono"},yn={class:"font-mono"},xn={key:1,class:"text-[11px] text-red-400 leading-snug"},_n={class:"space-y-2"},wn=["onUpdate:modelValue"],kn=["onUpdate:modelValue"],Sn=["onClick"],Cn={class:"space-y-2"},Tn={class:"text-[10px] text-foreground-muted font-mono"},En={class:"space-y-3"},On={key:0,class:"text-xs text-foreground-muted"},Rn={key:0},jn={class:"text-foreground-muted font-mono"},Nn=["onClick"],Dn={class:"flex items-center gap-2 min-w-0"},An={class:"text-foreground-muted font-mono"},Pn=["onClick"],In={class:"border-t border-border pt-3 space-y-2"},Mn={class:"space-y-2"},Vn={class:"flex items-center gap-2 min-w-0"},Ln={class:"font-mono text-foreground-muted shrink-0"},$n={key:0,class:"px-1.5 py-0.5 rounded text-[10px] bg-success/15 text-success border border-success/30 shrink-0"},Un=["title"],qn={class:"text-foreground-muted shrink-0"},Bn={key:0,class:"shrink-0 flex items-center gap-2"},zn=["disabled","onClick"],Fn={class:"space-y-3 text-xs text-foreground-muted"},Hn={class:"bg-surface border border-border rounded p-3 font-mono text-[12px] text-white overflow-x-auto whitespace-pre"},Gn={class:"space-y-4"},Jn={class:"relative"},Kn={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5 flex items-center justify-between"},Wn={key:0,class:"text-[10px] normal-case tracking-normal text-success/80"},Yn={class:"grid grid-cols-2 gap-2"},Xn=["onClick"],Qn={class:"grid grid-cols-2 gap-3"},Zn={__name:"Editor",setup(Re){const jt=bo({loader:()=>So(()=>import("./CodeEditor-1BBBEH1J.js"),__vite__mapDeps([0,1,2,3,4])),loadingComponent:{render(){return he("div",{class:"flex-1 min-h-0 w-full bg-background flex items-start","aria-busy":"true","aria-label":"Loading code editor"},[he("div",{class:"p-4 space-y-2 w-full font-mono text-xs text-foreground-muted/40"},[he("div",{class:"h-3 w-1/3 bg-surface-hover rounded animate-pulse"}),he("div",{class:"h-3 w-2/3 bg-surface-hover rounded animate-pulse"}),he("div",{class:"h-3 w-1/2 bg-surface-hover rounded animate-pulse"})])])}},delay:0}),U=Co(),Ge=wo(),w=mo(),b=v({settings:!1,envVars:!1,deps:!1,secrets:!1,versions:!1,docs:!1,firstDeploy:!1}),Je=v(null),j=v({config:!1,bindings:!1}),Ke=v(null),We=v(null),ue=()=>{j.value.config=!1,j.value.bindings=!1},Ye=s=>{const e=!j.value[s];ue(),j.value[s]=e},ae=s=>{ue(),b.value[s]=!0},Xe=s=>{ue(),Ge.push(s)},Qe=s=>{if(!j.value.config&&!j.value.bindings)return;const e=Ke.value?.contains(s.target),a=We.value?.contains(s.target);!e&&!a&&ue()},Ze=s=>{s.key==="Escape"&&(j.value.config||j.value.bindings)&&ue()},q=v(!0),B=v("build"),Nt=E(()=>[{id:"build",label:"Build",icon:Ho,badge:x.value.length||null},{id:"test",label:"Test",icon:_t,badge:re.value.length||null}]),Dt=s=>s?s==="node"?"Node.js 24":s==="python"?"Python 3.14":s:"",et=E(()=>F.value.filter(s=>s.key.trim()).length),k=v(""),r=v({name:"",description:"",runtime:"python",memory_mb:64,cpus:.5,network_mode:"none",max_concurrency:0,concurrency_policy:"queue",auth_mode:"none",rate_limit_per_min:0}),m=v(""),V=v('{"name": "World"}'),z=v("POST"),J=v("/"),D=v([]),K=v(!1),At=["GET","POST","PUT","PATCH","DELETE"],W=v([]),se=v(!1),tt=E(()=>D.value.filter(s=>s.name&&s.name.trim()).length),Y=v(!1),ye=v(!1),ce=v(!1),A=v(null),y=v(null),xe=v(0),X=v(""),x=v([]),re=v([]),_e=v(!1),me=v(!1),we=v(!1),ke=E(()=>m.value?`${window.location.origin}/fn/${m.value}`:""),Pt=async()=>{if(!ke.value)return;await Io(ke.value)?(_e.value=!0,setTimeout(()=>{_e.value=!1},1500)):w.notify({title:"Copy failed",message:`Could not copy to clipboard. Select the URL manually: +`,_s=[{id:"node-http-hello",category:"Starter",label:"HTTP Hello",description:"Minimal POST /. Echoes a name from the JSON body.",code:Rt,deps:""},{id:"node-discord-webhook",category:"Webhooks",label:"Discord webhook",description:"Ed25519 verify + slash command response.",code:ns,deps:as},{id:"node-jwt-validator",category:"Auth",label:"JWT validator",description:"Verify HS256 token from Authorization header.",code:is,deps:""},{id:"node-oauth-callback",category:"Auth",label:"OAuth callback",description:"Exchange authorization_code for an access token.",code:ls,deps:""},{id:"node-md-to-html",category:"Utility",label:"Markdown → HTML",description:"Render markdown via marked; safe inline HTML.",code:ds,deps:us},{id:"node-rest-proxy",category:"Utility",label:"REST proxy",description:"Forward to upstream + inject Authorization header.",code:cs,deps:""},{id:"node-email-digest",category:"Scheduled",label:"Email digest",cron:!0,description:"Send a daily summary via SMTP (nodemailer).",code:ms,deps:ps},{id:"node-url-shortener",category:"Utility",label:"URL shortener",description:"POST creates a slug, GET redirects. Uses Orva KV.",code:fs,deps:""},{id:"node-counter-cas",category:"Showcase",label:"v0.6 SDK counter (kv.incr + kv.cas)",description:"Atomic counter and a CAS-retry loop for richer state. Demonstrates v0.6 race-safe primitives and structured logging end-to-end.",code:xs,deps:""},{id:"ts-hello",category:"Starter",label:"TypeScript hello",description:"Typed handler compiled at deploy time via tsc. Outputs to dist/handler.js.",code:vs,deps:gs,extras:{"tsconfig.json":hs},entrypoint:"handler.ts"}],ze={python:ys,node:_s},Fe={python:Ot,node:Rt},Et=["Starter","Webhooks","Auth","Utility","Scheduled","Showcase"],ws={class:"flex flex-col h-full"},ks={class:"sr-only"},Ss={class:"flex flex-col sm:flex-row sm:flex-wrap sm:items-center gap-2 pb-3 border-b border-border"},Cs={class:"flex items-center gap-2 sm:mr-auto min-w-0 w-full sm:w-auto"},Ts=["disabled"],Es={class:"text-[11px] text-foreground-muted font-medium tracking-tight shrink-0"},Os={class:"flex flex-wrap items-center gap-2 sm:contents"},Rs=["aria-expanded"],js={key:0,class:"absolute right-0 mt-1 z-30 min-w-[210px] bg-background border border-border rounded-md shadow-xl overflow-hidden",role:"menu"},Ns={key:0,class:"text-[10px] text-foreground-muted tabular-nums"},Ds={key:0,class:"text-[10px] text-foreground-muted tabular-nums"},As={class:"text-[10px] text-foreground-muted tabular-nums"},Ps=["aria-expanded"],Is={key:0,class:"absolute right-0 mt-1 z-30 min-w-[210px] bg-background border border-border rounded-md shadow-xl overflow-hidden",role:"menu"},Ms={key:0,class:"flex items-center gap-2 px-2 py-1.5 mt-2 border border-border bg-surface rounded text-xs"},Vs={class:"font-mono text-white truncate flex-1 min-w-0"},Ls={class:"flex-1 flex flex-col min-h-0 mt-3 bg-background border border-border rounded-lg overflow-hidden shadow-sm"},$s={class:"h-9 border-b border-border flex items-center justify-between px-4 bg-surface shrink-0"},Us={class:"text-xs font-mono text-foreground-muted flex items-center gap-2"},qs={class:"text-white"},Bs={key:0,class:"text-foreground-muted"},zs={class:"text-[10px] text-foreground-muted font-mono"},Fs={class:"mt-3 bg-background border border-border rounded-lg overflow-hidden shrink-0"},Hs={class:"h-9 border-b border-border flex items-center px-2 bg-surface"},Gs=["onClick"],Js={key:0,class:"ml-1 text-[10px] px-1.5 rounded bg-surface-hover text-foreground-muted"},Ks={class:"ml-auto flex items-center gap-1"},Ws=["disabled","title"],Ys={key:1,class:"run-spinner"},Xs=["title"],Qs={class:"h-48 overflow-y-auto bg-background"},Zs={key:0,class:"p-3 font-mono text-xs space-y-0.5"},er={key:0,class:"text-foreground-muted"},tr={key:1,class:"grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1.3fr)] h-full"},or={class:"flex flex-col min-h-0 border-b md:border-b-0 md:border-r border-border"},sr={class:"h-7 px-2 flex items-center gap-1.5 bg-surface/60 border-b border-border shrink-0"},rr=["disabled"],nr=["value"],ar=["disabled"],ir={class:"relative shrink-0"},lr=["disabled","title"],dr={key:0,class:"text-[10px] text-foreground-muted"},ur={key:0,class:"px-3 py-3 text-[11px] text-foreground-muted italic"},cr={key:1,class:"max-h-56 overflow-y-auto"},mr=["onClick"],pr={class:"font-mono text-[10px] text-foreground-muted shrink-0"},fr={class:"truncate flex-1 text-foreground"},vr=["title","aria-label","onClick"],gr={class:"border-t border-border px-2 py-1.5 bg-surface/50"},hr=["disabled"],br={class:"border-b border-border shrink-0"},yr={key:0,class:"ml-1 text-foreground-muted/80 normal-case tracking-normal"},xr={key:0,class:"px-2 py-2 space-y-1"},_r=["onUpdate:modelValue","disabled"],wr=["onUpdate:modelValue","disabled"],kr=["onClick"],Sr=["disabled"],Cr={class:"h-6 px-3 flex items-center justify-between bg-surface/30 border-b border-border shrink-0"},Tr={key:0,class:"text-[10px] text-amber-400/80"},Er={key:1,class:"text-[10px] text-foreground-muted/70 font-mono"},Or=["disabled"],Rr={class:"flex flex-col min-h-0"},jr={class:"h-7 px-3 flex items-center justify-between bg-surface/60 border-b border-border shrink-0"},Nr={class:"flex items-center gap-2"},Dr=["disabled"],Ar={key:1,class:"text-[10px] text-foreground-muted/80 font-mono"},Pr={class:"flex-1 min-h-0 overflow-y-auto"},Ir={key:1,class:"px-3 py-3 text-xs text-foreground-muted italic"},Mr={key:2,class:"border-t border-border"},Vr={class:"h-6 px-3 flex items-center text-[10px] uppercase tracking-[0.14em] text-foreground-muted/80 bg-surface/30"},Lr={class:"px-3 py-2 font-mono text-xs space-y-0.5"},$r={class:"space-y-4"},Ur={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5 flex items-center justify-between"},qr={key:0,class:"text-[10px] normal-case tracking-normal text-success/80"},Br={class:"grid grid-cols-2 gap-2"},zr=["onClick"],Fr=["label"],Hr=["value"],Gr={key:0,class:"text-[11px] text-foreground-muted mt-1.5"},Jr={class:"grid grid-cols-2 gap-3"},Kr={class:"border-t border-border pt-4 space-y-2"},Wr={class:"grid grid-cols-2 gap-3"},Yr=["disabled"],Xr={class:"border-t border-border pt-4"},Qr={class:"flex items-start gap-3 cursor-pointer select-none"},Zr={class:"min-w-0"},en={class:"text-sm font-medium text-white flex items-center gap-2"},tn={class:"border-t border-border pt-4 space-y-2"},on={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide flex items-center gap-2"},sn={class:"border-t border-border pt-4 space-y-2"},rn={class:"border-t border-border pt-4 space-y-3"},nn={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide flex items-center gap-2"},an={key:0,class:"text-[10px] normal-case tracking-normal text-foreground-muted"},ln={key:0,class:"text-[11px] text-foreground-muted leading-snug"},dn={key:1,class:"text-[11px] text-foreground-muted leading-snug"},un={class:"font-mono"},cn={key:2,class:"space-y-1.5"},mn={class:"flex-1 min-w-0 font-mono text-xs text-foreground truncate"},pn={key:0,class:"text-[10px] font-mono text-foreground-muted"},fn=["onClick"],vn={key:3,class:"space-y-2 pt-1"},gn={class:"flex items-center gap-2"},hn={key:0,class:"text-[11px] text-amber-400 leading-snug"},bn={class:"font-mono"},yn={class:"font-mono"},xn={key:1,class:"text-[11px] text-red-400 leading-snug"},_n={class:"space-y-2"},wn=["onUpdate:modelValue"],kn=["onUpdate:modelValue"],Sn=["onClick"],Cn={class:"space-y-2"},Tn={class:"text-[10px] text-foreground-muted font-mono"},En={class:"space-y-3"},On={key:0,class:"text-xs text-foreground-muted"},Rn={key:0},jn={class:"text-foreground-muted font-mono"},Nn=["onClick"],Dn={class:"flex items-center gap-2 min-w-0"},An={class:"text-foreground-muted font-mono"},Pn=["onClick"],In={class:"border-t border-border pt-3 space-y-2"},Mn={class:"space-y-2"},Vn={class:"flex items-center gap-2 min-w-0"},Ln={class:"font-mono text-foreground-muted shrink-0"},$n={key:0,class:"px-1.5 py-0.5 rounded text-[10px] bg-success/15 text-success border border-success/30 shrink-0"},Un=["title"],qn={class:"text-foreground-muted shrink-0"},Bn={key:0,class:"shrink-0 flex items-center gap-2"},zn=["disabled","onClick"],Fn={class:"space-y-3 text-xs text-foreground-muted"},Hn={class:"bg-surface border border-border rounded p-3 font-mono text-[12px] text-white overflow-x-auto whitespace-pre"},Gn={class:"space-y-4"},Jn={class:"relative"},Kn={class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5 flex items-center justify-between"},Wn={key:0,class:"text-[10px] normal-case tracking-normal text-success/80"},Yn={class:"grid grid-cols-2 gap-2"},Xn=["onClick"],Qn={class:"grid grid-cols-2 gap-3"},Zn={__name:"Editor",setup(Re){const jt=bo({loader:()=>So(()=>import("./CodeEditor-Cyik7IS9.js"),__vite__mapDeps([0,1,2,3,4])),loadingComponent:{render(){return he("div",{class:"flex-1 min-h-0 w-full bg-background flex items-start","aria-busy":"true","aria-label":"Loading code editor"},[he("div",{class:"p-4 space-y-2 w-full font-mono text-xs text-foreground-muted/40"},[he("div",{class:"h-3 w-1/3 bg-surface-hover rounded animate-pulse"}),he("div",{class:"h-3 w-2/3 bg-surface-hover rounded animate-pulse"}),he("div",{class:"h-3 w-1/2 bg-surface-hover rounded animate-pulse"})])])}},delay:0}),U=Co(),Ge=wo(),w=mo(),b=v({settings:!1,envVars:!1,deps:!1,secrets:!1,versions:!1,docs:!1,firstDeploy:!1}),Je=v(null),j=v({config:!1,bindings:!1}),Ke=v(null),We=v(null),ue=()=>{j.value.config=!1,j.value.bindings=!1},Ye=s=>{const e=!j.value[s];ue(),j.value[s]=e},ae=s=>{ue(),b.value[s]=!0},Xe=s=>{ue(),Ge.push(s)},Qe=s=>{if(!j.value.config&&!j.value.bindings)return;const e=Ke.value?.contains(s.target),a=We.value?.contains(s.target);!e&&!a&&ue()},Ze=s=>{s.key==="Escape"&&(j.value.config||j.value.bindings)&&ue()},q=v(!0),B=v("build"),Nt=E(()=>[{id:"build",label:"Build",icon:Ho,badge:x.value.length||null},{id:"test",label:"Test",icon:_t,badge:re.value.length||null}]),Dt=s=>s?s==="node"?"Node.js 24":s==="python"?"Python 3.14":s:"",et=E(()=>F.value.filter(s=>s.key.trim()).length),k=v(""),r=v({name:"",description:"",runtime:"python",memory_mb:64,cpus:.5,network_mode:"none",max_concurrency:0,concurrency_policy:"queue",auth_mode:"none",rate_limit_per_min:0}),m=v(""),V=v('{"name": "World"}'),z=v("POST"),J=v("/"),D=v([]),K=v(!1),At=["GET","POST","PUT","PATCH","DELETE"],W=v([]),se=v(!1),tt=E(()=>D.value.filter(s=>s.name&&s.name.trim()).length),Y=v(!1),ye=v(!1),ce=v(!1),A=v(null),y=v(null),xe=v(0),X=v(""),x=v([]),re=v([]),_e=v(!1),me=v(!1),we=v(!1),ke=E(()=>m.value?`${window.location.origin}/fn/${m.value}`:""),Pt=async()=>{if(!ke.value)return;await Io(ke.value)?(_e.value=!0,setTimeout(()=>{_e.value=!1},1500)):w.notify({title:"Copy failed",message:`Could not copy to clipboard. Select the URL manually: `+ke.value})},F=v([{key:"",value:""}]),Q=v(""),Z=v(""),ie=v([]),je=v([]),P=v({name:"",value:""}),Ne=v([]),De=v(!1),I=v(""),ee=v({path:"",methods:"*"}),L=v(null),ot=E(()=>m.value?Ne.value.filter(s=>s.function_id===m.value):[]),H=v([]),Ae=E(()=>je.value.length+H.value.length),R=E(()=>!!U.params.name),It=E(()=>R.value||ce.value),$=E(()=>It.value&&!Y.value),st=[{id:"python",label:"Python 3.14"},{id:"node",label:"Node.js 24"}],Se=s=>s==="python",rt=s=>s==="node",nt=E(()=>Se(r.value.runtime)?"handler.py":(rt(r.value.runtime),"handler.js")),Mt=E(()=>Se(r.value.runtime)?`def handler(event): return { diff --git a/backend/internal/server/ui_dist/assets/Firewall-BXu8MFSv.js b/backend/internal/server/ui_dist/assets/Firewall-pkdJLyXh.js similarity index 98% rename from backend/internal/server/ui_dist/assets/Firewall-BXu8MFSv.js rename to backend/internal/server/ui_dist/assets/Firewall-pkdJLyXh.js index 85e0ed4..5120db0 100644 --- a/backend/internal/server/ui_dist/assets/Firewall-BXu8MFSv.js +++ b/backend/internal/server/ui_dist/assets/Firewall-pkdJLyXh.js @@ -1 +1 @@ -import{c as N,C as Te,o as Ne,R as Ve,a as i,b as l,d as o,h,_ as w,s as E,n as V,H as ae,t as v,g as F,f as m,r as f,q as d,aD as le,z as u,Y as x,j as r,k as g,P as T,F as $,p as S,e as z,L as W,v as B,T as re}from"./index-BMkkwZ9q.js";import{_ as ne}from"./Input-i1hDoPmt.js";import{_ as ze}from"./Modal-jEhKmxZK.js";import{R as Be}from"./refresh-cw-C7sR7ShF.js";import{G as oe}from"./globe-CR2M7Azm.js";import{T as Me}from"./trash-2-BXf2uqQH.js";import{S as je}from"./shield-check-sW6QCkG0.js";const ie=N("asterisk",[["path",{d:"M12 6v12",key:"1vza4d"}],["path",{d:"M17.196 9 6.804 15",key:"1ah31z"}],["path",{d:"m6.804 9 10.392 6",key:"1b6pxd"}]]);const ue=N("earth",[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const de=N("hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);const He=N("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);const Le=N("shield-off",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]]),Oe={class:"space-y-8"},Ue={class:"space-y-3"},Ee={class:"flex items-start justify-between gap-4 flex-wrap"},Fe={class:"flex items-center gap-2"},We={class:"flex-1 min-w-0"},Ze={key:0,class:"text-foreground-muted hidden sm:inline shrink-0"},qe={class:"dns-card"},Ge={class:"dns-row"},Ke={class:"dns-current"},Ye={key:0,class:"dns-chips"},Je={class:"font-mono"},Qe=["onClick"],Xe={key:1,class:"dns-defaults"},et={class:"font-mono"},tt={class:"dns-form"},st={class:"dns-row"},at={class:"dns-row-label"},lt={class:"dns-row-meta"},rt={key:0,class:"dns-records"},nt={class:"font-mono text-white text-xs flex-1 truncate"},ot={class:"font-mono text-foreground text-xs flex-1 truncate"},it=["onClick"],ut={key:1,class:"text-xs text-foreground-muted italic px-1"},dt={class:"dns-form"},ct={class:"dns-savebar"},vt={class:"rule-filterbar"},ft=["onClick"],mt={class:"rule-filter-count"},ht={key:0,class:"empty-card"},pt={class:"text-sm text-white"},gt={class:"text-xs text-foreground-muted mt-1 max-w-sm"},yt={key:1,class:"rule-grid"},bt={class:"space-y-4"},kt={class:"grid grid-cols-3 gap-2"},wt=["onClick"],xt={class:"text-[10.5px] text-foreground-muted mt-1.5 leading-snug"},Tt={__name:"Firewall",setup(_t){const p=Te(),b=f([]),y=f({ipv4:[],ipv6:[],hostname_map:{},nftables_available:!0,last_error:""}),M=f(null),_=f(!1),j=f(!1),H=f(!1),c=f({rule_type:"cidr",value:"",label:""}),a=f({servers:[],search:"",records:[],defaults:[]}),P=f({servers:[],search:"",records:[]}),C=f(""),I=f(""),A=f(""),L=f(!1),ce=d(()=>{const e=JSON.stringify({s:a.value.servers||[],q:a.value.search||"",r:(a.value.records||[]).map(s=>`${s.host}=${s.ip}`).sort()}),t=JSON.stringify({s:P.value.servers||[],q:P.value.search||"",r:(P.value.records||[]).map(s=>`${s.host}=${s.ip}`).sort()});return e!==t}),ve=d(()=>{const e=[];return e.push(a.value.servers.length?`${a.value.servers.length} resolver${a.value.servers.length===1?"":"s"}`:`defaults (${(a.value.defaults||[]).join(", ")||"none"})`),a.value.records.length&&e.push(`${a.value.records.length} override${a.value.records.length===1?"":"s"}`),e.join(" · ")}),fe=async()=>{try{const e=await x.get("/firewall/dns");a.value={servers:e.data.servers||[],search:e.data.search||"",records:e.data.records||[],defaults:e.data.defaults||[]},P.value={servers:[...a.value.servers],search:a.value.search,records:a.value.records.map(t=>({...t}))}}catch(e){console.error("loadDNS failed",e)}},Z=()=>{const e=C.value.trim();if(!e)return;if(!(/^[0-9.]+$/.test(e)||e.includes(":"))){p.notify({title:"Invalid IP",message:`"${e}" doesn't look like an IPv4 or IPv6 address.`});return}if(a.value.servers.includes(e)){C.value="";return}a.value.servers=[...a.value.servers,e],C.value=""},me=e=>{a.value.servers=a.value.servers.filter((t,s)=>s!==e)},O=()=>{const e=I.value.trim(),t=A.value.trim();if(!e||!t)return;const s=/^[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?)*$/.test(e),n=/^[0-9.]+$/.test(t)||t.includes(":");if(!s){p.notify({title:"Invalid hostname",message:`"${e}" is not a valid hostname.`});return}if(!n){p.notify({title:"Invalid IP",message:`"${t}" is not a literal IPv4 or IPv6 address.`});return}if((a.value.records||[]).some(D=>D.host===e)){p.notify({title:"Duplicate host",message:`"${e}" already has an override.`});return}a.value.records=[...a.value.records||[],{host:e,ip:t}],I.value="",A.value=""},he=e=>{a.value.records=a.value.records.filter((t,s)=>s!==e)},pe=()=>{a.value.servers=[],a.value.search="",a.value.records=[]},ge=async()=>{L.value=!0;try{const e=await x.put("/firewall/dns",{servers:a.value.servers,search:a.value.search||"",records:a.value.records||[]});a.value={servers:e.data.servers||[],search:e.data.search||"",records:e.data.records||[],defaults:e.data.defaults||a.value.defaults},P.value={servers:[...a.value.servers],search:a.value.search,records:a.value.records.map(t=>({...t}))}}catch(e){p.notify({title:"Save failed",message:e.response?.data?.error?.message||e.message,danger:!0})}finally{L.value=!1}},q=d(()=>b.value.filter(e=>e.kind==="custom")),G={"169.254.0.0/16":{name:"Cloud metadata service",why:"Blocks the special address AWS, Azure, and GCP use to expose VM credentials and instance settings. Leaving this open is a common credential-leak path."},"fd00:ec2::254/128":{name:"Cloud metadata (IPv6)",why:"Same as above, but the IPv6 path GCP uses. Recommended on."},"10.0.0.0/8":{name:"Private network, 10.x",why:"Standard internal-network range. Turn on if your functions should not reach internal services on your LAN."},"172.16.0.0/12":{name:"Private network, 172.16.x",why:"Another internal-network range (often used by Docker default bridge). Turn on for stricter isolation."},"192.168.0.0/16":{name:"Private network, 192.168.x",why:"Common home/office network range. Turn on if functions should not reach your local LAN."},"100.64.0.0/10":{name:"CGNAT / Tailscale",why:"Used by Tailscale and large ISPs. Turn on to keep functions out of your tailnet."}},U=e=>e.kind==="custom"?e.label||e.value:G[e.value]?.name||e.label||e.value,ye=e=>e.kind==="custom"?"":G[e.value]?.why||"",k=f("on"),be=d(()=>[{id:"all",label:"All",count:b.value.length},{id:"on",label:"On",count:b.value.filter(e=>e.enabled).length},{id:"off",label:"Off",count:b.value.filter(e=>!e.enabled).length},{id:"yours",label:"Yours",count:q.value.length}]),K=d(()=>{const e={default:0,suggested:1,custom:2};return[...b.value.filter(s=>k.value==="on"?s.enabled:k.value==="off"?!s.enabled:k.value==="yours"?s.kind==="custom":!0)].sort((s,n)=>s.enabled!==n.enabled?s.enabled?-1:1:e[s.kind]!==e[n.kind]?e[s.kind]-e[n.kind]:U(s).localeCompare(U(n)))}),Y=d(()=>b.value.filter(e=>e.enabled).length),J=d(()=>b.value.filter(e=>!e.enabled).length),ke=d(()=>{if(!b.value.length)return"Nothing in the blocklist yet.";const e=Y.value,t=J.value;return`${e} block${e===1?"":"s"} active · ${t} available to turn on · ${q.value.length} you added`}),we=[{value:"cidr",label:"IP / Range",icon:de},{value:"hostname",label:"Hostname",icon:oe},{value:"wildcard",label:"Pattern",icon:ie}],xe=d(()=>{switch(c.value.rule_type){case"hostname":return"api.internal.corp";case"wildcard":return"*.corp.com";default:return"192.168.1.0/24"}}),_e=d(()=>{switch(c.value.rule_type){case"hostname":return"A specific website or service name. We resolve it to IPs and block those.";case"wildcard":return"Match an entire domain and its subdomains. Use *.example.com for everything under example.com.";default:return"A single IP (e.g. 1.2.3.4) or a CIDR range (e.g. 10.0.0.0/8) to block all addresses inside it."}}),Ce=d(()=>y.value.last_error?"border-danger-ring bg-danger-tint text-danger-fg":y.value.nftables_available?"border-success-ring bg-success-tint text-foreground-muted":"border-warning-ring bg-warning-tint text-warning-fg"),$e=d(()=>y.value.last_error?re:y.value.nftables_available?je:re),Se=d(()=>y.value.last_error?y.value.last_error:y.value.nftables_available?"Active. Rules apply to every function with outbound network enabled.":"nftables unavailable on this host. Packet-level enforcement is disabled. Sandbox-level isolation still works."),R=async()=>{const e=await x.get("/firewall/rules");b.value=e.data.rules||[],y.value=e.data.status||{ipv4:[],ipv6:[]}},Pe=async e=>{M.value=e.id;try{await x.put(`/firewall/rules/${e.id}`,{enabled:!e.enabled}),await R()}catch(t){p.notify({title:"Toggle failed",message:t.response?.data?.error?.message||t.message,danger:!0})}finally{M.value=null}},Ie=async e=>{if(await p.ask({title:"Delete custom rule?",message:`"${e.value}" will be removed from the blocklist.`,confirmLabel:"Delete",danger:!0}))try{await x.delete(`/firewall/rules/${e.id}`),await R()}catch(s){p.notify({title:"Delete failed",message:s.response?.data?.error?.message||s.message,danger:!0})}},Ae=async()=>{if(c.value.value.trim()){j.value=!0;try{await x.post("/firewall/rules",{rule_type:c.value.rule_type,value:c.value.value.trim(),label:c.value.label.trim()}),_.value=!1,c.value={rule_type:"cidr",value:"",label:""},await R()}catch(e){p.notify({title:"Failed to add rule",message:e.response?.data?.error?.message||e.message,danger:!0})}finally{j.value=!1}}},Re=async()=>{H.value=!0;try{const e=await x.post("/firewall/resolve");e.data.error&&p.notify({title:"Resolve had errors",message:e.data.error,danger:!0}),await R()}catch(e){p.notify({title:"Resolve failed",message:e.response?.data?.error?.message||e.message,danger:!0})}finally{H.value=!1}},Q=async()=>{await Promise.all([R(),fe()])};Ne(Q),Ve(Q);const X=le({name:"PanelSection",props:{title:String,subtitle:String},setup(e,{slots:t}){return()=>u("section",{class:"space-y-3"},[u("div",null,[u("h2",{class:"text-sm font-semibold text-white tracking-tight"},e.title),e.subtitle?u("p",{class:"text-xs text-foreground-muted mt-0.5"},e.subtitle):null]),u("div",null,t.default?.())])}}),ee={default:{label:"Recommended",cls:"kind-recommended"},suggested:{label:"Optional",cls:"kind-optional"},custom:{label:"Yours",cls:"kind-yours"}},De=le({name:"RuleCard",props:{rule:{type:Object,required:!0},status:{type:Object,required:!0},busy:{type:Boolean,default:!1},readonlyEdit:{type:Boolean,default:!1}},emits:["toggle","delete"],setup(e,{emit:t}){const s=d(()=>{switch(e.rule.rule_type){case"hostname":return oe;case"wildcard":return ie;default:return de}}),n=d(()=>e.rule.rule_type==="cidr"?[e.rule.value]:e.status.hostname_map?.[e.rule.value]||[]),D=d(()=>U(e.rule)),te=d(()=>ye(e.rule)),se=d(()=>ee[e.rule.kind]||ee.custom);return()=>u("div",{class:["rule-card",e.rule.enabled?"is-on":"is-off"]},[u("div",{class:"rule-card-row"},[u("div",{class:"rule-card-titlewrap"},[u("div",{class:"rule-card-title"},D.value),u("span",{class:["rule-kind-pill",se.value.cls]},se.value.label)]),u("button",{class:["rule-toggle",e.rule.enabled?"on":"off",e.busy?"busy":"","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background"],disabled:e.busy,title:e.rule.enabled?"Click to allow":"Click to block",onClick:()=>t("toggle")},[u("span",{class:"rule-toggle-knob"})])]),te.value?u("p",{class:"rule-card-why"},te.value):null,u("div",{class:"rule-card-foot"},[u(s.value,{class:"rule-card-type-icon"}),u("code",{class:"rule-card-value"},e.rule.value),n.value.length&&e.rule.rule_type!=="cidr"?u("span",{class:"rule-card-resolved"},`→ ${n.value.slice(0,2).join(", ")}${n.value.length>2?` +${n.value.length-2}`:""}`):null]),e.readonlyEdit?null:u("button",{class:"rule-card-delete",title:"Remove this block",onClick:()=>t("delete")},[u(Me,{class:"w-3.5 h-3.5"})])])}});return(e,t)=>(r(),i("div",Oe,[l("header",Ue,[l("div",Ee,[t[12]||(t[12]=l("div",{class:"max-w-2xl"},[l("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Firewall & DNS "),l("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Decide what your functions are allowed to talk to. Each switch below blocks one destination; turn one on and your functions can no longer reach it; turn it off and they can. DNS settings below control how your functions look hostnames up. ")],-1)),l("div",Fe,[o(w,{variant:"secondary",size:"sm",loading:H.value,onClick:Re},{default:h(()=>[o(m(Be),{class:"w-4 h-4"}),t[10]||(t[10]=g(" Apply now ",-1))]),_:1},8,["loading"]),o(w,{size:"sm",onClick:t[0]||(t[0]=s=>_.value=!0)},{default:h(()=>[o(m(T),{class:"w-4 h-4"}),t[11]||(t[11]=g(" Block something ",-1))]),_:1})])]),l("div",{class:E(["flex items-center gap-3 text-xs px-3 py-2 rounded-md border",Ce.value])},[(r(),V(ae($e.value),{class:"w-4 h-4 shrink-0"})),l("span",We,v(Se.value),1),y.value.nftables_available?(r(),i("span",Ze,v(Y.value)+" active · "+v(J.value)+" off ",1)):F("",!0)],2)]),o(m(X),{title:"DNS",subtitle:ve.value},{default:h(()=>[l("div",qe,[l("div",Ge,[t[15]||(t[15]=l("div",{class:"dns-row-label"}," Upstream resolvers ",-1)),l("div",Ke,[a.value.servers.length?(r(),i("div",Ye,[(r(!0),i($,null,S(a.value.servers,(s,n)=>(r(),i("span",{key:s+n,class:"dns-chip"},[o(m(ue),{class:"w-3 h-3 opacity-60"}),l("span",Je,v(s),1),l("button",{class:"dns-chip-x",title:"Remove",onClick:D=>me(n)}," × ",8,Qe)]))),128))])):(r(),i("div",Xe,[t[13]||(t[13]=l("span",{class:"text-foreground-muted text-xs"},"Defaults:",-1)),(r(!0),i($,null,S(a.value.defaults,s=>(r(),i("span",{key:s,class:"dns-chip muted"},[o(m(ue),{class:"w-3 h-3 opacity-60"}),l("span",et,v(s),1)]))),128))]))]),l("div",tt,[z(l("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>C.value=s),placeholder:"1.1.1.1",class:"dns-input",onKeydown:W(Z,["enter"])},null,544),[[B,C.value]]),o(w,{variant:"secondary",size:"sm",disabled:!C.value.trim(),onClick:Z},{default:h(()=>[o(m(T),{class:"w-3.5 h-3.5"}),t[14]||(t[14]=g(" Add resolver ",-1))]),_:1},8,["disabled"]),z(l("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>a.value.search=s),placeholder:"search domain",class:"dns-input narrow"},null,512),[[B,a.value.search]])])]),l("div",st,[l("div",at,[t[16]||(t[16]=g(" Host overrides ",-1)),l("span",lt,v(a.value.records.length)+" record"+v(a.value.records.length===1?"":"s"),1)]),a.value.records.length?(r(),i("div",rt,[(r(!0),i($,null,S(a.value.records,(s,n)=>(r(),i("div",{key:s.host+n,class:"dns-record"},[l("span",nt,v(s.host),1),t[17]||(t[17]=l("span",{class:"text-foreground-muted text-xs"},"→",-1)),l("span",ot,v(s.ip),1),l("button",{class:"dns-chip-x",title:"Remove",onClick:D=>he(n)}," × ",8,it)]))),128))])):(r(),i("div",ut," No overrides. Anything resolves through the upstream resolvers above. ")),l("div",dt,[z(l("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>I.value=s),placeholder:"api.internal",class:"dns-input host",onKeydown:W(O,["enter"])},null,544),[[B,I.value]]),t[19]||(t[19]=l("span",{class:"text-foreground-muted text-xs"},"→",-1)),z(l("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>A.value=s),placeholder:"10.0.5.10",class:"dns-input",onKeydown:W(O,["enter"])},null,544),[[B,A.value]]),o(w,{variant:"secondary",size:"sm",disabled:!(I.value.trim()&&A.value.trim()),onClick:O},{default:h(()=>[o(m(T),{class:"w-3.5 h-3.5"}),t[18]||(t[18]=g(" Add record ",-1))]),_:1},8,["disabled"])])]),l("div",ct,[t[21]||(t[21]=l("span",{class:"dns-hint"}," Records win over upstream DNS. Anything in the override list bypasses resolution entirely. Existing warm workers keep their previous files; toggle the function's network off and on, or wait for idle TTL, to apply. ",-1)),a.value.servers.length||a.value.search||a.value.records.length?(r(),i("button",{key:0,class:"text-[11px] text-foreground-muted hover:text-white px-2 py-1 transition-colors",onClick:pe}," Reset ")):F("",!0),o(w,{size:"sm",loading:L.value,disabled:!ce.value,onClick:ge},{default:h(()=>[...t[20]||(t[20]=[g(" Save ",-1)])]),_:1},8,["loading","disabled"])])])]),_:1},8,["subtitle"]),o(m(X),{title:"Blocklist",subtitle:ke.value},{default:h(()=>[l("div",vt,[(r(!0),i($,null,S(be.value,s=>(r(),i("button",{key:s.id,class:E(["rule-filter",{active:k.value===s.id}]),onClick:n=>k.value=s.id},[g(v(s.label)+" ",1),l("span",mt,v(s.count),1)],10,ft))),128))]),K.value.length?(r(),i("div",yt,[(r(!0),i($,null,S(K.value,s=>(r(),V(m(De),{key:s.id,rule:s,status:y.value,busy:M.value===s.id,"readonly-edit":s.kind!=="custom",onToggle:n=>Pe(s),onDelete:n=>Ie(s)},null,8,["rule","status","busy","readonly-edit","onToggle","onDelete"]))),128))])):(r(),i("div",ht,[o(m(Le),{class:"w-5 h-5 mb-2 text-foreground-muted/60"}),l("p",pt,v(k.value==="yours"?"No custom blocks yet":"Nothing matches this filter"),1),l("p",gt,v(k.value==="yours"?"Block a specific IP, CIDR, or hostname to keep your functions out of internal infrastructure they shouldn't reach.":"Try a different filter, or add a custom block above."),1),k.value==="yours"?(r(),V(w,{key:0,class:"mt-4",size:"sm",variant:"secondary",onClick:t[5]||(t[5]=s=>_.value=!0)},{default:h(()=>[o(m(T),{class:"w-3.5 h-3.5"}),t[22]||(t[22]=g(" Block something ",-1))]),_:1})):F("",!0)]))]),_:1},8,["subtitle"]),o(ze,{modelValue:_.value,"onUpdate:modelValue":t[9]||(t[9]=s=>_.value=s),title:"Block something",icon:m(He),size:"md"},{footer:h(()=>[o(w,{variant:"secondary",onClick:t[8]||(t[8]=s=>_.value=!1)},{default:h(()=>[...t[26]||(t[26]=[g(" Cancel ",-1)])]),_:1}),o(w,{loading:j.value,disabled:!c.value.value.trim(),onClick:Ae},{default:h(()=>[o(m(T),{class:"w-4 h-4"}),t[27]||(t[27]=g(" Block it ",-1))]),_:1},8,["loading","disabled"])]),default:h(()=>[l("div",bt,[t[24]||(t[24]=l("p",{class:"text-xs text-foreground-muted leading-snug"}," Pick what you're blocking: a single IP, a network range, or a hostname. Once added, your functions can no longer reach it. ",-1)),l("div",null,[t[23]||(t[23]=l("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"}," What is it? ",-1)),l("div",kt,[(r(),i($,null,S(we,s=>l("button",{key:s.value,class:E(["px-2 py-2 rounded border text-xs font-medium transition-colors flex flex-col items-center gap-1",c.value.rule_type===s.value?"bg-white text-black border-white":"bg-surface-hover text-foreground-muted border-border hover:border-foreground-muted"]),onClick:n=>c.value.rule_type=s.value},[(r(),V(ae(s.icon),{class:"w-3.5 h-3.5"})),g(" "+v(s.label),1)],10,wt)),64))]),l("p",xt,v(_e.value),1)]),o(ne,{modelValue:c.value.value,"onUpdate:modelValue":t[6]||(t[6]=s=>c.value.value=s),label:c.value.rule_type==="wildcard"?"Pattern":c.value.rule_type==="hostname"?"Hostname":"IP or network",placeholder:xe.value},null,8,["modelValue","label","placeholder"]),o(ne,{modelValue:c.value.label,"onUpdate:modelValue":t[7]||(t[7]=s=>c.value.label=s),label:"Why? (optional)",placeholder:"e.g. our staging Postgres"},null,8,["modelValue"]),t[25]||(t[25]=l("p",{class:"text-[11px] text-foreground-muted leading-snug"}," Takes effect within seconds. Warm functions are recycled so the new block applies on the very next call. ",-1))])]),_:1},8,["modelValue","icon"])]))}};export{Tt as default}; +import{c as N,C as Te,o as Ne,R as Ve,a as i,b as l,d as o,h,_ as w,s as E,n as V,H as ae,t as v,g as F,f as m,r as f,q as d,aD as le,z as u,Y as x,j as r,k as g,P as T,F as $,p as S,e as z,L as W,v as B,T as re}from"./index-fIeDYqWy.js";import{_ as ne}from"./Input-RIxOCNDe.js";import{_ as ze}from"./Modal-DRIalOH5.js";import{R as Be}from"./refresh-cw-9T7Tp2vI.js";import{G as oe}from"./globe-DtEgS3Yf.js";import{T as Me}from"./trash-2-B2Wniuw-.js";import{S as je}from"./shield-check-BHGT5Xmy.js";const ie=N("asterisk",[["path",{d:"M12 6v12",key:"1vza4d"}],["path",{d:"M17.196 9 6.804 15",key:"1ah31z"}],["path",{d:"m6.804 9 10.392 6",key:"1b6pxd"}]]);const ue=N("earth",[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);const de=N("hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);const He=N("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);const Le=N("shield-off",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]]),Oe={class:"space-y-8"},Ue={class:"space-y-3"},Ee={class:"flex items-start justify-between gap-4 flex-wrap"},Fe={class:"flex items-center gap-2"},We={class:"flex-1 min-w-0"},Ze={key:0,class:"text-foreground-muted hidden sm:inline shrink-0"},qe={class:"dns-card"},Ge={class:"dns-row"},Ke={class:"dns-current"},Ye={key:0,class:"dns-chips"},Je={class:"font-mono"},Qe=["onClick"],Xe={key:1,class:"dns-defaults"},et={class:"font-mono"},tt={class:"dns-form"},st={class:"dns-row"},at={class:"dns-row-label"},lt={class:"dns-row-meta"},rt={key:0,class:"dns-records"},nt={class:"font-mono text-white text-xs flex-1 truncate"},ot={class:"font-mono text-foreground text-xs flex-1 truncate"},it=["onClick"],ut={key:1,class:"text-xs text-foreground-muted italic px-1"},dt={class:"dns-form"},ct={class:"dns-savebar"},vt={class:"rule-filterbar"},ft=["onClick"],mt={class:"rule-filter-count"},ht={key:0,class:"empty-card"},pt={class:"text-sm text-white"},gt={class:"text-xs text-foreground-muted mt-1 max-w-sm"},yt={key:1,class:"rule-grid"},bt={class:"space-y-4"},kt={class:"grid grid-cols-3 gap-2"},wt=["onClick"],xt={class:"text-[10.5px] text-foreground-muted mt-1.5 leading-snug"},Tt={__name:"Firewall",setup(_t){const p=Te(),b=f([]),y=f({ipv4:[],ipv6:[],hostname_map:{},nftables_available:!0,last_error:""}),M=f(null),_=f(!1),j=f(!1),H=f(!1),c=f({rule_type:"cidr",value:"",label:""}),a=f({servers:[],search:"",records:[],defaults:[]}),P=f({servers:[],search:"",records:[]}),C=f(""),I=f(""),A=f(""),L=f(!1),ce=d(()=>{const e=JSON.stringify({s:a.value.servers||[],q:a.value.search||"",r:(a.value.records||[]).map(s=>`${s.host}=${s.ip}`).sort()}),t=JSON.stringify({s:P.value.servers||[],q:P.value.search||"",r:(P.value.records||[]).map(s=>`${s.host}=${s.ip}`).sort()});return e!==t}),ve=d(()=>{const e=[];return e.push(a.value.servers.length?`${a.value.servers.length} resolver${a.value.servers.length===1?"":"s"}`:`defaults (${(a.value.defaults||[]).join(", ")||"none"})`),a.value.records.length&&e.push(`${a.value.records.length} override${a.value.records.length===1?"":"s"}`),e.join(" · ")}),fe=async()=>{try{const e=await x.get("/firewall/dns");a.value={servers:e.data.servers||[],search:e.data.search||"",records:e.data.records||[],defaults:e.data.defaults||[]},P.value={servers:[...a.value.servers],search:a.value.search,records:a.value.records.map(t=>({...t}))}}catch(e){console.error("loadDNS failed",e)}},Z=()=>{const e=C.value.trim();if(!e)return;if(!(/^[0-9.]+$/.test(e)||e.includes(":"))){p.notify({title:"Invalid IP",message:`"${e}" doesn't look like an IPv4 or IPv6 address.`});return}if(a.value.servers.includes(e)){C.value="";return}a.value.servers=[...a.value.servers,e],C.value=""},me=e=>{a.value.servers=a.value.servers.filter((t,s)=>s!==e)},O=()=>{const e=I.value.trim(),t=A.value.trim();if(!e||!t)return;const s=/^[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?)*$/.test(e),n=/^[0-9.]+$/.test(t)||t.includes(":");if(!s){p.notify({title:"Invalid hostname",message:`"${e}" is not a valid hostname.`});return}if(!n){p.notify({title:"Invalid IP",message:`"${t}" is not a literal IPv4 or IPv6 address.`});return}if((a.value.records||[]).some(D=>D.host===e)){p.notify({title:"Duplicate host",message:`"${e}" already has an override.`});return}a.value.records=[...a.value.records||[],{host:e,ip:t}],I.value="",A.value=""},he=e=>{a.value.records=a.value.records.filter((t,s)=>s!==e)},pe=()=>{a.value.servers=[],a.value.search="",a.value.records=[]},ge=async()=>{L.value=!0;try{const e=await x.put("/firewall/dns",{servers:a.value.servers,search:a.value.search||"",records:a.value.records||[]});a.value={servers:e.data.servers||[],search:e.data.search||"",records:e.data.records||[],defaults:e.data.defaults||a.value.defaults},P.value={servers:[...a.value.servers],search:a.value.search,records:a.value.records.map(t=>({...t}))}}catch(e){p.notify({title:"Save failed",message:e.response?.data?.error?.message||e.message,danger:!0})}finally{L.value=!1}},q=d(()=>b.value.filter(e=>e.kind==="custom")),G={"169.254.0.0/16":{name:"Cloud metadata service",why:"Blocks the special address AWS, Azure, and GCP use to expose VM credentials and instance settings. Leaving this open is a common credential-leak path."},"fd00:ec2::254/128":{name:"Cloud metadata (IPv6)",why:"Same as above, but the IPv6 path GCP uses. Recommended on."},"10.0.0.0/8":{name:"Private network, 10.x",why:"Standard internal-network range. Turn on if your functions should not reach internal services on your LAN."},"172.16.0.0/12":{name:"Private network, 172.16.x",why:"Another internal-network range (often used by Docker default bridge). Turn on for stricter isolation."},"192.168.0.0/16":{name:"Private network, 192.168.x",why:"Common home/office network range. Turn on if functions should not reach your local LAN."},"100.64.0.0/10":{name:"CGNAT / Tailscale",why:"Used by Tailscale and large ISPs. Turn on to keep functions out of your tailnet."}},U=e=>e.kind==="custom"?e.label||e.value:G[e.value]?.name||e.label||e.value,ye=e=>e.kind==="custom"?"":G[e.value]?.why||"",k=f("on"),be=d(()=>[{id:"all",label:"All",count:b.value.length},{id:"on",label:"On",count:b.value.filter(e=>e.enabled).length},{id:"off",label:"Off",count:b.value.filter(e=>!e.enabled).length},{id:"yours",label:"Yours",count:q.value.length}]),K=d(()=>{const e={default:0,suggested:1,custom:2};return[...b.value.filter(s=>k.value==="on"?s.enabled:k.value==="off"?!s.enabled:k.value==="yours"?s.kind==="custom":!0)].sort((s,n)=>s.enabled!==n.enabled?s.enabled?-1:1:e[s.kind]!==e[n.kind]?e[s.kind]-e[n.kind]:U(s).localeCompare(U(n)))}),Y=d(()=>b.value.filter(e=>e.enabled).length),J=d(()=>b.value.filter(e=>!e.enabled).length),ke=d(()=>{if(!b.value.length)return"Nothing in the blocklist yet.";const e=Y.value,t=J.value;return`${e} block${e===1?"":"s"} active · ${t} available to turn on · ${q.value.length} you added`}),we=[{value:"cidr",label:"IP / Range",icon:de},{value:"hostname",label:"Hostname",icon:oe},{value:"wildcard",label:"Pattern",icon:ie}],xe=d(()=>{switch(c.value.rule_type){case"hostname":return"api.internal.corp";case"wildcard":return"*.corp.com";default:return"192.168.1.0/24"}}),_e=d(()=>{switch(c.value.rule_type){case"hostname":return"A specific website or service name. We resolve it to IPs and block those.";case"wildcard":return"Match an entire domain and its subdomains. Use *.example.com for everything under example.com.";default:return"A single IP (e.g. 1.2.3.4) or a CIDR range (e.g. 10.0.0.0/8) to block all addresses inside it."}}),Ce=d(()=>y.value.last_error?"border-danger-ring bg-danger-tint text-danger-fg":y.value.nftables_available?"border-success-ring bg-success-tint text-foreground-muted":"border-warning-ring bg-warning-tint text-warning-fg"),$e=d(()=>y.value.last_error?re:y.value.nftables_available?je:re),Se=d(()=>y.value.last_error?y.value.last_error:y.value.nftables_available?"Active. Rules apply to every function with outbound network enabled.":"nftables unavailable on this host. Packet-level enforcement is disabled. Sandbox-level isolation still works."),R=async()=>{const e=await x.get("/firewall/rules");b.value=e.data.rules||[],y.value=e.data.status||{ipv4:[],ipv6:[]}},Pe=async e=>{M.value=e.id;try{await x.put(`/firewall/rules/${e.id}`,{enabled:!e.enabled}),await R()}catch(t){p.notify({title:"Toggle failed",message:t.response?.data?.error?.message||t.message,danger:!0})}finally{M.value=null}},Ie=async e=>{if(await p.ask({title:"Delete custom rule?",message:`"${e.value}" will be removed from the blocklist.`,confirmLabel:"Delete",danger:!0}))try{await x.delete(`/firewall/rules/${e.id}`),await R()}catch(s){p.notify({title:"Delete failed",message:s.response?.data?.error?.message||s.message,danger:!0})}},Ae=async()=>{if(c.value.value.trim()){j.value=!0;try{await x.post("/firewall/rules",{rule_type:c.value.rule_type,value:c.value.value.trim(),label:c.value.label.trim()}),_.value=!1,c.value={rule_type:"cidr",value:"",label:""},await R()}catch(e){p.notify({title:"Failed to add rule",message:e.response?.data?.error?.message||e.message,danger:!0})}finally{j.value=!1}}},Re=async()=>{H.value=!0;try{const e=await x.post("/firewall/resolve");e.data.error&&p.notify({title:"Resolve had errors",message:e.data.error,danger:!0}),await R()}catch(e){p.notify({title:"Resolve failed",message:e.response?.data?.error?.message||e.message,danger:!0})}finally{H.value=!1}},Q=async()=>{await Promise.all([R(),fe()])};Ne(Q),Ve(Q);const X=le({name:"PanelSection",props:{title:String,subtitle:String},setup(e,{slots:t}){return()=>u("section",{class:"space-y-3"},[u("div",null,[u("h2",{class:"text-sm font-semibold text-white tracking-tight"},e.title),e.subtitle?u("p",{class:"text-xs text-foreground-muted mt-0.5"},e.subtitle):null]),u("div",null,t.default?.())])}}),ee={default:{label:"Recommended",cls:"kind-recommended"},suggested:{label:"Optional",cls:"kind-optional"},custom:{label:"Yours",cls:"kind-yours"}},De=le({name:"RuleCard",props:{rule:{type:Object,required:!0},status:{type:Object,required:!0},busy:{type:Boolean,default:!1},readonlyEdit:{type:Boolean,default:!1}},emits:["toggle","delete"],setup(e,{emit:t}){const s=d(()=>{switch(e.rule.rule_type){case"hostname":return oe;case"wildcard":return ie;default:return de}}),n=d(()=>e.rule.rule_type==="cidr"?[e.rule.value]:e.status.hostname_map?.[e.rule.value]||[]),D=d(()=>U(e.rule)),te=d(()=>ye(e.rule)),se=d(()=>ee[e.rule.kind]||ee.custom);return()=>u("div",{class:["rule-card",e.rule.enabled?"is-on":"is-off"]},[u("div",{class:"rule-card-row"},[u("div",{class:"rule-card-titlewrap"},[u("div",{class:"rule-card-title"},D.value),u("span",{class:["rule-kind-pill",se.value.cls]},se.value.label)]),u("button",{class:["rule-toggle",e.rule.enabled?"on":"off",e.busy?"busy":"","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background"],disabled:e.busy,title:e.rule.enabled?"Click to allow":"Click to block",onClick:()=>t("toggle")},[u("span",{class:"rule-toggle-knob"})])]),te.value?u("p",{class:"rule-card-why"},te.value):null,u("div",{class:"rule-card-foot"},[u(s.value,{class:"rule-card-type-icon"}),u("code",{class:"rule-card-value"},e.rule.value),n.value.length&&e.rule.rule_type!=="cidr"?u("span",{class:"rule-card-resolved"},`→ ${n.value.slice(0,2).join(", ")}${n.value.length>2?` +${n.value.length-2}`:""}`):null]),e.readonlyEdit?null:u("button",{class:"rule-card-delete",title:"Remove this block",onClick:()=>t("delete")},[u(Me,{class:"w-3.5 h-3.5"})])])}});return(e,t)=>(r(),i("div",Oe,[l("header",Ue,[l("div",Ee,[t[12]||(t[12]=l("div",{class:"max-w-2xl"},[l("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Firewall & DNS "),l("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Decide what your functions are allowed to talk to. Each switch below blocks one destination; turn one on and your functions can no longer reach it; turn it off and they can. DNS settings below control how your functions look hostnames up. ")],-1)),l("div",Fe,[o(w,{variant:"secondary",size:"sm",loading:H.value,onClick:Re},{default:h(()=>[o(m(Be),{class:"w-4 h-4"}),t[10]||(t[10]=g(" Apply now ",-1))]),_:1},8,["loading"]),o(w,{size:"sm",onClick:t[0]||(t[0]=s=>_.value=!0)},{default:h(()=>[o(m(T),{class:"w-4 h-4"}),t[11]||(t[11]=g(" Block something ",-1))]),_:1})])]),l("div",{class:E(["flex items-center gap-3 text-xs px-3 py-2 rounded-md border",Ce.value])},[(r(),V(ae($e.value),{class:"w-4 h-4 shrink-0"})),l("span",We,v(Se.value),1),y.value.nftables_available?(r(),i("span",Ze,v(Y.value)+" active · "+v(J.value)+" off ",1)):F("",!0)],2)]),o(m(X),{title:"DNS",subtitle:ve.value},{default:h(()=>[l("div",qe,[l("div",Ge,[t[15]||(t[15]=l("div",{class:"dns-row-label"}," Upstream resolvers ",-1)),l("div",Ke,[a.value.servers.length?(r(),i("div",Ye,[(r(!0),i($,null,S(a.value.servers,(s,n)=>(r(),i("span",{key:s+n,class:"dns-chip"},[o(m(ue),{class:"w-3 h-3 opacity-60"}),l("span",Je,v(s),1),l("button",{class:"dns-chip-x",title:"Remove",onClick:D=>me(n)}," × ",8,Qe)]))),128))])):(r(),i("div",Xe,[t[13]||(t[13]=l("span",{class:"text-foreground-muted text-xs"},"Defaults:",-1)),(r(!0),i($,null,S(a.value.defaults,s=>(r(),i("span",{key:s,class:"dns-chip muted"},[o(m(ue),{class:"w-3 h-3 opacity-60"}),l("span",et,v(s),1)]))),128))]))]),l("div",tt,[z(l("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>C.value=s),placeholder:"1.1.1.1",class:"dns-input",onKeydown:W(Z,["enter"])},null,544),[[B,C.value]]),o(w,{variant:"secondary",size:"sm",disabled:!C.value.trim(),onClick:Z},{default:h(()=>[o(m(T),{class:"w-3.5 h-3.5"}),t[14]||(t[14]=g(" Add resolver ",-1))]),_:1},8,["disabled"]),z(l("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>a.value.search=s),placeholder:"search domain",class:"dns-input narrow"},null,512),[[B,a.value.search]])])]),l("div",st,[l("div",at,[t[16]||(t[16]=g(" Host overrides ",-1)),l("span",lt,v(a.value.records.length)+" record"+v(a.value.records.length===1?"":"s"),1)]),a.value.records.length?(r(),i("div",rt,[(r(!0),i($,null,S(a.value.records,(s,n)=>(r(),i("div",{key:s.host+n,class:"dns-record"},[l("span",nt,v(s.host),1),t[17]||(t[17]=l("span",{class:"text-foreground-muted text-xs"},"→",-1)),l("span",ot,v(s.ip),1),l("button",{class:"dns-chip-x",title:"Remove",onClick:D=>he(n)}," × ",8,it)]))),128))])):(r(),i("div",ut," No overrides. Anything resolves through the upstream resolvers above. ")),l("div",dt,[z(l("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>I.value=s),placeholder:"api.internal",class:"dns-input host",onKeydown:W(O,["enter"])},null,544),[[B,I.value]]),t[19]||(t[19]=l("span",{class:"text-foreground-muted text-xs"},"→",-1)),z(l("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>A.value=s),placeholder:"10.0.5.10",class:"dns-input",onKeydown:W(O,["enter"])},null,544),[[B,A.value]]),o(w,{variant:"secondary",size:"sm",disabled:!(I.value.trim()&&A.value.trim()),onClick:O},{default:h(()=>[o(m(T),{class:"w-3.5 h-3.5"}),t[18]||(t[18]=g(" Add record ",-1))]),_:1},8,["disabled"])])]),l("div",ct,[t[21]||(t[21]=l("span",{class:"dns-hint"}," Records win over upstream DNS. Anything in the override list bypasses resolution entirely. Existing warm workers keep their previous files; toggle the function's network off and on, or wait for idle TTL, to apply. ",-1)),a.value.servers.length||a.value.search||a.value.records.length?(r(),i("button",{key:0,class:"text-[11px] text-foreground-muted hover:text-white px-2 py-1 transition-colors",onClick:pe}," Reset ")):F("",!0),o(w,{size:"sm",loading:L.value,disabled:!ce.value,onClick:ge},{default:h(()=>[...t[20]||(t[20]=[g(" Save ",-1)])]),_:1},8,["loading","disabled"])])])]),_:1},8,["subtitle"]),o(m(X),{title:"Blocklist",subtitle:ke.value},{default:h(()=>[l("div",vt,[(r(!0),i($,null,S(be.value,s=>(r(),i("button",{key:s.id,class:E(["rule-filter",{active:k.value===s.id}]),onClick:n=>k.value=s.id},[g(v(s.label)+" ",1),l("span",mt,v(s.count),1)],10,ft))),128))]),K.value.length?(r(),i("div",yt,[(r(!0),i($,null,S(K.value,s=>(r(),V(m(De),{key:s.id,rule:s,status:y.value,busy:M.value===s.id,"readonly-edit":s.kind!=="custom",onToggle:n=>Pe(s),onDelete:n=>Ie(s)},null,8,["rule","status","busy","readonly-edit","onToggle","onDelete"]))),128))])):(r(),i("div",ht,[o(m(Le),{class:"w-5 h-5 mb-2 text-foreground-muted/60"}),l("p",pt,v(k.value==="yours"?"No custom blocks yet":"Nothing matches this filter"),1),l("p",gt,v(k.value==="yours"?"Block a specific IP, CIDR, or hostname to keep your functions out of internal infrastructure they shouldn't reach.":"Try a different filter, or add a custom block above."),1),k.value==="yours"?(r(),V(w,{key:0,class:"mt-4",size:"sm",variant:"secondary",onClick:t[5]||(t[5]=s=>_.value=!0)},{default:h(()=>[o(m(T),{class:"w-3.5 h-3.5"}),t[22]||(t[22]=g(" Block something ",-1))]),_:1})):F("",!0)]))]),_:1},8,["subtitle"]),o(ze,{modelValue:_.value,"onUpdate:modelValue":t[9]||(t[9]=s=>_.value=s),title:"Block something",icon:m(He),size:"md"},{footer:h(()=>[o(w,{variant:"secondary",onClick:t[8]||(t[8]=s=>_.value=!1)},{default:h(()=>[...t[26]||(t[26]=[g(" Cancel ",-1)])]),_:1}),o(w,{loading:j.value,disabled:!c.value.value.trim(),onClick:Ae},{default:h(()=>[o(m(T),{class:"w-4 h-4"}),t[27]||(t[27]=g(" Block it ",-1))]),_:1},8,["loading","disabled"])]),default:h(()=>[l("div",bt,[t[24]||(t[24]=l("p",{class:"text-xs text-foreground-muted leading-snug"}," Pick what you're blocking: a single IP, a network range, or a hostname. Once added, your functions can no longer reach it. ",-1)),l("div",null,[t[23]||(t[23]=l("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"}," What is it? ",-1)),l("div",kt,[(r(),i($,null,S(we,s=>l("button",{key:s.value,class:E(["px-2 py-2 rounded border text-xs font-medium transition-colors flex flex-col items-center gap-1",c.value.rule_type===s.value?"bg-white text-black border-white":"bg-surface-hover text-foreground-muted border-border hover:border-foreground-muted"]),onClick:n=>c.value.rule_type=s.value},[(r(),V(ae(s.icon),{class:"w-3.5 h-3.5"})),g(" "+v(s.label),1)],10,wt)),64))]),l("p",xt,v(_e.value),1)]),o(ne,{modelValue:c.value.value,"onUpdate:modelValue":t[6]||(t[6]=s=>c.value.value=s),label:c.value.rule_type==="wildcard"?"Pattern":c.value.rule_type==="hostname"?"Hostname":"IP or network",placeholder:xe.value},null,8,["modelValue","label","placeholder"]),o(ne,{modelValue:c.value.label,"onUpdate:modelValue":t[7]||(t[7]=s=>c.value.label=s),label:"Why? (optional)",placeholder:"e.g. our staging Postgres"},null,8,["modelValue"]),t[25]||(t[25]=l("p",{class:"text-[11px] text-foreground-muted leading-snug"}," Takes effect within seconds. Warm functions are recycled so the new block applies on the very next call. ",-1))])]),_:1},8,["modelValue","icon"])]))}};export{Tt as default}; diff --git a/backend/internal/server/ui_dist/assets/FunctionDiff-B5S0Jfo_.js b/backend/internal/server/ui_dist/assets/FunctionDiff-B96TQktv.js similarity index 99% rename from backend/internal/server/ui_dist/assets/FunctionDiff-B5S0Jfo_.js rename to backend/internal/server/ui_dist/assets/FunctionDiff-B96TQktv.js index 2a67a5d..655d954 100644 --- a/backend/internal/server/ui_dist/assets/FunctionDiff-B5S0Jfo_.js +++ b/backend/internal/server/ui_dist/assets/FunctionDiff-B96TQktv.js @@ -1,4 +1,4 @@ -import{c as Bt,C as sn,o as an,W as Ke,ah as et,E as Le,y as ln,a as C,b as w,k as Q,d as N,h as xe,f as I,t as L,_ as tt,F as de,p as we,g as W,n as dn,s as Pe,r as P,q as $,ak as cn,a2 as un,I as nt,i as fn,a9 as hn,j as k,ai as mn,af as gn}from"./index-BMkkwZ9q.js";import{d as rt}from"./rollbackDiff-Cvt2Ss82.js";import{c as pn}from"./clipboard-CmSw2rR-.js";import{P as _e,E as T,a as Be,C as Mt,S as ne,b as _t,T as Dt,c as vn,d as he,D as E,V as bn,F as St,g as Rt,R as re,W as De,G as $e,l as xn,h as wn,e as Lt,f as kn,s as Cn,t as Z,L as yn,i as On,j as An,k as Bn,m as it,n as Mn,o as _n,p as Dn,q as Sn,r as Rn,u as Ln}from"./index-BOWx3BJu.js";import{C as Pn}from"./copy-CTb6u-fx.js";import{Z as Tn}from"./zap-DvhWYa2n.js";import{S as En,F as Qn,P as Nn}from"./settings-2-CcqGdzLw.js";import{C as ot}from"./chevron-down-BTZfO5Md.js";import{R as Vn}from"./rotate-ccw-CsgWy1Bs.js";const Gn=Bt("arrow-left-right",[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]]);const $n=Bt("list",[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]);class M{constructor(e,r,s,i){this.fromA=e,this.toA=r,this.fromB=s,this.toB=i}offset(e,r=e){return new M(this.fromA+e,this.toA+e,this.fromB+r,this.toB+r)}}function J(n,e,r,s,i,t){if(n==s)return[];let o=je(n,e,r,s,i,t),a=Ie(n,e+o,r,s,i+o,t);e+=o,r-=a,i+=o,t-=a;let l=r-e,u=t-i;if(!l||!u)return[new M(e,r,i,t)];if(l>u){let c=n.slice(e,r).indexOf(s.slice(i,t));if(c>-1)return[new M(e,e+c,i,i),new M(e+c+u,r,t,t)]}else if(u>l){let c=s.slice(i,t).indexOf(n.slice(e,r));if(c>-1)return[new M(e,e,i,i+c),new M(r,r,i+c+l,t)]}if(l==1||u==1)return[new M(e,r,i,t)];let d=Et(n,e,r,s,i,t);if(d){let[c,m,g]=d;return J(n,e,c,s,i,m).concat(J(n,c+g,r,s,m+g,t))}return Fn(n,e,r,s,i,t)}let ce=1e9,ue=0,Fe=!1;function Fn(n,e,r,s,i,t){let o=r-e,a=t-i;if(ce<1e9&&Math.min(o,a)>ce*16||ue>0&&Date.now()>ue)return Math.min(o,a)>ce*64?[new M(e,r,i,t)]:st(n,e,r,s,i,t);let l=Math.ceil((o+a)/2);Te.reset(l),Ee.reset(l);let u=(g,p)=>n.charCodeAt(e+g)==s.charCodeAt(i+p),d=(g,p)=>n.charCodeAt(r-g-1)==s.charCodeAt(t-p-1),c=(o-a)%2!=0?Ee:null,m=c?null:Te;for(let g=0;gce||ue>0&&!(g&63)&&Date.now()>ue)return st(n,e,r,s,i,t);let p=Te.advance(g,o,a,l,c,!1,u)||Ee.advance(g,o,a,l,m,!0,d);if(p)return jn(n,e,r,e+p[0],s,i,t,i+p[1])}return[new M(e,r,i,t)]}class Pt{constructor(){this.vec=[]}reset(e){this.len=e<<1;for(let r=0;rr)this.end+=2;else if(c>s)this.start+=2;else if(t){let m=i+(r-s)-l;if(m>=0&&m=r-d)return[g,i+g-m]}else{let g=r-t.vec[m];if(d>=g)return[d,c]}}}return null}}const Te=new Pt,Ee=new Pt;function jn(n,e,r,s,i,t,o,a){let l=!1;return!ie(n,s)&&++s==r&&(l=!0),!ie(i,a)&&++a==o&&(l=!0),l?[new M(e,r,t,o)]:J(n,e,s,i,t,a).concat(J(n,s,r,i,a,o))}function Tt(n,e){let r=1,s=Math.min(n,e);for(;rr||d>t||n.slice(a,u)!=s.slice(l,d)){if(o==1)return a-e-(ie(n,a)?0:1);o=o>>1}else{if(u==r||d==t)return u-e;a=u,l=d}}}function Ie(n,e,r,s,i,t){if(e==r||i==t||n.charCodeAt(r-1)!=s.charCodeAt(t-1))return 0;let o=Tt(r-e,t-i);for(let a=r,l=t;;){let u=a-o,d=l-o;if(u>1}else{if(u==e||d==i)return r-u;a=u,l=d}}}function Qe(n,e,r,s,i,t,o,a){let l=s.slice(i,t),u=null;for(;;){if(u||o=r)break;let m=n.slice(d,c),g=-1;for(;(g=l.indexOf(m,g+1))!=-1;){let p=je(n,c,r,s,i+g+m.length,t),x=Ie(n,e,d,s,i,i+g),v=m.length+p+x;(!u||u[2]>1}}function Et(n,e,r,s,i,t){let o=r-e,a=t-i;if(oi.fromA-e&&s.toB>i.fromB-e&&(n[r-1]=new M(s.fromA,i.toA,s.fromB,i.toB),n.splice(r--,1))}}function In(n,e,r){for(;;){Qt(r,1);let s=!1;for(let i=0;i3||a>3){let l=i==n.length-1?e.length:n[i+1].fromA,u=t.fromA-s,d=l-t.toA,c=lt(e,t.fromA,u),m=at(e,t.toA,d),g=t.fromA-c,p=m-t.toA;if((!o||!a)&&g&&p){let x=Math.max(o,a),[v,y,D]=o?[e,t.fromA,t.toA]:[r,t.fromB,t.toB];x>g&&e.slice(c,t.fromA)==v.slice(D-g,D)?(t=n[i]=new M(c,c+o,t.fromB-g,t.toB-g),c=t.fromA,m=at(e,t.toA,l-t.toA)):x>p&&e.slice(t.toA,m)==v.slice(y,y+p)&&(t=n[i]=new M(m-o,m,t.fromB+p,t.toB+p),m=t.toA,c=lt(e,t.fromA,t.fromA-s)),g=t.fromA-c,p=m-t.toA}if(g||p)t=n[i]=new M(t.fromA-g,t.toA+p,t.fromB-g,t.toB+p);else if(o){if(!a){let x=ct(e,t.fromA,t.toA),v,y=x<0?-1:dt(e,t.toA,t.fromA);x>-1&&(v=x-t.fromA)<=d&&e.slice(t.fromA,x)==e.slice(t.toA,t.toA+v)?t=n[i]=t.offset(v):y>-1&&(v=t.toA-y)<=u&&e.slice(t.fromA-v,t.fromA)==e.slice(y,t.toA)&&(t=n[i]=t.offset(-v))}}else{let x=ct(r,t.fromB,t.toB),v,y=x<0?-1:dt(r,t.toB,t.fromB);x>-1&&(v=x-t.fromB)<=d&&r.slice(t.fromB,x)==r.slice(t.toB,t.toB+v)?t=n[i]=t.offset(v):y>-1&&(v=t.toB-y)<=u&&r.slice(t.fromB-v,t.fromB)==r.slice(y,t.toB)&&(t=n[i]=t.offset(-v))}}s=t.toA}return Qt(n,3),n}let X;try{X=new RegExp("[\\p{Alphabetic}\\p{Number}]","u")}catch{}function Nt(n){return n>48&&n<58||n>64&&n<91||n>96&&n<123}function Vt(n,e){if(e==n.length)return 0;let r=n.charCodeAt(e);return r<192?Nt(r)?1:0:X?!Ft(r)||e==n.length-1?X.test(String.fromCharCode(r))?1:0:X.test(n.slice(e,e+2))?2:0:0}function Gt(n,e){if(!e)return 0;let r=n.charCodeAt(e-1);return r<192?Nt(r)?1:0:X?!jt(r)||e==1?X.test(String.fromCharCode(r))?1:0:X.test(n.slice(e-2,e))?2:0:0}const $t=8;function at(n,e,r){if(e==n.length||!Gt(n,e))return e;for(let s=e,i=e+r,t=0;t<$t;t++){let o=Vt(n,s);if(!o||s+o>i)return s;s+=o}return e}function lt(n,e,r){if(!e||!Vt(n,e))return e;for(let s=e,i=e-r,t=0;t<$t;t++){let o=Gt(n,s);if(!o||s-on>=55296&&n<=56319,jt=n=>n>=56320&&n<=57343;function ie(n,e){return!e||e==n.length||!Ft(n.charCodeAt(e-1))||!jt(n.charCodeAt(e))}function Hn(n,e,r){var s;let i=r?.override;return i?i(n,e):(ce=((s=r?.scanLimit)!==null&&s!==void 0?s:1e9)>>1,ue=r?.timeout?Date.now()+r.timeout:0,Fe=!1,In(n,e,J(n,0,n.length,e,0,e.length)))}function It(){return!Fe}function Wt(n,e,r){return Wn(Hn(n,e,r),n,e)}const V=St.define({combine:n=>n[0]}),Ne=ne.define(),Ht=St.define(),F=he.define({create(n){return null},update(n,e){for(let r of e.effects)r.is(Ne)&&(n=r.value);for(let r of e.state.facet(Ht))n=r(n,e);return n}});class q{constructor(e,r,s,i,t,o=!0){this.changes=e,this.fromA=r,this.toA=s,this.fromB=i,this.toB=t,this.precise=o}offset(e,r){return e||r?new q(this.changes,this.fromA+e,this.toA+e,this.fromB+r,this.toB+r,this.precise):this}get endA(){return Math.max(this.fromA,this.toA-1)}get endB(){return Math.max(this.fromB,this.toB-1)}static build(e,r,s){let i=Wt(e.toString(),r.toString(),s);return qt(i,e,r,0,0,It())}static updateA(e,r,s,i,t){return gt(mt(e,i,!0,s.length),e,r,s,t)}static updateB(e,r,s,i,t){return gt(mt(e,i,!1,r.length),e,r,s,t)}}function ut(n,e,r,s){let i=r.lineAt(n),t=s.lineAt(e);return i.to==n&&t.to==e&&nc+1&&v>m+1)break;g.push(p.offset(-u+s,-d+i)),[c,m]=ft(p.toA+s,p.toB+i,e,r),a++}o.push(new q(g,u,Math.max(u,c),d,Math.max(d,m),t))}return o}const ke=1e3;function ht(n,e,r,s){let i=0,t=n.length;for(;;){if(i==t){let d=0,c=0;i&&({toA:d,toB:c}=n[i-1]);let m=e-(r?d:c);return[d+m,c+m]}let o=i+t>>1,a=n[o],[l,u]=r?[a.fromA,a.toA]:[a.fromB,a.toB];if(l>e)t=o;else if(u<=e)i=o+1;else return s?[a.fromA,a.fromB]:[a.toA,a.toB]}}function mt(n,e,r,s){let i=[];return e.iterChangedRanges((t,o,a,l)=>{let u=0,d=r?e.length:s,c=0,m=r?s:e.length;t>ke&&([u,c]=ht(n,t-ke,r,!0)),o=u?i[i.length-1]={fromA:p.fromA,fromB:p.fromB,toA:d,toB:m,diffA:p.diffA+x,diffB:p.diffB+v}:i.push({fromA:u,toA:d,fromB:c,toB:m,diffA:x,diffB:v})}),i}function gt(n,e,r,s,i){if(!n.length)return e;let t=[];for(let o=0,a=0,l=0,u=0;;o++){let d=o==n.length?null:n[o],c=d?d.fromA+a:r.length,m=d?d.fromB+l:s.length;for(;uc||v.toB+l>m))break;t.push(v.offset(a,l)),u++}if(!d)break;let g=d.toA+a+d.diffA,p=d.toB+l+d.diffB,x=Wt(r.sliceString(c,g),s.sliceString(m,p),i);for(let v of qt(x,r,s,c,m,It()))t.push(v);for(a+=d.diffA,l+=d.diffB;ug&&v.fromB+l>p)break;u++}}return t}const Ut={scanLimit:500},Se=bn.fromClass(class{constructor(n){({deco:this.deco,gutter:this.gutter}=bt(n))}update(n){(n.docChanged||n.viewportChanged||qn(n.startState,n.state)||Un(n.startState,n.state))&&({deco:this.deco,gutter:this.gutter}=bt(n.view))}},{decorations:n=>n.deco}),Ce=_e.low(Rt({class:"cm-changeGutter",markers:n=>{var e;return((e=n.plugin(Se))===null||e===void 0?void 0:e.gutter)||Lt.empty}}));function qn(n,e){return n.field(F,!1)!=e.field(F,!1)}function Un(n,e){return n.facet(V)!=e.facet(V)}const pt=E.line({class:"cm-changedLine"}),Zt=E.mark({class:"cm-changedText"}),Zn=E.mark({tagName:"ins",class:"cm-insertedLine"}),Yn=E.mark({tagName:"del",class:"cm-deletedLine"}),vt=new class extends $e{constructor(){super(...arguments),this.elementClass="cm-changedLineGutter"}};function zn(n,e,r,s,i,t){let o=r?n.fromA:n.fromB,a=r?n.toA:n.toB,l=0;if(o!=a){i.add(o,o,pt),i.add(o,a,r?Yn:Zn),t&&t.add(o,o,vt);for(let u=e.iterRange(o,a-1),d=o;!u.next().done;){if(u.lineBreak){d++,i.add(d,d,pt),t&&t.add(d,d,vt);continue}let c=d+u.value.length;if(s)for(;l=d)break;(o?c.toA:c.toB)>u&&(!t||!t(n.state,c,a,l))&&zn(c,n.state.doc,o,s,a,l)}return{deco:a.finish(),gutter:l&&l.finish()}}class ye extends De{constructor(e){super(),this.height=e}eq(e){return this.height==e.height}toDOM(){let e=document.createElement("div");return e.className="cm-mergeSpacer",e.style.height=this.height+"px",e}updateDOM(e){return e.style.height=this.height+"px",!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}const Me=ne.define({map:(n,e)=>n.map(e)}),fe=he.define({create:()=>E.none,update:(n,e)=>{for(let r of e.effects)if(r.is(Me))return r.value;return n.map(e.changes)},provide:n=>T.decorations.from(n)}),Oe=.01;function xt(n,e){if(n.size!=e.size)return!1;let r=n.iter(),s=e.iter();for(;r.value;){if(r.from!=s.from||Math.abs(r.value.spec.widget.height-s.value.spec.widget.height)>1)return!1;r.next(),s.next()}return!0}function Xn(n,e,r){let s=new re,i=new re,t=n.state.field(fe).iter(),o=e.state.field(fe).iter(),a=0,l=0,u=0,d=0,c=n.viewport,m=e.viewport;for(let v=0;;v++){let y=vOe&&(d+=B,i.add(l,l,E.widget({widget:new ye(B),block:!0,side:-1})))}if(D>a+1e3&&ac.from&&lm.from){let _=Math.min(c.from-a,m.from-l);a+=_,l+=_,v--}else if(y)a=y.toA,l=y.toB;else break;for(;t.value&&t.fromOe&&i.add(e.state.doc.length,e.state.doc.length,E.widget({widget:new ye(g),block:!0,side:1}));let p=s.finish(),x=i.finish();xt(p,n.state.field(fe))||n.dispatch({effects:Me.of(p)}),xt(x,e.state.field(fe))||e.dispatch({effects:Me.of(x)})}const Ve=ne.define({map:(n,e)=>e.mapPos(n)});class Jn extends De{constructor(e){super(),this.lines=e}eq(e){return this.lines==e.lines}toDOM(e){let r=document.createElement("div");return r.className="cm-collapsedLines",r.textContent=e.state.phrase("$ unchanged lines",this.lines),r.addEventListener("click",s=>{let i=e.posAtDOM(s.target);e.dispatch({effects:Ve.of(i)});let{side:t,sibling:o}=e.state.facet(V);o&&o().dispatch({effects:Ve.of(Kn(i,e.state.field(F),t=="a"))})}),r}ignoreEvent(e){return e instanceof MouseEvent}get estimatedHeight(){return 27}get type(){return"collapsed-unchanged-code"}}function Kn(n,e,r){let s=0,i=0;for(let t=0;;t++){let o=t=n)return i+(n-s);[s,i]=r?[o.toA,o.toB]:[o.toB,o.toA]}}const er=he.define({create(n){return E.none},update(n,e){n=n.map(e.changes);for(let r of e.effects)r.is(Ve)&&(n=n.update({filter:s=>s!=r.value}));return n},provide:n=>T.decorations.from(n)});function Ge({margin:n=3,minSize:e=4}){return er.init(r=>tr(r,n,e))}function tr(n,e,r){let s=new re,i=n.facet(V).side=="a",t=n.field(F),o=1;for(let a=0;;a++){let l=a=r&&s.add(n.doc.line(u).from,n.doc.line(d).to,E.replace({widget:new Jn(c),block:!0})),!l)break;o=n.doc.lineAt(Math.min(n.doc.length,i?l.toA:l.toB)).number}return s.finish()}const nr=T.styleModule.of(new vn({".cm-mergeView":{overflowY:"auto"},".cm-mergeViewEditors":{display:"flex",alignItems:"stretch"},".cm-mergeViewEditor":{flexGrow:1,flexBasis:0,overflow:"hidden"},".cm-merge-revert":{width:"1.6em",flexGrow:0,flexShrink:0,position:"relative"},".cm-merge-revert button":{position:"absolute",display:"block",width:"100%",boxSizing:"border-box",textAlign:"center",background:"none",border:"none",font:"inherit",cursor:"pointer"}})),Yt=T.baseTheme({".cm-mergeView & .cm-scroller, .cm-mergeView &":{height:"auto !important",overflowY:"visible !important"},"&.cm-merge-a .cm-changedLine, .cm-deletedChunk":{backgroundColor:"rgba(160, 128, 100, .08)"},"&.cm-merge-b .cm-changedLine, .cm-inlineChangedLine":{backgroundColor:"rgba(100, 160, 128, .08)"},"&light.cm-merge-a .cm-changedText, &light .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ee443366, #ee443366) bottom/100% 2px no-repeat"},"&dark.cm-merge-a .cm-changedText, &dark .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ffaa9966, #ffaa9966) bottom/100% 2px no-repeat"},"&light.cm-merge-b .cm-changedText":{background:"linear-gradient(#22bb22aa, #22bb22aa) bottom/100% 2px no-repeat"},"&dark.cm-merge-b .cm-changedText":{background:"linear-gradient(#88ff88aa, #88ff88aa) bottom/100% 2px no-repeat"},"&.cm-merge-b .cm-deletedText":{background:"#ff000033"},".cm-insertedLine, .cm-deletedLine, .cm-deletedLine del":{textDecoration:"none"},".cm-deletedChunk":{paddingLeft:"6px","& .cm-chunkButtons":{position:"absolute",insetInlineEnd:"5px"},"& button":{border:"none",cursor:"pointer",color:"white",margin:"0 2px",borderRadius:"3px","&[name=accept]":{background:"#2a2"},"&[name=reject]":{background:"#d43"}}},".cm-collapsedLines":{padding:"5px 5px 5px 10px",cursor:"pointer","&:before":{content:'"⦚"',marginInlineEnd:"7px"},"&:after":{content:'"⦚"',marginInlineStart:"7px"}},"&light .cm-collapsedLines":{color:"#444",background:"linear-gradient(to bottom, transparent 0, #f3f3f3 30%, #f3f3f3 70%, transparent 100%)"},"&dark .cm-collapsedLines":{color:"#ddd",background:"linear-gradient(to bottom, transparent 0, #222 30%, #222 70%, transparent 100%)"},".cm-changeGutter":{width:"3px",paddingLeft:"1px"},"&light.cm-merge-a .cm-changedLineGutter, &light .cm-deletedLineGutter":{background:"#e43"},"&dark.cm-merge-a .cm-changedLineGutter, &dark .cm-deletedLineGutter":{background:"#fa9"},"&light.cm-merge-b .cm-changedLineGutter":{background:"#2b2"},"&dark.cm-merge-b .cm-changedLineGutter":{background:"#8f8"},".cm-inlineChangedLineGutter":{background:"#75d"}}),wt=new Mt,Ae=new Mt;class rr{constructor(e){this.revertDOM=null,this.revertToA=!1,this.revertToLeft=!1,this.measuring=-1,this.diffConf=e.diffConfig||Ut;let r=[_e.low(Se),Yt,nr,fe,T.updateListener.of(c=>{this.measuring<0&&(c.heightChanged||c.viewportChanged)&&!c.transactions.some(m=>m.effects.some(g=>g.is(Me)))&&this.measure()})],s=[V.of({side:"a",sibling:()=>this.b,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&s.push(Ce);let i=Be.create({doc:e.a.doc,selection:e.a.selection,extensions:[e.a.extensions||[],T.editorAttributes.of({class:"cm-merge-a"}),Ae.of(s),r]}),t=[V.of({side:"b",sibling:()=>this.a,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&t.push(Ce);let o=Be.create({doc:e.b.doc,selection:e.b.selection,extensions:[e.b.extensions||[],T.editorAttributes.of({class:"cm-merge-b"}),Ae.of(t),r]});this.chunks=q.build(i.doc,o.doc,this.diffConf);let a=[F.init(()=>this.chunks),wt.of(e.collapseUnchanged?Ge(e.collapseUnchanged):[])];i=i.update({effects:ne.appendConfig.of(a)}).state,o=o.update({effects:ne.appendConfig.of(a)}).state,this.dom=document.createElement("div"),this.dom.className="cm-mergeView",this.editorDOM=this.dom.appendChild(document.createElement("div")),this.editorDOM.className="cm-mergeViewEditors";let l=e.orientation||"a-b",u=document.createElement("div");u.className="cm-mergeViewEditor";let d=document.createElement("div");d.className="cm-mergeViewEditor",this.editorDOM.appendChild(l=="a-b"?u:d),this.editorDOM.appendChild(l=="a-b"?d:u),this.a=new T({state:i,parent:u,root:e.root,dispatchTransactions:c=>this.dispatch(c,this.a)}),this.b=new T({state:o,parent:d,root:e.root,dispatchTransactions:c=>this.dispatch(c,this.b)}),this.setupRevertControls(!!e.revertControls,e.revertControls=="b-to-a",e.renderRevertControl),e.parent&&e.parent.appendChild(this.dom),this.scheduleMeasure()}dispatch(e,r){if(e.some(s=>s.docChanged)){let s=e[e.length-1],i=e.reduce((o,a)=>o.compose(a.changes),_t.empty(e[0].startState.doc.length));this.chunks=r==this.a?q.updateA(this.chunks,s.newDoc,this.b.state.doc,i,this.diffConf):q.updateB(this.chunks,this.a.state.doc,s.newDoc,i,this.diffConf),r.update([...e,s.state.update({effects:Ne.of(this.chunks)})]);let t=r==this.a?this.b:this.a;t.update([t.state.update({effects:Ne.of(this.chunks)})]),this.scheduleMeasure()}else r.update(e)}reconfigure(e){if("diffConfig"in e&&(this.diffConf=e.diffConfig),"orientation"in e){let t=e.orientation!="b-a";if(t!=(this.editorDOM.firstChild==this.a.dom.parentNode)){let o=this.a.dom.parentNode,a=this.b.dom.parentNode;o.remove(),a.remove(),this.editorDOM.insertBefore(t?o:a,this.editorDOM.firstChild),this.editorDOM.appendChild(t?a:o),this.revertToLeft=!this.revertToLeft,this.revertDOM&&(this.revertDOM.textContent="")}}if("revertControls"in e||"renderRevertControl"in e){let t=!!this.revertDOM,o=this.revertToA,a=this.renderRevert;"revertControls"in e&&(t=!!e.revertControls,o=e.revertControls=="b-to-a"),"renderRevertControl"in e&&(a=e.renderRevertControl),this.setupRevertControls(t,o,a)}let r="highlightChanges"in e,s="gutter"in e,i="collapseUnchanged"in e;if(r||s||i){let t=[],o=[];if(r||s){let a=this.a.state.facet(V),l=s?e.gutter!==!1:a.markGutter,u=r?e.highlightChanges!==!1:a.highlightChanges;t.push(Ae.reconfigure([V.of({side:"a",sibling:()=>this.b,highlightChanges:u,markGutter:l}),l?Ce:[]])),o.push(Ae.reconfigure([V.of({side:"b",sibling:()=>this.a,highlightChanges:u,markGutter:l}),l?Ce:[]]))}if(i){let a=wt.reconfigure(e.collapseUnchanged?Ge(e.collapseUnchanged):[]);t.push(a),o.push(a)}this.a.dispatch({effects:t}),this.b.dispatch({effects:o})}this.scheduleMeasure()}setupRevertControls(e,r,s){this.revertToA=r,this.revertToLeft=this.revertToA==(this.editorDOM.firstChild==this.a.dom.parentNode),this.renderRevert=s,!e&&this.revertDOM?(this.revertDOM.remove(),this.revertDOM=null):e&&!this.revertDOM?(this.revertDOM=this.editorDOM.insertBefore(document.createElement("div"),this.editorDOM.firstChild.nextSibling),this.revertDOM.addEventListener("mousedown",i=>this.revertClicked(i)),this.revertDOM.className="cm-merge-revert"):this.revertDOM&&(this.revertDOM.textContent="")}scheduleMeasure(){if(this.measuring<0){let e=this.dom.ownerDocument.defaultView||window;this.measuring=e.requestAnimationFrame(()=>{this.measuring=-1,this.measure()})}}measure(){Xn(this.a,this.b,this.chunks),this.revertDOM&&this.updateRevertButtons()}updateRevertButtons(){let e=this.revertDOM,r=e.firstChild,s=this.a.viewport,i=this.b.viewport;for(let t=0;ts.to||o.fromB>i.to)break;if(o.fromA-1&&(this.dom.ownerDocument.defaultView||window).cancelAnimationFrame(this.measuring),this.dom.remove()}}function kt(n){let e=n.nextSibling;return n.remove(),e}const ir=new class extends $e{constructor(){super(...arguments),this.elementClass="cm-deletedLineGutter"}},or=_e.low(Rt({class:"cm-changeGutter",markers:n=>{var e;return((e=n.plugin(Se))===null||e===void 0?void 0:e.gutter)||Lt.empty},widgetMarker:(n,e)=>e instanceof zt?ir:null}));function sr(n){var e;let r=typeof n.original=="string"?Dt.of(n.original.split(/\r?\n/)):n.original,s=n.diffConfig||Ut;return[_e.low(Se),cr,Yt,T.editorAttributes.of({class:"cm-merge-b"}),Ht.of((i,t)=>{let o=t.effects.find(a=>a.is(We));return o&&(i=q.updateA(i,o.value.doc,t.startState.doc,o.value.changes,s)),t.docChanged&&(i=q.updateB(i,t.state.field(oe),t.newDoc,t.changes,s)),i}),V.of({highlightChanges:n.highlightChanges!==!1,markGutter:n.gutter!==!1,syntaxHighlightDeletions:n.syntaxHighlightDeletions!==!1,syntaxHighlightDeletionsMaxLength:3e3,mergeControls:(e=n.mergeControls)!==null&&e!==void 0?e:!0,overrideChunk:n.allowInlineDiffs?mr:void 0,side:"b"}),oe.init(()=>r),n.gutter!==!1?or:[],n.collapseUnchanged?Ge(n.collapseUnchanged):[],F.init(i=>q.build(r,i.doc,s))]}const We=ne.define(),oe=he.define({create:()=>Dt.empty,update(n,e){for(let r of e.effects)r.is(We)&&(n=r.value.doc);return n}}),Ct=new WeakMap;class zt extends De{constructor(e){super(),this.buildDOM=e,this.dom=null}eq(e){return this.dom==e.dom}toDOM(e){return this.dom||(this.dom=this.buildDOM(e))}}function ar(n,e,r){let s=Ct.get(e.changes);if(s)return s;let i=o=>{let{highlightChanges:a,syntaxHighlightDeletions:l,syntaxHighlightDeletionsMaxLength:u,mergeControls:d}=n.facet(V),c=document.createElement("div");if(c.className="cm-deletedChunk",d){let _=c.appendChild(document.createElement("div"));_.className="cm-chunkButtons";let S=A=>{A.preventDefault(),lr(o,o.posAtDOM(c))},B=A=>{A.preventDefault(),dr(o,o.posAtDOM(c))};if(typeof d=="function")_.appendChild(d("accept",S)),_.appendChild(d("reject",B));else{let A=_.appendChild(document.createElement("button"));A.name="accept",A.textContent=n.phrase("Accept"),A.onmousedown=S;let R=_.appendChild(document.createElement("button"));R.name="reject",R.textContent=n.phrase("Reject"),R.onmousedown=B}}if(r||e.fromA>=e.toA)return c;let m=o.state.field(oe).sliceString(e.fromA,e.endA),g=l&&n.facet(xn),p=D(),x=e.changes,v=0,y=!1;function D(){let _=c.appendChild(document.createElement("div"));return _.className="cm-deletedLine",_.appendChild(document.createElement("del"))}function G(_,S,B){for(let A=_;Au){let c=n.slice(e,r).indexOf(s.slice(i,t));if(c>-1)return[new M(e,e+c,i,i),new M(e+c+u,r,t,t)]}else if(u>l){let c=s.slice(i,t).indexOf(n.slice(e,r));if(c>-1)return[new M(e,e,i,i+c),new M(r,r,i+c+l,t)]}if(l==1||u==1)return[new M(e,r,i,t)];let d=Et(n,e,r,s,i,t);if(d){let[c,m,g]=d;return J(n,e,c,s,i,m).concat(J(n,c+g,r,s,m+g,t))}return Fn(n,e,r,s,i,t)}let ce=1e9,ue=0,Fe=!1;function Fn(n,e,r,s,i,t){let o=r-e,a=t-i;if(ce<1e9&&Math.min(o,a)>ce*16||ue>0&&Date.now()>ue)return Math.min(o,a)>ce*64?[new M(e,r,i,t)]:st(n,e,r,s,i,t);let l=Math.ceil((o+a)/2);Te.reset(l),Ee.reset(l);let u=(g,p)=>n.charCodeAt(e+g)==s.charCodeAt(i+p),d=(g,p)=>n.charCodeAt(r-g-1)==s.charCodeAt(t-p-1),c=(o-a)%2!=0?Ee:null,m=c?null:Te;for(let g=0;gce||ue>0&&!(g&63)&&Date.now()>ue)return st(n,e,r,s,i,t);let p=Te.advance(g,o,a,l,c,!1,u)||Ee.advance(g,o,a,l,m,!0,d);if(p)return jn(n,e,r,e+p[0],s,i,t,i+p[1])}return[new M(e,r,i,t)]}class Pt{constructor(){this.vec=[]}reset(e){this.len=e<<1;for(let r=0;rr)this.end+=2;else if(c>s)this.start+=2;else if(t){let m=i+(r-s)-l;if(m>=0&&m=r-d)return[g,i+g-m]}else{let g=r-t.vec[m];if(d>=g)return[d,c]}}}return null}}const Te=new Pt,Ee=new Pt;function jn(n,e,r,s,i,t,o,a){let l=!1;return!ie(n,s)&&++s==r&&(l=!0),!ie(i,a)&&++a==o&&(l=!0),l?[new M(e,r,t,o)]:J(n,e,s,i,t,a).concat(J(n,s,r,i,a,o))}function Tt(n,e){let r=1,s=Math.min(n,e);for(;rr||d>t||n.slice(a,u)!=s.slice(l,d)){if(o==1)return a-e-(ie(n,a)?0:1);o=o>>1}else{if(u==r||d==t)return u-e;a=u,l=d}}}function Ie(n,e,r,s,i,t){if(e==r||i==t||n.charCodeAt(r-1)!=s.charCodeAt(t-1))return 0;let o=Tt(r-e,t-i);for(let a=r,l=t;;){let u=a-o,d=l-o;if(u>1}else{if(u==e||d==i)return r-u;a=u,l=d}}}function Qe(n,e,r,s,i,t,o,a){let l=s.slice(i,t),u=null;for(;;){if(u||o=r)break;let m=n.slice(d,c),g=-1;for(;(g=l.indexOf(m,g+1))!=-1;){let p=je(n,c,r,s,i+g+m.length,t),x=Ie(n,e,d,s,i,i+g),v=m.length+p+x;(!u||u[2]>1}}function Et(n,e,r,s,i,t){let o=r-e,a=t-i;if(oi.fromA-e&&s.toB>i.fromB-e&&(n[r-1]=new M(s.fromA,i.toA,s.fromB,i.toB),n.splice(r--,1))}}function In(n,e,r){for(;;){Qt(r,1);let s=!1;for(let i=0;i3||a>3){let l=i==n.length-1?e.length:n[i+1].fromA,u=t.fromA-s,d=l-t.toA,c=lt(e,t.fromA,u),m=at(e,t.toA,d),g=t.fromA-c,p=m-t.toA;if((!o||!a)&&g&&p){let x=Math.max(o,a),[v,y,D]=o?[e,t.fromA,t.toA]:[r,t.fromB,t.toB];x>g&&e.slice(c,t.fromA)==v.slice(D-g,D)?(t=n[i]=new M(c,c+o,t.fromB-g,t.toB-g),c=t.fromA,m=at(e,t.toA,l-t.toA)):x>p&&e.slice(t.toA,m)==v.slice(y,y+p)&&(t=n[i]=new M(m-o,m,t.fromB+p,t.toB+p),m=t.toA,c=lt(e,t.fromA,t.fromA-s)),g=t.fromA-c,p=m-t.toA}if(g||p)t=n[i]=new M(t.fromA-g,t.toA+p,t.fromB-g,t.toB+p);else if(o){if(!a){let x=ct(e,t.fromA,t.toA),v,y=x<0?-1:dt(e,t.toA,t.fromA);x>-1&&(v=x-t.fromA)<=d&&e.slice(t.fromA,x)==e.slice(t.toA,t.toA+v)?t=n[i]=t.offset(v):y>-1&&(v=t.toA-y)<=u&&e.slice(t.fromA-v,t.fromA)==e.slice(y,t.toA)&&(t=n[i]=t.offset(-v))}}else{let x=ct(r,t.fromB,t.toB),v,y=x<0?-1:dt(r,t.toB,t.fromB);x>-1&&(v=x-t.fromB)<=d&&r.slice(t.fromB,x)==r.slice(t.toB,t.toB+v)?t=n[i]=t.offset(v):y>-1&&(v=t.toB-y)<=u&&r.slice(t.fromB-v,t.fromB)==r.slice(y,t.toB)&&(t=n[i]=t.offset(-v))}}s=t.toA}return Qt(n,3),n}let X;try{X=new RegExp("[\\p{Alphabetic}\\p{Number}]","u")}catch{}function Nt(n){return n>48&&n<58||n>64&&n<91||n>96&&n<123}function Vt(n,e){if(e==n.length)return 0;let r=n.charCodeAt(e);return r<192?Nt(r)?1:0:X?!Ft(r)||e==n.length-1?X.test(String.fromCharCode(r))?1:0:X.test(n.slice(e,e+2))?2:0:0}function Gt(n,e){if(!e)return 0;let r=n.charCodeAt(e-1);return r<192?Nt(r)?1:0:X?!jt(r)||e==1?X.test(String.fromCharCode(r))?1:0:X.test(n.slice(e-2,e))?2:0:0}const $t=8;function at(n,e,r){if(e==n.length||!Gt(n,e))return e;for(let s=e,i=e+r,t=0;t<$t;t++){let o=Vt(n,s);if(!o||s+o>i)return s;s+=o}return e}function lt(n,e,r){if(!e||!Vt(n,e))return e;for(let s=e,i=e-r,t=0;t<$t;t++){let o=Gt(n,s);if(!o||s-on>=55296&&n<=56319,jt=n=>n>=56320&&n<=57343;function ie(n,e){return!e||e==n.length||!Ft(n.charCodeAt(e-1))||!jt(n.charCodeAt(e))}function Hn(n,e,r){var s;let i=r?.override;return i?i(n,e):(ce=((s=r?.scanLimit)!==null&&s!==void 0?s:1e9)>>1,ue=r?.timeout?Date.now()+r.timeout:0,Fe=!1,In(n,e,J(n,0,n.length,e,0,e.length)))}function It(){return!Fe}function Wt(n,e,r){return Wn(Hn(n,e,r),n,e)}const V=St.define({combine:n=>n[0]}),Ne=ne.define(),Ht=St.define(),F=he.define({create(n){return null},update(n,e){for(let r of e.effects)r.is(Ne)&&(n=r.value);for(let r of e.state.facet(Ht))n=r(n,e);return n}});class q{constructor(e,r,s,i,t,o=!0){this.changes=e,this.fromA=r,this.toA=s,this.fromB=i,this.toB=t,this.precise=o}offset(e,r){return e||r?new q(this.changes,this.fromA+e,this.toA+e,this.fromB+r,this.toB+r,this.precise):this}get endA(){return Math.max(this.fromA,this.toA-1)}get endB(){return Math.max(this.fromB,this.toB-1)}static build(e,r,s){let i=Wt(e.toString(),r.toString(),s);return qt(i,e,r,0,0,It())}static updateA(e,r,s,i,t){return gt(mt(e,i,!0,s.length),e,r,s,t)}static updateB(e,r,s,i,t){return gt(mt(e,i,!1,r.length),e,r,s,t)}}function ut(n,e,r,s){let i=r.lineAt(n),t=s.lineAt(e);return i.to==n&&t.to==e&&nc+1&&v>m+1)break;g.push(p.offset(-u+s,-d+i)),[c,m]=ft(p.toA+s,p.toB+i,e,r),a++}o.push(new q(g,u,Math.max(u,c),d,Math.max(d,m),t))}return o}const ke=1e3;function ht(n,e,r,s){let i=0,t=n.length;for(;;){if(i==t){let d=0,c=0;i&&({toA:d,toB:c}=n[i-1]);let m=e-(r?d:c);return[d+m,c+m]}let o=i+t>>1,a=n[o],[l,u]=r?[a.fromA,a.toA]:[a.fromB,a.toB];if(l>e)t=o;else if(u<=e)i=o+1;else return s?[a.fromA,a.fromB]:[a.toA,a.toB]}}function mt(n,e,r,s){let i=[];return e.iterChangedRanges((t,o,a,l)=>{let u=0,d=r?e.length:s,c=0,m=r?s:e.length;t>ke&&([u,c]=ht(n,t-ke,r,!0)),o=u?i[i.length-1]={fromA:p.fromA,fromB:p.fromB,toA:d,toB:m,diffA:p.diffA+x,diffB:p.diffB+v}:i.push({fromA:u,toA:d,fromB:c,toB:m,diffA:x,diffB:v})}),i}function gt(n,e,r,s,i){if(!n.length)return e;let t=[];for(let o=0,a=0,l=0,u=0;;o++){let d=o==n.length?null:n[o],c=d?d.fromA+a:r.length,m=d?d.fromB+l:s.length;for(;uc||v.toB+l>m))break;t.push(v.offset(a,l)),u++}if(!d)break;let g=d.toA+a+d.diffA,p=d.toB+l+d.diffB,x=Wt(r.sliceString(c,g),s.sliceString(m,p),i);for(let v of qt(x,r,s,c,m,It()))t.push(v);for(a+=d.diffA,l+=d.diffB;ug&&v.fromB+l>p)break;u++}}return t}const Ut={scanLimit:500},Se=bn.fromClass(class{constructor(n){({deco:this.deco,gutter:this.gutter}=bt(n))}update(n){(n.docChanged||n.viewportChanged||qn(n.startState,n.state)||Un(n.startState,n.state))&&({deco:this.deco,gutter:this.gutter}=bt(n.view))}},{decorations:n=>n.deco}),Ce=_e.low(Rt({class:"cm-changeGutter",markers:n=>{var e;return((e=n.plugin(Se))===null||e===void 0?void 0:e.gutter)||Lt.empty}}));function qn(n,e){return n.field(F,!1)!=e.field(F,!1)}function Un(n,e){return n.facet(V)!=e.facet(V)}const pt=E.line({class:"cm-changedLine"}),Zt=E.mark({class:"cm-changedText"}),Zn=E.mark({tagName:"ins",class:"cm-insertedLine"}),Yn=E.mark({tagName:"del",class:"cm-deletedLine"}),vt=new class extends $e{constructor(){super(...arguments),this.elementClass="cm-changedLineGutter"}};function zn(n,e,r,s,i,t){let o=r?n.fromA:n.fromB,a=r?n.toA:n.toB,l=0;if(o!=a){i.add(o,o,pt),i.add(o,a,r?Yn:Zn),t&&t.add(o,o,vt);for(let u=e.iterRange(o,a-1),d=o;!u.next().done;){if(u.lineBreak){d++,i.add(d,d,pt),t&&t.add(d,d,vt);continue}let c=d+u.value.length;if(s)for(;l=d)break;(o?c.toA:c.toB)>u&&(!t||!t(n.state,c,a,l))&&zn(c,n.state.doc,o,s,a,l)}return{deco:a.finish(),gutter:l&&l.finish()}}class ye extends De{constructor(e){super(),this.height=e}eq(e){return this.height==e.height}toDOM(){let e=document.createElement("div");return e.className="cm-mergeSpacer",e.style.height=this.height+"px",e}updateDOM(e){return e.style.height=this.height+"px",!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}const Me=ne.define({map:(n,e)=>n.map(e)}),fe=he.define({create:()=>E.none,update:(n,e)=>{for(let r of e.effects)if(r.is(Me))return r.value;return n.map(e.changes)},provide:n=>T.decorations.from(n)}),Oe=.01;function xt(n,e){if(n.size!=e.size)return!1;let r=n.iter(),s=e.iter();for(;r.value;){if(r.from!=s.from||Math.abs(r.value.spec.widget.height-s.value.spec.widget.height)>1)return!1;r.next(),s.next()}return!0}function Xn(n,e,r){let s=new re,i=new re,t=n.state.field(fe).iter(),o=e.state.field(fe).iter(),a=0,l=0,u=0,d=0,c=n.viewport,m=e.viewport;for(let v=0;;v++){let y=vOe&&(d+=B,i.add(l,l,E.widget({widget:new ye(B),block:!0,side:-1})))}if(D>a+1e3&&ac.from&&lm.from){let _=Math.min(c.from-a,m.from-l);a+=_,l+=_,v--}else if(y)a=y.toA,l=y.toB;else break;for(;t.value&&t.fromOe&&i.add(e.state.doc.length,e.state.doc.length,E.widget({widget:new ye(g),block:!0,side:1}));let p=s.finish(),x=i.finish();xt(p,n.state.field(fe))||n.dispatch({effects:Me.of(p)}),xt(x,e.state.field(fe))||e.dispatch({effects:Me.of(x)})}const Ve=ne.define({map:(n,e)=>e.mapPos(n)});class Jn extends De{constructor(e){super(),this.lines=e}eq(e){return this.lines==e.lines}toDOM(e){let r=document.createElement("div");return r.className="cm-collapsedLines",r.textContent=e.state.phrase("$ unchanged lines",this.lines),r.addEventListener("click",s=>{let i=e.posAtDOM(s.target);e.dispatch({effects:Ve.of(i)});let{side:t,sibling:o}=e.state.facet(V);o&&o().dispatch({effects:Ve.of(Kn(i,e.state.field(F),t=="a"))})}),r}ignoreEvent(e){return e instanceof MouseEvent}get estimatedHeight(){return 27}get type(){return"collapsed-unchanged-code"}}function Kn(n,e,r){let s=0,i=0;for(let t=0;;t++){let o=t=n)return i+(n-s);[s,i]=r?[o.toA,o.toB]:[o.toB,o.toA]}}const er=he.define({create(n){return E.none},update(n,e){n=n.map(e.changes);for(let r of e.effects)r.is(Ve)&&(n=n.update({filter:s=>s!=r.value}));return n},provide:n=>T.decorations.from(n)});function Ge({margin:n=3,minSize:e=4}){return er.init(r=>tr(r,n,e))}function tr(n,e,r){let s=new re,i=n.facet(V).side=="a",t=n.field(F),o=1;for(let a=0;;a++){let l=a=r&&s.add(n.doc.line(u).from,n.doc.line(d).to,E.replace({widget:new Jn(c),block:!0})),!l)break;o=n.doc.lineAt(Math.min(n.doc.length,i?l.toA:l.toB)).number}return s.finish()}const nr=T.styleModule.of(new vn({".cm-mergeView":{overflowY:"auto"},".cm-mergeViewEditors":{display:"flex",alignItems:"stretch"},".cm-mergeViewEditor":{flexGrow:1,flexBasis:0,overflow:"hidden"},".cm-merge-revert":{width:"1.6em",flexGrow:0,flexShrink:0,position:"relative"},".cm-merge-revert button":{position:"absolute",display:"block",width:"100%",boxSizing:"border-box",textAlign:"center",background:"none",border:"none",font:"inherit",cursor:"pointer"}})),Yt=T.baseTheme({".cm-mergeView & .cm-scroller, .cm-mergeView &":{height:"auto !important",overflowY:"visible !important"},"&.cm-merge-a .cm-changedLine, .cm-deletedChunk":{backgroundColor:"rgba(160, 128, 100, .08)"},"&.cm-merge-b .cm-changedLine, .cm-inlineChangedLine":{backgroundColor:"rgba(100, 160, 128, .08)"},"&light.cm-merge-a .cm-changedText, &light .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ee443366, #ee443366) bottom/100% 2px no-repeat"},"&dark.cm-merge-a .cm-changedText, &dark .cm-deletedChunk .cm-deletedText":{background:"linear-gradient(#ffaa9966, #ffaa9966) bottom/100% 2px no-repeat"},"&light.cm-merge-b .cm-changedText":{background:"linear-gradient(#22bb22aa, #22bb22aa) bottom/100% 2px no-repeat"},"&dark.cm-merge-b .cm-changedText":{background:"linear-gradient(#88ff88aa, #88ff88aa) bottom/100% 2px no-repeat"},"&.cm-merge-b .cm-deletedText":{background:"#ff000033"},".cm-insertedLine, .cm-deletedLine, .cm-deletedLine del":{textDecoration:"none"},".cm-deletedChunk":{paddingLeft:"6px","& .cm-chunkButtons":{position:"absolute",insetInlineEnd:"5px"},"& button":{border:"none",cursor:"pointer",color:"white",margin:"0 2px",borderRadius:"3px","&[name=accept]":{background:"#2a2"},"&[name=reject]":{background:"#d43"}}},".cm-collapsedLines":{padding:"5px 5px 5px 10px",cursor:"pointer","&:before":{content:'"⦚"',marginInlineEnd:"7px"},"&:after":{content:'"⦚"',marginInlineStart:"7px"}},"&light .cm-collapsedLines":{color:"#444",background:"linear-gradient(to bottom, transparent 0, #f3f3f3 30%, #f3f3f3 70%, transparent 100%)"},"&dark .cm-collapsedLines":{color:"#ddd",background:"linear-gradient(to bottom, transparent 0, #222 30%, #222 70%, transparent 100%)"},".cm-changeGutter":{width:"3px",paddingLeft:"1px"},"&light.cm-merge-a .cm-changedLineGutter, &light .cm-deletedLineGutter":{background:"#e43"},"&dark.cm-merge-a .cm-changedLineGutter, &dark .cm-deletedLineGutter":{background:"#fa9"},"&light.cm-merge-b .cm-changedLineGutter":{background:"#2b2"},"&dark.cm-merge-b .cm-changedLineGutter":{background:"#8f8"},".cm-inlineChangedLineGutter":{background:"#75d"}}),wt=new Mt,Ae=new Mt;class rr{constructor(e){this.revertDOM=null,this.revertToA=!1,this.revertToLeft=!1,this.measuring=-1,this.diffConf=e.diffConfig||Ut;let r=[_e.low(Se),Yt,nr,fe,T.updateListener.of(c=>{this.measuring<0&&(c.heightChanged||c.viewportChanged)&&!c.transactions.some(m=>m.effects.some(g=>g.is(Me)))&&this.measure()})],s=[V.of({side:"a",sibling:()=>this.b,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&s.push(Ce);let i=Be.create({doc:e.a.doc,selection:e.a.selection,extensions:[e.a.extensions||[],T.editorAttributes.of({class:"cm-merge-a"}),Ae.of(s),r]}),t=[V.of({side:"b",sibling:()=>this.a,highlightChanges:e.highlightChanges!==!1,markGutter:e.gutter!==!1})];e.gutter!==!1&&t.push(Ce);let o=Be.create({doc:e.b.doc,selection:e.b.selection,extensions:[e.b.extensions||[],T.editorAttributes.of({class:"cm-merge-b"}),Ae.of(t),r]});this.chunks=q.build(i.doc,o.doc,this.diffConf);let a=[F.init(()=>this.chunks),wt.of(e.collapseUnchanged?Ge(e.collapseUnchanged):[])];i=i.update({effects:ne.appendConfig.of(a)}).state,o=o.update({effects:ne.appendConfig.of(a)}).state,this.dom=document.createElement("div"),this.dom.className="cm-mergeView",this.editorDOM=this.dom.appendChild(document.createElement("div")),this.editorDOM.className="cm-mergeViewEditors";let l=e.orientation||"a-b",u=document.createElement("div");u.className="cm-mergeViewEditor";let d=document.createElement("div");d.className="cm-mergeViewEditor",this.editorDOM.appendChild(l=="a-b"?u:d),this.editorDOM.appendChild(l=="a-b"?d:u),this.a=new T({state:i,parent:u,root:e.root,dispatchTransactions:c=>this.dispatch(c,this.a)}),this.b=new T({state:o,parent:d,root:e.root,dispatchTransactions:c=>this.dispatch(c,this.b)}),this.setupRevertControls(!!e.revertControls,e.revertControls=="b-to-a",e.renderRevertControl),e.parent&&e.parent.appendChild(this.dom),this.scheduleMeasure()}dispatch(e,r){if(e.some(s=>s.docChanged)){let s=e[e.length-1],i=e.reduce((o,a)=>o.compose(a.changes),_t.empty(e[0].startState.doc.length));this.chunks=r==this.a?q.updateA(this.chunks,s.newDoc,this.b.state.doc,i,this.diffConf):q.updateB(this.chunks,this.a.state.doc,s.newDoc,i,this.diffConf),r.update([...e,s.state.update({effects:Ne.of(this.chunks)})]);let t=r==this.a?this.b:this.a;t.update([t.state.update({effects:Ne.of(this.chunks)})]),this.scheduleMeasure()}else r.update(e)}reconfigure(e){if("diffConfig"in e&&(this.diffConf=e.diffConfig),"orientation"in e){let t=e.orientation!="b-a";if(t!=(this.editorDOM.firstChild==this.a.dom.parentNode)){let o=this.a.dom.parentNode,a=this.b.dom.parentNode;o.remove(),a.remove(),this.editorDOM.insertBefore(t?o:a,this.editorDOM.firstChild),this.editorDOM.appendChild(t?a:o),this.revertToLeft=!this.revertToLeft,this.revertDOM&&(this.revertDOM.textContent="")}}if("revertControls"in e||"renderRevertControl"in e){let t=!!this.revertDOM,o=this.revertToA,a=this.renderRevert;"revertControls"in e&&(t=!!e.revertControls,o=e.revertControls=="b-to-a"),"renderRevertControl"in e&&(a=e.renderRevertControl),this.setupRevertControls(t,o,a)}let r="highlightChanges"in e,s="gutter"in e,i="collapseUnchanged"in e;if(r||s||i){let t=[],o=[];if(r||s){let a=this.a.state.facet(V),l=s?e.gutter!==!1:a.markGutter,u=r?e.highlightChanges!==!1:a.highlightChanges;t.push(Ae.reconfigure([V.of({side:"a",sibling:()=>this.b,highlightChanges:u,markGutter:l}),l?Ce:[]])),o.push(Ae.reconfigure([V.of({side:"b",sibling:()=>this.a,highlightChanges:u,markGutter:l}),l?Ce:[]]))}if(i){let a=wt.reconfigure(e.collapseUnchanged?Ge(e.collapseUnchanged):[]);t.push(a),o.push(a)}this.a.dispatch({effects:t}),this.b.dispatch({effects:o})}this.scheduleMeasure()}setupRevertControls(e,r,s){this.revertToA=r,this.revertToLeft=this.revertToA==(this.editorDOM.firstChild==this.a.dom.parentNode),this.renderRevert=s,!e&&this.revertDOM?(this.revertDOM.remove(),this.revertDOM=null):e&&!this.revertDOM?(this.revertDOM=this.editorDOM.insertBefore(document.createElement("div"),this.editorDOM.firstChild.nextSibling),this.revertDOM.addEventListener("mousedown",i=>this.revertClicked(i)),this.revertDOM.className="cm-merge-revert"):this.revertDOM&&(this.revertDOM.textContent="")}scheduleMeasure(){if(this.measuring<0){let e=this.dom.ownerDocument.defaultView||window;this.measuring=e.requestAnimationFrame(()=>{this.measuring=-1,this.measure()})}}measure(){Xn(this.a,this.b,this.chunks),this.revertDOM&&this.updateRevertButtons()}updateRevertButtons(){let e=this.revertDOM,r=e.firstChild,s=this.a.viewport,i=this.b.viewport;for(let t=0;ts.to||o.fromB>i.to)break;if(o.fromA-1&&(this.dom.ownerDocument.defaultView||window).cancelAnimationFrame(this.measuring),this.dom.remove()}}function kt(n){let e=n.nextSibling;return n.remove(),e}const ir=new class extends $e{constructor(){super(...arguments),this.elementClass="cm-deletedLineGutter"}},or=_e.low(Rt({class:"cm-changeGutter",markers:n=>{var e;return((e=n.plugin(Se))===null||e===void 0?void 0:e.gutter)||Lt.empty},widgetMarker:(n,e)=>e instanceof zt?ir:null}));function sr(n){var e;let r=typeof n.original=="string"?Dt.of(n.original.split(/\r?\n/)):n.original,s=n.diffConfig||Ut;return[_e.low(Se),cr,Yt,T.editorAttributes.of({class:"cm-merge-b"}),Ht.of((i,t)=>{let o=t.effects.find(a=>a.is(We));return o&&(i=q.updateA(i,o.value.doc,t.startState.doc,o.value.changes,s)),t.docChanged&&(i=q.updateB(i,t.state.field(oe),t.newDoc,t.changes,s)),i}),V.of({highlightChanges:n.highlightChanges!==!1,markGutter:n.gutter!==!1,syntaxHighlightDeletions:n.syntaxHighlightDeletions!==!1,syntaxHighlightDeletionsMaxLength:3e3,mergeControls:(e=n.mergeControls)!==null&&e!==void 0?e:!0,overrideChunk:n.allowInlineDiffs?mr:void 0,side:"b"}),oe.init(()=>r),n.gutter!==!1?or:[],n.collapseUnchanged?Ge(n.collapseUnchanged):[],F.init(i=>q.build(r,i.doc,s))]}const We=ne.define(),oe=he.define({create:()=>Dt.empty,update(n,e){for(let r of e.effects)r.is(We)&&(n=r.value.doc);return n}}),Ct=new WeakMap;class zt extends De{constructor(e){super(),this.buildDOM=e,this.dom=null}eq(e){return this.dom==e.dom}toDOM(e){return this.dom||(this.dom=this.buildDOM(e))}}function ar(n,e,r){let s=Ct.get(e.changes);if(s)return s;let i=o=>{let{highlightChanges:a,syntaxHighlightDeletions:l,syntaxHighlightDeletionsMaxLength:u,mergeControls:d}=n.facet(V),c=document.createElement("div");if(c.className="cm-deletedChunk",d){let _=c.appendChild(document.createElement("div"));_.className="cm-chunkButtons";let S=A=>{A.preventDefault(),lr(o,o.posAtDOM(c))},B=A=>{A.preventDefault(),dr(o,o.posAtDOM(c))};if(typeof d=="function")_.appendChild(d("accept",S)),_.appendChild(d("reject",B));else{let A=_.appendChild(document.createElement("button"));A.name="accept",A.textContent=n.phrase("Accept"),A.onmousedown=S;let R=_.appendChild(document.createElement("button"));R.name="reject",R.textContent=n.phrase("Reject"),R.onmousedown=B}}if(r||e.fromA>=e.toA)return c;let m=o.state.field(oe).sliceString(e.fromA,e.endA),g=l&&n.facet(xn),p=D(),x=e.changes,v=0,y=!1;function D(){let _=c.appendChild(document.createElement("div"));return _.className="cm-deletedLine",_.appendChild(document.createElement("del"))}function G(_,S,B){for(let A=_;A-1&&YA){let H=document.createTextNode(m.slice(A,R));if(me){let pe=p.appendChild(document.createElement("span"));pe.className=me,pe.appendChild(H)}else p.appendChild(H);A=R}ge&&(y=!y)}}if(g&&e.toA-e.fromA<=u){let _=g.parser.parse(m),S=0;wn(_,{style:B=>kn(n,B)},(B,A,R)=>{B>S&&G(S,B,""),G(B,A,R),S=A}),G(S,m.length,"")}else G(0,m.length,"");return p.firstChild||p.appendChild(document.createElement("br")),c},t=E.widget({block:!0,side:-1,widget:new zt(i)});return Ct.set(e.changes,t),t}function lr(n,e){let{state:r}=n,s=e??r.selection.main.head,i=n.state.field(F).find(l=>l.fromB<=s&&l.endB>=s);if(!i)return!1;let t=n.state.sliceDoc(i.fromB,Math.max(i.fromB,i.toB-1)),o=n.state.field(oe);i.fromB!=i.toB&&i.toA<=o.length&&(t+=n.state.lineBreak);let a=_t.of({from:i.fromA,to:Math.min(o.length,i.toA),insert:t},o.length);return n.dispatch({effects:We.of({doc:a.apply(o),changes:a}),userEvent:"accept"}),!0}function dr(n,e){let{state:r}=n,s=e??r.selection.main.head,i=r.field(F).find(a=>a.fromB<=s&&a.endB>=s);if(!i)return!1;let o=r.field(oe).sliceString(i.fromA,Math.max(i.fromA,i.toA-1));return i.fromA!=i.toA&&i.toB<=r.doc.length&&(o+=r.lineBreak),n.dispatch({changes:{from:i.fromB,to:Math.min(r.doc.length,i.toB),insert:o},userEvent:"revert"}),!0}function yt(n){let e=new re;for(let r of n.field(F)){let s=n.facet(V).overrideChunk&&Xt(n,r);e.add(r.fromB,r.fromB,ar(n,r,!!s))}return e.finish()}const cr=he.define({create:n=>yt(n),update(n,e){return e.state.field(F,!1)!=e.startState.field(F,!1)?yt(e.state):n},provide:n=>T.decorations.from(n)}),Ot=new WeakMap;function Xt(n,e){let r=Ot.get(e);if(r!==void 0)return r;r=null;let s=n.field(oe),i=n.doc,t=s.lineAt(e.endA).number-s.lineAt(e.fromA).number+1,o=i.lineAt(e.endB).number-i.lineAt(e.fromB).number+1;e:if(t==o&&t<10){let a=[],l=0,u=e.fromA,d=e.fromB;for(let c of e.changes){if(c.fromA=e.endB)break;o=n.doc.lineAt(o.to+1)}return!0}const gr=Cn({String:Z.string,Number:Z.number,"True False":Z.bool,PropertyName:Z.propertyName,Null:Z.null,", :":Z.separator,"[ ]":Z.squareBracket,"{ }":Z.brace}),pr=yn.deserialize({version:14,states:"$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#ClOOQO'#Cr'#CrQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CtOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59W,59WO!iQPO,59WOVQPO,59QOqQPO'#CmO!nQPO,59`OOQO1G.k1G.kOVQPO'#CnO!vQPO,59aOOQO1G.r1G.rOOQO1G.l1G.lOOQO,59X,59XOOQO-E6k-E6kOOQO,59Y,59YOOQO-E6l-E6l",stateData:"#O~OeOS~OQSORSOSSOTSOWQO_ROgPO~OVXOgUO~O^[O~PVO[^O~O]_OVhX~OVaO~O]bO^iX~O^dO~O]_OVha~O]bO^ia~O",goto:"!kjPPPPPPkPPkqwPPPPk{!RPPP!XP!e!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",nodeNames:"⚠ JsonText True False Null Number String } { Object Property PropertyName : , ] [ Array",maxTerm:25,nodeProps:[["isolate",-2,6,11,""],["openedBy",7,"{",14,"["],["closedBy",8,"}",15,"]"]],propSources:[gr],skippedNodes:[0],repeatNodeCount:2,tokenData:"(|~RaXY!WYZ!W]^!Wpq!Wrs!]|}$u}!O$z!Q!R%T!R![&c![!]&t!}#O&y#P#Q'O#Y#Z'T#b#c'r#h#i(Z#o#p(r#q#r(w~!]Oe~~!`Wpq!]qr!]rs!xs#O!]#O#P!}#P;'S!];'S;=`$o<%lO!]~!}Og~~#QXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#m~#pR!Q![#y!c!i#y#T#Z#y~#|R!Q![$V!c!i$V#T#Z$V~$YR!Q![$c!c!i$c#T#Z$c~$fR!Q![!]!c!i!]#T#Z!]~$rP;=`<%l!]~$zO]~~$}Q!Q!R%T!R![&c~%YRT~!O!P%c!g!h%w#X#Y%w~%fP!Q![%i~%nRT~!Q![%i!g!h%w#X#Y%w~%zR{|&T}!O&T!Q![&Z~&WP!Q![&Z~&`PT~!Q![&Z~&hST~!O!P%c!Q![&c!g!h%w#X#Y%w~&yO[~~'OO_~~'TO^~~'WP#T#U'Z~'^P#`#a'a~'dP#g#h'g~'jP#X#Y'm~'rOR~~'uP#i#j'x~'{P#`#a(O~(RP#`#a(U~(ZOS~~(^P#f#g(a~(dP#i#j(g~(jP#X#Y(m~(rOQ~~(wOW~~(|OV~",tokenizers:[0],topRules:{JsonText:[0,1]},tokenPrec:0}),vr=An.define({name:"json",parser:pr.configure({props:[Bn.add({Object:it({except:/^\s*\}/}),Array:it({except:/^\s*\]/})}),Mn.add({"Object Array":_n})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function br(){return new On(vr)}const xr={class:"space-y-6"},wr={class:"flex items-end justify-between gap-4 flex-wrap"},kr={class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},Cr={class:"flex items-center gap-2"},yr={class:"pb-5 border-b border-border"},Or={class:"grid gap-3 sm:gap-4 sm:grid-cols-[1fr_auto_1fr] items-end"},Ar={class:"space-y-1.5"},Br=["value"],Mr=["value","disabled"],_r=["disabled"],Dr={class:"space-y-1.5"},Sr=["value"],Rr=["value","disabled"],Lr={key:0,class:"mt-4 flex flex-wrap items-center gap-2 justify-end"},Pr={key:0,class:"text-sm text-foreground-muted py-12 text-center"},Tr={key:1,class:"text-sm text-foreground-muted py-12 text-center"},Er={key:2,class:"bg-warning/10 border border-warning/30 rounded-lg p-5 space-y-3 text-sm"},Qr={key:0,class:"font-mono text-xs space-y-1"},Nr=["title","onClick"],Vr={key:1,class:"text-warning/90"},Gr={key:1,class:"text-warning/70 italic text-xs"},$r={key:3,class:"bg-danger/10 border border-danger/30 rounded-lg p-5 text-sm text-danger"},Fr={key:4,class:"bg-danger/10 border border-danger/30 rounded-lg p-5 text-sm text-danger"},jr={key:0,class:"text-xs text-foreground-muted -mt-2"},Ir={key:1,class:"bg-background border border-border rounded-lg"},Wr={class:"px-4 py-3 flex items-center justify-between gap-3"},Hr={class:"text-xs font-bold uppercase tracking-wider text-foreground-muted flex items-center gap-2"},qr={class:"text-[10px] px-1.5 py-0.5 rounded bg-warning/15 text-warning border border-warning/30 font-medium tracking-normal normal-case"},Ur=["aria-label"],Zr={key:0,class:"px-4 pb-4 pt-3 border-t border-border/60"},Yr={class:"font-mono text-xs space-y-1"},zr={key:2,class:"bg-background border border-border rounded-lg overflow-hidden"},Xr={class:"px-4 py-2.5 flex items-center justify-between gap-3 bg-surface border-b border-border"},Jr={class:"text-xs font-bold uppercase tracking-wider text-white flex items-center gap-2"},Kr={class:"font-mono normal-case tracking-normal text-sm font-medium"},ei={key:0,class:"text-[10px] px-1.5 py-0.5 rounded bg-success/15 text-success border border-success/30 font-medium tracking-normal normal-case"},ti={key:1,class:"text-[10px] px-1.5 py-0.5 rounded bg-danger/15 text-danger border border-danger/30 font-medium tracking-normal normal-case"},ni=["title","aria-pressed"],ri={key:3,class:"bg-background border border-border rounded-lg overflow-hidden"},ii={class:"px-4 py-2.5 flex items-center justify-between gap-3 bg-surface border-b border-border"},oi={class:"text-xs font-bold uppercase tracking-wider text-foreground-muted flex items-center gap-2"},si={class:"font-mono normal-case tracking-normal text-white text-sm font-medium"},ai=["aria-label"],li={key:4,class:"text-sm text-foreground-muted py-12 text-center"},At="orva:diff:sideBySide",bi={__name:"FunctionDiff",setup(n){const e=hn(),r=fn(),s=$(()=>e.params.name),i=$(()=>e.query.from||""),t=$(()=>e.query.to||""),o=P(null),a=P([]),l=P(null),u=P(""),d=P(""),c=P([]),m=P("Copy link"),g=P(!0),p=P(!0),x=P(!1),v=sn(),y=P(!0),D=P(null),G=$(()=>D.value===null?y.value:D.value);try{const h=typeof window<"u"&&window.localStorage?.getItem?.(At);h==="true"?D.value=!0:h==="false"&&(D.value=!1)}catch{}const _=()=>{const h=!G.value;D.value=h;try{window.localStorage?.setItem?.(At,String(h))}catch{}ve()},S=P(null),B=P(null);let A=null,R=null;const me=$(()=>o.value?.runtime?.startsWith("python")?[Rn()]:[Ln()]),ge=T.theme({"&.cm-merge-a .cm-changedLine":{backgroundColor:"rgba(248, 81, 73, 0.15)"},"&.cm-merge-b .cm-changedLine":{backgroundColor:"rgba(63, 185, 80, 0.15)"},"&.cm-merge-a .cm-changedText":{background:"none",backgroundColor:"rgba(248, 81, 73, 0.35)",borderRadius:"2px"},"&.cm-merge-b .cm-changedText":{background:"none",backgroundColor:"rgba(63, 185, 80, 0.30)",borderRadius:"2px"},"&.cm-merge-a .cm-changedLineGutter":{color:"#f85149"},"&.cm-merge-b .cm-changedLineGutter":{color:"#3fb950"},".cm-deletedChunk":{backgroundColor:"rgba(248, 81, 73, 0.15)"},".cm-deletedChunk .cm-deletedText":{background:"none",backgroundColor:"rgba(248, 81, 73, 0.35)",borderRadius:"2px"},".cm-deletedChunk .cm-changedLineGutter, .cm-deletedChunk .cm-deletedLineGutter":{color:"#f85149"},".cm-insertedLine, .cm-changedLine, .cm-inlineChangedLine":{backgroundColor:"rgba(63, 185, 80, 0.15)"},".cm-changedLine .cm-changedText, .cm-inlineChangedLine .cm-changedText":{background:"none",backgroundColor:"rgba(63, 185, 80, 0.30)",borderRadius:"2px"},".cm-changedLineGutter, .cm-inlineChangedLineGutter":{color:"#3fb950"}}),Y=h=>[Dn,...h,Sn,ge,Be.readOnly.of(!0),T.lineWrapping];let H=null;const pe=()=>{if(typeof window>"u"||!window.matchMedia)return;const h=window.matchMedia("(min-width: 768px)"),f=O=>{const b=!!O.matches;b!==y.value&&(y.value=b,D.value===null&&ve())};f(h),h.addEventListener?(h.addEventListener("change",f),H=()=>h.removeEventListener("change",f)):(h.addListener(f),H=()=>h.removeListener(f))},He=(h,f,O,b)=>h?G.value?new rr({a:{doc:f,extensions:Y(b)},b:{doc:O,extensions:Y(b)},parent:h,orientation:"a-b",revertControls:!1,highlightChanges:!0,gutter:!0}):new T({parent:h,state:Be.create({doc:O,extensions:[...Y(b),sr({original:f,mergeControls:!1})]})}):null,qe=()=>{R?.destroy?.(),R=null},Re=()=>{A?.destroy?.(),qe(),A=null},Ue=()=>{const h=U.value;!h||!p.value||h.before===h.after&&!h.added&&!h.removed||(R=He(B.value,h.before||"",h.after||"",[br()]))},ve=async()=>{if(await nt(),Re(),!l.value)return;const h=K.value;h&&(A=He(S.value,h.before||"",h.after||"",me.value)),Ue()},Ze=async()=>{if(u.value="",d.value="",l.value=null,Re(),!(!o.value||!i.value||!t.value||i.value===t.value))try{const h=await cn(o.value.id,i.value,t.value,"json");l.value=h.data,await ve()}catch(h){const f=h.response?.data?.error;u.value=f?.code||"INTERNAL",d.value=f?.message||h.message||"Failed to load diff.",u.value==="VERSION_GCD"&&(c.value=f?.details?.available_hashes||[])}},K=$(()=>l.value?.files?.find(h=>h.kind==="handler")),U=$(()=>l.value?.files?.find(h=>h.kind==="manifest")),be=$(()=>{const h=l.value?.from?.snapshot,f=l.value?.to?.snapshot;return!h||!f?[]:rt(h,f)}),Jt=h=>h.startsWith("+")?"text-success":h.startsWith("-")?"text-danger":"text-warning",Ye=$(()=>{const h=o.value?.code_hash||"";return a.value.filter(f=>f.status==="succeeded"&&f.code_hash).map(f=>({id:f.id,version:f.version,shortHash:(f.code_hash||"").slice(0,12),submittedAt:f.submitted_at,isActive:!!h&&f.code_hash===h}))}),ze=h=>{if(!h)return"";const f=new Date(h),O=f.toLocaleDateString(void 0,{month:"numeric",day:"numeric"}),b=f.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"});return`${O} ${b}`},Xe=h=>`v${h.version} · ${h.shortHash} · ${ze(h.submittedAt)}${h.isActive?" · active":""}`,ee=({from:h,to:f})=>{r.replace({query:{from:h??i.value,to:f??t.value}})},Kt=()=>{!i.value||!t.value||r.replace({query:{from:t.value,to:i.value}})},en=async()=>{const h=await pn(window.location.href);m.value=h?"Copied!":"Copy failed",setTimeout(()=>{m.value="Copy link"},1500)},se=$(()=>{const h=o.value?.code_hash;return h&&a.value.find(O=>O.status==="succeeded"&&O.code_hash===h)?.id||null}),te=$(()=>a.value.find(h=>h.id===i.value)||null),Je=$(()=>!!(te.value&&o.value?.code_hash&&te.value.code_hash===o.value.code_hash)),tn=()=>{if(!se.value||!o.value)return;const h=o.value.code_hash,O=a.value.filter(b=>b.status==="succeeded"&&b.code_hash&&b.code_hash!==h)[0];ee({from:O?.id||i.value,to:se.value})},ae=h=>a.value.find(f=>f.code_hash===h)||null,nn=h=>{const f=ae(h);if(!f)return;const O=a.value.find(b=>b.id===t.value);O&&c.value.length&&!c.value.includes(O.code_hash)?ee({from:f.id,to:se.value||t.value}):ee({from:f.id,to:t.value})},rn=async()=>{try{const f=((await Ke()).data?.functions||[]).find(b=>b.name===s.value);f&&(o.value=f);const O=await et(o.value.id,100);a.value=O.data.deployments||O.data||[]}catch{}},on=async()=>{if(x.value||!o.value||!te.value||Je.value)return;const h=te.value,f=(h.code_hash||"").slice(0,12);let O=`Code hash ${f}. The current version stays in history.`;try{const z=(await mn(h.id))?.data?.snapshot;if(z){const le=rt(o.value,z);le.length?O=`Rolling back to v${h.version} (code ${f}) will also change: diff --git a/backend/internal/server/ui_dist/assets/FunctionsList-ClWQkTrs.js b/backend/internal/server/ui_dist/assets/FunctionsList-BlLl9Ji5.js similarity index 96% rename from backend/internal/server/ui_dist/assets/FunctionsList-ClWQkTrs.js rename to backend/internal/server/ui_dist/assets/FunctionsList-BlLl9Ji5.js index 8636b06..c2ee24b 100644 --- a/backend/internal/server/ui_dist/assets/FunctionsList-ClWQkTrs.js +++ b/backend/internal/server/ui_dist/assets/FunctionsList-BlLl9Ji5.js @@ -1,3 +1,3 @@ -import{C as ee,U as te,o as se,y as oe,R as ne,V as le,a as r,b as t,k as c,d,h as L,f as l,_ as P,S as ie,e as ae,v as re,t as n,F as A,p as B,g as u,n as de,J as ue,W as ce,i as me,r as h,q as S,j as a,P as I,s as pe,X as xe,Y as V}from"./index-BMkkwZ9q.js";import{_ as w}from"./IconButton-BgeMzwXv.js";import{c as fe}from"./clipboard-CmSw2rR-.js";import{R as ve}from"./refresh-cw-C7sR7ShF.js";import{G as q}from"./globe-CR2M7Azm.js";import{L as G}from"./lock-Dpr2FIZ9.js";import{P as O}from"./pencil-DTkm5-NQ.js";import{T as F}from"./trash-2-BXf2uqQH.js";import{C as ge}from"./check-C4wzjDZN.js";import{C as he}from"./copy-CTb6u-fx.js";const be={class:"space-y-6"},ye={class:"flex items-start justify-between gap-4 flex-wrap"},_e={key:0,class:"space-y-3"},we={class:"flex items-center gap-2 flex-wrap"},ke={class:"relative flex-1 min-w-0 sm:min-w-[280px] max-w-full sm:max-w-[440px]"},Ce={class:"text-[11px] text-foreground-muted shrink-0 tabular-nums"},$e={class:"bg-background border border-border rounded-lg overflow-x-auto"},De={class:"sm:hidden divide-y divide-border"},Le={class:"flex items-start justify-between gap-2"},Se={class:"min-w-0 flex-1"},Re={class:"flex items-center gap-1.5 flex-wrap"},Te={class:"font-medium text-white truncate"},Ee={key:0,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-warning-tint text-warning-fg border border-warning-ring"},Pe={key:1,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-info-tint text-info-fg border border-info-ring"},Fe={key:0,class:"mt-1 text-xs text-foreground-muted line-clamp-2"},Ue={class:"mt-1.5 flex items-center gap-3 text-[11px] text-foreground-muted font-mono"},Ne={class:"flex items-center gap-1 shrink-0"},ze={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted space-y-3"},Me={class:"hidden sm:table w-full text-sm text-left"},je={class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},Ae={class:"px-4 py-3 w-8"},Be=["checked",".indeterminate"],Ie={class:"divide-y divide-border"},Ve={class:"px-4 py-3 align-middle"},qe=["checked","onChange"],Ge={class:"px-4 py-3 font-medium text-white"},Oe={class:"flex items-center gap-2 flex-wrap"},He={key:0,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-warning-tint text-warning-fg border border-warning-ring",title:"Outbound network enabled"},Je=["title"],We=["title"],Xe=["title"],Ye={class:"px-4 py-3 text-foreground hidden sm:table-cell"},Ze={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border border-border bg-background text-foreground-muted font-mono"},Ke={class:"px-4 py-3 text-foreground-muted font-mono text-xs hidden lg:table-cell"},Qe={class:"px-4 py-3 hidden md:table-cell align-middle"},et={class:"flex items-center gap-2 min-w-0"},tt=["title"],st={class:"px-4 py-3 text-foreground-muted hidden xl:table-cell"},ot={class:"px-4 py-3 text-right"},nt={class:"inline-flex items-center gap-1"},lt={key:0},it={colspan:"7",class:"px-6 py-8 text-center text-foreground-muted"},at={class:"space-y-3"},rt={key:0,class:"flex justify-center border-t border-border py-3 bg-surface/30"},dt=["disabled"],ut={key:1,class:"bg-background border border-border rounded-lg p-8 text-center space-y-4"},ct={key:0,class:"fixed bottom-[calc(1rem+env(safe-area-inset-bottom,0px))] left-1/2 -translate-x-1/2 z-30 flex items-center gap-3 bg-background border border-border shadow-lg rounded-full pl-4 pr-2 py-2"},mt={class:"text-xs text-white"},pt=25,$t={__name:"FunctionsList",setup(xt){const y=ee(),k=me(),m=h([]),R=h(0),x=h(!1),f=h(""),b=h(""),C=h(""),T=h(!1),i=h(new Set),v=S(()=>{const o=f.value.trim().toLowerCase();return o?m.value.filter(s=>s.name?.toLowerCase().includes(o)||s.description?.toLowerCase().includes(o)||s.runtime?.toLowerCase().includes(o)||s.id?.toLowerCase().includes(o)):m.value}),H=S(()=>m.value.lengthv.value.length>0&&v.value.every(o=>i.value.has(o.id))),J=S(()=>v.value.some(o=>i.value.has(o.id))),W=o=>{const s=new Set(i.value);s.has(o)?s.delete(o):s.add(o),i.value=s},X=()=>{if(E.value)i.value=new Set;else{const o=new Set(i.value);v.value.forEach(s=>o.add(s.id)),i.value=o}},U=o=>`${window.location.origin}/fn/${o.id}`,Y=async o=>{await fe(U(o))?(b.value=o.id,setTimeout(()=>{b.value===o.id&&(b.value="")},1500)):y.notify({title:"Copy failed",message:`Could not copy to clipboard. URL: +import{C as ee,U as te,o as se,y as oe,R as ne,V as le,a as r,b as t,k as c,d,h as L,f as l,_ as P,S as ie,e as ae,v as re,t as n,F as A,p as B,g as u,n as de,J as ue,W as ce,i as me,r as h,q as S,j as a,P as I,s as pe,X as xe,Y as V}from"./index-fIeDYqWy.js";import{_ as w}from"./IconButton-CnguiHlc.js";import{c as fe}from"./clipboard-CmSw2rR-.js";import{R as ve}from"./refresh-cw-9T7Tp2vI.js";import{G as q}from"./globe-DtEgS3Yf.js";import{L as G}from"./lock-D649KWfg.js";import{P as O}from"./pencil-IX2SrcHQ.js";import{T as F}from"./trash-2-B2Wniuw-.js";import{C as ge}from"./check-Cwg1V2MO.js";import{C as he}from"./copy-DJiur09W.js";const be={class:"space-y-6"},ye={class:"flex items-start justify-between gap-4 flex-wrap"},_e={key:0,class:"space-y-3"},we={class:"flex items-center gap-2 flex-wrap"},ke={class:"relative flex-1 min-w-0 sm:min-w-[280px] max-w-full sm:max-w-[440px]"},Ce={class:"text-[11px] text-foreground-muted shrink-0 tabular-nums"},$e={class:"bg-background border border-border rounded-lg overflow-x-auto"},De={class:"sm:hidden divide-y divide-border"},Le={class:"flex items-start justify-between gap-2"},Se={class:"min-w-0 flex-1"},Re={class:"flex items-center gap-1.5 flex-wrap"},Te={class:"font-medium text-white truncate"},Ee={key:0,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-warning-tint text-warning-fg border border-warning-ring"},Pe={key:1,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-info-tint text-info-fg border border-info-ring"},Fe={key:0,class:"mt-1 text-xs text-foreground-muted line-clamp-2"},Ue={class:"mt-1.5 flex items-center gap-3 text-[11px] text-foreground-muted font-mono"},Ne={class:"flex items-center gap-1 shrink-0"},ze={key:0,class:"px-6 py-8 text-center text-sm text-foreground-muted space-y-3"},Me={class:"hidden sm:table w-full text-sm text-left"},je={class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},Ae={class:"px-4 py-3 w-8"},Be=["checked",".indeterminate"],Ie={class:"divide-y divide-border"},Ve={class:"px-4 py-3 align-middle"},qe=["checked","onChange"],Ge={class:"px-4 py-3 font-medium text-white"},Oe={class:"flex items-center gap-2 flex-wrap"},He={key:0,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-warning-tint text-warning-fg border border-warning-ring",title:"Outbound network enabled"},Je=["title"],We=["title"],Xe=["title"],Ye={class:"px-4 py-3 text-foreground hidden sm:table-cell"},Ze={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border border-border bg-background text-foreground-muted font-mono"},Ke={class:"px-4 py-3 text-foreground-muted font-mono text-xs hidden lg:table-cell"},Qe={class:"px-4 py-3 hidden md:table-cell align-middle"},et={class:"flex items-center gap-2 min-w-0"},tt=["title"],st={class:"px-4 py-3 text-foreground-muted hidden xl:table-cell"},ot={class:"px-4 py-3 text-right"},nt={class:"inline-flex items-center gap-1"},lt={key:0},it={colspan:"7",class:"px-6 py-8 text-center text-foreground-muted"},at={class:"space-y-3"},rt={key:0,class:"flex justify-center border-t border-border py-3 bg-surface/30"},dt=["disabled"],ut={key:1,class:"bg-background border border-border rounded-lg p-8 text-center space-y-4"},ct={key:0,class:"fixed bottom-[calc(1rem+env(safe-area-inset-bottom,0px))] left-1/2 -translate-x-1/2 z-30 flex items-center gap-3 bg-background border border-border shadow-lg rounded-full pl-4 pr-2 py-2"},mt={class:"text-xs text-white"},pt=25,$t={__name:"FunctionsList",setup(xt){const y=ee(),k=me(),m=h([]),R=h(0),x=h(!1),f=h(""),b=h(""),C=h(""),T=h(!1),i=h(new Set),v=S(()=>{const o=f.value.trim().toLowerCase();return o?m.value.filter(s=>s.name?.toLowerCase().includes(o)||s.description?.toLowerCase().includes(o)||s.runtime?.toLowerCase().includes(o)||s.id?.toLowerCase().includes(o)):m.value}),H=S(()=>m.value.lengthv.value.length>0&&v.value.every(o=>i.value.has(o.id))),J=S(()=>v.value.some(o=>i.value.has(o.id))),W=o=>{const s=new Set(i.value);s.has(o)?s.delete(o):s.add(o),i.value=s},X=()=>{if(E.value)i.value=new Set;else{const o=new Set(i.value);v.value.forEach(s=>o.add(s.id)),i.value=o}},U=o=>`${window.location.origin}/fn/${o.id}`,Y=async o=>{await fe(U(o))?(b.value=o.id,setTimeout(()=>{b.value===o.id&&(b.value="")},1500)):y.notify({title:"Copy failed",message:`Could not copy to clipboard. URL: `+U(o)})},_=async o=>{x.value=!0;try{const s=await ce({limit:pt,offset:o}),e=s.data.functions||[];R.value=s.data.total??e.length,o===0?m.value=e:m.value=[...m.value,...e]}catch(s){console.error(s)}finally{x.value=!1}},Z=()=>_(m.value.length),N=()=>_(0),z=async o=>{if(await y.ask({title:`Delete "${o.name}"?`,message:"This is irreversible. Code, deployments, secrets, and routes for this function are removed.",confirmLabel:"Delete",danger:!0})){C.value=o.id;try{await V.delete(`/functions/${o.id}`),await N(),i.value.delete(o.id),i.value=new Set(i.value)}catch(e){const p=e.response?.data?.error?.message||e.message||"Delete failed";y.notify({title:"Delete failed",message:p,danger:!0})}finally{C.value=""}}},K=async()=>{const o=i.value.size;if(!await y.ask({title:`Delete ${o} ${o===1?"function":"functions"}?`,message:"Each one is irreversible. Code, deployments, secrets, and routes are removed.",confirmLabel:`Delete ${o}`,danger:!0}))return;T.value=!0;const e=[...i.value];let p=0;try{for(const Q of e)try{await V.delete(`/functions/${Q}`)}catch{p++}i.value=new Set,await N(),p&&y.notify({title:"Some deletes failed",message:`${p} of ${e.length} could not be deleted.`,danger:!0})}finally{T.value=!1}},M=te();let g=null;const j=()=>{g||(g=setTimeout(()=>{g=null,_(0)},300))};let $=null,D=null;return se(()=>{_(0),$=M.subscribe("function",j),D=M.subscribe("deployment",j)}),oe(()=>{$&&($(),$=null),D&&(D(),D=null),g&&(clearTimeout(g),g=null)}),ne(()=>_(0)),le(()=>{g&&(clearTimeout(g),g=null)}),(o,s)=>(a(),r("div",be,[t("div",ye,[s[7]||(s[7]=t("div",null,[t("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Functions "),t("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},[c(" Every deployed handler on this Orva instance. Each function runs in its own nsjail sandbox and is reachable via "),t("code",{class:"font-mono text-[11px]"},"/fn/"),c(" or any custom route you've attached. ")])],-1)),d(P,{onClick:s[0]||(s[0]=e=>l(k).push("/functions/new"))},{default:L(()=>[d(l(I),{class:"w-4 h-4"}),s[6]||(s[6]=c(" New Function ",-1))]),_:1})]),m.value.length>0||x.value?(a(),r("div",_e,[t("div",we,[t("div",ke,[d(l(ie),{class:"w-3.5 h-3.5 absolute left-2.5 top-1/2 -translate-y-1/2 text-foreground-muted/60 pointer-events-none"}),ae(t("input",{"onUpdate:modelValue":s[1]||(s[1]=e=>f.value=e),placeholder:"Search by name, runtime, or function id…",class:"w-full bg-background border border-border rounded-md pl-8 pr-3 py-1.5 text-base sm:text-xs text-foreground placeholder-foreground-muted/60 focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[re,f.value]])]),t("span",Ce,n(v.value.length)+" of "+n(m.value.length),1)]),t("div",$e,[t("ul",De,[(a(!0),r(A,null,B(v.value,e=>(a(),r("li",{key:e.id,class:"px-4 py-3 active:bg-surface-hover/50 transition-colors"},[t("div",Le,[t("div",Se,[t("div",Re,[t("span",Te,n(e.name),1),e.network_mode==="egress"?(a(),r("span",Ee,[d(l(q),{class:"w-3 h-3"}),s[8]||(s[8]=c(" egress ",-1))])):u("",!0),e.auth_mode&&e.auth_mode!=="none"?(a(),r("span",Pe,[d(l(G),{class:"w-3 h-3"}),c(" "+n(e.auth_mode==="platform_key"?"key":"signed"),1)])):u("",!0)]),e.description?(a(),r("p",Fe,n(e.description),1)):u("",!0),t("div",Ue,[t("span",null,n(e.runtime),1),t("span",null,n(e.cpus)+" CPU / "+n(e.memory_mb)+"MB",1)])]),t("div",Ne,[d(w,{icon:l(O),title:"Edit function",onClick:p=>l(k).push("/functions/"+e.name)},null,8,["icon","onClick"]),d(w,{icon:l(F),variant:"danger",title:"Delete function",disabled:C.value===e.id,onClick:p=>z(e)},null,8,["icon","disabled","onClick"])])])]))),128)),!v.value.length&&!x.value&&f.value?(a(),r("li",ze,[t("div",null,'No matches for "'+n(f.value)+'".',1),t("button",{class:"text-xs text-foreground hover:text-white underline underline-offset-2",onClick:s[2]||(s[2]=e=>f.value="")},"Clear search")])):u("",!0)]),t("table",Me,[t("thead",je,[t("tr",null,[t("th",Ae,[t("input",{type:"checkbox",checked:E.value,".indeterminate":J.value&&!E.value,class:"w-3.5 h-3.5 rounded border-border bg-background focus:outline-none focus:ring-1 focus:ring-white",onChange:X},null,40,Be)]),s[9]||(s[9]=t("th",{class:"px-4 py-3 font-medium"}," Name ",-1)),s[10]||(s[10]=t("th",{class:"px-4 py-3 font-medium hidden sm:table-cell"}," Runtime ",-1)),s[11]||(s[11]=t("th",{class:"px-4 py-3 font-medium hidden lg:table-cell"}," Resources ",-1)),s[12]||(s[12]=t("th",{class:"px-4 py-3 font-medium hidden md:table-cell"}," Function ID ",-1)),s[13]||(s[13]=t("th",{class:"px-4 py-3 font-medium hidden xl:table-cell"}," Last Update ",-1)),s[14]||(s[14]=t("th",{class:"px-4 py-3 font-medium text-right"}," Actions ",-1))])]),t("tbody",Ie,[(a(!0),r(A,null,B(v.value,e=>(a(),r("tr",{key:e.id,class:pe(["hover:bg-surface/50 transition-colors",{"bg-surface/30":i.value.has(e.id)}])},[t("td",Ve,[t("input",{checked:i.value.has(e.id),type:"checkbox",class:"w-3.5 h-3.5 rounded border-border bg-background focus:outline-none focus:ring-1 focus:ring-white",onChange:p=>W(e.id)},null,40,qe)]),t("td",Ge,[t("div",Oe,[t("span",null,n(e.name),1),e.network_mode==="egress"?(a(),r("span",He,[d(l(q),{class:"w-3 h-3"}),s[15]||(s[15]=c(" egress ",-1))])):u("",!0),e.auth_mode&&e.auth_mode!=="none"?(a(),r("span",{key:1,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-info-tint text-info-fg border border-info-ring",title:e.auth_mode==="platform_key"?"Requires Orva API key":"Requires HMAC signature"},[d(l(G),{class:"w-3 h-3"}),c(" "+n(e.auth_mode==="platform_key"?"key":"signed"),1)],8,Je)):u("",!0),e.rate_limit_per_min>0?(a(),r("span",{key:2,class:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] bg-primary/15 text-primary border border-primary/30 tabular-nums",title:`Rate limit: ${e.rate_limit_per_min}/min per IP`},[d(l(xe),{class:"w-3 h-3"}),c(" "+n(e.rate_limit_per_min)+"/m ",1)],8,We)):u("",!0)]),e.description?(a(),r("p",{key:0,class:"mt-1 text-xs font-normal text-foreground-muted line-clamp-2",title:e.description},n(e.description),9,Xe)):u("",!0)]),t("td",Ye,[t("span",Ze,n(e.runtime),1)]),t("td",Ke,n(e.cpus)+" CPU / "+n(e.memory_mb)+"MB ",1),t("td",Qe,[t("div",et,[t("code",{class:"text-xs font-mono text-foreground-muted bg-surface px-2 py-1 rounded border border-border truncate min-w-0 max-w-[14ch]",title:e.id},n(e.id),9,tt),d(w,{icon:b.value===e.id?l(ge):l(he),title:b.value===e.id?"Copied!":"Copy invoke URL",variant:b.value===e.id?"primary":"default",onClick:p=>Y(e)},null,8,["icon","title","variant","onClick"])])]),t("td",st,n(new Date(e.updated_at).toLocaleDateString()),1),t("td",ot,[t("div",nt,[d(w,{icon:l(O),title:"Edit function",onClick:p=>l(k).push("/functions/"+e.name)},null,8,["icon","onClick"]),d(w,{icon:l(F),variant:"danger",title:"Delete function",disabled:C.value===e.id,onClick:p=>z(e)},null,8,["icon","disabled","onClick"])])])],2))),128)),!v.value.length&&!x.value&&f.value?(a(),r("tr",lt,[t("td",it,[t("div",at,[t("div",null,'No matches for "'+n(f.value)+'".',1),t("button",{class:"text-xs text-foreground hover:text-white underline underline-offset-2",onClick:s[3]||(s[3]=e=>f.value="")},"Clear search")])])])):u("",!0)])]),H.value?(a(),r("div",rt,[t("button",{class:"text-xs text-foreground-muted hover:text-white transition-colors flex items-center gap-1.5",disabled:x.value,onClick:Z},[x.value?(a(),de(l(ve),{key:0,class:"w-3 h-3 animate-spin"})):u("",!0),c(" "+n(x.value?"Loading…":`Load more (${R.value-m.value.length} remaining)`),1)],8,dt)])):u("",!0)])])):u("",!0),!x.value&&m.value.length===0?(a(),r("div",ut,[s[17]||(s[17]=t("div",{class:"space-y-1.5"},[t("div",{class:"text-sm text-white"},"No functions deployed yet"),t("div",{class:"text-xs text-foreground-muted max-w-prose mx-auto leading-body"},[c(" Each function runs in its own nsjail sandbox and is reachable at "),t("code",{class:"font-mono text-[11px]"},"/fn/"),c(" the moment it's deployed. Pick a runtime, paste your handler, hit Deploy. ")])],-1)),t("div",null,[d(P,{onClick:s[4]||(s[4]=e=>l(k).push("/functions/new"))},{default:L(()=>[d(l(I),{class:"w-4 h-4"}),s[16]||(s[16]=c(" Deploy your first function ",-1))]),_:1})])])):u("",!0),d(ue,{name:"fade"},{default:L(()=>[i.value.size?(a(),r("div",ct,[t("span",mt,n(i.value.size)+" selected ",1),s[18]||(s[18]=t("span",{class:"w-px h-4 bg-border"},null,-1)),t("button",{class:"text-xs text-foreground-muted hover:text-white transition-colors px-2 py-1",onClick:s[5]||(s[5]=e=>i.value=new Set)}," Clear "),d(P,{variant:"danger",size:"sm",class:"!rounded-full px-4",loading:T.value,onClick:K},{default:L(()=>[d(l(F),{class:"w-3.5 h-3.5"}),c(" Delete "+n(i.value.size),1)]),_:1},8,["loading"])])):u("",!0)]),_:1})]))}};export{$t as default}; diff --git a/backend/internal/server/ui_dist/assets/IconButton-BgeMzwXv.js b/backend/internal/server/ui_dist/assets/IconButton-CnguiHlc.js similarity index 94% rename from backend/internal/server/ui_dist/assets/IconButton-BgeMzwXv.js rename to backend/internal/server/ui_dist/assets/IconButton-CnguiHlc.js index d47fbc0..65f8832 100644 --- a/backend/internal/server/ui_dist/assets/IconButton-BgeMzwXv.js +++ b/backend/internal/server/ui_dist/assets/IconButton-CnguiHlc.js @@ -1 +1 @@ -import{j as r,a,n,H as s,s as i,q as c}from"./index-BMkkwZ9q.js";const u=["title","disabled","aria-label"],g={__name:"IconButton",props:{icon:{type:[Object,Function],required:!0},title:{type:String,required:!0},variant:{type:String,default:"default",validator:e=>["default","danger","success","primary"].includes(e)},disabled:Boolean},setup(e){const t=e,o=c(()=>{switch(t.variant){case"danger":return"text-foreground-muted hover:text-danger-fg hover:bg-surface-hover focus:ring-red-500";case"success":return"text-foreground-muted hover:text-success hover:bg-surface-hover focus:ring-green-500";case"primary":return"text-primary hover:text-primary-hover bg-primary/10 hover:bg-primary/15 focus:ring-primary";default:return"text-foreground-muted hover:text-foreground hover:bg-surface-hover focus:ring-primary"}});return(d,l)=>(r(),a("button",{type:"button",title:e.title,disabled:e.disabled,"aria-label":e.title,class:i(["inline-flex items-center justify-center h-7 w-7 rounded-md transition-colors touch-expand-iconbtn","focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-background","disabled:opacity-40 disabled:cursor-not-allowed",o.value])},[(r(),n(s(e.icon),{class:"w-3.5 h-3.5"}))],10,u))}};export{g as _}; +import{j as r,a,n,H as s,s as i,q as c}from"./index-fIeDYqWy.js";const u=["title","disabled","aria-label"],g={__name:"IconButton",props:{icon:{type:[Object,Function],required:!0},title:{type:String,required:!0},variant:{type:String,default:"default",validator:e=>["default","danger","success","primary"].includes(e)},disabled:Boolean},setup(e){const t=e,o=c(()=>{switch(t.variant){case"danger":return"text-foreground-muted hover:text-danger-fg hover:bg-surface-hover focus:ring-red-500";case"success":return"text-foreground-muted hover:text-success hover:bg-surface-hover focus:ring-green-500";case"primary":return"text-primary hover:text-primary-hover bg-primary/10 hover:bg-primary/15 focus:ring-primary";default:return"text-foreground-muted hover:text-foreground hover:bg-surface-hover focus:ring-primary"}});return(d,l)=>(r(),a("button",{type:"button",title:e.title,disabled:e.disabled,"aria-label":e.title,class:i(["inline-flex items-center justify-center h-7 w-7 rounded-md transition-colors touch-expand-iconbtn","focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-background","disabled:opacity-40 disabled:cursor-not-allowed",o.value])},[(r(),n(s(e.icon),{class:"w-3.5 h-3.5"}))],10,u))}};export{g as _}; diff --git a/backend/internal/server/ui_dist/assets/InboundWebhooks-CeKosJjA.js b/backend/internal/server/ui_dist/assets/InboundWebhooks-DXNQPsKe.js similarity index 98% rename from backend/internal/server/ui_dist/assets/InboundWebhooks-CeKosJjA.js rename to backend/internal/server/ui_dist/assets/InboundWebhooks-DXNQPsKe.js index 447a403..e31b22e 100644 --- a/backend/internal/server/ui_dist/assets/InboundWebhooks-CeKosJjA.js +++ b/backend/internal/server/ui_dist/assets/InboundWebhooks-DXNQPsKe.js @@ -1,4 +1,4 @@ -import{c as K,C as J,o as Q,a as u,b as t,k as d,d as l,h as p,t as a,_ as h,g,F as P,p as R,ap as Z,q as U,a2 as ee,r as v,am as L,a9 as te,j as c,f as y,s as B,P as se,e as T,v as j,a1 as oe,aq as re,ar as ae}from"./index-BMkkwZ9q.js";import{E as ne}from"./format-CsU4_SPu.js";import{_ as D}from"./IconButton-BgeMzwXv.js";import{D as z}from"./Drawer-C3AFLOZb.js";import{R as le}from"./refresh-cw-C7sR7ShF.js";import{T as G}from"./trash-2-BXf2uqQH.js";const M=K("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]),ie={class:"space-y-6"},de={class:"flex items-start justify-between gap-4"},ue={class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},ce={class:"flex items-center gap-2"},pe={class:"text-xs text-foreground-muted"},me={key:0,class:"rounded-lg border border-amber-500/40 bg-amber-500/10 p-4 space-y-3"},xe={class:"flex items-center justify-between gap-4"},fe={class:"text-xs space-y-2"},ge={class:"ml-2 font-mono text-white break-all"},be={class:"ml-2 font-mono text-white break-all"},he={class:"mt-1 bg-background border border-border rounded p-3 text-[11px] font-mono text-white whitespace-pre-wrap overflow-x-auto"},ve={class:"bg-background border border-border rounded-lg overflow-x-auto"},ye={class:"sm:hidden divide-y divide-border"},_e={class:"flex items-start justify-between gap-2"},we={class:"min-w-0 flex-1"},ke={class:"flex items-center gap-2 flex-wrap"},$e={class:"font-medium text-white truncate"},Ce={class:"mt-1 text-[11px] text-foreground-muted font-mono break-all"},Se={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Te={class:"font-mono"},De={class:"flex items-center gap-1 shrink-0"},Oe={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},Be={class:"hidden sm:table w-full text-sm text-left"},je={class:"divide-y divide-border"},Ie={class:"px-4 py-3 font-medium text-white"},He={class:"flex flex-col"},Ve={class:"text-[10px] text-foreground-muted font-mono"},Ne={class:"px-4 py-3 font-mono text-xs text-foreground-muted hidden md:table-cell"},Ye={class:"break-all"},Pe={class:"px-4 py-3 hidden sm:table-cell"},Re={class:"inline-flex items-center px-2 py-0.5 rounded text-[11px] border bg-surface text-foreground-muted border-border font-mono"},Ue={class:"px-4 py-3 font-mono text-xs text-foreground-muted hidden lg:table-cell"},Le={class:"px-4 py-3 hidden md:table-cell"},ze={class:"px-4 py-3 text-foreground-muted text-xs hidden lg:table-cell"},Ge={class:"px-4 py-3 text-right"},Me={class:"inline-flex items-center gap-1"},Ae={key:0},Xe={class:"p-5 space-y-5 text-sm"},Ee={key:0,class:"text-xs text-danger-fg"},Fe={class:"flex items-center justify-end gap-2"},qe={key:0,class:"p-5 space-y-5 text-sm"},We={class:"text-xs text-foreground-muted"},Ke={key:0,class:"text-xs text-danger-fg"},Je={key:1,class:"space-y-1"},Qe={class:"text-xs uppercase tracking-wider text-foreground-muted"},Ze={class:"bg-background border border-border rounded p-3 text-[11px] font-mono text-white whitespace-pre-wrap overflow-x-auto"},et={class:"flex items-center justify-end gap-2"},it={__name:"InboundWebhooks",setup(tt){const A=te(),k=J(),O=U(()=>A.params.name),_=v(""),x=v([]),w=v(!1),$=v(!1),C=v(!1),m=v(null),b=U(()=>window.location.origin),n=L({open:!1,name:"",format:"hmac_sha256_hex",error:""}),r=L({open:!1,row:null,secret:"",body:'{"hello":"orva"}',error:"",response:null}),I=o=>o?new Date(o).toLocaleString():ne,S=async()=>{w.value=!0;try{_.value||(_.value=O.value);const o=await Z(_.value);x.value=o.data?.inbound_webhooks||[]}catch(o){console.error("load inbound webhooks failed",o),k.notify({title:"Failed to load inbound webhooks",message:o?.response?.data?.error?.message||o.message,danger:!0})}finally{w.value=!1}},X=()=>{n.name="",n.format="hmac_sha256_hex",n.error="",n.open=!0},E=async()=>{const o=n.name.trim();if(!o){n.error="Name is required";return}$.value=!0,n.error="";try{const e=await ae(_.value,{name:o,signature_format:n.format});m.value={...e.data.inbound_webhook,secret:e.data.secret,trigger_url:e.data.trigger_url},n.open=!1,await S()}catch(e){n.error=e?.response?.data?.error?.message||"Create failed"}finally{$.value=!1}},H=async o=>{if(await k.ask({title:"Delete inbound webhook?",message:`Trigger "${o.name}" (${o.id}) will stop accepting calls immediately. This cannot be undone.`,confirmLabel:"Delete",danger:!0}))try{await re(_.value,o.id),await S()}catch(i){k.notify({title:"Delete failed",message:i?.response?.data?.error?.message||i.message,danger:!0})}},V=o=>{r.row=o,r.secret="",r.body='{"hello":"orva"}',r.error="",r.response=null,r.open=!0},N=async(o,e)=>{const i=new TextEncoder,s=await crypto.subtle.importKey("raw",i.encode(o),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),f=await crypto.subtle.sign("HMAC",s,i.encode(e));return[...new Uint8Array(f)].map(W=>W.toString(16).padStart(2,"0")).join("")},F=async()=>{r.error="",r.response=null,C.value=!0;try{const o=r.row.signature_format;let e;if(o==="hmac_sha256_hex")e=await N(r.secret.trim(),r.body);else if(o==="github")e="sha256="+await N(r.secret.trim(),r.body);else{r.error=`Browser test only signs hmac_sha256_hex and github. For ${o}, use the CLI or curl with openssl.`;return}const i=b.value+"/webhook/"+r.row.id,s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",[r.row.signature_header]:e},body:r.body}),f=await s.text();r.response={status:s.status,body:f}}catch(o){r.error=o.message||"Test failed"}finally{C.value=!1}},q=o=>{const e=b.value+o.trigger_url,i=o.signature_format;return i==="github"?[`BODY='{"hello":"orva"}'`,`SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "${o.secret}" | sed 's/^.* //')`,`curl -X POST "${e}" \\`,' -H "Content-Type: application/json" \\',` -H "${o.signature_header}: sha256=$SIG" \\`,' -d "$BODY"'].join(` +import{c as K,C as J,o as Q,a as u,b as t,k as d,d as l,h as p,t as a,_ as h,g,F as P,p as R,ap as Z,q as U,a2 as ee,r as v,am as L,a9 as te,j as c,f as y,s as B,P as se,e as T,v as j,a1 as oe,aq as re,ar as ae}from"./index-fIeDYqWy.js";import{E as ne}from"./format-CsU4_SPu.js";import{_ as D}from"./IconButton-CnguiHlc.js";import{D as z}from"./Drawer-D-dO6A0-.js";import{R as le}from"./refresh-cw-9T7Tp2vI.js";import{T as G}from"./trash-2-B2Wniuw-.js";const M=K("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]),ie={class:"space-y-6"},de={class:"flex items-start justify-between gap-4"},ue={class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},ce={class:"flex items-center gap-2"},pe={class:"text-xs text-foreground-muted"},me={key:0,class:"rounded-lg border border-amber-500/40 bg-amber-500/10 p-4 space-y-3"},xe={class:"flex items-center justify-between gap-4"},fe={class:"text-xs space-y-2"},ge={class:"ml-2 font-mono text-white break-all"},be={class:"ml-2 font-mono text-white break-all"},he={class:"mt-1 bg-background border border-border rounded p-3 text-[11px] font-mono text-white whitespace-pre-wrap overflow-x-auto"},ve={class:"bg-background border border-border rounded-lg overflow-x-auto"},ye={class:"sm:hidden divide-y divide-border"},_e={class:"flex items-start justify-between gap-2"},we={class:"min-w-0 flex-1"},ke={class:"flex items-center gap-2 flex-wrap"},$e={class:"font-medium text-white truncate"},Ce={class:"mt-1 text-[11px] text-foreground-muted font-mono break-all"},Se={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Te={class:"font-mono"},De={class:"flex items-center gap-1 shrink-0"},Oe={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},Be={class:"hidden sm:table w-full text-sm text-left"},je={class:"divide-y divide-border"},Ie={class:"px-4 py-3 font-medium text-white"},He={class:"flex flex-col"},Ve={class:"text-[10px] text-foreground-muted font-mono"},Ne={class:"px-4 py-3 font-mono text-xs text-foreground-muted hidden md:table-cell"},Ye={class:"break-all"},Pe={class:"px-4 py-3 hidden sm:table-cell"},Re={class:"inline-flex items-center px-2 py-0.5 rounded text-[11px] border bg-surface text-foreground-muted border-border font-mono"},Ue={class:"px-4 py-3 font-mono text-xs text-foreground-muted hidden lg:table-cell"},Le={class:"px-4 py-3 hidden md:table-cell"},ze={class:"px-4 py-3 text-foreground-muted text-xs hidden lg:table-cell"},Ge={class:"px-4 py-3 text-right"},Me={class:"inline-flex items-center gap-1"},Ae={key:0},Xe={class:"p-5 space-y-5 text-sm"},Ee={key:0,class:"text-xs text-danger-fg"},Fe={class:"flex items-center justify-end gap-2"},qe={key:0,class:"p-5 space-y-5 text-sm"},We={class:"text-xs text-foreground-muted"},Ke={key:0,class:"text-xs text-danger-fg"},Je={key:1,class:"space-y-1"},Qe={class:"text-xs uppercase tracking-wider text-foreground-muted"},Ze={class:"bg-background border border-border rounded p-3 text-[11px] font-mono text-white whitespace-pre-wrap overflow-x-auto"},et={class:"flex items-center justify-end gap-2"},it={__name:"InboundWebhooks",setup(tt){const A=te(),k=J(),O=U(()=>A.params.name),_=v(""),x=v([]),w=v(!1),$=v(!1),C=v(!1),m=v(null),b=U(()=>window.location.origin),n=L({open:!1,name:"",format:"hmac_sha256_hex",error:""}),r=L({open:!1,row:null,secret:"",body:'{"hello":"orva"}',error:"",response:null}),I=o=>o?new Date(o).toLocaleString():ne,S=async()=>{w.value=!0;try{_.value||(_.value=O.value);const o=await Z(_.value);x.value=o.data?.inbound_webhooks||[]}catch(o){console.error("load inbound webhooks failed",o),k.notify({title:"Failed to load inbound webhooks",message:o?.response?.data?.error?.message||o.message,danger:!0})}finally{w.value=!1}},X=()=>{n.name="",n.format="hmac_sha256_hex",n.error="",n.open=!0},E=async()=>{const o=n.name.trim();if(!o){n.error="Name is required";return}$.value=!0,n.error="";try{const e=await ae(_.value,{name:o,signature_format:n.format});m.value={...e.data.inbound_webhook,secret:e.data.secret,trigger_url:e.data.trigger_url},n.open=!1,await S()}catch(e){n.error=e?.response?.data?.error?.message||"Create failed"}finally{$.value=!1}},H=async o=>{if(await k.ask({title:"Delete inbound webhook?",message:`Trigger "${o.name}" (${o.id}) will stop accepting calls immediately. This cannot be undone.`,confirmLabel:"Delete",danger:!0}))try{await re(_.value,o.id),await S()}catch(i){k.notify({title:"Delete failed",message:i?.response?.data?.error?.message||i.message,danger:!0})}},V=o=>{r.row=o,r.secret="",r.body='{"hello":"orva"}',r.error="",r.response=null,r.open=!0},N=async(o,e)=>{const i=new TextEncoder,s=await crypto.subtle.importKey("raw",i.encode(o),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),f=await crypto.subtle.sign("HMAC",s,i.encode(e));return[...new Uint8Array(f)].map(W=>W.toString(16).padStart(2,"0")).join("")},F=async()=>{r.error="",r.response=null,C.value=!0;try{const o=r.row.signature_format;let e;if(o==="hmac_sha256_hex")e=await N(r.secret.trim(),r.body);else if(o==="github")e="sha256="+await N(r.secret.trim(),r.body);else{r.error=`Browser test only signs hmac_sha256_hex and github. For ${o}, use the CLI or curl with openssl.`;return}const i=b.value+"/webhook/"+r.row.id,s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",[r.row.signature_header]:e},body:r.body}),f=await s.text();r.response={status:s.status,body:f}}catch(o){r.error=o.message||"Test failed"}finally{C.value=!1}},q=o=>{const e=b.value+o.trigger_url,i=o.signature_format;return i==="github"?[`BODY='{"hello":"orva"}'`,`SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "${o.secret}" | sed 's/^.* //')`,`curl -X POST "${e}" \\`,' -H "Content-Type: application/json" \\',` -H "${o.signature_header}: sha256=$SIG" \\`,' -d "$BODY"'].join(` `):i==="stripe"?[`BODY='{"hello":"orva"}'`,"TS=$(date +%s)",`SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "${o.secret}" | sed 's/^.* //')`,`curl -X POST "${e}" \\`,' -H "Content-Type: application/json" \\',` -H "${o.signature_header}: t=$TS,v1=$SIG" \\`,' -d "$BODY"'].join(` `):i==="slack"?[`BODY='{"hello":"orva"}'`,"TS=$(date +%s)",`SIG=$(printf 'v0:%s:%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "${o.secret}" | sed 's/^.* //')`,`curl -X POST "${e}" \\`,' -H "Content-Type: application/json" \\',' -H "X-Slack-Request-Timestamp: $TS" \\',` -H "${o.signature_header}: v0=$SIG" \\`,' -d "$BODY"'].join(` `):[`BODY='{"hello":"orva"}'`,`SIG=$(printf '%s' "$BODY" | ${i==="hmac_sha256_base64"?`openssl dgst -sha256 -hmac "${o.secret}" -binary | base64`:`openssl dgst -sha256 -hmac "${o.secret}" | sed 's/^.* //'`})`,`curl -X POST "${e}" \\`,' -H "Content-Type: application/json" \\',` -H "${o.signature_header}: $SIG" \\`,' -d "$BODY"'].join(` diff --git a/backend/internal/server/ui_dist/assets/Input-i1hDoPmt.js b/backend/internal/server/ui_dist/assets/Input-RIxOCNDe.js similarity index 95% rename from backend/internal/server/ui_dist/assets/Input-i1hDoPmt.js rename to backend/internal/server/ui_dist/assets/Input-RIxOCNDe.js index 8394de6..34a5c42 100644 --- a/backend/internal/server/ui_dist/assets/Input-i1hDoPmt.js +++ b/backend/internal/server/ui_dist/assets/Input-RIxOCNDe.js @@ -1 +1 @@ -import{j as t,a,k as u,t as o,g as l,b as n,s as i,n as c,H as m}from"./index-BMkkwZ9q.js";const f={class:"flex flex-col gap-1.5 w-full"},g={key:0,class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},x={key:0,class:"text-danger-fg"},y={class:"relative"},b=["type","value","placeholder","disabled"],h={key:0,class:"absolute left-3 top-1/2 -translate-y-1/2 text-foreground-muted"},k={key:1,class:"text-xs text-red-500"},p={key:2,class:"text-xs text-foreground-muted"},S={__name:"Input",props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},type:{type:String,default:"text"},placeholder:{type:String,default:""},error:{type:String,default:""},hint:{type:String,default:""},icon:{type:Object,default:null},required:Boolean,disabled:Boolean},emits:["update:modelValue"],setup(e){return(d,r)=>(t(),a("div",f,[e.label?(t(),a("label",g,[u(o(e.label)+" ",1),e.required?(t(),a("span",x,"*")):l("",!0)])):l("",!0),n("div",y,[n("input",{type:e.type,value:e.modelValue,class:i(["w-full bg-background border border-border rounded-md px-3 py-2 text-base sm:text-sm text-foreground placeholder-foreground-muted/50 focus:outline-none focus:ring-1 focus:ring-white focus:border-white transition-colors duration-200",{"pl-9":e.icon}]),placeholder:e.placeholder,disabled:e.disabled,onInput:r[0]||(r[0]=s=>d.$emit("update:modelValue",s.target.value))},null,42,b),e.icon?(t(),a("div",h,[(t(),c(m(e.icon),{class:"w-4 h-4"}))])):l("",!0)]),e.error?(t(),a("span",k,o(e.error),1)):l("",!0),e.hint&&!e.error?(t(),a("span",p,o(e.hint),1)):l("",!0)]))}};export{S as _}; +import{j as t,a,k as u,t as o,g as l,b as n,s as i,n as c,H as m}from"./index-fIeDYqWy.js";const f={class:"flex flex-col gap-1.5 w-full"},g={key:0,class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},x={key:0,class:"text-danger-fg"},y={class:"relative"},b=["type","value","placeholder","disabled"],h={key:0,class:"absolute left-3 top-1/2 -translate-y-1/2 text-foreground-muted"},k={key:1,class:"text-xs text-red-500"},p={key:2,class:"text-xs text-foreground-muted"},S={__name:"Input",props:{modelValue:{type:[String,Number],default:""},label:{type:String,default:""},type:{type:String,default:"text"},placeholder:{type:String,default:""},error:{type:String,default:""},hint:{type:String,default:""},icon:{type:Object,default:null},required:Boolean,disabled:Boolean},emits:["update:modelValue"],setup(e){return(d,r)=>(t(),a("div",f,[e.label?(t(),a("label",g,[u(o(e.label)+" ",1),e.required?(t(),a("span",x,"*")):l("",!0)])):l("",!0),n("div",y,[n("input",{type:e.type,value:e.modelValue,class:i(["w-full bg-background border border-border rounded-md px-3 py-2 text-base sm:text-sm text-foreground placeholder-foreground-muted/50 focus:outline-none focus:ring-1 focus:ring-white focus:border-white transition-colors duration-200",{"pl-9":e.icon}]),placeholder:e.placeholder,disabled:e.disabled,onInput:r[0]||(r[0]=s=>d.$emit("update:modelValue",s.target.value))},null,42,b),e.icon?(t(),a("div",h,[(t(),c(m(e.icon),{class:"w-4 h-4"}))])):l("",!0)]),e.error?(t(),a("span",k,o(e.error),1)):l("",!0),e.hint&&!e.error?(t(),a("span",p,o(e.hint),1)):l("",!0)]))}};export{S as _}; diff --git a/backend/internal/server/ui_dist/assets/InvocationsLog-TKQA0zvQ.js b/backend/internal/server/ui_dist/assets/InvocationsLog-BWp_rnmb.js similarity index 97% rename from backend/internal/server/ui_dist/assets/InvocationsLog-TKQA0zvQ.js rename to backend/internal/server/ui_dist/assets/InvocationsLog-BWp_rnmb.js index 90e50b5..99369cd 100644 --- a/backend/internal/server/ui_dist/assets/InvocationsLog-TKQA0zvQ.js +++ b/backend/internal/server/ui_dist/assets/InvocationsLog-BWp_rnmb.js @@ -1,4 +1,4 @@ -import{C as je,E as Ue,o as He,R as Je,V as Ge,y as Ke,a as r,b as o,d as u,h as S,_ as I,f as c,S as Ye,e as fe,v as We,a1 as Xe,F as N,p as M,g as v,t as l,n as pe,k as y,J as Ze,W as Qe,aC as me,r as f,aD as et,z as w,q as k,i as tt,j as a,s as z,w as G,aE as st,aF as ot,aG as at,aH as rt,Y as nt,aI as lt,aJ as ut,aK as it}from"./index-BMkkwZ9q.js";import{E as T}from"./format-CsU4_SPu.js";import{D as dt}from"./Drawer-C3AFLOZb.js";import{_ as re}from"./StatusBadge-Cj_PlPFZ.js";import{c as ct}from"./clipboard-CmSw2rR-.js";import{c as vt}from"./aiPrompts-DGZ6L7ag.js";import{C as xe}from"./circle-alert-DJMgVejj.js";import{R as K}from"./refresh-cw-C7sR7ShF.js";import{C as ft}from"./chevron-down-BTZfO5Md.js";import{C as pt}from"./check-C4wzjDZN.js";import{T as mt}from"./trash-2-BXf2uqQH.js";import{R as xt}from"./rotate-ccw-CsgWy1Bs.js";import{P as gt}from"./play-CPjfKIOc.js";import{S as bt}from"./sparkles-BVQ_t_Q_.js";import"./circle-DJWJGpv0.js";import"./clock-BWp9w4xs.js";const ht={class:"space-y-6"},yt={class:"flex items-center justify-between"},_t={class:"flex items-center gap-2 flex-wrap"},wt={class:"relative flex-1 min-w-[280px] max-w-[440px]"},kt=["value"],Ct={key:0,class:"bg-background border border-border rounded-lg px-6 py-12 text-center"},St={class:"mt-1 text-xs text-foreground-muted"},Tt={key:1,class:"bg-background border border-border rounded-lg overflow-x-auto"},Rt={class:"sm:hidden divide-y divide-border"},Dt=["onClick"],Ft={class:"flex items-start gap-3"},It=["checked","onChange"],qt={class:"min-w-0 flex-1"},$t={class:"flex items-center justify-between gap-2"},Vt={class:"font-medium text-white truncate"},Et={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Pt={key:0,class:"font-mono"},Lt={key:1,class:"font-mono"},Nt={key:2,class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] border bg-background font-mono text-info-fg border-info-ring"},Mt={key:0,class:"mt-1 text-[11px] text-foreground-muted font-mono break-all"},zt={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},At={class:"hidden sm:table w-full text-sm text-left"},Bt={class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},Ot={class:"px-4 py-3 w-8"},jt=["checked"],Ut={class:"divide-y divide-border"},Ht=["onClick"],Jt=["checked","onChange"],Gt={class:"px-4 py-3 text-foreground"},Kt={class:"px-4 py-3 font-medium text-white"},Yt=["onClick"],Wt={class:"px-4 py-3"},Xt={class:"px-4 py-3 hidden md:table-cell"},Zt={key:0,class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-info-fg border-info-ring"},Qt={key:1,class:"text-foreground-muted text-xs"},es={class:"px-4 py-3 text-foreground-muted font-mono text-xs hidden lg:table-cell"},ts={class:"px-4 py-3 text-foreground-muted font-mono text-xs hidden sm:table-cell"},ss={class:"px-4 py-3 hidden lg:table-cell"},os=["title","onClick"],as={key:1,class:"text-foreground-muted"},rs={class:"px-4 py-3 text-right text-foreground-muted font-mono text-xs hidden xl:table-cell"},ns={key:0},ls={colspan:"9",class:"px-6 py-8 text-center text-foreground-muted"},us={key:0,class:"flex justify-center border-t border-border py-3 bg-surface/30"},is=["disabled"],ds={key:0,class:"fixed bottom-4 left-1/2 -translate-x-1/2 z-30 flex items-center gap-3 bg-background border border-border shadow-lg rounded-full pl-4 pr-2 py-2"},cs={class:"text-xs text-white"},vs={key:0,class:"p-6 text-sm text-foreground-muted"},fs={key:1,class:"p-8 text-center"},ps={class:"mt-1 text-xs text-foreground-muted"},ms={key:2,class:"p-6 text-sm text-foreground-muted"},xs={key:3,class:"p-5 space-y-5"},gs={class:"flex items-center gap-2 flex-wrap"},bs={key:0,class:"inline-flex items-center px-2.5 py-1 rounded text-xs border bg-background font-mono text-info-fg border-info-ring"},hs={key:1,class:"inline-flex items-center px-2.5 py-1 rounded text-xs border bg-background font-mono text-foreground-muted"},ys={class:"grid grid-cols-2 gap-3 text-sm"},_s={key:0},ws={class:"bg-danger-tint border border-danger-ring rounded p-3 text-xs text-danger-fg font-mono whitespace-pre-wrap break-words"},ks={key:1},Cs={class:"bg-surface border border-border rounded p-3 space-y-3"},Ss={class:"flex items-center gap-2 font-mono text-xs"},Ts={class:"px-2 py-0.5 rounded bg-background text-white border border-border"},Rs={class:"text-foreground-muted truncate"},Ds={key:0},Fs={class:"bg-background border border-border rounded p-2 max-h-40 overflow-auto"},Is={class:"text-foreground-muted shrink-0"},qs={key:1},$s={class:"bg-background border border-border rounded p-2 text-xs text-foreground font-mono overflow-auto max-h-40 whitespace-pre-wrap break-words"},Vs={key:2,class:"text-[11px] text-warning-fg"},Es={key:2},Ps={class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},Ls={class:"bg-surface border border-border rounded p-3 text-xs font-mono space-y-1 max-h-72 overflow-auto"},Ns={class:"text-foreground-muted text-[10px] tabular-nums"},Ms={class:"text-white truncate"},zs={key:0,class:"text-[10px] text-foreground-muted truncate"},As={class:"flex items-center justify-between mb-2"},Bs={class:"bg-surface border border-border rounded p-3 text-xs text-foreground font-mono overflow-auto max-h-72 whitespace-pre-wrap break-words"},Os={class:"pt-2 border-t border-border flex items-center gap-3"},js={key:1,class:"text-xs text-foreground-muted"},Us=50,uo={__name:"InvocationsLog",setup(Hs){const C=je(),Y=tt(),x=f([]),A=f(0),b=f(!1),B=f(""),W=f(!1),O=f(!1),X=f(!1),j=f(""),n=f(null),m=f(new Set),_=f(""),U=f([]),ge=t=>{switch(t){case"error":return"text-danger-fg";case"warn":return"text-warning-fg";case"debug":return"text-foreground-muted";default:return"text-primary-light"}},be=t=>{if(!t)return"";try{const e=new Date(t);return e.toLocaleTimeString(void 0,{hour12:!1})+"."+String(e.getMilliseconds()).padStart(3,"0")}catch{return t}},H=f(!1),Z=f({}),d=f(null),D=f(!1),q=f(!1),$=f(!1),R=f(null);let V=null;const he=k(()=>x.value.lengthx.value.length>0&&x.value.every(t=>m.value.has(t.id))),ye=k(()=>x.value.some(t=>m.value.has(t.id))),ee=f(null);Ue(()=>ye.value&&!Q.value,t=>{ee.value&&(ee.value.indeterminate=t)},{immediate:!0});const ne=t=>{const e=new Set(m.value);e.has(t)?e.delete(t):e.add(t),m.value=e},_e=()=>{if(Q.value)m.value=new Set;else{const t=new Set(m.value);x.value.forEach(e=>t.add(e.id)),m.value=t}},p=f({fnId:"",status:"",range:"",q:""}),we=[{value:"",label:"All"},{value:"success",label:"Success"},{value:"error",label:"Error"}],ke=[{value:"",label:"All time"},{value:"1h",label:"1h"},{value:"24h",label:"24h"},{value:"7d",label:"7d"}],te=k(()=>!!(p.value.fnId||p.value.status||p.value.range||p.value.q)),Ce=()=>{p.value={fnId:"",status:"",range:"",q:""},h()};let se=null;const Se=()=>{se&&clearTimeout(se),se=setTimeout(()=>h(),300)},oe=()=>h(),Te=t=>{if(!t)return"";const e={"1h":36e5,"24h":864e5,"7d":7*864e5}[t];return e?new Date(Date.now()-e).toISOString():""},Re=k(()=>n.value?`Invocation · ${n.value.id?.substring(0,14)}`:"Invocation"),De=k(()=>D.value?"request not captured":d.value?.truncated?"body was truncated; replay would be inaccurate":"Re-run this exact request against the current code"),Fe=k(()=>{const t=n.value;return t?typeof t.status_code=="number"&&t.status_code>=500?!0:!!t.error_message:!1}),Ie=k(()=>_.value?"Build a paste-ready debug prompt with source + request + stderr":"no stderr to debug from"),F={props:{label:String,value:[String,Number],mono:Boolean},template:` +import{C as je,E as Ue,o as He,R as Je,V as Ge,y as Ke,a as r,b as o,d as u,h as S,_ as I,f as c,S as Ye,e as fe,v as We,a1 as Xe,F as N,p as M,g as v,t as l,n as pe,k as y,J as Ze,W as Qe,aC as me,r as f,aD as et,z as w,q as k,i as tt,j as a,s as z,w as G,aE as st,aF as ot,aG as at,aH as rt,Y as nt,aI as lt,aJ as ut,aK as it}from"./index-fIeDYqWy.js";import{E as T}from"./format-CsU4_SPu.js";import{D as dt}from"./Drawer-D-dO6A0-.js";import{_ as re}from"./StatusBadge-U9tC82MH.js";import{c as ct}from"./clipboard-CmSw2rR-.js";import{c as vt}from"./aiPrompts-DGZ6L7ag.js";import{C as xe}from"./circle-alert-C9zmFbXU.js";import{R as K}from"./refresh-cw-9T7Tp2vI.js";import{C as ft}from"./chevron-down-BcMN1rmG.js";import{C as pt}from"./check-Cwg1V2MO.js";import{T as mt}from"./trash-2-B2Wniuw-.js";import{R as xt}from"./rotate-ccw-BYpihd4d.js";import{P as gt}from"./play-CmOm4UFE.js";import{S as bt}from"./sparkles-B00DiY2I.js";import"./circle-u9aj3idX.js";import"./clock-C4Bm6ngE.js";const ht={class:"space-y-6"},yt={class:"flex items-center justify-between"},_t={class:"flex items-center gap-2 flex-wrap"},wt={class:"relative flex-1 min-w-[280px] max-w-[440px]"},kt=["value"],Ct={key:0,class:"bg-background border border-border rounded-lg px-6 py-12 text-center"},St={class:"mt-1 text-xs text-foreground-muted"},Tt={key:1,class:"bg-background border border-border rounded-lg overflow-x-auto"},Rt={class:"sm:hidden divide-y divide-border"},Dt=["onClick"],Ft={class:"flex items-start gap-3"},It=["checked","onChange"],qt={class:"min-w-0 flex-1"},$t={class:"flex items-center justify-between gap-2"},Vt={class:"font-medium text-white truncate"},Et={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Pt={key:0,class:"font-mono"},Lt={key:1,class:"font-mono"},Nt={key:2,class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] border bg-background font-mono text-info-fg border-info-ring"},Mt={key:0,class:"mt-1 text-[11px] text-foreground-muted font-mono break-all"},zt={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},At={class:"hidden sm:table w-full text-sm text-left"},Bt={class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},Ot={class:"px-4 py-3 w-8"},jt=["checked"],Ut={class:"divide-y divide-border"},Ht=["onClick"],Jt=["checked","onChange"],Gt={class:"px-4 py-3 text-foreground"},Kt={class:"px-4 py-3 font-medium text-white"},Yt=["onClick"],Wt={class:"px-4 py-3"},Xt={class:"px-4 py-3 hidden md:table-cell"},Zt={key:0,class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-info-fg border-info-ring"},Qt={key:1,class:"text-foreground-muted text-xs"},es={class:"px-4 py-3 text-foreground-muted font-mono text-xs hidden lg:table-cell"},ts={class:"px-4 py-3 text-foreground-muted font-mono text-xs hidden sm:table-cell"},ss={class:"px-4 py-3 hidden lg:table-cell"},os=["title","onClick"],as={key:1,class:"text-foreground-muted"},rs={class:"px-4 py-3 text-right text-foreground-muted font-mono text-xs hidden xl:table-cell"},ns={key:0},ls={colspan:"9",class:"px-6 py-8 text-center text-foreground-muted"},us={key:0,class:"flex justify-center border-t border-border py-3 bg-surface/30"},is=["disabled"],ds={key:0,class:"fixed bottom-4 left-1/2 -translate-x-1/2 z-30 flex items-center gap-3 bg-background border border-border shadow-lg rounded-full pl-4 pr-2 py-2"},cs={class:"text-xs text-white"},vs={key:0,class:"p-6 text-sm text-foreground-muted"},fs={key:1,class:"p-8 text-center"},ps={class:"mt-1 text-xs text-foreground-muted"},ms={key:2,class:"p-6 text-sm text-foreground-muted"},xs={key:3,class:"p-5 space-y-5"},gs={class:"flex items-center gap-2 flex-wrap"},bs={key:0,class:"inline-flex items-center px-2.5 py-1 rounded text-xs border bg-background font-mono text-info-fg border-info-ring"},hs={key:1,class:"inline-flex items-center px-2.5 py-1 rounded text-xs border bg-background font-mono text-foreground-muted"},ys={class:"grid grid-cols-2 gap-3 text-sm"},_s={key:0},ws={class:"bg-danger-tint border border-danger-ring rounded p-3 text-xs text-danger-fg font-mono whitespace-pre-wrap break-words"},ks={key:1},Cs={class:"bg-surface border border-border rounded p-3 space-y-3"},Ss={class:"flex items-center gap-2 font-mono text-xs"},Ts={class:"px-2 py-0.5 rounded bg-background text-white border border-border"},Rs={class:"text-foreground-muted truncate"},Ds={key:0},Fs={class:"bg-background border border-border rounded p-2 max-h-40 overflow-auto"},Is={class:"text-foreground-muted shrink-0"},qs={key:1},$s={class:"bg-background border border-border rounded p-2 text-xs text-foreground font-mono overflow-auto max-h-40 whitespace-pre-wrap break-words"},Vs={key:2,class:"text-[11px] text-warning-fg"},Es={key:2},Ps={class:"text-xs uppercase tracking-wider text-foreground-muted mb-2"},Ls={class:"bg-surface border border-border rounded p-3 text-xs font-mono space-y-1 max-h-72 overflow-auto"},Ns={class:"text-foreground-muted text-[10px] tabular-nums"},Ms={class:"text-white truncate"},zs={key:0,class:"text-[10px] text-foreground-muted truncate"},As={class:"flex items-center justify-between mb-2"},Bs={class:"bg-surface border border-border rounded p-3 text-xs text-foreground font-mono overflow-auto max-h-72 whitespace-pre-wrap break-words"},Os={class:"pt-2 border-t border-border flex items-center gap-3"},js={key:1,class:"text-xs text-foreground-muted"},Us=50,uo={__name:"InvocationsLog",setup(Hs){const C=je(),Y=tt(),x=f([]),A=f(0),b=f(!1),B=f(""),W=f(!1),O=f(!1),X=f(!1),j=f(""),n=f(null),m=f(new Set),_=f(""),U=f([]),ge=t=>{switch(t){case"error":return"text-danger-fg";case"warn":return"text-warning-fg";case"debug":return"text-foreground-muted";default:return"text-primary-light"}},be=t=>{if(!t)return"";try{const e=new Date(t);return e.toLocaleTimeString(void 0,{hour12:!1})+"."+String(e.getMilliseconds()).padStart(3,"0")}catch{return t}},H=f(!1),Z=f({}),d=f(null),D=f(!1),q=f(!1),$=f(!1),R=f(null);let V=null;const he=k(()=>x.value.lengthx.value.length>0&&x.value.every(t=>m.value.has(t.id))),ye=k(()=>x.value.some(t=>m.value.has(t.id))),ee=f(null);Ue(()=>ye.value&&!Q.value,t=>{ee.value&&(ee.value.indeterminate=t)},{immediate:!0});const ne=t=>{const e=new Set(m.value);e.has(t)?e.delete(t):e.add(t),m.value=e},_e=()=>{if(Q.value)m.value=new Set;else{const t=new Set(m.value);x.value.forEach(e=>t.add(e.id)),m.value=t}},p=f({fnId:"",status:"",range:"",q:""}),we=[{value:"",label:"All"},{value:"success",label:"Success"},{value:"error",label:"Error"}],ke=[{value:"",label:"All time"},{value:"1h",label:"1h"},{value:"24h",label:"24h"},{value:"7d",label:"7d"}],te=k(()=>!!(p.value.fnId||p.value.status||p.value.range||p.value.q)),Ce=()=>{p.value={fnId:"",status:"",range:"",q:""},h()};let se=null;const Se=()=>{se&&clearTimeout(se),se=setTimeout(()=>h(),300)},oe=()=>h(),Te=t=>{if(!t)return"";const e={"1h":36e5,"24h":864e5,"7d":7*864e5}[t];return e?new Date(Date.now()-e).toISOString():""},Re=k(()=>n.value?`Invocation · ${n.value.id?.substring(0,14)}`:"Invocation"),De=k(()=>D.value?"request not captured":d.value?.truncated?"body was truncated; replay would be inaccurate":"Re-run this exact request against the current code"),Fe=k(()=>{const t=n.value;return t?typeof t.status_code=="number"&&t.status_code>=500?!0:!!t.error_message:!1}),Ie=k(()=>_.value?"Build a paste-ready debug prompt with source + request + stderr":"no stderr to debug from"),F={props:{label:String,value:[String,Number],mono:Boolean},template:`
{{ label }}
{{ value }}
diff --git a/backend/internal/server/ui_dist/assets/Jobs-BuEpd4mz.js b/backend/internal/server/ui_dist/assets/Jobs-CU8XnJK3.js similarity index 96% rename from backend/internal/server/ui_dist/assets/Jobs-BuEpd4mz.js rename to backend/internal/server/ui_dist/assets/Jobs-CU8XnJK3.js index 187817e..e07f546 100644 --- a/backend/internal/server/ui_dist/assets/Jobs-BuEpd4mz.js +++ b/backend/internal/server/ui_dist/assets/Jobs-CU8XnJK3.js @@ -1 +1 @@ -import{c as O,C as G,o as K,G as X,a as r,b as e,k as d,t as l,F as w,p as C,d as i,h as m,_ as v,f as u,g as c,ax as Y,q as I,am as Q,r as J,j as o,P as Z,e as q,a1 as j,v as V,ab as ee,s as $,n as S,H as F,W as te,ay as se,az as ae,aA as ne}from"./index-BMkkwZ9q.js";import{E as L}from"./format-CsU4_SPu.js";import{_ as D}from"./IconButton-BgeMzwXv.js";import{D as le}from"./Drawer-C3AFLOZb.js";import{R as P}from"./rotate-ccw-CsgWy1Bs.js";import{T as R}from"./trash-2-BXf2uqQH.js";import{C as oe,a as re}from"./circle-DJWJGpv0.js";import{C as de,a as z}from"./clock-BWp9w4xs.js";const B=O("inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);const ie=O("refresh-ccw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]),ue={class:"space-y-4"},ce={class:"flex items-start justify-between gap-4 flex-wrap"},fe={class:"flex items-center gap-2 text-xs text-foreground-muted"},me={class:"flex items-center gap-2"},pe={class:"flex items-center gap-2 sm:flex-wrap overflow-x-auto sm:overflow-visible scrollable snap-x min-w-0 flex-1"},xe={key:0,class:"ml-1 opacity-70 tabular-nums"},ge={class:"flex items-center gap-2 shrink-0"},he={class:"p-5 space-y-5 text-sm"},ve=["value"],ye={class:"flex items-center gap-2 text-xs text-foreground-muted"},be={key:0},_e={key:1,class:"text-xs text-danger-fg"},ke={class:"flex items-center justify-end gap-2"},we={class:"bg-background border border-border rounded-lg overflow-x-auto"},Ce={class:"sm:hidden divide-y divide-border"},qe={class:"flex items-start justify-between gap-2"},Se={class:"min-w-0 flex-1"},De={class:"font-medium text-white truncate"},Ae={class:"text-[10px] text-foreground-muted font-mono break-all"},Ie={class:"mt-2"},Je=["title"],Le={class:"mt-2 grid grid-cols-2 gap-x-3 gap-y-1 text-[11px] text-foreground-muted"},Ee={class:"col-span-2"},Me={class:"flex items-center gap-1 shrink-0"},Ne={key:0,class:"px-4 py-12 text-center"},Ve={class:"text-foreground-muted text-sm"},$e={class:"hidden sm:table w-full text-sm text-left"},Fe={class:"divide-y divide-border"},Pe={class:"px-4 py-3 font-medium text-white"},Re={class:"flex flex-col"},ze={class:"text-[10px] text-foreground-muted font-mono"},Be={class:"px-4 py-3"},Oe=["title"],Te={class:"px-4 py-3 text-foreground-muted text-xs hidden md:table-cell"},Ue={class:"px-4 py-3 text-foreground-muted text-xs hidden lg:table-cell"},He={class:"px-4 py-3 text-foreground-muted text-xs hidden xl:table-cell"},We={class:"px-4 py-3 text-right"},Ge={class:"inline-flex items-center gap-1"},Ke={key:0},Xe={colspan:"6",class:"px-4 py-12 text-center"},Ye={class:"text-foreground-muted text-sm"},ot={__name:"Jobs",setup(Qe){const A=G(),p=J([]),g=J([]),f=J("all");let h=null;const a=Q({open:!1,fnId:"",payload:"{}",scheduleLater:!1,scheduledAt:"",saving:!1,error:""}),T=[{value:"all",label:"All"},{value:"pending",label:"Pending"},{value:"running",label:"Running"},{value:"succeeded",label:"Succeeded"},{value:"failed",label:"Failed"}],U=I(()=>p.value.length),y=I(()=>f.value==="all"?p.value:p.value.filter(n=>n.status===f.value)),E=I(()=>{const n={all:p.value.length};for(const s of p.value)n[s.status]=(n[s.status]||0)+1;return n}),b=n=>{switch(n){case"pending":return{classes:"bg-warning-tint text-warning-fg border-warning-ring",icon:z};case"running":return{classes:"bg-info-tint text-info-fg border-info-ring",icon:z};case"succeeded":return{classes:"bg-success-tint text-success-fg border-success-ring",icon:de};case"failed":return{classes:"bg-danger-tint text-danger-fg border-danger-ring",icon:re};default:return{classes:"bg-surface text-foreground-muted border-border",icon:oe}}},_=n=>n?new Date(n).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}):L,x=async()=>{try{const n=await Y({limit:200});p.value=n.data.jobs||[]}catch(n){console.error("Failed to load jobs",n)}},M=async n=>{try{await ne(n.id),await x()}catch(s){A.notify({title:"Retry failed",message:s.message,danger:!0})}},N=async n=>{if(await A.ask({title:"Delete job?",message:`Job ${n.id} will be removed. This cannot be undone.`,confirmLabel:"Delete",danger:!0}))try{await ae(n.id),await x()}catch(t){A.notify({title:"Delete failed",message:t.message,danger:!0})}},H=async()=>{if(a.error="",a.payload="{}",a.scheduleLater=!1,a.scheduledAt="",g.value.length===0)try{const n=await te();g.value=n.data?.functions||[],g.value.length&&!a.fnId&&(a.fnId=g.value[0].id)}catch(n){console.error("list functions failed",n)}a.open=!0},W=async()=>{a.error="";let n;try{n=a.payload.trim()?JSON.parse(a.payload):{}}catch(t){a.error="Payload must be valid JSON: "+t.message;return}const s={function_id:a.fnId,payload:n};if(a.scheduleLater){if(!a.scheduledAt){a.error='Pick a date/time, or untick "Schedule for later".';return}s.scheduled_at=new Date(a.scheduledAt).toISOString()}a.saving=!0;try{await se(s),a.open=!1,await x()}catch(t){a.error=t?.response?.data?.error?.message||t.message||"Enqueue failed"}finally{a.saving=!1}};return K(()=>{x(),h||(h=setInterval(x,5e3))}),X(()=>{h&&(clearInterval(h),h=null)}),(n,s)=>(o(),r("div",ue,[e("div",ce,[s[6]||(s[6]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Jobs "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},[d(" Background work queued via "),e("code",{class:"font-mono text-[11px]"},"jobs.enqueue()"),d(" from the SDK or the "),e("code",{class:"font-mono text-[11px]"},"enqueue_job"),d(" MCP tool. Workers pick them up at the configured concurrency, retry on failure with exponential backoff, and surface here with their full lifecycle. ")])],-1)),e("div",fe," Background queue · "+l(U.value)+" jobs ",1)]),e("div",me,[e("div",pe,[(o(),r(w,null,C(T,t=>i(v,{key:t.value,variant:"chip",size:"xs",active:f.value===t.value,class:"shrink-0 snap-start",onClick:k=>f.value=t.value},{default:m(()=>[d(l(t.label)+" ",1),E.value[t.value]!==void 0?(o(),r("span",xe,l(E.value[t.value]),1)):c("",!0)]),_:2},1032,["active","onClick"])),64))]),e("div",ge,[i(v,{size:"xs",onClick:H},{default:m(()=>[i(u(Z),{class:"w-3 h-3"}),s[7]||(s[7]=d(" Enqueue ",-1))]),_:1}),i(v,{variant:"secondary",size:"xs",onClick:x},{default:m(()=>[i(u(ie),{class:"w-3 h-3"}),s[8]||(s[8]=d(" Refresh ",-1))]),_:1})])]),i(le,{modelValue:a.open,"onUpdate:modelValue":s[5]||(s[5]=t=>a.open=t),title:"Enqueue a job",width:"560px"},{footer:m(()=>[e("div",ke,[i(v,{variant:"ghost",size:"sm",onClick:s[4]||(s[4]=t=>a.open=!1)},{default:m(()=>[...s[14]||(s[14]=[d(" Cancel ",-1)])]),_:1}),i(v,{size:"sm",disabled:!a.fnId||a.saving,loading:a.saving,onClick:W},{default:m(()=>[...s[15]||(s[15]=[d(" Enqueue ",-1)])]),_:1},8,["disabled","loading"])])]),default:m(()=>[e("div",he,[e("div",null,[s[9]||(s[9]=e("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Function",-1)),q(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>a.fnId=t),class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white focus:outline-none focus:border-white"},[(o(!0),r(w,null,C(g.value,t=>(o(),r("option",{key:t.id,value:t.id},l(t.name)+" ("+l(t.runtime)+") ",9,ve))),128))],512),[[j,a.fnId]])]),e("div",null,[s[10]||(s[10]=e("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Payload (JSON)",-1)),q(e("textarea",{"onUpdate:modelValue":s[1]||(s[1]=t=>a.payload=t),rows:"6",spellcheck:"false",class:"mt-2 w-full bg-surface border border-border rounded p-3 text-xs text-white font-mono focus:outline-none focus:border-white",placeholder:'{"hello":"world"}'},null,512),[[V,a.payload]])]),e("div",null,[e("label",ye,[q(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>a.scheduleLater=t),type:"checkbox"},null,512),[[ee,a.scheduleLater]]),s[11]||(s[11]=d(" Schedule for later ",-1))]),s[12]||(s[12]=e("p",{class:"text-[11px] text-foreground-muted mt-1"}," Off: runs on the next scheduler tick (~5s). On: holds until the timestamp below. ",-1))]),a.scheduleLater?(o(),r("div",be,[s[13]||(s[13]=e("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Run at (local time)",-1)),q(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>a.scheduledAt=t),type:"datetime-local",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white focus:outline-none focus:border-white"},null,512),[[V,a.scheduledAt]])])):c("",!0),a.error?(o(),r("div",_e,l(a.error),1)):c("",!0)])]),_:1},8,["modelValue"]),e("div",we,[e("ul",Ce,[(o(!0),r(w,null,C(y.value,t=>(o(),r("li",{key:t.id,class:"px-4 py-3"},[e("div",qe,[e("div",Se,[e("div",De,l(t.function_name||t.function_id),1),e("div",Ae,l(t.id),1),e("div",Ie,[e("span",{class:$(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-[11px] font-medium border",b(t.status).classes])},[(o(),S(F(b(t.status).icon),{class:"w-3 h-3 shrink-0","aria-hidden":"true"})),d(" "+l(t.status),1)],2)]),t.last_error?(o(),r("p",{key:0,class:"text-[11px] text-danger-fg mt-1 break-all",title:t.last_error},l(t.last_error),9,Je)):c("",!0),e("dl",Le,[e("div",null,[s[16]||(s[16]=e("dt",{class:"uppercase tracking-wider text-[10px]"}," Attempts ",-1)),e("dd",null,l(t.attempts)+" / "+l(t.max_attempts),1)]),e("div",null,[s[17]||(s[17]=e("dt",{class:"uppercase tracking-wider text-[10px]"}," Scheduled ",-1)),e("dd",null,l(_(t.scheduled_at)),1)]),e("div",Ee,[s[18]||(s[18]=e("dt",{class:"uppercase tracking-wider text-[10px]"}," Finished ",-1)),e("dd",null,l(t.finished_at?_(t.finished_at):u(L)),1)])])]),e("div",Me,[t.status==="failed"?(o(),S(D,{key:0,icon:u(P),variant:"success",title:"Retry",onClick:k=>M(t)},null,8,["icon","onClick"])):c("",!0),i(D,{icon:u(R),variant:"danger",title:"Delete",onClick:k=>N(t)},null,8,["icon","onClick"])])])]))),128)),y.value.length===0?(o(),r("li",Ne,[i(u(B),{class:"w-10 h-10 text-foreground-muted mx-auto mb-3 opacity-60"}),e("p",Ve,l(f.value==="all"?"No jobs yet.":`No ${f.value} jobs.`),1),s[19]||(s[19]=e("p",{class:"text-foreground-muted text-xs mt-1"},[d(" Enqueue from inside a function with "),e("code",{class:"font-mono text-[11px] px-1.5 py-0.5 rounded bg-surface border border-border"},"orva.jobs.enqueue(name, payload)"),d(". ")],-1))])):c("",!0)]),e("table",$e,[s[21]||(s[21]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-4 py-3 font-medium"}," Function "),e("th",{class:"px-4 py-3 font-medium"}," Status "),e("th",{class:"px-4 py-3 font-medium hidden md:table-cell"}," Attempts "),e("th",{class:"px-4 py-3 font-medium hidden lg:table-cell"}," Scheduled "),e("th",{class:"px-4 py-3 font-medium hidden xl:table-cell"}," Finished "),e("th",{class:"px-4 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",Fe,[(o(!0),r(w,null,C(y.value,t=>(o(),r("tr",{key:t.id,class:"hover:bg-surface/50 transition-colors"},[e("td",Pe,[e("div",Re,[e("span",null,l(t.function_name||t.function_id),1),e("span",ze,l(t.id),1)])]),e("td",Be,[e("span",{class:$(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-[11px] font-medium border",b(t.status).classes])},[(o(),S(F(b(t.status).icon),{class:"w-3 h-3 shrink-0","aria-hidden":"true"})),d(" "+l(t.status),1)],2),t.last_error?(o(),r("p",{key:0,class:"text-[11px] text-danger-fg mt-1 truncate max-w-xs",title:t.last_error},l(t.last_error),9,Oe)):c("",!0)]),e("td",Te,l(t.attempts)+" / "+l(t.max_attempts),1),e("td",Ue,l(_(t.scheduled_at)),1),e("td",He,l(t.finished_at?_(t.finished_at):u(L)),1),e("td",We,[e("div",Ge,[t.status==="failed"?(o(),S(D,{key:0,icon:u(P),variant:"success",title:"Retry",onClick:k=>M(t)},null,8,["icon","onClick"])):c("",!0),i(D,{icon:u(R),variant:"danger",title:"Delete",onClick:k=>N(t)},null,8,["icon","onClick"])])])]))),128)),y.value.length===0?(o(),r("tr",Ke,[e("td",Xe,[i(u(B),{class:"w-10 h-10 text-foreground-muted mx-auto mb-3 opacity-60"}),e("p",Ye,l(f.value==="all"?"No jobs yet.":`No ${f.value} jobs.`),1),s[20]||(s[20]=e("p",{class:"text-foreground-muted text-xs mt-1"},[d(" Enqueue from inside a function with "),e("code",{class:"font-mono text-[11px] px-1.5 py-0.5 rounded bg-surface border border-border"},"orva.jobs.enqueue(name, payload)"),d(". ")],-1))])])):c("",!0)])])])]))}};export{ot as default}; +import{c as O,C as G,o as K,G as X,a as r,b as e,k as d,t as l,F as w,p as C,d as i,h as m,_ as v,f as u,g as c,ax as Y,q as I,am as Q,r as J,j as o,P as Z,e as q,a1 as j,v as V,ab as ee,s as $,n as S,H as F,W as te,ay as se,az as ae,aA as ne}from"./index-fIeDYqWy.js";import{E as L}from"./format-CsU4_SPu.js";import{_ as D}from"./IconButton-CnguiHlc.js";import{D as le}from"./Drawer-D-dO6A0-.js";import{R as P}from"./rotate-ccw-BYpihd4d.js";import{T as R}from"./trash-2-B2Wniuw-.js";import{C as oe,a as re}from"./circle-u9aj3idX.js";import{C as de,a as z}from"./clock-C4Bm6ngE.js";const B=O("inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);const ie=O("refresh-ccw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]),ue={class:"space-y-4"},ce={class:"flex items-start justify-between gap-4 flex-wrap"},fe={class:"flex items-center gap-2 text-xs text-foreground-muted"},me={class:"flex items-center gap-2"},pe={class:"flex items-center gap-2 sm:flex-wrap overflow-x-auto sm:overflow-visible scrollable snap-x min-w-0 flex-1"},xe={key:0,class:"ml-1 opacity-70 tabular-nums"},ge={class:"flex items-center gap-2 shrink-0"},he={class:"p-5 space-y-5 text-sm"},ve=["value"],ye={class:"flex items-center gap-2 text-xs text-foreground-muted"},be={key:0},_e={key:1,class:"text-xs text-danger-fg"},ke={class:"flex items-center justify-end gap-2"},we={class:"bg-background border border-border rounded-lg overflow-x-auto"},Ce={class:"sm:hidden divide-y divide-border"},qe={class:"flex items-start justify-between gap-2"},Se={class:"min-w-0 flex-1"},De={class:"font-medium text-white truncate"},Ae={class:"text-[10px] text-foreground-muted font-mono break-all"},Ie={class:"mt-2"},Je=["title"],Le={class:"mt-2 grid grid-cols-2 gap-x-3 gap-y-1 text-[11px] text-foreground-muted"},Ee={class:"col-span-2"},Me={class:"flex items-center gap-1 shrink-0"},Ne={key:0,class:"px-4 py-12 text-center"},Ve={class:"text-foreground-muted text-sm"},$e={class:"hidden sm:table w-full text-sm text-left"},Fe={class:"divide-y divide-border"},Pe={class:"px-4 py-3 font-medium text-white"},Re={class:"flex flex-col"},ze={class:"text-[10px] text-foreground-muted font-mono"},Be={class:"px-4 py-3"},Oe=["title"],Te={class:"px-4 py-3 text-foreground-muted text-xs hidden md:table-cell"},Ue={class:"px-4 py-3 text-foreground-muted text-xs hidden lg:table-cell"},He={class:"px-4 py-3 text-foreground-muted text-xs hidden xl:table-cell"},We={class:"px-4 py-3 text-right"},Ge={class:"inline-flex items-center gap-1"},Ke={key:0},Xe={colspan:"6",class:"px-4 py-12 text-center"},Ye={class:"text-foreground-muted text-sm"},ot={__name:"Jobs",setup(Qe){const A=G(),p=J([]),g=J([]),f=J("all");let h=null;const a=Q({open:!1,fnId:"",payload:"{}",scheduleLater:!1,scheduledAt:"",saving:!1,error:""}),T=[{value:"all",label:"All"},{value:"pending",label:"Pending"},{value:"running",label:"Running"},{value:"succeeded",label:"Succeeded"},{value:"failed",label:"Failed"}],U=I(()=>p.value.length),y=I(()=>f.value==="all"?p.value:p.value.filter(n=>n.status===f.value)),E=I(()=>{const n={all:p.value.length};for(const s of p.value)n[s.status]=(n[s.status]||0)+1;return n}),b=n=>{switch(n){case"pending":return{classes:"bg-warning-tint text-warning-fg border-warning-ring",icon:z};case"running":return{classes:"bg-info-tint text-info-fg border-info-ring",icon:z};case"succeeded":return{classes:"bg-success-tint text-success-fg border-success-ring",icon:de};case"failed":return{classes:"bg-danger-tint text-danger-fg border-danger-ring",icon:re};default:return{classes:"bg-surface text-foreground-muted border-border",icon:oe}}},_=n=>n?new Date(n).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}):L,x=async()=>{try{const n=await Y({limit:200});p.value=n.data.jobs||[]}catch(n){console.error("Failed to load jobs",n)}},M=async n=>{try{await ne(n.id),await x()}catch(s){A.notify({title:"Retry failed",message:s.message,danger:!0})}},N=async n=>{if(await A.ask({title:"Delete job?",message:`Job ${n.id} will be removed. This cannot be undone.`,confirmLabel:"Delete",danger:!0}))try{await ae(n.id),await x()}catch(t){A.notify({title:"Delete failed",message:t.message,danger:!0})}},H=async()=>{if(a.error="",a.payload="{}",a.scheduleLater=!1,a.scheduledAt="",g.value.length===0)try{const n=await te();g.value=n.data?.functions||[],g.value.length&&!a.fnId&&(a.fnId=g.value[0].id)}catch(n){console.error("list functions failed",n)}a.open=!0},W=async()=>{a.error="";let n;try{n=a.payload.trim()?JSON.parse(a.payload):{}}catch(t){a.error="Payload must be valid JSON: "+t.message;return}const s={function_id:a.fnId,payload:n};if(a.scheduleLater){if(!a.scheduledAt){a.error='Pick a date/time, or untick "Schedule for later".';return}s.scheduled_at=new Date(a.scheduledAt).toISOString()}a.saving=!0;try{await se(s),a.open=!1,await x()}catch(t){a.error=t?.response?.data?.error?.message||t.message||"Enqueue failed"}finally{a.saving=!1}};return K(()=>{x(),h||(h=setInterval(x,5e3))}),X(()=>{h&&(clearInterval(h),h=null)}),(n,s)=>(o(),r("div",ue,[e("div",ce,[s[6]||(s[6]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Jobs "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},[d(" Background work queued via "),e("code",{class:"font-mono text-[11px]"},"jobs.enqueue()"),d(" from the SDK or the "),e("code",{class:"font-mono text-[11px]"},"enqueue_job"),d(" MCP tool. Workers pick them up at the configured concurrency, retry on failure with exponential backoff, and surface here with their full lifecycle. ")])],-1)),e("div",fe," Background queue · "+l(U.value)+" jobs ",1)]),e("div",me,[e("div",pe,[(o(),r(w,null,C(T,t=>i(v,{key:t.value,variant:"chip",size:"xs",active:f.value===t.value,class:"shrink-0 snap-start",onClick:k=>f.value=t.value},{default:m(()=>[d(l(t.label)+" ",1),E.value[t.value]!==void 0?(o(),r("span",xe,l(E.value[t.value]),1)):c("",!0)]),_:2},1032,["active","onClick"])),64))]),e("div",ge,[i(v,{size:"xs",onClick:H},{default:m(()=>[i(u(Z),{class:"w-3 h-3"}),s[7]||(s[7]=d(" Enqueue ",-1))]),_:1}),i(v,{variant:"secondary",size:"xs",onClick:x},{default:m(()=>[i(u(ie),{class:"w-3 h-3"}),s[8]||(s[8]=d(" Refresh ",-1))]),_:1})])]),i(le,{modelValue:a.open,"onUpdate:modelValue":s[5]||(s[5]=t=>a.open=t),title:"Enqueue a job",width:"560px"},{footer:m(()=>[e("div",ke,[i(v,{variant:"ghost",size:"sm",onClick:s[4]||(s[4]=t=>a.open=!1)},{default:m(()=>[...s[14]||(s[14]=[d(" Cancel ",-1)])]),_:1}),i(v,{size:"sm",disabled:!a.fnId||a.saving,loading:a.saving,onClick:W},{default:m(()=>[...s[15]||(s[15]=[d(" Enqueue ",-1)])]),_:1},8,["disabled","loading"])])]),default:m(()=>[e("div",he,[e("div",null,[s[9]||(s[9]=e("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Function",-1)),q(e("select",{"onUpdate:modelValue":s[0]||(s[0]=t=>a.fnId=t),class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white focus:outline-none focus:border-white"},[(o(!0),r(w,null,C(g.value,t=>(o(),r("option",{key:t.id,value:t.id},l(t.name)+" ("+l(t.runtime)+") ",9,ve))),128))],512),[[j,a.fnId]])]),e("div",null,[s[10]||(s[10]=e("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Payload (JSON)",-1)),q(e("textarea",{"onUpdate:modelValue":s[1]||(s[1]=t=>a.payload=t),rows:"6",spellcheck:"false",class:"mt-2 w-full bg-surface border border-border rounded p-3 text-xs text-white font-mono focus:outline-none focus:border-white",placeholder:'{"hello":"world"}'},null,512),[[V,a.payload]])]),e("div",null,[e("label",ye,[q(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>a.scheduleLater=t),type:"checkbox"},null,512),[[ee,a.scheduleLater]]),s[11]||(s[11]=d(" Schedule for later ",-1))]),s[12]||(s[12]=e("p",{class:"text-[11px] text-foreground-muted mt-1"}," Off: runs on the next scheduler tick (~5s). On: holds until the timestamp below. ",-1))]),a.scheduleLater?(o(),r("div",be,[s[13]||(s[13]=e("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Run at (local time)",-1)),q(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>a.scheduledAt=t),type:"datetime-local",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white focus:outline-none focus:border-white"},null,512),[[V,a.scheduledAt]])])):c("",!0),a.error?(o(),r("div",_e,l(a.error),1)):c("",!0)])]),_:1},8,["modelValue"]),e("div",we,[e("ul",Ce,[(o(!0),r(w,null,C(y.value,t=>(o(),r("li",{key:t.id,class:"px-4 py-3"},[e("div",qe,[e("div",Se,[e("div",De,l(t.function_name||t.function_id),1),e("div",Ae,l(t.id),1),e("div",Ie,[e("span",{class:$(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-[11px] font-medium border",b(t.status).classes])},[(o(),S(F(b(t.status).icon),{class:"w-3 h-3 shrink-0","aria-hidden":"true"})),d(" "+l(t.status),1)],2)]),t.last_error?(o(),r("p",{key:0,class:"text-[11px] text-danger-fg mt-1 break-all",title:t.last_error},l(t.last_error),9,Je)):c("",!0),e("dl",Le,[e("div",null,[s[16]||(s[16]=e("dt",{class:"uppercase tracking-wider text-[10px]"}," Attempts ",-1)),e("dd",null,l(t.attempts)+" / "+l(t.max_attempts),1)]),e("div",null,[s[17]||(s[17]=e("dt",{class:"uppercase tracking-wider text-[10px]"}," Scheduled ",-1)),e("dd",null,l(_(t.scheduled_at)),1)]),e("div",Ee,[s[18]||(s[18]=e("dt",{class:"uppercase tracking-wider text-[10px]"}," Finished ",-1)),e("dd",null,l(t.finished_at?_(t.finished_at):u(L)),1)])])]),e("div",Me,[t.status==="failed"?(o(),S(D,{key:0,icon:u(P),variant:"success",title:"Retry",onClick:k=>M(t)},null,8,["icon","onClick"])):c("",!0),i(D,{icon:u(R),variant:"danger",title:"Delete",onClick:k=>N(t)},null,8,["icon","onClick"])])])]))),128)),y.value.length===0?(o(),r("li",Ne,[i(u(B),{class:"w-10 h-10 text-foreground-muted mx-auto mb-3 opacity-60"}),e("p",Ve,l(f.value==="all"?"No jobs yet.":`No ${f.value} jobs.`),1),s[19]||(s[19]=e("p",{class:"text-foreground-muted text-xs mt-1"},[d(" Enqueue from inside a function with "),e("code",{class:"font-mono text-[11px] px-1.5 py-0.5 rounded bg-surface border border-border"},"orva.jobs.enqueue(name, payload)"),d(". ")],-1))])):c("",!0)]),e("table",$e,[s[21]||(s[21]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-4 py-3 font-medium"}," Function "),e("th",{class:"px-4 py-3 font-medium"}," Status "),e("th",{class:"px-4 py-3 font-medium hidden md:table-cell"}," Attempts "),e("th",{class:"px-4 py-3 font-medium hidden lg:table-cell"}," Scheduled "),e("th",{class:"px-4 py-3 font-medium hidden xl:table-cell"}," Finished "),e("th",{class:"px-4 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",Fe,[(o(!0),r(w,null,C(y.value,t=>(o(),r("tr",{key:t.id,class:"hover:bg-surface/50 transition-colors"},[e("td",Pe,[e("div",Re,[e("span",null,l(t.function_name||t.function_id),1),e("span",ze,l(t.id),1)])]),e("td",Be,[e("span",{class:$(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-[11px] font-medium border",b(t.status).classes])},[(o(),S(F(b(t.status).icon),{class:"w-3 h-3 shrink-0","aria-hidden":"true"})),d(" "+l(t.status),1)],2),t.last_error?(o(),r("p",{key:0,class:"text-[11px] text-danger-fg mt-1 truncate max-w-xs",title:t.last_error},l(t.last_error),9,Oe)):c("",!0)]),e("td",Te,l(t.attempts)+" / "+l(t.max_attempts),1),e("td",Ue,l(_(t.scheduled_at)),1),e("td",He,l(t.finished_at?_(t.finished_at):u(L)),1),e("td",We,[e("div",Ge,[t.status==="failed"?(o(),S(D,{key:0,icon:u(P),variant:"success",title:"Retry",onClick:k=>M(t)},null,8,["icon","onClick"])):c("",!0),i(D,{icon:u(R),variant:"danger",title:"Delete",onClick:k=>N(t)},null,8,["icon","onClick"])])])]))),128)),y.value.length===0?(o(),r("tr",Ke,[e("td",Xe,[i(u(B),{class:"w-10 h-10 text-foreground-muted mx-auto mb-3 opacity-60"}),e("p",Ye,l(f.value==="all"?"No jobs yet.":`No ${f.value} jobs.`),1),s[20]||(s[20]=e("p",{class:"text-foreground-muted text-xs mt-1"},[d(" Enqueue from inside a function with "),e("code",{class:"font-mono text-[11px] px-1.5 py-0.5 rounded bg-surface border border-border"},"orva.jobs.enqueue(name, payload)"),d(". ")],-1))])])):c("",!0)])])])]))}};export{ot as default}; diff --git a/backend/internal/server/ui_dist/assets/KVStore-BJOrSxjD.js b/backend/internal/server/ui_dist/assets/KVStore-CfuA6xj9.js similarity index 98% rename from backend/internal/server/ui_dist/assets/KVStore-BJOrSxjD.js rename to backend/internal/server/ui_dist/assets/KVStore-CfuA6xj9.js index 8a35215..722baa4 100644 --- a/backend/internal/server/ui_dist/assets/KVStore-BJOrSxjD.js +++ b/backend/internal/server/ui_dist/assets/KVStore-CfuA6xj9.js @@ -1 +1 @@ -import{C as le,o as ae,R as ie,V as de,a as i,b as t,k as u,d as f,h as p,t as a,g as v,_ as b,f as w,S as ue,e as h,v as _,F as S,p as Y,al as fe,q,a2 as ce,r as T,am as A,a9 as pe,j as d,s as C,P as xe,w as X,an as G,ao as me}from"./index-BMkkwZ9q.js";import{E as N}from"./format-CsU4_SPu.js";import{_ as H}from"./IconButton-BgeMzwXv.js";import{D as Q}from"./Drawer-C3AFLOZb.js";import{R as ve}from"./refresh-cw-C7sR7ShF.js";import{T as U}from"./trash-2-BXf2uqQH.js";const ye={class:"space-y-6"},ge={class:"flex items-start justify-between gap-4"},be={class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},we={class:"flex items-center gap-2"},ke={class:"text-xs text-foreground-muted"},he={key:0},_e={class:"flex items-center gap-2 flex-wrap"},Se={class:"relative flex-1 min-w-[260px] max-w-[420px]"},Te={key:1,class:"text-[11px] text-amber-400/80"},Ce={class:"bg-background border border-border rounded-lg overflow-x-auto"},De={class:"sm:hidden divide-y divide-border"},Ne=["onClick"],Ve={class:"flex items-start justify-between gap-2"},Me={class:"min-w-0 flex-1"},ze={class:"font-mono text-xs text-white break-all"},Le={class:"mt-1 font-mono text-[11px] text-foreground-muted break-all"},Ke={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Oe={class:"font-mono"},$e={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},Je={class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},Ue={class:"hidden sm:table w-full text-sm text-left"},Fe={class:"divide-y divide-border"},je=["onClick"],Ie={class:"px-4 py-3 font-mono text-xs text-white truncate max-w-[360px]"},Pe={class:"px-4 py-3 font-mono text-xs text-foreground-muted truncate max-w-[420px] hidden md:table-cell"},Be={class:"px-4 py-3 hidden sm:table-cell"},Re={key:1,class:"text-foreground-muted text-xs"},Ee={class:"px-4 py-3 text-xs font-mono text-foreground-muted hidden lg:table-cell"},Ye={class:"px-4 py-3 text-xs text-foreground-muted hidden md:table-cell"},qe={key:0},Ae={colspan:"6",class:"px-4 py-12 text-center text-foreground-muted text-sm"},Xe={class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},Ge={key:0,class:"p-5 space-y-5 text-sm"},He={class:"grid grid-cols-2 gap-3"},Qe={class:"bg-surface border border-border rounded p-3 min-w-0"},We={class:"text-xs text-white font-mono break-all"},Ze={class:"bg-surface border border-border rounded p-3 min-w-0"},et={class:"bg-surface border border-border rounded p-3 min-w-0"},tt={class:"text-xs text-white font-mono truncate"},st={class:"bg-surface border border-border rounded p-3 min-w-0"},ot={class:"text-xs text-white font-mono"},rt={class:"flex items-center justify-between mb-2"},nt={key:0,class:"text-xs text-red-400"},lt={class:"flex items-center justify-between"},at={class:"flex items-center gap-2"},it={class:"p-5 space-y-5 text-sm"},dt={class:"flex items-center justify-between mb-2"},ut={key:0,class:"text-xs text-red-400"},ft={class:"flex items-center justify-end gap-2"},ct=31536e3,wt={__name:"KVStore",setup(pt){const W=pe(),V=le(),k=q(()=>W.params.name),y=T([]),L=T(0),F=T(!1),D=T(!1),m=T(!1),x=T(""),r=A({open:!1,row:null,text:"",ttlSeconds:0,error:""}),n=A({open:!1,key:"",text:"",ttlSeconds:0,error:""}),M=s=>{const e=Number(s);return!Number.isFinite(e)||e<0||e>ct},j=q(()=>y.value.reduce((s,e)=>s+(e.size_bytes||0),0)),g=async()=>{D.value=!0;try{const s={limit:200};x.value&&(s.prefix=x.value);const e=await fe(k.value,s);y.value=e.data?.entries||[],L.value=e.data?.total??y.value.length,F.value=!!e.data?.truncated}catch(s){console.error("kvList failed",s),V.notify({title:"Failed to load KV",message:s?.response?.data?.error?.message||"Unknown error",danger:!0})}finally{D.value=!1}};let K=null;const Z=()=>{clearTimeout(K),K=setTimeout(g,250)},I=s=>{r.row=s,r.text=re(s.value),r.ttlSeconds=s.expires_at?Math.max(0,Math.floor((new Date(s.expires_at)-Date.now())/1e3)):0,r.error="",r.open=!0},ee=async()=>{if(M(r.ttlSeconds)){r.error="TTL must be between 0 and 31536000 (1 year).";return}let s;try{s=JSON.parse(r.text)}catch(e){r.error="Invalid JSON: "+e.message;return}r.error="",m.value=!0;try{await G(k.value,r.row.key,{value:s,ttl_seconds:r.ttlSeconds||0}),r.open=!1,await g()}catch(e){r.error=e?.response?.data?.error?.message||"Save failed"}finally{m.value=!1}},te=async()=>{!r.row||!await V.ask({title:"Delete key?",message:`"${r.row.key}" will be removed from this function's KV store. This cannot be undone.`,confirmLabel:"Delete",danger:!0})||(await B(r.row.key),r.open=!1)},se=()=>{n.key="",n.text="",n.ttlSeconds=0,n.error="",n.open=!0},oe=async()=>{const s=n.key.trim();if(!s){n.error="Key is required";return}if(M(n.ttlSeconds)){n.error="TTL must be between 0 and 31536000 (1 year).";return}let e=n.text.trim()||'""',l;try{l=JSON.parse(e)}catch(o){n.error="Invalid JSON: "+o.message;return}n.error="",m.value=!0;try{await G(k.value,s,{value:l,ttl_seconds:n.ttlSeconds||0}),n.open=!1,await g()}catch(o){n.error=o?.response?.data?.error?.message||"Save failed"}finally{m.value=!1}},P=async s=>{await V.ask({title:"Delete key?",message:`"${s.key}" will be removed from this function's KV store.`,confirmLabel:"Delete",danger:!0})&&await B(s.key)},B=async s=>{try{await me(k.value,s),await g()}catch(e){V.notify({title:"Failed to delete key",message:e?.response?.data?.error?.message||"Unknown error",danger:!0})}},O=(s,e=3)=>{if(e<=0||typeof s!="string")return s;const l=s.trim();if(!l||!'{["tfn0123456789-'.includes(l[0]))return s;try{const o=JSON.parse(l);return O(o,e-1)}catch{return s}},re=s=>{const e=O(s);try{return JSON.stringify(e,null,2)}catch{return String(s)}},R=s=>{if(s==null)return N;const e=O(s);if(typeof e=="string"){const l=JSON.stringify(e);return l.length>80?l.slice(0,80)+"…":l}try{const l=JSON.stringify(e);return l.length>80?l.slice(0,80)+"…":l}catch{return String(e)}},z=s=>s==null?N:s<1024?s+" B":s<1024*1024?(s/1024).toFixed(1)+" KB":(s/1024/1024).toFixed(1)+" MB",E=s=>{if(!s)return N;const e=Date.now()-new Date(s).getTime();if(e<0)return"just now";const l=Math.floor(e/1e3);if(l<60)return l+"s ago";const o=Math.floor(l/60);if(o<60)return o+"m ago";const c=Math.floor(o/60);return c<24?c+"h ago":Math.floor(c/24)+"d ago"},ne=s=>s?new Date(s).toLocaleString():N,$=s=>{const e=new Date(s).getTime()-Date.now();if(e<=0)return"expired";const l=Math.floor(e/1e3);if(l<60)return"in "+l+"s";const o=Math.floor(l/60);if(o<60)return"in "+o+"m";const c=Math.floor(o/60);return c<24?"in "+c+"h "+o%60+"m":"in "+Math.floor(c/24)+"d "+c%24+"h"},J=s=>{if(!s)return"text-foreground-muted";const e=new Date(s).getTime()-Date.now();return e<=6e4?"text-red-400":e<=5*6e4?"text-amber-400":"text-foreground-muted"};return ae(g),ie(g),de(()=>{clearTimeout(K)}),(s,e)=>{const l=ce("router-link");return d(),i("div",ye,[t("div",ge,[t("div",null,[e[16]||(e[16]=t("h1",{class:"text-xl font-semibold text-white tracking-tight"}," KV Store ",-1)),t("p",be,[e[14]||(e[14]=u(" Per-function key/value state for ",-1)),f(l,{to:`/functions/${k.value}`,class:"text-white underline"},{default:p(()=>[u(a(k.value),1)]),_:1},8,["to"]),e[15]||(e[15]=u(" Values are JSON, optional TTL. ",-1))])]),t("div",we,[t("span",ke,[u(a(L.value)+" "+a(L.value===1?"key":"keys")+" ",1),j.value>0?(d(),i("span",he,"· "+a(z(j.value)),1)):v("",!0)]),f(b,{variant:"secondary",size:"sm",onClick:g},{default:p(()=>[f(w(ve),{class:C(["w-3.5 h-3.5",{"animate-spin":D.value}])},null,8,["class"]),e[17]||(e[17]=u(" Refresh ",-1))]),_:1}),f(b,{size:"sm",onClick:e[0]||(e[0]=o=>se())},{default:p(()=>[f(w(xe),{class:"w-3.5 h-3.5"}),e[18]||(e[18]=u(" Set key ",-1))]),_:1})])]),t("div",_e,[t("div",Se,[f(w(ue),{class:"w-3.5 h-3.5 absolute left-2.5 top-1/2 -translate-y-1/2 text-foreground-muted/60 pointer-events-none"}),h(t("input",{"onUpdate:modelValue":e[1]||(e[1]=o=>x.value=o),"aria-label":"Search keys by prefix",placeholder:"Search by key prefix… (e.g. user:)",class:"w-full bg-background border border-border rounded-md pl-8 pr-3 py-1.5 text-xs text-foreground placeholder-foreground-muted/60 focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:Z},null,544),[[_,x.value]])]),x.value?(d(),i("button",{key:0,class:"text-[11px] text-foreground-muted hover:text-white px-2 py-1.5 transition-colors",onClick:e[2]||(e[2]=o=>{x.value="",g()})}," Clear ")):v("",!0),F.value?(d(),i("span",Te," Showing first "+a(y.value.length)+". Narrow the prefix to see more. ",1)):v("",!0)]),t("div",Ce,[t("ul",De,[(d(!0),i(S,null,Y(y.value,o=>(d(),i("li",{key:o.key,class:"px-4 py-3 cursor-pointer hover:bg-surface-hover transition-colors",onClick:c=>I(o)},[t("div",Ve,[t("div",Me,[t("div",ze,a(o.key),1),t("div",Le,a(R(o.value)),1),t("div",Ke,[o.expires_at?(d(),i("span",{key:0,class:C(J(o.expires_at))},a($(o.expires_at)),3)):v("",!0),t("span",Oe,a(z(o.size_bytes)),1),t("span",null,a(E(o.updated_at)),1)])]),t("div",{class:"shrink-0",onClick:e[3]||(e[3]=X(()=>{},["stop"]))},[f(H,{icon:w(U),variant:"danger",title:"Delete key",onClick:c=>P(o)},null,8,["icon","onClick"])])])],8,Ne))),128)),!D.value&&!y.value.length?(d(),i("li",$e,[x.value?(d(),i(S,{key:0},[e[19]||(e[19]=u(" No keys match ",-1)),t("code",Je,a(x.value),1),e[20]||(e[20]=u(". ",-1))],64)):(d(),i(S,{key:1},[e[21]||(e[21]=u(" No keys yet. Your function will write here when it calls ",-1)),e[22]||(e[22]=t("code",{class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},"orva.kv.put(...)",-1)),e[23]||(e[23]=u(". ",-1))],64))])):v("",!0)]),t("table",Ue,[e[29]||(e[29]=t("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[t("tr",null,[t("th",{class:"px-4 py-3"},"Key"),t("th",{class:"px-4 py-3 hidden md:table-cell"},"Value preview"),t("th",{class:"px-4 py-3 w-28 hidden sm:table-cell"},"TTL"),t("th",{class:"px-4 py-3 w-20 hidden lg:table-cell"},"Size"),t("th",{class:"px-4 py-3 w-28 hidden md:table-cell"},"Updated"),t("th",{class:"px-4 py-3 w-10 text-right"})])],-1)),t("tbody",Fe,[(d(!0),i(S,null,Y(y.value,o=>(d(),i("tr",{key:o.key,class:"hover:bg-surface-hover cursor-pointer transition-colors",onClick:c=>I(o)},[t("td",Ie,a(o.key),1),t("td",Pe,a(R(o.value)),1),t("td",Be,[o.expires_at?(d(),i("span",{key:0,class:C(["text-xs",J(o.expires_at)])},a($(o.expires_at)),3)):(d(),i("span",Re,a(w(N)),1))]),t("td",Ee,a(z(o.size_bytes)),1),t("td",Ye,a(E(o.updated_at)),1),t("td",{class:"px-4 py-3 text-right",onClick:e[4]||(e[4]=X(()=>{},["stop"]))},[f(H,{icon:w(U),variant:"danger",title:"Delete key",onClick:c=>P(o)},null,8,["icon","onClick"])])],8,je))),128)),!D.value&&!y.value.length?(d(),i("tr",qe,[t("td",Ae,[x.value?(d(),i(S,{key:0},[e[24]||(e[24]=u(" No keys match ",-1)),t("code",Xe,a(x.value),1),e[25]||(e[25]=u(". ",-1))],64)):(d(),i(S,{key:1},[e[26]||(e[26]=u(" No keys yet. Your function will write here when it calls ",-1)),e[27]||(e[27]=t("code",{class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},"orva.kv.put(...)",-1)),e[28]||(e[28]=u(". ",-1))],64))])])):v("",!0)])])]),f(Q,{modelValue:r.open,"onUpdate:modelValue":e[8]||(e[8]=o=>r.open=o),title:r.row?r.row.key:"Inspect key",width:"640px"},{footer:p(()=>[t("div",lt,[f(b,{variant:"danger",size:"sm",disabled:m.value,onClick:te},{default:p(()=>[f(w(U),{class:"w-3.5 h-3.5"}),e[36]||(e[36]=u(" Delete ",-1))]),_:1},8,["disabled"]),t("div",at,[f(b,{variant:"ghost",size:"sm",onClick:e[7]||(e[7]=o=>r.open=!1)},{default:p(()=>[...e[37]||(e[37]=[u(" Cancel ",-1)])]),_:1}),f(b,{size:"sm",disabled:m.value,loading:m.value,onClick:ee},{default:p(()=>[...e[38]||(e[38]=[u(" Save ",-1)])]),_:1},8,["disabled","loading"])])])]),default:p(()=>[r.row?(d(),i("div",Ge,[t("div",He,[t("div",Qe,[e[30]||(e[30]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Key",-1)),t("div",We,a(r.row.key),1)]),t("div",Ze,[e[31]||(e[31]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"TTL",-1)),t("div",{class:C(["text-xs text-white font-mono",J(r.row.expires_at)])},a(r.row.expires_at?$(r.row.expires_at):"Never"),3)]),t("div",et,[e[32]||(e[32]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Updated",-1)),t("div",tt,a(ne(r.row.updated_at)),1)]),t("div",st,[e[33]||(e[33]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Size",-1)),t("div",ot,a(z(r.row.size_bytes)),1)])]),t("div",null,[e[34]||(e[34]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"}," TTL seconds (0 = never) ",-1)),h(t("input",{"onUpdate:modelValue":e[5]||(e[5]=o=>r.ttlSeconds=o),type:"number",min:"0",max:"31536000",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white font-mono focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[_,r.ttlSeconds,void 0,{number:!0}]]),t("p",{class:C(["text-[11px] mt-1.5",M(r.ttlSeconds)?"text-danger-fg":"text-foreground-muted"])}," Must be between 0 and 31536000 (1 year). ",2)]),t("div",null,[t("div",rt,[e[35]||(e[35]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Value (JSON)",-1)),r.error?(d(),i("span",nt,a(r.error),1)):v("",!0)]),h(t("textarea",{"onUpdate:modelValue":e[6]||(e[6]=o=>r.text=o),rows:"14",spellcheck:"false",class:"w-full bg-surface border border-border rounded p-3 text-xs text-white font-mono leading-relaxed focus:outline-none focus:border-white whitespace-pre overflow-x-auto"},null,512),[[_,r.text]])])])):v("",!0)]),_:1},8,["modelValue","title"]),f(Q,{modelValue:n.open,"onUpdate:modelValue":e[13]||(e[13]=o=>n.open=o),title:"Set key",width:"640px"},{footer:p(()=>[t("div",ft,[f(b,{variant:"ghost",size:"sm",onClick:e[12]||(e[12]=o=>n.open=!1)},{default:p(()=>[...e[42]||(e[42]=[u(" Cancel ",-1)])]),_:1}),f(b,{size:"sm",disabled:m.value||!n.key.trim(),loading:m.value,onClick:oe},{default:p(()=>[...e[43]||(e[43]=[u(" Save ",-1)])]),_:1},8,["disabled","loading"])])]),default:p(()=>[t("div",it,[t("div",null,[e[39]||(e[39]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Key",-1)),h(t("input",{"onUpdate:modelValue":e[9]||(e[9]=o=>n.key=o),placeholder:"e.g. user:42",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white font-mono focus:outline-none focus:border-white",spellcheck:"false"},null,512),[[_,n.key]])]),t("div",null,[e[40]||(e[40]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"}," TTL seconds (0 = never) ",-1)),h(t("input",{"onUpdate:modelValue":e[10]||(e[10]=o=>n.ttlSeconds=o),type:"number",min:"0",max:"31536000",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white font-mono focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[_,n.ttlSeconds,void 0,{number:!0}]]),t("p",{class:C(["text-[11px] mt-1.5",M(n.ttlSeconds)?"text-danger-fg":"text-foreground-muted"])}," Must be between 0 and 31536000 (1 year). ",2)]),t("div",null,[t("div",dt,[e[41]||(e[41]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Value (JSON)",-1)),n.error?(d(),i("span",ut,a(n.error),1)):v("",!0)]),h(t("textarea",{"onUpdate:modelValue":e[11]||(e[11]=o=>n.text=o),rows:"14",spellcheck:"false",placeholder:'{"hello": "world"}',class:"w-full bg-surface border border-border rounded p-3 text-xs text-white font-mono leading-relaxed focus:outline-none focus:border-white whitespace-pre overflow-x-auto"},null,512),[[_,n.text]])])])]),_:1},8,["modelValue"])])}}};export{wt as default}; +import{C as le,o as ae,R as ie,V as de,a as i,b as t,k as u,d as f,h as p,t as a,g as v,_ as b,f as w,S as ue,e as h,v as _,F as S,p as Y,al as fe,q,a2 as ce,r as T,am as A,a9 as pe,j as d,s as C,P as xe,w as X,an as G,ao as me}from"./index-fIeDYqWy.js";import{E as N}from"./format-CsU4_SPu.js";import{_ as H}from"./IconButton-CnguiHlc.js";import{D as Q}from"./Drawer-D-dO6A0-.js";import{R as ve}from"./refresh-cw-9T7Tp2vI.js";import{T as U}from"./trash-2-B2Wniuw-.js";const ye={class:"space-y-6"},ge={class:"flex items-start justify-between gap-4"},be={class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},we={class:"flex items-center gap-2"},ke={class:"text-xs text-foreground-muted"},he={key:0},_e={class:"flex items-center gap-2 flex-wrap"},Se={class:"relative flex-1 min-w-[260px] max-w-[420px]"},Te={key:1,class:"text-[11px] text-amber-400/80"},Ce={class:"bg-background border border-border rounded-lg overflow-x-auto"},De={class:"sm:hidden divide-y divide-border"},Ne=["onClick"],Ve={class:"flex items-start justify-between gap-2"},Me={class:"min-w-0 flex-1"},ze={class:"font-mono text-xs text-white break-all"},Le={class:"mt-1 font-mono text-[11px] text-foreground-muted break-all"},Ke={class:"mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-foreground-muted"},Oe={class:"font-mono"},$e={key:0,class:"px-6 py-12 text-center text-sm text-foreground-muted"},Je={class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},Ue={class:"hidden sm:table w-full text-sm text-left"},Fe={class:"divide-y divide-border"},je=["onClick"],Ie={class:"px-4 py-3 font-mono text-xs text-white truncate max-w-[360px]"},Pe={class:"px-4 py-3 font-mono text-xs text-foreground-muted truncate max-w-[420px] hidden md:table-cell"},Be={class:"px-4 py-3 hidden sm:table-cell"},Re={key:1,class:"text-foreground-muted text-xs"},Ee={class:"px-4 py-3 text-xs font-mono text-foreground-muted hidden lg:table-cell"},Ye={class:"px-4 py-3 text-xs text-foreground-muted hidden md:table-cell"},qe={key:0},Ae={colspan:"6",class:"px-4 py-12 text-center text-foreground-muted text-sm"},Xe={class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},Ge={key:0,class:"p-5 space-y-5 text-sm"},He={class:"grid grid-cols-2 gap-3"},Qe={class:"bg-surface border border-border rounded p-3 min-w-0"},We={class:"text-xs text-white font-mono break-all"},Ze={class:"bg-surface border border-border rounded p-3 min-w-0"},et={class:"bg-surface border border-border rounded p-3 min-w-0"},tt={class:"text-xs text-white font-mono truncate"},st={class:"bg-surface border border-border rounded p-3 min-w-0"},ot={class:"text-xs text-white font-mono"},rt={class:"flex items-center justify-between mb-2"},nt={key:0,class:"text-xs text-red-400"},lt={class:"flex items-center justify-between"},at={class:"flex items-center gap-2"},it={class:"p-5 space-y-5 text-sm"},dt={class:"flex items-center justify-between mb-2"},ut={key:0,class:"text-xs text-red-400"},ft={class:"flex items-center justify-end gap-2"},ct=31536e3,wt={__name:"KVStore",setup(pt){const W=pe(),V=le(),k=q(()=>W.params.name),y=T([]),L=T(0),F=T(!1),D=T(!1),m=T(!1),x=T(""),r=A({open:!1,row:null,text:"",ttlSeconds:0,error:""}),n=A({open:!1,key:"",text:"",ttlSeconds:0,error:""}),M=s=>{const e=Number(s);return!Number.isFinite(e)||e<0||e>ct},j=q(()=>y.value.reduce((s,e)=>s+(e.size_bytes||0),0)),g=async()=>{D.value=!0;try{const s={limit:200};x.value&&(s.prefix=x.value);const e=await fe(k.value,s);y.value=e.data?.entries||[],L.value=e.data?.total??y.value.length,F.value=!!e.data?.truncated}catch(s){console.error("kvList failed",s),V.notify({title:"Failed to load KV",message:s?.response?.data?.error?.message||"Unknown error",danger:!0})}finally{D.value=!1}};let K=null;const Z=()=>{clearTimeout(K),K=setTimeout(g,250)},I=s=>{r.row=s,r.text=re(s.value),r.ttlSeconds=s.expires_at?Math.max(0,Math.floor((new Date(s.expires_at)-Date.now())/1e3)):0,r.error="",r.open=!0},ee=async()=>{if(M(r.ttlSeconds)){r.error="TTL must be between 0 and 31536000 (1 year).";return}let s;try{s=JSON.parse(r.text)}catch(e){r.error="Invalid JSON: "+e.message;return}r.error="",m.value=!0;try{await G(k.value,r.row.key,{value:s,ttl_seconds:r.ttlSeconds||0}),r.open=!1,await g()}catch(e){r.error=e?.response?.data?.error?.message||"Save failed"}finally{m.value=!1}},te=async()=>{!r.row||!await V.ask({title:"Delete key?",message:`"${r.row.key}" will be removed from this function's KV store. This cannot be undone.`,confirmLabel:"Delete",danger:!0})||(await B(r.row.key),r.open=!1)},se=()=>{n.key="",n.text="",n.ttlSeconds=0,n.error="",n.open=!0},oe=async()=>{const s=n.key.trim();if(!s){n.error="Key is required";return}if(M(n.ttlSeconds)){n.error="TTL must be between 0 and 31536000 (1 year).";return}let e=n.text.trim()||'""',l;try{l=JSON.parse(e)}catch(o){n.error="Invalid JSON: "+o.message;return}n.error="",m.value=!0;try{await G(k.value,s,{value:l,ttl_seconds:n.ttlSeconds||0}),n.open=!1,await g()}catch(o){n.error=o?.response?.data?.error?.message||"Save failed"}finally{m.value=!1}},P=async s=>{await V.ask({title:"Delete key?",message:`"${s.key}" will be removed from this function's KV store.`,confirmLabel:"Delete",danger:!0})&&await B(s.key)},B=async s=>{try{await me(k.value,s),await g()}catch(e){V.notify({title:"Failed to delete key",message:e?.response?.data?.error?.message||"Unknown error",danger:!0})}},O=(s,e=3)=>{if(e<=0||typeof s!="string")return s;const l=s.trim();if(!l||!'{["tfn0123456789-'.includes(l[0]))return s;try{const o=JSON.parse(l);return O(o,e-1)}catch{return s}},re=s=>{const e=O(s);try{return JSON.stringify(e,null,2)}catch{return String(s)}},R=s=>{if(s==null)return N;const e=O(s);if(typeof e=="string"){const l=JSON.stringify(e);return l.length>80?l.slice(0,80)+"…":l}try{const l=JSON.stringify(e);return l.length>80?l.slice(0,80)+"…":l}catch{return String(e)}},z=s=>s==null?N:s<1024?s+" B":s<1024*1024?(s/1024).toFixed(1)+" KB":(s/1024/1024).toFixed(1)+" MB",E=s=>{if(!s)return N;const e=Date.now()-new Date(s).getTime();if(e<0)return"just now";const l=Math.floor(e/1e3);if(l<60)return l+"s ago";const o=Math.floor(l/60);if(o<60)return o+"m ago";const c=Math.floor(o/60);return c<24?c+"h ago":Math.floor(c/24)+"d ago"},ne=s=>s?new Date(s).toLocaleString():N,$=s=>{const e=new Date(s).getTime()-Date.now();if(e<=0)return"expired";const l=Math.floor(e/1e3);if(l<60)return"in "+l+"s";const o=Math.floor(l/60);if(o<60)return"in "+o+"m";const c=Math.floor(o/60);return c<24?"in "+c+"h "+o%60+"m":"in "+Math.floor(c/24)+"d "+c%24+"h"},J=s=>{if(!s)return"text-foreground-muted";const e=new Date(s).getTime()-Date.now();return e<=6e4?"text-red-400":e<=5*6e4?"text-amber-400":"text-foreground-muted"};return ae(g),ie(g),de(()=>{clearTimeout(K)}),(s,e)=>{const l=ce("router-link");return d(),i("div",ye,[t("div",ge,[t("div",null,[e[16]||(e[16]=t("h1",{class:"text-xl font-semibold text-white tracking-tight"}," KV Store ",-1)),t("p",be,[e[14]||(e[14]=u(" Per-function key/value state for ",-1)),f(l,{to:`/functions/${k.value}`,class:"text-white underline"},{default:p(()=>[u(a(k.value),1)]),_:1},8,["to"]),e[15]||(e[15]=u(" Values are JSON, optional TTL. ",-1))])]),t("div",we,[t("span",ke,[u(a(L.value)+" "+a(L.value===1?"key":"keys")+" ",1),j.value>0?(d(),i("span",he,"· "+a(z(j.value)),1)):v("",!0)]),f(b,{variant:"secondary",size:"sm",onClick:g},{default:p(()=>[f(w(ve),{class:C(["w-3.5 h-3.5",{"animate-spin":D.value}])},null,8,["class"]),e[17]||(e[17]=u(" Refresh ",-1))]),_:1}),f(b,{size:"sm",onClick:e[0]||(e[0]=o=>se())},{default:p(()=>[f(w(xe),{class:"w-3.5 h-3.5"}),e[18]||(e[18]=u(" Set key ",-1))]),_:1})])]),t("div",_e,[t("div",Se,[f(w(ue),{class:"w-3.5 h-3.5 absolute left-2.5 top-1/2 -translate-y-1/2 text-foreground-muted/60 pointer-events-none"}),h(t("input",{"onUpdate:modelValue":e[1]||(e[1]=o=>x.value=o),"aria-label":"Search keys by prefix",placeholder:"Search by key prefix… (e.g. user:)",class:"w-full bg-background border border-border rounded-md pl-8 pr-3 py-1.5 text-xs text-foreground placeholder-foreground-muted/60 focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onInput:Z},null,544),[[_,x.value]])]),x.value?(d(),i("button",{key:0,class:"text-[11px] text-foreground-muted hover:text-white px-2 py-1.5 transition-colors",onClick:e[2]||(e[2]=o=>{x.value="",g()})}," Clear ")):v("",!0),F.value?(d(),i("span",Te," Showing first "+a(y.value.length)+". Narrow the prefix to see more. ",1)):v("",!0)]),t("div",Ce,[t("ul",De,[(d(!0),i(S,null,Y(y.value,o=>(d(),i("li",{key:o.key,class:"px-4 py-3 cursor-pointer hover:bg-surface-hover transition-colors",onClick:c=>I(o)},[t("div",Ve,[t("div",Me,[t("div",ze,a(o.key),1),t("div",Le,a(R(o.value)),1),t("div",Ke,[o.expires_at?(d(),i("span",{key:0,class:C(J(o.expires_at))},a($(o.expires_at)),3)):v("",!0),t("span",Oe,a(z(o.size_bytes)),1),t("span",null,a(E(o.updated_at)),1)])]),t("div",{class:"shrink-0",onClick:e[3]||(e[3]=X(()=>{},["stop"]))},[f(H,{icon:w(U),variant:"danger",title:"Delete key",onClick:c=>P(o)},null,8,["icon","onClick"])])])],8,Ne))),128)),!D.value&&!y.value.length?(d(),i("li",$e,[x.value?(d(),i(S,{key:0},[e[19]||(e[19]=u(" No keys match ",-1)),t("code",Je,a(x.value),1),e[20]||(e[20]=u(". ",-1))],64)):(d(),i(S,{key:1},[e[21]||(e[21]=u(" No keys yet. Your function will write here when it calls ",-1)),e[22]||(e[22]=t("code",{class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},"orva.kv.put(...)",-1)),e[23]||(e[23]=u(". ",-1))],64))])):v("",!0)]),t("table",Ue,[e[29]||(e[29]=t("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[t("tr",null,[t("th",{class:"px-4 py-3"},"Key"),t("th",{class:"px-4 py-3 hidden md:table-cell"},"Value preview"),t("th",{class:"px-4 py-3 w-28 hidden sm:table-cell"},"TTL"),t("th",{class:"px-4 py-3 w-20 hidden lg:table-cell"},"Size"),t("th",{class:"px-4 py-3 w-28 hidden md:table-cell"},"Updated"),t("th",{class:"px-4 py-3 w-10 text-right"})])],-1)),t("tbody",Fe,[(d(!0),i(S,null,Y(y.value,o=>(d(),i("tr",{key:o.key,class:"hover:bg-surface-hover cursor-pointer transition-colors",onClick:c=>I(o)},[t("td",Ie,a(o.key),1),t("td",Pe,a(R(o.value)),1),t("td",Be,[o.expires_at?(d(),i("span",{key:0,class:C(["text-xs",J(o.expires_at)])},a($(o.expires_at)),3)):(d(),i("span",Re,a(w(N)),1))]),t("td",Ee,a(z(o.size_bytes)),1),t("td",Ye,a(E(o.updated_at)),1),t("td",{class:"px-4 py-3 text-right",onClick:e[4]||(e[4]=X(()=>{},["stop"]))},[f(H,{icon:w(U),variant:"danger",title:"Delete key",onClick:c=>P(o)},null,8,["icon","onClick"])])],8,je))),128)),!D.value&&!y.value.length?(d(),i("tr",qe,[t("td",Ae,[x.value?(d(),i(S,{key:0},[e[24]||(e[24]=u(" No keys match ",-1)),t("code",Xe,a(x.value),1),e[25]||(e[25]=u(". ",-1))],64)):(d(),i(S,{key:1},[e[26]||(e[26]=u(" No keys yet. Your function will write here when it calls ",-1)),e[27]||(e[27]=t("code",{class:"bg-surface px-1.5 py-0.5 rounded text-xs font-mono"},"orva.kv.put(...)",-1)),e[28]||(e[28]=u(". ",-1))],64))])])):v("",!0)])])]),f(Q,{modelValue:r.open,"onUpdate:modelValue":e[8]||(e[8]=o=>r.open=o),title:r.row?r.row.key:"Inspect key",width:"640px"},{footer:p(()=>[t("div",lt,[f(b,{variant:"danger",size:"sm",disabled:m.value,onClick:te},{default:p(()=>[f(w(U),{class:"w-3.5 h-3.5"}),e[36]||(e[36]=u(" Delete ",-1))]),_:1},8,["disabled"]),t("div",at,[f(b,{variant:"ghost",size:"sm",onClick:e[7]||(e[7]=o=>r.open=!1)},{default:p(()=>[...e[37]||(e[37]=[u(" Cancel ",-1)])]),_:1}),f(b,{size:"sm",disabled:m.value,loading:m.value,onClick:ee},{default:p(()=>[...e[38]||(e[38]=[u(" Save ",-1)])]),_:1},8,["disabled","loading"])])])]),default:p(()=>[r.row?(d(),i("div",Ge,[t("div",He,[t("div",Qe,[e[30]||(e[30]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Key",-1)),t("div",We,a(r.row.key),1)]),t("div",Ze,[e[31]||(e[31]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"TTL",-1)),t("div",{class:C(["text-xs text-white font-mono",J(r.row.expires_at)])},a(r.row.expires_at?$(r.row.expires_at):"Never"),3)]),t("div",et,[e[32]||(e[32]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Updated",-1)),t("div",tt,a(ne(r.row.updated_at)),1)]),t("div",st,[e[33]||(e[33]=t("div",{class:"text-[10px] uppercase tracking-wider text-foreground-muted mb-1"},"Size",-1)),t("div",ot,a(z(r.row.size_bytes)),1)])]),t("div",null,[e[34]||(e[34]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"}," TTL seconds (0 = never) ",-1)),h(t("input",{"onUpdate:modelValue":e[5]||(e[5]=o=>r.ttlSeconds=o),type:"number",min:"0",max:"31536000",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white font-mono focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[_,r.ttlSeconds,void 0,{number:!0}]]),t("p",{class:C(["text-[11px] mt-1.5",M(r.ttlSeconds)?"text-danger-fg":"text-foreground-muted"])}," Must be between 0 and 31536000 (1 year). ",2)]),t("div",null,[t("div",rt,[e[35]||(e[35]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Value (JSON)",-1)),r.error?(d(),i("span",nt,a(r.error),1)):v("",!0)]),h(t("textarea",{"onUpdate:modelValue":e[6]||(e[6]=o=>r.text=o),rows:"14",spellcheck:"false",class:"w-full bg-surface border border-border rounded p-3 text-xs text-white font-mono leading-relaxed focus:outline-none focus:border-white whitespace-pre overflow-x-auto"},null,512),[[_,r.text]])])])):v("",!0)]),_:1},8,["modelValue","title"]),f(Q,{modelValue:n.open,"onUpdate:modelValue":e[13]||(e[13]=o=>n.open=o),title:"Set key",width:"640px"},{footer:p(()=>[t("div",ft,[f(b,{variant:"ghost",size:"sm",onClick:e[12]||(e[12]=o=>n.open=!1)},{default:p(()=>[...e[42]||(e[42]=[u(" Cancel ",-1)])]),_:1}),f(b,{size:"sm",disabled:m.value||!n.key.trim(),loading:m.value,onClick:oe},{default:p(()=>[...e[43]||(e[43]=[u(" Save ",-1)])]),_:1},8,["disabled","loading"])])]),default:p(()=>[t("div",it,[t("div",null,[e[39]||(e[39]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Key",-1)),h(t("input",{"onUpdate:modelValue":e[9]||(e[9]=o=>n.key=o),placeholder:"e.g. user:42",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white font-mono focus:outline-none focus:border-white",spellcheck:"false"},null,512),[[_,n.key]])]),t("div",null,[e[40]||(e[40]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"}," TTL seconds (0 = never) ",-1)),h(t("input",{"onUpdate:modelValue":e[10]||(e[10]=o=>n.ttlSeconds=o),type:"number",min:"0",max:"31536000",class:"mt-2 w-full bg-surface border border-border rounded px-3 py-2 text-sm text-white font-mono focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[_,n.ttlSeconds,void 0,{number:!0}]]),t("p",{class:C(["text-[11px] mt-1.5",M(n.ttlSeconds)?"text-danger-fg":"text-foreground-muted"])}," Must be between 0 and 31536000 (1 year). ",2)]),t("div",null,[t("div",dt,[e[41]||(e[41]=t("label",{class:"text-xs uppercase tracking-wider text-foreground-muted"},"Value (JSON)",-1)),n.error?(d(),i("span",ut,a(n.error),1)):v("",!0)]),h(t("textarea",{"onUpdate:modelValue":e[11]||(e[11]=o=>n.text=o),rows:"14",spellcheck:"false",placeholder:'{"hello": "world"}',class:"w-full bg-surface border border-border rounded p-3 text-xs text-white font-mono leading-relaxed focus:outline-none focus:border-white whitespace-pre overflow-x-auto"},null,512),[[_,n.text]])])])]),_:1},8,["modelValue"])])}}};export{wt as default}; diff --git a/backend/internal/server/ui_dist/assets/Login-YGsZM8PV.js b/backend/internal/server/ui_dist/assets/Login-DmrBAvpc.js similarity index 95% rename from backend/internal/server/ui_dist/assets/Login-YGsZM8PV.js rename to backend/internal/server/ui_dist/assets/Login-DmrBAvpc.js index a0c542a..cdb04b7 100644 --- a/backend/internal/server/ui_dist/assets/Login-YGsZM8PV.js +++ b/backend/internal/server/ui_dist/assets/Login-DmrBAvpc.js @@ -1 +1 @@ -import{c as x,u as v,o as h,a as c,b as s,d as n,w,e as m,v as p,f,t as y,g as k,h as _,_ as S,i as I,r as u,j as g,O as N,k as U}from"./index-BMkkwZ9q.js";import{C as V}from"./circle-alert-DJMgVejj.js";const E=x("log-in",[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]]),L={class:"min-h-screen flex items-center justify-center bg-background p-4"},M={class:"w-full max-w-md"},O={class:"text-center mb-8"},j={class:"flex items-center justify-center gap-3 mb-4"},A={class:"bg-surface border border-border rounded-lg shadow-lg p-8"},B=["disabled"],C=["disabled"],D={key:0,class:"bg-danger-tint border border-danger-ring rounded-md px-4 py-3 flex items-start gap-2"},R={class:"text-sm text-danger-fg"},G={__name:"Login",setup(q){const d=I(),i=v();h(async()=>{await i.fetchAuthStatus()===!1&&d.replace("/onboarding")});const t=u({username:"",password:""}),a=u(""),r=u(!1),b=async()=>{a.value="",r.value=!0;const o=await i.login(t.value.username,t.value.password);r.value=!1,o.success?d.push("/"):o.code==="ONBOARDING_REQUIRED"?d.push("/onboarding"):a.value=o.error};return(o,e)=>(g(),c("div",L,[s("div",M,[s("div",O,[s("div",j,[n(N,{class:"w-12 h-12"}),e[2]||(e[2]=s("h1",{class:"text-3xl font-bold tracking-tight text-foreground"}," Orva ",-1))]),e[3]||(e[3]=s("p",{class:"text-foreground-muted text-sm"}," Serverless Platform ",-1))]),s("div",A,[e[7]||(e[7]=s("h2",{class:"text-xl font-semibold text-foreground mb-6"}," Sign In ",-1)),s("form",{class:"space-y-5",onSubmit:w(b,["prevent"])},[s("div",null,[e[4]||(e[4]=s("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"}," Username ",-1)),m(s("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>t.value.username=l),type:"text",required:"",class:"w-full bg-background border border-border rounded-md px-4 py-2.5 text-sm text-foreground placeholder-foreground-muted focus:outline-none focus:ring-2 focus:ring-primary transition-colors",placeholder:"Enter your username",disabled:r.value},null,8,B),[[p,t.value.username]])]),s("div",null,[e[5]||(e[5]=s("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"}," Password ",-1)),m(s("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>t.value.password=l),type:"password",required:"",class:"w-full bg-background border border-border rounded-md px-4 py-2.5 text-sm text-foreground placeholder-foreground-muted focus:outline-none focus:ring-2 focus:ring-primary transition-colors",placeholder:"Enter your password",disabled:r.value},null,8,C),[[p,t.value.password]])]),a.value?(g(),c("div",D,[n(f(V),{class:"w-5 h-5 text-danger-fg shrink-0 mt-0.5"}),s("p",R,y(a.value),1)])):k("",!0),n(S,{type:"submit",class:"w-full",loading:r.value,disabled:!t.value.username||!t.value.password||r.value},{default:_(()=>[n(f(E),{class:"w-4 h-4"}),e[6]||(e[6]=U(" Sign In ",-1))]),_:1},8,["loading","disabled"])],32)])])]))}};export{G as default}; +import{c as x,u as v,o as h,a as c,b as s,d as n,w,e as m,v as p,f,t as y,g as k,h as _,_ as S,i as I,r as u,j as g,O as N,k as U}from"./index-fIeDYqWy.js";import{C as V}from"./circle-alert-C9zmFbXU.js";const E=x("log-in",[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]]),L={class:"min-h-screen flex items-center justify-center bg-background p-4"},M={class:"w-full max-w-md"},O={class:"text-center mb-8"},j={class:"flex items-center justify-center gap-3 mb-4"},A={class:"bg-surface border border-border rounded-lg shadow-lg p-8"},B=["disabled"],C=["disabled"],D={key:0,class:"bg-danger-tint border border-danger-ring rounded-md px-4 py-3 flex items-start gap-2"},R={class:"text-sm text-danger-fg"},G={__name:"Login",setup(q){const d=I(),i=v();h(async()=>{await i.fetchAuthStatus()===!1&&d.replace("/onboarding")});const t=u({username:"",password:""}),a=u(""),r=u(!1),b=async()=>{a.value="",r.value=!0;const o=await i.login(t.value.username,t.value.password);r.value=!1,o.success?d.push("/"):o.code==="ONBOARDING_REQUIRED"?d.push("/onboarding"):a.value=o.error};return(o,e)=>(g(),c("div",L,[s("div",M,[s("div",O,[s("div",j,[n(N,{class:"w-12 h-12"}),e[2]||(e[2]=s("h1",{class:"text-3xl font-bold tracking-tight text-foreground"}," Orva ",-1))]),e[3]||(e[3]=s("p",{class:"text-foreground-muted text-sm"}," Serverless Platform ",-1))]),s("div",A,[e[7]||(e[7]=s("h2",{class:"text-xl font-semibold text-foreground mb-6"}," Sign In ",-1)),s("form",{class:"space-y-5",onSubmit:w(b,["prevent"])},[s("div",null,[e[4]||(e[4]=s("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"}," Username ",-1)),m(s("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>t.value.username=l),type:"text",required:"",class:"w-full bg-background border border-border rounded-md px-4 py-2.5 text-sm text-foreground placeholder-foreground-muted focus:outline-none focus:ring-2 focus:ring-primary transition-colors",placeholder:"Enter your username",disabled:r.value},null,8,B),[[p,t.value.username]])]),s("div",null,[e[5]||(e[5]=s("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-2"}," Password ",-1)),m(s("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>t.value.password=l),type:"password",required:"",class:"w-full bg-background border border-border rounded-md px-4 py-2.5 text-sm text-foreground placeholder-foreground-muted focus:outline-none focus:ring-2 focus:ring-primary transition-colors",placeholder:"Enter your password",disabled:r.value},null,8,C),[[p,t.value.password]])]),a.value?(g(),c("div",D,[n(f(V),{class:"w-5 h-5 text-danger-fg shrink-0 mt-0.5"}),s("p",R,y(a.value),1)])):k("",!0),n(S,{type:"submit",class:"w-full",loading:r.value,disabled:!t.value.username||!t.value.password||r.value},{default:_(()=>[n(f(E),{class:"w-4 h-4"}),e[6]||(e[6]=U(" Sign In ",-1))]),_:1},8,["loading","disabled"])],32)])])]))}};export{G as default}; diff --git a/backend/internal/server/ui_dist/assets/Modal-jEhKmxZK.js b/backend/internal/server/ui_dist/assets/Modal-DRIalOH5.js similarity index 97% rename from backend/internal/server/ui_dist/assets/Modal-jEhKmxZK.js rename to backend/internal/server/ui_dist/assets/Modal-DRIalOH5.js index 14d14a3..aec2832 100644 --- a/backend/internal/server/ui_dist/assets/Modal-jEhKmxZK.js +++ b/backend/internal/server/ui_dist/assets/Modal-DRIalOH5.js @@ -1 +1 @@ -import{a$ as p,b0 as y,o as w,y as g,j as a,n as c,d as m,h as k,a as u,w as v,b as t,s as V,H as C,g as r,t as _,f as $,aa as j,K as f,J as z,Q as B,r as S,q as E}from"./index-BMkkwZ9q.js";const M={class:"flex items-center justify-between px-5 py-3 border-b border-border shrink-0"},N={class:"flex items-center gap-2 min-w-0"},R=["aria-label"],T={class:"p-5 overflow-y-auto scrollable flex-1 max-h-[calc(100dvh-9rem)] sm:max-h-[70vh]"},q={key:0,class:"px-5 py-3 border-t border-border flex items-center justify-end gap-2 bg-surface/40 shrink-0"},K={__name:"Modal",props:{modelValue:{type:Boolean,default:!1},title:{type:String,required:!0},icon:{type:[Object,Function],default:null},size:{type:String,default:"md",validator:e=>["sm","md","lg","xl"].includes(e)}},emits:["update:modelValue"],setup(e,{emit:b}){const o=e,h=b,n=`modal-title-${Math.random().toString(36).slice(2,10)}`,i=S(null);p(i,y(o,"modelValue"));const x=E(()=>{switch(o.size){case"sm":return"sm:max-w-sm";case"lg":return"sm:max-w-2xl";case"xl":return"sm:max-w-4xl";default:return"sm:max-w-lg"}}),l=()=>h("update:modelValue",!1),d=s=>{s.key==="Escape"&&o.modelValue&&l()};return w(()=>window.addEventListener("keydown",d)),g(()=>window.removeEventListener("keydown",d)),(s,D)=>(a(),c(B,{to:"body"},[m(z,{name:"fade"},{default:k(()=>[e.modelValue?(a(),u("div",{key:0,class:"fixed inset-0 z-40 flex items-stretch sm:items-center justify-center overflow-y-auto bg-black/60 backdrop-blur-sm pt-safe pb-safe pl-safe pr-safe p-2 sm:p-4",onClick:v(l,["self"])},[t("div",{ref_key:"dialogRoot",ref:i,class:V(["w-full bg-background border border-border rounded-lg shadow-xl my-0 sm:my-auto flex flex-col max-w-full",x.value]),role:"dialog","aria-modal":"true","aria-labelledby":n},[t("header",M,[t("div",N,[e.icon?(a(),c(C(e.icon),{key:0,class:"w-4 h-4 text-foreground-muted shrink-0"})):r("",!0),t("h3",{id:n,class:"text-sm font-semibold text-white tracking-tight truncate"},_(e.title),1)]),t("button",{class:"p-1.5 -mr-1.5 rounded text-foreground-muted hover:text-white hover:bg-surface-hover transition-colors touch-expand-iconbtn shrink-0","aria-label":`Close ${e.title}`,onClick:l},[m($(j),{class:"w-4 h-4"})],8,R)]),t("div",T,[f(s.$slots,"default")]),s.$slots.footer?(a(),u("footer",q,[f(s.$slots,"footer")])):r("",!0)],2)])):r("",!0)]),_:3})]))}};export{K as _}; +import{a$ as p,b0 as y,o as w,y as g,j as a,n as c,d as m,h as k,a as u,w as v,b as t,s as V,H as C,g as r,t as _,f as $,aa as j,K as f,J as z,Q as B,r as S,q as E}from"./index-fIeDYqWy.js";const M={class:"flex items-center justify-between px-5 py-3 border-b border-border shrink-0"},N={class:"flex items-center gap-2 min-w-0"},R=["aria-label"],T={class:"p-5 overflow-y-auto scrollable flex-1 max-h-[calc(100dvh-9rem)] sm:max-h-[70vh]"},q={key:0,class:"px-5 py-3 border-t border-border flex items-center justify-end gap-2 bg-surface/40 shrink-0"},K={__name:"Modal",props:{modelValue:{type:Boolean,default:!1},title:{type:String,required:!0},icon:{type:[Object,Function],default:null},size:{type:String,default:"md",validator:e=>["sm","md","lg","xl"].includes(e)}},emits:["update:modelValue"],setup(e,{emit:b}){const o=e,h=b,n=`modal-title-${Math.random().toString(36).slice(2,10)}`,i=S(null);p(i,y(o,"modelValue"));const x=E(()=>{switch(o.size){case"sm":return"sm:max-w-sm";case"lg":return"sm:max-w-2xl";case"xl":return"sm:max-w-4xl";default:return"sm:max-w-lg"}}),l=()=>h("update:modelValue",!1),d=s=>{s.key==="Escape"&&o.modelValue&&l()};return w(()=>window.addEventListener("keydown",d)),g(()=>window.removeEventListener("keydown",d)),(s,D)=>(a(),c(B,{to:"body"},[m(z,{name:"fade"},{default:k(()=>[e.modelValue?(a(),u("div",{key:0,class:"fixed inset-0 z-40 flex items-stretch sm:items-center justify-center overflow-y-auto bg-black/60 backdrop-blur-sm pt-safe pb-safe pl-safe pr-safe p-2 sm:p-4",onClick:v(l,["self"])},[t("div",{ref_key:"dialogRoot",ref:i,class:V(["w-full bg-background border border-border rounded-lg shadow-xl my-0 sm:my-auto flex flex-col max-w-full",x.value]),role:"dialog","aria-modal":"true","aria-labelledby":n},[t("header",M,[t("div",N,[e.icon?(a(),c(C(e.icon),{key:0,class:"w-4 h-4 text-foreground-muted shrink-0"})):r("",!0),t("h3",{id:n,class:"text-sm font-semibold text-white tracking-tight truncate"},_(e.title),1)]),t("button",{class:"p-1.5 -mr-1.5 rounded text-foreground-muted hover:text-white hover:bg-surface-hover transition-colors touch-expand-iconbtn shrink-0","aria-label":`Close ${e.title}`,onClick:l},[m($(j),{class:"w-4 h-4"})],8,R)]),t("div",T,[f(s.$slots,"default")]),s.$slots.footer?(a(),u("footer",q,[f(s.$slots,"footer")])):r("",!0)],2)])):r("",!0)]),_:3})]))}};export{K as _}; diff --git a/backend/internal/server/ui_dist/assets/NotFound-BmRAxlxU.js b/backend/internal/server/ui_dist/assets/NotFound-CcZlcrLG.js similarity index 89% rename from backend/internal/server/ui_dist/assets/NotFound-BmRAxlxU.js rename to backend/internal/server/ui_dist/assets/NotFound-CcZlcrLG.js index c25a77f..13b7a24 100644 --- a/backend/internal/server/ui_dist/assets/NotFound-BmRAxlxU.js +++ b/backend/internal/server/ui_dist/assets/NotFound-CcZlcrLG.js @@ -1 +1 @@ -import{a as u,b as o,d as e,t as m,f as r,k as n,q as x,i as c,a9 as p,j as f,O as g}from"./index-BMkkwZ9q.js";import{A as b}from"./arrow-left-C4STwFAY.js";import{B as v}from"./book-open-CAmAR_fB.js";const h={class:"min-h-screen flex items-center justify-center bg-background px-6 py-16"},k={class:"max-w-lg w-full"},w={class:"flex items-center gap-3 mb-10"},y={class:"bg-surface border border-border rounded-md px-3 py-2 mb-8 overflow-x-auto"},O={class:"text-xs font-mono text-foreground break-all"},_={class:"flex flex-wrap gap-3"},j={__name:"NotFound",setup(B){const a=p(),s=c(),d=x(()=>a.fullPath||"/"),i=()=>s.push("/functions"),l=()=>s.push("/docs");return(N,t)=>(f(),u("div",h,[o("div",k,[o("div",w,[e(g,{class:"w-7 h-7"}),t[0]||(t[0]=o("span",{class:"font-semibold tracking-tight text-foreground text-lg"},"Orva",-1))]),t[3]||(t[3]=o("p",{class:"text-xs uppercase tracking-[0.2em] text-foreground-muted mb-3"}," Error 404 ",-1)),t[4]||(t[4]=o("h1",{class:"text-3xl sm:text-4xl font-semibold text-foreground mb-4 leading-tight"}," Page not found. ",-1)),t[5]||(t[5]=o("p",{class:"text-sm text-foreground-muted mb-2"}," Nothing is mapped to this URL on this Orva instance. ",-1)),t[6]||(t[6]=o("p",{class:"text-sm text-foreground-muted mb-8"}," You tried: ",-1)),o("div",y,[o("code",O,m(d.value),1)]),o("div",_,[o("button",{class:"inline-flex items-center gap-2 px-4 py-2 rounded-md bg-white text-black text-sm font-medium hover:bg-white/90 transition-colors",onClick:i},[e(r(b),{class:"w-4 h-4"}),t[1]||(t[1]=n(" Go to Functions ",-1))]),o("button",{class:"inline-flex items-center gap-2 px-4 py-2 rounded-md border border-border text-sm text-foreground hover:bg-surface-hover transition-colors",onClick:l},[e(r(v),{class:"w-4 h-4"}),t[2]||(t[2]=n(" Open docs ",-1))])])])]))}};export{j as default}; +import{a as u,b as o,d as e,t as m,f as r,k as n,q as x,i as c,a9 as p,j as f,O as g}from"./index-fIeDYqWy.js";import{A as b}from"./arrow-left-DiLFZEkx.js";import{B as v}from"./book-open-HLcwtuYW.js";const h={class:"min-h-screen flex items-center justify-center bg-background px-6 py-16"},k={class:"max-w-lg w-full"},w={class:"flex items-center gap-3 mb-10"},y={class:"bg-surface border border-border rounded-md px-3 py-2 mb-8 overflow-x-auto"},O={class:"text-xs font-mono text-foreground break-all"},_={class:"flex flex-wrap gap-3"},j={__name:"NotFound",setup(B){const a=p(),s=c(),d=x(()=>a.fullPath||"/"),i=()=>s.push("/functions"),l=()=>s.push("/docs");return(N,t)=>(f(),u("div",h,[o("div",k,[o("div",w,[e(g,{class:"w-7 h-7"}),t[0]||(t[0]=o("span",{class:"font-semibold tracking-tight text-foreground text-lg"},"Orva",-1))]),t[3]||(t[3]=o("p",{class:"text-xs uppercase tracking-[0.2em] text-foreground-muted mb-3"}," Error 404 ",-1)),t[4]||(t[4]=o("h1",{class:"text-3xl sm:text-4xl font-semibold text-foreground mb-4 leading-tight"}," Page not found. ",-1)),t[5]||(t[5]=o("p",{class:"text-sm text-foreground-muted mb-2"}," Nothing is mapped to this URL on this Orva instance. ",-1)),t[6]||(t[6]=o("p",{class:"text-sm text-foreground-muted mb-8"}," You tried: ",-1)),o("div",y,[o("code",O,m(d.value),1)]),o("div",_,[o("button",{class:"inline-flex items-center gap-2 px-4 py-2 rounded-md bg-white text-black text-sm font-medium hover:bg-white/90 transition-colors",onClick:i},[e(r(b),{class:"w-4 h-4"}),t[1]||(t[1]=n(" Go to Functions ",-1))]),o("button",{class:"inline-flex items-center gap-2 px-4 py-2 rounded-md border border-border text-sm text-foreground hover:bg-surface-hover transition-colors",onClick:l},[e(r(v),{class:"w-4 h-4"}),t[2]||(t[2]=n(" Open docs ",-1))])])])]))}};export{j as default}; diff --git a/backend/internal/server/ui_dist/assets/Onboarding-CknTZuQK.js b/backend/internal/server/ui_dist/assets/Onboarding-CknTZuQK.js new file mode 100644 index 0000000..e9e80dc --- /dev/null +++ b/backend/internal/server/ui_dist/assets/Onboarding-CknTZuQK.js @@ -0,0 +1,6 @@ +import{c as O,u as T,o as $,a as p,b as s,d as b,l as z,w as B,e as C,v as D,m as E,f as g,g as F,n as M,F as I,p as R,t as q,h as H,_ as Z,i as G,r as x,q as S,j as l,O as J,s as V,k as K}from"./index-fIeDYqWy.js";import{C as Q}from"./copy-DJiur09W.js";import{C as W}from"./circle-alert-C9zmFbXU.js";const X=O("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);const Y=O("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),ee={class:"min-h-screen flex flex-col items-center justify-center bg-background pt-safe pb-safe pl-safe pr-safe px-page py-8 sm:py-12"},se={class:"w-full max-w-md space-y-8"},te={class:"space-y-3"},oe={class:"flex items-center gap-3"},ae=["disabled"],re={class:"flex flex-col sm:flex-row gap-2"},ne={class:"relative flex-1 min-w-0"},de=["type","disabled"],le={class:"absolute right-1.5 top-1/2 -translate-y-1/2 flex gap-0.5"},ue=["disabled"],ie=["disabled","aria-label","title"],ce=["disabled"],pe={class:"mt-3 grid grid-cols-2 gap-y-1.5 gap-x-3"},me={key:0,class:"bg-danger/10 border border-danger/30 rounded-md px-4 py-3 flex items-start gap-3"},fe={class:"text-sm text-danger"},we={__name:"Onboarding",setup(be){const w=G(),h=T(),o=x({username:"orva",password:""}),m=x(""),n=x(!1),u=x(!1),y=S(()=>({length:o.value.password.length>=10,lower:/[a-z]/.test(o.value.password),upper:/[A-Z]/.test(o.value.password),digit:/[0-9]/.test(o.value.password),symbol:/[^A-Za-z0-9]/.test(o.value.password)})),U=S(()=>{const t=y.value;return t.length&&t.lower&&t.upper&&t.digit&&t.symbol}),A=t=>({length:"10+ characters",lower:"Lowercase",upper:"Uppercase",digit:"Number",symbol:"Symbol"})[t]||t,N=()=>{const e="abcdefghijklmnopqrstuvwxyz",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",i="0123456789",k="!@#$%^&*()-_=+[]{}|;:,.<>?",P=e+r+i+k,_=a=>{const f=Math.floor(4294967295/a)*a;let v;do v=crypto.getRandomValues(new Uint32Array(1))[0];while(v>=f);return v%a},c=a=>a[_(a.length)];let d=[c(e),c(r),c(i),c(k)];for(let a=d.length;a<16;a+=1)d.push(c(P));for(let a=d.length-1;a>0;a-=1){const f=_(a+1);[d[a],d[f]]=[d[f],d[a]]}o.value.password=d.join("")},j=async()=>{try{await navigator.clipboard.writeText(o.value.password)}catch(t){console.error("Failed to copy password:",t)}},L=async()=>{m.value="",n.value=!0;const t=await h.onboard(o.value.username,o.value.password);n.value=!1,t.success?w.push("/"):m.value=t.error};return $(async()=>{await h.fetchAuthStatus()&&w.push("/login")}),(t,e)=>(l(),p("div",ee,[s("div",se,[s("div",te,[s("div",oe,[b(J,{class:"w-9 h-9"}),e[3]||(e[3]=s("span",{class:"text-2xl font-semibold tracking-tight text-white"},"Orva",-1))]),e[4]||(e[4]=s("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Set up admin access ",-1)),e[5]||(e[5]=s("p",{class:"text-sm text-foreground-muted leading-relaxed"}," Create the root user for this Orva instance. This is a one-time setup and cannot be repeated; export your password somewhere durable before you continue. ",-1))]),e[10]||(e[10]=z(``,1)),s("form",{class:"space-y-5",onSubmit:B(L,["prevent"])},[s("div",null,[e[6]||(e[6]=s("label",{for:"onboard-username",class:"block text-xs font-medium text-foreground-muted uppercase tracking-wide mb-1.5"},"Username",-1)),C(s("input",{id:"onboard-username","onUpdate:modelValue":e[0]||(e[0]=r=>o.value.username=r),type:"text",required:"",autocomplete:"username",class:"w-full bg-background border border-border rounded-md px-3 py-2.5 text-base sm:text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white transition-colors",placeholder:"orva",disabled:n.value},null,8,ae),[[D,o.value.username]])]),s("div",null,[e[7]||(e[7]=s("label",{for:"onboard-password",class:"block text-xs font-medium text-foreground-muted uppercase tracking-wide mb-1.5"},"Password",-1)),s("div",re,[s("div",ne,[C(s("input",{id:"onboard-password","onUpdate:modelValue":e[1]||(e[1]=r=>o.value.password=r),type:u.value?"text":"password",required:"",autocomplete:"new-password",class:"w-full bg-background border border-border rounded-md px-3 py-2.5 pr-20 text-base sm:text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white transition-colors font-mono",placeholder:"Minimum 10 characters",disabled:n.value},null,8,de),[[E,o.value.password]]),s("div",le,[o.value.password?(l(),p("button",{key:0,type:"button",class:"p-1.5 rounded hover:bg-surface-hover transition-colors touch-expand-iconbtn",disabled:n.value,"aria-label":"Copy password",title:"Copy password",onClick:j},[b(g(Q),{class:"w-4 h-4 text-foreground-muted hover:text-foreground"})],8,ue)):F("",!0),s("button",{type:"button",class:"p-1.5 rounded hover:bg-surface-hover transition-colors touch-expand-iconbtn",disabled:n.value,"aria-label":u.value?"Hide password":"Show password",title:u.value?"Hide password":"Show password",onClick:e[2]||(e[2]=r=>u.value=!u.value)},[u.value?(l(),M(g(X),{key:1,class:"w-4 h-4 text-foreground-muted hover:text-foreground"})):(l(),M(g(Y),{key:0,class:"w-4 h-4 text-foreground-muted hover:text-foreground"}))],8,ie)])]),s("button",{type:"button",class:"px-4 py-2.5 rounded-md border border-border bg-surface hover:bg-surface-hover text-sm font-medium text-foreground transition-colors shrink-0",disabled:n.value,onClick:N}," Generate ",8,ce)]),s("div",pe,[(l(!0),p(I,null,R(y.value,(r,i)=>(l(),p("div",{key:i,class:V(["flex items-center gap-1.5 text-xs transition-colors duration-200",r?"text-success":"text-foreground-muted"])},[s("div",{class:V(["w-1.5 h-1.5 rounded-full",r?"bg-success":"bg-foreground-muted/40"])},null,2),s("span",null,q(A(i)),1)],2))),128))])]),m.value?(l(),p("div",me,[b(g(W),{class:"w-5 h-5 text-danger shrink-0 mt-0.5"}),s("p",fe,q(m.value),1)])):F("",!0),b(Z,{type:"submit",class:"w-full",loading:n.value,disabled:!U.value||!o.value.username||n.value},{default:H(()=>[...e[8]||(e[8]=[K(" Create account ",-1)])]),_:1},8,["loading","disabled"]),e[9]||(e[9]=s("p",{class:"text-xs text-center text-foreground-muted pt-2"}," This action initialises your instance and cannot be undone. ",-1))],32)])]))}};export{we as default}; diff --git a/backend/internal/server/ui_dist/assets/Onboarding-DOb5mnY3.js b/backend/internal/server/ui_dist/assets/Onboarding-DOb5mnY3.js deleted file mode 100644 index 539d9f9..0000000 --- a/backend/internal/server/ui_dist/assets/Onboarding-DOb5mnY3.js +++ /dev/null @@ -1,6 +0,0 @@ -import{c as S,u as P,o as T,a as p,b as s,d as f,l as $,w as z,e as k,v as B,m as D,f as b,g as _,n as C,F as R,p as E,t as V,h as F,_ as H,i as I,r as g,q,j as l,O as Z,s as M,k as G}from"./index-BMkkwZ9q.js";import{C as J}from"./copy-CTb6u-fx.js";import{C as K}from"./circle-alert-DJMgVejj.js";const Q=S("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);const W=S("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),X={class:"min-h-screen flex flex-col items-center justify-center bg-background pt-safe pb-safe pl-safe pr-safe px-page py-8 sm:py-12"},Y={class:"w-full max-w-md space-y-8"},ee={class:"space-y-3"},se={class:"flex items-center gap-3"},te=["disabled"],oe={class:"flex flex-col sm:flex-row gap-2"},ae={class:"relative flex-1 min-w-0"},re=["type","disabled"],ne={class:"absolute right-1.5 top-1/2 -translate-y-1/2 flex gap-0.5"},de=["disabled"],le=["disabled","aria-label","title"],ue=["disabled"],ie={class:"mt-3 grid grid-cols-2 gap-y-1.5 gap-x-3"},ce={key:0,class:"bg-danger/10 border border-danger/30 rounded-md px-4 py-3 flex items-start gap-3"},pe={class:"text-sm text-danger"},xe={__name:"Onboarding",setup(me){const x=I(),v=P(),o=g({username:"orva",password:""}),m=g(""),n=g(!1),u=g(!1),w=q(()=>({length:o.value.password.length>=10,lower:/[a-z]/.test(o.value.password),upper:/[A-Z]/.test(o.value.password),digit:/[0-9]/.test(o.value.password),symbol:/[^A-Za-z0-9]/.test(o.value.password)})),U=q(()=>{const t=w.value;return t.length&&t.lower&&t.upper&&t.digit&&t.symbol}),A=t=>({length:"10+ characters",lower:"Lowercase",upper:"Uppercase",digit:"Number",symbol:"Symbol"})[t]||t,O=()=>{const e="abcdefghijklmnopqrstuvwxyz",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",i="0123456789",h="!@#$%^&*()-_=+[]{}|;:,.<>?",L=e+r+i+h,c=a=>a[crypto.getRandomValues(new Uint32Array(1))[0]%a.length];let d=[c(e),c(r),c(i),c(h)];for(let a=d.length;a<16;a+=1)d.push(c(L));for(let a=d.length-1;a>0;a-=1){const y=crypto.getRandomValues(new Uint32Array(1))[0]%(a+1);[d[a],d[y]]=[d[y],d[a]]}o.value.password=d.join("")},N=async()=>{try{await navigator.clipboard.writeText(o.value.password)}catch(t){console.error("Failed to copy password:",t)}},j=async()=>{m.value="",n.value=!0;const t=await v.onboard(o.value.username,o.value.password);n.value=!1,t.success?x.push("/"):m.value=t.error};return T(async()=>{await v.fetchAuthStatus()&&x.push("/login")}),(t,e)=>(l(),p("div",X,[s("div",Y,[s("div",ee,[s("div",se,[f(Z,{class:"w-9 h-9"}),e[3]||(e[3]=s("span",{class:"text-2xl font-semibold tracking-tight text-white"},"Orva",-1))]),e[4]||(e[4]=s("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Set up admin access ",-1)),e[5]||(e[5]=s("p",{class:"text-sm text-foreground-muted leading-relaxed"}," Create the root user for this Orva instance. This is a one-time setup and cannot be repeated; export your password somewhere durable before you continue. ",-1))]),e[10]||(e[10]=$(``,1)),s("form",{class:"space-y-5",onSubmit:z(j,["prevent"])},[s("div",null,[e[6]||(e[6]=s("label",{for:"onboard-username",class:"block text-xs font-medium text-foreground-muted uppercase tracking-wide mb-1.5"},"Username",-1)),k(s("input",{id:"onboard-username","onUpdate:modelValue":e[0]||(e[0]=r=>o.value.username=r),type:"text",required:"",autocomplete:"username",class:"w-full bg-background border border-border rounded-md px-3 py-2.5 text-base sm:text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white transition-colors",placeholder:"orva",disabled:n.value},null,8,te),[[B,o.value.username]])]),s("div",null,[e[7]||(e[7]=s("label",{for:"onboard-password",class:"block text-xs font-medium text-foreground-muted uppercase tracking-wide mb-1.5"},"Password",-1)),s("div",oe,[s("div",ae,[k(s("input",{id:"onboard-password","onUpdate:modelValue":e[1]||(e[1]=r=>o.value.password=r),type:u.value?"text":"password",required:"",autocomplete:"new-password",class:"w-full bg-background border border-border rounded-md px-3 py-2.5 pr-20 text-base sm:text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white transition-colors font-mono",placeholder:"Minimum 10 characters",disabled:n.value},null,8,re),[[D,o.value.password]]),s("div",ne,[o.value.password?(l(),p("button",{key:0,type:"button",class:"p-1.5 rounded hover:bg-surface-hover transition-colors touch-expand-iconbtn",disabled:n.value,"aria-label":"Copy password",title:"Copy password",onClick:N},[f(b(J),{class:"w-4 h-4 text-foreground-muted hover:text-foreground"})],8,de)):_("",!0),s("button",{type:"button",class:"p-1.5 rounded hover:bg-surface-hover transition-colors touch-expand-iconbtn",disabled:n.value,"aria-label":u.value?"Hide password":"Show password",title:u.value?"Hide password":"Show password",onClick:e[2]||(e[2]=r=>u.value=!u.value)},[u.value?(l(),C(b(Q),{key:1,class:"w-4 h-4 text-foreground-muted hover:text-foreground"})):(l(),C(b(W),{key:0,class:"w-4 h-4 text-foreground-muted hover:text-foreground"}))],8,le)])]),s("button",{type:"button",class:"px-4 py-2.5 rounded-md border border-border bg-surface hover:bg-surface-hover text-sm font-medium text-foreground transition-colors shrink-0",disabled:n.value,onClick:O}," Generate ",8,ue)]),s("div",ie,[(l(!0),p(R,null,E(w.value,(r,i)=>(l(),p("div",{key:i,class:M(["flex items-center gap-1.5 text-xs transition-colors duration-200",r?"text-success":"text-foreground-muted"])},[s("div",{class:M(["w-1.5 h-1.5 rounded-full",r?"bg-success":"bg-foreground-muted/40"])},null,2),s("span",null,V(A(i)),1)],2))),128))])]),m.value?(l(),p("div",ce,[f(b(K),{class:"w-5 h-5 text-danger shrink-0 mt-0.5"}),s("p",pe,V(m.value),1)])):_("",!0),f(H,{type:"submit",class:"w-full",loading:n.value,disabled:!U.value||!o.value.username||n.value},{default:F(()=>[...e[8]||(e[8]=[G(" Create account ",-1)])]),_:1},8,["loading","disabled"]),e[9]||(e[9]=s("p",{class:"text-xs text-center text-foreground-muted pt-2"}," This action initialises your instance and cannot be undone. ",-1))],32)])]))}};export{xe as default}; diff --git a/backend/internal/server/ui_dist/assets/Settings-DhV460vi.js b/backend/internal/server/ui_dist/assets/Settings-B47Vm5f4.js similarity index 98% rename from backend/internal/server/ui_dist/assets/Settings-DhV460vi.js rename to backend/internal/server/ui_dist/assets/Settings-B47Vm5f4.js index 9994600..0b72aa8 100644 --- a/backend/internal/server/ui_dist/assets/Settings-DhV460vi.js +++ b/backend/internal/server/ui_dist/assets/Settings-B47Vm5f4.js @@ -1 +1 @@ -import{c as $,C as be,o as D,j as s,a as o,b as e,F as V,p as A,t as u,g as v,s as R,d as m,h as C,k as i,_ as M,f as c,e as E,a1 as Ae,b1 as Re,Y as Te,r as f,D as ye,Z as ne,u as Pe,x as Be,M as Ie,N as re,w as ze,v as ae,b2 as Ue,b3 as Oe,b4 as Ne,b5 as je,q as j,b6 as Fe,i as De,n as Ee,H as qe,b7 as He,b8 as Ke,b9 as Ge}from"./index-BMkkwZ9q.js";import{E as Z}from"./format-CsU4_SPu.js";import{_ as Q}from"./Input-i1hDoPmt.js";import{u as Ye,D as Ze}from"./ai-DmyZUAtW.js";import{c as Qe}from"./clipboard-CmSw2rR-.js";import{f as F}from"./time-Cfu9zNbw.js";import{T as We}from"./terminal-DAVNGL0P.js";import{C as Xe}from"./copy-CTb6u-fx.js";import{K as ve}from"./key-round-BccKiRw7.js";import{T as fe}from"./trash-2-BXf2uqQH.js";const Je=$("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);const et=$("database-backup",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 12a9 3 0 0 0 5 2.69",key:"1ui2ym"}],["path",{d:"M21 9.3V5",key:"6k6cib"}],["path",{d:"M3 5v14a9 3 0 0 0 6.47 2.88",key:"i62tjy"}],["path",{d:"M12 12v4h4",key:"1bxaet"}],["path",{d:"M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16",key:"1f4ei9"}]]);const tt=$("hard-drive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);const st=$("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);const ot=$("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);const xe=$("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);const rt=$("mouse-pointer-2",[["path",{d:"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z",key:"edeuup"}]]);const at=$("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);const nt=$("wand-sparkles",[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]]),lt={class:"space-y-6"},dt={class:"space-y-3"},it={class:"space-y-2"},ut={class:"flex items-center gap-2 px-3 py-2"},ct={class:"font-mono text-sm text-foreground"},mt={key:0,class:"text-xs text-foreground-muted"},pt={key:0,class:"px-3 pb-2.5 -mt-0.5"},vt={key:0,class:"text-xs text-danger-fg"},ft={key:1,class:"text-xs text-foreground-muted"},xt={key:2,class:"flex flex-wrap gap-1"},gt={key:0,class:"text-xs text-foreground-muted"},bt={class:"space-y-3 border-t border-border pt-5"},yt=["value"],ht={key:0,class:"space-y-3 border-t border-border pt-5"},kt={class:"space-y-2"},wt=["value"],_t={key:0,class:"h-2 w-2 rounded-full bg-primary"},Ct={class:"min-w-0"},St={class:"block text-sm font-medium text-foreground"},Mt={class:"mt-0.5 block text-xs text-foreground-muted leading-snug"},$t={__name:"AISettingsPanel",setup(T){const l=Ye(),q=be();async function W(w){await q.ask({title:"Remove provider?",message:"This permanently removes the provider and its encrypted API key.",danger:!0,confirmLabel:"Remove"})&&l.deleteProvider(w)}const X=["openai","anthropic","groq","gemini","ollama","mistral","openrouter","xai","cohere"],h=[{value:"all_writes",label:"Ask before changes (recommended)",hint:"The assistant asks first before it creates, updates, or deletes anything."},{value:"destructive_only",label:"Ask before deletes only",hint:"Routine changes run on their own. Only destructive actions, like deleting, ask first."},{value:"auto",label:"Bypass: allow everything",hint:"Every action runs automatically with no prompts. Fastest, least safe."}],g=f({provider:"openai",label:"",api_key:"",base_url:""}),P=f(!1),B=f(!1),x=f({});function k(w){return x.value[w]||{loading:!1,loaded:!1,models:[],error:""}}D(()=>{l.loadProviders(),l.loadSettings()});async function S(w){x.value={...x.value,[w]:{loading:!0,loaded:!1,models:[],error:""}};try{const{data:a}=await Te.get(`/ai/providers/${w}/models`);x.value={...x.value,[w]:{loading:!1,loaded:!0,models:a.models||[],error:a.error||""}}}catch(a){x.value={...x.value,[w]:{loading:!1,loaded:!0,models:[],error:a.message}}}}async function I(){if(g.value.provider){P.value=!0;try{await l.saveProvider({provider:g.value.provider,label:g.value.label,api_key:g.value.api_key,base_url:g.value.base_url,enabled:!0}),g.value.api_key=""}finally{P.value=!1}}}async function J(){B.value=!0;try{l.settings.max_tool_iterations=Number(l.settings.max_tool_iterations)||25,await l.saveSettings(l.settings)}finally{B.value=!1}}return(w,a)=>(s(),o("div",lt,[e("section",dt,[a[9]||(a[9]=e("div",null,[e("h3",{class:"text-xs font-bold uppercase tracking-label text-foreground-muted"}," Providers "),e("p",{class:"text-xs text-foreground-muted mt-1.5 max-w-prose leading-snug"}," Bring your own keys. Keys are encrypted at rest; models are listed live from each provider. Pick the provider + model inside the chat composer. ")],-1)),e("div",it,[(s(!0),o(V,null,A(c(l).providers,n=>(s(),o("div",{key:n.id,class:"rounded-md bg-surface border border-border"},[e("div",ut,[e("span",ct,u(n.provider),1),n.label?(s(),o("span",mt,u(n.label),1)):v("",!0),e("span",{class:R(["text-[10px] uppercase tracking-label rounded px-1.5 py-0.5",n.has_key?"bg-success-tint text-success-fg":"bg-surface-hover text-foreground-muted"])},u(n.has_key?"key set":"no key"),3),a[8]||(a[8]=e("span",{class:"flex-1"},null,-1)),m(M,{size:"xs",variant:"secondary",loading:k(n.id).loading,onClick:b=>S(n.id)},{default:C(()=>[...a[6]||(a[6]=[i(" Models ",-1)])]),_:1},8,["loading","onClick"]),m(M,{size:"xs",variant:"ghost",onClick:b=>W(n.id)},{default:C(()=>[...a[7]||(a[7]=[i(" Remove ",-1)])]),_:1},8,["onClick"])]),k(n.id).loaded?(s(),o("div",pt,[k(n.id).error?(s(),o("p",vt,u(k(n.id).error),1)):k(n.id).models.length?(s(),o("div",xt,[(s(!0),o(V,null,A(k(n.id).models,b=>(s(),o("span",{key:b.id,class:"text-[11px] font-mono text-foreground-muted bg-surface-hover rounded px-1.5 py-0.5"},u(b.id),1))),128))])):(s(),o("p",ft," No models reported by this endpoint. "))])):v("",!0)]))),128)),c(l).providers.length?v("",!0):(s(),o("p",gt," No providers configured yet. "))])]),e("section",bt,[a[12]||(a[12]=e("h3",{class:"text-xs font-bold uppercase tracking-label text-foreground-muted"}," Add provider ",-1)),a[13]||(a[13]=e("p",{class:"text-xs text-foreground-muted -mt-0.5 max-w-prose leading-snug"},[i(" For any OpenAI-compatible endpoint (self-hosted, vLLM, Together, …) choose "),e("span",{class:"font-mono"},"openai"),i(" and set the Base URL. ")],-1)),e("div",null,[a[10]||(a[10]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},"Provider",-1)),E(e("select",{"onUpdate:modelValue":a[0]||(a[0]=n=>g.value.provider=n),class:"mt-1.5 w-full bg-background border border-border rounded-md text-sm px-3 py-2 text-foreground transition-colors duration-200 focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},[(s(),o(V,null,A(X,n=>e("option",{key:n,value:n},u(n),9,yt)),64))],512),[[Ae,g.value.provider]])]),m(Q,{modelValue:g.value.label,"onUpdate:modelValue":a[1]||(a[1]=n=>g.value.label=n),label:"Label",placeholder:"e.g. personal, work (optional)"},null,8,["modelValue"]),m(Q,{modelValue:g.value.base_url,"onUpdate:modelValue":a[2]||(a[2]=n=>g.value.base_url=n),label:"Base URL (optional)",placeholder:"https://api.openai.com/v1 or https://your-host/v1",hint:"For custom / self-hosted endpoints. Either with or without /v1 works."},null,8,["modelValue"]),m(Q,{modelValue:g.value.api_key,"onUpdate:modelValue":a[3]||(a[3]=n=>g.value.api_key=n),label:"API key",type:"password",placeholder:"sk-…",hint:"Stored encrypted; never shown again. Leave blank when updating to keep the current key."},null,8,["modelValue"]),m(M,{variant:"primary",loading:P.value,disabled:!g.value.provider,onClick:I},{default:C(()=>[...a[11]||(a[11]=[i(" Save provider ",-1)])]),_:1},8,["loading","disabled"])]),c(l).settings?(s(),o("section",ht,[a[17]||(a[17]=e("h3",{class:"text-xs font-bold uppercase tracking-label text-foreground-muted"}," Defaults ",-1)),e("fieldset",kt,[a[14]||(a[14]=e("legend",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"}," Approval policy ",-1)),a[15]||(a[15]=e("p",{class:"text-xs text-foreground-muted leading-snug"}," Reads always run on their own. This controls when the assistant pauses for your OK before it changes anything. ",-1)),(s(),o(V,null,A(h,n=>e("label",{key:n.value,class:R(["flex cursor-pointer items-start gap-3 rounded-md border px-3 py-2.5 transition-colors focus-within:outline-none focus-within:ring-2 focus-within:ring-inset focus-within:ring-primary",c(l).settings.approval_policy===n.value?"border-primary/50 bg-primary/10":"border-border bg-background hover:bg-surface-hover"])},[E(e("input",{"onUpdate:modelValue":a[4]||(a[4]=b=>c(l).settings.approval_policy=b),type:"radio",name:"approval-policy",value:n.value,class:"sr-only"},null,8,wt),[[Re,c(l).settings.approval_policy]]),e("span",{class:R(["mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border transition-colors",c(l).settings.approval_policy===n.value?"border-primary":"border-foreground-muted/50"])},[c(l).settings.approval_policy===n.value?(s(),o("span",_t)):v("",!0)],2),e("span",Ct,[e("span",St,u(n.label),1),e("span",Mt,u(n.hint),1)])],2)),64))]),m(Q,{modelValue:c(l).settings.max_tool_iterations,"onUpdate:modelValue":a[5]||(a[5]=n=>c(l).settings.max_tool_iterations=n),type:"number",label:"Tool steps per reply",hint:"The most tool calls the assistant may chain while answering one message before it stops and responds. Higher allows more complex multi-step tasks; 25 is a sensible default."},null,8,["modelValue"]),m(M,{variant:"primary",loading:B.value,onClick:J},{default:C(()=>[...a[16]||(a[16]=[i(" Save defaults ",-1)])]),_:1},8,["loading"])])):v("",!0)]))}},Lt={},Vt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"};function At(T,l){return s(),o("svg",Vt,[...l[0]||(l[0]=[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"},null,-1)])])}const Rt=ye(Lt,[["render",At]]),Tt={},Pt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"};function Bt(T,l){return s(),o("svg",Pt,[...l[0]||(l[0]=[e("path",{d:"M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.146-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.418 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.349-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.658-.851-.747-1.926-1.622h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"},null,-1)])])}const It=ye(Tt,[["render",Bt]]);function ge(T){const l=(T||"").toLowerCase();return l.includes("claude code")?{icon:We,accent:"text-orange-400"}:l.includes("chatgpt")||l.includes("openai")?{icon:Rt,accent:"text-emerald-400"}:l.includes("claude")||l.includes("anthropic")?{icon:It,accent:"text-orange-400"}:l.includes("cursor")?{icon:rt,accent:"text-blue-400"}:l.includes("vscode")||l.includes("vs code")||l.includes("code")?{icon:Je,accent:"text-blue-400"}:{icon:ne,accent:"text-foreground-muted"}}const zt={class:"space-y-6"},Ut={class:"bg-background border border-border rounded-lg p-5 space-y-3"},Ot={class:"text-sm font-semibold text-white flex items-center gap-2"},Nt={class:"grid grid-cols-[max-content,1fr] gap-x-6 gap-y-2 text-xs"},jt={class:"font-mono text-white"},Ft={class:"font-mono text-white"},Dt={class:"font-mono text-white"},Et={class:"font-mono text-white flex items-center gap-2 min-w-0"},qt={class:"truncate"},Ht={key:1,class:"text-[10px] text-primary-light shrink-0"},Kt={id:"ai",class:"bg-background border border-border rounded-lg p-5 space-y-4 scroll-mt-6"},Gt={class:"text-sm font-semibold text-white flex items-center gap-2"},Yt={class:"bg-background border border-border rounded-lg p-5 space-y-4"},Zt={class:"flex items-start justify-between gap-4"},Qt={class:"text-sm font-semibold text-white flex items-center gap-2"},Wt={key:0,class:"text-xs text-foreground-muted italic"},Xt={key:1,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},Jt={class:"font-mono break-all"},es={key:2,class:"space-y-3"},ts={class:"h-2 w-full rounded-full overflow-hidden bg-border/60 flex"},ss=["title"],os=["title"],rs=["title"],as={class:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-1.5 text-xs"},ns={class:"flex items-center justify-between"},ls={class:"font-mono text-white"},ds={class:"flex items-center justify-between"},is={class:"font-mono text-white"},us={key:0,class:"flex items-center justify-between"},cs={class:"font-mono text-white"},ms={class:"flex items-center justify-between"},ps={class:"font-mono text-white font-semibold"},vs={key:0,class:"text-[11px] text-foreground-muted pt-1 border-t border-border"},fs={key:3,class:"rounded-md border border-emerald-700/40 bg-emerald-950/30 p-3 text-xs text-emerald-200"},xs={class:"font-mono"},gs={key:4,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},bs={class:"font-mono break-all"},ys={class:"bg-background border border-border rounded-lg p-5 space-y-4"},hs={class:"text-sm font-semibold text-white flex items-center gap-2"},ks={class:"grid grid-cols-1 sm:grid-cols-3 gap-3"},ws={class:"flex flex-col gap-1"},_s={class:"flex flex-col gap-1"},Cs={class:"flex flex-col gap-1"},Ss={key:0,id:"pw-error",class:"rounded-md border border-red-700/40 bg-red-950/30 p-2.5 text-xs text-red-200"},Ms={key:1,class:"rounded-md border border-emerald-700/40 bg-emerald-950/30 p-2.5 text-xs text-emerald-200"},$s={class:"pt-2 border-t border-border"},Ls={class:"bg-background border border-border rounded-lg p-5 space-y-4"},Vs={class:"flex items-start justify-between gap-4"},As={class:"text-sm font-semibold text-white flex items-center gap-2"},Rs={class:"text-xs text-foreground-muted mt-1 max-w-prose"},Ts={key:0,class:"text-xs text-foreground-muted self-center"},Ps={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},Bs={class:"font-mono break-all"},Is={key:1,class:"text-xs text-foreground-muted italic"},zs={key:2,class:"rounded-md border border-dashed border-border p-6 text-center"},Us={key:3,class:"divide-y divide-border -mx-5"},Os={class:"flex-1 min-w-0"},Ns={class:"text-sm font-medium text-white truncate"},js={class:"text-[11px] text-foreground-muted mt-0.5 flex flex-wrap gap-x-3 gap-y-0.5"},Fs={key:0},Ds={key:1,class:"italic opacity-70"},Es={key:2},qs={class:"flex flex-wrap gap-1 mt-2"},Hs=["disabled","onClick"],Ks={class:"bg-background border border-border rounded-lg p-5 space-y-4"},Gs={class:"flex items-start justify-between gap-4"},Ys={class:"text-sm font-semibold text-white flex items-center gap-2"},Zs={key:0,class:"text-xs text-foreground-muted self-center"},Qs={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},Ws={class:"font-mono break-all"},Xs={key:1,class:"divide-y divide-border -mx-5"},Js={class:"flex-1 min-w-0"},eo={class:"text-sm font-medium text-white flex items-center gap-2 flex-wrap"},to={key:0},so={key:1,class:"font-mono text-xs"},oo={key:2,class:"text-[10px] px-1.5 py-0.5 rounded bg-emerald-500/15 text-emerald-300 font-medium"},ro={class:"text-[11px] text-foreground-muted mt-0.5"},ao=["disabled","onClick"],no={class:"bg-background border border-border rounded-lg p-5 space-y-4"},lo={class:"flex items-start justify-between gap-4"},io={class:"text-sm font-semibold text-white flex items-center gap-2"},uo={class:"flex flex-col sm:flex-row gap-3 pt-2 border-t border-border"},co={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},mo={class:"font-mono break-all"},po={key:1,class:"rounded-md border border-emerald-700/40 bg-emerald-950/30 p-3 text-xs text-emerald-200"},Co={__name:"Settings",setup(T){const l=be(),q=Pe(),W=De(),X=Be(),h=j(()=>X.buildInfo),g=f(!1),P=async()=>{h.value?.image&&await Qe(h.value.image)&&(g.value=!0,setTimeout(()=>{g.value=!1},1500))},B=r=>{if(!r||r==="unknown")return Z;try{return new Date(r).toISOString().replace("T"," ").replace(/\.\d+Z$/," UTC")}catch{return r}},x=f({current:"",next:"",confirm:""}),k=f(!1),S=f(""),I=f(!1),J=async()=>{if(S.value="",I.value=!1,!x.value.current||!x.value.next||!x.value.confirm){S.value="All three fields are required.";return}if(x.value.next.length<8){S.value="New password must be at least 8 characters.";return}if(x.value.next!==x.value.confirm){S.value="New password and confirmation do not match.";return}k.value=!0;try{await q.changePassword(x.value.current,x.value.next),I.value=!0,x.value={current:"",next:"",confirm:""}}catch(r){S.value=r?.response?.data?.error?.message||"Failed to update password."}finally{k.value=!1}},w=async()=>{await q.logout(),W.push("/login")},a=f(null),n=f(!1),b=f(""),H=f(!1),p=f(null),z=f(""),K=f(!1),G=f(""),L=f(null),le=j(()=>p.value&&p.value.total_bytes>0?Math.max(.5,p.value.db_bytes/p.value.total_bytes*100):0),de=j(()=>p.value&&p.value.total_bytes>0&&p.value.wal_bytes>0?Math.max(.5,p.value.wal_bytes/p.value.total_bytes*100):0),ie=j(()=>p.value&&p.value.total_bytes>0?Math.max(.5,p.value.functions_bytes/p.value.total_bytes*100):0),ue=j(()=>p.value?(p.value.db_free_pages||0)*(p.value.db_page_size||0):0),ce=async()=>{try{z.value="";const r=await Oe();p.value=r.data}catch(r){z.value=r?.response?.data?.error?.message||r?.message||"unknown error"}},he=async()=>{if(await l.ask({title:"Compact database?",message:"VACUUM rewrites orva.db to drop the freelist and shrink the file. It holds an exclusive lock for the duration; every other writer (deploys, invocations recording executions, KV puts, job enqueues) blocks until it returns. Typical runtime is sub-second, but a heavily-loaded instance can stall for several seconds.",confirmLabel:"Compact",danger:!1})){K.value=!0,G.value="",L.value=null;try{const t=await He();L.value=t.data,await ce()}catch(t){G.value=t?.response?.data?.error?.message||t?.message||"vacuum failed"}finally{K.value=!1}}},_=r=>{if(r==null||isNaN(r))return Z;const t=1024;if(r=t&&oe{window.location.hash==="#ai"&&window.requestAnimationFrame(()=>{document.getElementById("ai")?.scrollIntoView({behavior:"smooth",block:"start"})})});const U=f([]),ee=f(!1),O=f(""),te=f(""),me=async()=>{ee.value=!0,O.value="";try{const r=await Ne();U.value=r.data.apps||[]}catch(r){O.value=r?.response?.data?.error?.message||r?.message||"unknown error"}finally{ee.value=!1}},ke=async r=>{if(await l.ask({title:`Revoke ${r.client_name}?`,message:`${r.client_name} will lose access immediately. Any in-flight request will fail with 401. The connector can be re-authorized at any time from the originating app.`,confirmLabel:"Revoke",danger:!0})){te.value=r.id;try{await Ke(r.id),await me()}catch(d){O.value=d?.response?.data?.error?.message||d?.message||"failed to revoke"}finally{te.value=""}}},we=r=>(r||"").split(/\s+/).filter(Boolean),_e=r=>{switch(r){case"admin":return"bg-red-500/15 text-red-300";case"write":return"bg-amber-500/15 text-amber-300";case"invoke":return"bg-sky-500/15 text-sky-300";case"read":return"bg-foreground-muted/15 text-foreground-muted";default:return"bg-foreground-muted/10 text-foreground-muted"}},Y=f([]),N=f(""),se=f(""),pe=async()=>{N.value="";try{const r=await je();Y.value=r.data.sessions||[]}catch(r){N.value=r?.response?.data?.error?.message||r?.message||"unknown error"}},Ce=async r=>{if(await l.ask({title:"Revoke this session?",message:"The browser using this session will be logged out on its next request. Use this if you suspect a device was lost or to clean up old logins.",confirmLabel:"Revoke",danger:!0})){se.value=r.prefix;try{await Ge(r.prefix),await pe()}catch(d){N.value=d?.response?.data?.error?.message||d?.message||"failed to revoke"}finally{se.value=""}}},Se=r=>!r||r.length<8?r:r.slice(0,1)+"••••••••"+r.slice(-4);D(me),D(pe);const Me=()=>{window.location.assign("/api/v1/backup?ts="+Date.now())},$e=()=>{b.value="",H.value=!1,a.value?.click()},Le=async r=>{const t=r.target.files?.[0];if(r.target.value="",!(!t||!await l.ask({title:"Restore from backup?",message:`This will replace the live database and function code with the contents of "${t.name}". The current orva.db is moved aside as orva.db.before-restore- in case rollback is needed. You will need to reload after restore completes.`,confirmLabel:"Restore",danger:!0}))){n.value=!0,b.value="",H.value=!1;try{await Fe(t),H.value=!0}catch(y){b.value=y?.response?.data?.error?.message||y?.message||"Restore failed"}finally{n.value=!1}}},Ve=()=>{window.location.reload()};return(r,t)=>(s(),o("div",zt,[t[46]||(t[46]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Settings "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Operator-level controls for the running Orva instance. ")],-1)),e("div",Ut,[e("div",Ot,[m(c(st),{class:"w-4 h-4 text-foreground-muted"}),t[3]||(t[3]=i(" Build info ",-1))]),e("dl",Nt,[t[4]||(t[4]=e("dt",{class:"text-foreground-muted"},"Version",-1)),e("dd",jt,u(h.value?.version||c(Z)),1),t[5]||(t[5]=e("dt",{class:"text-foreground-muted"},"Commit",-1)),e("dd",Ft,u(h.value?.commit&&h.value.commit!=="unknown"?h.value.commit:"dev build"),1),t[6]||(t[6]=e("dt",{class:"text-foreground-muted"},"Built",-1)),e("dd",Dt,u(B(h.value?.buildTime)),1),t[7]||(t[7]=e("dt",{class:"text-foreground-muted"},"Image",-1)),e("dd",Et,[e("span",qt,u(h.value?.image||c(Z)),1),h.value?.image?(s(),o("button",{key:0,class:"p-1 rounded hover:bg-surface text-foreground-muted hover:text-white transition-colors shrink-0",title:"Copy image reference",onClick:P},[m(c(Xe),{class:"w-3.5 h-3.5"})])):v("",!0),g.value?(s(),o("span",Ht,"copied")):v("",!0)])])]),e("div",Kt,[e("div",null,[e("div",Gt,[m(c(Ie),{class:"w-4 h-4 text-foreground-muted"}),t[8]||(t[8]=i(" AI assistant ",-1))]),t[9]||(t[9]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose leading-body"}," Configure the providers, keys, and defaults for the in-product chat assistant. ",-1))]),m($t)]),e("div",Yt,[e("div",Zt,[e("div",null,[e("div",Qt,[m(c(tt),{class:"w-4 h-4 text-foreground-muted"}),t[10]||(t[10]=i(" Storage ",-1))]),t[11]||(t[11]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose"},[i(" On-disk breakdown of the data directory. "),e("code",{class:"text-[11px]"},"VACUUM"),i(" rewrites "),e("code",{class:"text-[11px]"},"orva.db"),i(", drops the freelist, and shrinks the file. The operation holds an exclusive lock; writes block briefly while it runs. ")],-1))]),m(M,{variant:"secondary",loading:K.value,disabled:!p.value||K.value,onClick:he},{default:C(()=>[m(c(nt),{class:"w-4 h-4"}),t[12]||(t[12]=i(" Compact database ",-1))]),_:1},8,["loading","disabled"])]),!p.value&&!z.value?(s(),o("div",Wt," Loading storage stats… ")):v("",!0),z.value?(s(),o("div",Xt,[t[13]||(t[13]=e("div",{class:"font-semibold text-red-100 mb-1"},"Failed to load storage stats",-1)),e("div",Jt,u(z.value),1)])):v("",!0),p.value?(s(),o("div",es,[e("div",ts,[le.value>0?(s(),o("div",{key:0,class:"bg-sky-500 h-full",style:re({width:le.value+"%"}),title:`orva.db: ${_(p.value.db_bytes)}`},null,12,ss)):v("",!0),de.value>0?(s(),o("div",{key:1,class:"bg-amber-500 h-full",style:re({width:de.value+"%"}),title:`WAL: ${_(p.value.wal_bytes)}`},null,12,os)):v("",!0),ie.value>0?(s(),o("div",{key:2,class:"bg-emerald-500 h-full",style:re({width:ie.value+"%"}),title:`functions/: ${_(p.value.functions_bytes)}`},null,12,rs)):v("",!0)]),e("div",as,[e("div",ns,[t[14]||(t[14]=e("span",{class:"flex items-center gap-2 text-foreground-muted"},[e("span",{class:"w-2 h-2 rounded-sm bg-sky-500"}),i(" orva.db ")],-1)),e("span",ls,u(_(p.value.db_bytes)),1)]),e("div",ds,[t[15]||(t[15]=e("span",{class:"flex items-center gap-2 text-foreground-muted"},[e("span",{class:"w-2 h-2 rounded-sm bg-emerald-500"}),i(" functions/ ")],-1)),e("span",is,u(_(p.value.functions_bytes)),1)]),p.value.wal_bytes>0?(s(),o("div",us,[t[16]||(t[16]=e("span",{class:"flex items-center gap-2 text-foreground-muted"},[e("span",{class:"w-2 h-2 rounded-sm bg-amber-500"}),i(" orva.db-wal ")],-1)),e("span",cs,u(_(p.value.wal_bytes)),1)])):v("",!0),e("div",ms,[t[17]||(t[17]=e("span",{class:"text-foreground-muted"},"total",-1)),e("span",ps,u(_(p.value.total_bytes)),1)])]),ue.value>0?(s(),o("div",vs,u(_(ue.value))+" reclaimable ("+u(p.value.db_free_pages)+" free SQLite pages) ",1)):v("",!0)])):v("",!0),L.value?(s(),o("div",fs,[i(" Compacted in "+u(L.value.duration_ms)+" ms — freed ",1),e("span",xs,u(_(L.value.freed_bytes)),1),i(" ("+u(_(L.value.before_bytes))+" → "+u(_(L.value.after_bytes))+"). ",1)])):v("",!0),G.value?(s(),o("div",gs,[t[18]||(t[18]=e("div",{class:"font-semibold text-red-100 mb-1"},"Compact failed",-1)),e("div",bs,u(G.value),1)])):v("",!0)]),e("div",ys,[e("div",null,[e("div",hs,[m(c(ve),{class:"w-4 h-4 text-foreground-muted"}),t[19]||(t[19]=i(" Account ",-1))]),t[20]||(t[20]=e("p",{class:"text-xs text-foreground-muted mt-1"}," Update your password or end your session. ",-1))]),e("form",{class:"space-y-3 pt-2 border-t border-border",onSubmit:ze(J,["prevent"])},[t[25]||(t[25]=e("div",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"}," Change password ",-1)),e("div",ks,[e("div",ws,[t[21]||(t[21]=e("label",{class:"text-xs text-foreground-muted"},"Current password",-1)),E(e("input",{"onUpdate:modelValue":t[0]||(t[0]=d=>x.value.current=d),type:"password",autocomplete:"current-password","aria-describedby":"pw-error",class:"bg-surface border border-border rounded-md px-3 py-2 text-sm text-white placeholder:text-foreground-muted focus:outline-none focus:ring-1 focus:ring-primary",placeholder:"••••••••"},null,512),[[ae,x.value.current]])]),e("div",_s,[t[22]||(t[22]=e("label",{class:"text-xs text-foreground-muted"},"New password",-1)),E(e("input",{"onUpdate:modelValue":t[1]||(t[1]=d=>x.value.next=d),type:"password",autocomplete:"new-password","aria-describedby":"pw-error",class:"bg-surface border border-border rounded-md px-3 py-2 text-sm text-white placeholder:text-foreground-muted focus:outline-none focus:ring-1 focus:ring-primary",placeholder:"••••••••"},null,512),[[ae,x.value.next]])]),e("div",Cs,[t[23]||(t[23]=e("label",{class:"text-xs text-foreground-muted"},"Confirm new password",-1)),E(e("input",{"onUpdate:modelValue":t[2]||(t[2]=d=>x.value.confirm=d),type:"password",autocomplete:"new-password","aria-describedby":"pw-error",class:"bg-surface border border-border rounded-md px-3 py-2 text-sm text-white placeholder:text-foreground-muted focus:outline-none focus:ring-1 focus:ring-primary",placeholder:"••••••••"},null,512),[[ae,x.value.confirm]])])]),S.value?(s(),o("div",Ss,u(S.value),1)):v("",!0),I.value?(s(),o("div",Ms," Password updated successfully. ")):v("",!0),m(M,{type:"submit",variant:"primary",loading:k.value,disabled:k.value},{default:C(()=>[m(c(ve),{class:"w-4 h-4"}),t[24]||(t[24]=i(" Update password ",-1))]),_:1},8,["loading","disabled"])],32),e("div",$s,[m(M,{variant:"danger",onClick:w},{default:C(()=>[m(c(ot),{class:"w-4 h-4"}),t[26]||(t[26]=i(" Log out ",-1))]),_:1})])]),e("div",Ls,[e("div",Vs,[e("div",null,[e("div",As,[m(c(ne),{class:"w-4 h-4 text-foreground-muted"}),t[27]||(t[27]=i(" Connected applications ",-1))]),e("p",Rs,[t[29]||(t[29]=i(" Apps you've granted access to your Orva via OAuth. Connect new ones from the ",-1)),m(c(Ue),{to:"/docs#mcp",class:"text-primary hover:underline"},{default:C(()=>[...t[28]||(t[28]=[i("Docs",-1)])]),_:1}),t[30]||(t[30]=i(" page. ",-1))])]),U.value.length>0?(s(),o("span",Ts,u(U.value.length)+" active ",1)):v("",!0)]),O.value?(s(),o("div",Ps,[t[31]||(t[31]=e("div",{class:"font-semibold text-red-100 mb-1"},"Failed to load connected apps",-1)),e("div",Bs,u(O.value),1)])):ee.value?(s(),o("div",Is," Loading… ")):U.value.length===0?(s(),o("div",zs,[m(c(ne),{class:"w-8 h-8 text-foreground-muted mx-auto mb-2 opacity-40"}),t[32]||(t[32]=e("p",{class:"text-xs text-foreground-muted"}," No connected applications yet. ",-1)),t[33]||(t[33]=e("p",{class:"text-[11px] text-foreground-muted mt-1"},[i(" Add Orva as a custom connector in "),e("span",{class:"text-foreground-muted"},"claude.ai"),i(" or "),e("span",{class:"text-foreground-muted"},"ChatGPT"),i(" and it'll appear here. ")],-1))])):(s(),o("ul",Us,[(s(!0),o(V,null,A(U.value,d=>(s(),o("li",{key:d.id,class:"px-5 py-3 flex items-start gap-3"},[(s(),Ee(qe(c(ge)(d.client_name).icon),{class:R(["w-5 h-5 mt-0.5 shrink-0",c(ge)(d.client_name).accent])},null,8,["class"])),e("div",Os,[e("div",Ns,u(d.client_name),1),e("div",js,[e("span",null,"Authorized "+u(c(F)(d.issued_at)),1),d.last_used_at?(s(),o("span",Fs," · Last used "+u(c(F)(d.last_used_at)),1)):(s(),o("span",Ds,"· Never used")),d.refresh_expires_at?(s(),o("span",Es," · Re-consent "+u(c(F)(d.refresh_expires_at)),1)):v("",!0)]),e("div",qs,[(s(!0),o(V,null,A(we(d.scope),y=>(s(),o("span",{key:y,class:R(["text-[10px] px-1.5 py-0.5 rounded font-mono",_e(y)])},u(y),3))),128))])]),e("button",{type:"button",class:"text-xs text-foreground-muted hover:text-red-400 transition-colors flex items-center gap-1 shrink-0 self-center",disabled:te.value===d.id,onClick:y=>ke(d)},[m(c(fe),{class:"w-3.5 h-3.5"}),t[34]||(t[34]=i(" Revoke ",-1))],8,Hs)]))),128))]))]),e("div",Ks,[e("div",Gs,[e("div",null,[e("div",Ys,[m(c(xe),{class:"w-4 h-4 text-foreground-muted"}),t[35]||(t[35]=i(" Active sessions ",-1))]),t[36]||(t[36]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose"}," Browsers signed in to this Orva. Revoke a session and that browser will need to log in again on its next request. ",-1))]),Y.value.length>0?(s(),o("span",Zs,u(Y.value.length)+" active ",1)):v("",!0)]),N.value?(s(),o("div",Qs,[t[37]||(t[37]=e("div",{class:"font-semibold text-red-100 mb-1"},"Failed to load sessions",-1)),e("div",Ws,u(N.value),1)])):(s(),o("ul",Xs,[(s(!0),o(V,null,A(Y.value,d=>(s(),o("li",{key:d.prefix,class:"px-5 py-3 flex items-start gap-3"},[m(c(xe),{class:R(["w-5 h-5 mt-0.5 shrink-0",d.current?"text-emerald-400":"text-foreground-muted"])},null,8,["class"]),e("div",Js,[e("div",eo,[d.current?(s(),o("span",to,"This session")):(s(),o("span",so,u(Se(d.prefix)),1)),d.current?(s(),o("span",oo," current ")):v("",!0)]),e("div",ro," Signed in "+u(c(F)(d.created_at))+" · expires "+u(c(F)(d.expires_at)),1)]),d.current?v("",!0):(s(),o("button",{key:0,type:"button",class:"text-xs text-foreground-muted hover:text-red-400 transition-colors flex items-center gap-1 shrink-0 self-center",disabled:se.value===d.prefix,onClick:y=>Ce(d)},[m(c(fe),{class:"w-3.5 h-3.5"}),t[38]||(t[38]=i(" Revoke ",-1))],8,ao))]))),128))]))]),e("div",no,[e("div",lo,[e("div",null,[e("div",io,[m(c(et),{class:"w-4 h-4 text-foreground-muted"}),t[39]||(t[39]=i(" Backup & Restore ",-1))]),t[40]||(t[40]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose"},[i(" One self-contained snapshot: the SQLite database ("),e("code",{class:"text-[11px]"},"VACUUM INTO"),i(" — fully checkpointed), every deployed function version, the secrets master key, and the bootstrap admin key. Carries a "),e("code",{class:"text-[11px]"},"manifest.json"),i(" with sha256 of every file so restore can detect tampering or truncation before touching live state. Restore on a fresh host and the install boots back up byte-faithful — secrets decrypt, the admin login still works. ")],-1)),t[41]||(t[41]=e("p",{class:"text-[11px] text-amber-300/80 mt-2 max-w-prose"}," Treat the file as sensitive — it contains your secrets master key. Store it like you would a password manager export (encrypted disk, S3 + SSE, etc.). ",-1))])]),e("div",uo,[m(M,{variant:"primary",onClick:Me},{default:C(()=>[m(c(Ze),{class:"w-4 h-4"}),t[42]||(t[42]=i(" Download backup ",-1))]),_:1}),m(M,{variant:"secondary",loading:n.value,onClick:$e},{default:C(()=>[m(c(at),{class:"w-4 h-4"}),t[43]||(t[43]=i(" Restore from backup ",-1))]),_:1},8,["loading"]),e("input",{ref_key:"fileInput",ref:a,type:"file",accept:".tar.gz,.tgz,application/gzip",class:"hidden",onChange:Le},null,544)]),b.value?(s(),o("div",co,[t[44]||(t[44]=e("div",{class:"font-semibold text-red-100 mb-1"},"Restore failed",-1)),e("div",mo,u(b.value),1)])):v("",!0),H.value?(s(),o("div",po,[t[45]||(t[45]=i(" Restore complete. The server is restarting to load the new data — reload in a few seconds. ",-1)),e("button",{class:"underline ml-1",onClick:Ve}," Reload now ")])):v("",!0)])]))}};export{Co as default}; +import{c as $,C as be,o as D,j as s,a as o,b as e,F as V,p as A,t as u,g as v,s as R,d as m,h as C,k as i,_ as M,f as c,e as E,a1 as Ae,b1 as Re,Y as Te,r as f,D as ye,Z as ne,u as Pe,x as Be,M as Ie,N as re,w as ze,v as ae,b2 as Ue,b3 as Oe,b4 as Ne,b5 as je,q as j,b6 as Fe,i as De,n as Ee,H as qe,b7 as He,b8 as Ke,b9 as Ge}from"./index-fIeDYqWy.js";import{E as Z}from"./format-CsU4_SPu.js";import{_ as Q}from"./Input-RIxOCNDe.js";import{u as Ye,D as Ze}from"./ai-B3sDNfeq.js";import{c as Qe}from"./clipboard-CmSw2rR-.js";import{f as F}from"./time-Cfu9zNbw.js";import{T as We}from"./terminal-DWMuaXnV.js";import{C as Xe}from"./copy-DJiur09W.js";import{K as ve}from"./key-round-BR2mpVu3.js";import{T as fe}from"./trash-2-B2Wniuw-.js";const Je=$("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]);const et=$("database-backup",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 12a9 3 0 0 0 5 2.69",key:"1ui2ym"}],["path",{d:"M21 9.3V5",key:"6k6cib"}],["path",{d:"M3 5v14a9 3 0 0 0 6.47 2.88",key:"i62tjy"}],["path",{d:"M12 12v4h4",key:"1bxaet"}],["path",{d:"M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16",key:"1f4ei9"}]]);const tt=$("hard-drive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);const st=$("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);const ot=$("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);const xe=$("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);const rt=$("mouse-pointer-2",[["path",{d:"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z",key:"edeuup"}]]);const at=$("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);const nt=$("wand-sparkles",[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]]),lt={class:"space-y-6"},dt={class:"space-y-3"},it={class:"space-y-2"},ut={class:"flex items-center gap-2 px-3 py-2"},ct={class:"font-mono text-sm text-foreground"},mt={key:0,class:"text-xs text-foreground-muted"},pt={key:0,class:"px-3 pb-2.5 -mt-0.5"},vt={key:0,class:"text-xs text-danger-fg"},ft={key:1,class:"text-xs text-foreground-muted"},xt={key:2,class:"flex flex-wrap gap-1"},gt={key:0,class:"text-xs text-foreground-muted"},bt={class:"space-y-3 border-t border-border pt-5"},yt=["value"],ht={key:0,class:"space-y-3 border-t border-border pt-5"},kt={class:"space-y-2"},wt=["value"],_t={key:0,class:"h-2 w-2 rounded-full bg-primary"},Ct={class:"min-w-0"},St={class:"block text-sm font-medium text-foreground"},Mt={class:"mt-0.5 block text-xs text-foreground-muted leading-snug"},$t={__name:"AISettingsPanel",setup(T){const l=Ye(),q=be();async function W(w){await q.ask({title:"Remove provider?",message:"This permanently removes the provider and its encrypted API key.",danger:!0,confirmLabel:"Remove"})&&l.deleteProvider(w)}const X=["openai","anthropic","groq","gemini","ollama","mistral","openrouter","xai","cohere"],h=[{value:"all_writes",label:"Ask before changes (recommended)",hint:"The assistant asks first before it creates, updates, or deletes anything."},{value:"destructive_only",label:"Ask before deletes only",hint:"Routine changes run on their own. Only destructive actions, like deleting, ask first."},{value:"auto",label:"Bypass: allow everything",hint:"Every action runs automatically with no prompts. Fastest, least safe."}],g=f({provider:"openai",label:"",api_key:"",base_url:""}),P=f(!1),B=f(!1),x=f({});function k(w){return x.value[w]||{loading:!1,loaded:!1,models:[],error:""}}D(()=>{l.loadProviders(),l.loadSettings()});async function S(w){x.value={...x.value,[w]:{loading:!0,loaded:!1,models:[],error:""}};try{const{data:a}=await Te.get(`/ai/providers/${w}/models`);x.value={...x.value,[w]:{loading:!1,loaded:!0,models:a.models||[],error:a.error||""}}}catch(a){x.value={...x.value,[w]:{loading:!1,loaded:!0,models:[],error:a.message}}}}async function I(){if(g.value.provider){P.value=!0;try{await l.saveProvider({provider:g.value.provider,label:g.value.label,api_key:g.value.api_key,base_url:g.value.base_url,enabled:!0}),g.value.api_key=""}finally{P.value=!1}}}async function J(){B.value=!0;try{l.settings.max_tool_iterations=Number(l.settings.max_tool_iterations)||25,await l.saveSettings(l.settings)}finally{B.value=!1}}return(w,a)=>(s(),o("div",lt,[e("section",dt,[a[9]||(a[9]=e("div",null,[e("h3",{class:"text-xs font-bold uppercase tracking-label text-foreground-muted"}," Providers "),e("p",{class:"text-xs text-foreground-muted mt-1.5 max-w-prose leading-snug"}," Bring your own keys. Keys are encrypted at rest; models are listed live from each provider. Pick the provider + model inside the chat composer. ")],-1)),e("div",it,[(s(!0),o(V,null,A(c(l).providers,n=>(s(),o("div",{key:n.id,class:"rounded-md bg-surface border border-border"},[e("div",ut,[e("span",ct,u(n.provider),1),n.label?(s(),o("span",mt,u(n.label),1)):v("",!0),e("span",{class:R(["text-[10px] uppercase tracking-label rounded px-1.5 py-0.5",n.has_key?"bg-success-tint text-success-fg":"bg-surface-hover text-foreground-muted"])},u(n.has_key?"key set":"no key"),3),a[8]||(a[8]=e("span",{class:"flex-1"},null,-1)),m(M,{size:"xs",variant:"secondary",loading:k(n.id).loading,onClick:b=>S(n.id)},{default:C(()=>[...a[6]||(a[6]=[i(" Models ",-1)])]),_:1},8,["loading","onClick"]),m(M,{size:"xs",variant:"ghost",onClick:b=>W(n.id)},{default:C(()=>[...a[7]||(a[7]=[i(" Remove ",-1)])]),_:1},8,["onClick"])]),k(n.id).loaded?(s(),o("div",pt,[k(n.id).error?(s(),o("p",vt,u(k(n.id).error),1)):k(n.id).models.length?(s(),o("div",xt,[(s(!0),o(V,null,A(k(n.id).models,b=>(s(),o("span",{key:b.id,class:"text-[11px] font-mono text-foreground-muted bg-surface-hover rounded px-1.5 py-0.5"},u(b.id),1))),128))])):(s(),o("p",ft," No models reported by this endpoint. "))])):v("",!0)]))),128)),c(l).providers.length?v("",!0):(s(),o("p",gt," No providers configured yet. "))])]),e("section",bt,[a[12]||(a[12]=e("h3",{class:"text-xs font-bold uppercase tracking-label text-foreground-muted"}," Add provider ",-1)),a[13]||(a[13]=e("p",{class:"text-xs text-foreground-muted -mt-0.5 max-w-prose leading-snug"},[i(" For any OpenAI-compatible endpoint (self-hosted, vLLM, Together, …) choose "),e("span",{class:"font-mono"},"openai"),i(" and set the Base URL. ")],-1)),e("div",null,[a[10]||(a[10]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"},"Provider",-1)),E(e("select",{"onUpdate:modelValue":a[0]||(a[0]=n=>g.value.provider=n),class:"mt-1.5 w-full bg-background border border-border rounded-md text-sm px-3 py-2 text-foreground transition-colors duration-200 focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},[(s(),o(V,null,A(X,n=>e("option",{key:n,value:n},u(n),9,yt)),64))],512),[[Ae,g.value.provider]])]),m(Q,{modelValue:g.value.label,"onUpdate:modelValue":a[1]||(a[1]=n=>g.value.label=n),label:"Label",placeholder:"e.g. personal, work (optional)"},null,8,["modelValue"]),m(Q,{modelValue:g.value.base_url,"onUpdate:modelValue":a[2]||(a[2]=n=>g.value.base_url=n),label:"Base URL (optional)",placeholder:"https://api.openai.com/v1 or https://your-host/v1",hint:"For custom / self-hosted endpoints. Either with or without /v1 works."},null,8,["modelValue"]),m(Q,{modelValue:g.value.api_key,"onUpdate:modelValue":a[3]||(a[3]=n=>g.value.api_key=n),label:"API key",type:"password",placeholder:"sk-…",hint:"Stored encrypted; never shown again. Leave blank when updating to keep the current key."},null,8,["modelValue"]),m(M,{variant:"primary",loading:P.value,disabled:!g.value.provider,onClick:I},{default:C(()=>[...a[11]||(a[11]=[i(" Save provider ",-1)])]),_:1},8,["loading","disabled"])]),c(l).settings?(s(),o("section",ht,[a[17]||(a[17]=e("h3",{class:"text-xs font-bold uppercase tracking-label text-foreground-muted"}," Defaults ",-1)),e("fieldset",kt,[a[14]||(a[14]=e("legend",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"}," Approval policy ",-1)),a[15]||(a[15]=e("p",{class:"text-xs text-foreground-muted leading-snug"}," Reads always run on their own. This controls when the assistant pauses for your OK before it changes anything. ",-1)),(s(),o(V,null,A(h,n=>e("label",{key:n.value,class:R(["flex cursor-pointer items-start gap-3 rounded-md border px-3 py-2.5 transition-colors focus-within:outline-none focus-within:ring-2 focus-within:ring-inset focus-within:ring-primary",c(l).settings.approval_policy===n.value?"border-primary/50 bg-primary/10":"border-border bg-background hover:bg-surface-hover"])},[E(e("input",{"onUpdate:modelValue":a[4]||(a[4]=b=>c(l).settings.approval_policy=b),type:"radio",name:"approval-policy",value:n.value,class:"sr-only"},null,8,wt),[[Re,c(l).settings.approval_policy]]),e("span",{class:R(["mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border transition-colors",c(l).settings.approval_policy===n.value?"border-primary":"border-foreground-muted/50"])},[c(l).settings.approval_policy===n.value?(s(),o("span",_t)):v("",!0)],2),e("span",Ct,[e("span",St,u(n.label),1),e("span",Mt,u(n.hint),1)])],2)),64))]),m(Q,{modelValue:c(l).settings.max_tool_iterations,"onUpdate:modelValue":a[5]||(a[5]=n=>c(l).settings.max_tool_iterations=n),type:"number",label:"Tool steps per reply",hint:"The most tool calls the assistant may chain while answering one message before it stops and responds. Higher allows more complex multi-step tasks; 25 is a sensible default."},null,8,["modelValue"]),m(M,{variant:"primary",loading:B.value,onClick:J},{default:C(()=>[...a[16]||(a[16]=[i(" Save defaults ",-1)])]),_:1},8,["loading"])])):v("",!0)]))}},Lt={},Vt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"};function At(T,l){return s(),o("svg",Vt,[...l[0]||(l[0]=[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"},null,-1)])])}const Rt=ye(Lt,[["render",At]]),Tt={},Pt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true"};function Bt(T,l){return s(),o("svg",Pt,[...l[0]||(l[0]=[e("path",{d:"M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.146-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.418 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.349-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.658-.851-.747-1.926-1.622h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"},null,-1)])])}const It=ye(Tt,[["render",Bt]]);function ge(T){const l=(T||"").toLowerCase();return l.includes("claude code")?{icon:We,accent:"text-orange-400"}:l.includes("chatgpt")||l.includes("openai")?{icon:Rt,accent:"text-emerald-400"}:l.includes("claude")||l.includes("anthropic")?{icon:It,accent:"text-orange-400"}:l.includes("cursor")?{icon:rt,accent:"text-blue-400"}:l.includes("vscode")||l.includes("vs code")||l.includes("code")?{icon:Je,accent:"text-blue-400"}:{icon:ne,accent:"text-foreground-muted"}}const zt={class:"space-y-6"},Ut={class:"bg-background border border-border rounded-lg p-5 space-y-3"},Ot={class:"text-sm font-semibold text-white flex items-center gap-2"},Nt={class:"grid grid-cols-[max-content,1fr] gap-x-6 gap-y-2 text-xs"},jt={class:"font-mono text-white"},Ft={class:"font-mono text-white"},Dt={class:"font-mono text-white"},Et={class:"font-mono text-white flex items-center gap-2 min-w-0"},qt={class:"truncate"},Ht={key:1,class:"text-[10px] text-primary-light shrink-0"},Kt={id:"ai",class:"bg-background border border-border rounded-lg p-5 space-y-4 scroll-mt-6"},Gt={class:"text-sm font-semibold text-white flex items-center gap-2"},Yt={class:"bg-background border border-border rounded-lg p-5 space-y-4"},Zt={class:"flex items-start justify-between gap-4"},Qt={class:"text-sm font-semibold text-white flex items-center gap-2"},Wt={key:0,class:"text-xs text-foreground-muted italic"},Xt={key:1,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},Jt={class:"font-mono break-all"},es={key:2,class:"space-y-3"},ts={class:"h-2 w-full rounded-full overflow-hidden bg-border/60 flex"},ss=["title"],os=["title"],rs=["title"],as={class:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-1.5 text-xs"},ns={class:"flex items-center justify-between"},ls={class:"font-mono text-white"},ds={class:"flex items-center justify-between"},is={class:"font-mono text-white"},us={key:0,class:"flex items-center justify-between"},cs={class:"font-mono text-white"},ms={class:"flex items-center justify-between"},ps={class:"font-mono text-white font-semibold"},vs={key:0,class:"text-[11px] text-foreground-muted pt-1 border-t border-border"},fs={key:3,class:"rounded-md border border-emerald-700/40 bg-emerald-950/30 p-3 text-xs text-emerald-200"},xs={class:"font-mono"},gs={key:4,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},bs={class:"font-mono break-all"},ys={class:"bg-background border border-border rounded-lg p-5 space-y-4"},hs={class:"text-sm font-semibold text-white flex items-center gap-2"},ks={class:"grid grid-cols-1 sm:grid-cols-3 gap-3"},ws={class:"flex flex-col gap-1"},_s={class:"flex flex-col gap-1"},Cs={class:"flex flex-col gap-1"},Ss={key:0,id:"pw-error",class:"rounded-md border border-red-700/40 bg-red-950/30 p-2.5 text-xs text-red-200"},Ms={key:1,class:"rounded-md border border-emerald-700/40 bg-emerald-950/30 p-2.5 text-xs text-emerald-200"},$s={class:"pt-2 border-t border-border"},Ls={class:"bg-background border border-border rounded-lg p-5 space-y-4"},Vs={class:"flex items-start justify-between gap-4"},As={class:"text-sm font-semibold text-white flex items-center gap-2"},Rs={class:"text-xs text-foreground-muted mt-1 max-w-prose"},Ts={key:0,class:"text-xs text-foreground-muted self-center"},Ps={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},Bs={class:"font-mono break-all"},Is={key:1,class:"text-xs text-foreground-muted italic"},zs={key:2,class:"rounded-md border border-dashed border-border p-6 text-center"},Us={key:3,class:"divide-y divide-border -mx-5"},Os={class:"flex-1 min-w-0"},Ns={class:"text-sm font-medium text-white truncate"},js={class:"text-[11px] text-foreground-muted mt-0.5 flex flex-wrap gap-x-3 gap-y-0.5"},Fs={key:0},Ds={key:1,class:"italic opacity-70"},Es={key:2},qs={class:"flex flex-wrap gap-1 mt-2"},Hs=["disabled","onClick"],Ks={class:"bg-background border border-border rounded-lg p-5 space-y-4"},Gs={class:"flex items-start justify-between gap-4"},Ys={class:"text-sm font-semibold text-white flex items-center gap-2"},Zs={key:0,class:"text-xs text-foreground-muted self-center"},Qs={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},Ws={class:"font-mono break-all"},Xs={key:1,class:"divide-y divide-border -mx-5"},Js={class:"flex-1 min-w-0"},eo={class:"text-sm font-medium text-white flex items-center gap-2 flex-wrap"},to={key:0},so={key:1,class:"font-mono text-xs"},oo={key:2,class:"text-[10px] px-1.5 py-0.5 rounded bg-emerald-500/15 text-emerald-300 font-medium"},ro={class:"text-[11px] text-foreground-muted mt-0.5"},ao=["disabled","onClick"],no={class:"bg-background border border-border rounded-lg p-5 space-y-4"},lo={class:"flex items-start justify-between gap-4"},io={class:"text-sm font-semibold text-white flex items-center gap-2"},uo={class:"flex flex-col sm:flex-row gap-3 pt-2 border-t border-border"},co={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},mo={class:"font-mono break-all"},po={key:1,class:"rounded-md border border-emerald-700/40 bg-emerald-950/30 p-3 text-xs text-emerald-200"},Co={__name:"Settings",setup(T){const l=be(),q=Pe(),W=De(),X=Be(),h=j(()=>X.buildInfo),g=f(!1),P=async()=>{h.value?.image&&await Qe(h.value.image)&&(g.value=!0,setTimeout(()=>{g.value=!1},1500))},B=r=>{if(!r||r==="unknown")return Z;try{return new Date(r).toISOString().replace("T"," ").replace(/\.\d+Z$/," UTC")}catch{return r}},x=f({current:"",next:"",confirm:""}),k=f(!1),S=f(""),I=f(!1),J=async()=>{if(S.value="",I.value=!1,!x.value.current||!x.value.next||!x.value.confirm){S.value="All three fields are required.";return}if(x.value.next.length<8){S.value="New password must be at least 8 characters.";return}if(x.value.next!==x.value.confirm){S.value="New password and confirmation do not match.";return}k.value=!0;try{await q.changePassword(x.value.current,x.value.next),I.value=!0,x.value={current:"",next:"",confirm:""}}catch(r){S.value=r?.response?.data?.error?.message||"Failed to update password."}finally{k.value=!1}},w=async()=>{await q.logout(),W.push("/login")},a=f(null),n=f(!1),b=f(""),H=f(!1),p=f(null),z=f(""),K=f(!1),G=f(""),L=f(null),le=j(()=>p.value&&p.value.total_bytes>0?Math.max(.5,p.value.db_bytes/p.value.total_bytes*100):0),de=j(()=>p.value&&p.value.total_bytes>0&&p.value.wal_bytes>0?Math.max(.5,p.value.wal_bytes/p.value.total_bytes*100):0),ie=j(()=>p.value&&p.value.total_bytes>0?Math.max(.5,p.value.functions_bytes/p.value.total_bytes*100):0),ue=j(()=>p.value?(p.value.db_free_pages||0)*(p.value.db_page_size||0):0),ce=async()=>{try{z.value="";const r=await Oe();p.value=r.data}catch(r){z.value=r?.response?.data?.error?.message||r?.message||"unknown error"}},he=async()=>{if(await l.ask({title:"Compact database?",message:"VACUUM rewrites orva.db to drop the freelist and shrink the file. It holds an exclusive lock for the duration; every other writer (deploys, invocations recording executions, KV puts, job enqueues) blocks until it returns. Typical runtime is sub-second, but a heavily-loaded instance can stall for several seconds.",confirmLabel:"Compact",danger:!1})){K.value=!0,G.value="",L.value=null;try{const t=await He();L.value=t.data,await ce()}catch(t){G.value=t?.response?.data?.error?.message||t?.message||"vacuum failed"}finally{K.value=!1}}},_=r=>{if(r==null||isNaN(r))return Z;const t=1024;if(r=t&&oe{window.location.hash==="#ai"&&window.requestAnimationFrame(()=>{document.getElementById("ai")?.scrollIntoView({behavior:"smooth",block:"start"})})});const U=f([]),ee=f(!1),O=f(""),te=f(""),me=async()=>{ee.value=!0,O.value="";try{const r=await Ne();U.value=r.data.apps||[]}catch(r){O.value=r?.response?.data?.error?.message||r?.message||"unknown error"}finally{ee.value=!1}},ke=async r=>{if(await l.ask({title:`Revoke ${r.client_name}?`,message:`${r.client_name} will lose access immediately. Any in-flight request will fail with 401. The connector can be re-authorized at any time from the originating app.`,confirmLabel:"Revoke",danger:!0})){te.value=r.id;try{await Ke(r.id),await me()}catch(d){O.value=d?.response?.data?.error?.message||d?.message||"failed to revoke"}finally{te.value=""}}},we=r=>(r||"").split(/\s+/).filter(Boolean),_e=r=>{switch(r){case"admin":return"bg-red-500/15 text-red-300";case"write":return"bg-amber-500/15 text-amber-300";case"invoke":return"bg-sky-500/15 text-sky-300";case"read":return"bg-foreground-muted/15 text-foreground-muted";default:return"bg-foreground-muted/10 text-foreground-muted"}},Y=f([]),N=f(""),se=f(""),pe=async()=>{N.value="";try{const r=await je();Y.value=r.data.sessions||[]}catch(r){N.value=r?.response?.data?.error?.message||r?.message||"unknown error"}},Ce=async r=>{if(await l.ask({title:"Revoke this session?",message:"The browser using this session will be logged out on its next request. Use this if you suspect a device was lost or to clean up old logins.",confirmLabel:"Revoke",danger:!0})){se.value=r.prefix;try{await Ge(r.prefix),await pe()}catch(d){N.value=d?.response?.data?.error?.message||d?.message||"failed to revoke"}finally{se.value=""}}},Se=r=>!r||r.length<8?r:r.slice(0,1)+"••••••••"+r.slice(-4);D(me),D(pe);const Me=()=>{window.location.assign("/api/v1/backup?ts="+Date.now())},$e=()=>{b.value="",H.value=!1,a.value?.click()},Le=async r=>{const t=r.target.files?.[0];if(r.target.value="",!(!t||!await l.ask({title:"Restore from backup?",message:`This will replace the live database and function code with the contents of "${t.name}". The current orva.db is moved aside as orva.db.before-restore- in case rollback is needed. You will need to reload after restore completes.`,confirmLabel:"Restore",danger:!0}))){n.value=!0,b.value="",H.value=!1;try{await Fe(t),H.value=!0}catch(y){b.value=y?.response?.data?.error?.message||y?.message||"Restore failed"}finally{n.value=!1}}},Ve=()=>{window.location.reload()};return(r,t)=>(s(),o("div",zt,[t[46]||(t[46]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Settings "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Operator-level controls for the running Orva instance. ")],-1)),e("div",Ut,[e("div",Ot,[m(c(st),{class:"w-4 h-4 text-foreground-muted"}),t[3]||(t[3]=i(" Build info ",-1))]),e("dl",Nt,[t[4]||(t[4]=e("dt",{class:"text-foreground-muted"},"Version",-1)),e("dd",jt,u(h.value?.version||c(Z)),1),t[5]||(t[5]=e("dt",{class:"text-foreground-muted"},"Commit",-1)),e("dd",Ft,u(h.value?.commit&&h.value.commit!=="unknown"?h.value.commit:"dev build"),1),t[6]||(t[6]=e("dt",{class:"text-foreground-muted"},"Built",-1)),e("dd",Dt,u(B(h.value?.buildTime)),1),t[7]||(t[7]=e("dt",{class:"text-foreground-muted"},"Image",-1)),e("dd",Et,[e("span",qt,u(h.value?.image||c(Z)),1),h.value?.image?(s(),o("button",{key:0,class:"p-1 rounded hover:bg-surface text-foreground-muted hover:text-white transition-colors shrink-0",title:"Copy image reference",onClick:P},[m(c(Xe),{class:"w-3.5 h-3.5"})])):v("",!0),g.value?(s(),o("span",Ht,"copied")):v("",!0)])])]),e("div",Kt,[e("div",null,[e("div",Gt,[m(c(Ie),{class:"w-4 h-4 text-foreground-muted"}),t[8]||(t[8]=i(" AI assistant ",-1))]),t[9]||(t[9]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose leading-body"}," Configure the providers, keys, and defaults for the in-product chat assistant. ",-1))]),m($t)]),e("div",Yt,[e("div",Zt,[e("div",null,[e("div",Qt,[m(c(tt),{class:"w-4 h-4 text-foreground-muted"}),t[10]||(t[10]=i(" Storage ",-1))]),t[11]||(t[11]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose"},[i(" On-disk breakdown of the data directory. "),e("code",{class:"text-[11px]"},"VACUUM"),i(" rewrites "),e("code",{class:"text-[11px]"},"orva.db"),i(", drops the freelist, and shrinks the file. The operation holds an exclusive lock; writes block briefly while it runs. ")],-1))]),m(M,{variant:"secondary",loading:K.value,disabled:!p.value||K.value,onClick:he},{default:C(()=>[m(c(nt),{class:"w-4 h-4"}),t[12]||(t[12]=i(" Compact database ",-1))]),_:1},8,["loading","disabled"])]),!p.value&&!z.value?(s(),o("div",Wt," Loading storage stats… ")):v("",!0),z.value?(s(),o("div",Xt,[t[13]||(t[13]=e("div",{class:"font-semibold text-red-100 mb-1"},"Failed to load storage stats",-1)),e("div",Jt,u(z.value),1)])):v("",!0),p.value?(s(),o("div",es,[e("div",ts,[le.value>0?(s(),o("div",{key:0,class:"bg-sky-500 h-full",style:re({width:le.value+"%"}),title:`orva.db: ${_(p.value.db_bytes)}`},null,12,ss)):v("",!0),de.value>0?(s(),o("div",{key:1,class:"bg-amber-500 h-full",style:re({width:de.value+"%"}),title:`WAL: ${_(p.value.wal_bytes)}`},null,12,os)):v("",!0),ie.value>0?(s(),o("div",{key:2,class:"bg-emerald-500 h-full",style:re({width:ie.value+"%"}),title:`functions/: ${_(p.value.functions_bytes)}`},null,12,rs)):v("",!0)]),e("div",as,[e("div",ns,[t[14]||(t[14]=e("span",{class:"flex items-center gap-2 text-foreground-muted"},[e("span",{class:"w-2 h-2 rounded-sm bg-sky-500"}),i(" orva.db ")],-1)),e("span",ls,u(_(p.value.db_bytes)),1)]),e("div",ds,[t[15]||(t[15]=e("span",{class:"flex items-center gap-2 text-foreground-muted"},[e("span",{class:"w-2 h-2 rounded-sm bg-emerald-500"}),i(" functions/ ")],-1)),e("span",is,u(_(p.value.functions_bytes)),1)]),p.value.wal_bytes>0?(s(),o("div",us,[t[16]||(t[16]=e("span",{class:"flex items-center gap-2 text-foreground-muted"},[e("span",{class:"w-2 h-2 rounded-sm bg-amber-500"}),i(" orva.db-wal ")],-1)),e("span",cs,u(_(p.value.wal_bytes)),1)])):v("",!0),e("div",ms,[t[17]||(t[17]=e("span",{class:"text-foreground-muted"},"total",-1)),e("span",ps,u(_(p.value.total_bytes)),1)])]),ue.value>0?(s(),o("div",vs,u(_(ue.value))+" reclaimable ("+u(p.value.db_free_pages)+" free SQLite pages) ",1)):v("",!0)])):v("",!0),L.value?(s(),o("div",fs,[i(" Compacted in "+u(L.value.duration_ms)+" ms — freed ",1),e("span",xs,u(_(L.value.freed_bytes)),1),i(" ("+u(_(L.value.before_bytes))+" → "+u(_(L.value.after_bytes))+"). ",1)])):v("",!0),G.value?(s(),o("div",gs,[t[18]||(t[18]=e("div",{class:"font-semibold text-red-100 mb-1"},"Compact failed",-1)),e("div",bs,u(G.value),1)])):v("",!0)]),e("div",ys,[e("div",null,[e("div",hs,[m(c(ve),{class:"w-4 h-4 text-foreground-muted"}),t[19]||(t[19]=i(" Account ",-1))]),t[20]||(t[20]=e("p",{class:"text-xs text-foreground-muted mt-1"}," Update your password or end your session. ",-1))]),e("form",{class:"space-y-3 pt-2 border-t border-border",onSubmit:ze(J,["prevent"])},[t[25]||(t[25]=e("div",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide"}," Change password ",-1)),e("div",ks,[e("div",ws,[t[21]||(t[21]=e("label",{class:"text-xs text-foreground-muted"},"Current password",-1)),E(e("input",{"onUpdate:modelValue":t[0]||(t[0]=d=>x.value.current=d),type:"password",autocomplete:"current-password","aria-describedby":"pw-error",class:"bg-surface border border-border rounded-md px-3 py-2 text-sm text-white placeholder:text-foreground-muted focus:outline-none focus:ring-1 focus:ring-primary",placeholder:"••••••••"},null,512),[[ae,x.value.current]])]),e("div",_s,[t[22]||(t[22]=e("label",{class:"text-xs text-foreground-muted"},"New password",-1)),E(e("input",{"onUpdate:modelValue":t[1]||(t[1]=d=>x.value.next=d),type:"password",autocomplete:"new-password","aria-describedby":"pw-error",class:"bg-surface border border-border rounded-md px-3 py-2 text-sm text-white placeholder:text-foreground-muted focus:outline-none focus:ring-1 focus:ring-primary",placeholder:"••••••••"},null,512),[[ae,x.value.next]])]),e("div",Cs,[t[23]||(t[23]=e("label",{class:"text-xs text-foreground-muted"},"Confirm new password",-1)),E(e("input",{"onUpdate:modelValue":t[2]||(t[2]=d=>x.value.confirm=d),type:"password",autocomplete:"new-password","aria-describedby":"pw-error",class:"bg-surface border border-border rounded-md px-3 py-2 text-sm text-white placeholder:text-foreground-muted focus:outline-none focus:ring-1 focus:ring-primary",placeholder:"••••••••"},null,512),[[ae,x.value.confirm]])])]),S.value?(s(),o("div",Ss,u(S.value),1)):v("",!0),I.value?(s(),o("div",Ms," Password updated successfully. ")):v("",!0),m(M,{type:"submit",variant:"primary",loading:k.value,disabled:k.value},{default:C(()=>[m(c(ve),{class:"w-4 h-4"}),t[24]||(t[24]=i(" Update password ",-1))]),_:1},8,["loading","disabled"])],32),e("div",$s,[m(M,{variant:"danger",onClick:w},{default:C(()=>[m(c(ot),{class:"w-4 h-4"}),t[26]||(t[26]=i(" Log out ",-1))]),_:1})])]),e("div",Ls,[e("div",Vs,[e("div",null,[e("div",As,[m(c(ne),{class:"w-4 h-4 text-foreground-muted"}),t[27]||(t[27]=i(" Connected applications ",-1))]),e("p",Rs,[t[29]||(t[29]=i(" Apps you've granted access to your Orva via OAuth. Connect new ones from the ",-1)),m(c(Ue),{to:"/docs#mcp",class:"text-primary hover:underline"},{default:C(()=>[...t[28]||(t[28]=[i("Docs",-1)])]),_:1}),t[30]||(t[30]=i(" page. ",-1))])]),U.value.length>0?(s(),o("span",Ts,u(U.value.length)+" active ",1)):v("",!0)]),O.value?(s(),o("div",Ps,[t[31]||(t[31]=e("div",{class:"font-semibold text-red-100 mb-1"},"Failed to load connected apps",-1)),e("div",Bs,u(O.value),1)])):ee.value?(s(),o("div",Is," Loading… ")):U.value.length===0?(s(),o("div",zs,[m(c(ne),{class:"w-8 h-8 text-foreground-muted mx-auto mb-2 opacity-40"}),t[32]||(t[32]=e("p",{class:"text-xs text-foreground-muted"}," No connected applications yet. ",-1)),t[33]||(t[33]=e("p",{class:"text-[11px] text-foreground-muted mt-1"},[i(" Add Orva as a custom connector in "),e("span",{class:"text-foreground-muted"},"claude.ai"),i(" or "),e("span",{class:"text-foreground-muted"},"ChatGPT"),i(" and it'll appear here. ")],-1))])):(s(),o("ul",Us,[(s(!0),o(V,null,A(U.value,d=>(s(),o("li",{key:d.id,class:"px-5 py-3 flex items-start gap-3"},[(s(),Ee(qe(c(ge)(d.client_name).icon),{class:R(["w-5 h-5 mt-0.5 shrink-0",c(ge)(d.client_name).accent])},null,8,["class"])),e("div",Os,[e("div",Ns,u(d.client_name),1),e("div",js,[e("span",null,"Authorized "+u(c(F)(d.issued_at)),1),d.last_used_at?(s(),o("span",Fs," · Last used "+u(c(F)(d.last_used_at)),1)):(s(),o("span",Ds,"· Never used")),d.refresh_expires_at?(s(),o("span",Es," · Re-consent "+u(c(F)(d.refresh_expires_at)),1)):v("",!0)]),e("div",qs,[(s(!0),o(V,null,A(we(d.scope),y=>(s(),o("span",{key:y,class:R(["text-[10px] px-1.5 py-0.5 rounded font-mono",_e(y)])},u(y),3))),128))])]),e("button",{type:"button",class:"text-xs text-foreground-muted hover:text-red-400 transition-colors flex items-center gap-1 shrink-0 self-center",disabled:te.value===d.id,onClick:y=>ke(d)},[m(c(fe),{class:"w-3.5 h-3.5"}),t[34]||(t[34]=i(" Revoke ",-1))],8,Hs)]))),128))]))]),e("div",Ks,[e("div",Gs,[e("div",null,[e("div",Ys,[m(c(xe),{class:"w-4 h-4 text-foreground-muted"}),t[35]||(t[35]=i(" Active sessions ",-1))]),t[36]||(t[36]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose"}," Browsers signed in to this Orva. Revoke a session and that browser will need to log in again on its next request. ",-1))]),Y.value.length>0?(s(),o("span",Zs,u(Y.value.length)+" active ",1)):v("",!0)]),N.value?(s(),o("div",Qs,[t[37]||(t[37]=e("div",{class:"font-semibold text-red-100 mb-1"},"Failed to load sessions",-1)),e("div",Ws,u(N.value),1)])):(s(),o("ul",Xs,[(s(!0),o(V,null,A(Y.value,d=>(s(),o("li",{key:d.prefix,class:"px-5 py-3 flex items-start gap-3"},[m(c(xe),{class:R(["w-5 h-5 mt-0.5 shrink-0",d.current?"text-emerald-400":"text-foreground-muted"])},null,8,["class"]),e("div",Js,[e("div",eo,[d.current?(s(),o("span",to,"This session")):(s(),o("span",so,u(Se(d.prefix)),1)),d.current?(s(),o("span",oo," current ")):v("",!0)]),e("div",ro," Signed in "+u(c(F)(d.created_at))+" · expires "+u(c(F)(d.expires_at)),1)]),d.current?v("",!0):(s(),o("button",{key:0,type:"button",class:"text-xs text-foreground-muted hover:text-red-400 transition-colors flex items-center gap-1 shrink-0 self-center",disabled:se.value===d.prefix,onClick:y=>Ce(d)},[m(c(fe),{class:"w-3.5 h-3.5"}),t[38]||(t[38]=i(" Revoke ",-1))],8,ao))]))),128))]))]),e("div",no,[e("div",lo,[e("div",null,[e("div",io,[m(c(et),{class:"w-4 h-4 text-foreground-muted"}),t[39]||(t[39]=i(" Backup & Restore ",-1))]),t[40]||(t[40]=e("p",{class:"text-xs text-foreground-muted mt-1 max-w-prose"},[i(" One self-contained snapshot: the SQLite database ("),e("code",{class:"text-[11px]"},"VACUUM INTO"),i(" — fully checkpointed), every deployed function version, the secrets master key, and the bootstrap admin key. Carries a "),e("code",{class:"text-[11px]"},"manifest.json"),i(" with sha256 of every file so restore can detect tampering or truncation before touching live state. Restore on a fresh host and the install boots back up byte-faithful — secrets decrypt, the admin login still works. ")],-1)),t[41]||(t[41]=e("p",{class:"text-[11px] text-amber-300/80 mt-2 max-w-prose"}," Treat the file as sensitive — it contains your secrets master key. Store it like you would a password manager export (encrypted disk, S3 + SSE, etc.). ",-1))])]),e("div",uo,[m(M,{variant:"primary",onClick:Me},{default:C(()=>[m(c(Ze),{class:"w-4 h-4"}),t[42]||(t[42]=i(" Download backup ",-1))]),_:1}),m(M,{variant:"secondary",loading:n.value,onClick:$e},{default:C(()=>[m(c(at),{class:"w-4 h-4"}),t[43]||(t[43]=i(" Restore from backup ",-1))]),_:1},8,["loading"]),e("input",{ref_key:"fileInput",ref:a,type:"file",accept:".tar.gz,.tgz,application/gzip",class:"hidden",onChange:Le},null,544)]),b.value?(s(),o("div",co,[t[44]||(t[44]=e("div",{class:"font-semibold text-red-100 mb-1"},"Restore failed",-1)),e("div",mo,u(b.value),1)])):v("",!0),H.value?(s(),o("div",po,[t[45]||(t[45]=i(" Restore complete. The server is restarting to load the new data — reload in a few seconds. ",-1)),e("button",{class:"underline ml-1",onClick:Ve}," Reload now ")])):v("",!0)])]))}};export{Co as default}; diff --git a/backend/internal/server/ui_dist/assets/StatusBadge-Cj_PlPFZ.js b/backend/internal/server/ui_dist/assets/StatusBadge-U9tC82MH.js similarity index 79% rename from backend/internal/server/ui_dist/assets/StatusBadge-Cj_PlPFZ.js rename to backend/internal/server/ui_dist/assets/StatusBadge-U9tC82MH.js index 99871ff..989e916 100644 --- a/backend/internal/server/ui_dist/assets/StatusBadge-Cj_PlPFZ.js +++ b/backend/internal/server/ui_dist/assets/StatusBadge-U9tC82MH.js @@ -1 +1 @@ -import{C as t,a as c}from"./circle-DJWJGpv0.js";import{a as n,C as o}from"./clock-BWp9w4xs.js";import{j as a,a as i,n as u,H as d,k as l,t as g,s as m,q as p}from"./index-BMkkwZ9q.js";const h={__name:"StatusBadge",props:{status:{type:String,required:!0}},setup(e){const r=e,s=p(()=>{switch(r.status){case"succeeded":case"success":case"active":return{classes:"text-success-fg border-success-ring",icon:o};case"failed":case"error":case"crashed":return{classes:"text-danger-fg border-danger-ring",icon:c};case"queued":case"building":case"pending":case"timeout":return{classes:"text-warning-fg border-warning-ring",icon:n};default:return{classes:"text-foreground-muted border-border",icon:t}}});return(f,x)=>(a(),i("span",{class:m(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs border bg-background font-mono",s.value.classes])},[(a(),u(d(s.value.icon),{class:"h-3 w-3 shrink-0","aria-hidden":"true"})),l(" "+g(e.status),1)],2))}};export{h as _}; +import{C as t,a as c}from"./circle-u9aj3idX.js";import{a as n,C as o}from"./clock-C4Bm6ngE.js";import{j as a,a as i,n as u,H as d,k as l,t as g,s as m,q as p}from"./index-fIeDYqWy.js";const h={__name:"StatusBadge",props:{status:{type:String,required:!0}},setup(e){const r=e,s=p(()=>{switch(r.status){case"succeeded":case"success":case"active":return{classes:"text-success-fg border-success-ring",icon:o};case"failed":case"error":case"crashed":return{classes:"text-danger-fg border-danger-ring",icon:c};case"queued":case"building":case"pending":case"timeout":return{classes:"text-warning-fg border-warning-ring",icon:n};default:return{classes:"text-foreground-muted border-border",icon:t}}});return(f,x)=>(a(),i("span",{class:m(["inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs border bg-background font-mono",s.value.classes])},[(a(),u(d(s.value.icon),{class:"h-3 w-3 shrink-0","aria-hidden":"true"})),l(" "+g(e.status),1)],2))}};export{h as _}; diff --git a/backend/internal/server/ui_dist/assets/TraceDetail-DlY0pIfy.js b/backend/internal/server/ui_dist/assets/TraceDetail-DTbv7Wsg.js similarity index 95% rename from backend/internal/server/ui_dist/assets/TraceDetail-DlY0pIfy.js rename to backend/internal/server/ui_dist/assets/TraceDetail-DTbv7Wsg.js index 2da296a..c31e741 100644 --- a/backend/internal/server/ui_dist/assets/TraceDetail-DlY0pIfy.js +++ b/backend/internal/server/ui_dist/assets/TraceDetail-DTbv7Wsg.js @@ -1 +1 @@ -import{E as m}from"./format-CsU4_SPu.js";import{o as R,a as i,b as t,f as d,d as g,k,t as o,F as u,g as c,p as f,aM as q,i as z,r as b,a9 as I,j as a,n as C,N as $,s as v,q as O}from"./index-BMkkwZ9q.js";import{_ as S}from"./StatusBadge-Cj_PlPFZ.js";import{A as P}from"./arrow-left-C4STwFAY.js";import{C as W}from"./copy-CTb6u-fx.js";import{F as T}from"./flag-BkRqUrT5.js";import{C as Y}from"./circle-alert-DJMgVejj.js";import"./circle-DJWJGpv0.js";import"./clock-BWp9w4xs.js";const G={class:"space-y-6"},H={class:"flex items-start justify-between gap-4"},J={key:0,class:"rounded-md border border-danger-ring bg-danger-tint p-3 text-xs text-danger-fg"},K={key:1,class:"text-xs text-foreground-muted italic"},Q={class:"bg-background border border-border rounded-lg p-5 space-y-4"},U={class:"flex items-center gap-3 flex-wrap text-xs"},X={class:"bg-surface text-white px-2 py-0.5 rounded font-mono"},Z={class:"grid grid-cols-2 sm:grid-cols-4 gap-4 pt-3 border-t border-border text-xs"},tt={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-foreground-muted border-border lowercase"},et={class:"text-white font-mono"},st={class:"text-white"},rt={class:"flex items-center gap-2"},ot={key:0,class:"inline-flex items-center gap-1 text-[10px] uppercase tracking-wide text-warning-fg"},nt={class:"bg-background border border-border rounded-lg p-5"},at={class:"space-y-1.5"},it=["onClick"],dt={class:"col-span-3 truncate flex items-center gap-1.5"},lt={class:"text-white"},ct={class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] border bg-background font-mono text-foreground-muted border-border lowercase"},ut={class:"col-span-7 relative h-4"},pt=["title"],gt={class:"col-span-2 text-right font-mono"},xt={class:"text-white"},mt={key:0,class:"block text-[10px] text-foreground-muted"},ft={class:"col-span-3 truncate flex items-center gap-1.5 pl-5"},_t={class:"text-foreground-muted"},bt={key:0,class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] bg-danger-tint text-danger-fg border border-danger-ring"},vt={class:"col-span-7 relative h-3"},ht=["title"],yt={class:"col-span-2 text-right font-mono text-foreground-muted"},wt={key:0,class:"bg-background border border-border rounded-lg p-5"},kt={class:"text-xs text-foreground-muted uppercase tracking-wide mb-3"},Ct={class:"space-y-1 font-mono text-xs"},$t={class:"text-foreground-muted text-[10px] tabular-nums"},St={class:"text-white truncate"},Tt={key:0,class:"text-[10px] text-foreground-muted truncate"},Lt={class:"bg-background border border-border rounded-lg overflow-x-auto"},Mt={class:"w-full text-sm text-left"},Ft={class:"divide-y divide-border"},Nt=["onClick"],Bt={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted"},Dt={class:"px-4 py-2.5 text-white"},At={class:"px-4 py-2.5 hidden md:table-cell"},Vt={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-foreground-muted border-border lowercase"},jt={class:"px-4 py-2.5 text-right font-mono text-xs text-foreground-muted"},Et={class:"px-4 py-2.5 text-right font-mono text-xs text-white"},Rt={class:"px-4 py-2.5"},Kt={__name:"TraceDetail",setup(qt){const L=I(),h=z(),n=b(null),_=b(!1),p=b(""),M=async()=>{_.value=!0,p.value="";try{const r=await q(L.params.id);n.value=r.data}catch(r){r?.response?.status===404?p.value="No spans found for that trace.":p.value=r?.response?.data?.error?.message||r?.message||"failed to load trace"}finally{_.value=!1}},x=O(()=>Math.max(1,n.value?.total_duration_ms||1)),F=r=>{const s=r.offset_ms/x.value*100,e=Math.max(.5,r.duration_ms/x.value*100);return{left:`${s}%`,width:`${e}%`}},N=r=>r.status==="error"?"bg-danger/70":r.is_outlier?"bg-warning/80":"bg-primary/80",B=r=>!n.value?.user_spans||!r?.span_id?[]:n.value.user_spans.filter(s=>s.parent_span_id===r.span_id).sort((s,e)=>(s.offset_ms||0)-(e.offset_ms||0)),D=r=>{const s=(r.offset_ms||0)/x.value*100,e=Math.max(.5,(r.duration_ms||0)/x.value*100);return{left:`${s}%`,width:`${e}%`}},A=r=>{switch(r){case"error":return"text-danger-fg";case"warn":return"text-warning-fg";case"debug":return"text-foreground-muted";default:return"text-primary-light"}},V=r=>r.level==="error"?"bg-danger-tint":"",j=r=>{if(!r)return"";try{const s=new Date(r);return s.toLocaleTimeString(void 0,{hour12:!1})+"."+String(s.getMilliseconds()).padStart(3,"0")}catch{return r}},y=r=>{r.execution_id&&h.push({path:"/invocations",query:{exec:r.execution_id}})},E=async()=>{if(n.value?.trace_id)try{await navigator.clipboard.writeText(n.value.trace_id)}catch{}};return R(M),(r,s)=>(a(),i("div",G,[t("div",H,[t("div",null,[t("button",{class:"inline-flex items-center gap-1 text-xs text-foreground-muted hover:text-white mb-1 transition-colors",onClick:s[0]||(s[0]=e=>d(h).push("/traces"))},[g(d(P),{class:"w-3.5 h-3.5"}),s[1]||(s[1]=k(" All traces ",-1))]),s[2]||(s[2]=t("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Trace ",-1)),s[3]||(s[3]=t("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Causal tree of every span produced by this invocation chain. Click any span row to jump to its execution in the Invocations log. ",-1))])]),p.value?(a(),i("div",J,o(p.value),1)):_.value&&!n.value?(a(),i("div",K," Loading trace… ")):n.value?(a(),i(u,{key:2},[t("div",Q,[t("div",U,[s[4]||(s[4]=t("span",{class:"text-foreground-muted uppercase tracking-wide"}," trace id ",-1)),t("code",X,o(n.value.trace_id),1),t("button",{class:"p-1 rounded hover:bg-surface text-foreground-muted hover:text-white transition-colors",title:"Copy trace id",onClick:E},[g(d(W),{class:"w-3.5 h-3.5"})])]),t("div",Z,[t("div",null,[s[5]||(s[5]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Trigger ",-1)),t("span",tt,o(n.value.trigger||d(m)),1)]),t("div",null,[s[6]||(s[6]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Total duration ",-1)),t("div",et,o(n.value.total_duration_ms)+"ms",1)]),t("div",null,[s[7]||(s[7]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Spans ",-1)),t("div",st,o(n.value.span_count),1)]),t("div",null,[s[9]||(s[9]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Status ",-1)),t("div",rt,[g(S,{status:n.value.status},null,8,["status"]),n.value.has_outlier?(a(),i("span",ot,[g(d(T),{class:"w-3 h-3"}),s[8]||(s[8]=k(" Outlier ",-1))])):c("",!0)])])])]),t("div",nt,[s[11]||(s[11]=t("div",{class:"text-xs text-foreground-muted uppercase tracking-wide mb-4"}," Waterfall ",-1)),t("div",at,[(a(!0),i(u,null,f(n.value.spans,(e,w)=>(a(),i(u,{key:e.span_id||`s${w}`},[t("div",{class:"grid grid-cols-12 gap-2 items-center text-xs hover:bg-surface/40 px-2 py-1.5 rounded cursor-pointer transition-colors",onClick:l=>y(e)},[t("div",dt,[t("span",lt,o(e.function_name||e.function_id),1),t("span",ct,o(e.trigger||d(m)),1),e.status==="error"?(a(),C(d(Y),{key:0,class:"w-3 h-3 shrink-0 text-danger-fg","aria-label":"error"})):c("",!0),e.is_outlier?(a(),C(d(T),{key:1,class:"w-3 h-3 shrink-0 text-warning-fg","aria-label":"outlier"})):c("",!0)]),t("div",ut,[t("div",{class:v(["absolute h-2 top-1 rounded-sm",N(e)]),style:$(F(e)),title:`+${e.offset_ms}ms · ${e.duration_ms}ms`},null,14,pt)]),t("div",gt,[t("span",xt,o(e.duration_ms)+"ms",1),e.baseline_p95_ms?(a(),i("span",mt," p95 "+o(e.baseline_p95_ms)+"ms ",1)):c("",!0)])],8,it),(a(!0),i(u,null,f(B(e),l=>(a(),i("div",{key:`us-${l.id}`,class:"grid grid-cols-12 gap-2 items-center text-xs hover:bg-surface/40 px-2 py-1 rounded transition-colors"},[t("div",ft,[s[10]||(s[10]=t("span",{class:"text-foreground-muted text-[10px]"},"└",-1)),t("span",_t,o(l.name),1),l.status==="error"?(a(),i("span",bt," error ")):c("",!0)]),t("div",vt,[t("div",{class:"absolute h-1.5 top-1 rounded-sm bg-accent-muted/70",style:$(D(l)),title:`+${l.offset_ms}ms · ${l.duration_ms}ms`},null,12,ht)]),t("div",yt,o(l.duration_ms)+"ms ",1)]))),128))],64))),128))])]),n.value.log_entries&&n.value.log_entries.length?(a(),i("div",wt,[t("div",kt," Logs ("+o(n.value.log_entries.length)+") ",1),t("div",Ct,[(a(!0),i(u,null,f(n.value.log_entries,e=>(a(),i("div",{key:`log-${e.id}`,class:v(["flex items-baseline gap-2 px-2 py-1 rounded hover:bg-surface/40 transition-colors",V(e)])},[t("span",$t,o(j(e.ts)),1),t("span",{class:v(["text-[10px] uppercase tracking-wide",A(e.level)])},o(e.level),3),t("span",St,o(e.message),1),e.fields?(a(),i("code",Tt,o(e.fields),1)):c("",!0)],2))),128))])])):c("",!0),t("div",Lt,[t("table",Mt,[s[12]||(s[12]=t("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[t("tr",null,[t("th",{class:"px-4 py-3 w-32"},"Span"),t("th",{class:"px-4 py-3"},"Function"),t("th",{class:"px-4 py-3 w-28 hidden md:table-cell"},"Trigger"),t("th",{class:"px-4 py-3 w-24 text-right"},"Offset"),t("th",{class:"px-4 py-3 w-24 text-right"},"Duration"),t("th",{class:"px-4 py-3 w-24"},"Status")])],-1)),t("tbody",Ft,[(a(!0),i(u,null,f(n.value.spans,e=>(a(),i("tr",{key:`tbl-${e.span_id}`,class:"hover:bg-surface/40 cursor-pointer transition-colors",onClick:w=>y(e)},[t("td",Bt,o(e.span_id?.slice(0,11)||d(m)),1),t("td",Dt,o(e.function_name||e.function_id),1),t("td",At,[t("span",Vt,o(e.trigger||d(m)),1)]),t("td",jt," +"+o(e.offset_ms)+"ms ",1),t("td",Et,o(e.duration_ms)+"ms ",1),t("td",Rt,[g(S,{status:e.status},null,8,["status"])])],8,Nt))),128))])])])],64)):c("",!0)]))}};export{Kt as default}; +import{E as m}from"./format-CsU4_SPu.js";import{o as R,a as i,b as t,f as d,d as g,k,t as o,F as u,g as c,p as f,aM as q,i as z,r as b,a9 as I,j as a,n as C,N as $,s as v,q as O}from"./index-fIeDYqWy.js";import{_ as S}from"./StatusBadge-U9tC82MH.js";import{A as P}from"./arrow-left-DiLFZEkx.js";import{C as W}from"./copy-DJiur09W.js";import{F as T}from"./flag-CL7jr_Ab.js";import{C as Y}from"./circle-alert-C9zmFbXU.js";import"./circle-u9aj3idX.js";import"./clock-C4Bm6ngE.js";const G={class:"space-y-6"},H={class:"flex items-start justify-between gap-4"},J={key:0,class:"rounded-md border border-danger-ring bg-danger-tint p-3 text-xs text-danger-fg"},K={key:1,class:"text-xs text-foreground-muted italic"},Q={class:"bg-background border border-border rounded-lg p-5 space-y-4"},U={class:"flex items-center gap-3 flex-wrap text-xs"},X={class:"bg-surface text-white px-2 py-0.5 rounded font-mono"},Z={class:"grid grid-cols-2 sm:grid-cols-4 gap-4 pt-3 border-t border-border text-xs"},tt={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-foreground-muted border-border lowercase"},et={class:"text-white font-mono"},st={class:"text-white"},rt={class:"flex items-center gap-2"},ot={key:0,class:"inline-flex items-center gap-1 text-[10px] uppercase tracking-wide text-warning-fg"},nt={class:"bg-background border border-border rounded-lg p-5"},at={class:"space-y-1.5"},it=["onClick"],dt={class:"col-span-3 truncate flex items-center gap-1.5"},lt={class:"text-white"},ct={class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] border bg-background font-mono text-foreground-muted border-border lowercase"},ut={class:"col-span-7 relative h-4"},pt=["title"],gt={class:"col-span-2 text-right font-mono"},xt={class:"text-white"},mt={key:0,class:"block text-[10px] text-foreground-muted"},ft={class:"col-span-3 truncate flex items-center gap-1.5 pl-5"},_t={class:"text-foreground-muted"},bt={key:0,class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] bg-danger-tint text-danger-fg border border-danger-ring"},vt={class:"col-span-7 relative h-3"},ht=["title"],yt={class:"col-span-2 text-right font-mono text-foreground-muted"},wt={key:0,class:"bg-background border border-border rounded-lg p-5"},kt={class:"text-xs text-foreground-muted uppercase tracking-wide mb-3"},Ct={class:"space-y-1 font-mono text-xs"},$t={class:"text-foreground-muted text-[10px] tabular-nums"},St={class:"text-white truncate"},Tt={key:0,class:"text-[10px] text-foreground-muted truncate"},Lt={class:"bg-background border border-border rounded-lg overflow-x-auto"},Mt={class:"w-full text-sm text-left"},Ft={class:"divide-y divide-border"},Nt=["onClick"],Bt={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted"},Dt={class:"px-4 py-2.5 text-white"},At={class:"px-4 py-2.5 hidden md:table-cell"},Vt={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-foreground-muted border-border lowercase"},jt={class:"px-4 py-2.5 text-right font-mono text-xs text-foreground-muted"},Et={class:"px-4 py-2.5 text-right font-mono text-xs text-white"},Rt={class:"px-4 py-2.5"},Kt={__name:"TraceDetail",setup(qt){const L=I(),h=z(),n=b(null),_=b(!1),p=b(""),M=async()=>{_.value=!0,p.value="";try{const r=await q(L.params.id);n.value=r.data}catch(r){r?.response?.status===404?p.value="No spans found for that trace.":p.value=r?.response?.data?.error?.message||r?.message||"failed to load trace"}finally{_.value=!1}},x=O(()=>Math.max(1,n.value?.total_duration_ms||1)),F=r=>{const s=r.offset_ms/x.value*100,e=Math.max(.5,r.duration_ms/x.value*100);return{left:`${s}%`,width:`${e}%`}},N=r=>r.status==="error"?"bg-danger/70":r.is_outlier?"bg-warning/80":"bg-primary/80",B=r=>!n.value?.user_spans||!r?.span_id?[]:n.value.user_spans.filter(s=>s.parent_span_id===r.span_id).sort((s,e)=>(s.offset_ms||0)-(e.offset_ms||0)),D=r=>{const s=(r.offset_ms||0)/x.value*100,e=Math.max(.5,(r.duration_ms||0)/x.value*100);return{left:`${s}%`,width:`${e}%`}},A=r=>{switch(r){case"error":return"text-danger-fg";case"warn":return"text-warning-fg";case"debug":return"text-foreground-muted";default:return"text-primary-light"}},V=r=>r.level==="error"?"bg-danger-tint":"",j=r=>{if(!r)return"";try{const s=new Date(r);return s.toLocaleTimeString(void 0,{hour12:!1})+"."+String(s.getMilliseconds()).padStart(3,"0")}catch{return r}},y=r=>{r.execution_id&&h.push({path:"/invocations",query:{exec:r.execution_id}})},E=async()=>{if(n.value?.trace_id)try{await navigator.clipboard.writeText(n.value.trace_id)}catch{}};return R(M),(r,s)=>(a(),i("div",G,[t("div",H,[t("div",null,[t("button",{class:"inline-flex items-center gap-1 text-xs text-foreground-muted hover:text-white mb-1 transition-colors",onClick:s[0]||(s[0]=e=>d(h).push("/traces"))},[g(d(P),{class:"w-3.5 h-3.5"}),s[1]||(s[1]=k(" All traces ",-1))]),s[2]||(s[2]=t("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Trace ",-1)),s[3]||(s[3]=t("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Causal tree of every span produced by this invocation chain. Click any span row to jump to its execution in the Invocations log. ",-1))])]),p.value?(a(),i("div",J,o(p.value),1)):_.value&&!n.value?(a(),i("div",K," Loading trace… ")):n.value?(a(),i(u,{key:2},[t("div",Q,[t("div",U,[s[4]||(s[4]=t("span",{class:"text-foreground-muted uppercase tracking-wide"}," trace id ",-1)),t("code",X,o(n.value.trace_id),1),t("button",{class:"p-1 rounded hover:bg-surface text-foreground-muted hover:text-white transition-colors",title:"Copy trace id",onClick:E},[g(d(W),{class:"w-3.5 h-3.5"})])]),t("div",Z,[t("div",null,[s[5]||(s[5]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Trigger ",-1)),t("span",tt,o(n.value.trigger||d(m)),1)]),t("div",null,[s[6]||(s[6]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Total duration ",-1)),t("div",et,o(n.value.total_duration_ms)+"ms",1)]),t("div",null,[s[7]||(s[7]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Spans ",-1)),t("div",st,o(n.value.span_count),1)]),t("div",null,[s[9]||(s[9]=t("div",{class:"text-foreground-muted uppercase tracking-wide mb-1"}," Status ",-1)),t("div",rt,[g(S,{status:n.value.status},null,8,["status"]),n.value.has_outlier?(a(),i("span",ot,[g(d(T),{class:"w-3 h-3"}),s[8]||(s[8]=k(" Outlier ",-1))])):c("",!0)])])])]),t("div",nt,[s[11]||(s[11]=t("div",{class:"text-xs text-foreground-muted uppercase tracking-wide mb-4"}," Waterfall ",-1)),t("div",at,[(a(!0),i(u,null,f(n.value.spans,(e,w)=>(a(),i(u,{key:e.span_id||`s${w}`},[t("div",{class:"grid grid-cols-12 gap-2 items-center text-xs hover:bg-surface/40 px-2 py-1.5 rounded cursor-pointer transition-colors",onClick:l=>y(e)},[t("div",dt,[t("span",lt,o(e.function_name||e.function_id),1),t("span",ct,o(e.trigger||d(m)),1),e.status==="error"?(a(),C(d(Y),{key:0,class:"w-3 h-3 shrink-0 text-danger-fg","aria-label":"error"})):c("",!0),e.is_outlier?(a(),C(d(T),{key:1,class:"w-3 h-3 shrink-0 text-warning-fg","aria-label":"outlier"})):c("",!0)]),t("div",ut,[t("div",{class:v(["absolute h-2 top-1 rounded-sm",N(e)]),style:$(F(e)),title:`+${e.offset_ms}ms · ${e.duration_ms}ms`},null,14,pt)]),t("div",gt,[t("span",xt,o(e.duration_ms)+"ms",1),e.baseline_p95_ms?(a(),i("span",mt," p95 "+o(e.baseline_p95_ms)+"ms ",1)):c("",!0)])],8,it),(a(!0),i(u,null,f(B(e),l=>(a(),i("div",{key:`us-${l.id}`,class:"grid grid-cols-12 gap-2 items-center text-xs hover:bg-surface/40 px-2 py-1 rounded transition-colors"},[t("div",ft,[s[10]||(s[10]=t("span",{class:"text-foreground-muted text-[10px]"},"└",-1)),t("span",_t,o(l.name),1),l.status==="error"?(a(),i("span",bt," error ")):c("",!0)]),t("div",vt,[t("div",{class:"absolute h-1.5 top-1 rounded-sm bg-accent-muted/70",style:$(D(l)),title:`+${l.offset_ms}ms · ${l.duration_ms}ms`},null,12,ht)]),t("div",yt,o(l.duration_ms)+"ms ",1)]))),128))],64))),128))])]),n.value.log_entries&&n.value.log_entries.length?(a(),i("div",wt,[t("div",kt," Logs ("+o(n.value.log_entries.length)+") ",1),t("div",Ct,[(a(!0),i(u,null,f(n.value.log_entries,e=>(a(),i("div",{key:`log-${e.id}`,class:v(["flex items-baseline gap-2 px-2 py-1 rounded hover:bg-surface/40 transition-colors",V(e)])},[t("span",$t,o(j(e.ts)),1),t("span",{class:v(["text-[10px] uppercase tracking-wide",A(e.level)])},o(e.level),3),t("span",St,o(e.message),1),e.fields?(a(),i("code",Tt,o(e.fields),1)):c("",!0)],2))),128))])])):c("",!0),t("div",Lt,[t("table",Mt,[s[12]||(s[12]=t("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[t("tr",null,[t("th",{class:"px-4 py-3 w-32"},"Span"),t("th",{class:"px-4 py-3"},"Function"),t("th",{class:"px-4 py-3 w-28 hidden md:table-cell"},"Trigger"),t("th",{class:"px-4 py-3 w-24 text-right"},"Offset"),t("th",{class:"px-4 py-3 w-24 text-right"},"Duration"),t("th",{class:"px-4 py-3 w-24"},"Status")])],-1)),t("tbody",Ft,[(a(!0),i(u,null,f(n.value.spans,e=>(a(),i("tr",{key:`tbl-${e.span_id}`,class:"hover:bg-surface/40 cursor-pointer transition-colors",onClick:w=>y(e)},[t("td",Bt,o(e.span_id?.slice(0,11)||d(m)),1),t("td",Dt,o(e.function_name||e.function_id),1),t("td",At,[t("span",Vt,o(e.trigger||d(m)),1)]),t("td",jt," +"+o(e.offset_ms)+"ms ",1),t("td",Et,o(e.duration_ms)+"ms ",1),t("td",Rt,[g(S,{status:e.status},null,8,["status"])])],8,Nt))),128))])])])],64)):c("",!0)]))}};export{Kt as default}; diff --git a/backend/internal/server/ui_dist/assets/Traces-Cr9wsEkz.js b/backend/internal/server/ui_dist/assets/Traces-CejEofjO.js similarity index 95% rename from backend/internal/server/ui_dist/assets/Traces-Cr9wsEkz.js rename to backend/internal/server/ui_dist/assets/Traces-CejEofjO.js index 871f48e..bed1372 100644 --- a/backend/internal/server/ui_dist/assets/Traces-Cr9wsEkz.js +++ b/backend/internal/server/ui_dist/assets/Traces-CejEofjO.js @@ -1 +1 @@ -import{o as j,a as l,b as e,d as r,h as g,_,f as n,S as z,e as B,v as D,L as M,F as T,p as C,t as i,aE as P,g as F,r as d,aL as H,i as K,j as a,k as y,n as A}from"./index-BMkkwZ9q.js";import{E as w}from"./format-CsU4_SPu.js";import{_ as U}from"./StatusBadge-Cj_PlPFZ.js";import{R as Y}from"./refresh-cw-C7sR7ShF.js";import{F as S}from"./flag-BkRqUrT5.js";import"./circle-DJWJGpv0.js";import"./clock-BWp9w4xs.js";const q={class:"space-y-6"},G={class:"flex items-start justify-between gap-4"},I={class:"flex flex-col sm:flex-row sm:items-center gap-2 sm:flex-wrap"},J={class:"relative w-full sm:flex-1 sm:min-w-[260px] sm:max-w-[420px]"},Q={class:"flex items-center gap-2 sm:flex-wrap overflow-x-auto sm:overflow-visible scrollable snap-x min-w-0"},W={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},X={key:1,class:"bg-background border border-border rounded-lg p-8 text-center text-sm text-foreground-muted"},Z={key:2,class:"bg-background border border-border rounded-lg overflow-x-auto"},ee={class:"w-full text-sm text-left"},te={class:"divide-y divide-border"},se=["onClick"],oe={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted whitespace-nowrap"},re={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted"},ae={class:"px-4 py-2.5 text-white"},le={class:"px-4 py-2.5 hidden md:table-cell"},ne={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-foreground-muted border-border lowercase"},ie={class:"px-4 py-2.5 text-right font-mono text-xs text-foreground-muted hidden sm:table-cell"},de={class:"px-4 py-2.5"},ue={class:"px-4 py-2.5 text-right"},ce={key:3,class:"flex justify-center"},_e={__name:"Traces",setup(fe){const L=K(),f=d([]),m=d(!1),p=d(""),u=d(""),x=d(""),v=d(""),h=d(!1),N=[{value:"",label:"All"},{value:"success",label:"Success"},{value:"error",label:"Errors"}],k=async({append:o=!1}={})=>{m.value=!0,p.value="";try{const t={limit:50};x.value&&(t.function_id=x.value),v.value&&(t.status=v.value),h.value&&(t.outlier_only="1"),o&&u.value&&(t.before=u.value);const s=await H(t),b=s.data?.traces||[];o?f.value.push(...b):f.value=b,u.value=s.data?.next_cursor||""}catch(t){p.value=t?.response?.data?.error?.message||t?.message||"failed to load traces"}finally{m.value=!1}},c=()=>{u.value="",k()},$=()=>k({append:!0}),E=o=>{v.value=o,c()},O=()=>{h.value=!h.value,c()},R=o=>L.push(`/traces/${o}`),V=o=>o?new Date(o).toLocaleTimeString(void 0,{hour12:!1}):w;return j(c),(o,t)=>(a(),l("div",q,[e("div",G,[t[2]||(t[2]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Traces "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Causal chains across HTTP, F2F invokes, jobs, cron, and inbound webhooks. One row per trace; click to see the full waterfall of spans. ")],-1)),r(_,{variant:"secondary",size:"sm",loading:m.value,onClick:c},{default:g(()=>[r(n(Y),{class:"w-3.5 h-3.5"}),t[1]||(t[1]=y(" Refresh ",-1))]),_:1},8,["loading"])]),e("div",I,[e("div",J,[r(n(z),{class:"w-3.5 h-3.5 absolute left-2.5 top-1/2 -translate-y-1/2 text-foreground-muted/60 pointer-events-none"}),B(e("input",{"onUpdate:modelValue":t[0]||(t[0]=s=>x.value=s),placeholder:"Filter by function id or name…",class:"w-full bg-background border border-border rounded-md pl-8 pr-3 py-1.5 text-base sm:text-xs text-foreground placeholder-foreground-muted/60 focus:outline-none focus:border-white",onKeydown:M(c,["enter"])},null,544),[[D,x.value]])]),e("div",Q,[(a(),l(T,null,C(N,s=>r(_,{key:s.value,variant:"chip",size:"xs",active:v.value===s.value,class:"shrink-0 snap-start",onClick:b=>E(s.value)},{default:g(()=>[y(i(s.label),1)]),_:2},1032,["active","onClick"])),64)),t[4]||(t[4]=e("span",{class:"text-foreground-muted/40 shrink-0"},"·",-1)),r(_,{variant:"chip",size:"xs",active:h.value,class:"shrink-0 snap-start",onClick:O},{default:g(()=>[r(n(S),{class:"w-3 h-3"}),t[3]||(t[3]=y(" Outliers only ",-1))]),_:1},8,["active"])])]),p.value?(a(),l("div",W,i(p.value),1)):!f.value.length&&!m.value?(a(),l("div",X,[r(n(P),{class:"w-6 h-6 mx-auto mb-3 text-foreground-muted/50"}),t[5]||(t[5]=e("p",null,"No traces yet.",-1)),t[6]||(t[6]=e("p",{class:"text-xs mt-1 text-foreground-muted/60"}," Hit a function over HTTP or fire a cron and they'll show up here. ",-1))])):(a(),l("div",Z,[e("table",ee,[t[7]||(t[7]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-4 py-3 w-32"},"Time"),e("th",{class:"px-4 py-3 w-40"},"Trace"),e("th",{class:"px-4 py-3"},"Root function"),e("th",{class:"px-4 py-3 w-28 hidden md:table-cell"},"Trigger"),e("th",{class:"px-4 py-3 w-24 text-right hidden sm:table-cell"},"Duration"),e("th",{class:"px-4 py-3 w-24"},"Status"),e("th",{class:"px-4 py-3 w-10"})])],-1)),e("tbody",te,[(a(!0),l(T,null,C(f.value,s=>(a(),l("tr",{key:s.trace_id,class:"hover:bg-surface/40 cursor-pointer transition-colors",onClick:b=>R(s.trace_id)},[e("td",oe,i(V(s.started_at)),1),e("td",re,i(s.trace_id.slice(0,11)),1),e("td",ae,i(s.function_name||s.root_function_id),1),e("td",le,[e("span",ne,i(s.trigger||n(w)),1)]),e("td",ie,i(s.duration_ms!=null?`${s.duration_ms}ms`:n(w)),1),e("td",de,[r(U,{status:s.status},null,8,["status"])]),e("td",ue,[s.is_outlier?(a(),A(n(S),{key:0,class:"w-3.5 h-3.5 text-amber-400 inline",title:"Latency outlier vs P95 baseline"})):F("",!0)])],8,se))),128))])])])),u.value?(a(),l("div",ce,[r(_,{variant:"ghost",size:"sm",onClick:$},{default:g(()=>[...t[8]||(t[8]=[y(" Load more ",-1)])]),_:1})])):F("",!0)]))}};export{_e as default}; +import{o as j,a as l,b as e,d as r,h as g,_,f as n,S as z,e as B,v as D,L as M,F as T,p as C,t as i,aE as P,g as F,r as d,aL as H,i as K,j as a,k as y,n as A}from"./index-fIeDYqWy.js";import{E as w}from"./format-CsU4_SPu.js";import{_ as U}from"./StatusBadge-U9tC82MH.js";import{R as Y}from"./refresh-cw-9T7Tp2vI.js";import{F as S}from"./flag-CL7jr_Ab.js";import"./circle-u9aj3idX.js";import"./clock-C4Bm6ngE.js";const q={class:"space-y-6"},G={class:"flex items-start justify-between gap-4"},I={class:"flex flex-col sm:flex-row sm:items-center gap-2 sm:flex-wrap"},J={class:"relative w-full sm:flex-1 sm:min-w-[260px] sm:max-w-[420px]"},Q={class:"flex items-center gap-2 sm:flex-wrap overflow-x-auto sm:overflow-visible scrollable snap-x min-w-0"},W={key:0,class:"rounded-md border border-red-700/40 bg-red-950/30 p-3 text-xs text-red-200"},X={key:1,class:"bg-background border border-border rounded-lg p-8 text-center text-sm text-foreground-muted"},Z={key:2,class:"bg-background border border-border rounded-lg overflow-x-auto"},ee={class:"w-full text-sm text-left"},te={class:"divide-y divide-border"},se=["onClick"],oe={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted whitespace-nowrap"},re={class:"px-4 py-2.5 font-mono text-xs text-foreground-muted"},ae={class:"px-4 py-2.5 text-white"},le={class:"px-4 py-2.5 hidden md:table-cell"},ne={class:"inline-flex items-center px-2 py-0.5 rounded text-xs border bg-background font-mono text-foreground-muted border-border lowercase"},ie={class:"px-4 py-2.5 text-right font-mono text-xs text-foreground-muted hidden sm:table-cell"},de={class:"px-4 py-2.5"},ue={class:"px-4 py-2.5 text-right"},ce={key:3,class:"flex justify-center"},_e={__name:"Traces",setup(fe){const L=K(),f=d([]),m=d(!1),p=d(""),u=d(""),x=d(""),v=d(""),h=d(!1),N=[{value:"",label:"All"},{value:"success",label:"Success"},{value:"error",label:"Errors"}],k=async({append:o=!1}={})=>{m.value=!0,p.value="";try{const t={limit:50};x.value&&(t.function_id=x.value),v.value&&(t.status=v.value),h.value&&(t.outlier_only="1"),o&&u.value&&(t.before=u.value);const s=await H(t),b=s.data?.traces||[];o?f.value.push(...b):f.value=b,u.value=s.data?.next_cursor||""}catch(t){p.value=t?.response?.data?.error?.message||t?.message||"failed to load traces"}finally{m.value=!1}},c=()=>{u.value="",k()},$=()=>k({append:!0}),E=o=>{v.value=o,c()},O=()=>{h.value=!h.value,c()},R=o=>L.push(`/traces/${o}`),V=o=>o?new Date(o).toLocaleTimeString(void 0,{hour12:!1}):w;return j(c),(o,t)=>(a(),l("div",q,[e("div",G,[t[2]||(t[2]=e("div",null,[e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Traces "),e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"}," Causal chains across HTTP, F2F invokes, jobs, cron, and inbound webhooks. One row per trace; click to see the full waterfall of spans. ")],-1)),r(_,{variant:"secondary",size:"sm",loading:m.value,onClick:c},{default:g(()=>[r(n(Y),{class:"w-3.5 h-3.5"}),t[1]||(t[1]=y(" Refresh ",-1))]),_:1},8,["loading"])]),e("div",I,[e("div",J,[r(n(z),{class:"w-3.5 h-3.5 absolute left-2.5 top-1/2 -translate-y-1/2 text-foreground-muted/60 pointer-events-none"}),B(e("input",{"onUpdate:modelValue":t[0]||(t[0]=s=>x.value=s),placeholder:"Filter by function id or name…",class:"w-full bg-background border border-border rounded-md pl-8 pr-3 py-1.5 text-base sm:text-xs text-foreground placeholder-foreground-muted/60 focus:outline-none focus:border-white",onKeydown:M(c,["enter"])},null,544),[[D,x.value]])]),e("div",Q,[(a(),l(T,null,C(N,s=>r(_,{key:s.value,variant:"chip",size:"xs",active:v.value===s.value,class:"shrink-0 snap-start",onClick:b=>E(s.value)},{default:g(()=>[y(i(s.label),1)]),_:2},1032,["active","onClick"])),64)),t[4]||(t[4]=e("span",{class:"text-foreground-muted/40 shrink-0"},"·",-1)),r(_,{variant:"chip",size:"xs",active:h.value,class:"shrink-0 snap-start",onClick:O},{default:g(()=>[r(n(S),{class:"w-3 h-3"}),t[3]||(t[3]=y(" Outliers only ",-1))]),_:1},8,["active"])])]),p.value?(a(),l("div",W,i(p.value),1)):!f.value.length&&!m.value?(a(),l("div",X,[r(n(P),{class:"w-6 h-6 mx-auto mb-3 text-foreground-muted/50"}),t[5]||(t[5]=e("p",null,"No traces yet.",-1)),t[6]||(t[6]=e("p",{class:"text-xs mt-1 text-foreground-muted/60"}," Hit a function over HTTP or fire a cron and they'll show up here. ",-1))])):(a(),l("div",Z,[e("table",ee,[t[7]||(t[7]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-4 py-3 w-32"},"Time"),e("th",{class:"px-4 py-3 w-40"},"Trace"),e("th",{class:"px-4 py-3"},"Root function"),e("th",{class:"px-4 py-3 w-28 hidden md:table-cell"},"Trigger"),e("th",{class:"px-4 py-3 w-24 text-right hidden sm:table-cell"},"Duration"),e("th",{class:"px-4 py-3 w-24"},"Status"),e("th",{class:"px-4 py-3 w-10"})])],-1)),e("tbody",te,[(a(!0),l(T,null,C(f.value,s=>(a(),l("tr",{key:s.trace_id,class:"hover:bg-surface/40 cursor-pointer transition-colors",onClick:b=>R(s.trace_id)},[e("td",oe,i(V(s.started_at)),1),e("td",re,i(s.trace_id.slice(0,11)),1),e("td",ae,i(s.function_name||s.root_function_id),1),e("td",le,[e("span",ne,i(s.trigger||n(w)),1)]),e("td",ie,i(s.duration_ms!=null?`${s.duration_ms}ms`:n(w)),1),e("td",de,[r(U,{status:s.status},null,8,["status"])]),e("td",ue,[s.is_outlier?(a(),A(n(S),{key:0,class:"w-3.5 h-3.5 text-amber-400 inline",title:"Latency outlier vs P95 baseline"})):F("",!0)])],8,se))),128))])])])),u.value?(a(),l("div",ce,[r(_,{variant:"ghost",size:"sm",onClick:$},{default:g(()=>[...t[8]||(t[8]=[y(" Load more ",-1)])]),_:1})])):F("",!0)]))}};export{_e as default}; diff --git a/backend/internal/server/ui_dist/assets/Webhooks-DwuKsY7O.js b/backend/internal/server/ui_dist/assets/Webhooks-DYEPaH1Y.js similarity index 96% rename from backend/internal/server/ui_dist/assets/Webhooks-DwuKsY7O.js rename to backend/internal/server/ui_dist/assets/Webhooks-DYEPaH1Y.js index 9ddfb06..58c0691 100644 --- a/backend/internal/server/ui_dist/assets/Webhooks-DwuKsY7O.js +++ b/backend/internal/server/ui_dist/assets/Webhooks-DYEPaH1Y.js @@ -1 +1 @@ -import{c as se,C as oe,o as ne,G as ae,a as l,b as e,d,h as m,_ as h,k as i,F as W,p as E,f as u,$ as re,g as x,w as R,t as a,aa as le,aU as ie,r as f,j as r,P as de,s as U,e as N,v as V,ab as ue,n as $,aV as ce,aW as fe,aX as ve,aY as me,q as pe,aZ as ge,a_ as xe}from"./index-BMkkwZ9q.js";import{E as B}from"./format-CsU4_SPu.js";import{c as be}from"./clipboard-CmSw2rR-.js";import{_}from"./IconButton-BgeMzwXv.js";import{_ as ye}from"./Modal-jEhKmxZK.js";import{Z as he}from"./zap-DvhWYa2n.js";import{S as ke}from"./square-pen-CsqFW8Ka.js";import{T as we}from"./trash-2-BXf2uqQH.js";import{C as _e}from"./check-C4wzjDZN.js";import{C as Ce}from"./copy-CTb6u-fx.js";import{R as Se}from"./rotate-ccw-CsgWy1Bs.js";const De=se("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),Te={class:"space-y-4"},We={class:"flex items-center justify-between gap-4 flex-wrap"},Ee={class:"bg-background border border-border rounded-lg overflow-x-auto"},$e={class:"w-full text-sm text-left"},Le={class:"divide-y divide-border"},Pe=["onClick"],Ue={class:"px-4 py-3 font-medium text-white"},Ne={class:"flex flex-col"},je={class:"text-[10px] text-foreground-muted font-mono"},Fe={class:"px-4 py-3 text-xs text-foreground-muted truncate max-w-xs hidden md:table-cell"},Me={class:"px-4 py-3 hidden sm:table-cell"},Re={class:"flex flex-wrap gap-1"},Ve={class:"px-4 py-3"},Be={class:"px-4 py-3 text-foreground-muted text-xs hidden lg:table-cell"},ze={class:"inline-flex items-center gap-1"},Ae={key:0},Ie={colspan:"6",class:"px-4 py-12 text-center"},He={key:0,class:"space-y-4"},qe={class:"flex flex-wrap gap-1.5"},Oe={class:"flex items-center gap-2 pt-1"},Xe={key:1,class:"space-y-3"},Ze={class:"flex items-center gap-2 text-success-fg"},Ye={class:"bg-background border border-border rounded p-3 font-mono text-xs break-all flex items-center gap-2"},Ge={class:"flex-1 text-foreground"},Je={class:"bg-background border-l border-border w-full max-w-2xl h-full overflow-y-auto"},Ke={class:"border-b border-border px-6 py-4 flex items-center justify-between bg-surface sticky top-0"},Qe={class:"min-w-0"},et={class:"text-base font-semibold text-foreground truncate"},tt={class:"text-[11px] text-foreground-muted font-mono truncate"},st={class:"p-4 space-y-2"},ot={key:0,class:"text-center text-foreground-muted text-sm py-12"},nt={class:"flex items-center justify-between gap-2 flex-wrap"},at={class:"text-xs font-mono text-foreground"},rt={class:"flex items-center justify-between text-[11px] text-foreground-muted gap-2 flex-wrap"},lt={class:"font-mono"},it={class:"flex items-center justify-between text-[11px] text-foreground-muted gap-2 flex-wrap"},dt={key:0},ut=["title"],_t={__name:"Webhooks",setup(ct){const b=oe(),z=[{value:"*"},{value:"deployment.succeeded"},{value:"deployment.failed"},{value:"function.created"},{value:"function.updated"},{value:"function.deleted"},{value:"execution.error"},{value:"cron.failed"},{value:"job.succeeded"},{value:"job.failed"}],L=f([]),C=f(!1),p=f(null),k=f(!1),c=f(""),w=f(!1),n=f({name:"",url:"",events:["*"],enabled:!0}),g=f(null),S=f([]);let y=null;const j=pe(()=>n.value.name.trim()&&n.value.url.trim()&&n.value.events.length>0),A=s=>!s.events||s.events.length===0?["*"]:s.events.length>3?[...s.events.slice(0,2),`+${s.events.length-2}`]:s.events,I=s=>s.enabled?s.last_status==="failed"?"bg-danger-tint text-danger-fg border-danger-ring":s.last_status==="ok"?"bg-success-tint text-success-fg border-success-ring":"bg-warning-tint text-warning-fg border-warning-ring":"bg-warning-tint text-warning-fg border-warning-ring",H=s=>s.enabled?s.last_status==="failed"?"bg-danger-fg":s.last_status==="ok"?"bg-success-fg":"bg-warning-fg":"bg-warning-fg",q=s=>s.enabled?s.last_status==="failed"?"failing":s.last_status==="ok"?"healthy":"pending first delivery":"paused",O=s=>{switch(s){case"pending":return"bg-warning-tint text-warning-fg border-warning-ring";case"running":return"bg-info-tint text-info-fg border-info-ring";case"succeeded":return"bg-success-tint text-success-fg border-success-ring";case"failed":return"bg-danger-tint text-danger-fg border-danger-ring";default:return"bg-surface text-foreground-muted border-border"}},F=s=>s?new Date(s).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}):B,D=async()=>{try{const s=await ie();L.value=s.data.subscriptions||[]}catch(s){console.error("Failed to load webhooks",s)}},X=()=>{p.value=null,n.value={name:"",url:"",events:["*"],enabled:!0},c.value="",w.value=!1,C.value=!0},Z=s=>{p.value=s.id,n.value={name:s.name,url:s.url,events:[...s.events||["*"]],enabled:s.enabled},c.value="",C.value=!0},T=()=>{C.value=!1,p.value=null,c.value=""},Y=s=>{const t=n.value.events.indexOf(s);t>=0?n.value.events.splice(t,1):n.value.events.push(s)},G=async()=>{if(!(!j.value||k.value)){k.value=!0;try{if(p.value)await ve(p.value,{name:n.value.name.trim(),url:n.value.url.trim(),events:n.value.events,enabled:n.value.enabled}),await D(),T();else{const s=await me({name:n.value.name.trim(),url:n.value.url.trim(),events:n.value.events,enabled:n.value.enabled});c.value=s.data.secret,await D()}}catch(s){b.notify({title:"Failed to save webhook",message:s?.response?.data?.error?.message||s.message,danger:!0})}finally{k.value=!1}}},J=async()=>{await be(c.value)&&(w.value=!0,setTimeout(()=>{w.value=!1},1500))},K=async s=>{if(await b.ask({title:`Delete "${s.name}"?`,message:"Future events will not fire to this URL. Existing deliveries will be removed too.",confirmLabel:"Delete",danger:!0}))try{await fe(s.id),await D()}catch(o){b.notify({title:"Delete failed",message:o.message,danger:!0})}},Q=async s=>{try{await ce(s.id),b.notify({title:"Test event queued",message:`Will deliver to ${s.url} within 5s. Open the row to watch the delivery.`})}catch(t){b.notify({title:"Test failed",message:t.message,danger:!0})}},ee=async s=>{g.value=s,await P(s.id),y=setInterval(()=>P(s.id),4e3)},P=async s=>{try{const t=await ge(s);S.value=t.data.deliveries||[]}catch(t){console.error("Failed to load deliveries",t)}},M=()=>{g.value=null,S.value=[],y&&clearInterval(y),y=null},te=async s=>{try{await xe(s.id),g.value&&await P(g.value.id)}catch(t){b.notify({title:"Retry failed",message:t.message,danger:!0})}};return ne(()=>D()),ae(()=>{y&&clearInterval(y)}),(s,t)=>(r(),l("div",Te,[e("div",We,[t[6]||(t[6]=e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Webhooks ",-1)),d(h,{onClick:X},{default:m(()=>[d(u(de),{class:"w-4 h-4"}),t[5]||(t[5]=i(" New webhook ",-1))]),_:1})]),t[22]||(t[22]=e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},[i(" System events fan out to operator-configured URLs. Subscriptions are global. Payloads are HMAC-SHA256 signed (header "),e("code",{class:"font-mono text-[11px] px-1.5 py-0.5 rounded bg-surface border border-border text-white"},"X-Orva-Signature"),i("); the receiver verifies with the secret you copy at create time. ")],-1)),e("div",Ee,[e("table",$e,[t[9]||(t[9]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-4 py-3 font-medium"}," Name "),e("th",{class:"px-4 py-3 font-medium hidden md:table-cell"}," URL "),e("th",{class:"px-4 py-3 font-medium hidden sm:table-cell"}," Events "),e("th",{class:"px-4 py-3 font-medium"}," Status "),e("th",{class:"px-4 py-3 font-medium hidden lg:table-cell"}," Last delivery "),e("th",{class:"px-4 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",Le,[(r(!0),l(W,null,E(L.value,o=>(r(),l("tr",{key:o.id,class:"hover:bg-surface/40 transition-colors cursor-pointer",onClick:v=>ee(o)},[e("td",Ue,[e("div",Ne,[e("span",null,a(o.name),1),e("span",je,a(o.id),1)])]),e("td",Fe,a(o.url),1),e("td",Me,[e("div",Re,[(r(!0),l(W,null,E(A(o),v=>(r(),l("span",{key:v,class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] bg-surface border border-border text-foreground font-mono"},a(v),1))),128))])]),e("td",Ve,[e("span",{class:U(["inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium border",I(o)])},[e("span",{class:U(["w-1.5 h-1.5 rounded-full",H(o)])},null,2),i(" "+a(q(o)),1)],2)]),e("td",Be,a(o.last_delivery_at?F(o.last_delivery_at):u(B)),1),e("td",{class:"px-4 py-3 text-right",onClick:t[0]||(t[0]=R(()=>{},["stop"]))},[e("div",ze,[d(_,{icon:u(he),title:"Send test event",onClick:v=>Q(o)},null,8,["icon","onClick"]),d(_,{icon:u(ke),title:"Edit",onClick:v=>Z(o)},null,8,["icon","onClick"]),d(_,{icon:u(we),variant:"danger",title:"Delete",onClick:v=>K(o)},null,8,["icon","onClick"])])])],8,Pe))),128)),L.value.length===0?(r(),l("tr",Ae,[e("td",Ie,[d(u(re),{class:"w-10 h-10 text-foreground-muted mx-auto mb-3 opacity-30"}),t[7]||(t[7]=e("p",{class:"text-foreground-muted text-sm"}," No webhooks yet. ",-1)),t[8]||(t[8]=e("p",{class:"text-foreground-muted text-xs mt-1"}," Wire ops integrations: Slack on deploy failures, PagerDuty on cron failures, etc. ",-1))])])):x("",!0)])])]),d(ye,{"model-value":C.value,title:p.value?"Edit webhook":"New webhook",size:"lg","onUpdate:modelValue":t[4]||(t[4]=o=>o?null:T())},{footer:m(()=>[c.value?x("",!0):(r(),$(h,{key:0,variant:"ghost",onClick:T},{default:m(()=>[...t[18]||(t[18]=[i(" Cancel ",-1)])]),_:1})),c.value?(r(),$(h,{key:2,onClick:T},{default:m(()=>[...t[19]||(t[19]=[i(" Done ",-1)])]),_:1})):(r(),$(h,{key:1,disabled:!j.value||k.value,onClick:G},{default:m(()=>[i(a(k.value?"Saving…":p.value?"Save":"Create"),1)]),_:1},8,["disabled"]))]),default:m(()=>[c.value?(r(),l("div",Xe,[e("div",Ze,[d(u(De),{class:"w-5 h-5"}),t[16]||(t[16]=e("span",{class:"text-sm font-medium"},"Webhook created",-1))]),t[17]||(t[17]=e("p",{class:"text-xs text-foreground-muted"},[i(" Copy this secret "),e("span",{class:"text-foreground font-medium"},"now"),i(" — it won't be shown again. The receiver uses it to verify HMAC signatures. ")],-1)),e("div",Ye,[e("code",Ge,a(c.value),1),d(_,{icon:w.value?u(_e):u(Ce),title:w.value?"Copied":"Copy secret",onClick:J},null,8,["icon","title"])])])):(r(),l("div",He,[e("div",null,[t[10]||(t[10]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Name",-1)),N(e("input",{"onUpdate:modelValue":t[1]||(t[1]=o=>n.value.name=o),placeholder:"ops-slack",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[V,n.value.name]])]),e("div",null,[t[11]||(t[11]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Receiver URL",-1)),N(e("input",{"onUpdate:modelValue":t[2]||(t[2]=o=>n.value.url=o),placeholder:"https://hooks.slack.com/services/...",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[V,n.value.url]]),t[12]||(t[12]=e("p",{class:"text-[11px] text-foreground-muted mt-1.5"}," The receiver must respond 2xx within 15s. Failed deliveries retry up to 5× with exponential backoff. ",-1))]),e("div",null,[t[13]||(t[13]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Events",-1)),e("div",qe,[(r(),l(W,null,E(z,o=>d(h,{key:o.value,variant:"chip",size:"xs",active:n.value.events.includes(o.value),class:"font-mono",onClick:v=>Y(o.value)},{default:m(()=>[i(a(o.value),1)]),_:2},1032,["active","onClick"])),64))]),t[14]||(t[14]=e("p",{class:"text-[11px] text-foreground-muted mt-1.5"},[i(" Pick "),e("code",{class:"font-mono"},"*"),i(" to receive every event. Each badge above is one of the 8 system events that can fire today. ")],-1))]),e("div",Oe,[N(e("input",{id:"enabled","onUpdate:modelValue":t[3]||(t[3]=o=>n.value.enabled=o),type:"checkbox",class:"w-4 h-4 rounded border-border bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background"},null,512),[[ue,n.value.enabled]]),t[15]||(t[15]=e("label",{for:"enabled",class:"text-sm text-foreground"},"Enabled",-1))])]))]),_:1},8,["model-value","title"]),g.value?(r(),l("div",{key:0,class:"fixed inset-0 bg-black/60 backdrop-blur-sm flex justify-end z-50",onClick:R(M,["self"])},[e("div",Je,[e("div",Ke,[e("div",Qe,[e("h2",et," Deliveries · "+a(g.value.name),1),e("p",tt,a(g.value.id),1)]),d(_,{icon:u(le),title:"Close",onClick:M},null,8,["icon"])]),e("div",st,[S.value.length?x("",!0):(r(),l("div",ot,[...t[20]||(t[20]=[i(" No deliveries yet. Trigger a system event or use ",-1),e("span",{class:"text-foreground"},"Send test event",-1),i(" to seed one. ",-1)])])),(r(!0),l(W,null,E(S.value,o=>(r(),l("div",{key:o.id,class:"bg-surface border border-border rounded p-3 space-y-1.5"},[e("div",nt,[e("code",at,a(o.event_name),1),e("span",{class:U(["inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium border",O(o.status)])},a(o.status),3)]),e("div",rt,[e("span",lt,a(o.id),1),e("span",null,a(F(o.created_at)),1)]),e("div",it,[e("span",null,"attempts "+a(o.attempts)+" / "+a(o.max_attempts),1),o.response_status?(r(),l("span",dt,"HTTP "+a(o.response_status),1)):x("",!0)]),o.last_error?(r(),l("p",{key:0,class:"text-[11px] text-danger-fg truncate",title:o.last_error},a(o.last_error),9,ut)):x("",!0),o.status==="failed"?(r(),$(h,{key:1,size:"xs",variant:"ghost",onClick:v=>te(o)},{default:m(()=>[d(u(Se),{class:"w-3.5 h-3.5"}),t[21]||(t[21]=i(" Retry ",-1))]),_:1},8,["onClick"])):x("",!0)]))),128))])])])):x("",!0)]))}};export{_t as default}; +import{c as se,C as oe,o as ne,G as ae,a as l,b as e,d,h as m,_ as h,k as i,F as W,p as E,f as u,$ as re,g as x,w as R,t as a,aa as le,aU as ie,r as f,j as r,P as de,s as U,e as N,v as V,ab as ue,n as $,aV as ce,aW as fe,aX as ve,aY as me,q as pe,aZ as ge,a_ as xe}from"./index-fIeDYqWy.js";import{E as B}from"./format-CsU4_SPu.js";import{c as be}from"./clipboard-CmSw2rR-.js";import{_}from"./IconButton-CnguiHlc.js";import{_ as ye}from"./Modal-DRIalOH5.js";import{Z as he}from"./zap-BoY-LImv.js";import{S as ke}from"./square-pen-BfULFvug.js";import{T as we}from"./trash-2-B2Wniuw-.js";import{C as _e}from"./check-Cwg1V2MO.js";import{C as Ce}from"./copy-DJiur09W.js";import{R as Se}from"./rotate-ccw-BYpihd4d.js";const De=se("circle-check-big",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),Te={class:"space-y-4"},We={class:"flex items-center justify-between gap-4 flex-wrap"},Ee={class:"bg-background border border-border rounded-lg overflow-x-auto"},$e={class:"w-full text-sm text-left"},Le={class:"divide-y divide-border"},Pe=["onClick"],Ue={class:"px-4 py-3 font-medium text-white"},Ne={class:"flex flex-col"},je={class:"text-[10px] text-foreground-muted font-mono"},Fe={class:"px-4 py-3 text-xs text-foreground-muted truncate max-w-xs hidden md:table-cell"},Me={class:"px-4 py-3 hidden sm:table-cell"},Re={class:"flex flex-wrap gap-1"},Ve={class:"px-4 py-3"},Be={class:"px-4 py-3 text-foreground-muted text-xs hidden lg:table-cell"},ze={class:"inline-flex items-center gap-1"},Ae={key:0},Ie={colspan:"6",class:"px-4 py-12 text-center"},He={key:0,class:"space-y-4"},qe={class:"flex flex-wrap gap-1.5"},Oe={class:"flex items-center gap-2 pt-1"},Xe={key:1,class:"space-y-3"},Ze={class:"flex items-center gap-2 text-success-fg"},Ye={class:"bg-background border border-border rounded p-3 font-mono text-xs break-all flex items-center gap-2"},Ge={class:"flex-1 text-foreground"},Je={class:"bg-background border-l border-border w-full max-w-2xl h-full overflow-y-auto"},Ke={class:"border-b border-border px-6 py-4 flex items-center justify-between bg-surface sticky top-0"},Qe={class:"min-w-0"},et={class:"text-base font-semibold text-foreground truncate"},tt={class:"text-[11px] text-foreground-muted font-mono truncate"},st={class:"p-4 space-y-2"},ot={key:0,class:"text-center text-foreground-muted text-sm py-12"},nt={class:"flex items-center justify-between gap-2 flex-wrap"},at={class:"text-xs font-mono text-foreground"},rt={class:"flex items-center justify-between text-[11px] text-foreground-muted gap-2 flex-wrap"},lt={class:"font-mono"},it={class:"flex items-center justify-between text-[11px] text-foreground-muted gap-2 flex-wrap"},dt={key:0},ut=["title"],_t={__name:"Webhooks",setup(ct){const b=oe(),z=[{value:"*"},{value:"deployment.succeeded"},{value:"deployment.failed"},{value:"function.created"},{value:"function.updated"},{value:"function.deleted"},{value:"execution.error"},{value:"cron.failed"},{value:"job.succeeded"},{value:"job.failed"}],L=f([]),C=f(!1),p=f(null),k=f(!1),c=f(""),w=f(!1),n=f({name:"",url:"",events:["*"],enabled:!0}),g=f(null),S=f([]);let y=null;const j=pe(()=>n.value.name.trim()&&n.value.url.trim()&&n.value.events.length>0),A=s=>!s.events||s.events.length===0?["*"]:s.events.length>3?[...s.events.slice(0,2),`+${s.events.length-2}`]:s.events,I=s=>s.enabled?s.last_status==="failed"?"bg-danger-tint text-danger-fg border-danger-ring":s.last_status==="ok"?"bg-success-tint text-success-fg border-success-ring":"bg-warning-tint text-warning-fg border-warning-ring":"bg-warning-tint text-warning-fg border-warning-ring",H=s=>s.enabled?s.last_status==="failed"?"bg-danger-fg":s.last_status==="ok"?"bg-success-fg":"bg-warning-fg":"bg-warning-fg",q=s=>s.enabled?s.last_status==="failed"?"failing":s.last_status==="ok"?"healthy":"pending first delivery":"paused",O=s=>{switch(s){case"pending":return"bg-warning-tint text-warning-fg border-warning-ring";case"running":return"bg-info-tint text-info-fg border-info-ring";case"succeeded":return"bg-success-tint text-success-fg border-success-ring";case"failed":return"bg-danger-tint text-danger-fg border-danger-ring";default:return"bg-surface text-foreground-muted border-border"}},F=s=>s?new Date(s).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}):B,D=async()=>{try{const s=await ie();L.value=s.data.subscriptions||[]}catch(s){console.error("Failed to load webhooks",s)}},X=()=>{p.value=null,n.value={name:"",url:"",events:["*"],enabled:!0},c.value="",w.value=!1,C.value=!0},Z=s=>{p.value=s.id,n.value={name:s.name,url:s.url,events:[...s.events||["*"]],enabled:s.enabled},c.value="",C.value=!0},T=()=>{C.value=!1,p.value=null,c.value=""},Y=s=>{const t=n.value.events.indexOf(s);t>=0?n.value.events.splice(t,1):n.value.events.push(s)},G=async()=>{if(!(!j.value||k.value)){k.value=!0;try{if(p.value)await ve(p.value,{name:n.value.name.trim(),url:n.value.url.trim(),events:n.value.events,enabled:n.value.enabled}),await D(),T();else{const s=await me({name:n.value.name.trim(),url:n.value.url.trim(),events:n.value.events,enabled:n.value.enabled});c.value=s.data.secret,await D()}}catch(s){b.notify({title:"Failed to save webhook",message:s?.response?.data?.error?.message||s.message,danger:!0})}finally{k.value=!1}}},J=async()=>{await be(c.value)&&(w.value=!0,setTimeout(()=>{w.value=!1},1500))},K=async s=>{if(await b.ask({title:`Delete "${s.name}"?`,message:"Future events will not fire to this URL. Existing deliveries will be removed too.",confirmLabel:"Delete",danger:!0}))try{await fe(s.id),await D()}catch(o){b.notify({title:"Delete failed",message:o.message,danger:!0})}},Q=async s=>{try{await ce(s.id),b.notify({title:"Test event queued",message:`Will deliver to ${s.url} within 5s. Open the row to watch the delivery.`})}catch(t){b.notify({title:"Test failed",message:t.message,danger:!0})}},ee=async s=>{g.value=s,await P(s.id),y=setInterval(()=>P(s.id),4e3)},P=async s=>{try{const t=await ge(s);S.value=t.data.deliveries||[]}catch(t){console.error("Failed to load deliveries",t)}},M=()=>{g.value=null,S.value=[],y&&clearInterval(y),y=null},te=async s=>{try{await xe(s.id),g.value&&await P(g.value.id)}catch(t){b.notify({title:"Retry failed",message:t.message,danger:!0})}};return ne(()=>D()),ae(()=>{y&&clearInterval(y)}),(s,t)=>(r(),l("div",Te,[e("div",We,[t[6]||(t[6]=e("h1",{class:"text-xl font-semibold text-white tracking-tight"}," Webhooks ",-1)),d(h,{onClick:X},{default:m(()=>[d(u(de),{class:"w-4 h-4"}),t[5]||(t[5]=i(" New webhook ",-1))]),_:1})]),t[22]||(t[22]=e("p",{class:"text-sm text-foreground-muted mt-1.5 max-w-prose leading-body"},[i(" System events fan out to operator-configured URLs. Subscriptions are global. Payloads are HMAC-SHA256 signed (header "),e("code",{class:"font-mono text-[11px] px-1.5 py-0.5 rounded bg-surface border border-border text-white"},"X-Orva-Signature"),i("); the receiver verifies with the secret you copy at create time. ")],-1)),e("div",Ee,[e("table",$e,[t[9]||(t[9]=e("thead",{class:"text-xs text-foreground-muted uppercase bg-surface border-b border-border"},[e("tr",null,[e("th",{class:"px-4 py-3 font-medium"}," Name "),e("th",{class:"px-4 py-3 font-medium hidden md:table-cell"}," URL "),e("th",{class:"px-4 py-3 font-medium hidden sm:table-cell"}," Events "),e("th",{class:"px-4 py-3 font-medium"}," Status "),e("th",{class:"px-4 py-3 font-medium hidden lg:table-cell"}," Last delivery "),e("th",{class:"px-4 py-3 font-medium text-right"}," Actions ")])],-1)),e("tbody",Le,[(r(!0),l(W,null,E(L.value,o=>(r(),l("tr",{key:o.id,class:"hover:bg-surface/40 transition-colors cursor-pointer",onClick:v=>ee(o)},[e("td",Ue,[e("div",Ne,[e("span",null,a(o.name),1),e("span",je,a(o.id),1)])]),e("td",Fe,a(o.url),1),e("td",Me,[e("div",Re,[(r(!0),l(W,null,E(A(o),v=>(r(),l("span",{key:v,class:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] bg-surface border border-border text-foreground font-mono"},a(v),1))),128))])]),e("td",Ve,[e("span",{class:U(["inline-flex items-center gap-1.5 px-2 py-0.5 rounded text-[11px] font-medium border",I(o)])},[e("span",{class:U(["w-1.5 h-1.5 rounded-full",H(o)])},null,2),i(" "+a(q(o)),1)],2)]),e("td",Be,a(o.last_delivery_at?F(o.last_delivery_at):u(B)),1),e("td",{class:"px-4 py-3 text-right",onClick:t[0]||(t[0]=R(()=>{},["stop"]))},[e("div",ze,[d(_,{icon:u(he),title:"Send test event",onClick:v=>Q(o)},null,8,["icon","onClick"]),d(_,{icon:u(ke),title:"Edit",onClick:v=>Z(o)},null,8,["icon","onClick"]),d(_,{icon:u(we),variant:"danger",title:"Delete",onClick:v=>K(o)},null,8,["icon","onClick"])])])],8,Pe))),128)),L.value.length===0?(r(),l("tr",Ae,[e("td",Ie,[d(u(re),{class:"w-10 h-10 text-foreground-muted mx-auto mb-3 opacity-30"}),t[7]||(t[7]=e("p",{class:"text-foreground-muted text-sm"}," No webhooks yet. ",-1)),t[8]||(t[8]=e("p",{class:"text-foreground-muted text-xs mt-1"}," Wire ops integrations: Slack on deploy failures, PagerDuty on cron failures, etc. ",-1))])])):x("",!0)])])]),d(ye,{"model-value":C.value,title:p.value?"Edit webhook":"New webhook",size:"lg","onUpdate:modelValue":t[4]||(t[4]=o=>o?null:T())},{footer:m(()=>[c.value?x("",!0):(r(),$(h,{key:0,variant:"ghost",onClick:T},{default:m(()=>[...t[18]||(t[18]=[i(" Cancel ",-1)])]),_:1})),c.value?(r(),$(h,{key:2,onClick:T},{default:m(()=>[...t[19]||(t[19]=[i(" Done ",-1)])]),_:1})):(r(),$(h,{key:1,disabled:!j.value||k.value,onClick:G},{default:m(()=>[i(a(k.value?"Saving…":p.value?"Save":"Create"),1)]),_:1},8,["disabled"]))]),default:m(()=>[c.value?(r(),l("div",Xe,[e("div",Ze,[d(u(De),{class:"w-5 h-5"}),t[16]||(t[16]=e("span",{class:"text-sm font-medium"},"Webhook created",-1))]),t[17]||(t[17]=e("p",{class:"text-xs text-foreground-muted"},[i(" Copy this secret "),e("span",{class:"text-foreground font-medium"},"now"),i(" — it won't be shown again. The receiver uses it to verify HMAC signatures. ")],-1)),e("div",Ye,[e("code",Ge,a(c.value),1),d(_,{icon:w.value?u(_e):u(Ce),title:w.value?"Copied":"Copy secret",onClick:J},null,8,["icon","title"])])])):(r(),l("div",He,[e("div",null,[t[10]||(t[10]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Name",-1)),N(e("input",{"onUpdate:modelValue":t[1]||(t[1]=o=>n.value.name=o),placeholder:"ops-slack",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[V,n.value.name]])]),e("div",null,[t[11]||(t[11]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Receiver URL",-1)),N(e("input",{"onUpdate:modelValue":t[2]||(t[2]=o=>n.value.url=o),placeholder:"https://hooks.slack.com/services/...",class:"w-full bg-background border border-border rounded-md px-3 py-2 text-sm text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-white focus:border-white"},null,512),[[V,n.value.url]]),t[12]||(t[12]=e("p",{class:"text-[11px] text-foreground-muted mt-1.5"}," The receiver must respond 2xx within 15s. Failed deliveries retry up to 5× with exponential backoff. ",-1))]),e("div",null,[t[13]||(t[13]=e("label",{class:"text-xs font-medium text-foreground-muted uppercase tracking-wide block mb-1.5"},"Events",-1)),e("div",qe,[(r(),l(W,null,E(z,o=>d(h,{key:o.value,variant:"chip",size:"xs",active:n.value.events.includes(o.value),class:"font-mono",onClick:v=>Y(o.value)},{default:m(()=>[i(a(o.value),1)]),_:2},1032,["active","onClick"])),64))]),t[14]||(t[14]=e("p",{class:"text-[11px] text-foreground-muted mt-1.5"},[i(" Pick "),e("code",{class:"font-mono"},"*"),i(" to receive every event. Each badge above is one of the 8 system events that can fire today. ")],-1))]),e("div",Oe,[N(e("input",{id:"enabled","onUpdate:modelValue":t[3]||(t[3]=o=>n.value.enabled=o),type:"checkbox",class:"w-4 h-4 rounded border-border bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background"},null,512),[[ue,n.value.enabled]]),t[15]||(t[15]=e("label",{for:"enabled",class:"text-sm text-foreground"},"Enabled",-1))])]))]),_:1},8,["model-value","title"]),g.value?(r(),l("div",{key:0,class:"fixed inset-0 bg-black/60 backdrop-blur-sm flex justify-end z-50",onClick:R(M,["self"])},[e("div",Je,[e("div",Ke,[e("div",Qe,[e("h2",et," Deliveries · "+a(g.value.name),1),e("p",tt,a(g.value.id),1)]),d(_,{icon:u(le),title:"Close",onClick:M},null,8,["icon"])]),e("div",st,[S.value.length?x("",!0):(r(),l("div",ot,[...t[20]||(t[20]=[i(" No deliveries yet. Trigger a system event or use ",-1),e("span",{class:"text-foreground"},"Send test event",-1),i(" to seed one. ",-1)])])),(r(!0),l(W,null,E(S.value,o=>(r(),l("div",{key:o.id,class:"bg-surface border border-border rounded p-3 space-y-1.5"},[e("div",nt,[e("code",at,a(o.event_name),1),e("span",{class:U(["inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium border",O(o.status)])},a(o.status),3)]),e("div",rt,[e("span",lt,a(o.id),1),e("span",null,a(F(o.created_at)),1)]),e("div",it,[e("span",null,"attempts "+a(o.attempts)+" / "+a(o.max_attempts),1),o.response_status?(r(),l("span",dt,"HTTP "+a(o.response_status),1)):x("",!0)]),o.last_error?(r(),l("p",{key:0,class:"text-[11px] text-danger-fg truncate",title:o.last_error},a(o.last_error),9,ut)):x("",!0),o.status==="failed"?(r(),$(h,{key:1,size:"xs",variant:"ghost",onClick:v=>te(o)},{default:m(()=>[d(u(Se),{class:"w-3.5 h-3.5"}),t[21]||(t[21]=i(" Retry ",-1))]),_:1},8,["onClick"])):x("",!0)]))),128))])])])):x("",!0)]))}};export{_t as default}; diff --git a/backend/internal/server/ui_dist/assets/ai-DmyZUAtW.js b/backend/internal/server/ui_dist/assets/ai-B3sDNfeq.js similarity index 98% rename from backend/internal/server/ui_dist/assets/ai-DmyZUAtW.js rename to backend/internal/server/ui_dist/assets/ai-B3sDNfeq.js index 9cc2d47..c56aefa 100644 --- a/backend/internal/server/ui_dist/assets/ai-DmyZUAtW.js +++ b/backend/internal/server/ui_dist/assets/ai-B3sDNfeq.js @@ -1,4 +1,4 @@ -import{c as ke,ba as be,r as u,Y as v,a4 as xe}from"./index-BMkkwZ9q.js";const Ae=ke("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),$e=be("ai",()=>{const g=u([]),o=u(null),i=u([]),l=u(!1),y=u(!1),h=u(""),x=u(null),_=u([]),F=u(!1),k=u(null),A=u(""),f=u(""),b=u("off"),m=u([]),E=u(""),M=u(!1);let c=-1,d=null,P=null;function T(){const e={thinking:b.value};return A.value&&(e.provider=A.value),f.value&&(e.model=f.value),e}let X=0;function $(e,t){h.value=e,i.value.push({kind:"error",id:`err-${++X}`,message:e,code:t||""})}function z(e){i.value=i.value.filter(t=>!(t.kind==="error"&&t.id===e))}function j(){i.value=i.value.filter(e=>e.kind!=="error")}async function C(){if(o.value)try{const{data:e}=await v.get(`/ai/conversations/${o.value}`);i.value=K(e)}catch{}}function J(){c>=0&&i.value[c]?.kind==="message"||(i.value.push({kind:"message",role:"assistant",parts:[]}),c=i.value.length-1)}function I(e){const t=i.value[c];if(!t)return;const a={...t,parts:t.parts.slice()};e(a),i.value[c]=a}function G(e){let t="message",a="";for(const n of e.split(` +import{c as ke,ba as be,r as u,Y as v,a4 as xe}from"./index-fIeDYqWy.js";const Ae=ke("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),$e=be("ai",()=>{const g=u([]),o=u(null),i=u([]),l=u(!1),y=u(!1),h=u(""),x=u(null),_=u([]),F=u(!1),k=u(null),A=u(""),f=u(""),b=u("off"),m=u([]),E=u(""),M=u(!1);let c=-1,d=null,P=null;function T(){const e={thinking:b.value};return A.value&&(e.provider=A.value),f.value&&(e.model=f.value),e}let X=0;function $(e,t){h.value=e,i.value.push({kind:"error",id:`err-${++X}`,message:e,code:t||""})}function z(e){i.value=i.value.filter(t=>!(t.kind==="error"&&t.id===e))}function j(){i.value=i.value.filter(e=>e.kind!=="error")}async function C(){if(o.value)try{const{data:e}=await v.get(`/ai/conversations/${o.value}`);i.value=K(e)}catch{}}function J(){c>=0&&i.value[c]?.kind==="message"||(i.value.push({kind:"message",role:"assistant",parts:[]}),c=i.value.length-1)}function I(e){const t=i.value[c];if(!t)return;const a={...t,parts:t.parts.slice()};e(a),i.value[c]=a}function G(e){let t="message",a="";for(const n of e.split(` `))n.startsWith("event:")?t=n.slice(6).trim():n.startsWith("data:")&&(a+=n.slice(5).trim());let s={};if(a)try{s=JSON.parse(a)}catch{s={raw:a}}return{event:t,data:s}}function Q(e,t){switch(e){case"conversation":o.value=t.id,g.value.find(a=>a.id===t.id)||g.value.unshift({id:t.id,title:t.title||"New conversation",updated_at:new Date().toISOString()});break;case"message_start":i.value.push({kind:"message",role:"assistant",id:t.message_id,parts:[]}),c=i.value.length-1;break;case"delta":J(),I(a=>{const s=a.parts[a.parts.length-1];s&&s.type==="text"?a.parts[a.parts.length-1]={...s,text:s.text+t.text}:a.parts.push({type:"text",text:t.text})});break;case"thinking":J(),I(a=>{const s=a.parts.findIndex(n=>n.type==="thinking");s>=0?a.parts[s]={...a.parts[s],text:a.parts[s].text+t.text}:a.parts.unshift({type:"thinking",text:t.text,streaming:!0,startedAt:Date.now()})});break;case"tool_call":i.value.push({kind:"tool",id:t.id,call_id:t.call_id,name:t.name,group:t.group,args:t.args,status:t.requires_approval?"pending_approval":"running",result:null});break;case"tool_result":{for(let a=i.value.length-1;a>=0;a--){const s=i.value[a];if(s.kind==="tool"&&s.id===t.id){i.value[a]={...s,status:t.status,result:t.result};break}}break}case"awaiting_approval":y.value=!0,l.value=!1,c>=0&&I(a=>{const s=a.parts.findIndex(n=>n.type==="thinking");s>=0&&(a.parts[s]={...a.parts[s],streaming:!1})});break;case"message_end":c>=0&&I(a=>{const s=a.parts.findIndex(n=>n.type==="thinking");s>=0&&(a.parts[s]={...a.parts[s],streaming:!1})}),c=-1;break;case"done":l.value=!1;break;case"error":$(t.message||"stream error",t.code),l.value=!1;break}}async function O(e,t){const a={"Content-Type":"application/json"},s=xe();s&&(a["X-Orva-API-Key"]=s);const n=await fetch(e,{method:"POST",credentials:"include",headers:a,body:JSON.stringify(t),signal:d?.signal});if(!n.ok||!n.body)throw new Error(`chat request failed (${n.status})`);const r=n.body.getReader(),p=new TextDecoder;let w="";for(;;){const{done:S,value:he}=await r.read();if(S)break;w+=p.decode(he,{stream:!0});let q;for(;(q=w.indexOf(` `))>=0;){const V=w.slice(0,q);if(w=w.slice(q+2),V.trim()){const{event:me,data:we}=G(V);Q(me,we)}}}}async function B(e){if(!(!e.trim()||l.value)){h.value="",j(),y.value=!1,P={type:"chat",content:e},i.value.push({kind:"message",role:"user",parts:[{type:"text",text:e}]}),l.value=!0,c=-1,d=new AbortController;try{const t={content:e,...T()};o.value&&(t.conversation_id=o.value),await O("/api/v1/ai/chat",t)}catch(t){t.name!=="AbortError"&&$(t.message)}finally{l.value=!1,d=null,await C()}}}async function L(){if(l.value||!o.value)return;const e=i.value;let t=e.length;for(let a=e.length-1;a>=0&&!(e[a].kind==="message"&&e[a].role==="user");a--)t=a;i.value=e.slice(0,t),h.value="",y.value=!1,P={type:"regenerate"},l.value=!0,c=-1,d=new AbortController;try{await O(`/api/v1/ai/conversations/${o.value}/regenerate`,T())}catch(a){a.name!=="AbortError"&&$(a.message)}finally{l.value=!1,d=null,await C()}}async function Z(e,t){if(l.value||!o.value||!t.trim())return;const a=i.value,s=a.findIndex(n=>n.kind==="message"&&n.id===e);if(!(s<0)){i.value=[...a.slice(0,s),{...a[s],parts:[{type:"text",text:t}]}],h.value="",y.value=!1,P={type:"edit",messageId:e,content:t},l.value=!0,c=-1,d=new AbortController;try{await O(`/api/v1/ai/conversations/${o.value}/messages/${e}/edit`,{content:t,...T()})}catch(n){n.name!=="AbortError"&&$(n.message)}finally{l.value=!1,d=null,await C()}}}async function ee(e){if(!o.value||l.value)return;const t=i.value,a=t.findIndex(s=>s.kind==="message"&&s.id===e);if(!(a<0)){i.value=t.slice(0,a);try{await v.delete(`/ai/conversations/${o.value}/messages/${e}`)}catch(s){$(s.message),await C()}}}async function te(){j();const e=P;if(e?.type==="tool")return D(e.rowId,e.approved);if(e?.type==="regenerate")return L();await C();const t=i.value[i.value.length-1];if(t&&t.kind==="message"&&t.role==="user")return L();if(e?.content)return B(e.content)}function R(){d&&d.abort(),l.value=!1}async function D(e,t){if(l.value)return;h.value="",j(),y.value=!1,P={type:"tool",rowId:e,approved:t},l.value=!0,c=-1,d=new AbortController;const a=t?"approve":"reject";try{await O(`/api/v1/ai/tool-calls/${e}/${a}`,{})}catch(s){s.name!=="AbortError"&&$(s.message)}finally{l.value=!1,d=null,await C()}}const ae=e=>D(e,!0),se=e=>D(e,!1);function K(e){const t=[],a={};for(const s of e.tool_calls||[])(a[s.message_id]||=[]).push(s);for(const s of e.messages||[]){const n=ne(s.parts);if(s.role==="user")t.push({kind:"message",role:"user",id:s.id,parts:n});else if(s.role==="assistant"){t.push({kind:"message",role:"assistant",id:s.id,parts:n});for(const r of a[s.id]||[])t.push({kind:"tool",id:r.id,call_id:r.call_id,name:r.tool_name,group:r.tool_group,args:r.args,status:r.status,result:r.result})}}return t}function ne(e){let t=[];try{t=JSON.parse(e||"[]")}catch{t=[]}return t.filter(a=>a.type==="text"||a.type==="thinking")}async function ie(){const{data:e}=await v.get("/ai/conversations");g.value=e.conversations||[]}async function re(e){R(),c=-1;const{data:t}=await v.get(`/ai/conversations/${e}`);o.value=e,i.value=K(t),y.value=!1,h.value=""}function W(){R(),c=-1,o.value=null,i.value=[],y.value=!1,h.value=""}async function le(e){await v.delete(`/ai/conversations/${e}`),g.value=g.value.filter(t=>t.id!==e),o.value===e&&W()}function oe(){const e=i.value;if(!e.length)return;const t=g.value.find(p=>p.id===o.value),a=[`# ${t?.title||"Conversation"}`,""];for(const p of e)if(p.kind==="message"){const w=(p.parts||[]).filter(S=>S.type==="text"&&S.text).map(S=>S.text).join(` diff --git a/backend/internal/server/ui_dist/assets/arrow-left-C4STwFAY.js b/backend/internal/server/ui_dist/assets/arrow-left-DiLFZEkx.js similarity index 60% rename from backend/internal/server/ui_dist/assets/arrow-left-C4STwFAY.js rename to backend/internal/server/ui_dist/assets/arrow-left-DiLFZEkx.js index 304a919..afefe8b 100644 --- a/backend/internal/server/ui_dist/assets/arrow-left-C4STwFAY.js +++ b/backend/internal/server/ui_dist/assets/arrow-left-DiLFZEkx.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const t=e("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);export{t as A}; +import{c as e}from"./index-fIeDYqWy.js";const t=e("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);export{t as A}; diff --git a/backend/internal/server/ui_dist/assets/book-open-CAmAR_fB.js b/backend/internal/server/ui_dist/assets/book-open-HLcwtuYW.js similarity index 76% rename from backend/internal/server/ui_dist/assets/book-open-CAmAR_fB.js rename to backend/internal/server/ui_dist/assets/book-open-HLcwtuYW.js index 3f73673..0396dbf 100644 --- a/backend/internal/server/ui_dist/assets/book-open-CAmAR_fB.js +++ b/backend/internal/server/ui_dist/assets/book-open-HLcwtuYW.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const e=a("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);export{e as B}; +import{c as a}from"./index-fIeDYqWy.js";const e=a("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);export{e as B}; diff --git a/backend/internal/server/ui_dist/assets/check-C4wzjDZN.js b/backend/internal/server/ui_dist/assets/check-C4wzjDZN.js deleted file mode 100644 index 2dd34cf..0000000 --- a/backend/internal/server/ui_dist/assets/check-C4wzjDZN.js +++ /dev/null @@ -1 +0,0 @@ -import{c}from"./index-BMkkwZ9q.js";const o=c("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);export{o as C}; diff --git a/backend/internal/server/ui_dist/assets/check-Cwg1V2MO.js b/backend/internal/server/ui_dist/assets/check-Cwg1V2MO.js new file mode 100644 index 0000000..5ead50f --- /dev/null +++ b/backend/internal/server/ui_dist/assets/check-Cwg1V2MO.js @@ -0,0 +1 @@ +import{c}from"./index-fIeDYqWy.js";const o=c("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);export{o as C}; diff --git a/backend/internal/server/ui_dist/assets/chevron-down-BTZfO5Md.js b/backend/internal/server/ui_dist/assets/chevron-down-BTZfO5Md.js deleted file mode 100644 index 27e2845..0000000 --- a/backend/internal/server/ui_dist/assets/chevron-down-BTZfO5Md.js +++ /dev/null @@ -1 +0,0 @@ -import{c as o}from"./index-BMkkwZ9q.js";const n=o("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);export{n as C}; diff --git a/backend/internal/server/ui_dist/assets/chevron-down-BcMN1rmG.js b/backend/internal/server/ui_dist/assets/chevron-down-BcMN1rmG.js new file mode 100644 index 0000000..6d3a83d --- /dev/null +++ b/backend/internal/server/ui_dist/assets/chevron-down-BcMN1rmG.js @@ -0,0 +1 @@ +import{c as o}from"./index-fIeDYqWy.js";const n=o("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);export{n as C}; diff --git a/backend/internal/server/ui_dist/assets/chevron-right-BrmZtzfn.js b/backend/internal/server/ui_dist/assets/chevron-right-BrmZtzfn.js new file mode 100644 index 0000000..b40cd24 --- /dev/null +++ b/backend/internal/server/ui_dist/assets/chevron-right-BrmZtzfn.js @@ -0,0 +1 @@ +import{c as t}from"./index-fIeDYqWy.js";const h=t("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);export{h as C}; diff --git a/backend/internal/server/ui_dist/assets/chevron-right-OdWgNfOU.js b/backend/internal/server/ui_dist/assets/chevron-right-OdWgNfOU.js deleted file mode 100644 index 1153ae6..0000000 --- a/backend/internal/server/ui_dist/assets/chevron-right-OdWgNfOU.js +++ /dev/null @@ -1 +0,0 @@ -import{c as t}from"./index-BMkkwZ9q.js";const h=t("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);export{h as C}; diff --git a/backend/internal/server/ui_dist/assets/circle-alert-DJMgVejj.js b/backend/internal/server/ui_dist/assets/circle-alert-C9zmFbXU.js similarity index 74% rename from backend/internal/server/ui_dist/assets/circle-alert-DJMgVejj.js rename to backend/internal/server/ui_dist/assets/circle-alert-C9zmFbXU.js index 12682bf..5b93d40 100644 --- a/backend/internal/server/ui_dist/assets/circle-alert-DJMgVejj.js +++ b/backend/internal/server/ui_dist/assets/circle-alert-C9zmFbXU.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const r=e("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);export{r as C}; +import{c as e}from"./index-fIeDYqWy.js";const r=e("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);export{r as C}; diff --git a/backend/internal/server/ui_dist/assets/circle-DJWJGpv0.js b/backend/internal/server/ui_dist/assets/circle-u9aj3idX.js similarity index 76% rename from backend/internal/server/ui_dist/assets/circle-DJWJGpv0.js rename to backend/internal/server/ui_dist/assets/circle-u9aj3idX.js index fea70e6..ed72745 100644 --- a/backend/internal/server/ui_dist/assets/circle-DJWJGpv0.js +++ b/backend/internal/server/ui_dist/assets/circle-u9aj3idX.js @@ -1 +1 @@ -import{c}from"./index-BMkkwZ9q.js";const r=c("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);const a=c("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);export{a as C,r as a}; +import{c}from"./index-fIeDYqWy.js";const r=c("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);const a=c("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);export{a as C,r as a}; diff --git a/backend/internal/server/ui_dist/assets/clock-BWp9w4xs.js b/backend/internal/server/ui_dist/assets/clock-C4Bm6ngE.js similarity index 77% rename from backend/internal/server/ui_dist/assets/clock-BWp9w4xs.js rename to backend/internal/server/ui_dist/assets/clock-C4Bm6ngE.js index e1d891c..0e7874b 100644 --- a/backend/internal/server/ui_dist/assets/clock-BWp9w4xs.js +++ b/backend/internal/server/ui_dist/assets/clock-C4Bm6ngE.js @@ -1 +1 @@ -import{c}from"./index-BMkkwZ9q.js";const r=c("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);const a=c("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);export{r as C,a}; +import{c}from"./index-fIeDYqWy.js";const r=c("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);const a=c("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);export{r as C,a}; diff --git a/backend/internal/server/ui_dist/assets/copy-CTb6u-fx.js b/backend/internal/server/ui_dist/assets/copy-DJiur09W.js similarity index 71% rename from backend/internal/server/ui_dist/assets/copy-CTb6u-fx.js rename to backend/internal/server/ui_dist/assets/copy-DJiur09W.js index 8c9cf85..97e8cd7 100644 --- a/backend/internal/server/ui_dist/assets/copy-CTb6u-fx.js +++ b/backend/internal/server/ui_dist/assets/copy-DJiur09W.js @@ -1 +1 @@ -import{c}from"./index-BMkkwZ9q.js";const t=c("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);export{t as C}; +import{c}from"./index-fIeDYqWy.js";const t=c("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);export{t as C}; diff --git a/backend/internal/server/ui_dist/assets/flag-BkRqUrT5.js b/backend/internal/server/ui_dist/assets/flag-CL7jr_Ab.js similarity index 74% rename from backend/internal/server/ui_dist/assets/flag-BkRqUrT5.js rename to backend/internal/server/ui_dist/assets/flag-CL7jr_Ab.js index a3f3fba..647fd2a 100644 --- a/backend/internal/server/ui_dist/assets/flag-BkRqUrT5.js +++ b/backend/internal/server/ui_dist/assets/flag-CL7jr_Ab.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const e=a("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]);export{e as F}; +import{c as a}from"./index-fIeDYqWy.js";const e=a("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]);export{e as F}; diff --git a/backend/internal/server/ui_dist/assets/git-compare-omnJl6y2.js b/backend/internal/server/ui_dist/assets/git-compare-5RUagJlb.js similarity index 86% rename from backend/internal/server/ui_dist/assets/git-compare-omnJl6y2.js rename to backend/internal/server/ui_dist/assets/git-compare-5RUagJlb.js index 6781a2c..b6630d2 100644 --- a/backend/internal/server/ui_dist/assets/git-compare-omnJl6y2.js +++ b/backend/internal/server/ui_dist/assets/git-compare-5RUagJlb.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const e=a("cloud-upload",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]]);const p=a("git-compare",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9",key:"19pyzm"}]]);export{e as C,p as G}; +import{c as a}from"./index-fIeDYqWy.js";const e=a("cloud-upload",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]]);const p=a("git-compare",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9",key:"19pyzm"}]]);export{e as C,p as G}; diff --git a/backend/internal/server/ui_dist/assets/globe-CR2M7Azm.js b/backend/internal/server/ui_dist/assets/globe-DtEgS3Yf.js similarity index 73% rename from backend/internal/server/ui_dist/assets/globe-CR2M7Azm.js rename to backend/internal/server/ui_dist/assets/globe-DtEgS3Yf.js index 6745c5d..daac586 100644 --- a/backend/internal/server/ui_dist/assets/globe-CR2M7Azm.js +++ b/backend/internal/server/ui_dist/assets/globe-DtEgS3Yf.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const o=e("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);export{o as G}; +import{c as e}from"./index-fIeDYqWy.js";const o=e("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);export{o as G}; diff --git a/backend/internal/server/ui_dist/assets/index-BMkkwZ9q.js b/backend/internal/server/ui_dist/assets/index-BMkkwZ9q.js deleted file mode 100644 index 7cb455d..0000000 --- a/backend/internal/server/ui_dist/assets/index-BMkkwZ9q.js +++ /dev/null @@ -1,10 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-YGsZM8PV.js","assets/circle-alert-DJMgVejj.js","assets/Onboarding-DOb5mnY3.js","assets/copy-CTb6u-fx.js","assets/Dashboard-DdCcITCh.js","assets/format-CsU4_SPu.js","assets/AI-CRINc2rq.js","assets/Drawer-C3AFLOZb.js","assets/Drawer-MYoSlZfw.css","assets/ai-DmyZUAtW.js","assets/pencil-DTkm5-NQ.js","assets/trash-2-BXf2uqQH.js","assets/github-dark-BrynTfs3.js","assets/github-dark-Dfs9RUU9.css","assets/clipboard-CmSw2rR-.js","assets/check-C4wzjDZN.js","assets/chevron-down-BTZfO5Md.js","assets/rotate-ccw-CsgWy1Bs.js","assets/zap-DvhWYa2n.js","assets/sparkles-BVQ_t_Q_.js","assets/AI-BpuQxF1y.css","assets/FunctionsList-ClWQkTrs.js","assets/IconButton-BgeMzwXv.js","assets/refresh-cw-C7sR7ShF.js","assets/globe-CR2M7Azm.js","assets/lock-Dpr2FIZ9.js","assets/Editor-CGt5HsZM.js","assets/Input-i1hDoPmt.js","assets/Modal-jEhKmxZK.js","assets/aiPrompts-DGZ6L7ag.js","assets/rollbackDiff-Cvt2Ss82.js","assets/settings-2-CcqGdzLw.js","assets/variable-b2EnW52t.js","assets/key-round-BccKiRw7.js","assets/book-open-CAmAR_fB.js","assets/play-CPjfKIOc.js","assets/git-compare-omnJl6y2.js","assets/shield-check-sW6QCkG0.js","assets/terminal-DAVNGL0P.js","assets/Editor-Ci5_23J6.css","assets/Deployments-HGMJdPkO.js","assets/StatusBadge-Cj_PlPFZ.js","assets/circle-DJWJGpv0.js","assets/clock-BWp9w4xs.js","assets/FunctionDiff-B5S0Jfo_.js","assets/index-BOWx3BJu.js","assets/FunctionDiff-CrhTClO7.css","assets/KVStore-BJOrSxjD.js","assets/InboundWebhooks-CeKosJjA.js","assets/CronJobs-C1Lm7OXf.js","assets/square-pen-CsqFW8Ka.js","assets/Jobs-BuEpd4mz.js","assets/Activity-CUYXvjyS.js","assets/chevron-right-OdWgNfOU.js","assets/InvocationsLog-TKQA0zvQ.js","assets/Traces-Cr9wsEkz.js","assets/flag-BkRqUrT5.js","assets/TraceDetail-DlY0pIfy.js","assets/arrow-left-C4STwFAY.js","assets/ApiKeys-D_0i_tEn.js","assets/time-Cfu9zNbw.js","assets/Channels-BVCLEepx.js","assets/Webhooks-DwuKsY7O.js","assets/Firewall-BXu8MFSv.js","assets/Firewall-C6Wui_1_.css","assets/Settings-DhV460vi.js","assets/Docs-D8EdWzOh.js","assets/Docs-BfWixbII.css","assets/NotFound-BmRAxlxU.js"])))=>i.map(i=>d[i]); -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();function uo(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const me={},_n=[],Rt=()=>{},Sl=()=>!1,Js=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Xs=e=>e.startsWith("onUpdate:"),Pe=Object.assign,fo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Gc=Object.prototype.hasOwnProperty,de=(e,t)=>Gc.call(e,t),q=Array.isArray,wn=e=>Ln(e)==="[object Map]",Nn=e=>Ln(e)==="[object Set]",Wo=e=>Ln(e)==="[object Date]",Jc=e=>Ln(e)==="[object RegExp]",X=e=>typeof e=="function",ve=e=>typeof e=="string",Ye=e=>typeof e=="symbol",ue=e=>e!==null&&typeof e=="object",Rl=e=>(ue(e)||X(e))&&X(e.then)&&X(e.catch),Al=Object.prototype.toString,Ln=e=>Al.call(e),Xc=e=>Ln(e).slice(8,-1),Cl=e=>Ln(e)==="[object Object]",Qs=e=>ve(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Gn=uo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ys=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Qc=/-\w/g,Ke=Ys(e=>e.replace(Qc,t=>t.slice(1).toUpperCase())),Yc=/\B([A-Z])/g,Yt=Ys(e=>e.replace(Yc,"-$1").toLowerCase()),Zs=Ys(e=>e.charAt(0).toUpperCase()+e.slice(1)),vr=Ys(e=>e?`on${Zs(e)}`:""),St=(e,t)=>!Object.is(e,t),En=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},er=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Zc=e=>{const t=ve(e)?Number(e):NaN;return isNaN(t)?e:t};let zo;const tr=()=>zo||(zo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ho(e){if(q(e)){const t={};for(let n=0;n{if(n){const s=n.split(tu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Dt(e){let t="";if(ve(e))t=e;else if(q(e))for(let n=0;nXt(n,t))}const kl=e=>!!(e&&e.__v_isRef===!0),rt=e=>ve(e)?e:e==null?"":q(e)||ue(e)&&(e.toString===Al||!X(e.toString))?kl(e)?rt(e.value):JSON.stringify(e,Pl,2):String(e),Pl=(e,t)=>kl(t)?Pl(e,t.value):wn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[_r(s,o)+" =>"]=r,n),{})}:Nn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>_r(n))}:Ye(t)?_r(t):ue(t)&&!q(t)&&!Cl(t)?String(t):t,_r=(e,t="")=>{var n;return Ye(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Ue;class Il{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ue,!t&&Ue&&(this.index=(Ue.scopes||(Ue.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Ue=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Xn){let t=Xn;for(Xn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Jn;){let t=Jn;for(Jn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ul(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function jl(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),yo(s),au(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Br(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Bl(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Bl(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===ns)||(e.globalVersion=ns,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Br(e))))return;e.flags|=2;const t=e.dep,n=ye,s=at;ye=e,at=!0;try{Ul(e);const r=e.fn(e._value);(t.version===0||St(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ye=n,at=s,jl(e),e.flags&=-3}}function yo(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)yo(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function au(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let at=!0;const $l=[];function Ut(){$l.push(at),at=!1}function jt(){const e=$l.pop();at=e===void 0?!0:e}function Go(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ye;ye=void 0;try{t()}finally{ye=n}}}let ns=0;class cu{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 bo{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(!ye||!at||ye===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ye)n=this.activeLink=new cu(ye,this),ye.deps?(n.prevDep=ye.depsTail,ye.depsTail.nextDep=n,ye.depsTail=n):ye.deps=ye.depsTail=n,Vl(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ye.depsTail,n.nextDep=void 0,ye.depsTail.nextDep=n,ye.depsTail=n,ye.deps===n&&(ye.deps=s)}return n}trigger(t){this.version++,ns++,this.notify(t)}notify(t){mo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{go()}}}function Vl(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Vl(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Ms=new WeakMap,un=Symbol(""),$r=Symbol(""),ss=Symbol("");function je(e,t,n){if(at&&ye){let s=Ms.get(e);s||Ms.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new bo),r.map=s,r.key=n),r.track()}}function Nt(e,t,n,s,r,o){const i=Ms.get(e);if(!i){ns++;return}const l=a=>{a&&a.trigger()};if(mo(),t==="clear")i.forEach(l);else{const a=q(e),u=a&&Qs(n);if(a&&n==="length"){const c=Number(s);i.forEach((f,p)=>{(p==="length"||p===ss||!Ye(p)&&p>=c)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),u&&l(i.get(ss)),t){case"add":a?u&&l(i.get("length")):(l(i.get(un)),wn(e)&&l(i.get($r)));break;case"delete":a||(l(i.get(un)),wn(e)&&l(i.get($r)));break;case"set":wn(e)&&l(i.get(un));break}}go()}function uu(e,t){const n=Ms.get(e);return n&&n.get(t)}function pn(e){const t=le(e);return t===e?t:(je(t,"iterate",ss),Qe(e)?t:t.map(ut))}function nr(e){return je(e=le(e),"iterate",ss),e}function Et(e,t){return Bt(e)?Sn(Ft(e)?ut(t):t):ut(t)}const fu={__proto__:null,[Symbol.iterator](){return Er(this,Symbol.iterator,e=>Et(this,e))},concat(...e){return pn(this).concat(...e.map(t=>q(t)?pn(t):t))},entries(){return Er(this,"entries",e=>(e[1]=Et(this,e[1]),e))},every(e,t){return Tt(this,"every",e,t,void 0,arguments)},filter(e,t){return Tt(this,"filter",e,t,n=>n.map(s=>Et(this,s)),arguments)},find(e,t){return Tt(this,"find",e,t,n=>Et(this,n),arguments)},findIndex(e,t){return Tt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Tt(this,"findLast",e,t,n=>Et(this,n),arguments)},findLastIndex(e,t){return Tt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Tt(this,"forEach",e,t,void 0,arguments)},includes(...e){return xr(this,"includes",e)},indexOf(...e){return xr(this,"indexOf",e)},join(e){return pn(this).join(e)},lastIndexOf(...e){return xr(this,"lastIndexOf",e)},map(e,t){return Tt(this,"map",e,t,void 0,arguments)},pop(){return Un(this,"pop")},push(...e){return Un(this,"push",e)},reduce(e,...t){return Jo(this,"reduce",e,t)},reduceRight(e,...t){return Jo(this,"reduceRight",e,t)},shift(){return Un(this,"shift")},some(e,t){return Tt(this,"some",e,t,void 0,arguments)},splice(...e){return Un(this,"splice",e)},toReversed(){return pn(this).toReversed()},toSorted(e){return pn(this).toSorted(e)},toSpliced(...e){return pn(this).toSpliced(...e)},unshift(...e){return Un(this,"unshift",e)},values(){return Er(this,"values",e=>Et(this,e))}};function Er(e,t,n){const s=nr(e),r=s[t]();return s!==e&&!Qe(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const du=Array.prototype;function Tt(e,t,n,s,r,o){const i=nr(e),l=i!==e&&!Qe(e),a=i[t];if(a!==du[t]){const f=a.apply(e,o);return l?ut(f):f}let u=n;i!==e&&(l?u=function(f,p){return n.call(this,Et(e,f),p,e)}:n.length>2&&(u=function(f,p){return n.call(this,f,p,e)}));const c=a.call(i,u,s);return l&&r?r(c):c}function Jo(e,t,n,s){const r=nr(e),o=r!==e&&!Qe(e);let i=n,l=!1;r!==e&&(o?(l=s.length===0,i=function(u,c,f){return l&&(l=!1,u=Et(e,u)),n.call(this,u,Et(e,c),f,e)}):n.length>3&&(i=function(u,c,f){return n.call(this,u,c,f,e)}));const a=r[t](i,...s);return l?Et(e,a):a}function xr(e,t,n){const s=le(e);je(s,"iterate",ss);const r=s[t](...n);return(r===-1||r===!1)&&sr(n[0])?(n[0]=le(n[0]),s[t](...n)):r}function Un(e,t,n=[]){Ut(),mo();const s=le(e)[t].apply(e,n);return go(),jt(),s}const hu=uo("__proto__,__v_isRef,__isVue"),Hl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ye));function pu(e){Ye(e)||(e=String(e));const t=le(this);return je(t,"has",e),t.hasOwnProperty(e)}class ql{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?Su:Gl:o?zl:Wl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=q(t);if(!r){let a;if(i&&(a=fu[n]))return a;if(n==="hasOwnProperty")return pu}const l=Reflect.get(t,n,we(t)?t:s);if((Ye(n)?Hl.has(n):hu(n))||(r||je(t,"get",n),o))return l;if(we(l)){const a=i&&Qs(n)?l:l.value;return r&&ue(a)?rs(a):a}return ue(l)?r?rs(l):cs(l):l}}class Kl extends ql{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=q(t)&&Qs(n);if(!this._isShallow){const u=Bt(o);if(!Qe(s)&&!Bt(s)&&(o=le(o),s=le(s)),!i&&we(o)&&!we(s))return u||(o.value=s),!0}const l=i?Number(n)e,_s=e=>Reflect.getPrototypeOf(e);function vu(e,t,n){return function(...s){const r=this.__v_raw,o=le(r),i=wn(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,u=r[e](...s),c=n?Vr:t?Sn:ut;return!t&&je(o,"iterate",a?$r:un),Pe(Object.create(u),{next(){const{value:f,done:p}=u.next();return p?{value:f,done:p}:{value:l?[c(f[0]),c(f[1])]:c(f),done:p}}})}}function ws(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function _u(e,t){const n={get(r){const o=this.__v_raw,i=le(o),l=le(r);e||(St(r,l)&&je(i,"get",r),je(i,"get",l));const{has:a}=_s(i),u=t?Vr:e?Sn:ut;if(a.call(i,r))return u(o.get(r));if(a.call(i,l))return u(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&je(le(r),"iterate",un),r.size},has(r){const o=this.__v_raw,i=le(o),l=le(r);return e||(St(r,l)&&je(i,"has",r),je(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=le(l),u=t?Vr:e?Sn:ut;return!e&&je(a,"iterate",un),l.forEach((c,f)=>r.call(o,u(c),u(f),i))}};return Pe(n,e?{add:ws("add"),set:ws("set"),delete:ws("delete"),clear:ws("clear")}:{add(r){const o=le(this),i=_s(o),l=le(r),a=!t&&!Qe(r)&&!Bt(r)?l:r;return i.has.call(o,a)||St(r,a)&&i.has.call(o,r)||St(l,a)&&i.has.call(o,l)||(o.add(a),Nt(o,"add",a,a)),this},set(r,o){!t&&!Qe(o)&&!Bt(o)&&(o=le(o));const i=le(this),{has:l,get:a}=_s(i);let u=l.call(i,r);u||(r=le(r),u=l.call(i,r));const c=a.call(i,r);return i.set(r,o),u?St(o,c)&&Nt(i,"set",r,o):Nt(i,"add",r,o),this},delete(r){const o=le(this),{has:i,get:l}=_s(o);let a=i.call(o,r);a||(r=le(r),a=i.call(o,r)),l&&l.call(o,r);const u=o.delete(r);return a&&Nt(o,"delete",r,void 0),u},clear(){const r=le(this),o=r.size!==0,i=r.clear();return o&&Nt(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=vu(r,e,t)}),n}function vo(e,t){const n=_u(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(de(n,r)&&r in s?n:s,r,o)}const wu={get:vo(!1,!1)},Eu={get:vo(!1,!0)},xu={get:vo(!0,!1)};const Wl=new WeakMap,zl=new WeakMap,Gl=new WeakMap,Su=new WeakMap;function Ru(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Au(e){return e.__v_skip||!Object.isExtensible(e)?0:Ru(Xc(e))}function cs(e){return Bt(e)?e:_o(e,!1,gu,wu,Wl)}function Jl(e){return _o(e,!1,bu,Eu,zl)}function rs(e){return _o(e,!0,yu,xu,Gl)}function _o(e,t,n,s,r){if(!ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=Au(e);if(o===0)return e;const i=r.get(e);if(i)return i;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function Ft(e){return Bt(e)?Ft(e.__v_raw):!!(e&&e.__v_isReactive)}function Bt(e){return!!(e&&e.__v_isReadonly)}function Qe(e){return!!(e&&e.__v_isShallow)}function sr(e){return e?!!e.__v_raw:!1}function le(e){const t=e&&e.__v_raw;return t?le(t):e}function wo(e){return!de(e,"__v_skip")&&Object.isExtensible(e)&&Tl(e,"__v_skip",!0),e}const ut=e=>ue(e)?cs(e):e,Sn=e=>ue(e)?rs(e):e;function we(e){return e?e.__v_isRef===!0:!1}function ee(e){return Xl(e,!1)}function Cu(e){return Xl(e,!0)}function Xl(e,t){return we(e)?e:new Tu(e,t)}class Tu{constructor(t,n){this.dep=new bo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:le(t),this._value=n?t:ut(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Qe(t)||Bt(t);t=s?t:le(t),St(t,n)&&(this._rawValue=t,this._value=s?t:ut(t),this.dep.trigger())}}function oe(e){return we(e)?e.value:e}const Ou={get:(e,t,n)=>t==="__v_raw"?e:oe(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return we(r)&&!we(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Ql(e){return Ft(e)?e:new Proxy(e,Ou)}function ku(e){const t=q(e)?new Array(e.length):{};for(const n in e)t[n]=Yl(e,n);return t}class Pu{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=Ye(n)?n:String(n),this._raw=le(t);let r=!0,o=t;if(!q(t)||Ye(this._key)||!Qs(this._key))do r=!sr(o)||Qe(o);while(r&&(o=o.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=oe(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&we(this._raw[this._key])){const n=this._object[this._key];if(we(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return uu(this._raw,this._key)}}class Iu{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 Pg(e,t,n){return we(e)?e:X(e)?new Iu(e):ue(e)&&arguments.length>1?Yl(e,t,n):ee(e)}function Yl(e,t,n){return new Pu(e,t,n)}class Nu{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new bo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ns-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ye!==this)return Fl(this,!0),!0}get value(){const t=this.dep.track();return Bl(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Lu(e,t,n=!1){let s,r;return X(e)?s=e:(s=e.get,r=e.set),new Nu(s,r,n)}const Es={},Ds=new WeakMap;let on;function Mu(e,t=!1,n=on){if(n){let s=Ds.get(n);s||Ds.set(n,s=[]),s.push(e)}}function Du(e,t,n=me){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=n,u=E=>r?E:Qe(E)||r===!1||r===0?Lt(E,1):Lt(E);let c,f,p,m,d=!1,g=!1;if(we(e)?(f=()=>e.value,d=Qe(e)):Ft(e)?(f=()=>u(e),d=!0):q(e)?(g=!0,d=e.some(E=>Ft(E)||Qe(E)),f=()=>e.map(E=>{if(we(E))return E.value;if(Ft(E))return u(E);if(X(E))return a?a(E,2):E()})):X(e)?t?f=a?()=>a(e,2):e:f=()=>{if(p){Ut();try{p()}finally{jt()}}const E=on;on=c;try{return a?a(e,3,[m]):e(m)}finally{on=E}}:f=Rt,t&&r){const E=f,k=r===!0?1/0:r;f=()=>Lt(E(),k)}const b=Ll(),T=()=>{c.stop(),b&&b.active&&fo(b.effects,c)};if(o&&t){const E=t;t=(...k)=>{E(...k),T()}}let _=g?new Array(e.length).fill(Es):Es;const v=E=>{if(!(!(c.flags&1)||!c.dirty&&!E))if(t){const k=c.run();if(r||d||(g?k.some((N,D)=>St(N,_[D])):St(k,_))){p&&p();const N=on;on=c;try{const D=[k,_===Es?void 0:g&&_[0]===Es?[]:_,m];_=k,a?a(t,3,D):t(...D)}finally{on=N}}}else c.run()};return l&&l(v),c=new Ml(f),c.scheduler=i?()=>i(v,!1):v,m=E=>Mu(E,!1,c),p=c.onStop=()=>{const E=Ds.get(c);if(E){if(a)a(E,4);else for(const k of E)k();Ds.delete(c)}},t?s?v(!0):_=c.run():i?i(v.bind(null,!0),!0):c.run(),T.pause=c.pause.bind(c),T.resume=c.resume.bind(c),T.stop=T,T}function Lt(e,t=1/0,n){if(t<=0||!ue(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,we(e))Lt(e.value,t,n);else if(q(e))for(let s=0;s{Lt(s,t,n)});else if(Cl(e)){for(const s in e)Lt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Lt(e[s],t,n)}return e}function us(e,t,n,s){try{return s?e(...s):e()}catch(r){fs(r,t,n)}}function ft(e,t,n,s){if(X(e)){const r=us(e,t,n,s);return r&&Rl(r)&&r.catch(o=>{fs(o,t,n)}),r}if(q(e)){const r=[];for(let o=0;o>>1,r=He[s],o=os(r);o=os(n)?He.push(e):He.splice(Uu(t),0,e),e.flags|=1,ea()}}function ea(){Fs||(Fs=Zl.then(na))}function ju(e){q(e)?xn.push(...e):Wt&&e.id===-1?Wt.splice(gn+1,0,e):e.flags&1||(xn.push(e),e.flags|=1),ea()}function Xo(e,t,n=_t+1){for(;nos(n)-os(s));if(xn.length=0,Wt){Wt.push(...t);return}for(Wt=t,gn=0;gne.id==null?e.flags&2?-1:1/0:e.id;function na(e){try{for(_t=0;_t{s._d&&Hs(-1);const o=Us(t);let i;try{i=e(...r)}finally{Us(o),s._d&&Hs(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function ra(e,t){if(Fe===null)return e;const n=ar(Fe),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&X(t)?t.call(s&&s.proxy):t}}function Bu(){return!!(lr()||fn)}const $u=Symbol.for("v-scx"),Vu=()=>ot($u);function ct(e,t,n){return oa(e,t,n)}function oa(e,t,n=me){const{immediate:s,deep:r,flush:o,once:i}=n,l=Pe({},n),a=t&&s||!t&&o!=="post";let u;if(Cn){if(o==="sync"){const m=Vu();u=m.__watcherHandles||(m.__watcherHandles=[])}else if(!a){const m=()=>{};return m.stop=Rt,m.resume=Rt,m.pause=Rt,m}}const c=De;l.call=(m,d,g)=>ft(m,c,d,g);let f=!1;o==="post"?l.scheduler=m=>{Oe(m,c&&c.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(m,d)=>{d?m():Eo(m)}),l.augmentJob=m=>{t&&(m.flags|=4),f&&(m.flags|=2,c&&(m.id=c.uid,m.i=c))};const p=Du(e,t,l);return Cn&&(u?u.push(p):a&&p()),p}function Hu(e,t,n){const s=this.proxy,r=ve(e)?e.includes(".")?ia(s,e):()=>s[e]:e.bind(s,s);let o;X(t)?o=t:(o=t.handler,n=t);const i=ps(this),l=oa(r,o.bind(s),n);return i(),l}function ia(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,ln=e=>e&&(e.disabled||e.disabled===""),qu=e=>e&&(e.defer||e.defer===""),Qo=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Yo=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Hr=(e,t)=>{const n=e&&e.to;return ve(n)?t?t(n):null:n},Ku={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,a,u){const{mc:c,pc:f,pbc:p,o:{insert:m,querySelector:d,createText:g,createComment:b}}=u,T=ln(t.props);let{dynamicChildren:_}=t;const v=(N,D,B)=>{N.shapeFlag&16&&c(N.children,D,B,r,o,i,l,a)},E=(N=t)=>{const D=ln(N.props),B=N.target=Hr(N.props,d),P=qr(B,N,g,m);B&&(i!=="svg"&&Qo(B)?i="svg":i!=="mathml"&&Yo(B)&&(i="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(B),D||(v(N,B,P),Kn(N,!1)))},k=N=>{const D=()=>{en.get(N)===D&&(en.delete(N),ln(N.props)&&(v(N,n,N.anchor),Kn(N,!0)),E(N))};en.set(N,D),Oe(D,o)};if(e==null){const N=t.el=g(""),D=t.anchor=g("");if(m(N,n,s),m(D,n,s),qu(t.props)||o&&o.pendingBranch){k(t);return}T&&(v(t,n,D),Kn(t,!0)),E()}else{t.el=e.el;const N=t.anchor=e.anchor,D=en.get(e);if(D){D.flags|=8,en.delete(e),k(t);return}t.targetStart=e.targetStart;const B=t.target=e.target,P=t.targetAnchor=e.targetAnchor,H=ln(e.props),Y=H?n:B,L=H?N:P;if(i==="svg"||Qo(B)?i="svg":(i==="mathml"||Yo(B))&&(i="mathml"),_?(p(e.dynamicChildren,_,Y,r,o,i,l),Po(e,t,!0)):a||f(e,t,Y,L,r,o,i,l,!1),T)H?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):xs(t,n,N,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Z=t.target=Hr(t.props,d);Z&&xs(t,Z,null,u,0)}else H&&xs(t,B,P,u,1);Kn(t,T)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:a,targetStart:u,targetAnchor:c,target:f,props:p}=e;let m=o||!ln(p);const d=en.get(e);if(d&&(d.flags|=8,en.delete(e),m=!1),f&&(r(u),r(c)),o&&r(a),i&16)for(let g=0;g{e.isMounted=!0}),Ao(()=>{e.isUnmounting=!0}),e}const tt=[Function,Array],ca={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tt,onEnter:tt,onAfterEnter:tt,onEnterCancelled:tt,onBeforeLeave:tt,onLeave:tt,onAfterLeave:tt,onLeaveCancelled:tt,onBeforeAppear:tt,onAppear:tt,onAfterAppear:tt,onAppearCancelled:tt},ua=e=>{const t=e.subTree;return t.component?ua(t.component):t},Gu={name:"BaseTransition",props:ca,setup(e,{slots:t}){const n=lr(),s=zu();return()=>{const r=t.default&&ha(t.default(),!0);if(!r||!r.length)return;const o=fa(r),i=le(e),{mode:l}=i;if(s.isLeaving)return Sr(o);const a=Zo(o);if(!a)return Sr(o);let u=Kr(a,i,s,n,f=>u=f);a.type!==Me&&Rn(a,u);let c=n.subTree&&Zo(n.subTree);if(c&&c.type!==Me&&!Gt(c,a)&&ua(n).type!==Me){let f=Kr(c,i,s,n);if(Rn(c,f),l==="out-in"&&a.type!==Me)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,c=void 0},Sr(o);l==="in-out"&&a.type!==Me?f.delayLeave=(p,m,d)=>{const g=da(s,c);g[String(c.key)]=c,p[wt]=()=>{m(),p[wt]=void 0,delete u.delayedLeave,c=void 0},u.delayedLeave=()=>{d(),delete u.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return o}}};function fa(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Me){t=n;break}}return t}const Ju=Gu;function da(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Kr(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:u,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:p,onLeave:m,onAfterLeave:d,onLeaveCancelled:g,onBeforeAppear:b,onAppear:T,onAfterAppear:_,onAppearCancelled:v}=t,E=String(e.key),k=da(n,e),N=(P,H)=>{P&&ft(P,s,9,H)},D=(P,H)=>{const Y=H[1];N(P,H),q(P)?P.every(L=>L.length<=1)&&Y():P.length<=1&&Y()},B={mode:i,persisted:l,beforeEnter(P){let H=a;if(!n.isMounted)if(o)H=b||a;else return;P[wt]&&P[wt](!0);const Y=k[E];Y&&Gt(e,Y)&&Y.el[wt]&&Y.el[wt](),N(H,[P])},enter(P){if(k[E]===e)return;let H=u,Y=c,L=f;if(!n.isMounted)if(o)H=T||u,Y=_||c,L=v||f;else return;let Z=!1;P[jn]=Ie=>{Z||(Z=!0,Ie?N(L,[P]):N(Y,[P]),B.delayedLeave&&B.delayedLeave(),P[jn]=void 0)};const he=P[jn].bind(null,!1);H?D(H,[P,he]):he()},leave(P,H){const Y=String(e.key);if(P[jn]&&P[jn](!0),n.isUnmounting)return H();N(p,[P]);let L=!1;P[wt]=he=>{L||(L=!0,H(),he?N(g,[P]):N(d,[P]),P[wt]=void 0,k[Y]===e&&delete k[Y])};const Z=P[wt].bind(null,!1);k[Y]=e,m?D(m,[P,Z]):Z()},clone(P){const H=Kr(P,t,n,s,r);return r&&r(H),H}};return B}function Sr(e){if(ds(e))return e=$t(e),e.children=null,e}function Zo(e){if(!ds(e))return aa(e.type)&&e.children?fa(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&&X(n.default))return n.default()}}function Rn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Rn(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 ha(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oQn(g,t&&(q(t)?t[b]:t),n,s,r));return}if(Jt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Qn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?ar(s.component):s.el,i=r?null:o,{i:l,r:a}=e,u=t&&t.r,c=l.refs===me?l.refs={}:l.refs,f=l.setupState,p=le(f),m=f===me?Sl:g=>ei(c,g)?!1:de(p,g),d=(g,b)=>!(b&&ei(c,b));if(u!=null&&u!==a){if(ti(t),ve(u))c[u]=null,m(u)&&(f[u]=null);else if(we(u)){const g=t;d(u,g.k)&&(u.value=null),g.k&&(c[g.k]=null)}}if(X(a))us(a,l,12,[i,c]);else{const g=ve(a),b=we(a);if(g||b){const T=()=>{if(e.f){const _=g?m(a)?f[a]:c[a]:d()||!e.k?a.value:c[e.k];if(r)q(_)&&fo(_,o);else if(q(_))_.includes(o)||_.push(o);else if(g)c[a]=[o],m(a)&&(f[a]=c[a]);else{const v=[o];d(a,e.k)&&(a.value=v),e.k&&(c[e.k]=v)}}else g?(c[a]=i,m(a)&&(f[a]=i)):b&&(d(a,e.k)&&(a.value=i),e.k&&(c[e.k]=i))};if(i){const _=()=>{T(),js.delete(e)};_.id=-1,js.set(e,_),Oe(_,n)}else ti(e),T()}}}function ti(e){const t=js.get(e);t&&(t.flags|=8,js.delete(e))}const ni=e=>e.nodeType===8;tr().requestIdleCallback;tr().cancelIdleCallback;function Xu(e,t){if(ni(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(ni(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const Jt=e=>!!e.type.__asyncLoader;function Ig(e){X(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:o,timeout:i,suspensible:l=!0,onError:a}=e;let u=null,c,f=0;const p=()=>(f++,u=null,m()),m=()=>{let d;return u||(d=u=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),a)return new Promise((b,T)=>{a(g,()=>b(p()),()=>T(g),f+1)});throw g}).then(g=>d!==u&&u?u:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),c=g,g)))};return So({name:"AsyncComponentWrapper",__asyncLoader:m,__asyncHydrate(d,g,b){let T=!1;(g.bu||(g.bu=[])).push(()=>T=!0);const _=()=>{T||b()},v=o?()=>{const E=o(_,k=>Xu(d,k));E&&(g.bum||(g.bum=[])).push(E)}:_;c?v():m().then(()=>!g.isUnmounted&&v())},get __asyncResolved(){return c},setup(){const d=De;if(Ro(d),c)return()=>Ss(c,d);const g=v=>{u=null,fs(v,d,13,!s)};if(l&&d.suspense||Cn)return m().then(v=>()=>Ss(v,d)).catch(v=>(g(v),()=>s?ae(s,{error:v}):null));const b=ee(!1),T=ee(),_=ee(!!r);return r&&setTimeout(()=>{_.value=!1},r),i!=null&&setTimeout(()=>{if(!b.value&&!T.value){const v=new Error(`Async component timed out after ${i}ms.`);g(v),T.value=v}},i),m().then(()=>{b.value=!0,d.parent&&ds(d.parent.vnode)&&d.parent.update()}).catch(v=>{g(v),T.value=v}),()=>{if(b.value&&c)return Ss(c,d);if(T.value&&s)return ae(s,{error:T.value});if(n&&!_.value)return Ss(n,d)}}})}function Ss(e,t){const{ref:n,props:s,children:r,ce:o}=t.vnode,i=ae(e,s,r);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const ds=e=>e.type.__isKeepAlive,Qu={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=lr(),s=n.ctx;if(!s.renderer)return()=>{const _=t.default&&t.default();return _&&_.length===1?_[0]:_};const r=new Map,o=new Set;let i=null;const l=n.suspense,{renderer:{p:a,m:u,um:c,o:{createElement:f}}}=s,p=f("div");s.activate=(_,v,E,k,N)=>{const D=_.component;u(_,v,E,0,l),a(D.vnode,_,v,E,D,l,k,_.slotScopeIds,N),Oe(()=>{D.isDeactivated=!1,D.a&&En(D.a);const B=_.props&&_.props.onVnodeMounted;B&&st(B,D.parent,_)},l)},s.deactivate=_=>{const v=_.component;$s(v.m),$s(v.a),u(_,p,null,1,l),Oe(()=>{v.da&&En(v.da);const E=_.props&&_.props.onVnodeUnmounted;E&&st(E,v.parent,_),v.isDeactivated=!0},l)};function m(_){Rr(_),c(_,n,l,!0)}function d(_){r.forEach((v,E)=>{const k=Yr(Jt(v)?v.type.__asyncResolved||{}:v.type);k&&!_(k)&&g(E)})}function g(_){const v=r.get(_);v&&(!i||!Gt(v,i))?m(v):i&&Rr(i),r.delete(_),o.delete(_)}ct(()=>[e.include,e.exclude],([_,v])=>{_&&d(E=>Wn(_,E)),v&&d(E=>!Wn(v,E))},{flush:"post",deep:!0});let b=null;const T=()=>{b!=null&&(Vs(n.subTree.type)?Oe(()=>{r.set(b,Rs(n.subTree))},n.subTree.suspense):r.set(b,Rs(n.subTree)))};return Mn(T),ma(T),Ao(()=>{r.forEach(_=>{const{subTree:v,suspense:E}=n,k=Rs(v);if(_.type===k.type&&_.key===k.key){Rr(k);const N=k.component.da;N&&Oe(N,E);return}m(_)})}),()=>{if(b=null,!t.default)return i=null;const _=t.default(),v=_[0];if(_.length>1)return i=null,_;if(!An(v)||!(v.shapeFlag&4)&&!(v.shapeFlag&128))return i=null,v;let E=Rs(v);if(E.type===Me)return i=null,E;const k=E.type,N=Yr(Jt(E)?E.type.__asyncResolved||{}:k),{include:D,exclude:B,max:P}=e;if(D&&(!N||!Wn(D,N))||B&&N&&Wn(B,N))return E.shapeFlag&=-257,i=E,v;const H=E.key==null?k:E.key,Y=r.get(H);return E.el&&(E=$t(E),v.shapeFlag&128&&(v.ssContent=E)),b=H,Y?(E.el=Y.el,E.component=Y.component,E.transition&&Rn(E,E.transition),E.shapeFlag|=512,o.delete(H),o.add(H)):(o.add(H),P&&o.size>parseInt(P,10)&&g(o.values().next().value)),E.shapeFlag|=256,i=E,Vs(v.type)?v:E}}},Yu=Qu;function Wn(e,t){return q(e)?e.some(n=>Wn(n,t)):ve(e)?e.split(",").includes(t):Jc(e)?(e.lastIndex=0,e.test(t)):!1}function Zu(e,t){pa(e,"a",t)}function ef(e,t){pa(e,"da",t)}function pa(e,t,n=De){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(rr(t,s,n),n){let r=n.parent;for(;r&&r.parent;)ds(r.parent.vnode)&&tf(s,t,n,r),r=r.parent}}function tf(e,t,n,s){const r=rr(t,e,s,!0);hs(()=>{fo(s[t],r)},n)}function Rr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Rs(e){return e.shapeFlag&128?e.ssContent:e}function rr(e,t,n=De,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ut();const l=ps(n),a=ft(t,n,e,i);return l(),jt(),a});return s?r.unshift(o):r.push(o),o}}const Vt=e=>(t,n=De)=>{(!Cn||e==="sp")&&rr(e,(...s)=>t(...s),n)},nf=Vt("bm"),Mn=Vt("m"),sf=Vt("bu"),ma=Vt("u"),Ao=Vt("bum"),hs=Vt("um"),rf=Vt("sp"),of=Vt("rtg"),lf=Vt("rtc");function af(e,t=De){rr("ec",e,t)}const ga="components";function Co(e,t){return ba(ga,e,!0,t)||e}const ya=Symbol.for("v-ndc");function To(e){return ve(e)?ba(ga,e,!1)||e:e||ya}function ba(e,t,n=!0,s=!1){const r=Fe||De;if(r){const o=r.type;{const l=Yr(o,!1);if(l&&(l===t||l===Ke(t)||l===Zs(Ke(t))))return o}const i=si(r[e]||o[e],t)||si(r.appContext[e],t);return!i&&s?o:i}}function si(e,t){return e&&(e[t]||e[Ke(t)]||e[Zs(Ke(t))])}function Wr(e,t,n,s){let r;const o=n,i=q(e);if(i||ve(e)){const l=i&&Ft(e);let a=!1,u=!1;l&&(a=!Qe(e),u=Bt(e),e=nr(e)),r=new Array(e.length);for(let c=0,f=e.length;ct(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,u=l.length;a0;return t!=="default"&&(n.name=t),re(),qe(Ne,null,[ae("slot",n,s&&s())],u?-2:64)}let o=e[t];o&&o._c&&(o._d=!1),re();const i=o&&_a(o(n)),l=n.key||i&&i.key,a=qe(Ne,{key:(l&&!Ye(l)?l:`_${t}`)+(!i&&s?"_fb":"")},i||(s?s():[]),i&&e._===1?64:-2);return!r&&a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),o&&o._c&&(o._d=!0),a}function _a(e){return e.some(t=>An(t)?!(t.type===Me||t.type===Ne&&!_a(t.children)):!0)?e:null}const zr=e=>e?Ua(e)?ar(e):zr(e.parent):null,Yn=Pe(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=>zr(e.parent),$root:e=>zr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ea(e),$forceUpdate:e=>e.f||(e.f=()=>{Eo(e.update)}),$nextTick:e=>e.n||(e.n=At.bind(e.proxy)),$watch:e=>Hu.bind(e)}),Ar=(e,t)=>e!==me&&!e.__isScriptSetup&&de(e,t),cf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const p=i[t];if(p!==void 0)switch(p){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(Ar(s,t))return i[t]=1,s[t];if(r!==me&&de(r,t))return i[t]=2,r[t];if(de(o,t))return i[t]=3,o[t];if(n!==me&&de(n,t))return i[t]=4,n[t];Gr&&(i[t]=0)}}const u=Yn[t];let c,f;if(u)return t==="$attrs"&&je(e.attrs,"get",""),u(e);if((c=l.__cssModules)&&(c=c[t]))return c;if(n!==me&&de(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,de(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return Ar(r,t)?(r[t]=n,!0):s!==me&&de(s,t)?(s[t]=n,!0):de(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:o,type:i}},l){let a;return!!(n[l]||e!==me&&l[0]!=="$"&&de(e,l)||Ar(t,l)||de(o,l)||de(s,l)||de(Yn,l)||de(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:de(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ri(e){return q(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Gr=!0;function uf(e){const t=Ea(e),n=e.proxy,s=e.ctx;Gr=!1,t.beforeCreate&&oi(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:u,created:c,beforeMount:f,mounted:p,beforeUpdate:m,updated:d,activated:g,deactivated:b,beforeDestroy:T,beforeUnmount:_,destroyed:v,unmounted:E,render:k,renderTracked:N,renderTriggered:D,errorCaptured:B,serverPrefetch:P,expose:H,inheritAttrs:Y,components:L,directives:Z,filters:he}=t;if(u&&ff(u,s,null),i)for(const Q in i){const ne=i[Q];X(ne)&&(s[Q]=ne.bind(n))}if(r){const Q=r.call(n,n);ue(Q)&&(e.data=cs(Q))}if(Gr=!0,o)for(const Q in o){const ne=o[Q],Ze=X(ne)?ne.bind(n,n):X(ne.get)?ne.get.bind(n,n):Rt,pt=!X(ne)&&X(ne.set)?ne.set.bind(n):Rt,Ce=ke({get:Ze,set:pt});Object.defineProperty(s,Q,{enumerable:!0,configurable:!0,get:()=>Ce.value,set:Se=>Ce.value=Se})}if(l)for(const Q in l)wa(l[Q],s,n,Q);if(a){const Q=X(a)?a.call(n):a;Reflect.ownKeys(Q).forEach(ne=>{Ts(ne,Q[ne])})}c&&oi(c,e,"c");function te(Q,ne){q(ne)?ne.forEach(Ze=>Q(Ze.bind(n))):ne&&Q(ne.bind(n))}if(te(nf,f),te(Mn,p),te(sf,m),te(ma,d),te(Zu,g),te(ef,b),te(af,B),te(lf,N),te(of,D),te(Ao,_),te(hs,E),te(rf,P),q(H))if(H.length){const Q=e.exposed||(e.exposed={});H.forEach(ne=>{Object.defineProperty(Q,ne,{get:()=>n[ne],set:Ze=>n[ne]=Ze,enumerable:!0})})}else e.exposed||(e.exposed={});k&&e.render===Rt&&(e.render=k),Y!=null&&(e.inheritAttrs=Y),L&&(e.components=L),Z&&(e.directives=Z),P&&Ro(e)}function ff(e,t,n=Rt){q(e)&&(e=Jr(e));for(const s in e){const r=e[s];let o;ue(r)?"default"in r?o=ot(r.from||s,r.default,!0):o=ot(r.from||s):o=ot(r),we(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function oi(e,t,n){ft(q(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function wa(e,t,n,s){let r=s.includes(".")?ia(n,s):()=>n[s];if(ve(e)){const o=t[e];X(o)&&ct(r,o)}else if(X(e))ct(r,e.bind(n));else if(ue(e))if(q(e))e.forEach(o=>wa(o,t,n,s));else{const o=X(e.handler)?e.handler.bind(n):t[e.handler];X(o)&&ct(r,o,e)}}function Ea(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(u=>Bs(a,u,i,!0)),Bs(a,t,i)),ue(t)&&o.set(t,a),a}function Bs(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Bs(e,o,n,!0),r&&r.forEach(i=>Bs(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=df[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const df={data:ii,props:li,emits:li,methods:zn,computed:zn,beforeCreate:$e,created:$e,beforeMount:$e,mounted:$e,beforeUpdate:$e,updated:$e,beforeDestroy:$e,beforeUnmount:$e,destroyed:$e,unmounted:$e,activated:$e,deactivated:$e,errorCaptured:$e,serverPrefetch:$e,components:zn,directives:zn,watch:pf,provide:ii,inject:hf};function ii(e,t){return t?e?function(){return Pe(X(e)?e.call(this,this):e,X(t)?t.call(this,this):t)}:t:e}function hf(e,t){return zn(Jr(e),Jr(t))}function Jr(e){if(q(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ke(t)}Modifiers`]||e[`${Yt(t)}Modifiers`];function bf(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||me;let r=n;const o=t.startsWith("update:"),i=o&&yf(s,t.slice(7));i&&(i.trim&&(r=n.map(c=>ve(c)?c.trim():c)),i.number&&(r=n.map(er)));let l,a=s[l=vr(t)]||s[l=vr(Ke(t))];!a&&o&&(a=s[l=vr(Yt(t))]),a&&ft(a,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,ft(u,e,6,r)}}const vf=new WeakMap;function Sa(e,t,n=!1){const s=n?vf:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!X(e)){const a=u=>{const c=Sa(u,t,!0);c&&(l=!0,Pe(i,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(ue(e)&&s.set(e,null),null):(q(o)?o.forEach(a=>i[a]=null):Pe(i,o),ue(e)&&s.set(e,i),i)}function or(e,t){return!e||!Js(t)?!1:(t=t.slice(2).replace(/Once$/,""),de(e,t[0].toLowerCase()+t.slice(1))||de(e,Yt(t))||de(e,t))}function ai(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:u,renderCache:c,props:f,data:p,setupState:m,ctx:d,inheritAttrs:g}=e,b=Us(e);let T,_;try{if(n.shapeFlag&4){const E=r||s,k=E;T=xt(u.call(k,E,c,f,m,p,d)),_=l}else{const E=t;T=xt(E.length>1?E(f,{attrs:l,slots:i,emit:a}):E(f,null)),_=t.props?l:_f(l)}}catch(E){Zn.length=0,fs(E,e,1),T=ae(Me)}let v=T;if(_&&g!==!1){const E=Object.keys(_),{shapeFlag:k}=v;E.length&&k&7&&(o&&E.some(Xs)&&(_=wf(_,o)),v=$t(v,_,!1,!0))}return n.dirs&&(v=$t(v,null,!1,!0),v.dirs=v.dirs?v.dirs.concat(n.dirs):n.dirs),n.transition&&Rn(v,n.transition),T=v,Us(b),T}const _f=e=>{let t;for(const n in e)(n==="class"||n==="style"||Js(n))&&((t||(t={}))[n]=e[n]);return t},wf=(e,t)=>{const n={};for(const s in e)(!Xs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ef(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?ci(s,i,u):!!i;if(a&8){const c=t.dynamicProps;for(let f=0;fObject.create(Aa),Ta=e=>Object.getPrototypeOf(e)===Aa;function Sf(e,t,n,s=!1){const r={},o=Ca();e.propsDefaults=Object.create(null),Oa(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:Jl(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function Rf(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=le(r),[a]=e.propsOptions;let u=!1;if((s||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[p,m]=ka(f,t,!0);Pe(i,p),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!o&&!a)return ue(e)&&s.set(e,_n),_n;if(q(o))for(let c=0;ce==="_"||e==="_ctx"||e==="$stable",ko=e=>q(e)?e.map(xt):[xt(e)],Cf=(e,t,n)=>{if(t._n)return t;const s=Ct((...r)=>ko(t(...r)),n);return s._c=!1,s},Pa=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Oo(r))continue;const o=e[r];if(X(o))t[r]=Cf(r,o,s);else if(o!=null){const i=ko(o);t[r]=()=>i}}},Ia=(e,t)=>{const n=ko(t);e.slots.default=()=>n},Na=(e,t,n)=>{for(const s in t)(n||!Oo(s))&&(e[s]=t[s])},Tf=(e,t,n)=>{const s=e.slots=Ca();if(e.vnode.shapeFlag&32){const r=t._;r?(Na(s,t,n),n&&Tl(s,"_",r,!0)):Pa(t,s)}else t&&Ia(e,t)},Of=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=me;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:Na(r,t,n):(o=!t.$stable,Pa(t,r)),i=t}else t&&(Ia(e,t),i={default:1});if(o)for(const l in r)!Oo(l)&&i[l]==null&&delete r[l]},Oe=Lf;function kf(e){return Pf(e)}function Pf(e,t){const n=tr();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:u,setElementText:c,parentNode:f,nextSibling:p,setScopeId:m=Rt,insertStaticContent:d}=e,g=(h,y,w,S=null,C=null,R=null,F=void 0,M=null,I=!!y.dynamicChildren)=>{if(h===y)return;h&&!Gt(h,y)&&(S=A(h),Se(h,C,R,!0),h=null),y.patchFlag===-2&&(I=!1,y.dynamicChildren=null);const{type:O,ref:z,shapeFlag:j}=y;switch(O){case ir:b(h,y,w,S);break;case Me:T(h,y,w,S);break;case Os:h==null&&_(y,w,S,F);break;case Ne:L(h,y,w,S,C,R,F,M,I);break;default:j&1?k(h,y,w,S,C,R,F,M,I):j&6?Z(h,y,w,S,C,R,F,M,I):(j&64||j&128)&&O.process(h,y,w,S,C,R,F,M,I,K)}z!=null&&C?Qn(z,h&&h.ref,R,y||h,!y):z==null&&h&&h.ref!=null&&Qn(h.ref,null,R,h,!0)},b=(h,y,w,S)=>{if(h==null)s(y.el=l(y.children),w,S);else{const C=y.el=h.el;y.children!==h.children&&u(C,y.children)}},T=(h,y,w,S)=>{h==null?s(y.el=a(y.children||""),w,S):y.el=h.el},_=(h,y,w,S)=>{[h.el,h.anchor]=d(h.children,y,w,S,h.el,h.anchor)},v=({el:h,anchor:y},w,S)=>{let C;for(;h&&h!==y;)C=p(h),s(h,w,S),h=C;s(y,w,S)},E=({el:h,anchor:y})=>{let w;for(;h&&h!==y;)w=p(h),r(h),h=w;r(y)},k=(h,y,w,S,C,R,F,M,I)=>{if(y.type==="svg"?F="svg":y.type==="math"&&(F="mathml"),h==null)N(y,w,S,C,R,F,M,I);else{const O=h.el&&h.el._isVueCE?h.el:null;try{O&&O._beginPatch(),P(h,y,C,R,F,M,I)}finally{O&&O._endPatch()}}},N=(h,y,w,S,C,R,F,M)=>{let I,O;const{props:z,shapeFlag:j,transition:W,dirs:J}=h;if(I=h.el=i(h.type,R,z&&z.is,z),j&8?c(I,h.children):j&16&&B(h.children,I,null,S,C,Cr(h,R),F,M),J&&Zt(h,null,S,"created"),D(I,h,h.scopeId,F,S),z){for(const pe in z)pe!=="value"&&!Gn(pe)&&o(I,pe,null,z[pe],R,S);"value"in z&&o(I,"value",null,z.value,R),(O=z.onVnodeBeforeMount)&&st(O,S,h)}J&&Zt(h,null,S,"beforeMount");const ce=If(C,W);ce&&W.beforeEnter(I),s(I,y,w),((O=z&&z.onVnodeMounted)||ce||J)&&Oe(()=>{O&&st(O,S,h),ce&&W.enter(I),J&&Zt(h,null,S,"mounted")},C)},D=(h,y,w,S,C)=>{if(w&&m(h,w),S)for(let R=0;R{for(let O=I;O{const M=y.el=h.el;let{patchFlag:I,dynamicChildren:O,dirs:z}=y;I|=h.patchFlag&16;const j=h.props||me,W=y.props||me;let J;if(w&&tn(w,!1),(J=W.onVnodeBeforeUpdate)&&st(J,w,y,h),z&&Zt(y,h,w,"beforeUpdate"),w&&tn(w,!0),(j.innerHTML&&W.innerHTML==null||j.textContent&&W.textContent==null)&&c(M,""),O?H(h.dynamicChildren,O,M,w,S,Cr(y,C),R):F||ne(h,y,M,null,w,S,Cr(y,C),R,!1),I>0){if(I&16)Y(M,j,W,w,C);else if(I&2&&j.class!==W.class&&o(M,"class",null,W.class,C),I&4&&o(M,"style",j.style,W.style,C),I&8){const ce=y.dynamicProps;for(let pe=0;pe{J&&st(J,w,y,h),z&&Zt(y,h,w,"updated")},S)},H=(h,y,w,S,C,R,F)=>{for(let M=0;M{if(y!==w){if(y!==me)for(const R in y)!Gn(R)&&!(R in w)&&o(h,R,y[R],null,C,S);for(const R in w){if(Gn(R))continue;const F=w[R],M=y[R];F!==M&&R!=="value"&&o(h,R,M,F,C,S)}"value"in w&&o(h,"value",y.value,w.value,C)}},L=(h,y,w,S,C,R,F,M,I)=>{const O=y.el=h?h.el:l(""),z=y.anchor=h?h.anchor:l("");let{patchFlag:j,dynamicChildren:W,slotScopeIds:J}=y;J&&(M=M?M.concat(J):J),h==null?(s(O,w,S),s(z,w,S),B(y.children||[],w,z,C,R,F,M,I)):j>0&&j&64&&W&&h.dynamicChildren&&h.dynamicChildren.length===W.length?(H(h.dynamicChildren,W,w,C,R,F,M),(y.key!=null||C&&y===C.subTree)&&Po(h,y,!0)):ne(h,y,w,z,C,R,F,M,I)},Z=(h,y,w,S,C,R,F,M,I)=>{y.slotScopeIds=M,h==null?y.shapeFlag&512?C.ctx.activate(y,w,S,F,I):he(y,w,S,C,R,F,I):Ie(h,y,I)},he=(h,y,w,S,C,R,F)=>{const M=h.component=$f(h,S,C);if(ds(h)&&(M.ctx.renderer=K),Vf(M,!1,F),M.asyncDep){if(C&&C.registerDep(M,te,F),!h.el){const I=M.subTree=ae(Me);T(null,I,y,w),h.placeholder=I.el}}else te(M,h,y,w,C,R,F)},Ie=(h,y,w)=>{const S=y.component=h.component;if(Ef(h,y,w))if(S.asyncDep&&!S.asyncResolved){Q(S,y,w);return}else S.next=y,S.update();else y.el=h.el,S.vnode=y},te=(h,y,w,S,C,R,F)=>{const M=()=>{if(h.isMounted){let{next:j,bu:W,u:J,parent:ce,vnode:pe}=h;{const bt=La(h);if(bt){j&&(j.el=pe.el,Q(h,j,F)),bt.asyncDep.then(()=>{Oe(()=>{h.isUnmounted||O()},C)});return}}let ge=j,Re;tn(h,!1),j?(j.el=pe.el,Q(h,j,F)):j=pe,W&&En(W),(Re=j.props&&j.props.onVnodeBeforeUpdate)&&st(Re,ce,j,pe),tn(h,!0);const Le=ai(h),yt=h.subTree;h.subTree=Le,g(yt,Le,f(yt.el),A(yt),h,C,R),j.el=Le.el,ge===null&&xf(h,Le.el),J&&Oe(J,C),(Re=j.props&&j.props.onVnodeUpdated)&&Oe(()=>st(Re,ce,j,pe),C)}else{let j;const{el:W,props:J}=y,{bm:ce,m:pe,parent:ge,root:Re,type:Le}=h,yt=Jt(y);tn(h,!1),ce&&En(ce),!yt&&(j=J&&J.onVnodeBeforeMount)&&st(j,ge,y),tn(h,!0);{Re.ce&&Re.ce._hasShadowRoot()&&Re.ce._injectChildStyle(Le,h.parent?h.parent.type:void 0);const bt=h.subTree=ai(h);g(null,bt,w,S,h,C,R),y.el=bt.el}if(pe&&Oe(pe,C),!yt&&(j=J&&J.onVnodeMounted)){const bt=y;Oe(()=>st(j,ge,bt),C)}(y.shapeFlag&256||ge&&Jt(ge.vnode)&&ge.vnode.shapeFlag&256)&&h.a&&Oe(h.a,C),h.isMounted=!0,y=w=S=null}};h.scope.on();const I=h.effect=new Ml(M);h.scope.off();const O=h.update=I.run.bind(I),z=h.job=I.runIfDirty.bind(I);z.i=h,z.id=h.uid,I.scheduler=()=>Eo(z),tn(h,!0),O()},Q=(h,y,w)=>{y.component=h;const S=h.vnode.props;h.vnode=y,h.next=null,Rf(h,y.props,S,w),Of(h,y.children,w),Ut(),Xo(h),jt()},ne=(h,y,w,S,C,R,F,M,I=!1)=>{const O=h&&h.children,z=h?h.shapeFlag:0,j=y.children,{patchFlag:W,shapeFlag:J}=y;if(W>0){if(W&128){pt(O,j,w,S,C,R,F,M,I);return}else if(W&256){Ze(O,j,w,S,C,R,F,M,I);return}}J&8?(z&16&&et(O,C,R),j!==O&&c(w,j)):z&16?J&16?pt(O,j,w,S,C,R,F,M,I):et(O,C,R,!0):(z&8&&c(w,""),J&16&&B(j,w,S,C,R,F,M,I))},Ze=(h,y,w,S,C,R,F,M,I)=>{h=h||_n,y=y||_n;const O=h.length,z=y.length,j=Math.min(O,z);let W;for(W=0;Wz?et(h,C,R,!0,!1,j):B(y,w,S,C,R,F,M,I,j)},pt=(h,y,w,S,C,R,F,M,I)=>{let O=0;const z=y.length;let j=h.length-1,W=z-1;for(;O<=j&&O<=W;){const J=h[O],ce=y[O]=I?It(y[O]):xt(y[O]);if(Gt(J,ce))g(J,ce,w,null,C,R,F,M,I);else break;O++}for(;O<=j&&O<=W;){const J=h[j],ce=y[W]=I?It(y[W]):xt(y[W]);if(Gt(J,ce))g(J,ce,w,null,C,R,F,M,I);else break;j--,W--}if(O>j){if(O<=W){const J=W+1,ce=JW)for(;O<=j;)Se(h[O],C,R,!0),O++;else{const J=O,ce=O,pe=new Map;for(O=ce;O<=W;O++){const Je=y[O]=I?It(y[O]):xt(y[O]);Je.key!=null&&pe.set(Je.key,O)}let ge,Re=0;const Le=W-ce+1;let yt=!1,bt=0;const Fn=new Array(Le);for(O=0;O=Le){Se(Je,C,R,!0);continue}let vt;if(Je.key!=null)vt=pe.get(Je.key);else for(ge=ce;ge<=W;ge++)if(Fn[ge-ce]===0&&Gt(Je,y[ge])){vt=ge;break}vt===void 0?Se(Je,C,R,!0):(Fn[vt-ce]=O+1,vt>=bt?bt=vt:yt=!0,g(Je,y[vt],w,null,C,R,F,M,I),Re++)}const Ho=yt?Nf(Fn):_n;for(ge=Ho.length-1,O=Le-1;O>=0;O--){const Je=ce+O,vt=y[Je],qo=y[Je+1],Ko=Je+1{const{el:R,type:F,transition:M,children:I,shapeFlag:O}=h;if(O&6){Ce(h.component.subTree,y,w,S);return}if(O&128){h.suspense.move(y,w,S);return}if(O&64){F.move(h,y,w,K);return}if(F===Ne){s(R,y,w);for(let j=0;jM.enter(R),C);else{const{leave:j,delayLeave:W,afterLeave:J}=M,ce=()=>{h.ctx.isUnmounted?r(R):s(R,y,w)},pe=()=>{R._isLeaving&&R[wt](!0),j(R,()=>{ce(),J&&J()})};W?W(R,ce,pe):pe()}else s(R,y,w)},Se=(h,y,w,S=!1,C=!1)=>{const{type:R,props:F,ref:M,children:I,dynamicChildren:O,shapeFlag:z,patchFlag:j,dirs:W,cacheIndex:J,memo:ce}=h;if(j===-2&&(C=!1),M!=null&&(Ut(),Qn(M,null,w,h,!0),jt()),J!=null&&(y.renderCache[J]=void 0),z&256){y.ctx.deactivate(h);return}const pe=z&1&&W,ge=!Jt(h);let Re;if(ge&&(Re=F&&F.onVnodeBeforeUnmount)&&st(Re,y,h),z&6)gt(h.component,w,S);else{if(z&128){h.suspense.unmount(w,S);return}pe&&Zt(h,null,y,"beforeUnmount"),z&64?h.type.remove(h,y,w,K,S):O&&!O.hasOnce&&(R!==Ne||j>0&&j&64)?et(O,y,w,!1,!0):(R===Ne&&j&384||!C&&z&16)&&et(I,y,w),S&&mt(h)}const Le=ce!=null&&J==null;(ge&&(Re=F&&F.onVnodeUnmounted)||pe||Le)&&Oe(()=>{Re&&st(Re,y,h),pe&&Zt(h,null,y,"unmounted"),Le&&(h.el=null)},w)},mt=h=>{const{type:y,el:w,anchor:S,transition:C}=h;if(y===Ne){lt(w,S);return}if(y===Os){E(h);return}const R=()=>{r(w),C&&!C.persisted&&C.afterLeave&&C.afterLeave()};if(h.shapeFlag&1&&C&&!C.persisted){const{leave:F,delayLeave:M}=C,I=()=>F(w,R);M?M(h.el,R,I):I()}else R()},lt=(h,y)=>{let w;for(;h!==y;)w=p(h),r(h),h=w;r(y)},gt=(h,y,w)=>{const{bum:S,scope:C,job:R,subTree:F,um:M,m:I,a:O}=h;$s(I),$s(O),S&&En(S),C.stop(),R&&(R.flags|=8,Se(F,h,y,w)),M&&Oe(M,y),Oe(()=>{h.isUnmounted=!0},y)},et=(h,y,w,S=!1,C=!1,R=0)=>{for(let F=R;F{if(h.shapeFlag&6)return A(h.component.subTree);if(h.shapeFlag&128)return h.suspense.next();const y=p(h.anchor||h.el),w=y&&y[la];return w?p(w):y};let $=!1;const U=(h,y,w)=>{let S;h==null?y._vnode&&(Se(y._vnode,null,null,!0),S=y._vnode.component):g(y._vnode||null,h,y,null,null,null,w),y._vnode=h,$||($=!0,Xo(S),ta(),$=!1)},K={p:g,um:Se,m:Ce,r:mt,mt:he,mc:B,pc:ne,pbc:H,n:A,o:e};return{render:U,hydrate:void 0,createApp:gf(U)}}function Cr({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 tn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function If(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Po(e,t,n=!1){const s=e.children,r=t.children;if(q(s)&&q(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function La(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:La(t)}function $s(e){if(e)for(let t=0;te.__isSuspense;function Lf(e,t){t&&t.pendingBranch?q(e)?t.effects.push(...e):t.effects.push(e):ju(e)}const Ne=Symbol.for("v-fgt"),ir=Symbol.for("v-txt"),Me=Symbol.for("v-cmt"),Os=Symbol.for("v-stc"),Zn=[];let Xe=null;function re(e=!1){Zn.push(Xe=e?null:[])}function Mf(){Zn.pop(),Xe=Zn[Zn.length-1]||null}let is=1;function Hs(e,t=!1){is+=e,e<0&&Xe&&t&&(Xe.hasOnce=!0)}function Da(e){return e.dynamicChildren=is>0?Xe||_n:null,Mf(),is>0&&Xe&&Xe.push(e),e}function _e(e,t,n,s,r,o){return Da(se(e,t,n,s,r,o,!0))}function qe(e,t,n,s,r){return Da(ae(e,t,n,s,r,!0))}function An(e){return e?e.__v_isVNode===!0:!1}function Gt(e,t){return e.type===t.type&&e.key===t.key}const Fa=({key:e})=>e??null,ks=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ve(e)||we(e)||X(e)?{i:Fe,r:e,k:t,f:!!n}:e:null);function se(e,t=null,n=null,s=0,r=null,o=e===Ne?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Fa(t),ref:t&&ks(t),scopeId:sa,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:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Fe};return l?(Io(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=ve(n)?8:16),is>0&&!i&&Xe&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&Xe.push(a),a}const ae=Df;function Df(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===ya)&&(e=Me),An(e)){const l=$t(e,t,!0);return n&&Io(l,n),is>0&&!o&&Xe&&(l.shapeFlag&6?Xe[Xe.indexOf(e)]=l:Xe.push(l)),l.patchFlag=-2,l}if(Wf(e)&&(e=e.__vccOpts),t){t=Ff(t);let{class:l,style:a}=t;l&&!ve(l)&&(t.class=Dt(l)),ue(a)&&(sr(a)&&!q(a)&&(a=Pe({},a)),t.style=ho(a))}const i=ve(e)?1:Vs(e)?128:aa(e)?64:ue(e)?4:X(e)?2:0;return se(e,t,n,s,r,i,o,!0)}function Ff(e){return e?sr(e)||Ta(e)?Pe({},e):e:null}function $t(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,u=t?Uf(r||{},t):r,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&Fa(u),ref:t&&t.ref?n&&o?q(o)?o.concat(ks(t)):[o,ks(t)]:ks(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ne?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&$t(e.ssContent),ssFallback:e.ssFallback&&$t(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Rn(c,a.clone(c)),c}function qs(e=" ",t=0){return ae(ir,null,e,t)}function Ng(e,t){const n=ae(Os,null,e);return n.staticCount=t,n}function We(e="",t=!1){return t?(re(),qe(Me,null,e)):ae(Me,null,e)}function xt(e){return e==null||typeof e=="boolean"?ae(Me):q(e)?ae(Ne,null,e.slice()):An(e)?It(e):ae(ir,null,String(e))}function It(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:$t(e)}function Io(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(q(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Io(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Ta(t)?t._ctx=Fe:r===3&&Fe&&(Fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else X(t)?(t={default:t,_ctx:Fe},n=32):(t=String(t),s&64?(n=16,t=[qs(t)]):n=8);e.children=t,e.shapeFlag|=n}function Uf(...e){const t={};for(let n=0;nDe||Fe;let Ks,Qr;{const e=tr(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};Ks=t("__VUE_INSTANCE_SETTERS__",n=>De=n),Qr=t("__VUE_SSR_SETTERS__",n=>Cn=n)}const ps=e=>{const t=De;return Ks(e),e.scope.on(),()=>{e.scope.off(),Ks(t)}},fi=()=>{De&&De.scope.off(),Ks(null)};function Ua(e){return e.vnode.shapeFlag&4}let Cn=!1;function Vf(e,t=!1,n=!1){t&&Qr(t);const{props:s,children:r}=e.vnode,o=Ua(e);Sf(e,s,o,t),Tf(e,r,n||t);const i=o?Hf(e,t):void 0;return t&&Qr(!1),i}function Hf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,cf);const{setup:s}=n;if(s){Ut();const r=e.setupContext=s.length>1?Kf(e):null,o=ps(e),i=us(s,e,0,[e.props,r]),l=Rl(i);if(jt(),o(),(l||e.sp)&&!Jt(e)&&Ro(e),l){if(i.then(fi,fi),t)return i.then(a=>{di(e,a)}).catch(a=>{fs(a,e,0)});e.asyncDep=i}else di(e,i)}else ja(e)}function di(e,t,n){X(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ue(t)&&(e.setupState=Ql(t)),ja(e)}function ja(e,t,n){const s=e.type;e.render||(e.render=s.render||Rt);{const r=ps(e);Ut();try{uf(e)}finally{jt(),r()}}}const qf={get(e,t){return je(e,"get",""),e[t]}};function Kf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,qf),slots:e.slots,emit:e.emit,expose:t}}function ar(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ql(wo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Yn)return Yn[n](e)},has(t,n){return n in t||n in Yn}})):e.proxy}function Yr(e,t=!0){return X(e)?e.displayName||e.name:e.name||t&&e.__name}function Wf(e){return X(e)&&"__vccOpts"in e}const ke=(e,t)=>Lu(e,t,Cn);function Tn(e,t,n){try{Hs(-1);const s=arguments.length;return s===2?ue(t)&&!q(t)?An(t)?ae(e,null,[t]):ae(e,t):ae(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&An(n)&&(n=[n]),ae(e,t,n))}finally{Hs(1)}}const zf="3.5.32";let Zr;const hi=typeof window<"u"&&window.trustedTypes;if(hi)try{Zr=hi.createPolicy("vue",{createHTML:e=>e})}catch{}const Ba=Zr?e=>Zr.createHTML(e):e=>e,Gf="http://www.w3.org/2000/svg",Jf="http://www.w3.org/1998/Math/MathML",Pt=typeof document<"u"?document:null,pi=Pt&&Pt.createElement("template"),Xf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Pt.createElementNS(Gf,e):t==="mathml"?Pt.createElementNS(Jf,e):n?Pt.createElement(e,{is:n}):Pt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Pt.createTextNode(e),createComment:e=>Pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Pt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{pi.innerHTML=Ba(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=pi.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ht="transition",Bn="animation",ls=Symbol("_vtc"),$a={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},Qf=Pe({},ca,$a),Yf=e=>(e.displayName="Transition",e.props=Qf,e),cr=Yf((e,{slots:t})=>Tn(Ju,Zf(e),t)),nn=(e,t=[])=>{q(e)?e.forEach(n=>n(...t)):e&&e(...t)},mi=e=>e?q(e)?e.some(t=>t.length>1):e.length>1:!1;function Zf(e){const t={};for(const L in e)L in $a||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:u=i,appearToClass:c=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,d=ed(r),g=d&&d[0],b=d&&d[1],{onBeforeEnter:T,onEnter:_,onEnterCancelled:v,onLeave:E,onLeaveCancelled:k,onBeforeAppear:N=T,onAppear:D=_,onAppearCancelled:B=v}=t,P=(L,Z,he,Ie)=>{L._enterCancelled=Ie,sn(L,Z?c:l),sn(L,Z?u:i),he&&he()},H=(L,Z)=>{L._isLeaving=!1,sn(L,f),sn(L,m),sn(L,p),Z&&Z()},Y=L=>(Z,he)=>{const Ie=L?D:_,te=()=>P(Z,L,he);nn(Ie,[Z,te]),gi(()=>{sn(Z,L?a:o),Ot(Z,L?c:l),mi(Ie)||yi(Z,s,g,te)})};return Pe(t,{onBeforeEnter(L){nn(T,[L]),Ot(L,o),Ot(L,i)},onBeforeAppear(L){nn(N,[L]),Ot(L,a),Ot(L,u)},onEnter:Y(!1),onAppear:Y(!0),onLeave(L,Z){L._isLeaving=!0;const he=()=>H(L,Z);Ot(L,f),L._enterCancelled?(Ot(L,p),_i(L)):(_i(L),Ot(L,p)),gi(()=>{L._isLeaving&&(sn(L,f),Ot(L,m),mi(E)||yi(L,s,b,he))}),nn(E,[L,he])},onEnterCancelled(L){P(L,!1,void 0,!0),nn(v,[L])},onAppearCancelled(L){P(L,!0,void 0,!0),nn(B,[L])},onLeaveCancelled(L){H(L),nn(k,[L])}})}function ed(e){if(e==null)return null;if(ue(e))return[Tr(e.enter),Tr(e.leave)];{const t=Tr(e);return[t,t]}}function Tr(e){return Zc(e)}function Ot(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[ls]||(e[ls]=new Set)).add(t)}function sn(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[ls];n&&(n.delete(t),n.size||(e[ls]=void 0))}function gi(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let td=0;function yi(e,t,n,s){const r=e._endId=++td,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=nd(e,t);if(!i)return s();const u=i+"end";let c=0;const f=()=>{e.removeEventListener(u,p),o()},p=m=>{m.target===e&&++c>=a&&f()};setTimeout(()=>{c(n[d]||"").split(", "),r=s(`${Ht}Delay`),o=s(`${Ht}Duration`),i=bi(r,o),l=s(`${Bn}Delay`),a=s(`${Bn}Duration`),u=bi(l,a);let c=null,f=0,p=0;t===Ht?i>0&&(c=Ht,f=i,p=o.length):t===Bn?u>0&&(c=Bn,f=u,p=a.length):(f=Math.max(i,u),c=f>0?i>u?Ht:Bn:null,p=c?c===Ht?o.length:a.length:0);const m=c===Ht&&/\b(?:transform|all)(?:,|$)/.test(s(`${Ht}Property`).toString());return{type:c,timeout:f,propCount:p,hasTransform:m}}function bi(e,t){for(;e.lengthvi(n)+vi(e[s])))}function vi(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function _i(e){return(e?e.ownerDocument:document).body.offsetHeight}function sd(e,t,n){const s=e[ls];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ws=Symbol("_vod"),Va=Symbol("_vsh"),Lg={name:"show",beforeMount(e,{value:t},{transition:n}){e[Ws]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):$n(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),$n(e,!0),s.enter(e)):s.leave(e,()=>{$n(e,!1)}):$n(e,t))},beforeUnmount(e,{value:t}){$n(e,t)}};function $n(e,t){e.style.display=t?e[Ws]:"none",e[Va]=!t}const rd=Symbol(""),od=/(?:^|;)\s*display\s*:/;function id(e,t,n){const s=e.style,r=ve(n);let o=!1;if(n&&!r){if(t)if(ve(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Ps(s,l,"")}else for(const i in t)n[i]==null&&Ps(s,i,"");for(const i in n)i==="display"&&(o=!0),Ps(s,i,n[i])}else if(r){if(t!==n){const i=s[rd];i&&(n+=";"+i),s.cssText=n,o=od.test(n)}}else t&&e.removeAttribute("style");Ws in e&&(e[Ws]=o?s.display:"",e[Va]&&(s.display="none"))}const wi=/\s*!important$/;function Ps(e,t,n){if(q(n))n.forEach(s=>Ps(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ld(e,t);wi.test(n)?e.setProperty(Yt(s),n.replace(wi,""),"important"):e[s]=n}}const Ei=["Webkit","Moz","ms"],Or={};function ld(e,t){const n=Or[t];if(n)return n;let s=Ke(t);if(s!=="filter"&&s in e)return Or[t]=s;s=Zs(s);for(let r=0;rkr||(fd.then(()=>kr=0),kr=Date.now());function hd(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;ft(pd(s,n.value),t,5,[s])};return n.value=e,n.attached=dd(),n}function pd(e,t){if(q(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Ti=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,md=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?sd(e,s,i):t==="style"?id(e,n,s):Js(t)?Xs(t)||cd(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):gd(e,t,s,i))?(Ri(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Si(e,t,s,i,o,t!=="value")):e._isVueCE&&(yd(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ve(s)))?Ri(e,Ke(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Si(e,t,s,i))};function gd(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ti(t)&&X(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 r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Ti(t)&&ve(n)?!1:t in e}function yd(e,t){const n=e._def.props;if(!n)return!1;const s=Ke(t);return Array.isArray(n)?n.some(r=>Ke(r)===s):Object.keys(n).some(r=>Ke(r)===s)}const Qt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return q(t)?n=>En(t,n):t};function bd(e){e.target.composing=!0}function Oi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const it=Symbol("_assign");function ki(e,t,n){return t&&(e=e.trim()),n&&(e=er(e)),e}const zs={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[it]=Qt(r);const o=s||r.props&&r.props.type==="number";Mt(e,t?"change":"input",i=>{i.target.composing||e[it](ki(e.value,n,o))}),(n||o)&&Mt(e,"change",()=>{e.value=ki(e.value,n,o)}),t||(Mt(e,"compositionstart",bd),Mt(e,"compositionend",Oi),Mt(e,"change",Oi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:o}},i){if(e[it]=Qt(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?er(e.value):e.value,a=t??"";if(l===a)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===a)||(e.value=a)}},vd={deep:!0,created(e,t,n){e[it]=Qt(n),Mt(e,"change",()=>{const s=e._modelValue,r=On(e),o=e.checked,i=e[it];if(q(s)){const l=po(s,r),a=l!==-1;if(o&&!a)i(s.concat(r));else if(!o&&a){const u=[...s];u.splice(l,1),i(u)}}else if(Nn(s)){const l=new Set(s);o?l.add(r):l.delete(r),i(l)}else i(Ha(e,o))})},mounted:Pi,beforeUpdate(e,t,n){e[it]=Qt(n),Pi(e,t,n)}};function Pi(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(q(t))r=po(t,s.props.value)>-1;else if(Nn(t))r=t.has(s.props.value);else{if(t===n)return;r=Xt(t,Ha(e,!0))}e.checked!==r&&(e.checked=r)}const _d={created(e,{value:t},n){e.checked=Xt(t,n.props.value),e[it]=Qt(n),Mt(e,"change",()=>{e[it](On(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[it]=Qt(s),t!==n&&(e.checked=Xt(t,s.props.value))}},wd={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=Nn(t);Mt(e,"change",()=>{const o=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?er(On(i)):On(i));e[it](e.multiple?r?new Set(o):o:o[0]),e._assigning=!0,At(()=>{e._assigning=!1})}),e[it]=Qt(s)},mounted(e,{value:t}){Ii(e,t)},beforeUpdate(e,t,n){e[it]=Qt(n)},updated(e,{value:t}){e._assigning||Ii(e,t)}};function Ii(e,t){const n=e.multiple,s=q(t);if(!(n&&!s&&!Nn(t))){for(let r=0,o=e.options.length;rString(u)===String(l)):i.selected=po(t,l)>-1}else i.selected=t.has(l);else if(Xt(On(i),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function On(e){return"_value"in e?e._value:e.value}function Ha(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Mg={created(e,t,n){As(e,t,n,null,"created")},mounted(e,t,n){As(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){As(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){As(e,t,n,s,"updated")}};function Ed(e,t){switch(e){case"SELECT":return wd;case"TEXTAREA":return zs;default:switch(t){case"checkbox":return vd;case"radio":return _d;default:return zs}}}function As(e,t,n,s,r){const i=Ed(e.tagName,n.props&&n.props.type)[r];i&&i(e,t,n,s)}const xd=["ctrl","shift","alt","meta"],Sd={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)=>xd.some(n=>e[`${n}Key`]&&!t.includes(n))},bn=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const o=Yt(r.key);if(t.some(i=>i===o||Rd[i]===o))return e(r)}))},Ad=Pe({patchProp:md},Xf);let Ni;function Cd(){return Ni||(Ni=kf(Ad))}const Td=((...e)=>{const t=Cd().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=kd(s);if(!r)return;const o=t._component;!X(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Od(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function Od(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function kd(e){return ve(e)?document.querySelector(e):e}let qa;const ur=e=>qa=e,Ka=Symbol();function eo(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var es;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(es||(es={}));function Pd(){const e=Nl(!0),t=e.run(()=>ee({}));let n=[],s=[];const r=wo({install(o){ur(r),r._a=o,o.provide(Ka,r),o.config.globalProperties.$pinia=r,s.forEach(i=>n.push(i)),s=[]},use(o){return this._a?n.push(o):s.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}const Wa=()=>{};function Li(e,t,n,s=Wa){e.add(t);const r=()=>{e.delete(t)&&s()};return!n&&Ll()&&lu(r),r}function mn(e,...t){e.forEach(n=>{n(...t)})}const Id=e=>e(),Mi=Symbol(),Pr=Symbol();function to(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],r=e[n];eo(r)&&eo(s)&&e.hasOwnProperty(n)&&!we(s)&&!Ft(s)?e[n]=to(r,s):e[n]=s}return e}const Nd=Symbol();function Ld(e){return!eo(e)||!Object.prototype.hasOwnProperty.call(e,Nd)}const{assign:Kt}=Object;function Md(e){return!!(we(e)&&e.effect)}function Dd(e,t,n,s){const{state:r,actions:o,getters:i}=t,l=n.state.value[e];let a;function u(){l||(n.state.value[e]=r?r():{});const c=ku(n.state.value[e]);return Kt(c,o,Object.keys(i||{}).reduce((f,p)=>(f[p]=wo(ke(()=>{ur(n);const m=n._s.get(e);return i[p].call(m,m)})),f),{}))}return a=za(e,u,t,n,s,!0),a}function za(e,t,n={},s,r,o){let i;const l=Kt({actions:{}},n),a={deep:!0};let u,c,f=new Set,p=new Set,m;const d=s.state.value[e];!o&&!d&&(s.state.value[e]={});let g;function b(B){let P;u=c=!1,typeof B=="function"?(B(s.state.value[e]),P={type:es.patchFunction,storeId:e,events:m}):(to(s.state.value[e],B),P={type:es.patchObject,payload:B,storeId:e,events:m});const H=g=Symbol();At().then(()=>{g===H&&(u=!0)}),c=!0,mn(f,P,s.state.value[e])}const T=o?function(){const{state:P}=n,H=P?P():{};this.$patch(Y=>{Kt(Y,H)})}:Wa;function _(){i.stop(),f.clear(),p.clear(),s._s.delete(e)}const v=(B,P="")=>{if(Mi in B)return B[Pr]=P,B;const H=function(){ur(s);const Y=Array.from(arguments),L=new Set,Z=new Set;function he(Q){L.add(Q)}function Ie(Q){Z.add(Q)}mn(p,{args:Y,name:H[Pr],store:k,after:he,onError:Ie});let te;try{te=B.apply(this&&this.$id===e?this:k,Y)}catch(Q){throw mn(Z,Q),Q}return te instanceof Promise?te.then(Q=>(mn(L,Q),Q)).catch(Q=>(mn(Z,Q),Promise.reject(Q))):(mn(L,te),te)};return H[Mi]=!0,H[Pr]=P,H},E={_p:s,$id:e,$onAction:Li.bind(null,p),$patch:b,$reset:T,$subscribe(B,P={}){const H=Li(f,B,P.detached,()=>Y()),Y=i.run(()=>ct(()=>s.state.value[e],L=>{(P.flush==="sync"?c:u)&&B({storeId:e,type:es.direct,events:m},L)},Kt({},a,P)));return H},$dispose:_},k=cs(E);s._s.set(e,k);const D=(s._a&&s._a.runWithContext||Id)(()=>s._e.run(()=>(i=Nl()).run(()=>t({action:v}))));for(const B in D){const P=D[B];if(we(P)&&!Md(P)||Ft(P))o||(d&&Ld(P)&&(we(P)?P.value=d[B]:to(P,d[B])),s.state.value[e][B]=P);else if(typeof P=="function"){const H=v(P,B);D[B]=H,l.actions[B]=P}}return Kt(k,D),Kt(le(k),D),Object.defineProperty(k,"$state",{get:()=>s.state.value[e],set:B=>{b(P=>{Kt(P,B)})}}),s._p.forEach(B=>{Kt(k,i.run(()=>B({store:k,app:s._a,pinia:s,options:l})))}),d&&o&&n.hydrate&&n.hydrate(k.$state,d),u=!0,c=!0,k}function fr(e,t,n){let s;const r=typeof t=="function";s=r?n:t;function o(i,l){const a=Bu();return i=i||(a?ot(Ka,null):null),i&&ur(i),i=qa,i._s.has(e)||(r?za(e,t,s,i):Dd(e,s,i)),i._s.get(e)}return o.$id=e,o}const Di=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Fd=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,n,s)=>s?s.toUpperCase():n.toLowerCase()),Ud=e=>{const t=Fd(e);return t.charAt(0).toUpperCase()+t.slice(1)},jd=(...e)=>e.filter((t,n,s)=>!!t&&t.trim()!==""&&s.indexOf(t)===n).join(" ").trim(),Fi=e=>e==="";var Vn={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};const Bd=({name:e,iconNode:t,absoluteStrokeWidth:n,"absolute-stroke-width":s,strokeWidth:r,"stroke-width":o,size:i=Vn.width,color:l=Vn.stroke,...a},{slots:u})=>Tn("svg",{...Vn,...a,width:i,height:i,stroke:l,"stroke-width":Fi(n)||Fi(s)||n===!0||s===!0?Number(r||o||Vn["stroke-width"])*24/Number(i):r||o||Vn["stroke-width"],class:jd("lucide",a.class,...e?[`lucide-${Di(Ud(e))}-icon`,`lucide-${Di(e)}`]:["lucide-icon"])},[...t.map(c=>Tn(...c)),...u.default?[u.default()]:[]]);const Ae=(e,t)=>(n,{slots:s,attrs:r})=>Tn(Bd,{...r,...n,iconNode:t,name:e},s);const Ga=Ae("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);const Ja=Ae("boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);const Xa=Ae("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);const $d=Ae("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);const Qa=Ae("fingerprint-pattern",[["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M2 12a10 10 0 0 1 18-6",key:"ydlgp0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2",key:"1tidbn"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2",key:"1fr1j5"}]]);const Ya=Ae("gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);const Za=Ae("library-big",[["rect",{width:"8",height:"18",x:"3",y:"3",rx:"1",key:"oynpb5"}],["path",{d:"M7 3v18",key:"bbkbws"}],["path",{d:"M20.4 18.9c.2.5-.1 1.1-.6 1.3l-1.9.7c-.5.2-1.1-.1-1.3-.6L11.1 5.1c-.2-.5.1-1.1.6-1.3l1.9-.7c.5-.2 1.1.1 1.3.6Z",key:"1qboyk"}]]);const ec=Ae("list-checks",[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]]);const tc=Ae("list-tree",[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]]);const Vd=Ae("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]);const Hd=Ae("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]);const nc=Ae("network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);const sc=Ae("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]);const qd=Ae("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);const Kd=Ae("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);const rc=Ae("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);const oc=Ae("shield-half",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 22V2",key:"zs6s6o"}]]);const Wd=Ae("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);const ic=Ae("webhook",[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2",key:"q3hayz"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06",key:"1go1hn"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8",key:"qlwsc0"}]]);const zd=Ae("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),Gd=["disabled"],Jd={key:0,class:"animate-spin -ml-1 mr-2 h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},Ui={__name:"Button",props:{variant:{type:String,default:"primary",validator:e=>["primary","secondary","danger","ghost","chip"].includes(e)},size:{type:String,default:"md",validator:e=>["xs","sm","md","lg"].includes(e)},active:{type:Boolean,default:!1},disabled:Boolean,loading:Boolean},setup(e){const t=e,n=ke(()=>{switch(t.size){case"xs":return"h-7 px-2.5 text-xs touch-expand-xs";case"sm":return"h-8 px-3 text-xs touch-expand-sm";case"lg":return"h-12 px-6 text-base";default:return"h-10 px-4 text-sm"}}),s=ke(()=>{switch(t.variant){case"secondary":return"bg-secondary text-secondary-foreground hover:bg-secondary/80 border border-border shadow-sm";case"danger":return"bg-red-600 text-white border border-red-500 hover:bg-red-500 focus:ring-red-500 shadow-sm";case"ghost":return"bg-transparent text-foreground-muted hover:text-foreground hover:bg-surface-hover";case"chip":return t.active?"bg-primary text-primary-foreground border border-primary":"bg-surface text-foreground-muted border border-border hover:text-white hover:border-foreground-muted";default:return"bg-primary text-primary-foreground hover:bg-primary/90 focus:ring-primary shadow-sm border border-transparent"}});return(r,o)=>(re(),_e("button",{class:Dt(["inline-flex items-center justify-center gap-2 rounded-md font-medium transition-colors duration-150 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-background disabled:opacity-50 disabled:cursor-not-allowed",n.value,s.value]),disabled:e.disabled||e.loading},[e.loading?(re(),_e("svg",Jd,[...o[0]||(o[0]=[se("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),se("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])])):We("",!0),va(r.$slots,"default")],10,Gd))}},Xd=fr("confirm",()=>{const e=ee(!1),t=ee(""),n=ee(""),s=ee("Confirm"),r=ee("Cancel"),o=ee(!1),i=ee(!1),l=ee(!1),a=ee(""),u=ee("");let c=null;return{visible:e,title:t,message:n,confirmLabel:s,cancelLabel:r,danger:o,noticeOnly:i,promptMode:l,promptValue:a,promptPlaceholder:u,ask:(g={})=>(t.value=g.title||"Are you sure?",n.value=g.message||"",s.value=g.confirmLabel||"Confirm",r.value=g.cancelLabel||"Cancel",o.value=!!g.danger,i.value=!1,l.value=!1,e.value=!0,new Promise(b=>{c=b})),notify:(g={})=>(t.value=g.title||"Notice",n.value=g.message||"",s.value=g.confirmLabel||"OK",o.value=!!g.danger,i.value=!0,l.value=!1,e.value=!0,new Promise(b=>{c=b})),prompt:(g={})=>(t.value=g.title||"Enter a value",n.value=g.message||"",s.value=g.confirmLabel||"OK",r.value=g.cancelLabel||"Cancel",o.value=!!g.danger,i.value=!1,l.value=!0,a.value=g.defaultValue||"",u.value=g.placeholder||"",e.value=!0,new Promise(b=>{c=b})),settle:g=>{e.value=!1,c&&(l.value?c(g?a.value:null):c(g),c=null),l.value=!1}}}),ji=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"textarea:not([disabled])","select:not([disabled])",'[tabindex]:not([tabindex="-1"])',"audio[controls]","video[controls]","details > summary"].join(",");function lc(e,t){let n=null,s=null,r=null;const o=async()=>{n=document.activeElement instanceof HTMLElement?document.activeElement:null,r=document.getElementById("app"),r&&r.setAttribute("inert",""),await At();const l=e.value;if(!l)return;(l.querySelector("[autofocus]")||l.querySelector(ji))?.focus?.(),s=c=>{if(c.key!=="Tab")return;const f=Array.from(l.querySelectorAll(ji)).filter(g=>!g.hasAttribute("inert")&&g.offsetParent!==null);if(!f.length){c.preventDefault();return}const p=f[0],m=f[f.length-1],d=document.activeElement;c.shiftKey&&d===p?(c.preventDefault(),m.focus()):!c.shiftKey&&d===m&&(c.preventDefault(),p.focus())},document.addEventListener("keydown",s)},i=()=>{s&&(document.removeEventListener("keydown",s),s=null),r&&(r.removeAttribute("inert"),r=null),n&&n.isConnected&&typeof n.focus=="function"&&n.focus(),n=null};ct(t,l=>{l?o():i()},{immediate:!1})}const Qd={class:"flex items-start gap-3"},Yd={class:"flex-1 min-w-0"},Zd={key:0,class:"text-sm text-foreground-muted mt-1 whitespace-pre-line break-words"},eh=["placeholder"],th={class:"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 pt-2"},Bi="confirm-dialog-title",nh={__name:"ConfirmDialog",setup(e){const t=Xd(),n=ee(null),s=ee(null);lc(s,ke(()=>t.visible)),ct(()=>t.visible&&t.promptMode,o=>{o&&At(()=>{const i=n.value;i&&(i.focus(),window.innerWidth<640&&setTimeout(()=>{i.scrollIntoView({block:"center",behavior:"smooth"})},50))})});const r=o=>{t.visible&&(o.key==="Escape"&&t.settle(!1),o.key==="Enter"&&!t.promptMode&&t.settle(!0))};return Mn(()=>window.addEventListener("keydown",r)),hs(()=>window.removeEventListener("keydown",r)),(o,i)=>(re(),qe(xo,{to:"body"},[ae(cr,{name:"fade"},{default:Ct(()=>[oe(t).visible?(re(),_e("div",{key:0,class:"fixed inset-0 z-50 flex items-end sm:items-center justify-center bg-black/60 backdrop-blur-sm pt-safe pb-safe pl-safe pr-safe p-2 sm:p-4",onClick:i[4]||(i[4]=bn(l=>oe(t).settle(!1),["self"])),onKeydown:i[5]||(i[5]=vn(l=>oe(t).settle(!1),["esc"]))},[se("div",{ref_key:"dialogRoot",ref:s,class:"w-full sm:max-w-md bg-background border border-border rounded-t-lg sm:rounded-lg shadow-xl p-5 sm:p-6 space-y-4 max-h-[calc(100dvh-1rem)] overflow-y-auto scrollable",role:"dialog","aria-modal":"true","aria-labelledby":Bi},[se("div",Qd,[oe(t).promptMode?We("",!0):(re(),_e("div",{key:0,class:Dt(["shrink-0 w-9 h-9 rounded-full flex items-center justify-center",oe(t).danger?"bg-red-500/15 text-red-400":"bg-primary/15 text-primary"])},[oe(t).danger?(re(),qe(oe(Wd),{key:0,class:"w-5 h-5"})):(re(),qe(oe($d),{key:1,class:"w-5 h-5"}))],2)),se("div",Yd,[se("h3",{id:Bi,class:"text-sm font-semibold text-white tracking-tight"},rt(oe(t).title),1),oe(t).message?(re(),_e("p",Zd,rt(oe(t).message),1)):We("",!0),oe(t).promptMode?ra((re(),_e("input",{key:1,ref_key:"promptInput",ref:n,"onUpdate:modelValue":i[0]||(i[0]=l=>oe(t).promptValue=l),placeholder:oe(t).promptPlaceholder,type:"text",class:"mt-3 w-full bg-background border border-border rounded-md px-3 py-2 text-base sm:text-sm text-foreground placeholder-foreground-muted/50 transition-colors duration-200 focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onKeydown:i[1]||(i[1]=vn(bn(l=>oe(t).settle(!0),["stop","prevent"]),["enter"]))},null,40,eh)),[[zs,oe(t).promptValue]]):We("",!0)])]),se("div",th,[oe(t).noticeOnly?We("",!0):(re(),qe(Ui,{key:0,variant:"secondary",class:"w-full sm:w-auto",onClick:i[2]||(i[2]=l=>oe(t).settle(!1))},{default:Ct(()=>[qs(rt(oe(t).cancelLabel),1)]),_:1})),ae(Ui,{variant:oe(t).danger?"danger":"primary",class:"w-full sm:w-auto",onClick:i[3]||(i[3]=l=>oe(t).settle(!0))},{default:Ct(()=>[qs(rt(oe(t).confirmLabel),1)]),_:1},8,["variant"])])],512)],32)):We("",!0)]),_:1})]))}},sh={__name:"App",setup(e){return(t,n)=>{const s=Co("router-view");return re(),_e(Ne,null,[ae(s),ae(nh)],64)}}},rh="modulepreload",oh=function(e){return"/web/"+e},$i={},be=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){let a=function(u){return Promise.all(u.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),l=i?.nonce||i?.getAttribute("nonce");r=a(n.map(u=>{if(u=oh(u),u in $i)return;$i[u]=!0;const c=u.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${f}`))return;const p=document.createElement("link");if(p.rel=c?"stylesheet":rh,c||(p.as="script"),p.crossOrigin="",p.href=u,l&&p.setAttribute("nonce",l),document.head.appendChild(p),c)return new Promise((m,d)=>{p.addEventListener("load",m),p.addEventListener("error",()=>d(new Error(`Unable to preload CSS for ${u}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return r.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})};const yn=typeof document<"u";function ac(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ih(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ac(e.default)}const fe=Object.assign;function Ir(e,t){const n={};for(const s in t){const r=t[s];n[s]=dt(r)?r.map(e):e(r)}return n}const ts=()=>{},dt=Array.isArray;function Vi(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const cc=/#/g,lh=/&/g,ah=/\//g,ch=/=/g,uh=/\?/g,uc=/\+/g,fh=/%5B/g,dh=/%5D/g,fc=/%5E/g,hh=/%60/g,dc=/%7B/g,ph=/%7C/g,hc=/%7D/g,mh=/%20/g;function No(e){return e==null?"":encodeURI(""+e).replace(ph,"|").replace(fh,"[").replace(dh,"]")}function gh(e){return No(e).replace(dc,"{").replace(hc,"}").replace(fc,"^")}function no(e){return No(e).replace(uc,"%2B").replace(mh,"+").replace(cc,"%23").replace(lh,"%26").replace(hh,"`").replace(dc,"{").replace(hc,"}").replace(fc,"^")}function yh(e){return no(e).replace(ch,"%3D")}function bh(e){return No(e).replace(cc,"%23").replace(uh,"%3F")}function vh(e){return bh(e).replace(ah,"%2F")}function as(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const _h=/\/$/,wh=e=>e.replace(_h,"");function Nr(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=Rh(s??t,n),{fullPath:s+o+i,path:s,query:r,hash:as(i)}}function Eh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Hi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function xh(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&kn(t.matched[s],n.matched[r])&&pc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function kn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function pc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Sh(e[n],t[n]))return!1;return!0}function Sh(e,t){return dt(e)?qi(e,t):dt(t)?qi(t,e):e?.valueOf()===t?.valueOf()}function qi(e,t){return dt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Rh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const qt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let so=(function(e){return e.pop="pop",e.push="push",e})({}),Lr=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Ah(e){if(!e)if(yn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),wh(e)}const Ch=/^[^#]+#/;function Th(e,t){return e.replace(Ch,"#")+t}function Oh(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const dr=()=>({left:window.scrollX,top:window.scrollY});function kh(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Oh(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ki(e,t){return(history.state?history.state.position-t:-1)+e}const ro=new Map;function Ph(e,t){ro.set(e,t)}function Ih(e){const t=ro.get(e);return ro.delete(e),t}function Nh(e){return typeof e=="string"||e&&typeof e=="object"}function mc(e){return typeof e=="string"||typeof e=="symbol"}let xe=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const gc=Symbol("");xe.MATCHER_NOT_FOUND+"",xe.NAVIGATION_GUARD_REDIRECT+"",xe.NAVIGATION_ABORTED+"",xe.NAVIGATION_CANCELLED+"",xe.NAVIGATION_DUPLICATED+"";function Pn(e,t){return fe(new Error,{type:e,[gc]:!0},t)}function kt(e,t){return e instanceof Error&&gc in e&&(t==null||!!(e.type&t))}const Lh=["params","query","hash"];function Mh(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Lh)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Dh(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&no(r)):[s&&no(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function Fh(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=dt(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Uh=Symbol(""),zi=Symbol(""),hr=Symbol(""),Lo=Symbol(""),oo=Symbol("");function Hn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function zt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const u=p=>{p===!1?a(Pn(xe.NAVIGATION_ABORTED,{from:n,to:t})):p instanceof Error?a(p):Nh(p)?a(Pn(xe.NAVIGATION_GUARD_REDIRECT,{from:t,to:p})):(i&&s.enterCallbacks[r]===i&&typeof p=="function"&&i.push(p),l())},c=o(()=>e.call(s&&s.instances[r],t,n,u));let f=Promise.resolve(c);e.length<3&&(f=f.then(u)),f.catch(p=>a(p))})}function Mr(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(ac(a)){const u=(a.__vccOpts||a)[t];u&&o.push(zt(u,n,s,i,l,r))}else{let u=a();o.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=ih(c)?c.default:c;i.mods[l]=c,i.components[l]=f;const p=(f.__vccOpts||f)[t];return p&&zt(p,n,s,i,l,r)()}))}}return o}function jh(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;ikn(u,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>kn(u,a))||r.push(a))}return[n,s,r]}let Bh=()=>location.protocol+"//"+location.host;function yc(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),Hi(l,"")}return Hi(n,e)+s+r}function $h(e,t,n,s){let r=[],o=[],i=null;const l=({state:p})=>{const m=yc(e,location),d=n.value,g=t.value;let b=0;if(p){if(n.value=m,t.value=p,i&&i===d){i=null;return}b=g?p.position-g.position:0}else s(m);r.forEach(T=>{T(n.value,d,{delta:b,type:so.pop,direction:b?b>0?Lr.forward:Lr.back:Lr.unknown})})};function a(){i=n.value}function u(p){r.push(p);const m=()=>{const d=r.indexOf(p);d>-1&&r.splice(d,1)};return o.push(m),m}function c(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(fe({},p.state,{scroll:dr()}),"")}}function f(){for(const p of o)p();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:a,listen:u,destroy:f}}function Gi(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?dr():null}}function Vh(e){const{history:t,location:n}=window,s={value:yc(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,u,c){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Bh()+e+a;try{t[c?"replaceState":"pushState"](u,"",p),r.value=u}catch(m){console.error(m),n[c?"replace":"assign"](p)}}function i(a,u){o(a,fe({},t.state,Gi(r.value.back,a,r.value.forward,!0),u,{position:r.value.position}),!0),s.value=a}function l(a,u){const c=fe({},r.value,t.state,{forward:a,scroll:dr()});o(c.current,c,!0),o(a,fe({},Gi(s.value,a,null),{position:c.position+1},u),!1),s.value=a}return{location:s,state:r,push:l,replace:i}}function Hh(e){e=Ah(e);const t=Vh(e),n=$h(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=fe({location:"",base:e,go:s,createHref:Th.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let an=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Te=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Te||{});const qh={type:an.Static,value:""},Kh=/[a-zA-Z0-9_]/;function Wh(e){if(!e)return[[]];if(e==="/")return[[qh]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${u}": ${m}`)}let n=Te.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,u="",c="";function f(){u&&(n===Te.Static?o.push({type:an.Static,value:u}):n===Te.Param||n===Te.ParamRegExp||n===Te.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:an.Param,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function p(){u+=a}for(;lt.length?t.length===1&&t[0]===Ve.Static+Ve.Segment?1:-1:0}function bc(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Qh={strict:!1,end:!0,sensitive:!1};function Yh(e,t,n){const s=Jh(Wh(e.path),n),r=fe(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Zh(e,t){const n=[],s=new Map;t=Vi(Qh,t);function r(f){return s.get(f)}function o(f,p,m){const d=!m,g=Yi(f);g.aliasOf=m&&m.record;const b=Vi(t,f),T=[g];if("alias"in f){const E=typeof f.alias=="string"?[f.alias]:f.alias;for(const k of E)T.push(Yi(fe({},g,{components:m?m.record.components:g.components,path:k,aliasOf:m?m.record:g})))}let _,v;for(const E of T){const{path:k}=E;if(p&&k[0]!=="/"){const N=p.record.path,D=N[N.length-1]==="/"?"":"/";E.path=p.record.path+(k&&D+k)}if(_=Yh(E,p,b),m?m.alias.push(_):(v=v||_,v!==_&&v.alias.push(_),d&&f.name&&!Zi(_)&&i(f.name)),vc(_)&&a(_),g.children){const N=g.children;for(let D=0;D{i(v)}:ts}function i(f){if(mc(f)){const p=s.get(f);p&&(s.delete(f),n.splice(n.indexOf(p),1),p.children.forEach(i),p.alias.forEach(i))}else{const p=n.indexOf(f);p>-1&&(n.splice(p,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function a(f){const p=np(f,n);n.splice(p,0,f),f.record.name&&!Zi(f)&&s.set(f.record.name,f)}function u(f,p){let m,d={},g,b;if("name"in f&&f.name){if(m=s.get(f.name),!m)throw Pn(xe.MATCHER_NOT_FOUND,{location:f});b=m.record.name,d=fe(Qi(p.params,m.keys.filter(v=>!v.optional).concat(m.parent?m.parent.keys.filter(v=>v.optional):[]).map(v=>v.name)),f.params&&Qi(f.params,m.keys.map(v=>v.name))),g=m.stringify(d)}else if(f.path!=null)g=f.path,m=n.find(v=>v.re.test(g)),m&&(d=m.parse(g),b=m.record.name);else{if(m=p.name?s.get(p.name):n.find(v=>v.re.test(p.path)),!m)throw Pn(xe.MATCHER_NOT_FOUND,{location:f,currentLocation:p});b=m.record.name,d=fe({},p.params,f.params),g=m.stringify(d)}const T=[];let _=m;for(;_;)T.unshift(_.record),_=_.parent;return{name:b,path:g,params:d,matched:T,meta:tp(T)}}e.forEach(f=>o(f));function c(){n.length=0,s.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:l,getRecordMatcher:r}}function Qi(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Yi(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:ep(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function ep(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Zi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function tp(e){return e.reduce((t,n)=>fe(t,n.meta),{})}function np(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;bc(e,t[o])<0?s=o:n=o+1}const r=sp(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function sp(e){let t=e;for(;t=t.parent;)if(vc(t)&&bc(e,t)===0)return t}function vc({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function el(e){const t=ot(hr),n=ot(Lo),s=ke(()=>{const a=oe(e.to);return t.resolve(a)}),r=ke(()=>{const{matched:a}=s.value,{length:u}=a,c=a[u-1],f=n.matched;if(!c||!f.length)return-1;const p=f.findIndex(kn.bind(null,c));if(p>-1)return p;const m=tl(a[u-2]);return u>1&&tl(c)===m&&f[f.length-1].path!==m?f.findIndex(kn.bind(null,a[u-2])):p}),o=ke(()=>r.value>-1&&ap(n.params,s.value.params)),i=ke(()=>r.value>-1&&r.value===n.matched.length-1&&pc(n.params,s.value.params));function l(a={}){if(lp(a)){const u=t[oe(e.replace)?"replace":"push"](oe(e.to)).catch(ts);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:s,href:ke(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function rp(e){return e.length===1?e[0]:e}const op=So({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:el,setup(e,{slots:t}){const n=cs(el(e)),{options:s}=ot(hr),r=ke(()=>({[nl(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[nl(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&rp(t.default(n));return e.custom?o:Tn("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),ip=op;function lp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ap(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!dt(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function tl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const nl=(e,t,n)=>e??t??n,cp=So({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=ot(oo),r=ke(()=>e.route||s.value),o=ot(zi,0),i=ke(()=>{let u=oe(o);const{matched:c}=r.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),l=ke(()=>r.value.matched[i.value]);Ts(zi,ke(()=>i.value+1)),Ts(Uh,l),Ts(oo,r);const a=ee();return ct(()=>[a.value,l.value,e.name],([u,c,f],[p,m,d])=>{c&&(c.instances[f]=u,m&&m!==c&&u&&u===p&&(c.leaveGuards.size||(c.leaveGuards=m.leaveGuards),c.updateGuards.size||(c.updateGuards=m.updateGuards))),u&&c&&(!m||!kn(c,m)||!p)&&(c.enterCallbacks[f]||[]).forEach(g=>g(u))},{flush:"post"}),()=>{const u=r.value,c=e.name,f=l.value,p=f&&f.components[c];if(!p)return sl(n.default,{Component:p,route:u});const m=f.props[c],d=m?m===!0?u.params:typeof m=="function"?m(u):m:null,b=Tn(p,fe({},d,t,{onVnodeUnmounted:T=>{T.component.isUnmounted&&(f.instances[c]=null)},ref:a}));return sl(n.default,{Component:b,route:u})||b}}});function sl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const up=cp;function fp(e){const t=Zh(e.routes,e),n=e.parseQuery||Dh,s=e.stringifyQuery||Wi,r=e.history,o=Hn(),i=Hn(),l=Hn(),a=Cu(qt);let u=qt;yn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Ir.bind(null,A=>""+A),f=Ir.bind(null,vh),p=Ir.bind(null,as);function m(A,$){let U,K;return mc(A)?(U=t.getRecordMatcher(A),K=$):K=A,t.addRoute(K,U)}function d(A){const $=t.getRecordMatcher(A);$&&t.removeRoute($)}function g(){return t.getRoutes().map(A=>A.record)}function b(A){return!!t.getRecordMatcher(A)}function T(A,$){if($=fe({},$||a.value),typeof A=="string"){const w=Nr(n,A,$.path),S=t.resolve({path:w.path},$),C=r.createHref(w.fullPath);return fe(w,S,{params:p(S.params),hash:as(w.hash),redirectedFrom:void 0,href:C})}let U;if(A.path!=null)U=fe({},A,{path:Nr(n,A.path,$.path).path});else{const w=fe({},A.params);for(const S in w)w[S]==null&&delete w[S];U=fe({},A,{params:f(w)}),$.params=f($.params)}const K=t.resolve(U,$),ie=A.hash||"";K.params=c(p(K.params));const h=Eh(s,fe({},A,{hash:gh(ie),path:K.path})),y=r.createHref(h);return fe({fullPath:h,hash:ie,query:s===Wi?Fh(A.query):A.query||{}},K,{redirectedFrom:void 0,href:y})}function _(A){return typeof A=="string"?Nr(n,A,a.value.path):fe({},A)}function v(A,$){if(u!==A)return Pn(xe.NAVIGATION_CANCELLED,{from:$,to:A})}function E(A){return D(A)}function k(A){return E(fe(_(A),{replace:!0}))}function N(A,$){const U=A.matched[A.matched.length-1];if(U&&U.redirect){const{redirect:K}=U;let ie=typeof K=="function"?K(A,$):K;return typeof ie=="string"&&(ie=ie.includes("?")||ie.includes("#")?ie=_(ie):{path:ie},ie.params={}),fe({query:A.query,hash:A.hash,params:ie.path!=null?{}:A.params},ie)}}function D(A,$){const U=u=T(A),K=a.value,ie=A.state,h=A.force,y=A.replace===!0,w=N(U,K);if(w)return D(fe(_(w),{state:typeof w=="object"?fe({},ie,w.state):ie,force:h,replace:y}),$||U);const S=U;S.redirectedFrom=$;let C;return!h&&xh(s,K,U)&&(C=Pn(xe.NAVIGATION_DUPLICATED,{to:S,from:K}),Ce(K,K,!0,!1)),(C?Promise.resolve(C):H(S,K)).catch(R=>kt(R)?kt(R,xe.NAVIGATION_GUARD_REDIRECT)?R:pt(R):ne(R,S,K)).then(R=>{if(R){if(kt(R,xe.NAVIGATION_GUARD_REDIRECT))return D(fe({replace:y},_(R.to),{state:typeof R.to=="object"?fe({},ie,R.to.state):ie,force:h}),$||S)}else R=L(S,K,!0,y,ie);return Y(S,K,R),R})}function B(A,$){const U=v(A,$);return U?Promise.reject(U):Promise.resolve()}function P(A){const $=lt.values().next().value;return $&&typeof $.runWithContext=="function"?$.runWithContext(A):A()}function H(A,$){let U;const[K,ie,h]=jh(A,$);U=Mr(K.reverse(),"beforeRouteLeave",A,$);for(const w of K)w.leaveGuards.forEach(S=>{U.push(zt(S,A,$))});const y=B.bind(null,A,$);return U.push(y),et(U).then(()=>{U=[];for(const w of o.list())U.push(zt(w,A,$));return U.push(y),et(U)}).then(()=>{U=Mr(ie,"beforeRouteUpdate",A,$);for(const w of ie)w.updateGuards.forEach(S=>{U.push(zt(S,A,$))});return U.push(y),et(U)}).then(()=>{U=[];for(const w of h)if(w.beforeEnter)if(dt(w.beforeEnter))for(const S of w.beforeEnter)U.push(zt(S,A,$));else U.push(zt(w.beforeEnter,A,$));return U.push(y),et(U)}).then(()=>(A.matched.forEach(w=>w.enterCallbacks={}),U=Mr(h,"beforeRouteEnter",A,$,P),U.push(y),et(U))).then(()=>{U=[];for(const w of i.list())U.push(zt(w,A,$));return U.push(y),et(U)}).catch(w=>kt(w,xe.NAVIGATION_CANCELLED)?w:Promise.reject(w))}function Y(A,$,U){l.list().forEach(K=>P(()=>K(A,$,U)))}function L(A,$,U,K,ie){const h=v(A,$);if(h)return h;const y=$===qt,w=yn?history.state:{};U&&(K||y?r.replace(A.fullPath,fe({scroll:y&&w&&w.scroll},ie)):r.push(A.fullPath,ie)),a.value=A,Ce(A,$,U,y),pt()}let Z;function he(){Z||(Z=r.listen((A,$,U)=>{if(!gt.listening)return;const K=T(A),ie=N(K,gt.currentRoute.value);if(ie){D(fe(ie,{replace:!0,force:!0}),K).catch(ts);return}u=K;const h=a.value;yn&&Ph(Ki(h.fullPath,U.delta),dr()),H(K,h).catch(y=>kt(y,xe.NAVIGATION_ABORTED|xe.NAVIGATION_CANCELLED)?y:kt(y,xe.NAVIGATION_GUARD_REDIRECT)?(D(fe(_(y.to),{force:!0}),K).then(w=>{kt(w,xe.NAVIGATION_ABORTED|xe.NAVIGATION_DUPLICATED)&&!U.delta&&U.type===so.pop&&r.go(-1,!1)}).catch(ts),Promise.reject()):(U.delta&&r.go(-U.delta,!1),ne(y,K,h))).then(y=>{y=y||L(K,h,!1),y&&(U.delta&&!kt(y,xe.NAVIGATION_CANCELLED)?r.go(-U.delta,!1):U.type===so.pop&&kt(y,xe.NAVIGATION_ABORTED|xe.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),Y(K,h,y)}).catch(ts)}))}let Ie=Hn(),te=Hn(),Q;function ne(A,$,U){pt(A);const K=te.list();return K.length?K.forEach(ie=>ie(A,$,U)):console.error(A),Promise.reject(A)}function Ze(){return Q&&a.value!==qt?Promise.resolve():new Promise((A,$)=>{Ie.add([A,$])})}function pt(A){return Q||(Q=!A,he(),Ie.list().forEach(([$,U])=>A?U(A):$()),Ie.reset()),A}function Ce(A,$,U,K){const{scrollBehavior:ie}=e;if(!yn||!ie)return Promise.resolve();const h=!U&&Ih(Ki(A.fullPath,0))||(K||!U)&&history.state&&history.state.scroll||null;return At().then(()=>ie(A,$,h)).then(y=>y&&kh(y)).catch(y=>ne(y,A,$))}const Se=A=>r.go(A);let mt;const lt=new Set,gt={currentRoute:a,listening:!0,addRoute:m,removeRoute:d,clearRoutes:t.clearRoutes,hasRoute:b,getRoutes:g,resolve:T,options:e,push:E,replace:k,go:Se,back:()=>Se(-1),forward:()=>Se(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:te.add,isReady:Ze,install(A){A.component("RouterLink",ip),A.component("RouterView",up),A.config.globalProperties.$router=gt,Object.defineProperty(A.config.globalProperties,"$route",{enumerable:!0,get:()=>oe(a)}),yn&&!mt&&a.value===qt&&(mt=!0,E(r.location).catch(K=>{}));const $={};for(const K in qt)Object.defineProperty($,K,{get:()=>a.value[K],enumerable:!0});A.provide(hr,gt),A.provide(Lo,Jl($)),A.provide(oo,a);const U=A.unmount;lt.add(A),A.unmount=function(){lt.delete(A),lt.size<1&&(u=qt,Z&&Z(),Z=null,a.value=qt,mt=!1,Q=!1),U()}}};function et(A){return A.reduce(($,U)=>$.then(()=>P(U)),Promise.resolve())}return gt}function dp(){return ot(hr)}function hp(e){return ot(Lo)}function _c(e,t){return function(){return e.apply(t,arguments)}}const{toString:pp}=Object.prototype,{getPrototypeOf:Mo}=Object,{iterator:pr,toStringTag:wc}=Symbol,mr=(e=>t=>{const n=pp.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),ht=e=>(e=e.toLowerCase(),t=>mr(t)===e),gr=e=>t=>typeof t===e,{isArray:Dn}=Array,In=gr("undefined");function ms(e){return e!==null&&!In(e)&&e.constructor!==null&&!In(e.constructor)&&ze(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ec=ht("ArrayBuffer");function mp(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ec(e.buffer),t}const gp=gr("string"),ze=gr("function"),xc=gr("number"),gs=e=>e!==null&&typeof e=="object",yp=e=>e===!0||e===!1,Is=e=>{if(mr(e)!=="object")return!1;const t=Mo(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(wc in e)&&!(pr in e)},bp=e=>{if(!gs(e)||ms(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},vp=ht("Date"),_p=ht("File"),wp=e=>!!(e&&typeof e.uri<"u"),Ep=e=>e&&typeof e.getParts<"u",xp=ht("Blob"),Sp=ht("FileList"),Rp=e=>gs(e)&&ze(e.pipe);function Ap(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const rl=Ap(),ol=typeof rl.FormData<"u"?rl.FormData:void 0,Cp=e=>{let t;return e&&(ol&&e instanceof ol||ze(e.append)&&((t=mr(e))==="formdata"||t==="object"&&ze(e.toString)&&e.toString()==="[object FormData]"))},Tp=ht("URLSearchParams"),[Op,kp,Pp,Ip]=["ReadableStream","Request","Response","Headers"].map(ht),Np=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function ys(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,r;if(typeof e!="object"&&(e=[e]),Dn(e))for(s=0,r=e.length;s0;)if(r=n[s],t===r.toLowerCase())return r;return null}const cn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Rc=e=>!In(e)&&e!==cn;function io(){const{caseless:e,skipUndefined:t}=Rc(this)&&this||{},n={},s=(r,o)=>{if(o==="__proto__"||o==="constructor"||o==="prototype")return;const i=e&&Sc(n,o)||o;Is(n[i])&&Is(r)?n[i]=io(n[i],r):Is(r)?n[i]=io({},r):Dn(r)?n[i]=r.slice():(!t||!In(r))&&(n[i]=r)};for(let r=0,o=arguments.length;r(ys(t,(r,o)=>{n&&ze(r)?Object.defineProperty(e,o,{value:_c(r,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:s}),e),Mp=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Dp=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Fp=(e,t,n,s)=>{let r,o,i;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),o=r.length;o-- >0;)i=r[o],(!s||s(i,e,t))&&!l[i]&&(t[i]=e[i],l[i]=!0);e=n!==!1&&Mo(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Up=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},jp=e=>{if(!e)return null;if(Dn(e))return e;let t=e.length;if(!xc(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Bp=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Mo(Uint8Array)),$p=(e,t)=>{const s=(e&&e[pr]).call(e);let r;for(;(r=s.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},Vp=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},Hp=ht("HTMLFormElement"),qp=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,r){return s.toUpperCase()+r}),il=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Kp=ht("RegExp"),Ac=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};ys(n,(r,o)=>{let i;(i=t(r,o,e))!==!1&&(s[o]=i||r)}),Object.defineProperties(e,s)},Wp=e=>{Ac(e,(t,n)=>{if(ze(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const s=e[n];if(ze(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},zp=(e,t)=>{const n={},s=r=>{r.forEach(o=>{n[o]=!0})};return Dn(e)?s(e):s(String(e).split(t)),n},Gp=()=>{},Jp=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Xp(e){return!!(e&&ze(e.append)&&e[wc]==="FormData"&&e[pr])}const Qp=e=>{const t=new Array(10),n=(s,r)=>{if(gs(s)){if(t.indexOf(s)>=0)return;if(ms(s))return s;if(!("toJSON"in s)){t[r]=s;const o=Dn(s)?[]:{};return ys(s,(i,l)=>{const a=n(i,r+1);!In(a)&&(o[l]=a)}),t[r]=void 0,o}}return s};return n(e,0)},Yp=ht("AsyncFunction"),Zp=e=>e&&(gs(e)||ze(e))&&ze(e.then)&&ze(e.catch),Cc=((e,t)=>e?setImmediate:t?((n,s)=>(cn.addEventListener("message",({source:r,data:o})=>{r===cn&&o===n&&s.length&&s.shift()()},!1),r=>{s.push(r),cn.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",ze(cn.postMessage)),em=typeof queueMicrotask<"u"?queueMicrotask.bind(cn):typeof process<"u"&&process.nextTick||Cc,tm=e=>e!=null&&ze(e[pr]),x={isArray:Dn,isArrayBuffer:Ec,isBuffer:ms,isFormData:Cp,isArrayBufferView:mp,isString:gp,isNumber:xc,isBoolean:yp,isObject:gs,isPlainObject:Is,isEmptyObject:bp,isReadableStream:Op,isRequest:kp,isResponse:Pp,isHeaders:Ip,isUndefined:In,isDate:vp,isFile:_p,isReactNativeBlob:wp,isReactNative:Ep,isBlob:xp,isRegExp:Kp,isFunction:ze,isStream:Rp,isURLSearchParams:Tp,isTypedArray:Bp,isFileList:Sp,forEach:ys,merge:io,extend:Lp,trim:Np,stripBOM:Mp,inherits:Dp,toFlatObject:Fp,kindOf:mr,kindOfTest:ht,endsWith:Up,toArray:jp,forEachEntry:$p,matchAll:Vp,isHTMLForm:Hp,hasOwnProperty:il,hasOwnProp:il,reduceDescriptors:Ac,freezeMethods:Wp,toObjectSet:zp,toCamelCase:qp,noop:Gp,toFiniteNumber:Jp,findKey:Sc,global:cn,isContextDefined:Rc,isSpecCompliantForm:Xp,toJSONObject:Qp,isAsyncFn:Yp,isThenable:Zp,setImmediate:Cc,asap:em,isIterable:tm};let G=class Tc extends Error{static from(t,n,s,r,o,i){const l=new Tc(t.message,n||t.code,s,r,o);return l.cause=t,l.name=t.name,t.status!=null&&l.status==null&&(l.status=t.status),i&&Object.assign(l,i),l}constructor(t,n,s,r,o){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),s&&(this.config=s),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:x.toJSONObject(this.config),code:this.code,status:this.status}}};G.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";G.ERR_BAD_OPTION="ERR_BAD_OPTION";G.ECONNABORTED="ECONNABORTED";G.ETIMEDOUT="ETIMEDOUT";G.ERR_NETWORK="ERR_NETWORK";G.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";G.ERR_DEPRECATED="ERR_DEPRECATED";G.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";G.ERR_BAD_REQUEST="ERR_BAD_REQUEST";G.ERR_CANCELED="ERR_CANCELED";G.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";G.ERR_INVALID_URL="ERR_INVALID_URL";const nm=null;function lo(e){return x.isPlainObject(e)||x.isArray(e)}function Oc(e){return x.endsWith(e,"[]")?e.slice(0,-2):e}function Dr(e,t,n){return e?e.concat(t).map(function(r,o){return r=Oc(r),!n&&o?"["+r+"]":r}).join(n?".":""):t}function sm(e){return x.isArray(e)&&!e.some(lo)}const rm=x.toFlatObject(x,{},null,function(t){return/^is[A-Z]/.test(t)});function yr(e,t,n){if(!x.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=x.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(g,b){return!x.isUndefined(b[g])});const s=n.metaTokens,r=n.visitor||c,o=n.dots,i=n.indexes,a=(n.Blob||typeof Blob<"u"&&Blob)&&x.isSpecCompliantForm(t);if(!x.isFunction(r))throw new TypeError("visitor must be a function");function u(d){if(d===null)return"";if(x.isDate(d))return d.toISOString();if(x.isBoolean(d))return d.toString();if(!a&&x.isBlob(d))throw new G("Blob is not supported. Use a Buffer instead.");return x.isArrayBuffer(d)||x.isTypedArray(d)?a&&typeof Blob=="function"?new Blob([d]):Buffer.from(d):d}function c(d,g,b){let T=d;if(x.isReactNative(t)&&x.isReactNativeBlob(d))return t.append(Dr(b,g,o),u(d)),!1;if(d&&!b&&typeof d=="object"){if(x.endsWith(g,"{}"))g=s?g:g.slice(0,-2),d=JSON.stringify(d);else if(x.isArray(d)&&sm(d)||(x.isFileList(d)||x.endsWith(g,"[]"))&&(T=x.toArray(d)))return g=Oc(g),T.forEach(function(v,E){!(x.isUndefined(v)||v===null)&&t.append(i===!0?Dr([g],E,o):i===null?g:g+"[]",u(v))}),!1}return lo(d)?!0:(t.append(Dr(b,g,o),u(d)),!1)}const f=[],p=Object.assign(rm,{defaultVisitor:c,convertValue:u,isVisitable:lo});function m(d,g){if(!x.isUndefined(d)){if(f.indexOf(d)!==-1)throw Error("Circular reference detected in "+g.join("."));f.push(d),x.forEach(d,function(T,_){(!(x.isUndefined(T)||T===null)&&r.call(t,T,x.isString(_)?_.trim():_,g,p))===!0&&m(T,g?g.concat(_):[_])}),f.pop()}}if(!x.isObject(e))throw new TypeError("data must be an object");return m(e),t}function ll(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(s){return t[s]})}function Do(e,t){this._pairs=[],e&&yr(e,this,t)}const kc=Do.prototype;kc.append=function(t,n){this._pairs.push([t,n])};kc.toString=function(t){const n=t?function(s){return t.call(this,s,ll)}:ll;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function om(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Pc(e,t,n){if(!t)return e;const s=n&&n.encode||om,r=x.isFunction(n)?{serialize:n}:n,o=r&&r.serialize;let i;if(o?i=o(t,r):i=x.isURLSearchParams(t)?t.toString():new Do(t,r).toString(s),i){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class al{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){x.forEach(this.handlers,function(s){s!==null&&t(s)})}}const Fo={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},im=typeof URLSearchParams<"u"?URLSearchParams:Do,lm=typeof FormData<"u"?FormData:null,am=typeof Blob<"u"?Blob:null,cm={isBrowser:!0,classes:{URLSearchParams:im,FormData:lm,Blob:am},protocols:["http","https","file","blob","url","data"]},Uo=typeof window<"u"&&typeof document<"u",ao=typeof navigator=="object"&&navigator||void 0,um=Uo&&(!ao||["ReactNative","NativeScript","NS"].indexOf(ao.product)<0),fm=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",dm=Uo&&window.location.href||"http://localhost",hm=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Uo,hasStandardBrowserEnv:um,hasStandardBrowserWebWorkerEnv:fm,navigator:ao,origin:dm},Symbol.toStringTag,{value:"Module"})),Be={...hm,...cm};function pm(e,t){return yr(e,new Be.classes.URLSearchParams,{visitor:function(n,s,r,o){return Be.isNode&&x.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function mm(e){return x.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function gm(e){const t={},n=Object.keys(e);let s;const r=n.length;let o;for(s=0;s=n.length;return i=!i&&x.isArray(r)?r.length:i,a?(x.hasOwnProp(r,i)?r[i]=[r[i],s]:r[i]=s,!l):((!r[i]||!x.isObject(r[i]))&&(r[i]=[]),t(n,s,r[i],o)&&x.isArray(r[i])&&(r[i]=gm(r[i])),!l)}if(x.isFormData(e)&&x.isFunction(e.entries)){const n={};return x.forEachEntry(e,(s,r)=>{t(mm(s),r,n,0)}),n}return null}function ym(e,t,n){if(x.isString(e))try{return(t||JSON.parse)(e),x.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const bs={transitional:Fo,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",r=s.indexOf("application/json")>-1,o=x.isObject(t);if(o&&x.isHTMLForm(t)&&(t=new FormData(t)),x.isFormData(t))return r?JSON.stringify(Ic(t)):t;if(x.isArrayBuffer(t)||x.isBuffer(t)||x.isStream(t)||x.isFile(t)||x.isBlob(t)||x.isReadableStream(t))return t;if(x.isArrayBufferView(t))return t.buffer;if(x.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(o){if(s.indexOf("application/x-www-form-urlencoded")>-1)return pm(t,this.formSerializer).toString();if((l=x.isFileList(t))||s.indexOf("multipart/form-data")>-1){const a=this.env&&this.env.FormData;return yr(l?{"files[]":t}:t,a&&new a,this.formSerializer)}}return o||r?(n.setContentType("application/json",!1),ym(t)):t}],transformResponse:[function(t){const n=this.transitional||bs.transitional,s=n&&n.forcedJSONParsing,r=this.responseType==="json";if(x.isResponse(t)||x.isReadableStream(t))return t;if(t&&x.isString(t)&&(s&&!this.responseType||r)){const i=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t,this.parseReviver)}catch(l){if(i)throw l.name==="SyntaxError"?G.from(l,G.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Be.classes.FormData,Blob:Be.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};x.forEach(["delete","get","head","post","put","patch"],e=>{bs.headers[e]={}});const bm=x.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),vm=e=>{const t={};let n,s,r;return e&&e.split(` -`).forEach(function(i){r=i.indexOf(":"),n=i.substring(0,r).trim().toLowerCase(),s=i.substring(r+1).trim(),!(!n||t[n]&&bm[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t},cl=Symbol("internals"),_m=e=>!/[\r\n]/.test(e);function Nc(e,t){if(!(e===!1||e==null)){if(x.isArray(e)){e.forEach(n=>Nc(n,t));return}if(!_m(String(e)))throw new Error(`Invalid character in header content ["${t}"]`)}}function qn(e){return e&&String(e).trim().toLowerCase()}function wm(e){let t=e.length;for(;t>0;){const n=e.charCodeAt(t-1);if(n!==10&&n!==13)break;t-=1}return t===e.length?e:e.slice(0,t)}function Ns(e){return e===!1||e==null?e:x.isArray(e)?e.map(Ns):wm(String(e))}function Em(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const xm=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Fr(e,t,n,s,r){if(x.isFunction(s))return s.call(this,t,n);if(r&&(t=n),!!x.isString(t)){if(x.isString(s))return t.indexOf(s)!==-1;if(x.isRegExp(s))return s.test(t)}}function Sm(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function Rm(e,t){const n=x.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{value:function(r,o,i){return this[s].call(this,t,r,o,i)},configurable:!0})})}let Ge=class{constructor(t){t&&this.set(t)}set(t,n,s){const r=this;function o(l,a,u){const c=qn(a);if(!c)throw new Error("header name must be a non-empty string");const f=x.findKey(r,c);(!f||r[f]===void 0||u===!0||u===void 0&&r[f]!==!1)&&(Nc(l,a),r[f||a]=Ns(l))}const i=(l,a)=>x.forEach(l,(u,c)=>o(u,c,a));if(x.isPlainObject(t)||t instanceof this.constructor)i(t,n);else if(x.isString(t)&&(t=t.trim())&&!xm(t))i(vm(t),n);else if(x.isObject(t)&&x.isIterable(t)){let l={},a,u;for(const c of t){if(!x.isArray(c))throw TypeError("Object iterator must return a key-value pair");l[u=c[0]]=(a=l[u])?x.isArray(a)?[...a,c[1]]:[a,c[1]]:c[1]}i(l,n)}else t!=null&&o(n,t,s);return this}get(t,n){if(t=qn(t),t){const s=x.findKey(this,t);if(s){const r=this[s];if(!n)return r;if(n===!0)return Em(r);if(x.isFunction(n))return n.call(this,r,s);if(x.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=qn(t),t){const s=x.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Fr(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let r=!1;function o(i){if(i=qn(i),i){const l=x.findKey(s,i);l&&(!n||Fr(s,s[l],l,n))&&(delete s[l],r=!0)}}return x.isArray(t)?t.forEach(o):o(t),r}clear(t){const n=Object.keys(this);let s=n.length,r=!1;for(;s--;){const o=n[s];(!t||Fr(this,this[o],o,t,!0))&&(delete this[o],r=!0)}return r}normalize(t){const n=this,s={};return x.forEach(this,(r,o)=>{const i=x.findKey(s,o);if(i){n[i]=Ns(r),delete n[o];return}const l=t?Sm(o):String(o).trim();l!==o&&delete n[o],n[l]=Ns(r),s[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return x.forEach(this,(s,r)=>{s!=null&&s!==!1&&(n[r]=t&&x.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(r=>s.set(r)),s}static accessor(t){const s=(this[cl]=this[cl]={accessors:{}}).accessors,r=this.prototype;function o(i){const l=qn(i);s[l]||(Rm(r,i),s[l]=!0)}return x.isArray(t)?t.forEach(o):o(t),this}};Ge.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);x.reduceDescriptors(Ge.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});x.freezeMethods(Ge);function Ur(e,t){const n=this||bs,s=t||n,r=Ge.from(s.headers);let o=s.data;return x.forEach(e,function(l){o=l.call(n,o,r.normalize(),t?t.status:void 0)}),r.normalize(),o}function Lc(e){return!!(e&&e.__CANCEL__)}let vs=class extends G{constructor(t,n,s){super(t??"canceled",G.ERR_CANCELED,n,s),this.name="CanceledError",this.__CANCEL__=!0}};function Mc(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new G("Request failed with status code "+n.status,[G.ERR_BAD_REQUEST,G.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Am(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Cm(e,t){e=e||10;const n=new Array(e),s=new Array(e);let r=0,o=0,i;return t=t!==void 0?t:1e3,function(a){const u=Date.now(),c=s[o];i||(i=u),n[r]=a,s[r]=u;let f=o,p=0;for(;f!==r;)p+=n[f++],f=f%e;if(r=(r+1)%e,r===o&&(o=(o+1)%e),u-i{n=c,r=null,o&&(clearTimeout(o),o=null),e(...u)};return[(...u)=>{const c=Date.now(),f=c-n;f>=s?i(u,c):(r=u,o||(o=setTimeout(()=>{o=null,i(r)},s-f)))},()=>r&&i(r)]}const Gs=(e,t,n=3)=>{let s=0;const r=Cm(50,250);return Tm(o=>{const i=o.loaded,l=o.lengthComputable?o.total:void 0,a=i-s,u=r(a),c=i<=l;s=i;const f={loaded:i,total:l,progress:l?i/l:void 0,bytes:a,rate:u||void 0,estimated:u&&l&&c?(l-i)/u:void 0,event:o,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(f)},n)},ul=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},fl=e=>(...t)=>x.asap(()=>e(...t)),Om=Be.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Be.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Be.origin),Be.navigator&&/(msie|trident)/i.test(Be.navigator.userAgent)):()=>!0,km=Be.hasStandardBrowserEnv?{write(e,t,n,s,r,o,i){if(typeof document>"u")return;const l=[`${e}=${encodeURIComponent(t)}`];x.isNumber(n)&&l.push(`expires=${new Date(n).toUTCString()}`),x.isString(s)&&l.push(`path=${s}`),x.isString(r)&&l.push(`domain=${r}`),o===!0&&l.push("secure"),x.isString(i)&&l.push(`SameSite=${i}`),document.cookie=l.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function Pm(e){return typeof e!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Im(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Dc(e,t,n){let s=!Pm(t);return e&&(s||n==!1)?Im(e,t):t}const dl=e=>e instanceof Ge?{...e}:e;function hn(e,t){t=t||{};const n={};function s(u,c,f,p){return x.isPlainObject(u)&&x.isPlainObject(c)?x.merge.call({caseless:p},u,c):x.isPlainObject(c)?x.merge({},c):x.isArray(c)?c.slice():c}function r(u,c,f,p){if(x.isUndefined(c)){if(!x.isUndefined(u))return s(void 0,u,f,p)}else return s(u,c,f,p)}function o(u,c){if(!x.isUndefined(c))return s(void 0,c)}function i(u,c){if(x.isUndefined(c)){if(!x.isUndefined(u))return s(void 0,u)}else return s(void 0,c)}function l(u,c,f){if(f in t)return s(u,c);if(f in e)return s(void 0,u)}const a={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:l,headers:(u,c,f)=>r(dl(u),dl(c),f,!0)};return x.forEach(Object.keys({...e,...t}),function(c){if(c==="__proto__"||c==="constructor"||c==="prototype")return;const f=x.hasOwnProp(a,c)?a[c]:r,p=f(e[c],t[c],c);x.isUndefined(p)&&f!==l||(n[c]=p)}),n}const Fc=e=>{const t=hn({},e);let{data:n,withXSRFToken:s,xsrfHeaderName:r,xsrfCookieName:o,headers:i,auth:l}=t;if(t.headers=i=Ge.from(i),t.url=Pc(Dc(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&i.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),x.isFormData(n)){if(Be.hasStandardBrowserEnv||Be.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(x.isFunction(n.getHeaders)){const a=n.getHeaders(),u=["content-type","content-length"];Object.entries(a).forEach(([c,f])=>{u.includes(c.toLowerCase())&&i.set(c,f)})}}if(Be.hasStandardBrowserEnv&&(s&&x.isFunction(s)&&(s=s(t)),s||s!==!1&&Om(t.url))){const a=r&&o&&km.read(o);a&&i.set(r,a)}return t},Nm=typeof XMLHttpRequest<"u",Lm=Nm&&function(e){return new Promise(function(n,s){const r=Fc(e);let o=r.data;const i=Ge.from(r.headers).normalize();let{responseType:l,onUploadProgress:a,onDownloadProgress:u}=r,c,f,p,m,d;function g(){m&&m(),d&&d(),r.cancelToken&&r.cancelToken.unsubscribe(c),r.signal&&r.signal.removeEventListener("abort",c)}let b=new XMLHttpRequest;b.open(r.method.toUpperCase(),r.url,!0),b.timeout=r.timeout;function T(){if(!b)return;const v=Ge.from("getAllResponseHeaders"in b&&b.getAllResponseHeaders()),k={data:!l||l==="text"||l==="json"?b.responseText:b.response,status:b.status,statusText:b.statusText,headers:v,config:e,request:b};Mc(function(D){n(D),g()},function(D){s(D),g()},k),b=null}"onloadend"in b?b.onloadend=T:b.onreadystatechange=function(){!b||b.readyState!==4||b.status===0&&!(b.responseURL&&b.responseURL.indexOf("file:")===0)||setTimeout(T)},b.onabort=function(){b&&(s(new G("Request aborted",G.ECONNABORTED,e,b)),b=null)},b.onerror=function(E){const k=E&&E.message?E.message:"Network Error",N=new G(k,G.ERR_NETWORK,e,b);N.event=E||null,s(N),b=null},b.ontimeout=function(){let E=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const k=r.transitional||Fo;r.timeoutErrorMessage&&(E=r.timeoutErrorMessage),s(new G(E,k.clarifyTimeoutError?G.ETIMEDOUT:G.ECONNABORTED,e,b)),b=null},o===void 0&&i.setContentType(null),"setRequestHeader"in b&&x.forEach(i.toJSON(),function(E,k){b.setRequestHeader(k,E)}),x.isUndefined(r.withCredentials)||(b.withCredentials=!!r.withCredentials),l&&l!=="json"&&(b.responseType=r.responseType),u&&([p,d]=Gs(u,!0),b.addEventListener("progress",p)),a&&b.upload&&([f,m]=Gs(a),b.upload.addEventListener("progress",f),b.upload.addEventListener("loadend",m)),(r.cancelToken||r.signal)&&(c=v=>{b&&(s(!v||v.type?new vs(null,e,b):v),b.abort(),b=null)},r.cancelToken&&r.cancelToken.subscribe(c),r.signal&&(r.signal.aborted?c():r.signal.addEventListener("abort",c)));const _=Am(r.url);if(_&&Be.protocols.indexOf(_)===-1){s(new G("Unsupported protocol "+_+":",G.ERR_BAD_REQUEST,e));return}b.send(o||null)})},Mm=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let s=new AbortController,r;const o=function(u){if(!r){r=!0,l();const c=u instanceof Error?u:this.reason;s.abort(c instanceof G?c:new vs(c instanceof Error?c.message:c))}};let i=t&&setTimeout(()=>{i=null,o(new G(`timeout of ${t}ms exceeded`,G.ETIMEDOUT))},t);const l=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(u=>{u.unsubscribe?u.unsubscribe(o):u.removeEventListener("abort",o)}),e=null)};e.forEach(u=>u.addEventListener("abort",o));const{signal:a}=s;return a.unsubscribe=()=>x.asap(l),a}},Dm=function*(e,t){let n=e.byteLength;if(n{const r=Fm(e,t);let o=0,i,l=a=>{i||(i=!0,s&&s(a))};return new ReadableStream({async pull(a){try{const{done:u,value:c}=await r.next();if(u){l(),a.close();return}let f=c.byteLength;if(n){let p=o+=f;n(p)}a.enqueue(new Uint8Array(c))}catch(u){throw l(u),u}},cancel(a){return l(a),r.return()}},{highWaterMark:2})},pl=64*1024,{isFunction:Cs}=x,jm=(({Request:e,Response:t})=>({Request:e,Response:t}))(x.global),{ReadableStream:ml,TextEncoder:gl}=x.global,yl=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Bm=e=>{e=x.merge.call({skipUndefined:!0},jm,e);const{fetch:t,Request:n,Response:s}=e,r=t?Cs(t):typeof fetch=="function",o=Cs(n),i=Cs(s);if(!r)return!1;const l=r&&Cs(ml),a=r&&(typeof gl=="function"?(d=>g=>d.encode(g))(new gl):async d=>new Uint8Array(await new n(d).arrayBuffer())),u=o&&l&&yl(()=>{let d=!1;const g=new ml,b=new n(Be.origin,{body:g,method:"POST",get duplex(){return d=!0,"half"}}).headers.has("Content-Type");return g.cancel(),d&&!b}),c=i&&l&&yl(()=>x.isReadableStream(new s("").body)),f={stream:c&&(d=>d.body)};r&&["text","arrayBuffer","blob","formData","stream"].forEach(d=>{!f[d]&&(f[d]=(g,b)=>{let T=g&&g[d];if(T)return T.call(g);throw new G(`Response type '${d}' is not supported`,G.ERR_NOT_SUPPORT,b)})});const p=async d=>{if(d==null)return 0;if(x.isBlob(d))return d.size;if(x.isSpecCompliantForm(d))return(await new n(Be.origin,{method:"POST",body:d}).arrayBuffer()).byteLength;if(x.isArrayBufferView(d)||x.isArrayBuffer(d))return d.byteLength;if(x.isURLSearchParams(d)&&(d=d+""),x.isString(d))return(await a(d)).byteLength},m=async(d,g)=>{const b=x.toFiniteNumber(d.getContentLength());return b??p(g)};return async d=>{let{url:g,method:b,data:T,signal:_,cancelToken:v,timeout:E,onDownloadProgress:k,onUploadProgress:N,responseType:D,headers:B,withCredentials:P="same-origin",fetchOptions:H}=Fc(d),Y=t||fetch;D=D?(D+"").toLowerCase():"text";let L=Mm([_,v&&v.toAbortSignal()],E),Z=null;const he=L&&L.unsubscribe&&(()=>{L.unsubscribe()});let Ie;try{if(N&&u&&b!=="get"&&b!=="head"&&(Ie=await m(B,T))!==0){let Ce=new n(g,{method:"POST",body:T,duplex:"half"}),Se;if(x.isFormData(T)&&(Se=Ce.headers.get("content-type"))&&B.setContentType(Se),Ce.body){const[mt,lt]=ul(Ie,Gs(fl(N)));T=hl(Ce.body,pl,mt,lt)}}x.isString(P)||(P=P?"include":"omit");const te=o&&"credentials"in n.prototype,Q={...H,signal:L,method:b.toUpperCase(),headers:B.normalize().toJSON(),body:T,duplex:"half",credentials:te?P:void 0};Z=o&&new n(g,Q);let ne=await(o?Y(Z,H):Y(g,Q));const Ze=c&&(D==="stream"||D==="response");if(c&&(k||Ze&&he)){const Ce={};["status","statusText","headers"].forEach(gt=>{Ce[gt]=ne[gt]});const Se=x.toFiniteNumber(ne.headers.get("content-length")),[mt,lt]=k&&ul(Se,Gs(fl(k),!0))||[];ne=new s(hl(ne.body,pl,mt,()=>{lt&<(),he&&he()}),Ce)}D=D||"text";let pt=await f[x.findKey(f,D)||"text"](ne,d);return!Ze&&he&&he(),await new Promise((Ce,Se)=>{Mc(Ce,Se,{data:pt,headers:Ge.from(ne.headers),status:ne.status,statusText:ne.statusText,config:d,request:Z})})}catch(te){throw he&&he(),te&&te.name==="TypeError"&&/Load failed|fetch/i.test(te.message)?Object.assign(new G("Network Error",G.ERR_NETWORK,d,Z,te&&te.response),{cause:te.cause||te}):G.from(te,te&&te.code,d,Z,te&&te.response)}}},$m=new Map,Uc=e=>{let t=e&&e.env||{};const{fetch:n,Request:s,Response:r}=t,o=[s,r,n];let i=o.length,l=i,a,u,c=$m;for(;l--;)a=o[l],u=c.get(a),u===void 0&&c.set(a,u=l?new Map:Bm(t)),c=u;return u};Uc();const jo={http:nm,xhr:Lm,fetch:{get:Uc}};x.forEach(jo,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const bl=e=>`- ${e}`,Vm=e=>x.isFunction(e)||e===null||e===!1;function Hm(e,t){e=x.isArray(e)?e:[e];const{length:n}=e;let s,r;const o={};for(let i=0;i`adapter ${a} `+(u===!1?"is not supported by the environment":"is not available in the build"));let l=n?i.length>1?`since : -`+i.map(bl).join(` -`):" "+bl(i[0]):"as no adapter specified";throw new G("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return r}const jc={getAdapter:Hm,adapters:jo};function jr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new vs(null,e)}function vl(e){return jr(e),e.headers=Ge.from(e.headers),e.data=Ur.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),jc.getAdapter(e.adapter||bs.adapter,e)(e).then(function(s){return jr(e),s.data=Ur.call(e,e.transformResponse,s),s.headers=Ge.from(s.headers),s},function(s){return Lc(s)||(jr(e),s&&s.response&&(s.response.data=Ur.call(e,e.transformResponse,s.response),s.response.headers=Ge.from(s.response.headers))),Promise.reject(s)})}const Bc="1.15.0",br={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{br[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const _l={};br.transitional=function(t,n,s){function r(o,i){return"[Axios v"+Bc+"] Transitional option '"+o+"'"+i+(s?". "+s:"")}return(o,i,l)=>{if(t===!1)throw new G(r(i," has been removed"+(n?" in "+n:"")),G.ERR_DEPRECATED);return n&&!_l[i]&&(_l[i]=!0,console.warn(r(i," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,i,l):!0}};br.spelling=function(t){return(n,s)=>(console.warn(`${s} is likely a misspelling of ${t}`),!0)};function qm(e,t,n){if(typeof e!="object")throw new G("options must be an object",G.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let r=s.length;for(;r-- >0;){const o=s[r],i=t[o];if(i){const l=e[o],a=l===void 0||i(l,o,e);if(a!==!0)throw new G("option "+o+" must be "+a,G.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new G("Unknown option "+o,G.ERR_BAD_OPTION)}}const Ls={assertOptions:qm,validators:br},nt=Ls.validators;let dn=class{constructor(t){this.defaults=t||{},this.interceptors={request:new al,response:new al}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=(()=>{if(!r.stack)return"";const i=r.stack.indexOf(` -`);return i===-1?"":r.stack.slice(i+1)})();try{if(!s.stack)s.stack=o;else if(o){const i=o.indexOf(` -`),l=i===-1?-1:o.indexOf(` -`,i+1),a=l===-1?"":o.slice(l+1);String(s.stack).endsWith(a)||(s.stack+=` -`+o)}}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=hn(this.defaults,n);const{transitional:s,paramsSerializer:r,headers:o}=n;s!==void 0&&Ls.assertOptions(s,{silentJSONParsing:nt.transitional(nt.boolean),forcedJSONParsing:nt.transitional(nt.boolean),clarifyTimeoutError:nt.transitional(nt.boolean),legacyInterceptorReqResOrdering:nt.transitional(nt.boolean)},!1),r!=null&&(x.isFunction(r)?n.paramsSerializer={serialize:r}:Ls.assertOptions(r,{encode:nt.function,serialize:nt.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Ls.assertOptions(n,{baseUrl:nt.spelling("baseURL"),withXsrfToken:nt.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&x.merge(o.common,o[n.method]);o&&x.forEach(["delete","get","head","post","put","patch","common"],d=>{delete o[d]}),n.headers=Ge.concat(i,o);const l=[];let a=!0;this.interceptors.request.forEach(function(g){if(typeof g.runWhen=="function"&&g.runWhen(n)===!1)return;a=a&&g.synchronous;const b=n.transitional||Fo;b&&b.legacyInterceptorReqResOrdering?l.unshift(g.fulfilled,g.rejected):l.push(g.fulfilled,g.rejected)});const u=[];this.interceptors.response.forEach(function(g){u.push(g.fulfilled,g.rejected)});let c,f=0,p;if(!a){const d=[vl.bind(this),void 0];for(d.unshift(...l),d.push(...u),p=d.length,c=Promise.resolve(n);f{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](r);s._listeners=null}),this.promise.then=r=>{let o;const i=new Promise(l=>{s.subscribe(l),o=l}).then(r);return i.cancel=function(){s.unsubscribe(o)},i},t(function(o,i,l){s.reason||(s.reason=new vs(o,i,l),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new $c(function(r){t=r}),cancel:t}}};function Wm(e){return function(n){return e.apply(null,n)}}function zm(e){return x.isObject(e)&&e.isAxiosError===!0}const co={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(co).forEach(([e,t])=>{co[t]=e});function Vc(e){const t=new dn(e),n=_c(dn.prototype.request,t);return x.extend(n,dn.prototype,t,{allOwnKeys:!0}),x.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return Vc(hn(e,r))},n}const Ee=Vc(bs);Ee.Axios=dn;Ee.CanceledError=vs;Ee.CancelToken=Km;Ee.isCancel=Lc;Ee.VERSION=Bc;Ee.toFormData=yr;Ee.AxiosError=G;Ee.Cancel=Ee.CanceledError;Ee.all=function(t){return Promise.all(t)};Ee.spread=Wm;Ee.isAxiosError=zm;Ee.mergeConfig=hn;Ee.AxiosHeaders=Ge;Ee.formToJSON=e=>Ic(x.isHTMLForm(e)?new FormData(e):e);Ee.getAdapter=jc.getAdapter;Ee.HttpStatusCode=co;Ee.default=Ee;const{Axios:jg,AxiosError:Bg,CanceledError:$g,isCancel:Vg,CancelToken:Hg,VERSION:qg,all:Kg,Cancel:Wg,isAxiosError:zg,spread:Gg,toFormData:Jg,AxiosHeaders:Xg,HttpStatusCode:Qg,formToJSON:Yg,getAdapter:Zg,mergeConfig:ey}=Ee,rn=Ee.create({baseURL:"",timeout:3e4,withCredentials:!0,headers:{"Content-Type":"application/json"}}),Gm=12;try{localStorage.removeItem("orva.hasUser")}catch{}const Hc=fr("auth",()=>{const e=ee(null),t=ee(!1),n=ee(!1),s=ee(null),r=ee(null),o=ee(!1),i=ee(0),l=_=>{s.value=_},a=async(_,v)=>{n.value=!0;try{const E=await rn.post("/api/v1/auth/login",{username:_,password:v});return e.value=E.data.user,t.value=!0,l(!0),{success:!0}}catch(E){return{success:!1,error:E.response?.data?.error?.message||"Login failed"}}finally{n.value=!1}},u=async(_,v)=>{n.value=!0;try{const E=await rn.post("/api/v1/auth/onboard",{username:_,password:v});return e.value=E.data.user,t.value=!0,l(!0),{success:!0}}catch(E){return{success:!1,error:E.response?.data?.error?.message||"Setup failed"}}finally{n.value=!1}},c=async()=>{try{await rn.post("/api/v1/auth/logout")}catch{}e.value=null,t.value=!1},f=async({force:_=!1}={})=>{if(!_&&s.value!==null)return s.value;try{const v=await rn.get("/api/v1/auth/status");return l(!!v.data.has_user),s.value}catch{return s.value===null&&l(!0),s.value}},p=async()=>{try{const _=await rn.get("/api/v1/auth/me");return e.value=_.data,t.value=!0,l(!0),r.value=_.data.expires_at||null,!0}catch{return e.value=null,t.value=!1,r.value=null,!1}},m=async()=>{o.value=!0;try{const _=await rn.post("/api/v1/auth/refresh");return r.value=_.data.expires_at||null,{success:!0}}catch(_){return t.value=!1,r.value=null,{success:!1,error:_.response?.data?.error?.message||"Refresh failed"}}finally{o.value=!1}},d=ke(()=>r.value?(new Date(r.value).getTime()-Date.now())/1e3:null),g=ke(()=>{if(!t.value)return!1;const _=d.value;return _==null||_<=0||Date.now(){i.value=Date.now()+3600*1e3},changePassword:async(_,v)=>{await rn.post("/api/v1/auth/change-password",{old_password:_,new_password:v})}}}),qc=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Jm={},Xm={viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"text-primary"};function Qm(e,t){return re(),_e("svg",Xm,[...t[0]||(t[0]=[se("rect",{width:"32",height:"32",rx:"8",fill:"currentColor"},null,-1),se("text",{x:"16",y:"21","font-family":"'Inter', system-ui, sans-serif","font-size":"13","font-weight":"700",fill:"white","text-anchor":"middle","letter-spacing":"-0.5"}," f(x) ",-1)])])}const wl=qc(Jm,[["render",Qm]]),Ym={class:"lg:hidden fixed top-0 inset-x-0 h-14 bg-background border-b border-border z-30 flex items-center justify-between px-4 pt-safe pl-safe pr-safe"},Zm={class:"flex items-center gap-2 text-white font-mono"},eg=["aria-label","aria-expanded"],tg={class:"h-16 flex items-center px-6 border-b border-border"},ng={class:"flex items-center gap-3 text-white font-mono tracking-tight text-lg"},sg={class:"flex-1 p-4 space-y-1 overflow-y-auto scrollable"},rg={__name:"Sidebar",setup(e){const t=hp(),n=ee(!1),s=ee(null),r=ee(null);ct(()=>t.fullPath,()=>{n.value=!1}),ct(n,async m=>{await At(),m?s.value?.querySelector("a[href]")?.focus?.():s.value?.contains(document.activeElement)&&r.value?.focus?.()});let o=0,i=0,l=!1;const a=m=>{if(window.innerWidth>=1024||!n.value)return;const d=m.touches[0];o=d.clientX,i=d.clientY,l=!0},u=m=>{if(!l)return;const d=m.touches[0],g=d.clientX-o,b=Math.abs(d.clientY-i);g<-60&&b<40&&(n.value=!1,l=!1)},c=()=>{l=!1},f=[{path:"/",label:"Overview",icon:Ya},{path:"/ai",label:"Chat",icon:Hd},{path:"/functions",label:"Functions",icon:Ja},{path:"/cron",label:"Schedules",icon:Xa},{path:"/jobs",label:"Jobs",icon:ec},{path:"/activity",label:"Activity",icon:Ga},{path:"/invocations",label:"Invocations",icon:tc},{path:"/traces",label:"Traces",icon:nc},{path:"/api-keys",label:"Keys",icon:Qa},{path:"/channels",label:"Channels",icon:sc},{path:"/webhooks",label:"Webhooks",icon:ic},{path:"/firewall",label:"Firewall",icon:oc},{path:"/settings",label:"Settings",icon:rc},{path:"/docs",label:"Docs",icon:Za}],p=m=>m==="/"?t.path==="/":t.path.startsWith(m);return(m,d)=>{const g=Co("router-link");return re(),_e(Ne,null,[se("header",Ym,[se("div",Zm,[ae(wl,{class:"w-6 h-6"}),d[3]||(d[3]=se("span",{class:"font-bold tracking-tight"},"Orva",-1))]),se("button",{ref_key:"toggleBtn",ref:r,class:"p-2 rounded-md text-foreground-muted hover:text-white hover:bg-surface transition-colors touch-expand-iconbtn","aria-label":n.value?"Close menu":"Open menu","aria-expanded":n.value,"aria-controls":"primary-navigation",onClick:d[0]||(d[0]=b=>n.value=!n.value)},[n.value?(re(),qe(oe(zd),{key:1,class:"w-5 h-5"})):(re(),qe(oe(Vd),{key:0,class:"w-5 h-5"}))],8,eg)]),ae(cr,{name:"fade"},{default:Ct(()=>[n.value?(re(),_e("div",{key:0,class:"lg:hidden fixed inset-0 bg-black/50 z-30 backdrop-blur-sm",onClick:d[1]||(d[1]=b=>n.value=!1)})):We("",!0)]),_:1}),se("aside",{id:"primary-navigation",ref_key:"drawerEl",ref:s,class:Dt(["bg-background border-r border-border flex flex-col h-full shrink-0 z-40 w-64 lg:w-52 fixed inset-y-0 left-0 transform transition-transform duration-150 ease-out lg:static lg:translate-x-0 lg:transform-none lg:transition-none pt-safe pb-safe pl-safe",n.value?"translate-x-0":"-translate-x-full lg:translate-x-0"]),onTouchstart:a,onTouchmove:u,onTouchend:c},[se("div",tg,[se("div",ng,[ae(wl,{class:"w-8 h-8"}),d[4]||(d[4]=se("span",{class:"font-bold tracking-tight text-white"},"Orva",-1))])]),se("nav",sg,[(re(),_e(Ne,null,Wr(f,b=>ae(g,{key:b.path,to:b.path,class:Dt(["flex items-center gap-3 px-3 py-2.5 rounded-md text-sm transition-colors duration-150 group font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",p(b.path)?"text-white bg-primary/15":"text-foreground-muted hover:text-white hover:bg-surface-hover"]),onClick:d[2]||(d[2]=T=>n.value=!1)},{default:Ct(()=>[(re(),qe(To(b.icon),{class:Dt(["w-4 h-4 transition-colors",p(b.path)?"text-white":"text-foreground-muted group-hover:text-white"])},null,8,["class"])),se("span",null,rt(b.label),1)]),_:2},1032,["to","class"])),64))])],34)],64)}}},og={key:0,class:"fixed z-50 bg-background border border-border shadow-lg rounded-lg p-4 flex items-start gap-3 inset-x-2 bottom-2 max-w-sm mx-auto pb-safe sm:inset-x-auto sm:bottom-6 sm:right-6 sm:mx-0 sm:pb-4"},ig={class:"flex-1 min-w-0"},lg={key:0,class:"text-sm font-medium text-white mb-0.5"},ag={class:"text-xs text-foreground-muted"},cg={class:"flex flex-col gap-2 shrink-0"},ug=["disabled"],fg={__name:"Toast",props:{visible:{type:Boolean,default:!1},title:{type:String,default:""},actionLabel:{type:String,default:""},actionLoading:{type:Boolean,default:!1},dismissible:{type:Boolean,default:!0}},emits:["action","dismiss"],setup(e){return(t,n)=>(re(),qe(xo,{to:"body"},[ae(cr,{name:"toast"},{default:Ct(()=>[e.visible?(re(),_e("div",og,[se("div",ig,[e.title?(re(),_e("div",lg,rt(e.title),1)):We("",!0),se("div",ag,[va(t.$slots,"default",{},void 0,!0)])]),se("div",cg,[e.actionLabel?(re(),_e("button",{key:0,class:"px-3 py-1 rounded text-xs font-medium bg-white text-black hover:bg-foreground-muted transition-colors",disabled:e.actionLoading,onClick:n[0]||(n[0]=s=>t.$emit("action"))},rt(e.actionLoading?"…":e.actionLabel),9,ug)):We("",!0),e.dismissible?(re(),_e("button",{key:1,class:"text-foreground-muted hover:text-white text-xs",onClick:n[1]||(n[1]=s=>t.$emit("dismiss"))}," Dismiss ")):We("",!0)])])):We("",!0)]),_:3})]))}},dg=qc(fg,[["__scopeId","data-v-64a1b6e0"]]),hg={class:"flex items-center gap-2 px-4 py-3 border-b border-border"},pg=["aria-selected","onClick","onMouseenter"],mg={class:"flex-1 truncate"},gg={key:0,class:"hidden sm:inline-flex items-center gap-1 text-[10px] font-mono text-foreground-muted"},yg={key:0,class:"px-4 py-6 text-center text-sm text-foreground-muted"},bg=800,vg={__name:"CommandPalette",setup(e,{expose:t}){const n=dp(),s=ee(!1),r=ee(""),o=ee(0),i=ee(null),l=ee(null),a=ee(null);lc(a,s);const u=[{id:"fn-new",label:"New function",icon:qd,action:()=>n.push("/functions/new"),shortcut:["c","n"]},{id:"go-fns",label:"Functions",icon:Ja,action:()=>n.push("/functions"),shortcut:["g","f"]},{id:"go-inv",label:"Invocations",icon:tc,action:()=>n.push("/invocations"),shortcut:["g","i"]},{id:"go-jobs",label:"Jobs",icon:ec,action:()=>n.push("/jobs"),shortcut:["g","j"]},{id:"go-cron",label:"Schedules",icon:Xa,action:()=>n.push("/cron")},{id:"go-activity",label:"Activity",icon:Ga,action:()=>n.push("/activity")},{id:"go-traces",label:"Traces",icon:nc,action:()=>n.push("/traces")},{id:"go-keys",label:"API Keys",icon:Qa,action:()=>n.push("/api-keys")},{id:"go-channels",label:"Channels",icon:sc,action:()=>n.push("/channels")},{id:"go-hooks",label:"Webhooks",icon:ic,action:()=>n.push("/webhooks")},{id:"go-fw",label:"Firewall",icon:oc,action:()=>n.push("/firewall")},{id:"go-settings",label:"Settings",icon:rc,action:()=>n.push("/settings")},{id:"go-docs",label:"Docs",icon:Za,action:()=>n.push("/docs")},{id:"go-overview",label:"Overview",icon:Ya,action:()=>n.push("/")}],c=ke(()=>{const v=r.value.trim().toLowerCase();return v?u.filter(E=>E.label.toLowerCase().includes(v)):u});ct(c,()=>{o.value=0});const f=v=>{const E=c.value.length;E&&(o.value=(o.value+v+E)%E,At(()=>{l.value?.querySelectorAll('li[role="option"]')[o.value]?.scrollIntoView?.({block:"nearest"})}))},p=v=>{v&&(m(),At(()=>v.action()))},m=()=>{s.value=!1,r.value="",o.value=0},d=()=>{s.value=!0,At(()=>i.value?.focus())};let g="",b=null;const T=v=>{if(!v)return!1;const E=v.tagName;return!!(E==="INPUT"||E==="TEXTAREA"||E==="SELECT"||v.isContentEditable)},_=v=>{if((v.metaKey||v.ctrlKey)&&v.key.toLowerCase()==="k"){v.preventDefault(),s.value?m():d();return}if((v.metaKey||v.ctrlKey)&&v.key.toLowerCase()==="s"&&window.location.pathname.includes("/functions/")){v.preventDefault(),window.dispatchEvent(new CustomEvent("orva:deploy"));return}if(v.metaKey||v.ctrlKey||v.altKey||T(document.activeElement))return;if(!g){if(v.key==="g"||v.key==="c"){g=v.key,clearTimeout(b),b=setTimeout(()=>{g=""},bg);return}return}const E=g+v.key;g="",clearTimeout(b);const k=u.find(N=>N.shortcut&&N.shortcut.join("")===E);k&&(v.preventDefault(),k.action())};return Mn(()=>{window.addEventListener("keydown",_)}),hs(()=>{window.removeEventListener("keydown",_),clearTimeout(b)}),t({show:d,close:m}),(v,E)=>(re(),qe(xo,{to:"body"},[ae(cr,{name:"fade"},{default:Ct(()=>[s.value?(re(),_e("div",{key:0,class:"fixed inset-0 z-50 flex items-start justify-center bg-black/60 backdrop-blur-sm pt-[10vh] sm:pt-[15vh] px-4",onClick:bn(m,["self"])},[se("div",{ref_key:"dialogRoot",ref:a,class:"w-full max-w-lg bg-background border border-border rounded-lg shadow-xl overflow-hidden",role:"dialog","aria-modal":"true","aria-labelledby":"command-palette-label"},[se("div",hg,[ae(oe(Kd),{class:"w-4 h-4 text-foreground-muted shrink-0"}),E[4]||(E[4]=se("span",{id:"command-palette-label",class:"sr-only"},"Command palette",-1)),ra(se("input",{ref_key:"searchInput",ref:i,"onUpdate:modelValue":E[0]||(E[0]=k=>r.value=k),type:"text",placeholder:"Search routes, actions…",class:"flex-1 bg-transparent border-0 text-base sm:text-sm text-white placeholder-foreground-muted focus:outline-none",onKeydown:[E[1]||(E[1]=vn(bn(k=>f(1),["prevent"]),["down"])),E[2]||(E[2]=vn(bn(k=>f(-1),["prevent"]),["up"])),E[3]||(E[3]=vn(bn(k=>p(c.value[o.value]),["prevent"]),["enter"])),vn(m,["esc"])]},null,544),[[zs,r.value]]),E[5]||(E[5]=se("kbd",{class:"hidden sm:inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-foreground-muted bg-surface border border-border"},"esc",-1))]),se("ul",{ref_key:"listRef",ref:l,class:"max-h-[60dvh] overflow-y-auto scrollable py-1",role:"listbox"},[(re(!0),_e(Ne,null,Wr(c.value,(k,N)=>(re(),_e("li",{key:k.id,role:"option","aria-selected":N===o.value,class:Dt(["flex items-center gap-3 px-4 py-2.5 min-h-[44px] text-base sm:text-sm cursor-pointer",N===o.value?"bg-primary/15 text-white":"text-foreground hover:bg-surface-hover"]),onClick:D=>p(k),onMouseenter:D=>o.value=N},[(re(),qe(To(k.icon),{class:"w-4 h-4 shrink-0 text-foreground-muted"})),se("span",mg,rt(k.label),1),k.shortcut?(re(),_e("span",gg,[(re(!0),_e(Ne,null,Wr(k.shortcut,D=>(re(),_e("kbd",{key:D,class:"px-1.5 py-0.5 rounded bg-surface border border-border"},rt(D),1))),128))])):We("",!0)],42,pg))),128)),c.value.length?We("",!0):(re(),_e("li",yg,' Nothing matches "'+rt(r.value)+'". ',1))],512),E[6]||(E[6]=se("div",{class:"px-4 py-2 border-t border-border bg-surface/40 flex items-center justify-between text-[10px] text-foreground-muted"},[se("span",{class:"flex items-center gap-2"},[se("kbd",{class:"px-1.5 py-0.5 rounded font-mono bg-surface border border-border"},"↑↓"),se("span",null,"navigate")]),se("span",{class:"flex items-center gap-2"},[se("kbd",{class:"px-1.5 py-0.5 rounded font-mono bg-surface border border-border"},"↵"),se("span",null,"activate")])],-1))],512)])):We("",!0)]),_:1})]))}};function Kc(){return localStorage.getItem("orva_api_key")||""}const V=Ee.create({baseURL:"/api/v1",timeout:6e4,withCredentials:!0,headers:{"Content-Type":"application/json"}});V.interceptors.request.use(e=>{const t=Kc();return t&&(e.headers["X-Orva-API-Key"]=t),e});V.interceptors.response.use(e=>e,e=>(e.response?console.error("API Error:",e.response.data):e.request&&console.error("Network Error:",e.message),Promise.reject(e)));const Wc=Ee.create({baseURL:"/fn",timeout:6e4,withCredentials:!0,headers:{"Content-Type":"application/json"}});Wc.interceptors.request.use(e=>{const t=Kc();return t&&(e.headers["X-Orva-API-Key"]=t),e});const _g=()=>V.get("/system/health"),wg=e=>V.get("/functions",{params:e}),ty=e=>V.get(`/functions/${e}`),ny=e=>V.get(`/functions/${e}/source`),sy=()=>V.get("/routes"),ry=(e,t,n="*")=>V.post("/routes",{path:e,function_id:t,methods:n}),oy=e=>V.delete("/routes",{params:{path:e}}),iy=(e,{method:t="POST",path:n="/",headers:s={},body:r=""}={})=>{let i=`/${e.replace(/^fn_/,"")}`;n&&n!=="/"&&(i+=n.startsWith("/")?n:`/${n}`);const l={url:i,method:t,headers:{...s},responseType:"text",transformRequest:[u=>u]},a=(t||"POST").toUpperCase();return r&&a!=="GET"&&a!=="HEAD"&&(l.data=r),Wc.request(l)},Eg=e=>V.get("/executions",{params:e}),ly=e=>V.get(`/executions/${e}`),ay=e=>V.get(`/executions/${e}/logs`),cy=e=>V.get(`/executions/${e}/request`),uy=e=>V.post(`/executions/${e}/replay`,null,{responseType:"text"}),fy=e=>V.get("/activity",{params:e}),dy=(e,t)=>V.get(`/functions/${encodeURIComponent(e)}/kv`,{params:t}),hy=(e,t,n)=>V.put(`/functions/${encodeURIComponent(e)}/kv/${encodeURIComponent(t)}`,n),py=(e,t)=>V.delete(`/functions/${encodeURIComponent(e)}/kv/${encodeURIComponent(t)}`),my=e=>V.get(`/functions/${encodeURIComponent(e)}/fixtures`),gy=(e,t,n)=>V.put(`/functions/${encodeURIComponent(e)}/fixtures/${encodeURIComponent(t)}`,n),yy=(e,t)=>V.delete(`/functions/${encodeURIComponent(e)}/fixtures/${encodeURIComponent(t)}`),by=()=>V.get("/keys"),vy=e=>V.post("/keys",e),_y=e=>V.delete(`/keys/${e}`),wy=()=>V.get("/oauth/connected-apps"),Ey=e=>V.delete(`/oauth/connected-apps/${e}`),xy=()=>V.get("/auth/sessions"),Sy=e=>V.delete(`/auth/sessions/${e}`),Ry=()=>V.get("/channels"),Ay=e=>V.post("/channels",e),Cy=e=>V.post(`/channels/${e}/rotate`),Ty=e=>V.delete(`/channels/${e}`),xg=()=>V.get("/system/metrics.json"),Oy=e=>V.get(`/deployments/${e}`),ky=(e,t=0,n=200)=>V.get(`/deployments/${e}/logs`,{params:{from:t,limit:n}}),Py=(e,t=50)=>V.get(`/functions/${e}/deployments`,{params:{limit:t}}),Iy=(e,t,n,s="json")=>V.get(`/functions/${encodeURIComponent(e)}/diff`,{params:{from:t,to:n,format:s},responseType:s==="unified"?"text":"json"}),Ny=(e,t)=>V.post(`/functions/${e}/rollback`,t),Sg=async e=>{const n=((await V.get("/functions")).data.functions||[]).find(s=>s.name===e);if(!n)throw new Error(`Function "${e}" not found`);return n.id},Bo=e=>({...e,cron_expression:e.cron_expr}),Ly=async()=>({data:{schedules:((await V.get("/cron")).data.schedules||[]).map(Bo)}}),My=async(e,t)=>{const n=await Sg(e),s={cron_expr:t.cron,timezone:t.timezone||Rg(),enabled:t.enabled!==!1,payload:t.payload??{}},r=await V.post(`/functions/${n}/cron`,s);return{data:Bo(r.data)}},Dy=async(e,t)=>{const n=t.function_id;if(!n)throw new Error("updateCronSchedule: function_id is required");const s={};t.cron!==void 0&&(s.cron_expr=t.cron),t.timezone!==void 0&&(s.timezone=t.timezone),t.enabled!==void 0&&(s.enabled=t.enabled),t.payload!==void 0&&(s.payload=t.payload);const r=await V.put(`/functions/${n}/cron/${e}`,s);return{data:Bo(r.data)}},Rg=()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC"}catch{return"UTC"}},Fy=async(e,t)=>{if(!t)throw new Error("deleteCronSchedule: functionId is required");return V.delete(`/functions/${t}/cron/${e}`)},Uy=(e={})=>V.get("/jobs",{params:e}),jy=e=>V.post("/jobs",e),By=e=>V.post(`/jobs/${e}/retry`),$y=e=>V.delete(`/jobs/${e}`),Vy=()=>V.get("/system/storage"),Hy=()=>V.post("/system/vacuum"),qy=e=>{const t=new FormData;return t.append("archive",e),V.post("/restore?confirm=1",t,{headers:{"Content-Type":"multipart/form-data"},timeout:600*1e3})},Ky=e=>V.get(`/traces/${e}`),Wy=(e={})=>V.get("/traces",{params:e}),zy=()=>V.get("/webhooks"),Gy=e=>V.post("/webhooks",e),Jy=(e,t)=>V.put(`/webhooks/${e}`,t),Xy=e=>V.delete(`/webhooks/${e}`),Qy=e=>V.post(`/webhooks/${e}/test`),Yy=e=>V.get(`/webhooks/${e}/deliveries`),Zy=e=>V.post(`/webhooks/deliveries/${e}/retry`),eb=e=>V.get(`/functions/${encodeURIComponent(e)}/inbound-webhooks`),tb=(e,t)=>V.post(`/functions/${encodeURIComponent(e)}/inbound-webhooks`,t),nb=(e,t)=>V.delete(`/functions/${encodeURIComponent(e)}/inbound-webhooks/${t}`),El=[500,1e3,2e3,5e3,1e4],zc=fr("events",()=>{const e=ee(!1),t=ee(0),n=new Map;let s=null,r=null;const o=(c,f)=>{const p=n.get(c);if(p)for(const m of p)try{m(f)}catch(d){console.error("events callback error",d)}},i=c=>{c.onopen=()=>{e.value=!0,t.value=0};const f=["metrics","execution","deployment","function","activity"];for(const p of f)c.addEventListener(p,m=>{try{const d=JSON.parse(m.data);o(p,d)}catch(d){console.warn("failed to parse SSE payload",d,m.data)}});c.onerror=()=>{if(e.value=!1,s){try{s.close()}catch{}s=null}const p=El[Math.min(t.value,El.length-1)];t.value+=1,clearTimeout(r),r=setTimeout(()=>l(),p)}},l=()=>{if(!s)try{s=new EventSource("/api/v1/events",{withCredentials:!0}),i(s)}catch(c){console.error("failed to open /api/v1/events",c),e.value=!1}};return{connected:rs(e),reconnectAttempt:rs(t),connect:l,disconnect:()=>{if(clearTimeout(r),r=null,s){try{s.close()}catch{}s=null}e.value=!1,t.value=0},subscribe:(c,f)=>(n.has(c)||n.set(c,new Set),n.get(c).add(f),()=>{const p=n.get(c);p&&p.delete(f)})}}),xl=60,Ag=fr("system",()=>{const e=ee(!1),t=ee(null),n=ee(0),s=ee([]),r=ee({}),o=ee(null);let i=null,l=null,a=null;const u=m=>{t.value=m;const d=new Set;for(const g of m.pools||[]){d.add(g.function_id);const b=r.value[g.function_id]||[];b.push(g.rate_ewma),b.length>xl&&b.splice(0,b.length-xl),r.value[g.function_id]=b}for(const g of Object.keys(r.value))d.has(g)||delete r.value[g]},c=async()=>{try{const[m,d,g,b]=await Promise.all([xg(),wg().catch(()=>({data:{functions:[],total:0}})),Eg({limit:20}).catch(()=>({data:{executions:[]}})),_g().catch(()=>({data:null}))]);u(m.data),n.value=d.data.total??(d.data.functions||[]).length,s.value=g.data.executions||[],b.data&&(o.value={version:b.data.version,commit:b.data.commit,buildTime:b.data.build_time,image:b.data.image,uptimeSeconds:b.data.uptime_seconds}),e.value=!0}catch(m){console.error("seed fetch error:",m),e.value=!1}};return{isConnected:e,metrics:t,functionsCount:n,recentInvocations:s,poolHistory:r,buildInfo:o,connect:()=>{const m=zc();c(),i=m.subscribe("metrics",d=>{u(d),e.value=!0}),l=m.subscribe("execution",d=>{s.value=[d,...s.value].slice(0,20)}),a=m.subscribe("function",d=>{d.action==="deleted"?n.value=Math.max(0,n.value-1):d.action==="created"&&(n.value=n.value+1)})},disconnect:()=>{i&&(i(),i=null),l&&(l(),l=null),a&&(a(),a=null),e.value=!1}}}),Cg={class:"flex h-screen w-full bg-background overflow-hidden font-sans antialiased text-foreground"},Tg={class:"flex-1 flex flex-col min-w-0 overflow-hidden relative pt-14 lg:pt-0"},Og={__name:"Layout",setup(e){const t=Ag(),n=zc(),s=Hc(),r=ee(0);let o=null;const i=ke(()=>{r.value;const a=s.secondsUntilExpiry;return a==null||a<=0?"—":a<60?`${Math.floor(a)}s`:a<3600?`${Math.floor(a/60)} min`:`${Math.floor(a/3600)} h`}),l=async()=>{(await s.refreshSession()).success||(window.location.href="/login")};return Mn(async()=>{await s.checkAuth(),n.connect(),t.connect(),o=setInterval(()=>{r.value++},3e4)}),hs(()=>{t.disconnect(),n.disconnect(),o&&clearInterval(o)}),(a,u)=>{const c=Co("router-view");return re(),_e("div",Cg,[ae(rg),se("main",Tg,[ae(c,null,{default:Ct(({Component:f})=>[(re(),qe(Yu,{max:10},[(re(),qe(To(f),{class:"flex-1 overflow-auto scrollable p-page"}))],1024))]),_:1})]),ae(vg),ae(dg,{visible:oe(s).shouldShowExpiryToast,"action-loading":oe(s).refreshing,title:"Session expiring soon","action-label":"Stay signed in",onAction:l,onDismiss:oe(s).dismissExpiryToast},{default:Ct(()=>[qs(" Your session expires in "+rt(i.value)+". Click to extend it for another 7 days. ",1)]),_:1},8,["visible","action-loading","onDismiss"])])}}},$o=fp({history:Hh("/web/"),routes:[{path:"/login",name:"login",component:()=>be(()=>import("./Login-YGsZM8PV.js"),__vite__mapDeps([0,1])),meta:{requiresAuth:!1}},{path:"/onboarding",name:"onboarding",component:()=>be(()=>import("./Onboarding-DOb5mnY3.js"),__vite__mapDeps([2,3,1])),meta:{requiresAuth:!1}},{path:"/",component:Og,meta:{requiresAuth:!0},children:[{path:"",name:"dashboard",component:()=>be(()=>import("./Dashboard-DdCcITCh.js"),__vite__mapDeps([4,5]))},{path:"ai",name:"ai",component:()=>be(()=>import("./AI-CRINc2rq.js"),__vite__mapDeps([6,7,8,9,10,11,12,13,14,15,3,16,17,18,19,20]))},{path:"functions",name:"functions",component:()=>be(()=>import("./FunctionsList-ClWQkTrs.js"),__vite__mapDeps([21,22,14,23,24,25,10,11,15,3]))},{path:"functions/:name",name:"function-detail",component:()=>be(()=>import("./Editor-CGt5HsZM.js"),__vite__mapDeps([26,27,28,14,29,30,31,16,32,33,34,15,3,35,19,36,11,24,25,37,17,38,39]))},{path:"functions/:name/deployments",name:"function-deployments",component:()=>be(()=>import("./Deployments-HGMJdPkO.js"),__vite__mapDeps([40,5,7,8,41,42,43,30,36,23,17]))},{path:"functions/:name/diff",name:"function-diff",component:()=>be(()=>import("./FunctionDiff-B5S0Jfo_.js"),__vite__mapDeps([44,30,14,45,3,18,31,16,17,46]))},{path:"functions/:name/kv",name:"function-kv",component:()=>be(()=>import("./KVStore-BJOrSxjD.js"),__vite__mapDeps([47,5,22,7,8,23,11]))},{path:"functions/:name/inbound-webhooks",name:"function-inbound-webhooks",component:()=>be(()=>import("./InboundWebhooks-CeKosJjA.js"),__vite__mapDeps([48,5,22,7,8,23,11]))},{path:"functions/new",name:"function-new",component:()=>be(()=>import("./Editor-CGt5HsZM.js"),__vite__mapDeps([26,27,28,14,29,30,31,16,32,33,34,15,3,35,19,36,11,24,25,37,17,38,39]))},{path:"deploy",redirect:{name:"function-new"}},{path:"cron",name:"cron",component:()=>be(()=>import("./CronJobs-C1Lm7OXf.js"),__vite__mapDeps([49,5,22,28,43,35,50,11]))},{path:"jobs",name:"jobs",component:()=>be(()=>import("./Jobs-BuEpd4mz.js"),__vite__mapDeps([51,5,22,7,8,17,11,42,43]))},{path:"activity",name:"activity",component:()=>be(()=>import("./Activity-CUYXvjyS.js"),__vite__mapDeps([52,5,7,8,41,42,43,53]))},{path:"invocations",name:"invocations",component:()=>be(()=>import("./InvocationsLog-TKQA0zvQ.js"),__vite__mapDeps([54,5,7,8,41,42,43,14,29,1,23,16,15,11,17,35,19]))},{path:"traces",name:"traces",component:()=>be(()=>import("./Traces-Cr9wsEkz.js"),__vite__mapDeps([55,5,41,42,43,23,56]))},{path:"traces/:id",name:"trace-detail",component:()=>be(()=>import("./TraceDetail-DlY0pIfy.js"),__vite__mapDeps([57,5,41,42,43,58,3,56,1]))},{path:"api-keys",name:"api-keys",component:()=>be(()=>import("./ApiKeys-D_0i_tEn.js"),__vite__mapDeps([59,5,22,14,60,15,3,33,11]))},{path:"channels",name:"channels",component:()=>be(()=>import("./Channels-BVCLEepx.js"),__vite__mapDeps([61,22,14,60,15,3,1,17,11]))},{path:"webhooks",name:"webhooks",component:()=>be(()=>import("./Webhooks-DwuKsY7O.js"),__vite__mapDeps([62,5,14,22,28,18,50,11,15,3,17]))},{path:"firewall",name:"firewall",component:()=>be(()=>import("./Firewall-BXu8MFSv.js"),__vite__mapDeps([63,27,28,23,24,11,37,64]))},{path:"settings",name:"settings",component:()=>be(()=>import("./Settings-DhV460vi.js"),__vite__mapDeps([65,5,27,9,14,60,38,3,33,11]))},{path:"docs",name:"docs",component:()=>be(()=>import("./Docs-D8EdWzOh.js"),__vite__mapDeps([66,5,14,29,12,13,15,3,24,53,33,16,32,25,67]))}]},{path:"/:pathMatch(.*)*",name:"not-found",component:()=>be(()=>import("./NotFound-BmRAxlxU.js"),__vite__mapDeps([68,58,34])),meta:{requiresAuth:!1}}]});$o.beforeEach((e,t,n)=>{if(t.fullPath===e.fullPath&&t.name)return n(!1);n()});$o.beforeEach(async(e,t,n)=>{const s=Hc();if(!await s.fetchAuthStatus())return e.name==="onboarding"?n():n({name:"onboarding",replace:!0});if(s.isAuthenticated===!1&&await s.checkAuth(),s.isAuthenticated)return e.name==="onboarding"||e.name==="login"?n({name:"dashboard"}):n();if(e.name==="login")return n();if(e.name==="onboarding")return n({name:"login",replace:!0});n({name:"login",query:{redirect:e.fullPath}})});const Vo=Td(sh),kg=Pd();Vo.use(kg);Vo.use($o);Vo.mount("#app");export{ic as $,Ga as A,Ja as B,Xd as C,qc as D,ct as E,Ne as F,Ao as G,To as H,At as I,cr as J,va as K,vn as L,Hd as M,ho as N,wl as O,qd as P,xo as Q,Zu as R,Kd as S,Wd as T,zc as U,ef as V,wg as W,Ya as X,V as Y,sc as Z,Ui as _,_e as a,lc as a$,Lg as a0,wd as a1,Co as a2,Ig as a3,Kc as a4,iy as a5,gy as a6,my as a7,be as a8,hp as a9,By as aA,fy as aB,Eg as aC,So as aD,nc as aE,ly as aF,ay as aG,cy as aH,uy as aI,ny as aJ,ty as aK,Wy as aL,Ky as aM,by as aN,vy as aO,_y as aP,Ry as aQ,Ay as aR,Cy as aS,Ty as aT,zy as aU,Qy as aV,Xy as aW,Jy as aX,Gy as aY,Yy as aZ,Zy as a_,zd as aa,vd as ab,yy as ac,oy as ad,ry as ae,Ny as af,sy as ag,Py as ah,Oy as ai,ky as aj,Iy as ak,dy as al,cs as am,hy as an,py as ao,eb as ap,nb as aq,tb as ar,Rg as as,Ly as at,Dy as au,Fy as av,My as aw,Uy as ax,jy as ay,$y as az,se as b,Pg as b0,_d as b1,ip as b2,Vy as b3,wy as b4,xy as b5,qy as b6,Hy as b7,Ey as b8,Sy as b9,fr as ba,Xa as bb,Ae as c,ae as d,ra as e,oe as f,We as g,Ct as h,dp as i,re as j,qs as k,Ng as l,Mg as m,qe as n,Mn as o,Wr as p,ke as q,ee as r,Dt as s,rt as t,Hc as u,zs as v,bn as w,Ag as x,hs as y,Tn as z}; diff --git a/backend/internal/server/ui_dist/assets/index-fIeDYqWy.js b/backend/internal/server/ui_dist/assets/index-fIeDYqWy.js new file mode 100644 index 0000000..98295f9 --- /dev/null +++ b/backend/internal/server/ui_dist/assets/index-fIeDYqWy.js @@ -0,0 +1,10 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-DmrBAvpc.js","assets/circle-alert-C9zmFbXU.js","assets/Onboarding-CknTZuQK.js","assets/copy-DJiur09W.js","assets/Dashboard-C27lk4MJ.js","assets/format-CsU4_SPu.js","assets/AI-BV7LwjfA.js","assets/Drawer-D-dO6A0-.js","assets/Drawer-MYoSlZfw.css","assets/ai-B3sDNfeq.js","assets/pencil-IX2SrcHQ.js","assets/trash-2-B2Wniuw-.js","assets/github-dark-BrynTfs3.js","assets/github-dark-Dfs9RUU9.css","assets/clipboard-CmSw2rR-.js","assets/check-Cwg1V2MO.js","assets/chevron-down-BcMN1rmG.js","assets/rotate-ccw-BYpihd4d.js","assets/zap-BoY-LImv.js","assets/sparkles-B00DiY2I.js","assets/AI-BpuQxF1y.css","assets/FunctionsList-BlLl9Ji5.js","assets/IconButton-CnguiHlc.js","assets/refresh-cw-9T7Tp2vI.js","assets/globe-DtEgS3Yf.js","assets/lock-D649KWfg.js","assets/Editor--3DRfIJD.js","assets/Input-RIxOCNDe.js","assets/Modal-DRIalOH5.js","assets/aiPrompts-DGZ6L7ag.js","assets/rollbackDiff-Cvt2Ss82.js","assets/settings-2-DcdHMrV8.js","assets/variable-C2-uCEoV.js","assets/key-round-BR2mpVu3.js","assets/book-open-HLcwtuYW.js","assets/play-CmOm4UFE.js","assets/git-compare-5RUagJlb.js","assets/shield-check-BHGT5Xmy.js","assets/terminal-DWMuaXnV.js","assets/Editor-Ci5_23J6.css","assets/Deployments-DjklWQL1.js","assets/StatusBadge-U9tC82MH.js","assets/circle-u9aj3idX.js","assets/clock-C4Bm6ngE.js","assets/FunctionDiff-B96TQktv.js","assets/index-BOWx3BJu.js","assets/FunctionDiff-CrhTClO7.css","assets/KVStore-CfuA6xj9.js","assets/InboundWebhooks-DXNQPsKe.js","assets/CronJobs-CHCHOKdI.js","assets/square-pen-BfULFvug.js","assets/Jobs-CU8XnJK3.js","assets/Activity-DN8mbB-1.js","assets/chevron-right-BrmZtzfn.js","assets/InvocationsLog-BWp_rnmb.js","assets/Traces-CejEofjO.js","assets/flag-CL7jr_Ab.js","assets/TraceDetail-DTbv7Wsg.js","assets/arrow-left-DiLFZEkx.js","assets/ApiKeys-p9xM5dML.js","assets/time-Cfu9zNbw.js","assets/Channels-BrmOc5pT.js","assets/Webhooks-DYEPaH1Y.js","assets/Firewall-pkdJLyXh.js","assets/Firewall-C6Wui_1_.css","assets/Settings-B47Vm5f4.js","assets/Docs-DVOuRCTb.js","assets/Docs-BfWixbII.css","assets/NotFound-CcZlcrLG.js"])))=>i.map(i=>d[i]); +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();function po(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ge={},En=[],Rt=()=>{},Al=()=>!1,Xs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Qs=e=>e.startsWith("onUpdate:"),Ne=Object.assign,mo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Jc=Object.prototype.hasOwnProperty,pe=(e,t)=>Jc.call(e,t),z=Array.isArray,xn=e=>Mn(e)==="[object Map]",Dn=e=>Mn(e)==="[object Set]",Xo=e=>Mn(e)==="[object Date]",Xc=e=>Mn(e)==="[object RegExp]",Y=e=>typeof e=="function",ve=e=>typeof e=="string",st=e=>typeof e=="symbol",de=e=>e!==null&&typeof e=="object",Cl=e=>(de(e)||Y(e))&&Y(e.then)&&Y(e.catch),Tl=Object.prototype.toString,Mn=e=>Tl.call(e),Qc=e=>Mn(e).slice(8,-1),Ol=e=>Mn(e)==="[object Object]",Ys=e=>ve(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Xn=po(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Zs=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Yc=/-\w/g,Ge=Zs(e=>e.replace(Yc,t=>t.slice(1).toUpperCase())),Zc=/\B([A-Z])/g,Yt=Zs(e=>e.replace(Zc,"-$1").toLowerCase()),er=Zs(e=>e.charAt(0).toUpperCase()+e.slice(1)),wr=Zs(e=>e?`on${er(e)}`:""),xt=(e,t)=>!Object.is(e,t),Rn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},tr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},eu=e=>{const t=ve(e)?Number(e):NaN;return isNaN(t)?e:t};let Qo;const nr=()=>Qo||(Qo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function go(e){if(z(e)){const t={};for(let n=0;n{if(n){const s=n.split(nu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Mt(e){let t="";if(ve(e))t=e;else if(z(e))for(let n=0;nXt(n,t))}const Il=e=>!!(e&&e.__v_isRef===!0),lt=e=>ve(e)?e:e==null?"":z(e)||de(e)&&(e.toString===Tl||!Y(e.toString))?Il(e)?lt(e.value):JSON.stringify(e,Nl,2):String(e),Nl=(e,t)=>Il(t)?Nl(e,t.value):xn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],o)=>(n[Er(s,o)+" =>"]=r,n),{})}:Dn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Er(n))}:st(t)?Er(t):de(t)&&!z(t)&&!Ol(t)?String(t):t,Er=(e,t="")=>{var n;return st(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let $e;class Ll{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=$e,!t&&$e&&(this.index=($e.scopes||($e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&($e=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Yn){let t=Yn;for(Yn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Qn;){let t=Qn;for(Qn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Bl(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Vl(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),vo(s),cu(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function $r(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&($l(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function $l(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===rs)||(e.globalVersion=rs,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!$r(e))))return;e.flags|=2;const t=e.dep,n=be,s=ut;be=e,ut=!0;try{Bl(e);const r=e.fn(e._value);(t.version===0||xt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{be=n,ut=s,Vl(e),e.flags&=-3}}function vo(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)vo(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function cu(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let ut=!0;const Hl=[];function Ut(){Hl.push(ut),ut=!1}function jt(){const e=Hl.pop();ut=e===void 0?!0:e}function Yo(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=be;be=void 0;try{t()}finally{be=n}}}let rs=0;class uu{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 wo{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(!be||!ut||be===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==be)n=this.activeLink=new uu(be,this),be.deps?(n.prevDep=be.depsTail,be.depsTail.nextDep=n,be.depsTail=n):be.deps=be.depsTail=n,ql(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=be.depsTail,n.nextDep=void 0,be.depsTail.nextDep=n,be.depsTail=n,be.deps===n&&(be.deps=s)}return n}trigger(t){this.version++,rs++,this.notify(t)}notify(t){bo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{_o()}}}function ql(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)ql(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Ms=new WeakMap,un=Symbol(""),Hr=Symbol(""),os=Symbol("");function He(e,t,n){if(ut&&be){let s=Ms.get(e);s||Ms.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new wo),r.map=s,r.key=n),r.track()}}function Nt(e,t,n,s,r,o){const i=Ms.get(e);if(!i){rs++;return}const l=a=>{a&&a.trigger()};if(bo(),t==="clear")i.forEach(l);else{const a=z(e),u=a&&Ys(n);if(a&&n==="length"){const c=Number(s);i.forEach((f,h)=>{(h==="length"||h===os||!st(h)&&h>=c)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),u&&l(i.get(os)),t){case"add":a?u&&l(i.get("length")):(l(i.get(un)),xn(e)&&l(i.get(Hr)));break;case"delete":a||(l(i.get(un)),xn(e)&&l(i.get(Hr)));break;case"set":xn(e)&&l(i.get(un));break}}_o()}function fu(e,t){const n=Ms.get(e);return n&&n.get(t)}function mn(e){const t=ie(e);return t===e?t:(He(t,"iterate",os),nt(e)?t:t.map(dt))}function sr(e){return He(e=ie(e),"iterate",os),e}function wt(e,t){return Bt(e)?An(Ft(e)?dt(t):t):dt(t)}const du={__proto__:null,[Symbol.iterator](){return Rr(this,Symbol.iterator,e=>wt(this,e))},concat(...e){return mn(this).concat(...e.map(t=>z(t)?mn(t):t))},entries(){return Rr(this,"entries",e=>(e[1]=wt(this,e[1]),e))},every(e,t){return Tt(this,"every",e,t,void 0,arguments)},filter(e,t){return Tt(this,"filter",e,t,n=>n.map(s=>wt(this,s)),arguments)},find(e,t){return Tt(this,"find",e,t,n=>wt(this,n),arguments)},findIndex(e,t){return Tt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Tt(this,"findLast",e,t,n=>wt(this,n),arguments)},findLastIndex(e,t){return Tt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Tt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Sr(this,"includes",e)},indexOf(...e){return Sr(this,"indexOf",e)},join(e){return mn(this).join(e)},lastIndexOf(...e){return Sr(this,"lastIndexOf",e)},map(e,t){return Tt(this,"map",e,t,void 0,arguments)},pop(){return Bn(this,"pop")},push(...e){return Bn(this,"push",e)},reduce(e,...t){return Zo(this,"reduce",e,t)},reduceRight(e,...t){return Zo(this,"reduceRight",e,t)},shift(){return Bn(this,"shift")},some(e,t){return Tt(this,"some",e,t,void 0,arguments)},splice(...e){return Bn(this,"splice",e)},toReversed(){return mn(this).toReversed()},toSorted(e){return mn(this).toSorted(e)},toSpliced(...e){return mn(this).toSpliced(...e)},unshift(...e){return Bn(this,"unshift",e)},values(){return Rr(this,"values",e=>wt(this,e))}};function Rr(e,t,n){const s=sr(e),r=s[t]();return s!==e&&!nt(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.done||(o.value=n(o.value)),o}),r}const hu=Array.prototype;function Tt(e,t,n,s,r,o){const i=sr(e),l=i!==e&&!nt(e),a=i[t];if(a!==hu[t]){const f=a.apply(e,o);return l?dt(f):f}let u=n;i!==e&&(l?u=function(f,h){return n.call(this,wt(e,f),h,e)}:n.length>2&&(u=function(f,h){return n.call(this,f,h,e)}));const c=a.call(i,u,s);return l&&r?r(c):c}function Zo(e,t,n,s){const r=sr(e),o=r!==e&&!nt(e);let i=n,l=!1;r!==e&&(o?(l=s.length===0,i=function(u,c,f){return l&&(l=!1,u=wt(e,u)),n.call(this,u,wt(e,c),f,e)}):n.length>3&&(i=function(u,c,f){return n.call(this,u,c,f,e)}));const a=r[t](i,...s);return l?wt(e,a):a}function Sr(e,t,n){const s=ie(e);He(s,"iterate",os);const r=s[t](...n);return(r===-1||r===!1)&&rr(n[0])?(n[0]=ie(n[0]),s[t](...n)):r}function Bn(e,t,n=[]){Ut(),bo();const s=ie(e)[t].apply(e,n);return _o(),jt(),s}const pu=po("__proto__,__v_isRef,__isVue"),Kl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function mu(e){st(e)||(e=String(e));const t=ie(this);return He(t,"has",e),t.hasOwnProperty(e)}class Wl{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?Su:Xl:o?Jl:Gl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=z(t);if(!r){let a;if(i&&(a=du[n]))return a;if(n==="hasOwnProperty")return mu}const l=Reflect.get(t,n,xe(t)?t:s);if((st(n)?Kl.has(n):pu(n))||(r||He(t,"get",n),o))return l;if(xe(l)){const a=i&&Ys(n)?l:l.value;return r&&de(a)?is(a):a}return de(l)?r?is(l):fs(l):l}}class zl extends Wl{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];const i=z(t)&&Ys(n);if(!this._isShallow){const u=Bt(o);if(!nt(s)&&!Bt(s)&&(o=ie(o),s=ie(s)),!i&&xe(o)&&!xe(s))return u||(o.value=s),!0}const l=i?Number(n)e,ws=e=>Reflect.getPrototypeOf(e);function vu(e,t,n){return function(...s){const r=this.__v_raw,o=ie(r),i=xn(o),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,u=r[e](...s),c=n?qr:t?An:dt;return!t&&He(o,"iterate",a?Hr:un),Ne(Object.create(u),{next(){const{value:f,done:h}=u.next();return h?{value:f,done:h}:{value:l?[c(f[0]),c(f[1])]:c(f),done:h}}})}}function Es(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function wu(e,t){const n={get(r){const o=this.__v_raw,i=ie(o),l=ie(r);e||(xt(r,l)&&He(i,"get",r),He(i,"get",l));const{has:a}=ws(i),u=t?qr:e?An:dt;if(a.call(i,r))return u(o.get(r));if(a.call(i,l))return u(o.get(l));o!==i&&o.get(r)},get size(){const r=this.__v_raw;return!e&&He(ie(r),"iterate",un),r.size},has(r){const o=this.__v_raw,i=ie(o),l=ie(r);return e||(xt(r,l)&&He(i,"has",r),He(i,"has",l)),r===l?o.has(r):o.has(r)||o.has(l)},forEach(r,o){const i=this,l=i.__v_raw,a=ie(l),u=t?qr:e?An:dt;return!e&&He(a,"iterate",un),l.forEach((c,f)=>r.call(o,u(c),u(f),i))}};return Ne(n,e?{add:Es("add"),set:Es("set"),delete:Es("delete"),clear:Es("clear")}:{add(r){const o=ie(this),i=ws(o),l=ie(r),a=!t&&!nt(r)&&!Bt(r)?l:r;return i.has.call(o,a)||xt(r,a)&&i.has.call(o,r)||xt(l,a)&&i.has.call(o,l)||(o.add(a),Nt(o,"add",a,a)),this},set(r,o){!t&&!nt(o)&&!Bt(o)&&(o=ie(o));const i=ie(this),{has:l,get:a}=ws(i);let u=l.call(i,r);u||(r=ie(r),u=l.call(i,r));const c=a.call(i,r);return i.set(r,o),u?xt(o,c)&&Nt(i,"set",r,o):Nt(i,"add",r,o),this},delete(r){const o=ie(this),{has:i,get:l}=ws(o);let a=i.call(o,r);a||(r=ie(r),a=i.call(o,r)),l&&l.call(o,r);const u=o.delete(r);return a&&Nt(o,"delete",r,void 0),u},clear(){const r=ie(this),o=r.size!==0,i=r.clear();return o&&Nt(r,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=vu(r,e,t)}),n}function Eo(e,t){const n=wu(e,t);return(s,r,o)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(pe(n,r)&&r in s?n:s,r,o)}const Eu={get:Eo(!1,!1)},xu={get:Eo(!1,!0)},Ru={get:Eo(!0,!1)};const Gl=new WeakMap,Jl=new WeakMap,Xl=new WeakMap,Su=new WeakMap;function Au(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Cu(e){return e.__v_skip||!Object.isExtensible(e)?0:Au(Qc(e))}function fs(e){return Bt(e)?e:xo(e,!1,yu,Eu,Gl)}function Ql(e){return xo(e,!1,_u,xu,Jl)}function is(e){return xo(e,!0,bu,Ru,Xl)}function xo(e,t,n,s,r){if(!de(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=Cu(e);if(o===0)return e;const i=r.get(e);if(i)return i;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function Ft(e){return Bt(e)?Ft(e.__v_raw):!!(e&&e.__v_isReactive)}function Bt(e){return!!(e&&e.__v_isReadonly)}function nt(e){return!!(e&&e.__v_isShallow)}function rr(e){return e?!!e.__v_raw:!1}function ie(e){const t=e&&e.__v_raw;return t?ie(t):e}function Ro(e){return!pe(e,"__v_skip")&&Object.isExtensible(e)&&Pl(e,"__v_skip",!0),e}const dt=e=>de(e)?fs(e):e,An=e=>de(e)?is(e):e;function xe(e){return e?e.__v_isRef===!0:!1}function ee(e){return Yl(e,!1)}function Tu(e){return Yl(e,!0)}function Yl(e,t){return xe(e)?e:new Ou(e,t)}class Ou{constructor(t,n){this.dep=new wo,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:ie(t),this._value=n?t:dt(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||nt(t)||Bt(t);t=s?t:ie(t),xt(t,n)&&(this._rawValue=t,this._value=s?t:dt(t),this.dep.trigger())}}function re(e){return xe(e)?e.value:e}const Pu={get:(e,t,n)=>t==="__v_raw"?e:re(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return xe(r)&&!xe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Zl(e){return Ft(e)?e:new Proxy(e,Pu)}function ku(e){const t=z(e)?new Array(e.length):{};for(const n in e)t[n]=ea(e,n);return t}class Iu{constructor(t,n,s){this._object=t,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._key=st(n)?n:String(n),this._raw=ie(t);let r=!0,o=t;if(!z(t)||st(this._key)||!Ys(this._key))do r=!rr(o)||nt(o);while(r&&(o=o.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=re(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&xe(this._raw[this._key])){const n=this._object[this._key];if(xe(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return fu(this._raw,this._key)}}class Nu{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 qg(e,t,n){return xe(e)?e:Y(e)?new Nu(e):de(e)&&arguments.length>1?ea(e,t,n):ee(e)}function ea(e,t,n){return new Iu(e,t,n)}class Lu{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new wo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=rs-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&be!==this)return jl(this,!0),!0}get value(){const t=this.dep.track();return $l(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Du(e,t,n=!1){let s,r;return Y(e)?s=e:(s=e.get,r=e.set),new Lu(s,r,n)}const xs={},Fs=new WeakMap;let on;function Mu(e,t=!1,n=on){if(n){let s=Fs.get(n);s||Fs.set(n,s=[]),s.push(e)}}function Fu(e,t,n=ge){const{immediate:s,deep:r,once:o,scheduler:i,augmentJob:l,call:a}=n,u=w=>r?w:nt(w)||r===!1||r===0?Lt(w,1):Lt(w);let c,f,h,p,y=!1,m=!1;if(xe(e)?(f=()=>e.value,y=nt(e)):Ft(e)?(f=()=>u(e),y=!0):z(e)?(m=!0,y=e.some(w=>Ft(w)||nt(w)),f=()=>e.map(w=>{if(xe(w))return w.value;if(Ft(w))return u(w);if(Y(w))return a?a(w,2):w()})):Y(e)?t?f=a?()=>a(e,2):e:f=()=>{if(h){Ut();try{h()}finally{jt()}}const w=on;on=c;try{return a?a(e,3,[p]):e(p)}finally{on=w}}:f=Rt,t&&r){const w=f,P=r===!0?1/0:r;f=()=>Lt(w(),P)}const b=Ml(),R=()=>{c.stop(),b&&b.active&&mo(b.effects,c)};if(o&&t){const w=t;t=(...P)=>{w(...P),R()}}let _=m?new Array(e.length).fill(xs):xs;const v=w=>{if(!(!(c.flags&1)||!c.dirty&&!w))if(t){const P=c.run();if(r||y||(m?P.some((N,B)=>xt(N,_[B])):xt(P,_))){h&&h();const N=on;on=c;try{const B=[P,_===xs?void 0:m&&_[0]===xs?[]:_,p];_=P,a?a(t,3,B):t(...B)}finally{on=N}}}else c.run()};return l&&l(v),c=new Fl(f),c.scheduler=i?()=>i(v,!1):v,p=w=>Mu(w,!1,c),h=c.onStop=()=>{const w=Fs.get(c);if(w){if(a)a(w,4);else for(const P of w)P();Fs.delete(c)}},t?s?v(!0):_=c.run():i?i(v.bind(null,!0),!0):c.run(),R.pause=c.pause.bind(c),R.resume=c.resume.bind(c),R.stop=R,R}function Lt(e,t=1/0,n){if(t<=0||!de(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,xe(e))Lt(e.value,t,n);else if(z(e))for(let s=0;s{Lt(s,t,n)});else if(Ol(e)){for(const s in e)Lt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Lt(e[s],t,n)}return e}function ds(e,t,n,s){try{return s?e(...s):e()}catch(r){hs(r,t,n)}}function ht(e,t,n,s){if(Y(e)){const r=ds(e,t,n,s);return r&&Cl(r)&&r.catch(o=>{hs(o,t,n)}),r}if(z(e)){const r=[];for(let o=0;o>>1,r=We[s],o=ls(r);o=ls(n)?We.push(e):We.splice(ju(t),0,e),e.flags|=1,na()}}function na(){Us||(Us=ta.then(ra))}function Bu(e){z(e)?Sn.push(...e):Wt&&e.id===-1?Wt.splice(bn+1,0,e):e.flags&1||(Sn.push(e),e.flags|=1),na()}function ei(e,t,n=_t+1){for(;nls(n)-ls(s));if(Sn.length=0,Wt){Wt.push(...t);return}for(Wt=t,bn=0;bne.id==null?e.flags&2?-1:1/0:e.id;function ra(e){try{for(_t=0;_t{s._d&&qs(-1);const o=js(t);let i;try{i=e(...r)}finally{js(o),s._d&&qs(1)}return i};return s._n=!0,s._c=!0,s._d=!0,s}function ia(e,t){if(Ve===null)return e;const n=cr(Ve),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&Y(t)?t.call(s&&s.proxy):t}}function Vu(){return!!(ar()||fn)}const $u=Symbol.for("v-scx"),Hu=()=>at($u);function ft(e,t,n){return la(e,t,n)}function la(e,t,n=ge){const{immediate:s,deep:r,flush:o,once:i}=n,l=Ne({},n),a=t&&s||!t&&o!=="post";let u;if(On){if(o==="sync"){const p=Hu();u=p.__watcherHandles||(p.__watcherHandles=[])}else if(!a){const p=()=>{};return p.stop=Rt,p.resume=Rt,p.pause=Rt,p}}const c=je;l.call=(p,y,m)=>ht(p,c,y,m);let f=!1;o==="post"?l.scheduler=p=>{ke(p,c&&c.suspense)}:o!=="sync"&&(f=!0,l.scheduler=(p,y)=>{y?p():So(p)}),l.augmentJob=p=>{t&&(p.flags|=4),f&&(p.flags|=2,c&&(p.id=c.uid,p.i=c))};const h=Fu(e,t,l);return On&&(u?u.push(h):a&&h()),h}function qu(e,t,n){const s=this.proxy,r=ve(e)?e.includes(".")?aa(s,e):()=>s[e]:e.bind(s,s);let o;Y(t)?o=t:(o=t.handler,n=t);const i=gs(this),l=la(r,o.bind(s),n);return i(),l}function aa(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,ln=e=>e&&(e.disabled||e.disabled===""),Ku=e=>e&&(e.defer||e.defer===""),ti=e=>typeof SVGElement<"u"&&e instanceof SVGElement,ni=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Kr=(e,t)=>{const n=e&&e.to;return ve(n)?t?t(n):null:n},Wu={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,a,u){const{mc:c,pc:f,pbc:h,o:{insert:p,querySelector:y,createText:m,createComment:b}}=u,R=ln(t.props);let{dynamicChildren:_}=t;const v=(N,B,$)=>{N.shapeFlag&16&&c(N.children,B,$,r,o,i,l,a)},w=(N=t)=>{const B=ln(N.props),$=N.target=Kr(N.props,y),k=Wr($,N,m,p);$&&(i!=="svg"&&ti($)?i="svg":i!=="mathml"&&ni($)&&(i="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add($),B||(v(N,$,k),zn(N,!1)))},P=N=>{const B=()=>{en.get(N)===B&&(en.delete(N),ln(N.props)&&(v(N,n,N.anchor),zn(N,!0)),w(N))};en.set(N,B),ke(B,o)};if(e==null){const N=t.el=m(""),B=t.anchor=m("");if(p(N,n,s),p(B,n,s),Ku(t.props)||o&&o.pendingBranch){P(t);return}R&&(v(t,n,B),zn(t,!0)),w()}else{t.el=e.el;const N=t.anchor=e.anchor,B=en.get(e);if(B){B.flags|=8,en.delete(e),P(t);return}t.targetStart=e.targetStart;const $=t.target=e.target,k=t.targetAnchor=e.targetAnchor,H=ln(e.props),J=H?n:$,L=H?N:k;if(i==="svg"||ti($)?i="svg":(i==="mathml"||ni($))&&(i="mathml"),_?(h(e.dynamicChildren,_,J,r,o,i,l),Lo(e,t,!0)):a||f(e,t,J,L,r,o,i,l,!1),R)H?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Rs(t,n,N,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const te=t.target=Kr(t.props,y);te&&Rs(t,te,null,u,0)}else H&&Rs(t,$,k,u,1);zn(t,R)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:a,targetStart:u,targetAnchor:c,target:f,props:h}=e;let p=o||!ln(h);const y=en.get(e);if(y&&(y.flags|=8,en.delete(e),p=!1),f&&(r(u),r(c)),o&&r(a),i&16)for(let m=0;m{e.isMounted=!0}),Oo(()=>{e.isUnmounting=!0}),e}const ot=[Function,Array],fa={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ot,onEnter:ot,onAfterEnter:ot,onEnterCancelled:ot,onBeforeLeave:ot,onLeave:ot,onAfterLeave:ot,onLeaveCancelled:ot,onBeforeAppear:ot,onAppear:ot,onAfterAppear:ot,onAppearCancelled:ot},da=e=>{const t=e.subTree;return t.component?da(t.component):t},Ju={name:"BaseTransition",props:fa,setup(e,{slots:t}){const n=ar(),s=Gu();return()=>{const r=t.default&&ma(t.default(),!0);if(!r||!r.length)return;const o=ha(r),i=ie(e),{mode:l}=i;if(s.isLeaving)return Ar(o);const a=si(o);if(!a)return Ar(o);let u=zr(a,i,s,n,f=>u=f);a.type!==Ue&&Cn(a,u);let c=n.subTree&&si(n.subTree);if(c&&c.type!==Ue&&!Gt(c,a)&&da(n).type!==Ue){let f=zr(c,i,s,n);if(Cn(c,f),l==="out-in"&&a.type!==Ue)return s.isLeaving=!0,f.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,c=void 0},Ar(o);l==="in-out"&&a.type!==Ue?f.delayLeave=(h,p,y)=>{const m=pa(s,c);m[String(c.key)]=c,h[vt]=()=>{p(),h[vt]=void 0,delete u.delayedLeave,c=void 0},u.delayedLeave=()=>{y(),delete u.delayedLeave,c=void 0}}:c=void 0}else c&&(c=void 0);return o}}};function ha(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Ue){t=n;break}}return t}const Xu=Ju;function pa(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function zr(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:a,onEnter:u,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:h,onLeave:p,onAfterLeave:y,onLeaveCancelled:m,onBeforeAppear:b,onAppear:R,onAfterAppear:_,onAppearCancelled:v}=t,w=String(e.key),P=pa(n,e),N=(k,H)=>{k&&ht(k,s,9,H)},B=(k,H)=>{const J=H[1];N(k,H),z(k)?k.every(L=>L.length<=1)&&J():k.length<=1&&J()},$={mode:i,persisted:l,beforeEnter(k){let H=a;if(!n.isMounted)if(o)H=b||a;else return;k[vt]&&k[vt](!0);const J=P[w];J&&Gt(e,J)&&J.el[vt]&&J.el[vt](),N(H,[k])},enter(k){if(P[w]===e)return;let H=u,J=c,L=f;if(!n.isMounted)if(o)H=R||u,J=_||c,L=v||f;else return;let te=!1;k[Vn]=Oe=>{te||(te=!0,Oe?N(L,[k]):N(J,[k]),$.delayedLeave&&$.delayedLeave(),k[Vn]=void 0)};const ue=k[Vn].bind(null,!1);H?B(H,[k,ue]):ue()},leave(k,H){const J=String(e.key);if(k[Vn]&&k[Vn](!0),n.isUnmounting)return H();N(h,[k]);let L=!1;k[vt]=ue=>{L||(L=!0,H(),ue?N(m,[k]):N(y,[k]),k[vt]=void 0,P[J]===e&&delete P[J])};const te=k[vt].bind(null,!1);P[J]=e,p?B(p,[k,te]):te()},clone(k){const H=zr(k,t,n,s,r);return r&&r(H),H}};return $}function Ar(e){if(ps(e))return e=Vt(e),e.children=null,e}function si(e){if(!ps(e))return ua(e.type)&&e.children?ha(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&&Y(n.default))return n.default()}}function Cn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Cn(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 ma(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oZn(m,t&&(z(t)?t[b]:t),n,s,r));return}if(Jt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Zn(e,t,n,s.component.subTree);return}const o=s.shapeFlag&4?cr(s.component):s.el,i=r?null:o,{i:l,r:a}=e,u=t&&t.r,c=l.refs===ge?l.refs={}:l.refs,f=l.setupState,h=ie(f),p=f===ge?Al:m=>ri(c,m)?!1:pe(h,m),y=(m,b)=>!(b&&ri(c,b));if(u!=null&&u!==a){if(oi(t),ve(u))c[u]=null,p(u)&&(f[u]=null);else if(xe(u)){const m=t;y(u,m.k)&&(u.value=null),m.k&&(c[m.k]=null)}}if(Y(a))ds(a,l,12,[i,c]);else{const m=ve(a),b=xe(a);if(m||b){const R=()=>{if(e.f){const _=m?p(a)?f[a]:c[a]:y()||!e.k?a.value:c[e.k];if(r)z(_)&&mo(_,o);else if(z(_))_.includes(o)||_.push(o);else if(m)c[a]=[o],p(a)&&(f[a]=c[a]);else{const v=[o];y(a,e.k)&&(a.value=v),e.k&&(c[e.k]=v)}}else m?(c[a]=i,p(a)&&(f[a]=i)):b&&(y(a,e.k)&&(a.value=i),e.k&&(c[e.k]=i))};if(i){const _=()=>{R(),Bs.delete(e)};_.id=-1,Bs.set(e,_),ke(_,n)}else oi(e),R()}}}function oi(e){const t=Bs.get(e);t&&(t.flags|=8,Bs.delete(e))}const ii=e=>e.nodeType===8;nr().requestIdleCallback;nr().cancelIdleCallback;function Qu(e,t){if(ii(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(ii(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const Jt=e=>!!e.type.__asyncLoader;function Kg(e){Y(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:o,timeout:i,suspensible:l=!0,onError:a}=e;let u=null,c,f=0;const h=()=>(f++,u=null,p()),p=()=>{let y;return u||(y=u=t().catch(m=>{if(m=m instanceof Error?m:new Error(String(m)),a)return new Promise((b,R)=>{a(m,()=>b(h()),()=>R(m),f+1)});throw m}).then(m=>y!==u&&u?u:(m&&(m.__esModule||m[Symbol.toStringTag]==="Module")&&(m=m.default),c=m,m)))};return Co({name:"AsyncComponentWrapper",__asyncLoader:p,__asyncHydrate(y,m,b){let R=!1;(m.bu||(m.bu=[])).push(()=>R=!0);const _=()=>{R||b()},v=o?()=>{const w=o(_,P=>Qu(y,P));w&&(m.bum||(m.bum=[])).push(w)}:_;c?v():p().then(()=>!m.isUnmounted&&v())},get __asyncResolved(){return c},setup(){const y=je;if(To(y),c)return()=>Ss(c,y);const m=v=>{u=null,hs(v,y,13,!s)};if(l&&y.suspense||On)return p().then(v=>()=>Ss(v,y)).catch(v=>(m(v),()=>s?le(s,{error:v}):null));const b=ee(!1),R=ee(),_=ee(!!r);return r&&setTimeout(()=>{_.value=!1},r),i!=null&&setTimeout(()=>{if(!b.value&&!R.value){const v=new Error(`Async component timed out after ${i}ms.`);m(v),R.value=v}},i),p().then(()=>{b.value=!0,y.parent&&ps(y.parent.vnode)&&y.parent.update()}).catch(v=>{m(v),R.value=v}),()=>{if(b.value&&c)return Ss(c,y);if(R.value&&s)return le(s,{error:R.value});if(n&&!_.value)return Ss(n,y)}}})}function Ss(e,t){const{ref:n,props:s,children:r,ce:o}=t.vnode,i=le(e,s,r);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const ps=e=>e.type.__isKeepAlive,Yu={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=ar(),s=n.ctx;if(!s.renderer)return()=>{const _=t.default&&t.default();return _&&_.length===1?_[0]:_};const r=new Map,o=new Set;let i=null;const l=n.suspense,{renderer:{p:a,m:u,um:c,o:{createElement:f}}}=s,h=f("div");s.activate=(_,v,w,P,N)=>{const B=_.component;u(_,v,w,0,l),a(B.vnode,_,v,w,B,l,P,_.slotScopeIds,N),ke(()=>{B.isDeactivated=!1,B.a&&Rn(B.a);const $=_.props&&_.props.onVnodeMounted;$&&it($,B.parent,_)},l)},s.deactivate=_=>{const v=_.component;$s(v.m),$s(v.a),u(_,h,null,1,l),ke(()=>{v.da&&Rn(v.da);const w=_.props&&_.props.onVnodeUnmounted;w&&it(w,v.parent,_),v.isDeactivated=!0},l)};function p(_){Cr(_),c(_,n,l,!0)}function y(_){r.forEach((v,w)=>{const P=eo(Jt(v)?v.type.__asyncResolved||{}:v.type);P&&!_(P)&&m(w)})}function m(_){const v=r.get(_);v&&(!i||!Gt(v,i))?p(v):i&&Cr(i),r.delete(_),o.delete(_)}ft(()=>[e.include,e.exclude],([_,v])=>{_&&y(w=>Gn(_,w)),v&&y(w=>!Gn(v,w))},{flush:"post",deep:!0});let b=null;const R=()=>{b!=null&&(Hs(n.subTree.type)?ke(()=>{r.set(b,As(n.subTree))},n.subTree.suspense):r.set(b,As(n.subTree)))};return Fn(R),ya(R),Oo(()=>{r.forEach(_=>{const{subTree:v,suspense:w}=n,P=As(v);if(_.type===P.type&&_.key===P.key){Cr(P);const N=P.component.da;N&&ke(N,w);return}p(_)})}),()=>{if(b=null,!t.default)return i=null;const _=t.default(),v=_[0];if(_.length>1)return i=null,_;if(!Tn(v)||!(v.shapeFlag&4)&&!(v.shapeFlag&128))return i=null,v;let w=As(v);if(w.type===Ue)return i=null,w;const P=w.type,N=eo(Jt(w)?w.type.__asyncResolved||{}:P),{include:B,exclude:$,max:k}=e;if(B&&(!N||!Gn(B,N))||$&&N&&Gn($,N))return w.shapeFlag&=-257,i=w,v;const H=w.key==null?P:w.key,J=r.get(H);return w.el&&(w=Vt(w),v.shapeFlag&128&&(v.ssContent=w)),b=H,J?(w.el=J.el,w.component=J.component,w.transition&&Cn(w,w.transition),w.shapeFlag|=512,o.delete(H),o.add(H)):(o.add(H),k&&o.size>parseInt(k,10)&&m(o.values().next().value)),w.shapeFlag|=256,i=w,Hs(v.type)?v:w}}},Zu=Yu;function Gn(e,t){return z(e)?e.some(n=>Gn(n,t)):ve(e)?e.split(",").includes(t):Xc(e)?(e.lastIndex=0,e.test(t)):!1}function ef(e,t){ga(e,"a",t)}function tf(e,t){ga(e,"da",t)}function ga(e,t,n=je){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(or(t,s,n),n){let r=n.parent;for(;r&&r.parent;)ps(r.parent.vnode)&&nf(s,t,n,r),r=r.parent}}function nf(e,t,n,s){const r=or(t,e,s,!0);ms(()=>{mo(s[t],r)},n)}function Cr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function As(e){return e.shapeFlag&128?e.ssContent:e}function or(e,t,n=je,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ut();const l=gs(n),a=ht(t,n,e,i);return l(),jt(),a});return s?r.unshift(o):r.push(o),o}}const $t=e=>(t,n=je)=>{(!On||e==="sp")&&or(e,(...s)=>t(...s),n)},sf=$t("bm"),Fn=$t("m"),rf=$t("bu"),ya=$t("u"),Oo=$t("bum"),ms=$t("um"),of=$t("sp"),lf=$t("rtg"),af=$t("rtc");function cf(e,t=je){or("ec",e,t)}const ba="components";function Po(e,t){return va(ba,e,!0,t)||e}const _a=Symbol.for("v-ndc");function ko(e){return ve(e)?va(ba,e,!1)||e:e||_a}function va(e,t,n=!0,s=!1){const r=Ve||je;if(r){const o=r.type;{const l=eo(o,!1);if(l&&(l===t||l===Ge(t)||l===er(Ge(t))))return o}const i=li(r[e]||o[e],t)||li(r.appContext[e],t);return!i&&s?o:i}}function li(e,t){return e&&(e[t]||e[Ge(t)]||e[er(Ge(t))])}function Gr(e,t,n,s){let r;const o=n,i=z(e);if(i||ve(e)){const l=i&&Ft(e);let a=!1,u=!1;l&&(a=!nt(e),u=Bt(e),e=sr(e)),r=new Array(e.length);for(let c=0,f=e.length;ct(l,a,void 0,o));else{const l=Object.keys(e);r=new Array(l.length);for(let a=0,u=l.length;a0;return t!=="default"&&(n.name=t),se(),ze(Le,null,[le("slot",n,s&&s())],u?-2:64)}let o=e[t];o&&o._c&&(o._d=!1),se();const i=o&&Ea(o(n)),l=n.key||i&&i.key,a=ze(Le,{key:(l&&!st(l)?l:`_${t}`)+(!i&&s?"_fb":"")},i||(s?s():[]),i&&e._===1?64:-2);return!r&&a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),o&&o._c&&(o._d=!0),a}function Ea(e){return e.some(t=>Tn(t)?!(t.type===Ue||t.type===Le&&!Ea(t.children)):!0)?e:null}const Jr=e=>e?Ba(e)?cr(e):Jr(e.parent):null,es=Ne(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=>Jr(e.parent),$root:e=>Jr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ra(e),$forceUpdate:e=>e.f||(e.f=()=>{So(e.update)}),$nextTick:e=>e.n||(e.n=St.bind(e.proxy)),$watch:e=>qu.bind(e)}),Tr=(e,t)=>e!==ge&&!e.__isScriptSetup&&pe(e,t),uf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:o,accessCache:i,type:l,appContext:a}=e;if(t[0]!=="$"){const h=i[t];if(h!==void 0)switch(h){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return o[t]}else{if(Tr(s,t))return i[t]=1,s[t];if(r!==ge&&pe(r,t))return i[t]=2,r[t];if(pe(o,t))return i[t]=3,o[t];if(n!==ge&&pe(n,t))return i[t]=4,n[t];Xr&&(i[t]=0)}}const u=es[t];let c,f;if(u)return t==="$attrs"&&He(e.attrs,"get",""),u(e);if((c=l.__cssModules)&&(c=c[t]))return c;if(n!==ge&&pe(n,t))return i[t]=4,n[t];if(f=a.config.globalProperties,pe(f,t))return f[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:o}=e;return Tr(r,t)?(r[t]=n,!0):s!==ge&&pe(s,t)?(s[t]=n,!0):pe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:o,type:i}},l){let a;return!!(n[l]||e!==ge&&l[0]!=="$"&&pe(e,l)||Tr(t,l)||pe(o,l)||pe(s,l)||pe(es,l)||pe(r.config.globalProperties,l)||(a=i.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:pe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ai(e){return z(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Xr=!0;function ff(e){const t=Ra(e),n=e.proxy,s=e.ctx;Xr=!1,t.beforeCreate&&ci(t.beforeCreate,e,"bc");const{data:r,computed:o,methods:i,watch:l,provide:a,inject:u,created:c,beforeMount:f,mounted:h,beforeUpdate:p,updated:y,activated:m,deactivated:b,beforeDestroy:R,beforeUnmount:_,destroyed:v,unmounted:w,render:P,renderTracked:N,renderTriggered:B,errorCaptured:$,serverPrefetch:k,expose:H,inheritAttrs:J,components:L,directives:te,filters:ue}=t;if(u&&df(u,s,null),i)for(const Z in i){const ae=i[Z];Y(ae)&&(s[Z]=ae.bind(n))}if(r){const Z=r.call(n,n);de(Z)&&(e.data=fs(Z))}if(Xr=!0,o)for(const Z in o){const ae=o[Z],rt=Y(ae)?ae.bind(n,n):Y(ae.get)?ae.get.bind(n,n):Rt,De=!Y(ae)&&Y(ae.set)?ae.set.bind(n):Rt,we=Ie({get:rt,set:De});Object.defineProperty(s,Z,{enumerable:!0,configurable:!0,get:()=>we.value,set:Se=>we.value=Se})}if(l)for(const Z in l)xa(l[Z],s,n,Z);if(a){const Z=Y(a)?a.call(n):a;Reflect.ownKeys(Z).forEach(ae=>{Os(ae,Z[ae])})}c&&ci(c,e,"c");function oe(Z,ae){z(ae)?ae.forEach(rt=>Z(rt.bind(n))):ae&&Z(ae.bind(n))}if(oe(sf,f),oe(Fn,h),oe(rf,p),oe(ya,y),oe(ef,m),oe(tf,b),oe(cf,$),oe(af,N),oe(lf,B),oe(Oo,_),oe(ms,w),oe(of,k),z(H))if(H.length){const Z=e.exposed||(e.exposed={});H.forEach(ae=>{Object.defineProperty(Z,ae,{get:()=>n[ae],set:rt=>n[ae]=rt,enumerable:!0})})}else e.exposed||(e.exposed={});P&&e.render===Rt&&(e.render=P),J!=null&&(e.inheritAttrs=J),L&&(e.components=L),te&&(e.directives=te),k&&To(e)}function df(e,t,n=Rt){z(e)&&(e=Qr(e));for(const s in e){const r=e[s];let o;de(r)?"default"in r?o=at(r.from||s,r.default,!0):o=at(r.from||s):o=at(r),xe(o)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[s]=o}}function ci(e,t,n){ht(z(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function xa(e,t,n,s){let r=s.includes(".")?aa(n,s):()=>n[s];if(ve(e)){const o=t[e];Y(o)&&ft(r,o)}else if(Y(e))ft(r,e.bind(n));else if(de(e))if(z(e))e.forEach(o=>xa(o,t,n,s));else{const o=Y(e.handler)?e.handler.bind(n):t[e.handler];Y(o)&&ft(r,o,e)}}function Ra(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let a;return l?a=l:!r.length&&!n&&!s?a=t:(a={},r.length&&r.forEach(u=>Vs(a,u,i,!0)),Vs(a,t,i)),de(t)&&o.set(t,a),a}function Vs(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&Vs(e,o,n,!0),r&&r.forEach(i=>Vs(e,i,n,!0));for(const i in t)if(!(s&&i==="expose")){const l=hf[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const hf={data:ui,props:fi,emits:fi,methods:Jn,computed:Jn,beforeCreate:qe,created:qe,beforeMount:qe,mounted:qe,beforeUpdate:qe,updated:qe,beforeDestroy:qe,beforeUnmount:qe,destroyed:qe,unmounted:qe,activated:qe,deactivated:qe,errorCaptured:qe,serverPrefetch:qe,components:Jn,directives:Jn,watch:mf,provide:ui,inject:pf};function ui(e,t){return t?e?function(){return Ne(Y(e)?e.call(this,this):e,Y(t)?t.call(this,this):t)}:t:e}function pf(e,t){return Jn(Qr(e),Qr(t))}function Qr(e){if(z(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ge(t)}Modifiers`]||e[`${Yt(t)}Modifiers`];function _f(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ge;let r=n;const o=t.startsWith("update:"),i=o&&bf(s,t.slice(7));i&&(i.trim&&(r=n.map(c=>ve(c)?c.trim():c)),i.number&&(r=n.map(tr)));let l,a=s[l=wr(t)]||s[l=wr(Ge(t))];!a&&o&&(a=s[l=wr(Yt(t))]),a&&ht(a,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,ht(u,e,6,r)}}const vf=new WeakMap;function Aa(e,t,n=!1){const s=n?vf:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const o=e.emits;let i={},l=!1;if(!Y(e)){const a=u=>{const c=Aa(u,t,!0);c&&(l=!0,Ne(i,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!l?(de(e)&&s.set(e,null),null):(z(o)?o.forEach(a=>i[a]=null):Ne(i,o),de(e)&&s.set(e,i),i)}function ir(e,t){return!e||!Xs(t)?!1:(t=t.slice(2).replace(/Once$/,""),pe(e,t[0].toLowerCase()+t.slice(1))||pe(e,Yt(t))||pe(e,t))}function di(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:i,attrs:l,emit:a,render:u,renderCache:c,props:f,data:h,setupState:p,ctx:y,inheritAttrs:m}=e,b=js(e);let R,_;try{if(n.shapeFlag&4){const w=r||s,P=w;R=Et(u.call(P,w,c,f,p,h,y)),_=l}else{const w=t;R=Et(w.length>1?w(f,{attrs:l,slots:i,emit:a}):w(f,null)),_=t.props?l:wf(l)}}catch(w){ts.length=0,hs(w,e,1),R=le(Ue)}let v=R;if(_&&m!==!1){const w=Object.keys(_),{shapeFlag:P}=v;w.length&&P&7&&(o&&w.some(Qs)&&(_=Ef(_,o)),v=Vt(v,_,!1,!0))}return n.dirs&&(v=Vt(v,null,!1,!0),v.dirs=v.dirs?v.dirs.concat(n.dirs):n.dirs),n.transition&&Cn(v,n.transition),R=v,js(b),R}const wf=e=>{let t;for(const n in e)(n==="class"||n==="style"||Xs(n))&&((t||(t={}))[n]=e[n]);return t},Ef=(e,t)=>{const n={};for(const s in e)(!Qs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function xf(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:a}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?hi(s,i,u):!!i;if(a&8){const c=t.dynamicProps;for(let f=0;fObject.create(Ta),Pa=e=>Object.getPrototypeOf(e)===Ta;function Sf(e,t,n,s=!1){const r={},o=Oa();e.propsDefaults=Object.create(null),ka(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:Ql(r):e.type.props?e.props=r:e.props=o,e.attrs=o}function Af(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=ie(r),[a]=e.propsOptions;let u=!1;if((s||i>0)&&!(i&16)){if(i&8){const c=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,p]=Ia(f,t,!0);Ne(i,h),p&&l.push(...p)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!o&&!a)return de(e)&&s.set(e,En),En;if(z(o))for(let c=0;ce==="_"||e==="_ctx"||e==="$stable",No=e=>z(e)?e.map(Et):[Et(e)],Tf=(e,t,n)=>{if(t._n)return t;const s=At((...r)=>No(t(...r)),n);return s._c=!1,s},Na=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Io(r))continue;const o=e[r];if(Y(o))t[r]=Tf(r,o,s);else if(o!=null){const i=No(o);t[r]=()=>i}}},La=(e,t)=>{const n=No(t);e.slots.default=()=>n},Da=(e,t,n)=>{for(const s in t)(n||!Io(s))&&(e[s]=t[s])},Of=(e,t,n)=>{const s=e.slots=Oa();if(e.vnode.shapeFlag&32){const r=t._;r?(Da(s,t,n),n&&Pl(s,"_",r,!0)):Na(t,s)}else t&&La(e,t)},Pf=(e,t,n)=>{const{vnode:s,slots:r}=e;let o=!0,i=ge;if(s.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:Da(r,t,n):(o=!t.$stable,Na(t,r)),i=t}else t&&(La(e,t),i={default:1});if(o)for(const l in r)!Io(l)&&i[l]==null&&delete r[l]},ke=Df;function kf(e){return If(e)}function If(e,t){const n=nr();n.__VUE__=!0;const{insert:s,remove:r,patchProp:o,createElement:i,createText:l,createComment:a,setText:u,setElementText:c,parentNode:f,nextSibling:h,setScopeId:p=Rt,insertStaticContent:y}=e,m=(d,g,x,A=null,T=null,S=null,j=void 0,D=null,I=!!g.dynamicChildren)=>{if(d===g)return;d&&!Gt(d,g)&&(A=C(d),Se(d,T,S,!0),d=null),g.patchFlag===-2&&(I=!1,g.dynamicChildren=null);const{type:O,ref:X,shapeFlag:V}=g;switch(O){case lr:b(d,g,x,A);break;case Ue:R(d,g,x,A);break;case Ps:d==null&&_(g,x,A,j);break;case Le:L(d,g,x,A,T,S,j,D,I);break;default:V&1?P(d,g,x,A,T,S,j,D,I):V&6?te(d,g,x,A,T,S,j,D,I):(V&64||V&128)&&O.process(d,g,x,A,T,S,j,D,I,q)}X!=null&&T?Zn(X,d&&d.ref,S,g||d,!g):X==null&&d&&d.ref!=null&&Zn(d.ref,null,S,d,!0)},b=(d,g,x,A)=>{if(d==null)s(g.el=l(g.children),x,A);else{const T=g.el=d.el;g.children!==d.children&&u(T,g.children)}},R=(d,g,x,A)=>{d==null?s(g.el=a(g.children||""),x,A):g.el=d.el},_=(d,g,x,A)=>{[d.el,d.anchor]=y(d.children,g,x,A,d.el,d.anchor)},v=({el:d,anchor:g},x,A)=>{let T;for(;d&&d!==g;)T=h(d),s(d,x,A),d=T;s(g,x,A)},w=({el:d,anchor:g})=>{let x;for(;d&&d!==g;)x=h(d),r(d),d=x;r(g)},P=(d,g,x,A,T,S,j,D,I)=>{if(g.type==="svg"?j="svg":g.type==="math"&&(j="mathml"),d==null)N(g,x,A,T,S,j,D,I);else{const O=d.el&&d.el._isVueCE?d.el:null;try{O&&O._beginPatch(),k(d,g,T,S,j,D,I)}finally{O&&O._endPatch()}}},N=(d,g,x,A,T,S,j,D)=>{let I,O;const{props:X,shapeFlag:V,transition:G,dirs:Q}=d;if(I=d.el=i(d.type,S,X&&X.is,X),V&8?c(I,d.children):V&16&&$(d.children,I,null,A,T,Or(d,S),j,D),Q&&Zt(d,null,A,"created"),B(I,d,d.scopeId,j,A),X){for(const me in X)me!=="value"&&!Xn(me)&&o(I,me,null,X[me],S,A);"value"in X&&o(I,"value",null,X.value,S),(O=X.onVnodeBeforeMount)&&it(O,A,d)}Q&&Zt(d,null,A,"beforeMount");const ce=Nf(T,G);ce&&G.beforeEnter(I),s(I,g,x),((O=X&&X.onVnodeMounted)||ce||Q)&&ke(()=>{O&&it(O,A,d),ce&&G.enter(I),Q&&Zt(d,null,A,"mounted")},T)},B=(d,g,x,A,T)=>{if(x&&p(d,x),A)for(let S=0;S{for(let O=I;O{const D=g.el=d.el;let{patchFlag:I,dynamicChildren:O,dirs:X}=g;I|=d.patchFlag&16;const V=d.props||ge,G=g.props||ge;let Q;if(x&&tn(x,!1),(Q=G.onVnodeBeforeUpdate)&&it(Q,x,g,d),X&&Zt(g,d,x,"beforeUpdate"),x&&tn(x,!0),(V.innerHTML&&G.innerHTML==null||V.textContent&&G.textContent==null)&&c(D,""),O?H(d.dynamicChildren,O,D,x,A,Or(g,T),S):j||ae(d,g,D,null,x,A,Or(g,T),S,!1),I>0){if(I&16)J(D,V,G,x,T);else if(I&2&&V.class!==G.class&&o(D,"class",null,G.class,T),I&4&&o(D,"style",V.style,G.style,T),I&8){const ce=g.dynamicProps;for(let me=0;me{Q&&it(Q,x,g,d),X&&Zt(g,d,x,"updated")},A)},H=(d,g,x,A,T,S,j)=>{for(let D=0;D{if(g!==x){if(g!==ge)for(const S in g)!Xn(S)&&!(S in x)&&o(d,S,g[S],null,T,A);for(const S in x){if(Xn(S))continue;const j=x[S],D=g[S];j!==D&&S!=="value"&&o(d,S,D,j,T,A)}"value"in x&&o(d,"value",g.value,x.value,T)}},L=(d,g,x,A,T,S,j,D,I)=>{const O=g.el=d?d.el:l(""),X=g.anchor=d?d.anchor:l("");let{patchFlag:V,dynamicChildren:G,slotScopeIds:Q}=g;Q&&(D=D?D.concat(Q):Q),d==null?(s(O,x,A),s(X,x,A),$(g.children||[],x,X,T,S,j,D,I)):V>0&&V&64&&G&&d.dynamicChildren&&d.dynamicChildren.length===G.length?(H(d.dynamicChildren,G,x,T,S,j,D),(g.key!=null||T&&g===T.subTree)&&Lo(d,g,!0)):ae(d,g,x,X,T,S,j,D,I)},te=(d,g,x,A,T,S,j,D,I)=>{g.slotScopeIds=D,d==null?g.shapeFlag&512?T.ctx.activate(g,x,A,j,I):ue(g,x,A,T,S,j,I):Oe(d,g,I)},ue=(d,g,x,A,T,S,j)=>{const D=d.component=$f(d,A,T);if(ps(d)&&(D.ctx.renderer=q),Hf(D,!1,j),D.asyncDep){if(T&&T.registerDep(D,oe,j),!d.el){const I=D.subTree=le(Ue);R(null,I,g,x),d.placeholder=I.el}}else oe(D,d,g,x,T,S,j)},Oe=(d,g,x)=>{const A=g.component=d.component;if(xf(d,g,x))if(A.asyncDep&&!A.asyncResolved){Z(A,g,x);return}else A.next=g,A.update();else g.el=d.el,A.vnode=g},oe=(d,g,x,A,T,S,j)=>{const D=()=>{if(d.isMounted){let{next:V,bu:G,u:Q,parent:ce,vnode:me}=d;{const yt=Ma(d);if(yt){V&&(V.el=me.el,Z(d,V,j)),yt.asyncDep.then(()=>{ke(()=>{d.isUnmounted||O()},T)});return}}let ye=V,Ce;tn(d,!1),V?(V.el=me.el,Z(d,V,j)):V=me,G&&Rn(G),(Ce=V.props&&V.props.onVnodeBeforeUpdate)&&it(Ce,ce,V,me),tn(d,!0);const Fe=di(d),gt=d.subTree;d.subTree=Fe,m(gt,Fe,f(gt.el),C(gt),d,T,S),V.el=Fe.el,ye===null&&Rf(d,Fe.el),Q&&ke(Q,T),(Ce=V.props&&V.props.onVnodeUpdated)&&ke(()=>it(Ce,ce,V,me),T)}else{let V;const{el:G,props:Q}=g,{bm:ce,m:me,parent:ye,root:Ce,type:Fe}=d,gt=Jt(g);tn(d,!1),ce&&Rn(ce),!gt&&(V=Q&&Q.onVnodeBeforeMount)&&it(V,ye,g),tn(d,!0);{Ce.ce&&Ce.ce._hasShadowRoot()&&Ce.ce._injectChildStyle(Fe,d.parent?d.parent.type:void 0);const yt=d.subTree=di(d);m(null,yt,x,A,d,T,S),g.el=yt.el}if(me&&ke(me,T),!gt&&(V=Q&&Q.onVnodeMounted)){const yt=g;ke(()=>it(V,ye,yt),T)}(g.shapeFlag&256||ye&&Jt(ye.vnode)&&ye.vnode.shapeFlag&256)&&d.a&&ke(d.a,T),d.isMounted=!0,g=x=A=null}};d.scope.on();const I=d.effect=new Fl(D);d.scope.off();const O=d.update=I.run.bind(I),X=d.job=I.runIfDirty.bind(I);X.i=d,X.id=d.uid,I.scheduler=()=>So(X),tn(d,!0),O()},Z=(d,g,x)=>{g.component=d;const A=d.vnode.props;d.vnode=g,d.next=null,Af(d,g.props,A,x),Pf(d,g.children,x),Ut(),ei(d),jt()},ae=(d,g,x,A,T,S,j,D,I=!1)=>{const O=d&&d.children,X=d?d.shapeFlag:0,V=g.children,{patchFlag:G,shapeFlag:Q}=g;if(G>0){if(G&128){De(O,V,x,A,T,S,j,D,I);return}else if(G&256){rt(O,V,x,A,T,S,j,D,I);return}}Q&8?(X&16&&Xe(O,T,S),V!==O&&c(x,V)):X&16?Q&16?De(O,V,x,A,T,S,j,D,I):Xe(O,T,S,!0):(X&8&&c(x,""),Q&16&&$(V,x,A,T,S,j,D,I))},rt=(d,g,x,A,T,S,j,D,I)=>{d=d||En,g=g||En;const O=d.length,X=g.length,V=Math.min(O,X);let G;for(G=0;GX?Xe(d,T,S,!0,!1,V):$(g,x,A,T,S,j,D,I,V)},De=(d,g,x,A,T,S,j,D,I)=>{let O=0;const X=g.length;let V=d.length-1,G=X-1;for(;O<=V&&O<=G;){const Q=d[O],ce=g[O]=I?It(g[O]):Et(g[O]);if(Gt(Q,ce))m(Q,ce,x,null,T,S,j,D,I);else break;O++}for(;O<=V&&O<=G;){const Q=d[V],ce=g[G]=I?It(g[G]):Et(g[G]);if(Gt(Q,ce))m(Q,ce,x,null,T,S,j,D,I);else break;V--,G--}if(O>V){if(O<=G){const Q=G+1,ce=QG)for(;O<=V;)Se(d[O],T,S,!0),O++;else{const Q=O,ce=O,me=new Map;for(O=ce;O<=G;O++){const et=g[O]=I?It(g[O]):Et(g[O]);et.key!=null&&me.set(et.key,O)}let ye,Ce=0;const Fe=G-ce+1;let gt=!1,yt=0;const jn=new Array(Fe);for(O=0;O=Fe){Se(et,T,S,!0);continue}let bt;if(et.key!=null)bt=me.get(et.key);else for(ye=ce;ye<=G;ye++)if(jn[ye-ce]===0&&Gt(et,g[ye])){bt=ye;break}bt===void 0?Se(et,T,S,!0):(jn[bt-ce]=O+1,bt>=yt?yt=bt:gt=!0,m(et,g[bt],x,null,T,S,j,D,I),Ce++)}const zo=gt?Lf(jn):En;for(ye=zo.length-1,O=Fe-1;O>=0;O--){const et=ce+O,bt=g[et],Go=g[et+1],Jo=et+1{const{el:S,type:j,transition:D,children:I,shapeFlag:O}=d;if(O&6){we(d.component.subTree,g,x,A);return}if(O&128){d.suspense.move(g,x,A);return}if(O&64){j.move(d,g,x,q);return}if(j===Le){s(S,g,x);for(let V=0;VD.enter(S),T);else{const{leave:V,delayLeave:G,afterLeave:Q}=D,ce=()=>{d.ctx.isUnmounted?r(S):s(S,g,x)},me=()=>{S._isLeaving&&S[vt](!0),V(S,()=>{ce(),Q&&Q()})};G?G(S,ce,me):me()}else s(S,g,x)},Se=(d,g,x,A=!1,T=!1)=>{const{type:S,props:j,ref:D,children:I,dynamicChildren:O,shapeFlag:X,patchFlag:V,dirs:G,cacheIndex:Q,memo:ce}=d;if(V===-2&&(T=!1),D!=null&&(Ut(),Zn(D,null,x,d,!0),jt()),Q!=null&&(g.renderCache[Q]=void 0),X&256){g.ctx.deactivate(d);return}const me=X&1&&G,ye=!Jt(d);let Ce;if(ye&&(Ce=j&&j.onVnodeBeforeUnmount)&&it(Ce,g,d),X&6)Me(d.component,x,A);else{if(X&128){d.suspense.unmount(x,A);return}me&&Zt(d,null,g,"beforeUnmount"),X&64?d.type.remove(d,g,x,q,A):O&&!O.hasOnce&&(S!==Le||V>0&&V&64)?Xe(O,g,x,!1,!0):(S===Le&&V&384||!T&&X&16)&&Xe(I,g,x),A&&Ct(d)}const Fe=ce!=null&&Q==null;(ye&&(Ce=j&&j.onVnodeUnmounted)||me||Fe)&&ke(()=>{Ce&&it(Ce,g,d),me&&Zt(d,null,g,"unmounted"),Fe&&(d.el=null)},x)},Ct=d=>{const{type:g,el:x,anchor:A,transition:T}=d;if(g===Le){fe(x,A);return}if(g===Ps){w(d);return}const S=()=>{r(x),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(d.shapeFlag&1&&T&&!T.persisted){const{leave:j,delayLeave:D}=T,I=()=>j(x,S);D?D(d.el,S,I):I()}else S()},fe=(d,g)=>{let x;for(;d!==g;)x=h(d),r(d),d=x;r(g)},Me=(d,g,x)=>{const{bum:A,scope:T,job:S,subTree:j,um:D,m:I,a:O}=d;$s(I),$s(O),A&&Rn(A),T.stop(),S&&(S.flags|=8,Se(j,d,g,x)),D&&ke(D,g),ke(()=>{d.isUnmounted=!0},g)},Xe=(d,g,x,A=!1,T=!1,S=0)=>{for(let j=S;j{if(d.shapeFlag&6)return C(d.component.subTree);if(d.shapeFlag&128)return d.suspense.next();const g=h(d.anchor||d.el),x=g&&g[ca];return x?h(x):g};let M=!1;const F=(d,g,x)=>{let A;d==null?g._vnode&&(Se(g._vnode,null,null,!0),A=g._vnode.component):m(g._vnode||null,d,g,null,null,null,x),g._vnode=d,M||(M=!0,ei(A),sa(),M=!1)},q={p:m,um:Se,m:we,r:Ct,mt:ue,mc:$,pc:ae,pbc:H,n:C,o:e};return{render:F,hydrate:void 0,createApp:yf(F)}}function Or({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 tn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Nf(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Lo(e,t,n=!1){const s=e.children,r=t.children;if(z(s)&&z(r))for(let o=0;o>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Ma(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ma(t)}function $s(e){if(e)for(let t=0;te.__isSuspense;function Df(e,t){t&&t.pendingBranch?z(e)?t.effects.push(...e):t.effects.push(e):Bu(e)}const Le=Symbol.for("v-fgt"),lr=Symbol.for("v-txt"),Ue=Symbol.for("v-cmt"),Ps=Symbol.for("v-stc"),ts=[];let tt=null;function se(e=!1){ts.push(tt=e?null:[])}function Mf(){ts.pop(),tt=ts[ts.length-1]||null}let as=1;function qs(e,t=!1){as+=e,e<0&&tt&&t&&(tt.hasOnce=!0)}function Ua(e){return e.dynamicChildren=as>0?tt||En:null,Mf(),as>0&&tt&&tt.push(e),e}function Ee(e,t,n,s,r,o){return Ua(ne(e,t,n,s,r,o,!0))}function ze(e,t,n,s,r){return Ua(le(e,t,n,s,r,!0))}function Tn(e){return e?e.__v_isVNode===!0:!1}function Gt(e,t){return e.type===t.type&&e.key===t.key}const ja=({key:e})=>e??null,ks=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ve(e)||xe(e)||Y(e)?{i:Ve,r:e,k:t,f:!!n}:e:null);function ne(e,t=null,n=null,s=0,r=null,o=e===Le?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ja(t),ref:t&&ks(t),scopeId:oa,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:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Ve};return l?(Do(a,n),o&128&&e.normalize(a)):n&&(a.shapeFlag|=ve(n)?8:16),as>0&&!i&&tt&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&tt.push(a),a}const le=Ff;function Ff(e,t=null,n=null,s=0,r=null,o=!1){if((!e||e===_a)&&(e=Ue),Tn(e)){const l=Vt(e,t,!0);return n&&Do(l,n),as>0&&!o&&tt&&(l.shapeFlag&6?tt[tt.indexOf(e)]=l:tt.push(l)),l.patchFlag=-2,l}if(zf(e)&&(e=e.__vccOpts),t){t=Uf(t);let{class:l,style:a}=t;l&&!ve(l)&&(t.class=Mt(l)),de(a)&&(rr(a)&&!z(a)&&(a=Ne({},a)),t.style=go(a))}const i=ve(e)?1:Hs(e)?128:ua(e)?64:de(e)?4:Y(e)?2:0;return ne(e,t,n,s,r,i,o,!0)}function Uf(e){return e?rr(e)||Pa(e)?Ne({},e):e:null}function Vt(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:a}=e,u=t?jf(r||{},t):r,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&ja(u),ref:t&&t.ref?n&&o?z(o)?o.concat(ks(t)):[o,ks(t)]:ks(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Le?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Vt(e.ssContent),ssFallback:e.ssFallback&&Vt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Cn(c,a.clone(c)),c}function Ks(e=" ",t=0){return le(lr,null,e,t)}function Wg(e,t){const n=le(Ps,null,e);return n.staticCount=t,n}function Ye(e="",t=!1){return t?(se(),ze(Ue,null,e)):le(Ue,null,e)}function Et(e){return e==null||typeof e=="boolean"?le(Ue):z(e)?le(Le,null,e.slice()):Tn(e)?It(e):le(lr,null,String(e))}function It(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Vt(e)}function Do(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(z(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Do(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Pa(t)?t._ctx=Ve:r===3&&Ve&&(Ve.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Y(t)?(t={default:t,_ctx:Ve},n=32):(t=String(t),s&64?(n=16,t=[Ks(t)]):n=8);e.children=t,e.shapeFlag|=n}function jf(...e){const t={};for(let n=0;nje||Ve;let Ws,Zr;{const e=nr(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),o=>{r.length>1?r.forEach(i=>i(o)):r[0](o)}};Ws=t("__VUE_INSTANCE_SETTERS__",n=>je=n),Zr=t("__VUE_SSR_SETTERS__",n=>On=n)}const gs=e=>{const t=je;return Ws(e),e.scope.on(),()=>{e.scope.off(),Ws(t)}},mi=()=>{je&&je.scope.off(),Ws(null)};function Ba(e){return e.vnode.shapeFlag&4}let On=!1;function Hf(e,t=!1,n=!1){t&&Zr(t);const{props:s,children:r}=e.vnode,o=Ba(e);Sf(e,s,o,t),Of(e,r,n||t);const i=o?qf(e,t):void 0;return t&&Zr(!1),i}function qf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,uf);const{setup:s}=n;if(s){Ut();const r=e.setupContext=s.length>1?Wf(e):null,o=gs(e),i=ds(s,e,0,[e.props,r]),l=Cl(i);if(jt(),o(),(l||e.sp)&&!Jt(e)&&To(e),l){if(i.then(mi,mi),t)return i.then(a=>{gi(e,a)}).catch(a=>{hs(a,e,0)});e.asyncDep=i}else gi(e,i)}else Va(e)}function gi(e,t,n){Y(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:de(t)&&(e.setupState=Zl(t)),Va(e)}function Va(e,t,n){const s=e.type;e.render||(e.render=s.render||Rt);{const r=gs(e);Ut();try{ff(e)}finally{jt(),r()}}}const Kf={get(e,t){return He(e,"get",""),e[t]}};function Wf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Kf),slots:e.slots,emit:e.emit,expose:t}}function cr(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Zl(Ro(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in es)return es[n](e)},has(t,n){return n in t||n in es}})):e.proxy}function eo(e,t=!0){return Y(e)?e.displayName||e.name:e.name||t&&e.__name}function zf(e){return Y(e)&&"__vccOpts"in e}const Ie=(e,t)=>Du(e,t,On);function Pn(e,t,n){try{qs(-1);const s=arguments.length;return s===2?de(t)&&!z(t)?Tn(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Tn(n)&&(n=[n]),le(e,t,n))}finally{qs(1)}}const Gf="3.5.32";let to;const yi=typeof window<"u"&&window.trustedTypes;if(yi)try{to=yi.createPolicy("vue",{createHTML:e=>e})}catch{}const $a=to?e=>to.createHTML(e):e=>e,Jf="http://www.w3.org/2000/svg",Xf="http://www.w3.org/1998/Math/MathML",kt=typeof document<"u"?document:null,bi=kt&&kt.createElement("template"),Qf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?kt.createElementNS(Jf,e):t==="mathml"?kt.createElementNS(Xf,e):n?kt.createElement(e,{is:n}):kt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>kt.createTextNode(e),createComment:e=>kt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>kt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===o||!(r=r.nextSibling)););else{bi.innerHTML=$a(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=bi.content;if(s==="svg"||s==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ht="transition",$n="animation",cs=Symbol("_vtc"),Ha={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},Yf=Ne({},fa,Ha),Zf=e=>(e.displayName="Transition",e.props=Yf,e),ur=Zf((e,{slots:t})=>Pn(Xu,ed(e),t)),nn=(e,t=[])=>{z(e)?e.forEach(n=>n(...t)):e&&e(...t)},_i=e=>e?z(e)?e.some(t=>t.length>1):e.length>1:!1;function ed(e){const t={};for(const L in e)L in Ha||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:u=i,appearToClass:c=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:p=`${n}-leave-to`}=e,y=td(r),m=y&&y[0],b=y&&y[1],{onBeforeEnter:R,onEnter:_,onEnterCancelled:v,onLeave:w,onLeaveCancelled:P,onBeforeAppear:N=R,onAppear:B=_,onAppearCancelled:$=v}=t,k=(L,te,ue,Oe)=>{L._enterCancelled=Oe,sn(L,te?c:l),sn(L,te?u:i),ue&&ue()},H=(L,te)=>{L._isLeaving=!1,sn(L,f),sn(L,p),sn(L,h),te&&te()},J=L=>(te,ue)=>{const Oe=L?B:_,oe=()=>k(te,L,ue);nn(Oe,[te,oe]),vi(()=>{sn(te,L?a:o),Ot(te,L?c:l),_i(Oe)||wi(te,s,m,oe)})};return Ne(t,{onBeforeEnter(L){nn(R,[L]),Ot(L,o),Ot(L,i)},onBeforeAppear(L){nn(N,[L]),Ot(L,a),Ot(L,u)},onEnter:J(!1),onAppear:J(!0),onLeave(L,te){L._isLeaving=!0;const ue=()=>H(L,te);Ot(L,f),L._enterCancelled?(Ot(L,h),Ri(L)):(Ri(L),Ot(L,h)),vi(()=>{L._isLeaving&&(sn(L,f),Ot(L,p),_i(w)||wi(L,s,b,ue))}),nn(w,[L,ue])},onEnterCancelled(L){k(L,!1,void 0,!0),nn(v,[L])},onAppearCancelled(L){k(L,!0,void 0,!0),nn($,[L])},onLeaveCancelled(L){H(L),nn(P,[L])}})}function td(e){if(e==null)return null;if(de(e))return[Pr(e.enter),Pr(e.leave)];{const t=Pr(e);return[t,t]}}function Pr(e){return eu(e)}function Ot(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[cs]||(e[cs]=new Set)).add(t)}function sn(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[cs];n&&(n.delete(t),n.size||(e[cs]=void 0))}function vi(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let nd=0;function wi(e,t,n,s){const r=e._endId=++nd,o=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(o,n);const{type:i,timeout:l,propCount:a}=sd(e,t);if(!i)return s();const u=i+"end";let c=0;const f=()=>{e.removeEventListener(u,h),o()},h=p=>{p.target===e&&++c>=a&&f()};setTimeout(()=>{c(n[y]||"").split(", "),r=s(`${Ht}Delay`),o=s(`${Ht}Duration`),i=Ei(r,o),l=s(`${$n}Delay`),a=s(`${$n}Duration`),u=Ei(l,a);let c=null,f=0,h=0;t===Ht?i>0&&(c=Ht,f=i,h=o.length):t===$n?u>0&&(c=$n,f=u,h=a.length):(f=Math.max(i,u),c=f>0?i>u?Ht:$n:null,h=c?c===Ht?o.length:a.length:0);const p=c===Ht&&/\b(?:transform|all)(?:,|$)/.test(s(`${Ht}Property`).toString());return{type:c,timeout:f,propCount:h,hasTransform:p}}function Ei(e,t){for(;e.lengthxi(n)+xi(e[s])))}function xi(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Ri(e){return(e?e.ownerDocument:document).body.offsetHeight}function rd(e,t,n){const s=e[cs];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const zs=Symbol("_vod"),qa=Symbol("_vsh"),zg={name:"show",beforeMount(e,{value:t},{transition:n}){e[zs]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Hn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),Hn(e,!0),s.enter(e)):s.leave(e,()=>{Hn(e,!1)}):Hn(e,t))},beforeUnmount(e,{value:t}){Hn(e,t)}};function Hn(e,t){e.style.display=t?e[zs]:"none",e[qa]=!t}const od=Symbol(""),id=/(?:^|;)\s*display\s*:/;function ld(e,t,n){const s=e.style,r=ve(n);let o=!1;if(n&&!r){if(t)if(ve(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&Is(s,l,"")}else for(const i in t)n[i]==null&&Is(s,i,"");for(const i in n)i==="display"&&(o=!0),Is(s,i,n[i])}else if(r){if(t!==n){const i=s[od];i&&(n+=";"+i),s.cssText=n,o=id.test(n)}}else t&&e.removeAttribute("style");zs in e&&(e[zs]=o?s.display:"",e[qa]&&(s.display="none"))}const Si=/\s*!important$/;function Is(e,t,n){if(z(n))n.forEach(s=>Is(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ad(e,t);Si.test(n)?e.setProperty(Yt(s),n.replace(Si,""),"important"):e[s]=n}}const Ai=["Webkit","Moz","ms"],kr={};function ad(e,t){const n=kr[t];if(n)return n;let s=Ge(t);if(s!=="filter"&&s in e)return kr[t]=s;s=er(s);for(let r=0;rIr||(dd.then(()=>Ir=0),Ir=Date.now());function pd(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;ht(md(s,n.value),t,5,[s])};return n.value=e,n.attached=hd(),n}function md(e,t){if(z(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Ii=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,gd=(e,t,n,s,r,o)=>{const i=r==="svg";t==="class"?rd(e,s,i):t==="style"?ld(e,n,s):Xs(t)?Qs(t)||ud(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):yd(e,t,s,i))?(Oi(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ti(e,t,s,i,o,t!=="value")):e._isVueCE&&(bd(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ve(s)))?Oi(e,Ge(t),s,o,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Ti(e,t,s,i))};function yd(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ii(t)&&Y(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 r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Ii(t)&&ve(n)?!1:t in e}function bd(e,t){const n=e._def.props;if(!n)return!1;const s=Ge(t);return Array.isArray(n)?n.some(r=>Ge(r)===s):Object.keys(n).some(r=>Ge(r)===s)}const Qt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return z(t)?n=>Rn(t,n):t};function _d(e){e.target.composing=!0}function Ni(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ct=Symbol("_assign");function Li(e,t,n){return t&&(e=e.trim()),n&&(e=tr(e)),e}const Gs={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[ct]=Qt(r);const o=s||r.props&&r.props.type==="number";Dt(e,t?"change":"input",i=>{i.target.composing||e[ct](Li(e.value,n,o))}),(n||o)&&Dt(e,"change",()=>{e.value=Li(e.value,n,o)}),t||(Dt(e,"compositionstart",_d),Dt(e,"compositionend",Ni),Dt(e,"change",Ni))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:o}},i){if(e[ct]=Qt(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?tr(e.value):e.value,a=t??"";if(l===a)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===a)||(e.value=a)}},vd={deep:!0,created(e,t,n){e[ct]=Qt(n),Dt(e,"change",()=>{const s=e._modelValue,r=kn(e),o=e.checked,i=e[ct];if(z(s)){const l=yo(s,r),a=l!==-1;if(o&&!a)i(s.concat(r));else if(!o&&a){const u=[...s];u.splice(l,1),i(u)}}else if(Dn(s)){const l=new Set(s);o?l.add(r):l.delete(r),i(l)}else i(Ka(e,o))})},mounted:Di,beforeUpdate(e,t,n){e[ct]=Qt(n),Di(e,t,n)}};function Di(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(z(t))r=yo(t,s.props.value)>-1;else if(Dn(t))r=t.has(s.props.value);else{if(t===n)return;r=Xt(t,Ka(e,!0))}e.checked!==r&&(e.checked=r)}const wd={created(e,{value:t},n){e.checked=Xt(t,n.props.value),e[ct]=Qt(n),Dt(e,"change",()=>{e[ct](kn(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[ct]=Qt(s),t!==n&&(e.checked=Xt(t,s.props.value))}},Ed={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=Dn(t);Dt(e,"change",()=>{const o=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?tr(kn(i)):kn(i));e[ct](e.multiple?r?new Set(o):o:o[0]),e._assigning=!0,St(()=>{e._assigning=!1})}),e[ct]=Qt(s)},mounted(e,{value:t}){Mi(e,t)},beforeUpdate(e,t,n){e[ct]=Qt(n)},updated(e,{value:t}){e._assigning||Mi(e,t)}};function Mi(e,t){const n=e.multiple,s=z(t);if(!(n&&!s&&!Dn(t))){for(let r=0,o=e.options.length;rString(u)===String(l)):i.selected=yo(t,l)>-1}else i.selected=t.has(l);else if(Xt(kn(i),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function kn(e){return"_value"in e?e._value:e.value}function Ka(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Gg={created(e,t,n){Cs(e,t,n,null,"created")},mounted(e,t,n){Cs(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Cs(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Cs(e,t,n,s,"updated")}};function xd(e,t){switch(e){case"SELECT":return Ed;case"TEXTAREA":return Gs;default:switch(t){case"checkbox":return vd;case"radio":return wd;default:return Gs}}}function Cs(e,t,n,s,r){const i=xd(e.tagName,n.props&&n.props.type)[r];i&&i(e,t,n,s)}const Rd=["ctrl","shift","alt","meta"],Sd={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)=>Rd.some(n=>e[`${n}Key`]&&!t.includes(n))},vn=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((r,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(r=>{if(!("key"in r))return;const o=Yt(r.key);if(t.some(i=>i===o||Ad[i]===o))return e(r)}))},Cd=Ne({patchProp:gd},Qf);let Fi;function Td(){return Fi||(Fi=kf(Cd))}const Od=((...e)=>{const t=Td().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=kd(s);if(!r)return;const o=t._component;!Y(o)&&!o.render&&!o.template&&(o.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,Pd(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},t});function Pd(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function kd(e){return ve(e)?document.querySelector(e):e}let Wa;const fr=e=>Wa=e,za=Symbol();function no(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ns;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ns||(ns={}));function Id(){const e=Dl(!0),t=e.run(()=>ee({}));let n=[],s=[];const r=Ro({install(o){fr(r),r._a=o,o.provide(za,r),o.config.globalProperties.$pinia=r,s.forEach(i=>n.push(i)),s=[]},use(o){return this._a?n.push(o):s.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}const Ga=()=>{};function Ui(e,t,n,s=Ga){e.add(t);const r=()=>{e.delete(t)&&s()};return!n&&Ml()&&au(r),r}function gn(e,...t){e.forEach(n=>{n(...t)})}const Nd=e=>e(),ji=Symbol(),Nr=Symbol();function so(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],r=e[n];no(r)&&no(s)&&e.hasOwnProperty(n)&&!xe(s)&&!Ft(s)?e[n]=so(r,s):e[n]=s}return e}const Ld=Symbol();function Dd(e){return!no(e)||!Object.prototype.hasOwnProperty.call(e,Ld)}const{assign:Kt}=Object;function Md(e){return!!(xe(e)&&e.effect)}function Fd(e,t,n,s){const{state:r,actions:o,getters:i}=t,l=n.state.value[e];let a;function u(){l||(n.state.value[e]=r?r():{});const c=ku(n.state.value[e]);return Kt(c,o,Object.keys(i||{}).reduce((f,h)=>(f[h]=Ro(Ie(()=>{fr(n);const p=n._s.get(e);return i[h].call(p,p)})),f),{}))}return a=Ja(e,u,t,n,s,!0),a}function Ja(e,t,n={},s,r,o){let i;const l=Kt({actions:{}},n),a={deep:!0};let u,c,f=new Set,h=new Set,p;const y=s.state.value[e];!o&&!y&&(s.state.value[e]={});let m;function b($){let k;u=c=!1,typeof $=="function"?($(s.state.value[e]),k={type:ns.patchFunction,storeId:e,events:p}):(so(s.state.value[e],$),k={type:ns.patchObject,payload:$,storeId:e,events:p});const H=m=Symbol();St().then(()=>{m===H&&(u=!0)}),c=!0,gn(f,k,s.state.value[e])}const R=o?function(){const{state:k}=n,H=k?k():{};this.$patch(J=>{Kt(J,H)})}:Ga;function _(){i.stop(),f.clear(),h.clear(),s._s.delete(e)}const v=($,k="")=>{if(ji in $)return $[Nr]=k,$;const H=function(){fr(s);const J=Array.from(arguments),L=new Set,te=new Set;function ue(Z){L.add(Z)}function Oe(Z){te.add(Z)}gn(h,{args:J,name:H[Nr],store:P,after:ue,onError:Oe});let oe;try{oe=$.apply(this&&this.$id===e?this:P,J)}catch(Z){throw gn(te,Z),Z}return oe instanceof Promise?oe.then(Z=>(gn(L,Z),Z)).catch(Z=>(gn(te,Z),Promise.reject(Z))):(gn(L,oe),oe)};return H[ji]=!0,H[Nr]=k,H},w={_p:s,$id:e,$onAction:Ui.bind(null,h),$patch:b,$reset:R,$subscribe($,k={}){const H=Ui(f,$,k.detached,()=>J()),J=i.run(()=>ft(()=>s.state.value[e],L=>{(k.flush==="sync"?c:u)&&$({storeId:e,type:ns.direct,events:p},L)},Kt({},a,k)));return H},$dispose:_},P=fs(w);s._s.set(e,P);const B=(s._a&&s._a.runWithContext||Nd)(()=>s._e.run(()=>(i=Dl()).run(()=>t({action:v}))));for(const $ in B){const k=B[$];if(xe(k)&&!Md(k)||Ft(k))o||(y&&Dd(k)&&(xe(k)?k.value=y[$]:so(k,y[$])),s.state.value[e][$]=k);else if(typeof k=="function"){const H=v(k,$);B[$]=H,l.actions[$]=k}}return Kt(P,B),Kt(ie(P),B),Object.defineProperty(P,"$state",{get:()=>s.state.value[e],set:$=>{b(k=>{Kt(k,$)})}}),s._p.forEach($=>{Kt(P,i.run(()=>$({store:P,app:s._a,pinia:s,options:l})))}),y&&o&&n.hydrate&&n.hydrate(P.$state,y),u=!0,c=!0,P}function dr(e,t,n){let s;const r=typeof t=="function";s=r?n:t;function o(i,l){const a=Vu();return i=i||(a?at(za,null):null),i&&fr(i),i=Wa,i._s.has(e)||(r?Ja(e,t,s,i):Fd(e,s,i)),i._s.get(e)}return o.$id=e,o}const Bi=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Ud=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,n,s)=>s?s.toUpperCase():n.toLowerCase()),jd=e=>{const t=Ud(e);return t.charAt(0).toUpperCase()+t.slice(1)},Bd=(...e)=>e.filter((t,n,s)=>!!t&&t.trim()!==""&&s.indexOf(t)===n).join(" ").trim(),Vi=e=>e==="";var qn={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};const Vd=({name:e,iconNode:t,absoluteStrokeWidth:n,"absolute-stroke-width":s,strokeWidth:r,"stroke-width":o,size:i=qn.width,color:l=qn.stroke,...a},{slots:u})=>Pn("svg",{...qn,...a,width:i,height:i,stroke:l,"stroke-width":Vi(n)||Vi(s)||n===!0||s===!0?Number(r||o||qn["stroke-width"])*24/Number(i):r||o||qn["stroke-width"],class:Bd("lucide",a.class,...e?[`lucide-${Bi(jd(e))}-icon`,`lucide-${Bi(e)}`]:["lucide-icon"])},[...t.map(c=>Pn(...c)),...u.default?[u.default()]:[]]);const Te=(e,t)=>(n,{slots:s,attrs:r})=>Pn(Vd,{...r,...n,iconNode:t,name:e},s);const Xa=Te("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);const Qa=Te("boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);const Ya=Te("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);const $d=Te("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);const Za=Te("fingerprint-pattern",[["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M2 12a10 10 0 0 1 18-6",key:"ydlgp0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2",key:"1tidbn"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2",key:"1fr1j5"}]]);const ec=Te("gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);const tc=Te("library-big",[["rect",{width:"8",height:"18",x:"3",y:"3",rx:"1",key:"oynpb5"}],["path",{d:"M7 3v18",key:"bbkbws"}],["path",{d:"M20.4 18.9c.2.5-.1 1.1-.6 1.3l-1.9.7c-.5.2-1.1-.1-1.3-.6L11.1 5.1c-.2-.5.1-1.1.6-1.3l1.9-.7c.5-.2 1.1.1 1.3.6Z",key:"1qboyk"}]]);const nc=Te("list-checks",[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]]);const sc=Te("list-tree",[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]]);const Hd=Te("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]);const qd=Te("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]);const rc=Te("network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);const oc=Te("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]);const Kd=Te("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);const Wd=Te("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);const ic=Te("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);const lc=Te("shield-half",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 22V2",key:"zs6s6o"}]]);const zd=Te("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);const ac=Te("webhook",[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2",key:"q3hayz"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06",key:"1go1hn"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8",key:"qlwsc0"}]]);const Gd=Te("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),Jd=["disabled"],Xd={key:0,class:"animate-spin -ml-1 mr-2 h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},$i={__name:"Button",props:{variant:{type:String,default:"primary",validator:e=>["primary","secondary","danger","ghost","chip"].includes(e)},size:{type:String,default:"md",validator:e=>["xs","sm","md","lg"].includes(e)},active:{type:Boolean,default:!1},disabled:Boolean,loading:Boolean},setup(e){const t=e,n=Ie(()=>{switch(t.size){case"xs":return"h-7 px-2.5 text-xs touch-expand-xs";case"sm":return"h-8 px-3 text-xs touch-expand-sm";case"lg":return"h-12 px-6 text-base";default:return"h-10 px-4 text-sm"}}),s=Ie(()=>{switch(t.variant){case"secondary":return"bg-secondary text-secondary-foreground hover:bg-secondary/80 border border-border shadow-sm";case"danger":return"bg-red-600 text-white border border-red-500 hover:bg-red-500 focus:ring-red-500 shadow-sm";case"ghost":return"bg-transparent text-foreground-muted hover:text-foreground hover:bg-surface-hover";case"chip":return t.active?"bg-primary text-primary-foreground border border-primary":"bg-surface text-foreground-muted border border-border hover:text-white hover:border-foreground-muted";default:return"bg-primary text-primary-foreground hover:bg-primary/90 focus:ring-primary shadow-sm border border-transparent"}});return(r,o)=>(se(),Ee("button",{class:Mt(["inline-flex items-center justify-center gap-2 rounded-md font-medium transition-colors duration-150 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-background disabled:opacity-50 disabled:cursor-not-allowed",n.value,s.value]),disabled:e.disabled||e.loading},[e.loading?(se(),Ee("svg",Xd,[...o[0]||(o[0]=[ne("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),ne("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])])):Ye("",!0),wa(r.$slots,"default")],10,Jd))}},Qd=dr("confirm",()=>{const e=ee(!1),t=ee(""),n=ee(""),s=ee("Confirm"),r=ee("Cancel"),o=ee(!1),i=ee(!1),l=ee(!1),a=ee(""),u=ee("");let c=null;return{visible:e,title:t,message:n,confirmLabel:s,cancelLabel:r,danger:o,noticeOnly:i,promptMode:l,promptValue:a,promptPlaceholder:u,ask:(m={})=>(t.value=m.title||"Are you sure?",n.value=m.message||"",s.value=m.confirmLabel||"Confirm",r.value=m.cancelLabel||"Cancel",o.value=!!m.danger,i.value=!1,l.value=!1,e.value=!0,new Promise(b=>{c=b})),notify:(m={})=>(t.value=m.title||"Notice",n.value=m.message||"",s.value=m.confirmLabel||"OK",o.value=!!m.danger,i.value=!0,l.value=!1,e.value=!0,new Promise(b=>{c=b})),prompt:(m={})=>(t.value=m.title||"Enter a value",n.value=m.message||"",s.value=m.confirmLabel||"OK",r.value=m.cancelLabel||"Cancel",o.value=!!m.danger,i.value=!1,l.value=!0,a.value=m.defaultValue||"",u.value=m.placeholder||"",e.value=!0,new Promise(b=>{c=b})),settle:m=>{e.value=!1,c&&(l.value?c(m?a.value:null):c(m),c=null),l.value=!1}}}),Hi=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"textarea:not([disabled])","select:not([disabled])",'[tabindex]:not([tabindex="-1"])',"audio[controls]","video[controls]","details > summary"].join(",");function cc(e,t){let n=null,s=null,r=null;const o=async()=>{n=document.activeElement instanceof HTMLElement?document.activeElement:null,r=document.getElementById("app"),r&&r.setAttribute("inert",""),await St();const l=e.value;if(!l)return;(l.querySelector("[autofocus]")||l.querySelector(Hi))?.focus?.(),s=c=>{if(c.key!=="Tab")return;const f=Array.from(l.querySelectorAll(Hi)).filter(m=>!m.hasAttribute("inert")&&m.offsetParent!==null);if(!f.length){c.preventDefault();return}const h=f[0],p=f[f.length-1],y=document.activeElement;c.shiftKey&&y===h?(c.preventDefault(),p.focus()):!c.shiftKey&&y===p&&(c.preventDefault(),h.focus())},document.addEventListener("keydown",s)},i=()=>{s&&(document.removeEventListener("keydown",s),s=null),r&&(r.removeAttribute("inert"),r=null),n&&n.isConnected&&typeof n.focus=="function"&&n.focus(),n=null};ft(t,l=>{l?o():i()},{immediate:!1})}const Yd={class:"flex items-start gap-3"},Zd={class:"flex-1 min-w-0"},eh={key:0,class:"text-sm text-foreground-muted mt-1 whitespace-pre-line break-words"},th=["placeholder"],nh={class:"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 pt-2"},qi="confirm-dialog-title",sh={__name:"ConfirmDialog",setup(e){const t=Qd(),n=ee(null),s=ee(null);cc(s,Ie(()=>t.visible)),ft(()=>t.visible&&t.promptMode,o=>{o&&St(()=>{const i=n.value;i&&(i.focus(),window.innerWidth<640&&setTimeout(()=>{i.scrollIntoView({block:"center",behavior:"smooth"})},50))})});const r=o=>{t.visible&&(o.key==="Escape"&&t.settle(!1),o.key==="Enter"&&!t.promptMode&&t.settle(!0))};return Fn(()=>window.addEventListener("keydown",r)),ms(()=>window.removeEventListener("keydown",r)),(o,i)=>(se(),ze(Ao,{to:"body"},[le(ur,{name:"fade"},{default:At(()=>[re(t).visible?(se(),Ee("div",{key:0,class:"fixed inset-0 z-50 flex items-end sm:items-center justify-center bg-black/60 backdrop-blur-sm pt-safe pb-safe pl-safe pr-safe p-2 sm:p-4",onClick:i[4]||(i[4]=vn(l=>re(t).settle(!1),["self"])),onKeydown:i[5]||(i[5]=wn(l=>re(t).settle(!1),["esc"]))},[ne("div",{ref_key:"dialogRoot",ref:s,class:"w-full sm:max-w-md bg-background border border-border rounded-t-lg sm:rounded-lg shadow-xl p-5 sm:p-6 space-y-4 max-h-[calc(100dvh-1rem)] overflow-y-auto scrollable",role:"dialog","aria-modal":"true","aria-labelledby":qi},[ne("div",Yd,[re(t).promptMode?Ye("",!0):(se(),Ee("div",{key:0,class:Mt(["shrink-0 w-9 h-9 rounded-full flex items-center justify-center",re(t).danger?"bg-red-500/15 text-red-400":"bg-primary/15 text-primary"])},[re(t).danger?(se(),ze(re(zd),{key:0,class:"w-5 h-5"})):(se(),ze(re($d),{key:1,class:"w-5 h-5"}))],2)),ne("div",Zd,[ne("h3",{id:qi,class:"text-sm font-semibold text-white tracking-tight"},lt(re(t).title),1),re(t).message?(se(),Ee("p",eh,lt(re(t).message),1)):Ye("",!0),re(t).promptMode?ia((se(),Ee("input",{key:1,ref_key:"promptInput",ref:n,"onUpdate:modelValue":i[0]||(i[0]=l=>re(t).promptValue=l),placeholder:re(t).promptPlaceholder,type:"text",class:"mt-3 w-full bg-background border border-border rounded-md px-3 py-2 text-base sm:text-sm text-foreground placeholder-foreground-muted/50 transition-colors duration-200 focus:outline-none focus:ring-1 focus:ring-white focus:border-white",onKeydown:i[1]||(i[1]=wn(vn(l=>re(t).settle(!0),["stop","prevent"]),["enter"]))},null,40,th)),[[Gs,re(t).promptValue]]):Ye("",!0)])]),ne("div",nh,[re(t).noticeOnly?Ye("",!0):(se(),ze($i,{key:0,variant:"secondary",class:"w-full sm:w-auto",onClick:i[2]||(i[2]=l=>re(t).settle(!1))},{default:At(()=>[Ks(lt(re(t).cancelLabel),1)]),_:1})),le($i,{variant:re(t).danger?"danger":"primary",class:"w-full sm:w-auto",onClick:i[3]||(i[3]=l=>re(t).settle(!0))},{default:At(()=>[Ks(lt(re(t).confirmLabel),1)]),_:1},8,["variant"])])],512)],32)):Ye("",!0)]),_:1})]))}},rh={__name:"App",setup(e){return(t,n)=>{const s=Po("router-view");return se(),Ee(Le,null,[le(s),le(sh)],64)}}},oh="modulepreload",ih=function(e){return"/web/"+e},Ki={},_e=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){let a=function(u){return Promise.all(u.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),l=i?.nonce||i?.getAttribute("nonce");r=a(n.map(u=>{if(u=ih(u),u in Ki)return;Ki[u]=!0;const c=u.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${f}`))return;const h=document.createElement("link");if(h.rel=c?"stylesheet":oh,c||(h.as="script"),h.crossOrigin="",h.href=u,l&&h.setAttribute("nonce",l),document.head.appendChild(h),c)return new Promise((p,y)=>{h.addEventListener("load",p),h.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${u}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return r.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})};const _n=typeof document<"u";function uc(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function lh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&uc(e.default)}const he=Object.assign;function Lr(e,t){const n={};for(const s in t){const r=t[s];n[s]=pt(r)?r.map(e):e(r)}return n}const ss=()=>{},pt=Array.isArray;function Wi(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const fc=/#/g,ah=/&/g,ch=/\//g,uh=/=/g,fh=/\?/g,dc=/\+/g,dh=/%5B/g,hh=/%5D/g,hc=/%5E/g,ph=/%60/g,pc=/%7B/g,mh=/%7C/g,mc=/%7D/g,gh=/%20/g;function Mo(e){return e==null?"":encodeURI(""+e).replace(mh,"|").replace(dh,"[").replace(hh,"]")}function yh(e){return Mo(e).replace(pc,"{").replace(mc,"}").replace(hc,"^")}function ro(e){return Mo(e).replace(dc,"%2B").replace(gh,"+").replace(fc,"%23").replace(ah,"%26").replace(ph,"`").replace(pc,"{").replace(mc,"}").replace(hc,"^")}function bh(e){return ro(e).replace(uh,"%3D")}function _h(e){return Mo(e).replace(fc,"%23").replace(fh,"%3F")}function vh(e){return _h(e).replace(ch,"%2F")}function us(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const wh=/\/$/,Eh=e=>e.replace(wh,"");function Dr(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return a=l>=0&&a>l?-1:a,a>=0&&(s=t.slice(0,a),o=t.slice(a,l>0?l:t.length),r=e(o.slice(1))),l>=0&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=Ah(s??t,n),{fullPath:s+o+i,path:s,query:r,hash:us(i)}}function xh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function zi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Rh(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&In(t.matched[s],n.matched[r])&&gc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function In(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function gc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Sh(e[n],t[n]))return!1;return!0}function Sh(e,t){return pt(e)?Gi(e,t):pt(t)?Gi(t,e):e?.valueOf()===t?.valueOf()}function Gi(e,t){return pt(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ah(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const qt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let oo=(function(e){return e.pop="pop",e.push="push",e})({}),Mr=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Ch(e){if(!e)if(_n){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Eh(e)}const Th=/^[^#]+#/;function Oh(e,t){return e.replace(Th,"#")+t}function Ph(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const hr=()=>({left:window.scrollX,top:window.scrollY});function kh(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Ph(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ji(e,t){return(history.state?history.state.position-t:-1)+e}const io=new Map;function Ih(e,t){io.set(e,t)}function Nh(e){const t=io.get(e);return io.delete(e),t}function Lh(e){return typeof e=="string"||e&&typeof e=="object"}function yc(e){return typeof e=="string"||typeof e=="symbol"}let Ae=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const bc=Symbol("");Ae.MATCHER_NOT_FOUND+"",Ae.NAVIGATION_GUARD_REDIRECT+"",Ae.NAVIGATION_ABORTED+"",Ae.NAVIGATION_CANCELLED+"",Ae.NAVIGATION_DUPLICATED+"";function Nn(e,t){return he(new Error,{type:e,[bc]:!0},t)}function Pt(e,t){return e instanceof Error&&bc in e&&(t==null||!!(e.type&t))}const Dh=["params","query","hash"];function Mh(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Dh)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Fh(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&ro(r)):[s&&ro(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function Uh(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=pt(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const jh=Symbol(""),Qi=Symbol(""),pr=Symbol(""),Fo=Symbol(""),lo=Symbol("");function Kn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function zt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,a)=>{const u=h=>{h===!1?a(Nn(Ae.NAVIGATION_ABORTED,{from:n,to:t})):h instanceof Error?a(h):Lh(h)?a(Nn(Ae.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(i&&s.enterCallbacks[r]===i&&typeof h=="function"&&i.push(h),l())},c=o(()=>e.call(s&&s.instances[r],t,n,u));let f=Promise.resolve(c);e.length<3&&(f=f.then(u)),f.catch(h=>a(h))})}function Fr(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(uc(a)){const u=(a.__vccOpts||a)[t];u&&o.push(zt(u,n,s,i,l,r))}else{let u=a();o.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=lh(c)?c.default:c;i.mods[l]=c,i.components[l]=f;const h=(f.__vccOpts||f)[t];return h&&zt(h,n,s,i,l,r)()}))}}return o}function Bh(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iIn(u,l))?s.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>In(u,a))||r.push(a))}return[n,s,r]}let Vh=()=>location.protocol+"//"+location.host;function _c(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),zi(l,"")}return zi(n,e)+s+r}function $h(e,t,n,s){let r=[],o=[],i=null;const l=({state:h})=>{const p=_c(e,location),y=n.value,m=t.value;let b=0;if(h){if(n.value=p,t.value=h,i&&i===y){i=null;return}b=m?h.position-m.position:0}else s(p);r.forEach(R=>{R(n.value,y,{delta:b,type:oo.pop,direction:b?b>0?Mr.forward:Mr.back:Mr.unknown})})};function a(){i=n.value}function u(h){r.push(h);const p=()=>{const y=r.indexOf(h);y>-1&&r.splice(y,1)};return o.push(p),p}function c(){if(document.visibilityState==="hidden"){const{history:h}=window;if(!h.state)return;h.replaceState(he({},h.state,{scroll:hr()}),"")}}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:a,listen:u,destroy:f}}function Yi(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?hr():null}}function Hh(e){const{history:t,location:n}=window,s={value:_c(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,u,c){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Vh()+e+a;try{t[c?"replaceState":"pushState"](u,"",h),r.value=u}catch(p){console.error(p),n[c?"replace":"assign"](h)}}function i(a,u){o(a,he({},t.state,Yi(r.value.back,a,r.value.forward,!0),u,{position:r.value.position}),!0),s.value=a}function l(a,u){const c=he({},r.value,t.state,{forward:a,scroll:hr()});o(c.current,c,!0),o(a,he({},Yi(s.value,a,null),{position:c.position+1},u),!1),s.value=a}return{location:s,state:r,push:l,replace:i}}function qh(e){e=Ch(e);const t=Hh(e),n=$h(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=he({location:"",base:e,go:s,createHref:Oh.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let an=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var Pe=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(Pe||{});const Kh={type:an.Static,value:""},Wh=/[a-zA-Z0-9_]/;function zh(e){if(!e)return[[]];if(e==="/")return[[Kh]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${n})/"${u}": ${p}`)}let n=Pe.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,a,u="",c="";function f(){u&&(n===Pe.Static?o.push({type:an.Static,value:u}):n===Pe.Param||n===Pe.ParamRegExp||n===Pe.ParamRegExpEnd?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:an.Param,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=a}for(;lt.length?t.length===1&&t[0]===Ke.Static+Ke.Segment?1:-1:0}function vc(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Yh={strict:!1,end:!0,sensitive:!1};function Zh(e,t,n){const s=Xh(zh(e.path),n),r=he(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function ep(e,t){const n=[],s=new Map;t=Wi(Yh,t);function r(f){return s.get(f)}function o(f,h,p){const y=!p,m=nl(f);m.aliasOf=p&&p.record;const b=Wi(t,f),R=[m];if("alias"in f){const w=typeof f.alias=="string"?[f.alias]:f.alias;for(const P of w)R.push(nl(he({},m,{components:p?p.record.components:m.components,path:P,aliasOf:p?p.record:m})))}let _,v;for(const w of R){const{path:P}=w;if(h&&P[0]!=="/"){const N=h.record.path,B=N[N.length-1]==="/"?"":"/";w.path=h.record.path+(P&&B+P)}if(_=Zh(w,h,b),p?p.alias.push(_):(v=v||_,v!==_&&v.alias.push(_),y&&f.name&&!sl(_)&&i(f.name)),wc(_)&&a(_),m.children){const N=m.children;for(let B=0;B{i(v)}:ss}function i(f){if(yc(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function a(f){const h=sp(f,n);n.splice(h,0,f),f.record.name&&!sl(f)&&s.set(f.record.name,f)}function u(f,h){let p,y={},m,b;if("name"in f&&f.name){if(p=s.get(f.name),!p)throw Nn(Ae.MATCHER_NOT_FOUND,{location:f});b=p.record.name,y=he(tl(h.params,p.keys.filter(v=>!v.optional).concat(p.parent?p.parent.keys.filter(v=>v.optional):[]).map(v=>v.name)),f.params&&tl(f.params,p.keys.map(v=>v.name))),m=p.stringify(y)}else if(f.path!=null)m=f.path,p=n.find(v=>v.re.test(m)),p&&(y=p.parse(m),b=p.record.name);else{if(p=h.name?s.get(h.name):n.find(v=>v.re.test(h.path)),!p)throw Nn(Ae.MATCHER_NOT_FOUND,{location:f,currentLocation:h});b=p.record.name,y=he({},h.params,f.params),m=p.stringify(y)}const R=[];let _=p;for(;_;)R.unshift(_.record),_=_.parent;return{name:b,path:m,params:y,matched:R,meta:np(R)}}e.forEach(f=>o(f));function c(){n.length=0,s.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:l,getRecordMatcher:r}}function tl(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function nl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:tp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function tp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function sl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function np(e){return e.reduce((t,n)=>he(t,n.meta),{})}function sp(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;vc(e,t[o])<0?s=o:n=o+1}const r=rp(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function rp(e){let t=e;for(;t=t.parent;)if(wc(t)&&vc(e,t)===0)return t}function wc({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function rl(e){const t=at(pr),n=at(Fo),s=Ie(()=>{const a=re(e.to);return t.resolve(a)}),r=Ie(()=>{const{matched:a}=s.value,{length:u}=a,c=a[u-1],f=n.matched;if(!c||!f.length)return-1;const h=f.findIndex(In.bind(null,c));if(h>-1)return h;const p=ol(a[u-2]);return u>1&&ol(c)===p&&f[f.length-1].path!==p?f.findIndex(In.bind(null,a[u-2])):h}),o=Ie(()=>r.value>-1&&cp(n.params,s.value.params)),i=Ie(()=>r.value>-1&&r.value===n.matched.length-1&&gc(n.params,s.value.params));function l(a={}){if(ap(a)){const u=t[re(e.replace)?"replace":"push"](re(e.to)).catch(ss);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:s,href:Ie(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function op(e){return e.length===1?e[0]:e}const ip=Co({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:rl,setup(e,{slots:t}){const n=fs(rl(e)),{options:s}=at(pr),r=Ie(()=>({[il(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[il(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&op(t.default(n));return e.custom?o:Pn("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),lp=ip;function ap(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function cp(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!pt(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function ol(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const il=(e,t,n)=>e??t??n,up=Co({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=at(lo),r=Ie(()=>e.route||s.value),o=at(Qi,0),i=Ie(()=>{let u=re(o);const{matched:c}=r.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),l=Ie(()=>r.value.matched[i.value]);Os(Qi,Ie(()=>i.value+1)),Os(jh,l),Os(lo,r);const a=ee();return ft(()=>[a.value,l.value,e.name],([u,c,f],[h,p,y])=>{c&&(c.instances[f]=u,p&&p!==c&&u&&u===h&&(c.leaveGuards.size||(c.leaveGuards=p.leaveGuards),c.updateGuards.size||(c.updateGuards=p.updateGuards))),u&&c&&(!p||!In(c,p)||!h)&&(c.enterCallbacks[f]||[]).forEach(m=>m(u))},{flush:"post"}),()=>{const u=r.value,c=e.name,f=l.value,h=f&&f.components[c];if(!h)return ll(n.default,{Component:h,route:u});const p=f.props[c],y=p?p===!0?u.params:typeof p=="function"?p(u):p:null,b=Pn(h,he({},y,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(f.instances[c]=null)},ref:a}));return ll(n.default,{Component:b,route:u})||b}}});function ll(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const fp=up;function dp(e){const t=ep(e.routes,e),n=e.parseQuery||Fh,s=e.stringifyQuery||Xi,r=e.history,o=Kn(),i=Kn(),l=Kn(),a=Tu(qt);let u=qt;_n&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Lr.bind(null,C=>""+C),f=Lr.bind(null,vh),h=Lr.bind(null,us);function p(C,M){let F,q;return yc(C)?(F=t.getRecordMatcher(C),q=M):q=C,t.addRoute(q,F)}function y(C){const M=t.getRecordMatcher(C);M&&t.removeRoute(M)}function m(){return t.getRoutes().map(C=>C.record)}function b(C){return!!t.getRecordMatcher(C)}function R(C,M){if(M=he({},M||a.value),typeof C=="string"){const x=Dr(n,C,M.path),A=t.resolve({path:x.path},M),T=r.createHref(x.fullPath);return he(x,A,{params:h(A.params),hash:us(x.hash),redirectedFrom:void 0,href:T})}let F;if(C.path!=null)F=he({},C,{path:Dr(n,C.path,M.path).path});else{const x=he({},C.params);for(const A in x)x[A]==null&&delete x[A];F=he({},C,{params:f(x)}),M.params=f(M.params)}const q=t.resolve(F,M),U=C.hash||"";q.params=c(h(q.params));const d=xh(s,he({},C,{hash:yh(U),path:q.path})),g=r.createHref(d);return he({fullPath:d,hash:U,query:s===Xi?Uh(C.query):C.query||{}},q,{redirectedFrom:void 0,href:g})}function _(C){return typeof C=="string"?Dr(n,C,a.value.path):he({},C)}function v(C,M){if(u!==C)return Nn(Ae.NAVIGATION_CANCELLED,{from:M,to:C})}function w(C){return B(C)}function P(C){return w(he(_(C),{replace:!0}))}function N(C,M){const F=C.matched[C.matched.length-1];if(F&&F.redirect){const{redirect:q}=F;let U=typeof q=="function"?q(C,M):q;return typeof U=="string"&&(U=U.includes("?")||U.includes("#")?U=_(U):{path:U},U.params={}),he({query:C.query,hash:C.hash,params:U.path!=null?{}:C.params},U)}}function B(C,M){const F=u=R(C),q=a.value,U=C.state,d=C.force,g=C.replace===!0,x=N(F,q);if(x)return B(he(_(x),{state:typeof x=="object"?he({},U,x.state):U,force:d,replace:g}),M||F);const A=F;A.redirectedFrom=M;let T;return!d&&Rh(s,q,F)&&(T=Nn(Ae.NAVIGATION_DUPLICATED,{to:A,from:q}),we(q,q,!0,!1)),(T?Promise.resolve(T):H(A,q)).catch(S=>Pt(S)?Pt(S,Ae.NAVIGATION_GUARD_REDIRECT)?S:De(S):ae(S,A,q)).then(S=>{if(S){if(Pt(S,Ae.NAVIGATION_GUARD_REDIRECT))return B(he({replace:g},_(S.to),{state:typeof S.to=="object"?he({},U,S.to.state):U,force:d}),M||A)}else S=L(A,q,!0,g,U);return J(A,q,S),S})}function $(C,M){const F=v(C,M);return F?Promise.reject(F):Promise.resolve()}function k(C){const M=fe.values().next().value;return M&&typeof M.runWithContext=="function"?M.runWithContext(C):C()}function H(C,M){let F;const[q,U,d]=Bh(C,M);F=Fr(q.reverse(),"beforeRouteLeave",C,M);for(const x of q)x.leaveGuards.forEach(A=>{F.push(zt(A,C,M))});const g=$.bind(null,C,M);return F.push(g),Xe(F).then(()=>{F=[];for(const x of o.list())F.push(zt(x,C,M));return F.push(g),Xe(F)}).then(()=>{F=Fr(U,"beforeRouteUpdate",C,M);for(const x of U)x.updateGuards.forEach(A=>{F.push(zt(A,C,M))});return F.push(g),Xe(F)}).then(()=>{F=[];for(const x of d)if(x.beforeEnter)if(pt(x.beforeEnter))for(const A of x.beforeEnter)F.push(zt(A,C,M));else F.push(zt(x.beforeEnter,C,M));return F.push(g),Xe(F)}).then(()=>(C.matched.forEach(x=>x.enterCallbacks={}),F=Fr(d,"beforeRouteEnter",C,M,k),F.push(g),Xe(F))).then(()=>{F=[];for(const x of i.list())F.push(zt(x,C,M));return F.push(g),Xe(F)}).catch(x=>Pt(x,Ae.NAVIGATION_CANCELLED)?x:Promise.reject(x))}function J(C,M,F){l.list().forEach(q=>k(()=>q(C,M,F)))}function L(C,M,F,q,U){const d=v(C,M);if(d)return d;const g=M===qt,x=_n?history.state:{};F&&(q||g?r.replace(C.fullPath,he({scroll:g&&x&&x.scroll},U)):r.push(C.fullPath,U)),a.value=C,we(C,M,F,g),De()}let te;function ue(){te||(te=r.listen((C,M,F)=>{if(!Me.listening)return;const q=R(C),U=N(q,Me.currentRoute.value);if(U){B(he(U,{replace:!0,force:!0}),q).catch(ss);return}u=q;const d=a.value;_n&&Ih(Ji(d.fullPath,F.delta),hr()),H(q,d).catch(g=>Pt(g,Ae.NAVIGATION_ABORTED|Ae.NAVIGATION_CANCELLED)?g:Pt(g,Ae.NAVIGATION_GUARD_REDIRECT)?(B(he(_(g.to),{force:!0}),q).then(x=>{Pt(x,Ae.NAVIGATION_ABORTED|Ae.NAVIGATION_DUPLICATED)&&!F.delta&&F.type===oo.pop&&r.go(-1,!1)}).catch(ss),Promise.reject()):(F.delta&&r.go(-F.delta,!1),ae(g,q,d))).then(g=>{g=g||L(q,d,!1),g&&(F.delta&&!Pt(g,Ae.NAVIGATION_CANCELLED)?r.go(-F.delta,!1):F.type===oo.pop&&Pt(g,Ae.NAVIGATION_ABORTED|Ae.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),J(q,d,g)}).catch(ss)}))}let Oe=Kn(),oe=Kn(),Z;function ae(C,M,F){De(C);const q=oe.list();return q.length?q.forEach(U=>U(C,M,F)):console.error(C),Promise.reject(C)}function rt(){return Z&&a.value!==qt?Promise.resolve():new Promise((C,M)=>{Oe.add([C,M])})}function De(C){return Z||(Z=!C,ue(),Oe.list().forEach(([M,F])=>C?F(C):M()),Oe.reset()),C}function we(C,M,F,q){const{scrollBehavior:U}=e;if(!_n||!U)return Promise.resolve();const d=!F&&Nh(Ji(C.fullPath,0))||(q||!F)&&history.state&&history.state.scroll||null;return St().then(()=>U(C,M,d)).then(g=>g&&kh(g)).catch(g=>ae(g,C,M))}const Se=C=>r.go(C);let Ct;const fe=new Set,Me={currentRoute:a,listening:!0,addRoute:p,removeRoute:y,clearRoutes:t.clearRoutes,hasRoute:b,getRoutes:m,resolve:R,options:e,push:w,replace:P,go:Se,back:()=>Se(-1),forward:()=>Se(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:oe.add,isReady:rt,install(C){C.component("RouterLink",lp),C.component("RouterView",fp),C.config.globalProperties.$router=Me,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>re(a)}),_n&&!Ct&&a.value===qt&&(Ct=!0,w(r.location).catch(q=>{}));const M={};for(const q in qt)Object.defineProperty(M,q,{get:()=>a.value[q],enumerable:!0});C.provide(pr,Me),C.provide(Fo,Ql(M)),C.provide(lo,a);const F=C.unmount;fe.add(C),C.unmount=function(){fe.delete(C),fe.size<1&&(u=qt,te&&te(),te=null,a.value=qt,Ct=!1,Z=!1),F()}}};function Xe(C){return C.reduce((M,F)=>M.then(()=>k(F)),Promise.resolve())}return Me}function hp(){return at(pr)}function pp(e){return at(Fo)}function Ec(e,t){return function(){return e.apply(t,arguments)}}const{toString:mp}=Object.prototype,{getPrototypeOf:mr}=Object,{iterator:gr,toStringTag:xc}=Symbol,yr=(e=>t=>{const n=mp.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),mt=e=>(e=e.toLowerCase(),t=>yr(t)===e),br=e=>t=>typeof t===e,{isArray:hn}=Array,Ln=br("undefined");function Un(e){return e!==null&&!Ln(e)&&e.constructor!==null&&!Ln(e.constructor)&&Ze(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Rc=mt("ArrayBuffer");function gp(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Rc(e.buffer),t}const yp=br("string"),Ze=br("function"),Sc=br("number"),ys=e=>e!==null&&typeof e=="object",bp=e=>e===!0||e===!1,Ns=e=>{if(yr(e)!=="object")return!1;const t=mr(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(xc in e)&&!(gr in e)},_p=e=>{if(!ys(e)||Un(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},vp=mt("Date"),wp=mt("File"),Ep=e=>!!(e&&typeof e.uri<"u"),xp=e=>e&&typeof e.getParts<"u",Rp=mt("Blob"),Sp=mt("FileList"),Ap=e=>ys(e)&&Ze(e.pipe);function Cp(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const al=Cp(),cl=typeof al.FormData<"u"?al.FormData:void 0,Tp=e=>{if(!e)return!1;if(cl&&e instanceof cl)return!0;const t=mr(e);if(!t||t===Object.prototype||!Ze(e.append))return!1;const n=yr(e);return n==="formdata"||n==="object"&&Ze(e.toString)&&e.toString()==="[object FormData]"},Op=mt("URLSearchParams"),[Pp,kp,Ip,Np]=["ReadableStream","Request","Response","Headers"].map(mt),Lp=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function bs(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let s,r;if(typeof e!="object"&&(e=[e]),hn(e))for(s=0,r=e.length;s0;)if(r=n[s],t===r.toLowerCase())return r;return null}const cn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Cc=e=>!Ln(e)&&e!==cn;function ao(...e){const{caseless:t,skipUndefined:n}=Cc(this)&&this||{},s={},r=(o,i)=>{if(i==="__proto__"||i==="constructor"||i==="prototype")return;const l=t&&typeof i=="string"&&Ac(s,i)||i,a=co(s,l)?s[l]:void 0;Ns(a)&&Ns(o)?s[l]=ao(a,o):Ns(o)?s[l]=ao({},o):hn(o)?s[l]=o.slice():(!n||!Ln(o))&&(s[l]=o)};for(let o=0,i=e.length;o(bs(t,(r,o)=>{n&&Ze(r)?Object.defineProperty(e,o,{__proto__:null,value:Ec(r,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{__proto__:null,value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:s}),e),Mp=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Fp=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},Up=(e,t,n,s)=>{let r,o,i;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),o=r.length;o-- >0;)i=r[o],(!s||s(i,e,t))&&!l[i]&&(t[i]=e[i],l[i]=!0);e=n!==!1&&mr(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},jp=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n},Bp=e=>{if(!e)return null;if(hn(e))return e;let t=e.length;if(!Sc(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},Vp=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&mr(Uint8Array)),$p=(e,t)=>{const s=(e&&e[gr]).call(e);let r;for(;(r=s.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},Hp=(e,t)=>{let n;const s=[];for(;(n=e.exec(t))!==null;)s.push(n);return s},qp=mt("HTMLFormElement"),Kp=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,s,r){return s.toUpperCase()+r}),co=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),{propertyIsEnumerable:Wp}=Object.prototype,zp=mt("RegExp"),Tc=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),s={};bs(n,(r,o)=>{let i;(i=t(r,o,e))!==!1&&(s[o]=i||r)}),Object.defineProperties(e,s)},Gp=e=>{Tc(e,(t,n)=>{if(Ze(e)&&["arguments","caller","callee"].includes(n))return!1;const s=e[n];if(Ze(s)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Jp=(e,t)=>{const n={},s=r=>{r.forEach(o=>{n[o]=!0})};return hn(e)?s(e):s(String(e).split(t)),n},Xp=()=>{},Qp=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Yp(e){return!!(e&&Ze(e.append)&&e[xc]==="FormData"&&e[gr])}const Zp=e=>{const t=new WeakSet,n=s=>{if(ys(s)){if(t.has(s))return;if(Un(s))return s;if(!("toJSON"in s)){t.add(s);const r=hn(s)?[]:{};return bs(s,(o,i)=>{const l=n(o);!Ln(l)&&(r[i]=l)}),t.delete(s),r}}return s};return n(e)},em=mt("AsyncFunction"),tm=e=>e&&(ys(e)||Ze(e))&&Ze(e.then)&&Ze(e.catch),Oc=((e,t)=>e?setImmediate:t?((n,s)=>(cn.addEventListener("message",({source:r,data:o})=>{r===cn&&o===n&&s.length&&s.shift()()},!1),r=>{s.push(r),cn.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Ze(cn.postMessage)),nm=typeof queueMicrotask<"u"?queueMicrotask.bind(cn):typeof process<"u"&&process.nextTick||Oc,sm=e=>e!=null&&Ze(e[gr]),E={isArray:hn,isArrayBuffer:Rc,isBuffer:Un,isFormData:Tp,isArrayBufferView:gp,isString:yp,isNumber:Sc,isBoolean:bp,isObject:ys,isPlainObject:Ns,isEmptyObject:_p,isReadableStream:Pp,isRequest:kp,isResponse:Ip,isHeaders:Np,isUndefined:Ln,isDate:vp,isFile:wp,isReactNativeBlob:Ep,isReactNative:xp,isBlob:Rp,isRegExp:zp,isFunction:Ze,isStream:Ap,isURLSearchParams:Op,isTypedArray:Vp,isFileList:Sp,forEach:bs,merge:ao,extend:Dp,trim:Lp,stripBOM:Mp,inherits:Fp,toFlatObject:Up,kindOf:yr,kindOfTest:mt,endsWith:jp,toArray:Bp,forEachEntry:$p,matchAll:Hp,isHTMLForm:qp,hasOwnProperty:co,hasOwnProp:co,reduceDescriptors:Tc,freezeMethods:Gp,toObjectSet:Jp,toCamelCase:Kp,noop:Xp,toFiniteNumber:Qp,findKey:Ac,global:cn,isContextDefined:Cc,isSpecCompliantForm:Yp,toJSONObject:Zp,isAsyncFn:em,isThenable:tm,setImmediate:Oc,asap:nm,isIterable:sm},rm=E.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),om=e=>{const t={};let n,s,r;return e&&e.split(` +`).forEach(function(i){r=i.indexOf(":"),n=i.substring(0,r).trim().toLowerCase(),s=i.substring(r+1).trim(),!(!n||t[n]&&rm[n])&&(n==="set-cookie"?t[n]?t[n].push(s):t[n]=[s]:t[n]=t[n]?t[n]+", "+s:s)}),t};function im(e){let t=0,n=e.length;for(;tt;){const s=e.charCodeAt(n-1);if(s!==9&&s!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}const lm=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),am=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function Uo(e,t){return E.isArray(e)?e.map(n=>Uo(n,t)):im(String(e).replace(t,""))}const cm=e=>Uo(e,lm),um=e=>Uo(e,am);function Pc(e){const t=Object.create(null);return E.forEach(e.toJSON(),(n,s)=>{t[s]=um(n)}),t}const ul=Symbol("internals");function Wn(e){return e&&String(e).trim().toLowerCase()}function Ls(e){return e===!1||e==null?e:E.isArray(e)?e.map(Ls):cm(String(e))}function fm(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=n.exec(e);)t[s[1]]=s[2];return t}const dm=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Ur(e,t,n,s,r){if(E.isFunction(s))return s.call(this,t,n);if(r&&(t=n),!!E.isString(t)){if(E.isString(s))return t.indexOf(s)!==-1;if(E.isRegExp(s))return s.test(t)}}function hm(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,s)=>n.toUpperCase()+s)}function pm(e,t){const n=E.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+n,{__proto__:null,value:function(r,o,i){return this[s].call(this,t,r,o,i)},configurable:!0})})}let Je=class{constructor(t){t&&this.set(t)}set(t,n,s){const r=this;function o(l,a,u){const c=Wn(a);if(!c)return;const f=E.findKey(r,c);(!f||r[f]===void 0||u===!0||u===void 0&&r[f]!==!1)&&(r[f||a]=Ls(l))}const i=(l,a)=>E.forEach(l,(u,c)=>o(u,c,a));if(E.isPlainObject(t)||t instanceof this.constructor)i(t,n);else if(E.isString(t)&&(t=t.trim())&&!dm(t))i(om(t),n);else if(E.isObject(t)&&E.isIterable(t)){let l={},a,u;for(const c of t){if(!E.isArray(c))throw new TypeError("Object iterator must return a key-value pair");l[u=c[0]]=(a=l[u])?E.isArray(a)?[...a,c[1]]:[a,c[1]]:c[1]}i(l,n)}else t!=null&&o(n,t,s);return this}get(t,n){if(t=Wn(t),t){const s=E.findKey(this,t);if(s){const r=this[s];if(!n)return r;if(n===!0)return fm(r);if(E.isFunction(n))return n.call(this,r,s);if(E.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Wn(t),t){const s=E.findKey(this,t);return!!(s&&this[s]!==void 0&&(!n||Ur(this,this[s],s,n)))}return!1}delete(t,n){const s=this;let r=!1;function o(i){if(i=Wn(i),i){const l=E.findKey(s,i);l&&(!n||Ur(s,s[l],l,n))&&(delete s[l],r=!0)}}return E.isArray(t)?t.forEach(o):o(t),r}clear(t){const n=Object.keys(this);let s=n.length,r=!1;for(;s--;){const o=n[s];(!t||Ur(this,this[o],o,t,!0))&&(delete this[o],r=!0)}return r}normalize(t){const n=this,s={};return E.forEach(this,(r,o)=>{const i=E.findKey(s,o);if(i){n[i]=Ls(r),delete n[o];return}const l=t?hm(o):String(o).trim();l!==o&&delete n[o],n[l]=Ls(r),s[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return E.forEach(this,(s,r)=>{s!=null&&s!==!1&&(n[r]=t&&E.isArray(s)?s.join(", "):s)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const s=new this(t);return n.forEach(r=>s.set(r)),s}static accessor(t){const s=(this[ul]=this[ul]={accessors:{}}).accessors,r=this.prototype;function o(i){const l=Wn(i);s[l]||(pm(r,i),s[l]=!0)}return E.isArray(t)?t.forEach(o):o(t),this}};Je.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);E.reduceDescriptors(Je.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(s){this[n]=s}}});E.freezeMethods(Je);const mm="[REDACTED ****]";function gm(e){if(E.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(E.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function ym(e,t){const n=new Set(t.map(o=>String(o).toLowerCase())),s=[],r=o=>{if(o===null||typeof o!="object"||E.isBuffer(o))return o;if(s.indexOf(o)!==-1)return;o instanceof Je&&(o=o.toJSON()),s.push(o);let i;if(E.isArray(o))i=[],o.forEach((l,a)=>{const u=r(l);E.isUndefined(u)||(i[a]=u)});else{if(!E.isPlainObject(o)&&gm(o))return s.pop(),o;i=Object.create(null);for(const[l,a]of Object.entries(o)){const u=n.has(l.toLowerCase())?mm:r(a);E.isUndefined(u)||(i[l]=u)}}return s.pop(),i};return r(e)}let K=class kc extends Error{static from(t,n,s,r,o,i){const l=new kc(t.message,n||t.code,s,r,o);return l.cause=t,l.name=t.name,t.status!=null&&l.status==null&&(l.status=t.status),i&&Object.assign(l,i),l}constructor(t,n,s,r,o){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),s&&(this.config=s),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){const t=this.config,n=t&&E.hasOwnProp(t,"redact")?t.redact:void 0,s=E.isArray(n)&&n.length>0?ym(t,n):E.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:s,code:this.code,status:this.status}}};K.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";K.ERR_BAD_OPTION="ERR_BAD_OPTION";K.ECONNABORTED="ECONNABORTED";K.ETIMEDOUT="ETIMEDOUT";K.ECONNREFUSED="ECONNREFUSED";K.ERR_NETWORK="ERR_NETWORK";K.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";K.ERR_DEPRECATED="ERR_DEPRECATED";K.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";K.ERR_BAD_REQUEST="ERR_BAD_REQUEST";K.ERR_CANCELED="ERR_CANCELED";K.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";K.ERR_INVALID_URL="ERR_INVALID_URL";K.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const bm=null;function uo(e){return E.isPlainObject(e)||E.isArray(e)}function Ic(e){return E.endsWith(e,"[]")?e.slice(0,-2):e}function jr(e,t,n){return e?e.concat(t).map(function(r,o){return r=Ic(r),!n&&o?"["+r+"]":r}).join(n?".":""):t}function _m(e){return E.isArray(e)&&!e.some(uo)}const vm=E.toFlatObject(E,{},null,function(t){return/^is[A-Z]/.test(t)});function _r(e,t,n){if(!E.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=E.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(b,R){return!E.isUndefined(R[b])});const s=n.metaTokens,r=n.visitor||f,o=n.dots,i=n.indexes,l=n.Blob||typeof Blob<"u"&&Blob,a=n.maxDepth===void 0?100:n.maxDepth,u=l&&E.isSpecCompliantForm(t);if(!E.isFunction(r))throw new TypeError("visitor must be a function");function c(m){if(m===null)return"";if(E.isDate(m))return m.toISOString();if(E.isBoolean(m))return m.toString();if(!u&&E.isBlob(m))throw new K("Blob is not supported. Use a Buffer instead.");return E.isArrayBuffer(m)||E.isTypedArray(m)?u&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function f(m,b,R){let _=m;if(E.isReactNative(t)&&E.isReactNativeBlob(m))return t.append(jr(R,b,o),c(m)),!1;if(m&&!R&&typeof m=="object"){if(E.endsWith(b,"{}"))b=s?b:b.slice(0,-2),m=JSON.stringify(m);else if(E.isArray(m)&&_m(m)||(E.isFileList(m)||E.endsWith(b,"[]"))&&(_=E.toArray(m)))return b=Ic(b),_.forEach(function(w,P){!(E.isUndefined(w)||w===null)&&t.append(i===!0?jr([b],P,o):i===null?b:b+"[]",c(w))}),!1}return uo(m)?!0:(t.append(jr(R,b,o),c(m)),!1)}const h=[],p=Object.assign(vm,{defaultVisitor:f,convertValue:c,isVisitable:uo});function y(m,b,R=0){if(!E.isUndefined(m)){if(R>a)throw new K("Object is too deeply nested ("+R+" levels). Max depth: "+a,K.ERR_FORM_DATA_DEPTH_EXCEEDED);if(h.indexOf(m)!==-1)throw new Error("Circular reference detected in "+b.join("."));h.push(m),E.forEach(m,function(v,w){(!(E.isUndefined(v)||v===null)&&r.call(t,v,E.isString(w)?w.trim():w,b,p))===!0&&y(v,b?b.concat(w):[w],R+1)}),h.pop()}}if(!E.isObject(e))throw new TypeError("data must be an object");return y(e),t}function fl(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(s){return t[s]})}function jo(e,t){this._pairs=[],e&&_r(e,this,t)}const Nc=jo.prototype;Nc.append=function(t,n){this._pairs.push([t,n])};Nc.toString=function(t){const n=t?function(s){return t.call(this,s,fl)}:fl;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function wm(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Lc(e,t,n){if(!t)return e;const s=n&&n.encode||wm,r=E.isFunction(n)?{serialize:n}:n,o=r&&r.serialize;let i;if(o?i=o(t,r):i=E.isURLSearchParams(t)?t.toString():new jo(t,r).toString(s),i){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class dl{constructor(){this.handlers=[]}use(t,n,s){return this.handlers.push({fulfilled:t,rejected:n,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){E.forEach(this.handlers,function(s){s!==null&&t(s)})}}const Bo={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1},Em=typeof URLSearchParams<"u"?URLSearchParams:jo,xm=typeof FormData<"u"?FormData:null,Rm=typeof Blob<"u"?Blob:null,Sm={isBrowser:!0,classes:{URLSearchParams:Em,FormData:xm,Blob:Rm},protocols:["http","https","file","blob","url","data"]},Vo=typeof window<"u"&&typeof document<"u",fo=typeof navigator=="object"&&navigator||void 0,Am=Vo&&(!fo||["ReactNative","NativeScript","NS"].indexOf(fo.product)<0),Cm=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Tm=Vo&&window.location.href||"http://localhost",Om=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Vo,hasStandardBrowserEnv:Am,hasStandardBrowserWebWorkerEnv:Cm,navigator:fo,origin:Tm},Symbol.toStringTag,{value:"Module"})),Be={...Om,...Sm};function Pm(e,t){return _r(e,new Be.classes.URLSearchParams,{visitor:function(n,s,r,o){return Be.isNode&&E.isBuffer(n)?(this.append(s,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function km(e){return E.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Im(e){const t={},n=Object.keys(e);let s;const r=n.length;let o;for(s=0;s=n.length;return i=!i&&E.isArray(r)?r.length:i,a?(E.hasOwnProp(r,i)?r[i]=E.isArray(r[i])?r[i].concat(s):[r[i],s]:r[i]=s,!l):((!E.hasOwnProp(r,i)||!E.isObject(r[i]))&&(r[i]=[]),t(n,s,r[i],o)&&E.isArray(r[i])&&(r[i]=Im(r[i])),!l)}if(E.isFormData(e)&&E.isFunction(e.entries)){const n={};return E.forEachEntry(e,(s,r)=>{t(km(s),r,n,0)}),n}return null}const yn=(e,t)=>e!=null&&E.hasOwnProp(e,t)?e[t]:void 0;function Nm(e,t,n){if(E.isString(e))try{return(t||JSON.parse)(e),E.trim(e)}catch(s){if(s.name!=="SyntaxError")throw s}return(n||JSON.stringify)(e)}const _s={transitional:Bo,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const s=n.getContentType()||"",r=s.indexOf("application/json")>-1,o=E.isObject(t);if(o&&E.isHTMLForm(t)&&(t=new FormData(t)),E.isFormData(t))return r?JSON.stringify(Dc(t)):t;if(E.isArrayBuffer(t)||E.isBuffer(t)||E.isStream(t)||E.isFile(t)||E.isBlob(t)||E.isReadableStream(t))return t;if(E.isArrayBufferView(t))return t.buffer;if(E.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(o){const a=yn(this,"formSerializer");if(s.indexOf("application/x-www-form-urlencoded")>-1)return Pm(t,a).toString();if((l=E.isFileList(t))||s.indexOf("multipart/form-data")>-1){const u=yn(this,"env"),c=u&&u.FormData;return _r(l?{"files[]":t}:t,c&&new c,a)}}return o||r?(n.setContentType("application/json",!1),Nm(t)):t}],transformResponse:[function(t){const n=yn(this,"transitional")||_s.transitional,s=n&&n.forcedJSONParsing,r=yn(this,"responseType"),o=r==="json";if(E.isResponse(t)||E.isReadableStream(t))return t;if(t&&E.isString(t)&&(s&&!r||o)){const l=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t,yn(this,"parseReviver"))}catch(a){if(l)throw a.name==="SyntaxError"?K.from(a,K.ERR_BAD_RESPONSE,this,null,yn(this,"response")):a}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Be.classes.FormData,Blob:Be.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};E.forEach(["delete","get","head","post","put","patch","query"],e=>{_s.headers[e]={}});function Br(e,t){const n=this||_s,s=t||n,r=Je.from(s.headers);let o=s.data;return E.forEach(e,function(l){o=l.call(n,o,r.normalize(),t?t.status:void 0)}),r.normalize(),o}function Mc(e){return!!(e&&e.__CANCEL__)}let vs=class extends K{constructor(t,n,s){super(t??"canceled",K.ERR_CANCELED,n,s),this.name="CanceledError",this.__CANCEL__=!0}};function Fc(e,t,n){const s=n.config.validateStatus;!n.status||!s||s(n.status)?e(n):t(new K("Request failed with status code "+n.status,n.status>=400&&n.status<500?K.ERR_BAD_REQUEST:K.ERR_BAD_RESPONSE,n.config,n.request,n))}function Lm(e){const t=/^([-+\w]{1,25}):(?:\/\/)?/.exec(e);return t&&t[1]||""}function Dm(e,t){e=e||10;const n=new Array(e),s=new Array(e);let r=0,o=0,i;return t=t!==void 0?t:1e3,function(a){const u=Date.now(),c=s[o];i||(i=u),n[r]=a,s[r]=u;let f=o,h=0;for(;f!==r;)h+=n[f++],f=f%e;if(r=(r+1)%e,r===o&&(o=(o+1)%e),u-i{n=c,r=null,o&&(clearTimeout(o),o=null),e(...u)};return[(...u)=>{const c=Date.now(),f=c-n;f>=s?i(u,c):(r=u,o||(o=setTimeout(()=>{o=null,i(r)},s-f)))},()=>r&&i(r)]}const Js=(e,t,n=3)=>{let s=0;const r=Dm(50,250);return Mm(o=>{if(!o||typeof o.loaded!="number")return;const i=o.loaded,l=o.lengthComputable?o.total:void 0,a=l!=null?Math.min(i,l):i,u=Math.max(0,a-s),c=r(u);s=Math.max(s,a);const f={loaded:a,total:l,progress:l?a/l:void 0,bytes:u,rate:c||void 0,estimated:c&&l?(l-a)/c:void 0,event:o,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(f)},n)},hl=(e,t)=>{const n=e!=null;return[s=>t[0]({lengthComputable:n,total:e,loaded:s}),t[1]]},pl=e=>(...t)=>E.asap(()=>e(...t)),Fm=Be.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Be.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Be.origin),Be.navigator&&/(msie|trident)/i.test(Be.navigator.userAgent)):()=>!0,Um=Be.hasStandardBrowserEnv?{write(e,t,n,s,r,o,i){if(typeof document>"u")return;const l=[`${e}=${encodeURIComponent(t)}`];E.isNumber(n)&&l.push(`expires=${new Date(n).toUTCString()}`),E.isString(s)&&l.push(`path=${s}`),E.isString(r)&&l.push(`domain=${r}`),o===!0&&l.push("secure"),E.isString(i)&&l.push(`SameSite=${i}`),document.cookie=l.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.split(";");for(let n=0;ne instanceof Je?{...e}:e;function pn(e,t){t=t||{};const n=Object.create(null);Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function s(u,c,f,h){return E.isPlainObject(u)&&E.isPlainObject(c)?E.merge.call({caseless:h},u,c):E.isPlainObject(c)?E.merge({},c):E.isArray(c)?c.slice():c}function r(u,c,f,h){if(E.isUndefined(c)){if(!E.isUndefined(u))return s(void 0,u,f,h)}else return s(u,c,f,h)}function o(u,c){if(!E.isUndefined(c))return s(void 0,c)}function i(u,c){if(E.isUndefined(c)){if(!E.isUndefined(u))return s(void 0,u)}else return s(void 0,c)}function l(u,c,f){if(E.hasOwnProp(t,f))return s(u,c);if(E.hasOwnProp(e,f))return s(void 0,u)}const a={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,allowedSocketPaths:i,responseEncoding:i,validateStatus:l,headers:(u,c,f)=>r(ml(u),ml(c),f,!0)};return E.forEach(Object.keys({...e,...t}),function(c){if(c==="__proto__"||c==="constructor"||c==="prototype")return;const f=E.hasOwnProp(a,c)?a[c]:r,h=E.hasOwnProp(e,c)?e[c]:void 0,p=E.hasOwnProp(t,c)?t[c]:void 0,y=f(h,p,c);E.isUndefined(y)&&f!==l||(n[c]=y)}),n}const Vm=["content-type","content-length"];function $m(e,t,n){if(n!=="content-only"){e.set(t);return}Object.entries(t).forEach(([s,r])=>{Vm.includes(s.toLowerCase())&&e.set(s,r)})}const Hm=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16)));function jc(e){const t=pn({},e),n=h=>E.hasOwnProp(t,h)?t[h]:void 0,s=n("data");let r=n("withXSRFToken");const o=n("xsrfHeaderName"),i=n("xsrfCookieName");let l=n("headers");const a=n("auth"),u=n("baseURL"),c=n("allowAbsoluteUrls"),f=n("url");if(t.headers=l=Je.from(l),t.url=Lc(Uc(u,f,c),n("params"),n("paramsSerializer")),a&&l.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?Hm(a.password):""))),E.isFormData(s)&&(Be.hasStandardBrowserEnv||Be.hasStandardBrowserWebWorkerEnv||E.isReactNative(s)?l.setContentType(void 0):E.isFunction(s.getHeaders)&&$m(l,s.getHeaders(),n("formDataHeaderPolicy"))),Be.hasStandardBrowserEnv&&(E.isFunction(r)&&(r=r(t)),r===!0||r==null&&Fm(t.url))){const p=o&&i&&Um.read(i);p&&l.set(o,p)}return t}const qm=typeof XMLHttpRequest<"u",Km=qm&&function(e){return new Promise(function(n,s){const r=jc(e);let o=r.data;const i=Je.from(r.headers).normalize();let{responseType:l,onUploadProgress:a,onDownloadProgress:u}=r,c,f,h,p,y;function m(){p&&p(),y&&y(),r.cancelToken&&r.cancelToken.unsubscribe(c),r.signal&&r.signal.removeEventListener("abort",c)}let b=new XMLHttpRequest;b.open(r.method.toUpperCase(),r.url,!0),b.timeout=r.timeout;function R(){if(!b)return;const v=Je.from("getAllResponseHeaders"in b&&b.getAllResponseHeaders()),P={data:!l||l==="text"||l==="json"?b.responseText:b.response,status:b.status,statusText:b.statusText,headers:v,config:e,request:b};Fc(function(B){n(B),m()},function(B){s(B),m()},P),b=null}"onloadend"in b?b.onloadend=R:b.onreadystatechange=function(){!b||b.readyState!==4||b.status===0&&!(b.responseURL&&b.responseURL.startsWith("file:"))||setTimeout(R)},b.onabort=function(){b&&(s(new K("Request aborted",K.ECONNABORTED,e,b)),m(),b=null)},b.onerror=function(w){const P=w&&w.message?w.message:"Network Error",N=new K(P,K.ERR_NETWORK,e,b);N.event=w||null,s(N),m(),b=null},b.ontimeout=function(){let w=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const P=r.transitional||Bo;r.timeoutErrorMessage&&(w=r.timeoutErrorMessage),s(new K(w,P.clarifyTimeoutError?K.ETIMEDOUT:K.ECONNABORTED,e,b)),m(),b=null},o===void 0&&i.setContentType(null),"setRequestHeader"in b&&E.forEach(Pc(i),function(w,P){b.setRequestHeader(P,w)}),E.isUndefined(r.withCredentials)||(b.withCredentials=!!r.withCredentials),l&&l!=="json"&&(b.responseType=r.responseType),u&&([h,y]=Js(u,!0),b.addEventListener("progress",h)),a&&b.upload&&([f,p]=Js(a),b.upload.addEventListener("progress",f),b.upload.addEventListener("loadend",p)),(r.cancelToken||r.signal)&&(c=v=>{b&&(s(!v||v.type?new vs(null,e,b):v),b.abort(),m(),b=null)},r.cancelToken&&r.cancelToken.subscribe(c),r.signal&&(r.signal.aborted?c():r.signal.addEventListener("abort",c)));const _=Lm(r.url);if(_&&!Be.protocols.includes(_)){s(new K("Unsupported protocol "+_+":",K.ERR_BAD_REQUEST,e));return}b.send(o||null)})},Wm=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let s=!1;const r=function(a){if(!s){s=!0,i();const u=a instanceof Error?a:this.reason;n.abort(u instanceof K?u:new vs(u instanceof Error?u.message:u))}};let o=t&&setTimeout(()=>{o=null,r(new K(`timeout of ${t}ms exceeded`,K.ETIMEDOUT))},t);const i=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach(a=>{a.unsubscribe?a.unsubscribe(r):a.removeEventListener("abort",r)}),e=null)};e.forEach(a=>a.addEventListener("abort",r));const{signal:l}=n;return l.unsubscribe=()=>E.asap(i),l},zm=function*(e,t){let n=e.byteLength;if(n{const r=Gm(e,t);let o=0,i,l=a=>{i||(i=!0,s&&s(a))};return new ReadableStream({async pull(a){try{const{done:u,value:c}=await r.next();if(u){l(),a.close();return}let f=c.byteLength;if(n){let h=o+=f;n(h)}a.enqueue(new Uint8Array(c))}catch(u){throw l(u),u}},cancel(a){return l(a),r.return()}},{highWaterMark:2})};function Xm(e){if(!e||typeof e!="string"||!e.startsWith("data:"))return 0;const t=e.indexOf(",");if(t<0)return 0;const n=e.slice(5,t),s=e.slice(t+1);if(/;base64/i.test(n)){let i=s.length;const l=s.length;for(let p=0;p=48&&y<=57||y>=65&&y<=70||y>=97&&y<=102)&&(m>=48&&m<=57||m>=65&&m<=70||m>=97&&m<=102)&&(i-=2,p+=2)}let a=0,u=l-1;const c=p=>p>=2&&s.charCodeAt(p-2)===37&&s.charCodeAt(p-1)===51&&(s.charCodeAt(p)===68||s.charCodeAt(p)===100);u>=0&&(s.charCodeAt(u)===61?(a++,u--):c(u)&&(a++,u-=3)),a===1&&u>=0&&(s.charCodeAt(u)===61||c(u))&&a++;const h=Math.floor(i/4)*3-(a||0);return h>0?h:0}if(typeof Buffer<"u"&&typeof Buffer.byteLength=="function")return Buffer.byteLength(s,"utf8");let o=0;for(let i=0,l=s.length;i=55296&&a<=56319&&i+1=56320&&u<=57343?(o+=4,i++):o+=3}else o+=3}return o}const $o="1.17.0",yl=64*1024,{isFunction:Ts}=E,Qm=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16))),bl=e=>{if(!E.isString(e))return e;try{return decodeURIComponent(e)}catch{return e}},_l=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Ym=e=>{const t=e.indexOf("://");let n=e;return t!==-1&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")},Zm=e=>{const t=E.global!==void 0&&E.global!==null?E.global:globalThis,{ReadableStream:n,TextEncoder:s}=t;e=E.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:r,Request:o,Response:i}=e,l=r?Ts(r):typeof fetch=="function",a=Ts(o),u=Ts(i);if(!l)return!1;const c=l&&Ts(n),f=l&&(typeof s=="function"?(R=>_=>R.encode(_))(new s):async R=>new Uint8Array(await new o(R).arrayBuffer())),h=a&&c&&_l(()=>{let R=!1;const _=new o(Be.origin,{body:new n,method:"POST",get duplex(){return R=!0,"half"}}),v=_.headers.has("Content-Type");return _.body!=null&&_.body.cancel(),R&&!v}),p=u&&c&&_l(()=>E.isReadableStream(new i("").body)),y={stream:p&&(R=>R.body)};l&&["text","arrayBuffer","blob","formData","stream"].forEach(R=>{!y[R]&&(y[R]=(_,v)=>{let w=_&&_[R];if(w)return w.call(_);throw new K(`Response type '${R}' is not supported`,K.ERR_NOT_SUPPORT,v)})});const m=async R=>{if(R==null)return 0;if(E.isBlob(R))return R.size;if(E.isSpecCompliantForm(R))return(await new o(Be.origin,{method:"POST",body:R}).arrayBuffer()).byteLength;if(E.isArrayBufferView(R)||E.isArrayBuffer(R))return R.byteLength;if(E.isURLSearchParams(R)&&(R=R+""),E.isString(R))return(await f(R)).byteLength},b=async(R,_)=>{const v=E.toFiniteNumber(R.getContentLength());return v??m(_)};return async R=>{let{url:_,method:v,data:w,signal:P,cancelToken:N,timeout:B,onDownloadProgress:$,onUploadProgress:k,responseType:H,headers:J,withCredentials:L="same-origin",fetchOptions:te,maxContentLength:ue,maxBodyLength:Oe}=jc(R);const oe=E.isNumber(ue)&&ue>-1,Z=E.isNumber(Oe)&&Oe>-1,ae=fe=>E.hasOwnProp(R,fe)?R[fe]:void 0;let rt=r||fetch;H=H?(H+"").toLowerCase():"text";let De=Wm([P,N&&N.toAbortSignal()],B),we=null;const Se=De&&De.unsubscribe&&(()=>{De.unsubscribe()});let Ct;try{let fe;const Me=ae("auth");if(Me){const U=Me.username||"",d=Me.password||"";fe={username:U,password:d}}if(Ym(_)){const U=new URL(_,Be.origin);if(!fe&&(U.username||U.password)){const d=bl(U.username),g=bl(U.password);fe={username:d,password:g}}(U.username||U.password)&&(U.username="",U.password="",_=U.href)}if(fe&&(J.delete("authorization"),J.set("Authorization","Basic "+btoa(Qm((fe.username||"")+":"+(fe.password||""))))),oe&&typeof _=="string"&&_.startsWith("data:")&&Xm(_)>ue)throw new K("maxContentLength size of "+ue+" exceeded",K.ERR_BAD_RESPONSE,R,we);if(Z&&v!=="get"&&v!=="head"){const U=await b(J,w);if(typeof U=="number"&&isFinite(U)&&U>Oe)throw new K("Request body larger than maxBodyLength limit",K.ERR_BAD_REQUEST,R,we)}if(k&&h&&v!=="get"&&v!=="head"&&(Ct=await b(J,w))!==0){let U=new o(_,{method:"POST",body:w,duplex:"half"}),d;if(E.isFormData(w)&&(d=U.headers.get("content-type"))&&J.setContentType(d),U.body){const[g,x]=hl(Ct,Js(pl(k)));w=gl(U.body,yl,g,x)}}E.isString(L)||(L=L?"include":"omit");const Xe=a&&"credentials"in o.prototype;if(E.isFormData(w)){const U=J.getContentType();U&&/^multipart\/form-data/i.test(U)&&!/boundary=/i.test(U)&&J.delete("content-type")}J.set("User-Agent","axios/"+$o,!1);const C={...te,signal:De,method:v.toUpperCase(),headers:Pc(J.normalize()),body:w,duplex:"half",credentials:Xe?L:void 0};we=a&&new o(_,C);let M=await(a?rt(we,te):rt(_,C));if(oe){const U=E.toFiniteNumber(M.headers.get("content-length"));if(U!=null&&U>ue)throw new K("maxContentLength size of "+ue+" exceeded",K.ERR_BAD_RESPONSE,R,we)}const F=p&&(H==="stream"||H==="response");if(p&&M.body&&($||oe||F&&Se)){const U={};["status","statusText","headers"].forEach(S=>{U[S]=M[S]});const d=E.toFiniteNumber(M.headers.get("content-length")),[g,x]=$&&hl(d,Js(pl($),!0))||[];let A=0;const T=S=>{if(oe&&(A=S,A>ue))throw new K("maxContentLength size of "+ue+" exceeded",K.ERR_BAD_RESPONSE,R,we);g&&g(S)};M=new i(gl(M.body,yl,T,()=>{x&&x(),Se&&Se()}),U)}H=H||"text";let q=await y[E.findKey(y,H)||"text"](M,R);if(oe&&!p&&!F){let U;if(q!=null&&(typeof q.byteLength=="number"?U=q.byteLength:typeof q.size=="number"?U=q.size:typeof q=="string"&&(U=typeof s=="function"?new s().encode(q).byteLength:q.length)),typeof U=="number"&&U>ue)throw new K("maxContentLength size of "+ue+" exceeded",K.ERR_BAD_RESPONSE,R,we)}return!F&&Se&&Se(),await new Promise((U,d)=>{Fc(U,d,{data:q,headers:Je.from(M.headers),status:M.status,statusText:M.statusText,config:R,request:we})})}catch(fe){if(Se&&Se(),De&&De.aborted&&De.reason instanceof K){const Me=De.reason;throw Me.config=R,we&&(Me.request=we),fe!==Me&&(Me.cause=fe),Me}throw fe&&fe.name==="TypeError"&&/Load failed|fetch/i.test(fe.message)?Object.assign(new K("Network Error",K.ERR_NETWORK,R,we,fe&&fe.response),{cause:fe.cause||fe}):K.from(fe,fe&&fe.code,R,we,fe&&fe.response)}}},eg=new Map,Bc=e=>{let t=e&&e.env||{};const{fetch:n,Request:s,Response:r}=t,o=[s,r,n];let i=o.length,l=i,a,u,c=eg;for(;l--;)a=o[l],u=c.get(a),u===void 0&&c.set(a,u=l?new Map:Zm(t)),c=u;return u};Bc();const Ho={http:bm,xhr:Km,fetch:{get:Bc}};E.forEach(Ho,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch{}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const vl=e=>`- ${e}`,tg=e=>E.isFunction(e)||e===null||e===!1;function ng(e,t){e=E.isArray(e)?e:[e];const{length:n}=e;let s,r;const o={};for(let i=0;i`adapter ${a} `+(u===!1?"is not supported by the environment":"is not available in the build"));let l=n?i.length>1?`since : +`+i.map(vl).join(` +`):" "+vl(i[0]):"as no adapter specified";throw new K("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return r}const Vc={getAdapter:ng,adapters:Ho};function Vr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new vs(null,e)}function wl(e){return Vr(e),e.headers=Je.from(e.headers),e.data=Br.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Vc.getAdapter(e.adapter||_s.adapter,e)(e).then(function(s){Vr(e),e.response=s;try{s.data=Br.call(e,e.transformResponse,s)}finally{delete e.response}return s.headers=Je.from(s.headers),s},function(s){if(!Mc(s)&&(Vr(e),s&&s.response)){e.response=s.response;try{s.response.data=Br.call(e,e.transformResponse,s.response)}finally{delete e.response}s.response.headers=Je.from(s.response.headers)}return Promise.reject(s)})}const vr={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{vr[e]=function(s){return typeof s===e||"a"+(t<1?"n ":" ")+e}});const El={};vr.transitional=function(t,n,s){function r(o,i){return"[Axios v"+$o+"] Transitional option '"+o+"'"+i+(s?". "+s:"")}return(o,i,l)=>{if(t===!1)throw new K(r(i," has been removed"+(n?" in "+n:"")),K.ERR_DEPRECATED);return n&&!El[i]&&(El[i]=!0,console.warn(r(i," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,i,l):!0}};vr.spelling=function(t){return(n,s)=>(console.warn(`${s} is likely a misspelling of ${t}`),!0)};function sg(e,t,n){if(typeof e!="object")throw new K("options must be an object",K.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let r=s.length;for(;r-- >0;){const o=s[r],i=Object.prototype.hasOwnProperty.call(t,o)?t[o]:void 0;if(i){const l=e[o],a=l===void 0||i(l,o,e);if(a!==!0)throw new K("option "+o+" must be "+a,K.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new K("Unknown option "+o,K.ERR_BAD_OPTION)}}const Ds={assertOptions:sg,validators:vr},Qe=Ds.validators;let dn=class{constructor(t){this.defaults=t||{},this.interceptors={request:new dl,response:new dl}}async request(t,n){try{return await this._request(t,n)}catch(s){if(s instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=(()=>{if(!r.stack)return"";const i=r.stack.indexOf(` +`);return i===-1?"":r.stack.slice(i+1)})();try{if(!s.stack)s.stack=o;else if(o){const i=o.indexOf(` +`),l=i===-1?-1:o.indexOf(` +`,i+1),a=l===-1?"":o.slice(l+1);String(s.stack).endsWith(a)||(s.stack+=` +`+o)}}catch{}}throw s}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=pn(this.defaults,n);const{transitional:s,paramsSerializer:r,headers:o}=n;s!==void 0&&Ds.assertOptions(s,{silentJSONParsing:Qe.transitional(Qe.boolean),forcedJSONParsing:Qe.transitional(Qe.boolean),clarifyTimeoutError:Qe.transitional(Qe.boolean),legacyInterceptorReqResOrdering:Qe.transitional(Qe.boolean),advertiseZstdAcceptEncoding:Qe.transitional(Qe.boolean)},!1),r!=null&&(E.isFunction(r)?n.paramsSerializer={serialize:r}:Ds.assertOptions(r,{encode:Qe.function,serialize:Qe.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Ds.assertOptions(n,{baseUrl:Qe.spelling("baseURL"),withXsrfToken:Qe.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&E.merge(o.common,o[n.method]);o&&E.forEach(["delete","get","head","post","put","patch","query","common"],y=>{delete o[y]}),n.headers=Je.concat(i,o);const l=[];let a=!0;this.interceptors.request.forEach(function(m){if(typeof m.runWhen=="function"&&m.runWhen(n)===!1)return;a=a&&m.synchronous;const b=n.transitional||Bo;b&&b.legacyInterceptorReqResOrdering?l.unshift(m.fulfilled,m.rejected):l.push(m.fulfilled,m.rejected)});const u=[];this.interceptors.response.forEach(function(m){u.push(m.fulfilled,m.rejected)});let c,f=0,h;if(!a){const y=[wl.bind(this),void 0];for(y.unshift(...l),y.push(...u),h=y.length,c=Promise.resolve(n);f{if(!s._listeners)return;let o=s._listeners.length;for(;o-- >0;)s._listeners[o](r);s._listeners=null}),this.promise.then=r=>{let o;const i=new Promise(l=>{s.subscribe(l),o=l}).then(r);return i.cancel=function(){s.unsubscribe(o)},i},t(function(o,i,l){s.reason||(s.reason=new vs(o,i,l),n(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=s=>{t.abort(s)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new $c(function(r){t=r}),cancel:t}}};function og(e){return function(n){return e.apply(null,n)}}function ig(e){return E.isObject(e)&&e.isAxiosError===!0}const ho={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(ho).forEach(([e,t])=>{ho[t]=e});function Hc(e){const t=new dn(e),n=Ec(dn.prototype.request,t);return E.extend(n,dn.prototype,t,{allOwnKeys:!0}),E.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return Hc(pn(e,r))},n}const Re=Hc(_s);Re.Axios=dn;Re.CanceledError=vs;Re.CancelToken=rg;Re.isCancel=Mc;Re.VERSION=$o;Re.toFormData=_r;Re.AxiosError=K;Re.Cancel=Re.CanceledError;Re.all=function(t){return Promise.all(t)};Re.spread=og;Re.isAxiosError=ig;Re.mergeConfig=pn;Re.AxiosHeaders=Je;Re.formToJSON=e=>Dc(E.isHTMLForm(e)?new FormData(e):e);Re.getAdapter=Vc.getAdapter;Re.HttpStatusCode=ho;Re.default=Re;const{Axios:Yg,AxiosError:Zg,CanceledError:ey,isCancel:ty,CancelToken:ny,VERSION:sy,all:ry,Cancel:oy,isAxiosError:iy,spread:ly,toFormData:ay,AxiosHeaders:cy,HttpStatusCode:uy,formToJSON:fy,getAdapter:dy,mergeConfig:hy,create:py}=Re,rn=Re.create({baseURL:"",timeout:3e4,withCredentials:!0,headers:{"Content-Type":"application/json"}}),lg=12;try{localStorage.removeItem("orva.hasUser")}catch{}const qc=dr("auth",()=>{const e=ee(null),t=ee(!1),n=ee(!1),s=ee(null),r=ee(null),o=ee(!1),i=ee(0),l=_=>{s.value=_},a=async(_,v)=>{n.value=!0;try{const w=await rn.post("/api/v1/auth/login",{username:_,password:v});return e.value=w.data.user,t.value=!0,l(!0),{success:!0}}catch(w){return{success:!1,error:w.response?.data?.error?.message||"Login failed"}}finally{n.value=!1}},u=async(_,v)=>{n.value=!0;try{const w=await rn.post("/api/v1/auth/onboard",{username:_,password:v});return e.value=w.data.user,t.value=!0,l(!0),{success:!0}}catch(w){return{success:!1,error:w.response?.data?.error?.message||"Setup failed"}}finally{n.value=!1}},c=async()=>{try{await rn.post("/api/v1/auth/logout")}catch{}e.value=null,t.value=!1},f=async({force:_=!1}={})=>{if(!_&&s.value!==null)return s.value;try{const v=await rn.get("/api/v1/auth/status");return l(!!v.data.has_user),s.value}catch{return s.value===null&&l(!0),s.value}},h=async()=>{try{const _=await rn.get("/api/v1/auth/me");return e.value=_.data,t.value=!0,l(!0),r.value=_.data.expires_at||null,!0}catch{return e.value=null,t.value=!1,r.value=null,!1}},p=async()=>{o.value=!0;try{const _=await rn.post("/api/v1/auth/refresh");return r.value=_.data.expires_at||null,{success:!0}}catch(_){return t.value=!1,r.value=null,{success:!1,error:_.response?.data?.error?.message||"Refresh failed"}}finally{o.value=!1}},y=Ie(()=>r.value?(new Date(r.value).getTime()-Date.now())/1e3:null),m=Ie(()=>{if(!t.value)return!1;const _=y.value;return _==null||_<=0||Date.now(){i.value=Date.now()+3600*1e3},changePassword:async(_,v)=>{await rn.post("/api/v1/auth/change-password",{old_password:_,new_password:v})}}}),Kc=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},ag={},cg={viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"text-primary"};function ug(e,t){return se(),Ee("svg",cg,[...t[0]||(t[0]=[ne("rect",{width:"32",height:"32",rx:"8",fill:"currentColor"},null,-1),ne("text",{x:"16",y:"21","font-family":"'Inter', system-ui, sans-serif","font-size":"13","font-weight":"700",fill:"white","text-anchor":"middle","letter-spacing":"-0.5"}," f(x) ",-1)])])}const xl=Kc(ag,[["render",ug]]),fg={class:"lg:hidden fixed top-0 inset-x-0 h-14 bg-background border-b border-border z-30 flex items-center justify-between px-4 pt-safe pl-safe pr-safe"},dg={class:"flex items-center gap-2 text-white font-mono"},hg=["aria-label","aria-expanded"],pg={class:"h-16 flex items-center px-6 border-b border-border"},mg={class:"flex items-center gap-3 text-white font-mono tracking-tight text-lg"},gg={class:"flex-1 p-4 space-y-1 overflow-y-auto scrollable"},yg={__name:"Sidebar",setup(e){const t=pp(),n=ee(!1),s=ee(null),r=ee(null);ft(()=>t.fullPath,()=>{n.value=!1}),ft(n,async p=>{await St(),p?s.value?.querySelector("a[href]")?.focus?.():s.value?.contains(document.activeElement)&&r.value?.focus?.()});let o=0,i=0,l=!1;const a=p=>{if(window.innerWidth>=1024||!n.value)return;const y=p.touches[0];o=y.clientX,i=y.clientY,l=!0},u=p=>{if(!l)return;const y=p.touches[0],m=y.clientX-o,b=Math.abs(y.clientY-i);m<-60&&b<40&&(n.value=!1,l=!1)},c=()=>{l=!1},f=[{path:"/",label:"Overview",icon:ec},{path:"/ai",label:"Chat",icon:qd},{path:"/functions",label:"Functions",icon:Qa},{path:"/cron",label:"Schedules",icon:Ya},{path:"/jobs",label:"Jobs",icon:nc},{path:"/activity",label:"Activity",icon:Xa},{path:"/invocations",label:"Invocations",icon:sc},{path:"/traces",label:"Traces",icon:rc},{path:"/api-keys",label:"Keys",icon:Za},{path:"/channels",label:"Channels",icon:oc},{path:"/webhooks",label:"Webhooks",icon:ac},{path:"/firewall",label:"Firewall",icon:lc},{path:"/settings",label:"Settings",icon:ic},{path:"/docs",label:"Docs",icon:tc}],h=p=>p==="/"?t.path==="/":t.path.startsWith(p);return(p,y)=>{const m=Po("router-link");return se(),Ee(Le,null,[ne("header",fg,[ne("div",dg,[le(xl,{class:"w-6 h-6"}),y[3]||(y[3]=ne("span",{class:"font-bold tracking-tight"},"Orva",-1))]),ne("button",{ref_key:"toggleBtn",ref:r,class:"p-2 rounded-md text-foreground-muted hover:text-white hover:bg-surface transition-colors touch-expand-iconbtn","aria-label":n.value?"Close menu":"Open menu","aria-expanded":n.value,"aria-controls":"primary-navigation",onClick:y[0]||(y[0]=b=>n.value=!n.value)},[n.value?(se(),ze(re(Gd),{key:1,class:"w-5 h-5"})):(se(),ze(re(Hd),{key:0,class:"w-5 h-5"}))],8,hg)]),le(ur,{name:"fade"},{default:At(()=>[n.value?(se(),Ee("div",{key:0,class:"lg:hidden fixed inset-0 bg-black/50 z-30 backdrop-blur-sm",onClick:y[1]||(y[1]=b=>n.value=!1)})):Ye("",!0)]),_:1}),ne("aside",{id:"primary-navigation",ref_key:"drawerEl",ref:s,class:Mt(["bg-background border-r border-border flex flex-col h-full shrink-0 z-40 w-64 lg:w-52 fixed inset-y-0 left-0 transform transition-transform duration-150 ease-out lg:static lg:translate-x-0 lg:transform-none lg:transition-none pt-safe pb-safe pl-safe",n.value?"translate-x-0":"-translate-x-full lg:translate-x-0"]),onTouchstart:a,onTouchmove:u,onTouchend:c},[ne("div",pg,[ne("div",mg,[le(xl,{class:"w-8 h-8"}),y[4]||(y[4]=ne("span",{class:"font-bold tracking-tight text-white"},"Orva",-1))])]),ne("nav",gg,[(se(),Ee(Le,null,Gr(f,b=>le(m,{key:b.path,to:b.path,class:Mt(["flex items-center gap-3 px-3 py-2.5 rounded-md text-sm transition-colors duration-150 group font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary",h(b.path)?"text-white bg-primary/15":"text-foreground-muted hover:text-white hover:bg-surface-hover"]),onClick:y[2]||(y[2]=R=>n.value=!1)},{default:At(()=>[(se(),ze(ko(b.icon),{class:Mt(["w-4 h-4 transition-colors",h(b.path)?"text-white":"text-foreground-muted group-hover:text-white"])},null,8,["class"])),ne("span",null,lt(b.label),1)]),_:2},1032,["to","class"])),64))])],34)],64)}}},bg={key:0,class:"fixed z-50 bg-background border border-border shadow-lg rounded-lg p-4 flex items-start gap-3 inset-x-2 bottom-2 max-w-sm mx-auto pb-safe sm:inset-x-auto sm:bottom-6 sm:right-6 sm:mx-0 sm:pb-4"},_g={class:"flex-1 min-w-0"},vg={key:0,class:"text-sm font-medium text-white mb-0.5"},wg={class:"text-xs text-foreground-muted"},Eg={class:"flex flex-col gap-2 shrink-0"},xg=["disabled"],Rg={__name:"Toast",props:{visible:{type:Boolean,default:!1},title:{type:String,default:""},actionLabel:{type:String,default:""},actionLoading:{type:Boolean,default:!1},dismissible:{type:Boolean,default:!0}},emits:["action","dismiss"],setup(e){return(t,n)=>(se(),ze(Ao,{to:"body"},[le(ur,{name:"toast"},{default:At(()=>[e.visible?(se(),Ee("div",bg,[ne("div",_g,[e.title?(se(),Ee("div",vg,lt(e.title),1)):Ye("",!0),ne("div",wg,[wa(t.$slots,"default",{},void 0,!0)])]),ne("div",Eg,[e.actionLabel?(se(),Ee("button",{key:0,class:"px-3 py-1 rounded text-xs font-medium bg-white text-black hover:bg-foreground-muted transition-colors",disabled:e.actionLoading,onClick:n[0]||(n[0]=s=>t.$emit("action"))},lt(e.actionLoading?"…":e.actionLabel),9,xg)):Ye("",!0),e.dismissible?(se(),Ee("button",{key:1,class:"text-foreground-muted hover:text-white text-xs",onClick:n[1]||(n[1]=s=>t.$emit("dismiss"))}," Dismiss ")):Ye("",!0)])])):Ye("",!0)]),_:3})]))}},Sg=Kc(Rg,[["__scopeId","data-v-64a1b6e0"]]),Ag={class:"flex items-center gap-2 px-4 py-3 border-b border-border"},Cg=["aria-selected","onClick","onMouseenter"],Tg={class:"flex-1 truncate"},Og={key:0,class:"hidden sm:inline-flex items-center gap-1 text-[10px] font-mono text-foreground-muted"},Pg={key:0,class:"px-4 py-6 text-center text-sm text-foreground-muted"},kg=800,Ig={__name:"CommandPalette",setup(e,{expose:t}){const n=hp(),s=ee(!1),r=ee(""),o=ee(0),i=ee(null),l=ee(null),a=ee(null);cc(a,s);const u=[{id:"fn-new",label:"New function",icon:Kd,action:()=>n.push("/functions/new"),shortcut:["c","n"]},{id:"go-fns",label:"Functions",icon:Qa,action:()=>n.push("/functions"),shortcut:["g","f"]},{id:"go-inv",label:"Invocations",icon:sc,action:()=>n.push("/invocations"),shortcut:["g","i"]},{id:"go-jobs",label:"Jobs",icon:nc,action:()=>n.push("/jobs"),shortcut:["g","j"]},{id:"go-cron",label:"Schedules",icon:Ya,action:()=>n.push("/cron")},{id:"go-activity",label:"Activity",icon:Xa,action:()=>n.push("/activity")},{id:"go-traces",label:"Traces",icon:rc,action:()=>n.push("/traces")},{id:"go-keys",label:"API Keys",icon:Za,action:()=>n.push("/api-keys")},{id:"go-channels",label:"Channels",icon:oc,action:()=>n.push("/channels")},{id:"go-hooks",label:"Webhooks",icon:ac,action:()=>n.push("/webhooks")},{id:"go-fw",label:"Firewall",icon:lc,action:()=>n.push("/firewall")},{id:"go-settings",label:"Settings",icon:ic,action:()=>n.push("/settings")},{id:"go-docs",label:"Docs",icon:tc,action:()=>n.push("/docs")},{id:"go-overview",label:"Overview",icon:ec,action:()=>n.push("/")}],c=Ie(()=>{const v=r.value.trim().toLowerCase();return v?u.filter(w=>w.label.toLowerCase().includes(v)):u});ft(c,()=>{o.value=0});const f=v=>{const w=c.value.length;w&&(o.value=(o.value+v+w)%w,St(()=>{l.value?.querySelectorAll('li[role="option"]')[o.value]?.scrollIntoView?.({block:"nearest"})}))},h=v=>{v&&(p(),St(()=>v.action()))},p=()=>{s.value=!1,r.value="",o.value=0},y=()=>{s.value=!0,St(()=>i.value?.focus())};let m="",b=null;const R=v=>{if(!v)return!1;const w=v.tagName;return!!(w==="INPUT"||w==="TEXTAREA"||w==="SELECT"||v.isContentEditable)},_=v=>{if((v.metaKey||v.ctrlKey)&&v.key.toLowerCase()==="k"){v.preventDefault(),s.value?p():y();return}if((v.metaKey||v.ctrlKey)&&v.key.toLowerCase()==="s"&&window.location.pathname.includes("/functions/")){v.preventDefault(),window.dispatchEvent(new CustomEvent("orva:deploy"));return}if(v.metaKey||v.ctrlKey||v.altKey||R(document.activeElement))return;if(!m){if(v.key==="g"||v.key==="c"){m=v.key,clearTimeout(b),b=setTimeout(()=>{m=""},kg);return}return}const w=m+v.key;m="",clearTimeout(b);const P=u.find(N=>N.shortcut&&N.shortcut.join("")===w);P&&(v.preventDefault(),P.action())};return Fn(()=>{window.addEventListener("keydown",_)}),ms(()=>{window.removeEventListener("keydown",_),clearTimeout(b)}),t({show:y,close:p}),(v,w)=>(se(),ze(Ao,{to:"body"},[le(ur,{name:"fade"},{default:At(()=>[s.value?(se(),Ee("div",{key:0,class:"fixed inset-0 z-50 flex items-start justify-center bg-black/60 backdrop-blur-sm pt-[10vh] sm:pt-[15vh] px-4",onClick:vn(p,["self"])},[ne("div",{ref_key:"dialogRoot",ref:a,class:"w-full max-w-lg bg-background border border-border rounded-lg shadow-xl overflow-hidden",role:"dialog","aria-modal":"true","aria-labelledby":"command-palette-label"},[ne("div",Ag,[le(re(Wd),{class:"w-4 h-4 text-foreground-muted shrink-0"}),w[4]||(w[4]=ne("span",{id:"command-palette-label",class:"sr-only"},"Command palette",-1)),ia(ne("input",{ref_key:"searchInput",ref:i,"onUpdate:modelValue":w[0]||(w[0]=P=>r.value=P),type:"text",placeholder:"Search routes, actions…",class:"flex-1 bg-transparent border-0 text-base sm:text-sm text-white placeholder-foreground-muted focus:outline-none",onKeydown:[w[1]||(w[1]=wn(vn(P=>f(1),["prevent"]),["down"])),w[2]||(w[2]=wn(vn(P=>f(-1),["prevent"]),["up"])),w[3]||(w[3]=wn(vn(P=>h(c.value[o.value]),["prevent"]),["enter"])),wn(p,["esc"])]},null,544),[[Gs,r.value]]),w[5]||(w[5]=ne("kbd",{class:"hidden sm:inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-foreground-muted bg-surface border border-border"},"esc",-1))]),ne("ul",{ref_key:"listRef",ref:l,class:"max-h-[60dvh] overflow-y-auto scrollable py-1",role:"listbox"},[(se(!0),Ee(Le,null,Gr(c.value,(P,N)=>(se(),Ee("li",{key:P.id,role:"option","aria-selected":N===o.value,class:Mt(["flex items-center gap-3 px-4 py-2.5 min-h-[44px] text-base sm:text-sm cursor-pointer",N===o.value?"bg-primary/15 text-white":"text-foreground hover:bg-surface-hover"]),onClick:B=>h(P),onMouseenter:B=>o.value=N},[(se(),ze(ko(P.icon),{class:"w-4 h-4 shrink-0 text-foreground-muted"})),ne("span",Tg,lt(P.label),1),P.shortcut?(se(),Ee("span",Og,[(se(!0),Ee(Le,null,Gr(P.shortcut,B=>(se(),Ee("kbd",{key:B,class:"px-1.5 py-0.5 rounded bg-surface border border-border"},lt(B),1))),128))])):Ye("",!0)],42,Cg))),128)),c.value.length?Ye("",!0):(se(),Ee("li",Pg,' Nothing matches "'+lt(r.value)+'". ',1))],512),w[6]||(w[6]=ne("div",{class:"px-4 py-2 border-t border-border bg-surface/40 flex items-center justify-between text-[10px] text-foreground-muted"},[ne("span",{class:"flex items-center gap-2"},[ne("kbd",{class:"px-1.5 py-0.5 rounded font-mono bg-surface border border-border"},"↑↓"),ne("span",null,"navigate")]),ne("span",{class:"flex items-center gap-2"},[ne("kbd",{class:"px-1.5 py-0.5 rounded font-mono bg-surface border border-border"},"↵"),ne("span",null,"activate")])],-1))],512)])):Ye("",!0)]),_:1})]))}};function Wc(){return localStorage.getItem("orva_api_key")||""}const W=Re.create({baseURL:"/api/v1",timeout:6e4,withCredentials:!0,headers:{"Content-Type":"application/json"}});W.interceptors.request.use(e=>{const t=Wc();return t&&(e.headers["X-Orva-API-Key"]=t),e});W.interceptors.response.use(e=>e,e=>(e.response?console.error("API Error:",e.response.data):e.request&&console.error("Network Error:",e.message),Promise.reject(e)));const zc=Re.create({baseURL:"/fn",timeout:6e4,withCredentials:!0,headers:{"Content-Type":"application/json"}});zc.interceptors.request.use(e=>{const t=Wc();return t&&(e.headers["X-Orva-API-Key"]=t),e});const Ng=()=>W.get("/system/health"),Lg=e=>W.get("/functions",{params:e}),my=e=>W.get(`/functions/${e}`),gy=e=>W.get(`/functions/${e}/source`),yy=()=>W.get("/routes"),by=(e,t,n="*")=>W.post("/routes",{path:e,function_id:t,methods:n}),_y=e=>W.delete("/routes",{params:{path:e}}),vy=(e,{method:t="POST",path:n="/",headers:s={},body:r=""}={})=>{let i=`/${e.replace(/^fn_/,"")}`;n&&n!=="/"&&(i+=n.startsWith("/")?n:`/${n}`);const l={url:i,method:t,headers:{...s},responseType:"text",transformRequest:[u=>u]},a=(t||"POST").toUpperCase();return r&&a!=="GET"&&a!=="HEAD"&&(l.data=r),zc.request(l)},Dg=e=>W.get("/executions",{params:e}),wy=e=>W.get(`/executions/${e}`),Ey=e=>W.get(`/executions/${e}/logs`),xy=e=>W.get(`/executions/${e}/request`),Ry=e=>W.post(`/executions/${e}/replay`,null,{responseType:"text"}),Sy=e=>W.get("/activity",{params:e}),Ay=(e,t)=>W.get(`/functions/${encodeURIComponent(e)}/kv`,{params:t}),Cy=(e,t,n)=>W.put(`/functions/${encodeURIComponent(e)}/kv/${encodeURIComponent(t)}`,n),Ty=(e,t)=>W.delete(`/functions/${encodeURIComponent(e)}/kv/${encodeURIComponent(t)}`),Oy=e=>W.get(`/functions/${encodeURIComponent(e)}/fixtures`),Py=(e,t,n)=>W.put(`/functions/${encodeURIComponent(e)}/fixtures/${encodeURIComponent(t)}`,n),ky=(e,t)=>W.delete(`/functions/${encodeURIComponent(e)}/fixtures/${encodeURIComponent(t)}`),Iy=()=>W.get("/keys"),Ny=e=>W.post("/keys",e),Ly=e=>W.delete(`/keys/${e}`),Dy=()=>W.get("/oauth/connected-apps"),My=e=>W.delete(`/oauth/connected-apps/${e}`),Fy=()=>W.get("/auth/sessions"),Uy=e=>W.delete(`/auth/sessions/${e}`),jy=()=>W.get("/channels"),By=e=>W.post("/channels",e),Vy=e=>W.post(`/channels/${e}/rotate`),$y=e=>W.delete(`/channels/${e}`),Mg=()=>W.get("/system/metrics.json"),Hy=e=>W.get(`/deployments/${e}`),qy=(e,t=0,n=200)=>W.get(`/deployments/${e}/logs`,{params:{from:t,limit:n}}),Ky=(e,t=50)=>W.get(`/functions/${e}/deployments`,{params:{limit:t}}),Wy=(e,t,n,s="json")=>W.get(`/functions/${encodeURIComponent(e)}/diff`,{params:{from:t,to:n,format:s},responseType:s==="unified"?"text":"json"}),zy=(e,t)=>W.post(`/functions/${e}/rollback`,t),Fg=async e=>{const n=((await W.get("/functions")).data.functions||[]).find(s=>s.name===e);if(!n)throw new Error(`Function "${e}" not found`);return n.id},qo=e=>({...e,cron_expression:e.cron_expr}),Gy=async()=>({data:{schedules:((await W.get("/cron")).data.schedules||[]).map(qo)}}),Jy=async(e,t)=>{const n=await Fg(e),s={cron_expr:t.cron,timezone:t.timezone||Ug(),enabled:t.enabled!==!1,payload:t.payload??{}},r=await W.post(`/functions/${n}/cron`,s);return{data:qo(r.data)}},Xy=async(e,t)=>{const n=t.function_id;if(!n)throw new Error("updateCronSchedule: function_id is required");const s={};t.cron!==void 0&&(s.cron_expr=t.cron),t.timezone!==void 0&&(s.timezone=t.timezone),t.enabled!==void 0&&(s.enabled=t.enabled),t.payload!==void 0&&(s.payload=t.payload);const r=await W.put(`/functions/${n}/cron/${e}`,s);return{data:qo(r.data)}},Ug=()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC"}catch{return"UTC"}},Qy=async(e,t)=>{if(!t)throw new Error("deleteCronSchedule: functionId is required");return W.delete(`/functions/${t}/cron/${e}`)},Yy=(e={})=>W.get("/jobs",{params:e}),Zy=e=>W.post("/jobs",e),eb=e=>W.post(`/jobs/${e}/retry`),tb=e=>W.delete(`/jobs/${e}`),nb=()=>W.get("/system/storage"),sb=()=>W.post("/system/vacuum"),rb=e=>{const t=new FormData;return t.append("archive",e),W.post("/restore?confirm=1",t,{headers:{"Content-Type":"multipart/form-data"},timeout:600*1e3})},ob=e=>W.get(`/traces/${e}`),ib=(e={})=>W.get("/traces",{params:e}),lb=()=>W.get("/webhooks"),ab=e=>W.post("/webhooks",e),cb=(e,t)=>W.put(`/webhooks/${e}`,t),ub=e=>W.delete(`/webhooks/${e}`),fb=e=>W.post(`/webhooks/${e}/test`),db=e=>W.get(`/webhooks/${e}/deliveries`),hb=e=>W.post(`/webhooks/deliveries/${e}/retry`),pb=e=>W.get(`/functions/${encodeURIComponent(e)}/inbound-webhooks`),mb=(e,t)=>W.post(`/functions/${encodeURIComponent(e)}/inbound-webhooks`,t),gb=(e,t)=>W.delete(`/functions/${encodeURIComponent(e)}/inbound-webhooks/${t}`),Rl=[500,1e3,2e3,5e3,1e4],Gc=dr("events",()=>{const e=ee(!1),t=ee(0),n=new Map;let s=null,r=null;const o=(c,f)=>{const h=n.get(c);if(h)for(const p of h)try{p(f)}catch(y){console.error("events callback error",y)}},i=c=>{c.onopen=()=>{e.value=!0,t.value=0};const f=["metrics","execution","deployment","function","activity"];for(const h of f)c.addEventListener(h,p=>{try{const y=JSON.parse(p.data);o(h,y)}catch(y){console.warn("failed to parse SSE payload",y,p.data)}});c.onerror=()=>{if(e.value=!1,s){try{s.close()}catch{}s=null}const h=Rl[Math.min(t.value,Rl.length-1)];t.value+=1,clearTimeout(r),r=setTimeout(()=>l(),h)}},l=()=>{if(!s)try{s=new EventSource("/api/v1/events",{withCredentials:!0}),i(s)}catch(c){console.error("failed to open /api/v1/events",c),e.value=!1}};return{connected:is(e),reconnectAttempt:is(t),connect:l,disconnect:()=>{if(clearTimeout(r),r=null,s){try{s.close()}catch{}s=null}e.value=!1,t.value=0},subscribe:(c,f)=>(n.has(c)||n.set(c,new Set),n.get(c).add(f),()=>{const h=n.get(c);h&&h.delete(f)})}}),Sl=60,jg=dr("system",()=>{const e=ee(!1),t=ee(null),n=ee(0),s=ee([]),r=ee({}),o=ee(null);let i=null,l=null,a=null;const u=p=>{t.value=p;const y=new Set;for(const m of p.pools||[]){y.add(m.function_id);const b=r.value[m.function_id]||[];b.push(m.rate_ewma),b.length>Sl&&b.splice(0,b.length-Sl),r.value[m.function_id]=b}for(const m of Object.keys(r.value))y.has(m)||delete r.value[m]},c=async()=>{try{const[p,y,m,b]=await Promise.all([Mg(),Lg().catch(()=>({data:{functions:[],total:0}})),Dg({limit:20}).catch(()=>({data:{executions:[]}})),Ng().catch(()=>({data:null}))]);u(p.data),n.value=y.data.total??(y.data.functions||[]).length,s.value=m.data.executions||[],b.data&&(o.value={version:b.data.version,commit:b.data.commit,buildTime:b.data.build_time,image:b.data.image,uptimeSeconds:b.data.uptime_seconds}),e.value=!0}catch(p){console.error("seed fetch error:",p),e.value=!1}};return{isConnected:e,metrics:t,functionsCount:n,recentInvocations:s,poolHistory:r,buildInfo:o,connect:()=>{const p=Gc();c(),i=p.subscribe("metrics",y=>{u(y),e.value=!0}),l=p.subscribe("execution",y=>{s.value=[y,...s.value].slice(0,20)}),a=p.subscribe("function",y=>{y.action==="deleted"?n.value=Math.max(0,n.value-1):y.action==="created"&&(n.value=n.value+1)})},disconnect:()=>{i&&(i(),i=null),l&&(l(),l=null),a&&(a(),a=null),e.value=!1}}}),Bg={class:"flex h-screen w-full bg-background overflow-hidden font-sans antialiased text-foreground"},Vg={class:"flex-1 flex flex-col min-w-0 overflow-hidden relative pt-14 lg:pt-0"},$g={__name:"Layout",setup(e){const t=jg(),n=Gc(),s=qc(),r=ee(0);let o=null;const i=Ie(()=>{r.value;const a=s.secondsUntilExpiry;return a==null||a<=0?"—":a<60?`${Math.floor(a)}s`:a<3600?`${Math.floor(a/60)} min`:`${Math.floor(a/3600)} h`}),l=async()=>{(await s.refreshSession()).success||(window.location.href="/login")};return Fn(async()=>{await s.checkAuth(),n.connect(),t.connect(),o=setInterval(()=>{r.value++},3e4)}),ms(()=>{t.disconnect(),n.disconnect(),o&&clearInterval(o)}),(a,u)=>{const c=Po("router-view");return se(),Ee("div",Bg,[le(yg),ne("main",Vg,[le(c,null,{default:At(({Component:f})=>[(se(),ze(Zu,{max:10},[(se(),ze(ko(f),{class:"flex-1 overflow-auto scrollable p-page"}))],1024))]),_:1})]),le(Ig),le(Sg,{visible:re(s).shouldShowExpiryToast,"action-loading":re(s).refreshing,title:"Session expiring soon","action-label":"Stay signed in",onAction:l,onDismiss:re(s).dismissExpiryToast},{default:At(()=>[Ks(" Your session expires in "+lt(i.value)+". Click to extend it for another 7 days. ",1)]),_:1},8,["visible","action-loading","onDismiss"])])}}},Ko=dp({history:qh("/web/"),routes:[{path:"/login",name:"login",component:()=>_e(()=>import("./Login-DmrBAvpc.js"),__vite__mapDeps([0,1])),meta:{requiresAuth:!1}},{path:"/onboarding",name:"onboarding",component:()=>_e(()=>import("./Onboarding-CknTZuQK.js"),__vite__mapDeps([2,3,1])),meta:{requiresAuth:!1}},{path:"/",component:$g,meta:{requiresAuth:!0},children:[{path:"",name:"dashboard",component:()=>_e(()=>import("./Dashboard-C27lk4MJ.js"),__vite__mapDeps([4,5]))},{path:"ai",name:"ai",component:()=>_e(()=>import("./AI-BV7LwjfA.js"),__vite__mapDeps([6,7,8,9,10,11,12,13,14,15,3,16,17,18,19,20]))},{path:"functions",name:"functions",component:()=>_e(()=>import("./FunctionsList-BlLl9Ji5.js"),__vite__mapDeps([21,22,14,23,24,25,10,11,15,3]))},{path:"functions/:name",name:"function-detail",component:()=>_e(()=>import("./Editor--3DRfIJD.js"),__vite__mapDeps([26,27,28,14,29,30,31,16,32,33,34,15,3,35,19,36,11,24,25,37,17,38,39]))},{path:"functions/:name/deployments",name:"function-deployments",component:()=>_e(()=>import("./Deployments-DjklWQL1.js"),__vite__mapDeps([40,5,7,8,41,42,43,30,36,23,17]))},{path:"functions/:name/diff",name:"function-diff",component:()=>_e(()=>import("./FunctionDiff-B96TQktv.js"),__vite__mapDeps([44,30,14,45,3,18,31,16,17,46]))},{path:"functions/:name/kv",name:"function-kv",component:()=>_e(()=>import("./KVStore-CfuA6xj9.js"),__vite__mapDeps([47,5,22,7,8,23,11]))},{path:"functions/:name/inbound-webhooks",name:"function-inbound-webhooks",component:()=>_e(()=>import("./InboundWebhooks-DXNQPsKe.js"),__vite__mapDeps([48,5,22,7,8,23,11]))},{path:"functions/new",name:"function-new",component:()=>_e(()=>import("./Editor--3DRfIJD.js"),__vite__mapDeps([26,27,28,14,29,30,31,16,32,33,34,15,3,35,19,36,11,24,25,37,17,38,39]))},{path:"deploy",redirect:{name:"function-new"}},{path:"cron",name:"cron",component:()=>_e(()=>import("./CronJobs-CHCHOKdI.js"),__vite__mapDeps([49,5,22,28,43,35,50,11]))},{path:"jobs",name:"jobs",component:()=>_e(()=>import("./Jobs-CU8XnJK3.js"),__vite__mapDeps([51,5,22,7,8,17,11,42,43]))},{path:"activity",name:"activity",component:()=>_e(()=>import("./Activity-DN8mbB-1.js"),__vite__mapDeps([52,5,7,8,41,42,43,53]))},{path:"invocations",name:"invocations",component:()=>_e(()=>import("./InvocationsLog-BWp_rnmb.js"),__vite__mapDeps([54,5,7,8,41,42,43,14,29,1,23,16,15,11,17,35,19]))},{path:"traces",name:"traces",component:()=>_e(()=>import("./Traces-CejEofjO.js"),__vite__mapDeps([55,5,41,42,43,23,56]))},{path:"traces/:id",name:"trace-detail",component:()=>_e(()=>import("./TraceDetail-DTbv7Wsg.js"),__vite__mapDeps([57,5,41,42,43,58,3,56,1]))},{path:"api-keys",name:"api-keys",component:()=>_e(()=>import("./ApiKeys-p9xM5dML.js"),__vite__mapDeps([59,5,22,14,60,15,3,33,11]))},{path:"channels",name:"channels",component:()=>_e(()=>import("./Channels-BrmOc5pT.js"),__vite__mapDeps([61,22,14,60,15,3,1,17,11]))},{path:"webhooks",name:"webhooks",component:()=>_e(()=>import("./Webhooks-DYEPaH1Y.js"),__vite__mapDeps([62,5,14,22,28,18,50,11,15,3,17]))},{path:"firewall",name:"firewall",component:()=>_e(()=>import("./Firewall-pkdJLyXh.js"),__vite__mapDeps([63,27,28,23,24,11,37,64]))},{path:"settings",name:"settings",component:()=>_e(()=>import("./Settings-B47Vm5f4.js"),__vite__mapDeps([65,5,27,9,14,60,38,3,33,11]))},{path:"docs",name:"docs",component:()=>_e(()=>import("./Docs-DVOuRCTb.js"),__vite__mapDeps([66,5,14,29,12,13,15,3,24,53,33,16,32,25,67]))}]},{path:"/:pathMatch(.*)*",name:"not-found",component:()=>_e(()=>import("./NotFound-CcZlcrLG.js"),__vite__mapDeps([68,58,34])),meta:{requiresAuth:!1}}]});Ko.beforeEach((e,t,n)=>{if(t.fullPath===e.fullPath&&t.name)return n(!1);n()});Ko.beforeEach(async(e,t,n)=>{const s=qc();if(!await s.fetchAuthStatus())return e.name==="onboarding"?n():n({name:"onboarding",replace:!0});if(s.isAuthenticated===!1&&await s.checkAuth(),s.isAuthenticated)return e.name==="onboarding"||e.name==="login"?n({name:"dashboard"}):n();if(e.name==="login")return n();if(e.name==="onboarding")return n({name:"login",replace:!0});n({name:"login",query:{redirect:e.fullPath}})});const Wo=Od(rh),Hg=Id();Wo.use(Hg);Wo.use(Ko);Wo.mount("#app");export{ac as $,Xa as A,Qa as B,Qd as C,Kc as D,ft as E,Le as F,Oo as G,ko as H,St as I,ur as J,wa as K,wn as L,qd as M,go as N,xl as O,Kd as P,Ao as Q,ef as R,Wd as S,zd as T,Gc as U,tf as V,Lg as W,ec as X,W as Y,oc as Z,$i as _,Ee as a,cc as a$,zg as a0,Ed as a1,Po as a2,Kg as a3,Wc as a4,vy as a5,Py as a6,Oy as a7,_e as a8,pp as a9,eb as aA,Sy as aB,Dg as aC,Co as aD,rc as aE,wy as aF,Ey as aG,xy as aH,Ry as aI,gy as aJ,my as aK,ib as aL,ob as aM,Iy as aN,Ny as aO,Ly as aP,jy as aQ,By as aR,Vy as aS,$y as aT,lb as aU,fb as aV,ub as aW,cb as aX,ab as aY,db as aZ,hb as a_,Gd as aa,vd as ab,ky as ac,_y as ad,by as ae,zy as af,yy as ag,Ky as ah,Hy as ai,qy as aj,Wy as ak,Ay as al,fs as am,Cy as an,Ty as ao,pb as ap,gb as aq,mb as ar,Ug as as,Gy as at,Xy as au,Qy as av,Jy as aw,Yy as ax,Zy as ay,tb as az,ne as b,qg as b0,wd as b1,lp as b2,nb as b3,Dy as b4,Fy as b5,rb as b6,sb as b7,My as b8,Uy as b9,dr as ba,Ya as bb,Te as c,le as d,ia as e,re as f,Ye as g,At as h,hp as i,se as j,Ks as k,Wg as l,Gg as m,ze as n,Fn as o,Gr as p,Ie as q,ee as r,Mt as s,lt as t,qc as u,Gs as v,vn as w,jg as x,ms as y,Pn as z}; diff --git a/backend/internal/server/ui_dist/assets/key-round-BccKiRw7.js b/backend/internal/server/ui_dist/assets/key-round-BR2mpVu3.js similarity index 81% rename from backend/internal/server/ui_dist/assets/key-round-BccKiRw7.js rename to backend/internal/server/ui_dist/assets/key-round-BR2mpVu3.js index ecb057a..fb6e210 100644 --- a/backend/internal/server/ui_dist/assets/key-round-BccKiRw7.js +++ b/backend/internal/server/ui_dist/assets/key-round-BR2mpVu3.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const c=a("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);export{c as K}; +import{c as a}from"./index-fIeDYqWy.js";const c=a("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);export{c as K}; diff --git a/backend/internal/server/ui_dist/assets/lock-Dpr2FIZ9.js b/backend/internal/server/ui_dist/assets/lock-D649KWfg.js similarity index 68% rename from backend/internal/server/ui_dist/assets/lock-Dpr2FIZ9.js rename to backend/internal/server/ui_dist/assets/lock-D649KWfg.js index 486b380..7cb66e7 100644 --- a/backend/internal/server/ui_dist/assets/lock-Dpr2FIZ9.js +++ b/backend/internal/server/ui_dist/assets/lock-D649KWfg.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const t=e("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);export{t as L}; +import{c as e}from"./index-fIeDYqWy.js";const t=e("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);export{t as L}; diff --git a/backend/internal/server/ui_dist/assets/pencil-DTkm5-NQ.js b/backend/internal/server/ui_dist/assets/pencil-IX2SrcHQ.js similarity index 76% rename from backend/internal/server/ui_dist/assets/pencil-DTkm5-NQ.js rename to backend/internal/server/ui_dist/assets/pencil-IX2SrcHQ.js index 3b8f2a2..1249213 100644 --- a/backend/internal/server/ui_dist/assets/pencil-DTkm5-NQ.js +++ b/backend/internal/server/ui_dist/assets/pencil-IX2SrcHQ.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const c=a("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);export{c as P}; +import{c as a}from"./index-fIeDYqWy.js";const c=a("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);export{c as P}; diff --git a/backend/internal/server/ui_dist/assets/play-CPjfKIOc.js b/backend/internal/server/ui_dist/assets/play-CmOm4UFE.js similarity index 65% rename from backend/internal/server/ui_dist/assets/play-CPjfKIOc.js rename to backend/internal/server/ui_dist/assets/play-CmOm4UFE.js index f552df5..4d7ae4f 100644 --- a/backend/internal/server/ui_dist/assets/play-CPjfKIOc.js +++ b/backend/internal/server/ui_dist/assets/play-CmOm4UFE.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const e=a("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);export{e as P}; +import{c as a}from"./index-fIeDYqWy.js";const e=a("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);export{e as P}; diff --git a/backend/internal/server/ui_dist/assets/refresh-cw-C7sR7ShF.js b/backend/internal/server/ui_dist/assets/refresh-cw-9T7Tp2vI.js similarity index 79% rename from backend/internal/server/ui_dist/assets/refresh-cw-C7sR7ShF.js rename to backend/internal/server/ui_dist/assets/refresh-cw-9T7Tp2vI.js index 8944051..eee7b51 100644 --- a/backend/internal/server/ui_dist/assets/refresh-cw-C7sR7ShF.js +++ b/backend/internal/server/ui_dist/assets/refresh-cw-9T7Tp2vI.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const t=e("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);export{t as R}; +import{c as e}from"./index-fIeDYqWy.js";const t=e("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);export{t as R}; diff --git a/backend/internal/server/ui_dist/assets/rotate-ccw-CsgWy1Bs.js b/backend/internal/server/ui_dist/assets/rotate-ccw-BYpihd4d.js similarity index 67% rename from backend/internal/server/ui_dist/assets/rotate-ccw-CsgWy1Bs.js rename to backend/internal/server/ui_dist/assets/rotate-ccw-BYpihd4d.js index d6765ed..fcce170 100644 --- a/backend/internal/server/ui_dist/assets/rotate-ccw-CsgWy1Bs.js +++ b/backend/internal/server/ui_dist/assets/rotate-ccw-BYpihd4d.js @@ -1 +1 @@ -import{c as t}from"./index-BMkkwZ9q.js";const e=t("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);export{e as R}; +import{c as t}from"./index-fIeDYqWy.js";const e=t("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);export{e as R}; diff --git a/backend/internal/server/ui_dist/assets/settings-2-CcqGdzLw.js b/backend/internal/server/ui_dist/assets/settings-2-DcdHMrV8.js similarity index 92% rename from backend/internal/server/ui_dist/assets/settings-2-CcqGdzLw.js rename to backend/internal/server/ui_dist/assets/settings-2-DcdHMrV8.js index 7bc0ae9..2a7b4d3 100644 --- a/backend/internal/server/ui_dist/assets/settings-2-CcqGdzLw.js +++ b/backend/internal/server/ui_dist/assets/settings-2-DcdHMrV8.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const t=a("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]);const c=a("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);const y=a("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);export{t as F,c as P,y as S}; +import{c as a}from"./index-fIeDYqWy.js";const t=a("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]);const c=a("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);const y=a("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);export{t as F,c as P,y as S}; diff --git a/backend/internal/server/ui_dist/assets/shield-check-sW6QCkG0.js b/backend/internal/server/ui_dist/assets/shield-check-BHGT5Xmy.js similarity index 79% rename from backend/internal/server/ui_dist/assets/shield-check-sW6QCkG0.js rename to backend/internal/server/ui_dist/assets/shield-check-BHGT5Xmy.js index 896af05..f556156 100644 --- a/backend/internal/server/ui_dist/assets/shield-check-sW6QCkG0.js +++ b/backend/internal/server/ui_dist/assets/shield-check-BHGT5Xmy.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const a=e("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);export{a as S}; +import{c as e}from"./index-fIeDYqWy.js";const a=e("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);export{a as S}; diff --git a/backend/internal/server/ui_dist/assets/sparkles-BVQ_t_Q_.js b/backend/internal/server/ui_dist/assets/sparkles-B00DiY2I.js similarity index 86% rename from backend/internal/server/ui_dist/assets/sparkles-BVQ_t_Q_.js rename to backend/internal/server/ui_dist/assets/sparkles-B00DiY2I.js index 95ebdb1..c2403d8 100644 --- a/backend/internal/server/ui_dist/assets/sparkles-BVQ_t_Q_.js +++ b/backend/internal/server/ui_dist/assets/sparkles-B00DiY2I.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const l=a("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);export{l as S}; +import{c as a}from"./index-fIeDYqWy.js";const l=a("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);export{l as S}; diff --git a/backend/internal/server/ui_dist/assets/square-pen-CsqFW8Ka.js b/backend/internal/server/ui_dist/assets/square-pen-BfULFvug.js similarity index 79% rename from backend/internal/server/ui_dist/assets/square-pen-CsqFW8Ka.js rename to backend/internal/server/ui_dist/assets/square-pen-BfULFvug.js index 442d470..c9b7db9 100644 --- a/backend/internal/server/ui_dist/assets/square-pen-CsqFW8Ka.js +++ b/backend/internal/server/ui_dist/assets/square-pen-BfULFvug.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const r=a("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);export{r as S}; +import{c as a}from"./index-fIeDYqWy.js";const r=a("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);export{r as S}; diff --git a/backend/internal/server/ui_dist/assets/terminal-DAVNGL0P.js b/backend/internal/server/ui_dist/assets/terminal-DWMuaXnV.js similarity index 59% rename from backend/internal/server/ui_dist/assets/terminal-DAVNGL0P.js rename to backend/internal/server/ui_dist/assets/terminal-DWMuaXnV.js index 08faf5d..9d7bb60 100644 --- a/backend/internal/server/ui_dist/assets/terminal-DAVNGL0P.js +++ b/backend/internal/server/ui_dist/assets/terminal-DWMuaXnV.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const t=e("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);export{t as T}; +import{c as e}from"./index-fIeDYqWy.js";const t=e("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);export{t as T}; diff --git a/backend/internal/server/ui_dist/assets/trash-2-BXf2uqQH.js b/backend/internal/server/ui_dist/assets/trash-2-B2Wniuw-.js similarity index 80% rename from backend/internal/server/ui_dist/assets/trash-2-BXf2uqQH.js rename to backend/internal/server/ui_dist/assets/trash-2-B2Wniuw-.js index 4892fff..eee985b 100644 --- a/backend/internal/server/ui_dist/assets/trash-2-BXf2uqQH.js +++ b/backend/internal/server/ui_dist/assets/trash-2-B2Wniuw-.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const e=a("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);export{e as T}; +import{c as a}from"./index-fIeDYqWy.js";const e=a("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);export{e as T}; diff --git a/backend/internal/server/ui_dist/assets/variable-b2EnW52t.js b/backend/internal/server/ui_dist/assets/variable-C2-uCEoV.js similarity index 77% rename from backend/internal/server/ui_dist/assets/variable-b2EnW52t.js rename to backend/internal/server/ui_dist/assets/variable-C2-uCEoV.js index eb78413..40a580a 100644 --- a/backend/internal/server/ui_dist/assets/variable-b2EnW52t.js +++ b/backend/internal/server/ui_dist/assets/variable-C2-uCEoV.js @@ -1 +1 @@ -import{c as e}from"./index-BMkkwZ9q.js";const y=e("variable",[["path",{d:"M8 21s-4-3-4-9 4-9 4-9",key:"uto9ud"}],["path",{d:"M16 3s4 3 4 9-4 9-4 9",key:"4w2vsq"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15",key:"f7djnv"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15",key:"1shsy8"}]]);export{y as V}; +import{c as e}from"./index-fIeDYqWy.js";const y=e("variable",[["path",{d:"M8 21s-4-3-4-9 4-9 4-9",key:"uto9ud"}],["path",{d:"M16 3s4 3 4 9-4 9-4 9",key:"4w2vsq"}],["line",{x1:"15",x2:"9",y1:"9",y2:"15",key:"f7djnv"}],["line",{x1:"9",x2:"15",y1:"9",y2:"15",key:"1shsy8"}]]);export{y as V}; diff --git a/backend/internal/server/ui_dist/assets/zap-DvhWYa2n.js b/backend/internal/server/ui_dist/assets/zap-BoY-LImv.js similarity index 75% rename from backend/internal/server/ui_dist/assets/zap-DvhWYa2n.js rename to backend/internal/server/ui_dist/assets/zap-BoY-LImv.js index 38d9a47..728f00f 100644 --- a/backend/internal/server/ui_dist/assets/zap-DvhWYa2n.js +++ b/backend/internal/server/ui_dist/assets/zap-BoY-LImv.js @@ -1 +1 @@ -import{c as a}from"./index-BMkkwZ9q.js";const e=a("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);export{e as Z}; +import{c as a}from"./index-fIeDYqWy.js";const e=a("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);export{e as Z}; diff --git a/backend/internal/server/ui_dist/index.html b/backend/internal/server/ui_dist/index.html index d0c8862..0545fc1 100644 --- a/backend/internal/server/ui_dist/index.html +++ b/backend/internal/server/ui_dist/index.html @@ -8,7 +8,7 @@ - + diff --git a/frontend/package-lock.json b/frontend/package-lock.json index efc04a4..c339887 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,7 +14,7 @@ "@codemirror/merge": "^6.12.1", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.39.11", - "axios": "^1.13.2", + "axios": "^1.17.0", "codemirror": "^6.0.2", "highlight.js": "^11.11.1", "lucide-vue-next": "^0.562.0", @@ -1817,6 +1817,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", @@ -1900,13 +1912,14 @@ } }, "node_modules/axios": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", - "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, @@ -2165,7 +2178,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2659,9 +2671,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -2878,6 +2890,19 @@ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", "license": "MIT" }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3444,13 +3469,12 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "funding": [ { "type": "github", @@ -3622,9 +3646,9 @@ } }, "node_modules/postcss": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz", - "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "funding": [ { "type": "opencollective", @@ -3641,7 +3665,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, diff --git a/frontend/package.json b/frontend/package.json index 73b1337..a165fa5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,7 +17,7 @@ "@codemirror/merge": "^6.12.1", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.39.11", - "axios": "^1.13.2", + "axios": "^1.17.0", "codemirror": "^6.0.2", "highlight.js": "^11.11.1", "lucide-vue-next": "^0.562.0", diff --git a/frontend/src/views/Onboarding.vue b/frontend/src/views/Onboarding.vue index fca9017..cc2fcfc 100644 --- a/frontend/src/views/Onboarding.vue +++ b/frontend/src/views/Onboarding.vue @@ -223,7 +223,17 @@ const generatePassword = () => { const symbols = '!@#$%^&*()-_=+[]{}|;:,.<>?' const all = lower + upper + digits + symbols - const getRandom = (chars) => chars[crypto.getRandomValues(new Uint32Array(1))[0] % chars.length] + // Uniform [0, n) from crypto RNG via rejection sampling — plain `% n` over + // 2^32 biases toward low values when n doesn't divide 2^32. + const randInt = (n) => { + const limit = Math.floor(0xFFFFFFFF / n) * n + let r + do { + r = crypto.getRandomValues(new Uint32Array(1))[0] + } while (r >= limit) + return r % n + } + const getRandom = (chars) => chars[randInt(chars.length)] let pwd = [ getRandom(lower), @@ -236,9 +246,9 @@ const generatePassword = () => { pwd.push(getRandom(all)) } - // Shuffle + // Shuffle (Fisher–Yates with unbiased index). for (let i = pwd.length - 1; i > 0; i -= 1) { - const j = crypto.getRandomValues(new Uint32Array(1))[0] % (i + 1) + const j = randInt(i + 1) ;[pwd[i], pwd[j]] = [pwd[j], pwd[i]] }