diff --git a/ext/ext.go b/ext/ext.go index a5172f026..dbc2fe94a 100644 --- a/ext/ext.go +++ b/ext/ext.go @@ -1,9 +1,9 @@ // Package ext is the public extension API for building custom gateway // binaries on top of GoModel. External modules register request rewriters, -// HTTP middleware, extra routes, and a route selector on a Registry (usually -// ext.Default) before starting the gateway; core consumes an immutable -// snapshot of the registry at server construction. An empty registry adds -// zero request overhead. +// HTTP middleware, extra routes, runtime settings, and a route selector on a +// Registry (usually ext.Default) before starting the gateway; core consumes +// an immutable snapshot of the registry at server construction. An empty +// registry adds zero request overhead. package ext import ( @@ -81,6 +81,38 @@ type RequestRewriter interface { Rewrite(ctx context.Context, in Input) (*Result, error) } +// SettingOption is one allowed value for a dashboard-editable extension +// setting. Label and Description are safe to expose in the admin UI. +type SettingOption struct { + Value string `json:"value"` + Label string `json:"label"` + Description string `json:"description,omitempty"` +} + +// SettingDescriptor describes one deployment-wide extension setting. +// Locked settings are controlled by an environment variable and remain +// visible, but cannot be changed through the admin API. Options must list +// every accepted value for an unlocked setting, including Value; registration +// fails when that contract is not met. +type SettingDescriptor struct { + Key string `json:"key"` + Label string `json:"label"` + Description string `json:"description,omitempty"` + Value string `json:"value"` + Locked bool `json:"locked"` + ManagedBy string `json:"managed_by,omitempty"` + Options []SettingOption `json:"options"` +} + +// RuntimeSetting is a mutable, deployment-wide extension setting. Core owns +// persistence and the admin API; the extension owns validation and applying +// the value to its live runtime state. Apply receives only a value advertised +// in Descriptor.Options. Implementations must be safe for concurrent use. +type RuntimeSetting interface { + Descriptor() SettingDescriptor + Apply(value string) error +} + // RejectionError rejects the request with a client-visible status code and // machine-readable error code, rendered in the endpoint's native error // dialect (OpenAI or Anthropic envelope). diff --git a/ext/registry.go b/ext/registry.go index e0ab8de3d..ec91f8a13 100644 --- a/ext/registry.go +++ b/ext/registry.go @@ -9,7 +9,7 @@ import ( // Registry collects extensions to be consumed by the gateway at startup. // Register everything before the server is constructed (before run.Run or -// app.New); core snapshots the registry once and never consults it again. +// app.New); core snapshots each registration list during initialization. type Registry struct { mu sync.Mutex rewriters []RequestRewriter @@ -17,6 +17,15 @@ type Registry struct { routes []func(*echo.Echo) publicPaths []string routeSelector RouteSelector + settings []RuntimeSetting +} + +// RegisterSetting adds a deployment-wide setting exposed through the generic +// admin settings API. +func (r *Registry) RegisterSetting(setting RuntimeSetting) { + r.mu.Lock() + defer r.mu.Unlock() + r.settings = append(r.settings, setting) } // RegisterRewriter adds a request rewriter. Rewriters run in registration @@ -96,6 +105,13 @@ func (r *Registry) RouteSelector() RouteSelector { return r.routeSelector } +// Settings returns a defensive copy of the registered runtime settings. +func (r *Registry) Settings() []RuntimeSetting { + r.mu.Lock() + defer r.mu.Unlock() + return slices.Clone(r.settings) +} + // Default is the process-wide registry used by package-level helpers and, by // default, by run.Run. var Default = &Registry{} @@ -114,3 +130,6 @@ func AddPublicPaths(paths ...string) { Default.AddPublicPaths(paths...) } // RegisterRouteSelector installs a route selector on the Default registry. func RegisterRouteSelector(sel RouteSelector) { Default.RegisterRouteSelector(sel) } + +// RegisterSetting registers a runtime setting on the Default registry. +func RegisterSetting(setting RuntimeSetting) { Default.RegisterSetting(setting) } diff --git a/ext/registry_test.go b/ext/registry_test.go index caa55f975..b687940c3 100644 --- a/ext/registry_test.go +++ b/ext/registry_test.go @@ -12,6 +12,17 @@ import ( type namedRewriter struct{ name string } +type testRuntimeSetting struct{ value string } + +func (s *testRuntimeSetting) Descriptor() SettingDescriptor { + return SettingDescriptor{Key: "test.setting", Value: s.value} +} + +func (s *testRuntimeSetting) Apply(value string) error { + s.value = value + return nil +} + func (r *namedRewriter) Name() string { return r.name } func (r *namedRewriter) Rewrite(_ context.Context, _ Input) (*Result, error) { @@ -58,6 +69,17 @@ func TestRegistryCollectsMiddlewareAndRoutes(t *testing.T) { assert.Len(t, reg.Routes(), 1) } +func TestRegistryCollectsRuntimeSettings(t *testing.T) { + reg := &Registry{} + reg.RegisterSetting(&testRuntimeSetting{value: "high"}) + + snapshot := reg.Settings() + require.Len(t, snapshot, 1) + reg.RegisterSetting(&testRuntimeSetting{value: "low"}) + assert.Len(t, snapshot, 1, "earlier snapshot must not grow") + assert.Len(t, reg.Settings(), 2) +} + func TestRegistryConcurrentRegistration(t *testing.T) { reg := &Registry{} const workers = 16 diff --git a/internal/admin/dashboard/static/dist/assets/index-CDxZDTJg.css b/internal/admin/dashboard/static/dist/assets/index-C9yo6Tyg.css similarity index 99% rename from internal/admin/dashboard/static/dist/assets/index-CDxZDTJg.css rename to internal/admin/dashboard/static/dist/assets/index-C9yo6Tyg.css index 236f74c38..12fe493fb 100644 --- a/internal/admin/dashboard/static/dist/assets/index-CDxZDTJg.css +++ b/internal/admin/dashboard/static/dist/assets/index-C9yo6Tyg.css @@ -1 +1 @@ -:root{--bg:#111110;--bg-surface:#1e1d1c;--bg-surface-hover:#2a2420;--border:#2a2826;--text:#e8e0d6;--text-muted:#9a918a;--accent:#b8956e;--accent-hover:#d4b896;--success:#34d399;--info:#3b82f6;--warning:#f59e0b;--danger:#ef4444;--prompt-cache-color:color-mix(in srgb, var(--info) 72%, #fff);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 24%, var(--bg-surface));--cache-meter-uncached:var(--token-input);--cache-meter-local:var(--token-local);--cache-meter-prompt:var(--token-prompt);--token-input:#c0824a;--token-output:#ddb27a;--token-prompt:color-mix(in srgb, var(--info) 60%, transparent);--token-local:color-mix(in srgb, var(--info) 20%, transparent);--sidebar-width:240px;--radius:8px;--chart-grid:#2a2826;--chart-text:#9a918a;--chart-day-marker:var(--text);--chart-tooltip-bg:#1e1d1c;--chart-tooltip-border:#2a2826;--chart-tooltip-text:#e8e0d6;--cal-level-0:#161b22;--cal-level-1:color-mix(in srgb, var(--info) 15%, var(--bg-surface));--cal-level-2:color-mix(in srgb, var(--info) 25%, var(--bg-surface));--cal-level-3:color-mix(in srgb, var(--info) 36%, var(--bg-surface));--cal-level-4:color-mix(in srgb, var(--info) 48%, var(--bg-surface));--cal-level-5:color-mix(in srgb, var(--info) 60%, var(--bg-surface));--cal-level-6:color-mix(in srgb, var(--info) 73%, var(--bg-surface));--cal-level-7:color-mix(in srgb, var(--info) 87%, var(--bg-surface));--cal-level-8:var(--info);--cal-level-9:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-10:color-mix(in srgb, var(--info) 62%, #fff);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface-hover) 86%, #fff 14%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface-hover) 72%, #fff 28%);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light]{--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}body.dashboard-modal-open{overflow:hidden}.app{min-height:100vh;display:flex}.badge{background:var(--accent);color:#fff;text-transform:uppercase;letter-spacing:.5px;border-radius:10px;padding:2px 8px;font-size:10px;font-weight:600}.auth-dialog{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:min(440px,100%);padding:22px;box-shadow:0 24px 70px #00000061}.auth-dialog-header{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.auth-dialog h2{margin-top:2px;font-size:22px;line-height:1.2}.auth-dialog-close{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.auth-dialog-close:hover{color:var(--text);background:var(--bg-surface-hover)}.auth-dialog-close:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-hint{color:var(--text-muted);font-size:13px}.auth-dialog-error{color:var(--danger);font-size:13px;font-weight:600}.auth-dialog-form{gap:10px;margin-top:18px;display:grid}.auth-dialog-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.content{flex:1 1 0;width:100%;min-width:0;max-width:1400px;margin:0 auto;padding:32px;transition:width .2s}.page-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.page-header h2{letter-spacing:-.3px;font-size:22px;font-weight:700}.page-header-controls{align-items:center;gap:12px;display:flex}.page-with-sticky-date{grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:12px;display:grid}.page-with-sticky-date>*{grid-column:1/-1}.page-with-sticky-date>.date-range-page-header{grid-column:1}.page-with-sticky-date>.sticky-date-range{z-index:8;grid-column:2;justify-self:end;position:sticky;top:16px}.model-count{color:var(--text-muted);font-size:14px}.provider-status-section{margin-top:28px;scroll-margin-top:24px}.cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:28px;display:grid}.card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:8px;font-size:12px;font-weight:600}.card-value{letter-spacing:-.5px;font-size:28px;font-weight:700}.cache-meter{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:28px;padding:24px}.chart-container{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.chart-container h3{margin-bottom:16px;font-size:16px;font-weight:600}.chart-container-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.chart-container-header h3{margin-bottom:0}.chart-wrapper{height:210px;position:relative}.live-dot{background:var(--text-muted);border-radius:50%;flex-shrink:0;width:8px;height:8px}.live-dot.is-streaming{background:var(--success);position:relative}.live-dot.is-streaming:after{content:"";z-index:-1;background:color-mix(in srgb, var(--success) 55%, transparent);border-radius:50%;animation:1.8s ease-out infinite live-dot-pulse;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.live-dot.is-streaming:after{opacity:0;animation:none}}@keyframes live-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(2.5)}to{opacity:0;transform:scale(2.5)}}.alert{border-radius:var(--radius);margin-bottom:20px;padding:12px 16px;font-size:14px}.alert-warning{color:var(--warning);background:#f59e0b1a;border:1px solid #f59e0b4d}.table-toolbar{align-items:center;gap:12px;margin-bottom:16px;display:flex}.table-toolbar-main{flex:1;min-width:0}.table-toolbar-actions{justify-content:flex-end;margin-left:auto;display:flex}input:is([type=text],[type=date],[type=number]){background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:8px 12px;font-family:inherit;font-size:13px}input:is([type=text],[type=date],[type=number]):focus{border-color:var(--accent)}input:is([type=text],[type=date],[type=number]):disabled,textarea:disabled,.form-input:disabled{opacity:.6;cursor:not-allowed}.table-wrapper{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table th{text-align:left;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);background:var(--bg);border-bottom:1px solid var(--border);padding:12px 16px;font-size:12px;font-weight:600}.data-table th.model-actions-header{text-align:right;white-space:nowrap;width:1%;min-width:156px}.data-table td{border-bottom:1px solid var(--border);padding:10px 16px}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:var(--bg-surface-hover)}.mono{font-family:SF Mono,Menlo,Consolas,monospace}.font-size-md{font-size:13px}.col-price,.data-table th.col-price{text-align:right}td.col-price{color:var(--text-muted);white-space:nowrap;font-family:SF Mono,Menlo,Consolas,monospace;font-size:13px}.provider-badge{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:2px 10px;font-size:12px;font-weight:500;display:inline-block}.empty-state{text-align:center;color:var(--text-muted);padding:48px 0;font-size:14px}.empty-state-icon{width:auto;height:auto;max-height:160px;color:var(--text-muted);margin:0 auto;display:block}.empty-state-icon text{fill:var(--text-muted);font-family:inherit;font-weight:600}.chart-empty-overlay{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.chart-empty-overlay .empty-state-icon{width:auto;max-width:90%;height:auto;max-height:195px}.loading-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:16px;height:16px;animation:.8s linear infinite loading-spin}@keyframes loading-spin{to{transform:rotate(360deg)}}.table-action-btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:6px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:inline-flex}.table-action-btn:hover:not(:disabled){background:var(--bg-surface-hover)}.table-action-btn:disabled{opacity:.45;cursor:default}.table-action-btn-danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.table-action-btn-active{color:var(--accent-strong,var(--accent));background:color-mix(in srgb, var(--accent) 12%, var(--bg));border-color:color-mix(in srgb, var(--accent) 38%, var(--border))}.table-action-btn-active:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 18%, var(--bg-surface-hover))}.table-action-btn-failover-active{color:var(--info);background:color-mix(in srgb, var(--cache-meter-prompt) 35%, var(--bg));border-color:color-mix(in srgb, var(--info) 45%, var(--border));position:relative}.table-action-btn-failover-active:hover:not(:disabled){background:color-mix(in srgb, var(--cache-meter-prompt) 45%, var(--bg-surface-hover))}.table-icon-btn{border-radius:6px;gap:0;width:32px;min-width:32px;height:32px;padding:0}.table-icon-btn.table-action-btn-active{position:relative}.table-icon-btn.table-action-btn-active:after{content:"";background:var(--accent);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-btn.table-action-btn-failover-active:after{content:"";background:var(--info);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-svg{flex-shrink:0;width:14px;height:14px}.model-editor{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:16px;padding:24px}.alias-kind-badge{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--accent);letter-spacing:.2px;text-transform:uppercase;border-color:color-mix(in srgb, var(--accent) 55%, var(--border));border-radius:999px;justify-content:center;align-items:center;gap:4px;padding:0 10px;font-size:11px;font-weight:600;display:inline-flex}.form h3{font-size:20px;font-weight:700}.form-kicker,.form-hint{color:var(--text-muted);font-size:13px}.alias-actions-cell{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.model-list-actions{white-space:nowrap;flex-wrap:nowrap}.model-list-actions .table-icon-btn{flex:0 0 32px}.model-list-actions .alias-toggle{flex:none}.alias-toggle{border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-family:inherit;font-size:12px;transition:all .15s;display:inline-flex}.alias-toggle:hover:not(:disabled){background:var(--bg-surface-hover)}.alias-toggle:disabled{opacity:.45;cursor:default}.alias-toggle-track{background:color-mix(in srgb, var(--border) 80%, var(--bg));border-radius:6px;width:34px;height:18px;transition:background .15s;position:relative}.alias-toggle-thumb{background:var(--text-muted);border-radius:6px;width:16px;height:16px;transition:transform .15s,background .15s;position:absolute;top:1px;left:2px}.alias-toggle.enabled{border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.alias-toggle.enabled .alias-toggle-track{background:color-mix(in srgb, var(--success) 55%, var(--bg))}.alias-toggle.enabled .alias-toggle-thumb{background:#fff;transform:translate(14px)}.alias-toggle.restricted{border-color:color-mix(in srgb, var(--accent) 50%, var(--border));color:color-mix(in srgb, var(--accent) 70%, var(--text))}.alias-toggle.restricted .alias-toggle-track{background:color-mix(in srgb, var(--accent) 55%, var(--bg))}.editor-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:20px;display:flex}.form{flex-direction:column;gap:16px;display:flex}.auth-key-editor{background:color-mix(in srgb, var(--bg-surface) 82%, var(--bg) 18%)}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.form-field{flex-direction:column;gap:8px;display:flex}.form-field-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);font-size:12px;font-weight:600;display:inline-block}.vm-target-row{align-items:center;gap:8px;display:flex}.vm-target-row .vm-target-model{flex:auto;min-width:0}.vm-target-row .vm-target-weight{flex:0 0 88px;width:88px}.vm-status-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.vm-status-row .vm-status-toggle{margin-left:auto}.form-error{border:1px solid color-mix(in srgb, var(--danger) 42%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface));color:var(--danger);overflow-wrap:anywhere;margin:0;padding:10px 12px;font-size:13px;font-weight:600;line-height:1.4}.form-error:empty{display:none}.form-field-error{color:var(--danger);overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:1.4}.form-field-required{color:var(--danger);margin-left:3px}:is(input,textarea,select)[aria-invalid=true]{border-color:color-mix(in srgb, var(--danger) 60%, var(--border))}:is(input,textarea,select)[aria-invalid=true]:focus{border-color:var(--danger)}textarea{resize:vertical;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:60px;color:var(--text);outline:none;padding:10px 12px;font-family:inherit;font-size:13px}textarea:focus{border-color:var(--accent)}.form-input{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:38px;color:var(--text);outline:none;padding:8px 10px;font-family:inherit;font-size:13px}.form-input:focus{border-color:var(--accent)}.form-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.failover-target-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.data-table tr.alias-row.is-valid td{background:var(--alias-row-valid-bg)}.data-table tr.alias-row.is-valid:hover td{background:var(--alias-row-valid-bg-hover)}.data-table tr.alias-row:not(.is-valid) td{background:color-mix(in srgb, var(--accent) 10%, var(--bg-surface))}.data-table tr.alias-row:not(.is-valid):hover td{background:color-mix(in srgb, var(--accent) 16%, var(--bg-surface-hover))}.data-table tr.alias-row.is-disabled td{background:var(--bg-surface);opacity:.58}.data-table tr.alias-row.is-disabled:hover td{background:var(--bg-surface-hover);opacity:.72}.data-table tr.model-access-disabled-row td{background:color-mix(in srgb, var(--danger) 6%, var(--bg-surface))}.data-table tr.model-access-disabled-row:hover td{background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface-hover))}.workflow-section-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-section-head h4{font-size:14px;font-weight:700}.workflow-preview{flex-direction:column;gap:12px;display:flex}.workflow-feature-toggles{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.workflow-feature-toggle{border:1px solid var(--border);background:var(--bg);border-radius:10px;align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:500;display:flex}.workflow-feature-toggle input{width:16px;height:16px}.model-chart-section{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:24px}.model-chart-section h3{margin:0;font-size:16px;font-weight:600}.model-chart-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;display:flex}.bar-chart-wrap{width:100%;height:180px;position:relative}.form-select,.usage-log-select{appearance:none;background-color:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 17px),calc(100% - 12px);background-repeat:no-repeat;background-size:5px 5px;outline:none;min-width:140px;padding:8px 34px 8px 12px;font-family:inherit;font-size:13px}.form-select:disabled,.usage-log-select:disabled{cursor:not-allowed;opacity:.6}.form-select:focus,.usage-log-select:focus{border-color:var(--accent)}.form-select{width:100%;min-width:0}.usage-label-chips{flex-wrap:wrap;gap:4px;max-width:280px;display:inline-flex}.usage-label-chip{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg));min-height:20px;color:var(--text);white-space:nowrap;cursor:pointer;border-radius:999px;align-items:center;padding:1px 9px;font-family:inherit;font-size:11px;font-style:normal;font-weight:600;line-height:1.4;transition:background .15s,border-color .15s;display:inline-flex}.usage-label-chip:hover{background:color-mix(in srgb, var(--label-color,var(--accent)) 26%, var(--bg))}.usage-label-chip.active{background:color-mix(in srgb, var(--label-color,var(--accent)) 32%, var(--bg));border-color:var(--label-color,var(--accent));box-shadow:0 0 0 1px color-mix(in srgb, var(--label-color,var(--accent)) 55%, transparent)}@keyframes audit-live-summary-stripe-blink{0%,to{opacity:.9}50%{opacity:.28}}.audit-status-badge{border:1px solid var(--border);letter-spacing:.2px;background:var(--bg-surface);border-radius:999px;justify-content:center;align-items:center;min-width:46px;height:24px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.audit-status-badge.status-success{color:var(--success);border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.audit-status-badge.status-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.audit-status-badge.status-error{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.audit-status-badge.status-neutral{color:var(--text-muted)}.audit-status-badge.status-unknown{color:var(--text-muted);border-color:color-mix(in srgb, var(--border) 75%, transparent)}.audit-pane{border:1px solid var(--border);background:var(--bg);border-top:0;border-radius:0 0 8px 8px;min-width:0;padding:12px}.audit-pane h5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:11px;font-weight:600}.audit-prompt-cache-pill{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);min-height:20px;color:var(--prompt-cache-color);letter-spacing:.02em;text-transform:none;border-radius:999px;align-items:center;padding:2px 8px;font-size:11px;font-weight:700;display:inline-flex}.audit-prompt-cache-highlight{color:var(--prompt-cache-color);font-weight:700}.audit-audio{white-space:normal;flex-direction:column;gap:8px;display:flex}.audit-audio-player{width:100%;max-width:420px;height:36px}.audit-audio-meta{color:var(--text-muted);font-size:12px}.audit-audio-empty{align-items:flex-start;padding:4px 0}.audit-audio-icon{font-size:20px;line-height:1}.audit-audio-note{color:var(--text-muted);font-size:12px}.audit-audio-metadata{flex-direction:column;gap:2px;margin-top:4px;font-size:12px;display:flex}.audit-audio-meta-row{gap:8px;display:flex}.audit-audio-meta-key{color:var(--text-muted);min-width:120px}.conversation-body-highlight{border-left:2px solid color-mix(in srgb, var(--accent) 70%, var(--border));background:color-mix(in srgb, var(--accent) 10%, transparent);cursor:pointer;line-height:inherit;border-radius:2px;margin:0 0 0 -2px;padding:0 0 0 2px;display:inline}.conversation-body-highlight:hover{background:color-mix(in srgb, var(--accent) 18%, transparent)}.conversation-body-highlight.conversation-system{border-left-color:color-mix(in srgb, var(--warning) 70%, var(--border));background:color-mix(in srgb, var(--warning) 10%, transparent)}.conversation-body-highlight.conversation-user{border-left-color:color-mix(in srgb, var(--accent) 75%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent)}.conversation-body-highlight.conversation-assistant{border-left-color:color-mix(in srgb, var(--success) 65%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.conversation-drawer{background:var(--bg-surface);border-left:1px solid var(--border);z-index:60;flex-direction:column;width:min(560px,100vw);transition:transform .2s ease-out;display:flex;position:fixed;top:0;bottom:0;right:0;transform:translate(100%);box-shadow:-16px 0 40px #0003}.conversation-drawer.open{transform:translate(0)}body.conversation-drawer-open{overflow:hidden}#interactions-drawer-content{flex:1;min-height:0;overflow-y:auto}.pagination{justify-content:space-between;align-items:center;padding:12px 0 0;display:flex}.btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 16px;font-family:inherit;font-size:13px;transition:all .15s}.btn:hover:not(:disabled){background:var(--bg-surface-hover)}.btn-primary{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, #000 10%);color:#fff;font-weight:600;box-shadow:0 10px 22px #3b82f62e}.btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 90%, #fff 10%);border-color:color-mix(in srgb, var(--accent) 78%, #000 12%)}.btn-danger-outline{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:0 0;font-weight:600}.btn-danger-outline:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 75%, var(--border))}.btn-danger{color:#fff;border-color:color-mix(in srgb, var(--danger) 76%, #000 12%);background:var(--danger);box-shadow:0 10px 22px color-mix(in srgb, var(--danger) 20%, transparent);font-weight:600}.btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 90%, #fff 10%);border-color:color-mix(in srgb, var(--danger) 82%, #000 14%)}.btn-with-icon{justify-content:center;align-items:center;gap:8px;display:inline-flex}.btn-with-icon .table-icon-svg{width:16px;height:16px}.btn:disabled{opacity:.4;cursor:default}.settings-panel{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.inline-help-section{flex-direction:column;gap:2px;display:flex}.inline-help-title-row{align-items:center;gap:10px;display:inline-flex}.inline-help-title-row h2,.inline-help-title-row h3{margin-bottom:0}.inline-help-title-row h2:empty,.inline-help-title-row h3:empty{display:none}.inline-help-toggle{border:1px solid color-mix(in srgb, var(--accent) 28%, var(--border));width:16px;height:16px;color:var(--accent);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:color .18s,border-color .18s;display:inline-flex;position:relative}.inline-help-toggle:before{content:"";pointer-events:auto;background:0 0;width:32px;height:32px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.inline-help-toggle:hover{border-color:color-mix(in srgb, var(--accent) 48%, var(--border));color:var(--text);background:0 0}.inline-help-toggle:active{background:0 0}.inline-help-toggle:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.inline-help-toggle-icon{justify-content:center;align-items:center;width:100%;height:100%;padding-bottom:1px;font-size:13px;font-weight:700;line-height:1;transition:transform .52s cubic-bezier(.22,.72,.12,1);display:inline-flex;transform:rotate(0)}.inline-help-copy{max-width:780px;color:var(--text-muted);margin-top:2px;font-size:14px}.settings-select{width:100%}.settings-refresh-section{border-top:1px solid var(--border);justify-items:start;gap:12px;margin-top:24px;padding-top:22px;display:grid}.settings-refresh-section h3{font-size:18px}.settings-refresh-section p{max-width:720px;color:var(--text-muted);font-size:14px;line-height:1.55}.budget-list{gap:10px;padding:10px 0;display:grid}.budget-row{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:minmax(0,1fr);align-items:center;gap:16px;padding:12px 14px;display:grid}.budget-row-main{min-width:0}.budget-row-head{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.budget-scope-value{width:fit-content;max-width:100%;min-height:24px;color:var(--text);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;justify-self:start;align-items:center;gap:5px;padding:2px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;display:inline-flex;overflow:hidden}.budget-user-path{border:1px solid color-mix(in srgb, var(--accent) 32%, var(--border));background:color-mix(in srgb, var(--accent) 9%, var(--bg))}.budget-label{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.budget-scope-icon{stroke-width:2.2px;opacity:.85;flex:0 0 12px;width:12px;height:12px}.budget-row-meta{min-width:0;color:var(--text-muted);align-items:center;gap:8px;font-size:12px;display:inline-flex}.budget-source{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:999px;padding:2px 7px;font-size:11px}.budget-row-period{justify-content:center;min-width:0;display:flex}.budget-row-controls{justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.budget-bars{gap:6px;margin-top:10px;display:grid}.budget-bar-line{grid-template-columns:118px minmax(0,1fr);align-items:center;gap:10px;display:grid}.budget-bar-label{color:var(--text-muted);justify-content:space-between;align-items:center;gap:6px;font-size:11px;line-height:1;display:flex}.budget-bar-percent{font-weight:700}.budget-bar-track{background:color-mix(in srgb, var(--border) 75%, var(--bg));border-radius:999px;height:16px;position:relative;overflow:hidden}.budget-bar-fill{border-radius:inherit;min-width:0;height:100%;transition:width .2s}.budget-bar-fill-usage{background:color-mix(in srgb, var(--success) 82%, var(--accent))}.budget-bar-fill-danger{background:var(--danger)}.budget-bar-text-row{z-index:1;pointer-events:none;color:var(--text);position:absolute;inset:0}.budget-bar-text{text-overflow:ellipsis;white-space:nowrap;max-width:min(44%,190px);font-size:11px;font-weight:700;line-height:12px;position:absolute;top:50%;overflow:hidden}.budget-bar-text-center{max-width:min(46%,240px);left:50%;transform:translate(-50%,-50%)}.budget-bar-text-end{text-align:right;max-width:min(34%,180px);right:8px;transform:translateY(-50%)}.budget-period-label{border:1px solid var(--border);color:var(--text);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:5px;padding:2px 7px;font-size:11px;font-weight:600;display:inline-flex}.budget-period-icon{stroke-width:2.2px;flex:0 0 12px;width:12px;height:12px}.budget-period-label-monthly{border-color:color-mix(in srgb, #30302c 62%, var(--border));background:color-mix(in srgb, #30302c 12%, var(--bg));color:color-mix(in srgb, #30302c 34%, var(--text) 66%)}.budget-period-label-weekly{border-color:color-mix(in srgb, #68765c 62%, var(--border));background:color-mix(in srgb, #68765c 12%, var(--bg));color:color-mix(in srgb, #68765c 34%, var(--text) 66%)}.budget-period-label-daily{border-color:color-mix(in srgb, #b5652d 62%, var(--border));background:color-mix(in srgb, #b5652d 12%, var(--bg));color:color-mix(in srgb, #b5652d 34%, var(--text) 66%)}.budget-period-label-hourly{border-color:color-mix(in srgb, #783f22 62%, var(--border));background:color-mix(in srgb, #783f22 12%, var(--bg));color:color-mix(in srgb, #783f22 34%, var(--text) 66%)}.budget-period-label-custom{border-style:dashed;border-color:color-mix(in srgb, #bfa584 68%, var(--border));background:color-mix(in srgb, #bfa584 16%, var(--bg));color:color-mix(in srgb, #8b6f4f 34%, var(--text) 66%)}[data-theme=light] .budget-period-label-monthly{color:#30302c}[data-theme=light] .budget-period-label-weekly{color:#68765c}[data-theme=light] .budget-period-label-daily{color:#b5652d}[data-theme=light] .budget-period-label-hourly{color:#783f22}[data-theme=light] .budget-period-label-custom{color:#8b6f4f}@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .budget-period-label-monthly{color:#30302c}:root:not([data-theme=dark]) .budget-period-label-weekly{color:#68765c}:root:not([data-theme=dark]) .budget-period-label-daily{color:#b5652d}:root:not([data-theme=dark]) .budget-period-label-hourly{color:#783f22}:root:not([data-theme=dark]) .budget-period-label-custom{color:#8b6f4f}}.budget-row-actions{flex-flow:wrap;justify-content:flex-end;align-items:center;gap:6px;display:flex}.budget-action-btn{white-space:nowrap;justify-content:center;gap:0;width:28px;min-width:0;height:28px;padding:0;transition:width .18s,border-color .15s,background .15s,color .15s;overflow:hidden}.budget-action-btn:hover,.budget-action-btn:focus-visible{gap:6px;width:82px;padding:0 9px}.budget-action-label{opacity:0;max-width:0;transition:max-width .18s,opacity .12s;overflow:hidden}.budget-action-btn:hover .budget-action-label,.budget-action-btn:focus-visible .budget-action-label{opacity:1;max-width:58px}.budget-action-btn-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.budget-action-icon{flex:0 0 14px;width:14px;height:14px}.budget-editor{background:color-mix(in srgb, var(--bg-surface) 86%, var(--bg) 14%)}.budget-settings-actions{flex-wrap:wrap;gap:10px;display:flex}.budget-reset-dialog{max-width:460px}.form-action-icon{flex:0 0 16px;width:16px;height:16px}.settings-refresh-alert{margin-top:16px;margin-bottom:0}@media (width<=768px){.badge{display:none}.content{width:100%;margin:0 auto;padding:20px}.auth-dialog{padding:18px}.auth-dialog-actions{flex-direction:column-reverse}.auth-dialog-actions .btn{width:100%}.cards{grid-template-columns:repeat(2,1fr)}.page-header{flex-wrap:wrap;gap:12px}.page-header h2{width:100%}.page-header-controls{flex-wrap:wrap;justify-content:space-between;width:100%}.page-with-sticky-date{grid-template-columns:minmax(0,1fr)}.page-with-sticky-date>.date-range-page-header,.page-with-sticky-date>.sticky-date-range{grid-column:1}.page-with-sticky-date>.date-range-page-header{margin-bottom:12px}.page-with-sticky-date>.sticky-date-range{width:100%;margin-bottom:24px;top:10px}.sticky-date-range .date-picker-trigger{justify-content:space-between;width:100%}.usage-log-select{min-width:0}.budget-row{grid-template-columns:1fr}.budget-row-controls{flex-wrap:wrap}.budget-bar-line{grid-template-columns:1fr;gap:5px}.form-grid,.workflow-feature-toggles{grid-template-columns:1fr}.workflow-section-head{flex-direction:column;align-items:flex-start}.table-toolbar{flex-direction:column;align-items:stretch}.table-toolbar-actions{justify-content:stretch;margin-left:0}.table-toolbar-actions .btn{width:100%}.model-editor{padding:16px}.alias-actions-cell,.editor-header{flex-direction:column;align-items:flex-start}.alias-actions-cell .table-action-btn,.editor-header .table-action-btn{width:100%}.alias-actions-cell .table-icon-btn,.editor-header .table-icon-btn{width:36px}.model-list-actions{flex-flow:row;align-items:center}.model-list-actions .table-action-btn{width:auto}.model-list-actions .table-icon-btn{flex-basis:32px;width:32px}.model-editor .editor-header{flex-direction:row;align-items:flex-start}.model-editor .editor-header>:first-child{flex:1;min-width:0}.model-editor .editor-header .dialog-close-btn{flex:0 0 32px;align-self:flex-start;width:32px;min-width:32px}.conversation-drawer{width:100%}.settings-panel{padding:18px}.budget-settings-actions,.budget-settings-actions .btn{width:100%}}.workflow-conn{background:color-mix(in srgb, var(--accent) 44%, var(--border));flex:1 1 0;width:auto;min-width:13px;height:2px;position:relative}.workflow-conn:after{content:"";background:color-mix(in srgb, var(--accent) 44%, var(--border));clip-path:polygon(0 0,100% 50%,0 100%);width:7px;height:9px;position:absolute;top:50%;right:-1px;transform:translateY(-50%)}.workflow-node{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-surface);text-align:center;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:4px;min-width:72px;padding:8px 12px;display:flex}.auth-key-description{color:var(--text-muted);max-width:220px;font-size:13px}.auth-key-status-badge{border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.auth-key-status-active{background:color-mix(in srgb, var(--success) 12%, var(--bg));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));color:var(--success)}.auth-key-status-inactive{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border:1px solid color-mix(in srgb, var(--danger) 30%, var(--border));color:var(--danger)}.mcp-server-advanced{border:1px solid var(--border);border-radius:var(--radius);background:color-mix(in srgb, var(--bg-surface) 72%, var(--bg) 28%);overflow:hidden}.mcp-server-advanced>summary{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;list-style:none;display:flex}.mcp-server-advanced>summary::-webkit-details-marker{display:none}.mcp-server-advanced>summary:after{border-right:2px solid var(--text-muted);border-bottom:2px solid var(--text-muted);content:"";flex:none;width:7px;height:7px;transition:transform .15s;transform:rotate(45deg)}.mcp-server-advanced[open]>summary:after{transform:rotate(225deg)}.mcp-server-advanced-summary-copy{flex-direction:column;gap:2px;min-width:0;display:flex}.mcp-server-advanced-title{font-size:13px;font-weight:600}.mcp-server-advanced-fields{border-top:1px solid var(--border);flex-direction:column;gap:16px;padding:14px;display:flex}.copy-feedback-btn{align-items:center;gap:6px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.rate-limit-pressure-row{background-image:linear-gradient(to right, color-mix(in srgb, var(--success) 16%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-high{background-image:linear-gradient(to right, color-mix(in srgb, var(--warning) 20%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-full{background-image:linear-gradient(to right, color-mix(in srgb, var(--danger) 22%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.table-icon-btn.rate-limit-gauge-inherited{color:var(--accent-strong,var(--accent));background:linear-gradient(to right, color-mix(in srgb, var(--accent) 22%, var(--bg)) 50%, var(--bg) 50%);border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.auth-dialog-input-icon{width:16px;height:16px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.auth-dialog-input-shell:focus-within .auth-dialog-input-icon{color:var(--accent)}.auth-dialog-submit-icon{flex:0 0 16px;width:16px;height:16px}.nav-icon{flex:0 0 18px;width:18px;height:18px}.api-key-open-icon{flex:0 0 15px;width:15px;height:15px}.theme-icon{flex:0 0 14px;width:14px;height:14px}.theme-toggle-mobile .theme-icon{flex-basis:16px;width:16px;height:16px}@media (width<=768px){.sidebar-footer .api-key-open-icon{flex-basis:16px;width:16px;height:16px}}.failover-drafts-loading{min-height:96px}.models-loading-state{top:16px;left:var(--sidebar-width);z-index:110;pointer-events:none;--loading-state-min-height:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-surface);width:fit-content;box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);margin:0 auto;padding:10px 14px;position:fixed;right:0}@media (width<=768px){.models-loading-state{left:60px}}.sidebar.sidebar-collapsed~.content .models-loading-state{left:60px}.alias-create-icon{flex:0 0 16px;width:16px;height:16px}.pricing-override-remove-row{margin-bottom:1px}@media (width<=768px){.pricing-override-remove-row{margin-bottom:0}}.pricing-recalculate-dialog{max-width:480px}.settings-refresh-btn.is-refreshing .settings-refresh-icon{transform-origin:50%;animation:.8s linear infinite loading-spin}.cost-source-icon{width:14px;height:14px;color:var(--success);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.cache-savings-icon{width:14px;height:14px;color:var(--accent);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.theme-toggle.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;margin-bottom:10px;padding:2px;display:inline-flex}.theme-btn.svelte-1keql7b{width:28px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:flex}.theme-btn.svelte-1keql7b:hover{color:var(--text)}.theme-btn.active.svelte-1keql7b{background:var(--accent);color:#fff}.theme-btn.svelte-1keql7b:focus-visible,.theme-toggle-mobile.svelte-1keql7b:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.theme-toggle-mobile.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);width:36px;height:36px;color:var(--text-muted);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:none}.theme-toggle-mobile.svelte-1keql7b:hover{color:var(--text)}.theme-toggle.is-compact.svelte-1keql7b{display:none}.theme-toggle-mobile.is-compact.svelte-1keql7b{margin:0 auto;display:flex}@media (width<=768px){.theme-toggle.svelte-1keql7b{display:none}.theme-toggle-mobile.svelte-1keql7b{margin:0 auto;display:flex}}.sidebar.svelte-1nwtzae{flex:0 0 var(--sidebar-width);width:var(--sidebar-width);background:var(--bg-surface);border-right:1px solid var(--border);-webkit-overflow-scrolling:touch;z-index:10;flex-direction:column;max-height:100vh;transition:flex-basis .2s,width .2s;display:flex;position:sticky;top:0;overflow-y:auto}.sidebar-header.svelte-1nwtzae{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:20px;display:flex}.sidebar-logo.svelte-1nwtzae{width:28px;height:28px;color:var(--accent);flex-shrink:0}.sidebar-logo.svelte-1nwtzae svg{width:100%;height:100%}.sidebar-header.svelte-1nwtzae h1{letter-spacing:-.3px;font-size:18px;font-weight:700}.sidebar-nav.svelte-1nwtzae{flex-direction:column;flex:1;gap:4px;padding:12px;display:flex}.nav-item.svelte-1nwtzae{border-radius:var(--radius);color:var(--text-muted);align-items:center;gap:10px;padding:8px 12px;font-size:14px;font-weight:500;text-decoration:none;transition:all .15s;display:flex}.nav-item.svelte-1nwtzae:hover{background:var(--bg-surface-hover);color:var(--text)}.nav-item.active.svelte-1nwtzae{background:var(--accent);color:#fff}.sidebar-footer.svelte-1nwtzae{border-top:1px solid var(--border);padding:16px}.api-key-section.svelte-1nwtzae{gap:8px;display:grid}.api-key-open-btn.svelte-1nwtzae{border:1px solid var(--accent);border-radius:var(--radius);width:100%;color:var(--accent);cursor:pointer;background:0 0;justify-content:center;align-items:center;gap:8px;padding:8px 10px;font-family:inherit;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.api-key-open-btn.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);border-color:color-mix(in srgb, var(--accent) 78%, var(--text));color:color-mix(in srgb, var(--accent) 78%, var(--text))}.api-key-open-btn.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.sidebar-toggle.svelte-1nwtzae{cursor:w-resize;z-index:11;background:0 0;border:none;flex:0 0 6px;width:6px;height:100vh;padding:0;transition:background .15s;position:sticky;top:0}.sidebar-toggle.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}.sidebar-toggle.collapsed.svelte-1nwtzae{cursor:e-resize}.sidebar-toggle.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.sidebar.sidebar-collapsed.svelte-1nwtzae{flex-basis:60px;width:60px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae){justify-content:center;padding:16px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae) h1,.sidebar.sidebar-collapsed.svelte-1nwtzae .badge{display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-item:where(.svelte-1nwtzae) span{display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae){padding:8px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae){display:none}@media (width<=768px){.sidebar.svelte-1nwtzae{flex-basis:60px;width:60px}.sidebar-header.svelte-1nwtzae{justify-content:center;padding:16px}.sidebar-header.svelte-1nwtzae h1{display:none}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae) span{display:none}.sidebar-footer.svelte-1nwtzae{gap:8px;padding:8px;display:grid}.sidebar-footer.svelte-1nwtzae .api-key-section:where(.svelte-1nwtzae),.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae){display:grid}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae){justify-self:center;width:36px;height:36px;min-height:36px;padding:0}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae) span,.sidebar-toggle.svelte-1nwtzae{display:none}}.dialog-close-btn.svelte-11l1bb5{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.dialog-close-btn.svelte-11l1bb5:hover{color:var(--text);background:var(--bg-surface-hover)}.dialog-close-btn.svelte-11l1bb5:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-backdrop.svelte-17e0w4c,.editor-modal-backdrop.svelte-17e0w4c{z-index:80;background:#0000007a;position:fixed;inset:0}.auth-dialog-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.editor-modal-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0;overflow-y:auto}.editor-modal-shell.svelte-17e0w4c>*{overscroll-behavior:contain;width:min(760px,100%);max-height:min(100vh - 40px,960px);margin:0;overflow:auto;box-shadow:0 24px 70px #00000061}@media (width<=768px){.auth-dialog-shell.svelte-17e0w4c,.editor-modal-shell.svelte-17e0w4c{align-items:end;padding:12px}.editor-modal-shell.svelte-17e0w4c>*{max-height:calc(100vh - 24px)}}.auth-dialog-input-shell.svelte-1dsu6u0{position:relative}.auth-dialog-input.svelte-1dsu6u0{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:11px 12px 11px 38px;font-family:inherit;font-size:14px}.auth-dialog-input.svelte-1dsu6u0:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent)}.flash-region.svelte-1i257xg{top:16px;left:var(--sidebar-width);z-index:120;pointer-events:none;flex-direction:column;align-items:center;gap:10px;display:flex;position:fixed;right:0}.sidebar.sidebar-collapsed~.flash-region.svelte-1i257xg{left:60px}@media (width<=768px){.flash-region.svelte-1i257xg{left:60px}}.flash-toast.svelte-1i257xg{border-radius:var(--radius);pointer-events:auto;align-items:flex-start;gap:10px;width:max-content;max-width:min(480px,100% - 32px);padding:12px 12px 12px 16px;font-size:14px;animation:.9s ease-out svelte-1i257xg-flash-toast-glow;display:flex;box-shadow:0 10px 30px #00000059}@keyframes svelte-1i257xg-flash-toast-glow{0%{box-shadow:0 0 0 4px color-mix(in srgb, currentColor 45%, transparent), 0 10px 30px #00000059}to{box-shadow:0 0 0 4px #0000,0 10px 30px #00000059}}@media (prefers-reduced-motion:reduce){.flash-toast.svelte-1i257xg{animation:none}}.flash-toast-success.svelte-1i257xg{background:color-mix(in srgb, var(--success) 14%, var(--bg-surface));color:var(--success);border:1px solid #34d39959}.flash-toast-error.svelte-1i257xg{background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--warning);border:1px solid #f59e0b66}.flash-toast-text.svelte-1i257xg{overflow-wrap:anywhere;flex:1;min-width:0}.flash-toast-dismiss.svelte-1i257xg{color:inherit;cursor:pointer;opacity:.7;background:0 0;border:0;flex-shrink:0;padding:0 2px;font-size:18px;line-height:1}.flash-toast-dismiss.svelte-1i257xg:hover{opacity:1}.demo-mode-banner.svelte-1s3mcn8{border:1px solid color-mix(in srgb, var(--warning) 55%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--text);box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;margin-bottom:24px;padding:12px 16px;display:grid}.demo-mode-banner-icon.svelte-1s3mcn8{width:20px;height:20px;color:var(--warning);flex:0 0 20px}.demo-mode-banner-copy.svelte-1s3mcn8{align-items:baseline;gap:8px;min-width:0;font-size:13px;display:flex}.demo-mode-banner.svelte-1s3mcn8 strong{color:var(--warning);letter-spacing:.06em;text-transform:uppercase;flex-shrink:0;font-size:12px}.demo-mode-banner-links.svelte-1s3mcn8{justify-content:flex-end;align-items:center;gap:6px;display:flex}.demo-mode-banner-links.svelte-1s3mcn8 a{border:1px solid color-mix(in srgb, var(--warning) 42%, var(--border));border-radius:var(--radius);min-height:28px;color:var(--text);white-space:nowrap;align-items:center;padding:4px 8px;font-size:12px;font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.demo-mode-banner-links.svelte-1s3mcn8 a:hover{border-color:var(--warning);background:color-mix(in srgb, var(--warning) 16%, transparent);color:var(--text)}.demo-mode-banner-links.svelte-1s3mcn8 a:focus-visible{outline:2px solid color-mix(in srgb, var(--warning) 42%, transparent);outline-offset:2px}@media (width<=768px){.demo-mode-banner.svelte-1s3mcn8{grid-template-columns:auto minmax(0,1fr);align-items:flex-start}.demo-mode-banner-copy.svelte-1s3mcn8{gap:2px;display:grid}.demo-mode-banner-links.svelte-1s3mcn8{flex-wrap:wrap;grid-column:2;justify-content:flex-start}}.auth-banner.svelte-1c5yh36{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.dp-calendar.svelte-g7ga4u{flex-shrink:0;width:224px}.dp-cal-header.svelte-g7ga4u{justify-content:space-between;align-items:center;margin-bottom:8px;padding:0 4px;display:flex}.dp-cal-title.svelte-g7ga4u{font-size:13px;font-weight:600}.dp-nav-btn.svelte-g7ga4u{width:28px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:flex}.dp-nav-btn.svelte-g7ga4u:hover{background:var(--bg-surface-hover);color:var(--text)}.dp-nav-btn.svelte-g7ga4u:disabled{opacity:.3;cursor:default;pointer-events:none}.dp-nav-prev-mobile.svelte-g7ga4u{display:none}.dp-weekdays.svelte-g7ga4u{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:4px;display:grid}.dp-weekdays.svelte-g7ga4u span:where(.svelte-g7ga4u){color:var(--text-muted);padding:4px 0;font-size:11px;font-weight:600}.dp-days.svelte-g7ga4u{grid-template-columns:repeat(7,1fr);gap:1px;display:grid}.dp-day.svelte-g7ga4u{width:32px;height:32px;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-family:inherit;font-size:12px;transition:all .1s;display:flex}.dp-day.svelte-g7ga4u:hover:not(.disabled):not(.other-month){background:var(--bg-surface-hover)}.dp-day.other-month.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default}.dp-day.today.svelte-g7ga4u{color:var(--accent);box-shadow:inset 0 0 0 1.5px var(--accent);font-weight:700}.dp-day.in-range.svelte-g7ga4u{background:color-mix(in srgb, var(--accent) 15%, transparent);border-radius:0}.dp-day.range-start.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:6px 0 0 6px;font-weight:600}.dp-day.range-end.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:0 6px 6px 0;font-weight:600}.dp-day.range-start.range-end.svelte-g7ga4u{border-radius:6px}.dp-day.range-start.today.svelte-g7ga4u,.dp-day.range-end.today.svelte-g7ga4u{box-shadow:none}.dp-day.disabled.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default;pointer-events:none}@media (width<=768px){.dp-nav-prev-mobile.svelte-g7ga4u{display:flex}}.date-picker.svelte-ax7ma4{position:relative}.date-picker-trigger.svelte-ax7ma4{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;white-space:nowrap;align-items:center;gap:8px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s;display:inline-flex}.date-picker-trigger.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.date-picker-trigger.svelte-ax7ma4 svg:where(.svelte-ax7ma4){color:var(--text-muted);flex-shrink:0}.date-picker-chevron.svelte-ax7ma4{transition:transform .15s}.date-picker-chevron.open.svelte-ax7ma4{transform:rotate(180deg)}.date-picker-dropdown.svelte-ax7ma4{z-index:100;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 8px 24px #00000040}.date-picker-presets.svelte-ax7ma4{border-right:1px solid var(--border);flex-direction:column;gap:2px;min-width:140px;padding:8px;display:flex}.preset-btn.svelte-ax7ma4{color:var(--text);text-align:left;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s}.preset-btn.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.preset-btn.active.svelte-ax7ma4{background:var(--accent);color:#fff}.date-picker-calendars.svelte-ax7ma4{flex-wrap:nowrap;gap:16px;padding:12px;display:flex}.dp-cursor-hint.svelte-ax7ma4{pointer-events:none;z-index:101;background:var(--bg-surface);color:var(--text);border:1px solid var(--accent);white-space:nowrap;border-radius:4px;align-items:center;gap:5px;padding:3px 8px;font-size:11px;font-weight:500;display:flex;position:fixed;transform:translate(12px,-50%)}.dp-cursor-hint.svelte-ax7ma4 svg:where(.svelte-ax7ma4){width:12px;height:12px;color:var(--accent);flex-shrink:0}@media (width<=768px){.date-picker-dropdown.svelte-ax7ma4{border-radius:var(--radius) var(--radius) 0 0;flex-direction:column;max-height:80vh;position:fixed;inset:auto 0 0;overflow-y:auto}.date-picker-presets.svelte-ax7ma4{-webkit-overflow-scrolling:touch;border-right:none;border-bottom:1px solid var(--border);flex-flow:row;min-width:0;overflow-x:auto}.date-picker-calendars.svelte-ax7ma4{justify-content:center}.date-picker-calendars.svelte-ax7ma4>.dp-calendar:first-child{display:none}}.segmented-control.svelte-92fh5i{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.segmented-btn.svelte-92fh5i{color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:5px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:flex}.segmented-btn.svelte-92fh5i:hover{color:var(--text)}.segmented-btn.active.svelte-92fh5i{background:var(--accent);color:#fff}@media (width<=768px){.segmented-btn.svelte-92fh5i{padding:4px 8px;font-size:11px}}.live-tokens.svelte-17qr2ta{margin-bottom:28px}.live-tokens-heading.svelte-17qr2ta{flex-direction:column;gap:2px;display:flex}.live-tokens-subtitle.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.live-tokens-legend.svelte-17qr2ta{flex-wrap:wrap;gap:8px 18px;margin-bottom:16px;display:flex}.live-tokens-legend-item.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:7px;font-size:12px;display:inline-flex}.live-tokens-swatch.svelte-17qr2ta{border-radius:2px;flex-shrink:0;width:10px;height:10px}.live-tokens-legend-value.svelte-17qr2ta{color:var(--text);font-weight:600}.live-tokens-empty.svelte-17qr2ta .live-tokens-empty-text:where(.svelte-17qr2ta){color:var(--text-muted);font-size:13px}.provider-status-flag.svelte-6tr9cf{grid-column:span 2}.provider-status-overview-card.svelte-6tr9cf{grid-column:span 1}.provider-status-flag.is-healthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, var(--bg-surface))}.provider-status-flag.is-degraded.svelte-6tr9cf{border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-flag.is-unhealthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface))}.provider-status-value.svelte-6tr9cf{margin-bottom:8px}.provider-status-card-link.svelte-6tr9cf{color:var(--accent-strong,var(--accent));font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:0;padding:0;font-size:13px;font-weight:600}.provider-status-card-link.svelte-6tr9cf:hover{color:var(--text);text-decoration:underline}.provider-status-card-link.svelte-6tr9cf:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:3px;border-radius:4px}.provider-status-card-note.svelte-6tr9cf{color:var(--text-muted);font-size:13px;display:block}@media (width>=720px){.card-wide.svelte-6tr9cf{grid-column:span 2}}.cache-token-value.svelte-6tr9cf{flex-wrap:wrap;align-items:center;gap:6px;line-height:1;display:flex}.cache-token-part.svelte-6tr9cf{align-items:center;display:inline-flex}.cache-token-operator.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;font-size:24px;font-weight:600;line-height:1}.cache-token-marker.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;text-transform:uppercase;margin-left:2px;font-size:14px;font-weight:700}.prompt-cache-gauge.svelte-6tr9cf{width:120px;height:60px;margin:8px auto 0;position:relative;overflow:hidden}.prompt-cache-gauge.svelte-6tr9cf canvas{display:block}.prompt-cache-gauge-value.svelte-6tr9cf{text-align:center;color:var(--text);font-size:18px;font-weight:700;line-height:1;position:absolute;bottom:4px;left:0;right:0}@media (width<=768px){.provider-status-flag.svelte-6tr9cf{grid-column:span 1}}.mcp-servers-flag.svelte-6tr9cf{grid-column:span 1}.cache-meter-header.svelte-1yzecxj{flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:16px;display:flex}.cache-meter-header.svelte-1yzecxj h3{font-size:16px;font-weight:600}.cache-meter-subtitle.svelte-1yzecxj{color:var(--text-muted);font-size:13px}.cache-meter-bar.svelte-1yzecxj{background:var(--bg-surface-hover);border-radius:6px;width:100%;height:28px;display:flex;overflow:hidden}.cache-meter-segment.svelte-1yzecxj{justify-content:center;align-items:center;min-width:3px;height:100%;transition:width .3s;display:flex;overflow:hidden}.cache-meter-segment-label.svelte-1yzecxj{color:#fff;white-space:nowrap;text-shadow:0 1px 2px #00000073;font-size:12px;font-weight:600;line-height:1}.cache-meter-segment.svelte-1yzecxj+.cache-meter-segment:where(.svelte-1yzecxj){box-shadow:-1px 0 0 var(--bg-surface)}.cache-meter-bar.is-empty.svelte-1yzecxj{background:var(--bg-surface-hover);justify-content:center;align-items:center;height:auto;min-height:28px;padding:6px 12px}.cache-meter-legend.svelte-1yzecxj{flex-wrap:wrap;gap:10px 24px;margin-top:16px;display:flex}.cache-meter-legend-item.svelte-1yzecxj{align-items:center;gap:8px;font-size:13px;display:flex}.cache-meter-swatch.svelte-1yzecxj{border-radius:3px;flex-shrink:0;width:12px;height:12px}.cache-meter-legend-label.svelte-1yzecxj{color:var(--text)}.cache-meter-legend-pct.svelte-1yzecxj{color:var(--text);font-weight:600}.cache-meter-legend-tokens.svelte-1yzecxj{color:var(--text-muted)}.cache-meter-empty.svelte-1yzecxj{color:var(--text-muted);text-align:center;font-size:13px}.spinner.svelte-b54l9o{width:var(--spinner-size);height:var(--spinner-size);border:2px solid var(--border,#80808059);border-top-color:var(--accent,currentColor);border-radius:50%;flex:none;animation:.7s linear infinite svelte-b54l9o-spinner-rotate;display:inline-block}@keyframes svelte-b54l9o-spinner-rotate{to{transform:rotate(360deg)}}.contribution-calendar-section.svelte-3hfxuq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-top:24px;padding:24px}.contribution-calendar-header.svelte-3hfxuq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.contribution-calendar-header.svelte-3hfxuq h3{font-size:16px;font-weight:600}.contribution-calendar-grid-wrapper.svelte-3hfxuq{gap:8px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq{flex-direction:column;gap:2px;padding-top:22px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq span{height:13px;color:var(--text-muted);text-align:right;min-width:28px;font-size:10px;line-height:13px}.contribution-calendar-scroll.svelte-3hfxuq{--contribution-week-size:13px;--contribution-week-gap:2px;flex:1;min-width:0;overflow-x:auto}.contribution-calendar-months.svelte-3hfxuq{grid-auto-columns:var(--contribution-week-size);gap:var(--contribution-week-gap);grid-auto-flow:column;height:16px;margin-bottom:6px;display:grid}.contribution-calendar-month-label.svelte-3hfxuq{color:var(--text-muted);white-space:nowrap;font-size:10px}.contribution-calendar-grid.svelte-3hfxuq{gap:var(--contribution-week-gap);display:flex}.contribution-calendar-week.svelte-3hfxuq{flex-direction:column;gap:2px;display:flex}.contribution-calendar-cell.svelte-3hfxuq{width:var(--contribution-week-size);height:var(--contribution-week-size);background:var(--cal-level-0);border-radius:2px}.contribution-calendar-cell.level-1.svelte-3hfxuq{background:var(--cal-level-1)}.contribution-calendar-cell.level-2.svelte-3hfxuq{background:var(--cal-level-2)}.contribution-calendar-cell.level-3.svelte-3hfxuq{background:var(--cal-level-3)}.contribution-calendar-cell.level-4.svelte-3hfxuq{background:var(--cal-level-4)}.contribution-calendar-cell.level-5.svelte-3hfxuq{background:var(--cal-level-5)}.contribution-calendar-cell.level-6.svelte-3hfxuq{background:var(--cal-level-6)}.contribution-calendar-cell.level-7.svelte-3hfxuq{background:var(--cal-level-7)}.contribution-calendar-cell.level-8.svelte-3hfxuq{background:var(--cal-level-8)}.contribution-calendar-cell.level-9.svelte-3hfxuq{background:var(--cal-level-9)}.contribution-calendar-cell.level-10.svelte-3hfxuq{background:var(--cal-level-10)}.contribution-calendar-cell.empty.svelte-3hfxuq{background:0 0}.contribution-calendar-footer.svelte-3hfxuq{justify-content:space-between;align-items:center;gap:12px;margin-top:12px;display:flex}.contribution-calendar-meta.svelte-3hfxuq{flex-direction:column;gap:4px;display:flex}.contribution-calendar-summary.svelte-3hfxuq{color:var(--text-muted);font-size:12px}.contribution-calendar-legend.svelte-3hfxuq{color:var(--text-muted);align-items:center;gap:4px;font-size:11px;display:flex}.contribution-calendar-legend.svelte-3hfxuq .contribution-calendar-cell:where(.svelte-3hfxuq){cursor:default;width:11px;height:11px}.contribution-calendar-tooltip.svelte-3hfxuq{z-index:200;background:var(--bg-surface);color:var(--text);border:1px solid var(--border);white-space:nowrap;pointer-events:none;border-radius:4px;padding:4px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;position:fixed;transform:translate(-50%);box-shadow:0 4px 12px #0003}@media (width<=768px){.contribution-calendar-day-labels.svelte-3hfxuq{display:none}.contribution-calendar-section.svelte-3hfxuq{padding:16px}.contribution-calendar-footer.svelte-3hfxuq{flex-direction:column;align-items:flex-start}}.inline-help-toggle.is-open.svelte-y40or3{color:var(--text);background:0 0}.inline-help-toggle.is-open.svelte-y40or3 .inline-help-toggle-icon{transform:rotate(540deg)}.audit-stats-section.svelte-14e9yan{margin-top:24px}.audit-stats-header.svelte-14e9yan{align-items:flex-start}.audit-stats-kpis.svelte-14e9yan{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.audit-stats-kpi.svelte-14e9yan{color:var(--text-muted);white-space:nowrap;align-items:center;gap:6px;font-size:12px;display:inline-flex}.audit-stats-kpi-value.svelte-14e9yan{color:var(--text);font-size:13px}.audit-stats-kpi-dot.svelte-14e9yan{border-radius:2px;flex-shrink:0;width:8px;height:8px}.audit-stats-dot-2xx.svelte-14e9yan{background:var(--success)}.audit-stats-dot-4xx.svelte-14e9yan{background:var(--warning)}.audit-stats-dot-5xx.svelte-14e9yan{background:var(--danger)}.provider-status-details.svelte-6y9wjv{opacity:0;grid-template-rows:0fr;transition:grid-template-rows .28s,opacity .22s;display:grid}.provider-status-details.is-expanded.svelte-6y9wjv{opacity:1;grid-template-rows:1fr}.provider-status-details.is-collapsed.svelte-6y9wjv{pointer-events:none}.provider-status-details-inner.svelte-6y9wjv{flex-direction:column;gap:14px;min-height:0;display:flex;overflow:hidden}.provider-status-reason.svelte-6y9wjv{color:var(--text-muted);font-size:13px}.provider-status-error.svelte-6y9wjv{color:var(--danger);overflow-wrap:break-word;font-size:12px}.provider-status-config-label.svelte-6y9wjv{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-config.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;padding-top:12px;display:flex}.provider-status-config-row.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-config-value.svelte-6y9wjv{color:var(--text);overflow-wrap:break-word;font-size:13px;display:block}.provider-status-health.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;margin-bottom:12px;padding-top:12px;display:flex}.provider-status-health-state.svelte-6y9wjv{border:1px solid var(--border);border-radius:999px;align-items:center;padding:1px 8px;font-size:12px;font-weight:600;display:inline-flex}.provider-status-health-state.is-healthy.svelte-6y9wjv{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-health-state.is-degraded.svelte-6y9wjv{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-health-state.is-unhealthy.svelte-6y9wjv{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-health-models.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-health-model.svelte-6y9wjv{color:var(--text);justify-content:space-between;gap:8px;font-size:13px;display:flex}.provider-status-health-model.is-flagged.svelte-6y9wjv{color:var(--danger)}.provider-status-health-model-name.svelte-6y9wjv{overflow-wrap:anywhere}.provider-status-health-model-stats.svelte-6y9wjv{white-space:nowrap;color:var(--text-muted)}.provider-status-health-model.is-flagged.svelte-6y9wjv .provider-status-health-model-stats:where(.svelte-6y9wjv){color:var(--danger);font-weight:700}.provider-status-card.svelte-nopjmh{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:14px;padding:18px;display:flex}.provider-status-card-toggle.svelte-nopjmh{border:0;border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius);color:var(--text-muted);cursor:pointer;background:0 0;justify-content:center;align-items:center;margin:auto -18px -18px;padding:7px 0;transition:background .15s,color .15s;display:flex}.provider-status-card-toggle.svelte-nopjmh:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--text)}.provider-status-card-toggle.svelte-nopjmh:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:-2px}.provider-status-card-toggle.svelte-nopjmh .provider-status-card-toggle-icon{width:16px;height:16px;transition:transform .28s;display:block}.provider-status-card-toggle.is-expanded.svelte-nopjmh .provider-status-card-toggle-icon{transform:rotate(180deg)}.provider-status-card-head.svelte-nopjmh{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.provider-status-name.svelte-nopjmh{letter-spacing:-.02em;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:16px;font-weight:700;display:flex}.provider-doc-help.svelte-nopjmh{align-self:center;text-decoration:none}.provider-status-name-type.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-pill.svelte-nopjmh{border:1px solid var(--border);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;min-height:28px;padding:0 10px;font-size:12px;font-weight:700;display:inline-flex}.provider-status-pill.is-healthy.svelte-nopjmh{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-pill.is-degraded.svelte-nopjmh{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-pill.is-unhealthy.svelte-nopjmh{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-meta.svelte-nopjmh{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.provider-status-meta-item.svelte-nopjmh{background:var(--bg);border:1px solid var(--border);border-radius:6px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.provider-status-meta-label.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-meta-value.svelte-nopjmh{color:var(--text);font-size:14px}@media (width<=768px){.provider-status-meta.svelte-nopjmh{grid-template-columns:1fr}}.provider-status-section-loading.svelte-1kx3uw4{justify-content:center;padding:24px 0;display:flex}.provider-status-section-header.svelte-1kx3uw4{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px;display:flex}.provider-status-toggle.svelte-1kx3uw4{background:var(--bg-surface);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:10px;padding:8px 12px;font-family:inherit;font-size:12px;font-weight:600;transition:background-color .18s,border-color .18s,color .18s;display:inline-flex}.provider-status-toggle.svelte-1kx3uw4:hover{background:var(--bg-surface-hover)}.provider-status-toggle.svelte-1kx3uw4:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.provider-status-toggle-copy.svelte-1kx3uw4{white-space:nowrap}.provider-status-toggle-track.svelte-1kx3uw4{background:color-mix(in srgb, var(--text-muted) 35%, var(--border));border-radius:999px;flex-shrink:0;width:34px;height:20px;transition:background-color .2s;position:relative}.provider-status-toggle-track.is-active.svelte-1kx3uw4{background:color-mix(in srgb, var(--accent) 82%, var(--bg-surface))}.provider-status-toggle-thumb.svelte-1kx3uw4{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .2s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000003d}.provider-status-toggle-track.is-active.svelte-1kx3uw4 .provider-status-toggle-thumb:where(.svelte-1kx3uw4){transform:translate(14px)}.provider-status-grid.svelte-1kx3uw4{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));align-items:start;gap:16px;display:grid}@media (width<=768px){.provider-status-section-header.svelte-1kx3uw4{flex-direction:column;align-items:flex-start}.provider-status-toggle.svelte-1kx3uw4{justify-content:space-between;width:100%}}.filter-input-wrap.svelte-30xz1k{flex:1;width:100%;min-width:min(400px,100%);display:flex;position:relative}.filter-input.svelte-30xz1k{flex:1;width:100%;min-width:0;padding-left:34px}.filter-input-wrap.svelte-30xz1k .filter-input-icon{width:14px;height:14px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.usage-page-filters.svelte-1oi6ywk{flex-wrap:wrap;gap:10px;margin-bottom:20px;display:flex}.usage-page-filters.svelte-1oi6ywk .usage-log-select{flex:0 auto}.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:220px;min-width:180px;max-width:360px}@media (width<=768px){.usage-page-filters.svelte-1oi6ywk .usage-log-select,.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:100%;max-width:none}}.pro-saved-value.svelte-1qiwzdu{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.pro-saved-delta.svelte-1qiwzdu{color:var(--success);letter-spacing:0;font-size:13px;font-weight:600}.usage-breakdown-loading.svelte-1kee4g8{justify-content:center;align-items:center;min-height:120px;display:flex}.chart-view-toggle.svelte-1kee4g8{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.chart-view-btn.svelte-1kee4g8{width:30px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.chart-view-btn.svelte-1kee4g8:hover{color:var(--text)}.chart-view-btn.active.svelte-1kee4g8{background:var(--accent);color:#fff}.chart-view-btn.svelte-1kee4g8 svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}.usage-chart-table-wrapper.svelte-1kee4g8{-webkit-overflow-scrolling:touch;margin-top:0;overflow-x:auto}.usage-chart-data-table.svelte-1kee4g8{min-width:max-content}.usage-chart-data-table.svelte-1kee4g8 th,.usage-chart-data-table.svelte-1kee4g8 td{white-space:nowrap}.pagination-info.svelte-1imew3q{color:var(--text-muted);font-size:13px}.pagination-buttons.svelte-1imew3q{gap:8px;display:flex}.usage-log-loading.svelte-hg4ill{justify-content:center;align-items:center;min-height:120px;display:flex}.usage-log-section.svelte-hg4ill{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.usage-log-section.svelte-hg4ill h3{margin-bottom:16px;font-size:16px;font-weight:600}.usage-log-section.svelte-hg4ill .table-wrapper{overflow-x:auto}.usage-log-toolbar.svelte-hg4ill{gap:12px;margin-bottom:16px;display:grid}.usage-filter-row.svelte-hg4ill{grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;gap:12px;display:grid}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1/-1}.usage-filter-row-options.svelte-hg4ill{grid-template-columns:1fr}.usage-log-checkbox.svelte-hg4ill{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.usage-log-checkbox.svelte-hg4ill input{cursor:pointer;width:16px;height:16px}.usage-ts.svelte-hg4ill{white-space:nowrap;font-size:12px}.usage-log-row-cached.svelte-hg4ill td{opacity:.75;font-style:italic}.usage-log-row-cached.svelte-hg4ill .usage-log-cache-cell:where(.svelte-hg4ill){font-weight:700}.caveat-icon.svelte-hg4ill{color:var(--warning);cursor:help;margin-left:4px;font-size:14px}@media (width<=768px){.usage-log-toolbar.svelte-hg4ill{gap:10px}.usage-filter-row.svelte-hg4ill{grid-template-columns:1fr}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1}.usage-log-table.svelte-hg4ill{display:block;overflow-x:auto}}.usage-sticky-controls.svelte-spwie6{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;display:flex}.usage-charts-grid.svelte-spwie6{flex-wrap:wrap;gap:24px;margin-bottom:24px;display:flex}.usage-charts-grid.svelte-spwie6 .model-chart-section{flex:calc(50% - 24px);min-width:420px;margin-bottom:0}@media (width<=520px){.usage-charts-grid.svelte-spwie6 .model-chart-section{min-width:0}}.loading-state.svelte-hzxv1d{min-height:var(--loading-state-min-height,64px);color:var(--text-muted);justify-content:center;align-items:center;gap:10px;font-size:14px;display:flex}.budget-bar-text-row-on-fill.svelte-1jm56wo{color:#fff;clip-path:inset(0 calc(100% - var(--budget-progress,0%)) 0 0)}.budget-bar-text-start.svelte-1jm56wo{left:8px;transform:translateY(-50%)}.budget-bar-track-period-custom.svelte-1jm56wo .budget-bar-text-row-on-fill:where(.svelte-1jm56wo){color:#3f332a}.budget-override-dialog.svelte-13ryo7h{max-width:460px}.budget-sort-control.svelte-1752fqe{align-items:center;gap:8px}.budget-sort-control.svelte-1752fqe label{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.budget-sort-select.svelte-1752fqe{background-color:var(--bg-surface);min-width:132px}.budget-sort-select.svelte-1752fqe:hover{background-color:var(--bg-surface-hover)}.model-name-cell.svelte-1iynym{flex-direction:column;gap:8px;display:flex}.model-name-primary.svelte-1iynym{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.model-name-secondary.svelte-1iynym{color:var(--text-muted);font-size:12px}.model-redirect-remove-btn.svelte-1iynym{appearance:none;color:var(--danger);cursor:pointer;background:0 0;border:0;margin-left:4px;padding:0;font-size:11px}.model-redirect-remove-btn.svelte-1iynym:hover:not(:disabled){text-decoration:underline}.model-redirect-remove-btn.svelte-1iynym:disabled{opacity:.45;cursor:default}.model-kind-icon.svelte-1iynym{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:var(--bg);width:24px;height:24px;color:var(--accent);border-radius:999px;flex:0 0 24px;justify-content:center;align-items:center;display:inline-flex}.model-kind-icon-svg.svelte-1iynym{width:14px;height:14px}.model-row-actions.svelte-1iynym{text-align:right;width:170px}@media (width<=768px){.model-name-primary.svelte-1iynym{flex-direction:column;align-items:flex-start}}.provider-group-row.svelte-1911hy6 td{background:color-mix(in srgb, var(--accent) 6%, var(--bg));padding-top:12px;padding-bottom:12px}.provider-group-row.svelte-1911hy6:hover td{background:color-mix(in srgb, var(--accent) 8%, var(--bg))}.provider-group-header.svelte-1911hy6{justify-content:space-between;align-items:center;gap:16px;display:flex}.provider-group-meta.svelte-1911hy6{flex-direction:column;gap:4px;min-width:0;display:flex}.provider-group-title.svelte-1911hy6{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.provider-group-type.svelte-1911hy6,.provider-group-count.svelte-1911hy6,.provider-group-summary.svelte-1911hy6{color:var(--text-muted);font-size:12px}@media (width<=768px){.provider-group-header.svelte-1911hy6{flex-direction:column;align-items:flex-start}}.vm-session-affinity-checkbox.svelte-d1j6xw{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.vm-session-affinity-checkbox.svelte-d1j6xw input:where(.svelte-d1j6xw){accent-color:var(--accent);cursor:pointer}.pricing-override-rows.svelte-u8snes{gap:12px;display:grid}.pricing-override-row.svelte-u8snes{grid-template-columns:minmax(220px,1fr) minmax(130px,180px) 32px;align-items:end;gap:12px;display:grid}.pricing-override-row-actions.svelte-u8snes{justify-content:flex-start;display:flex}.pricing-override-tier-note.svelte-u8snes{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:6px;padding:10px 12px;font-size:13px}.pricing-preview.svelte-u8snes{border:1px solid var(--border);border-radius:6px;overflow:hidden}.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:minmax(150px,1fr) minmax(90px,auto) minmax(130px,.8fr);align-items:center;gap:12px;padding:10px 12px;display:grid}.pricing-preview-header.svelte-u8snes{background:var(--bg);color:var(--text-muted);text-transform:uppercase;font-size:12px;font-weight:600}.pricing-preview-row.svelte-u8snes{border-top:1px solid var(--border);font-size:13px}.pricing-preview-row-empty.svelte-u8snes{color:var(--text-muted);grid-template-columns:1fr}@media (width<=768px){.pricing-override-row.svelte-u8snes,.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:1fr}}.failover-drafts-editor.svelte-1n87bip{flex-direction:column;gap:16px;display:flex}.failover-draft-header-actions.svelte-1n87bip{flex:none;align-items:center;gap:10px;display:flex}.failover-draft-counter.svelte-1n87bip{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.failover-draft-toolbar.svelte-1n87bip{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.failover-draft-toolbar.svelte-1n87bip .filter-input-wrap,.failover-draft-toolbar.svelte-1n87bip .filter-input{min-width:0}.failover-draft-toggle-all.svelte-1n87bip{flex:none}.failover-draft-list.svelte-1n87bip{flex-direction:column;gap:8px;max-height:min(52vh,430px);padding-right:4px;display:flex;overflow-y:auto}.failover-draft-row.svelte-1n87bip{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer;grid-template-columns:18px minmax(0,1fr);align-items:start;gap:10px;padding:10px;display:grid}.failover-draft-row.svelte-1n87bip:hover{border-color:color-mix(in srgb, var(--accent) 42%, var(--border));background:var(--bg-surface-hover)}.failover-draft-row.svelte-1n87bip input{width:16px;height:16px;margin-top:2px}.failover-draft-copy.svelte-1n87bip{gap:4px;min-width:0;display:grid}.failover-draft-source.svelte-1n87bip,.failover-draft-targets.svelte-1n87bip{overflow-wrap:anywhere}.failover-draft-targets.svelte-1n87bip{color:var(--text-muted);font-size:12px}.failover-drafts-empty.svelte-1n87bip{align-items:center;min-height:96px;display:flex}.failover-draft-actions.svelte-1n87bip{margin-top:0}.category-tabs.svelte-scpjps{-webkit-overflow-scrolling:touch;align-items:center;gap:4px;margin-bottom:16px;padding-bottom:2px;display:flex;overflow-x:auto}.category-tab.svelte-scpjps{background:var(--bg-surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;white-space:nowrap;border-radius:6px;flex-shrink:0;align-items:center;gap:6px;padding:6px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.category-tab.svelte-scpjps:hover{color:var(--text);background:var(--bg-surface-hover)}.category-tab.active.svelte-scpjps{background:var(--accent);color:#fff;border-color:var(--accent)}.category-tab.svelte-scpjps .tab-count:where(.svelte-scpjps){background:#ffffff26;border-radius:9px;justify-content:center;align-items:center;min-width:20px;height:18px;padding:0 5px;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.category-tab.svelte-scpjps:not(.active) .tab-count:where(.svelte-scpjps){background:var(--bg)}@media (width<=768px){.category-tabs.svelte-scpjps{gap:4px}.category-tab.svelte-scpjps{padding:5px 10px;font-size:12px}}.workflow-pipeline-meta.svelte-1viff7o{border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 86%, transparent);min-width:0;max-width:calc(100% - 28px);color:var(--text-muted);white-space:nowrap;appearance:none;cursor:pointer;text-align:left;border-radius:12px;align-items:center;gap:0;padding:2px 10px;font-size:12px;font-weight:500;line-height:1.2;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex;position:absolute;top:12px;right:14px;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover,.workflow-pipeline-meta.svelte-1viff7o:focus-visible{border-color:color-mix(in srgb, var(--accent) 40%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface));color:color-mix(in srgb, var(--accent) 74%, var(--text))}.workflow-pipeline-meta.svelte-1viff7o:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.workflow-pipeline-meta-label.svelte-1viff7o{flex:none;font-weight:700}.workflow-pipeline-meta-placeholder.svelte-1viff7o{opacity:1;flex:none;max-width:3ch;margin-left:4px;transition:max-width .18s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta-value.svelte-1viff7o{opacity:0;text-overflow:clip;flex:0 auto;max-width:0;margin-left:0;transition:max-width .22s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o){opacity:0;max-width:0;margin-left:0}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o){opacity:1;max-width:42ch;margin-left:4px}.workflow-pipeline-meta-icon.svelte-1viff7o{opacity:0;flex:none;justify-content:center;align-items:center;width:0;height:14px;margin-left:0;line-height:0;transition:width .18s,margin-left .18s,opacity .15s,transform .18s;display:inline-flex;overflow:hidden;transform:translate(4px)translateY(1px)scale(.84)}.workflow-pipeline-meta-icon.svelte-1viff7o svg{width:14px;height:14px}.workflow-pipeline-meta-copied.svelte-1viff7o,.workflow-pipeline-meta-copied.svelte-1viff7o:hover,.workflow-pipeline-meta-copied.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-icon:where(.svelte-1viff7o){opacity:1;width:14px;margin-left:6px;transform:translateY(1px)}.workflow-pipeline-meta-error.svelte-1viff7o,.workflow-pipeline-meta-error.svelte-1viff7o:hover,.workflow-pipeline-meta-error.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 34%, var(--border));color:var(--danger)}.workflow-pipeline.svelte-nbptrg{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg);flex-direction:column;gap:0;margin-bottom:12px;padding:18px 20px 20px;display:flex;position:relative}.workflow-pipeline-has-meta.svelte-nbptrg{padding-top:42px}.workflow-pipeline-row.svelte-nbptrg{align-items:center;width:100%;min-width:0;display:flex;overflow-x:auto}.workflow-node-icon.svelte-nbptrg{border-radius:var(--radius);background:var(--bg);width:28px;height:28px;color:var(--text-muted);justify-content:center;align-items:center;display:flex}.workflow-node-icon.svelte-nbptrg svg{stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.workflow-node-label.svelte-nbptrg{letter-spacing:.03em;color:var(--text);white-space:nowrap;font-size:11px;font-weight:700;line-height:1.2}.workflow-node-sub.svelte-nbptrg{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;max-width:120px;font-size:10px;font-weight:500;line-height:1.2;font-family:var(--font-mono,ui-monospace, monospace);overflow:hidden}.workflow-node-badge.svelte-nbptrg{border-radius:var(--radius);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);align-items:center;padding:2px 7px;font-size:9px;font-weight:800;line-height:1.5;display:inline-flex}.workflow-node-endpoint.svelte-nbptrg{border-radius:var(--radius);border-color:var(--border);background:var(--bg-surface);flex-direction:row;gap:7px;min-width:auto;padding:10px 14px}.workflow-node-icon-endpoint.svelte-nbptrg{border-radius:var(--radius);width:auto;height:auto;color:var(--text-muted);background:0 0;justify-content:flex-start;padding:0}.workflow-node-icon-endpoint.svelte-nbptrg svg{width:14px;height:14px}.workflow-node-endpoint.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted);font-size:11px;font-weight:600}.workflow-node-feature.svelte-nbptrg{border-color:color-mix(in srgb, var(--accent) 46%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface))}.workflow-node-feature.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--accent) 16%, var(--bg));color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--accent) 70%, var(--text-muted))}.workflow-node-ai.svelte-nbptrg{border-radius:var(--radius);gap:6px;min-width:96px;padding:12px 16px}.workflow-async-section.svelte-nbptrg{justify-content:flex-end;align-items:center;gap:0;width:100%;min-width:0;margin-top:10px;display:flex}.workflow-async-turn.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 60px;height:2px;position:relative}.workflow-async-turn.svelte-nbptrg:before{content:"";background:color-mix(in srgb, var(--text-muted) 40%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);width:7px;height:9px;position:absolute;top:50%;left:-7px;transform:translateY(-50%)}.workflow-async-turn.svelte-nbptrg:after{content:"";border-right:2px dashed color-mix(in srgb, var(--text-muted) 40%, var(--border));height:16px;position:absolute;bottom:1px;right:0}.workflow-async-row.svelte-nbptrg{align-items:center;min-width:0;margin-right:7px;display:flex}.workflow-conn-async.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 24px;width:24px}.workflow-conn-async.svelte-nbptrg:after{background:color-mix(in srgb, var(--text-muted) 45%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);left:-1px;right:auto}.workflow-node-async.svelte-nbptrg{border-radius:var(--radius);border-style:dashed;flex-direction:row;gap:7px;min-width:auto;padding:7px 12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){border-radius:var(--radius);width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg) svg{width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){font-size:10px;font-weight:700}.workflow-async-label.svelte-nbptrg{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);opacity:.55;white-space:nowrap;flex-shrink:0;align-items:center;margin-left:8px;font-size:9px;font-weight:800;display:inline-flex}.workflow-node-success.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 18%, var(--bg));color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 85%, var(--text))}.workflow-node-success.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 74%, var(--text-muted))}.workflow-node-success.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 14%, var(--bg));border-color:color-mix(in srgb, var(--success) 38%, var(--border));color:var(--success)}.workflow-node-current.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 16%, var(--bg));color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 85%, var(--text))}.workflow-node-current.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 72%, var(--text-muted))}.workflow-node-current.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 13%, var(--bg));border-color:color-mix(in srgb, var(--info) 36%, var(--border));color:var(--info)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 85%, var(--text))}.workflow-node-warning.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 72%, var(--text-muted))}.workflow-node-warning.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 38%, var(--border));color:var(--warning)}.workflow-node-error.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--danger) 14%, var(--bg));color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 85%, var(--text))}.workflow-node-error.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 72%, var(--text-muted))}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 12%, var(--bg));color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg),.workflow-node-neutral.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--text-muted) 84%, var(--border))}.workflow-node-neutral.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 10%, var(--bg));border-color:color-mix(in srgb, var(--text-muted) 28%, var(--border));color:var(--text-muted)}.workflow-conn-hit.svelte-nbptrg,.workflow-conn-hit.svelte-nbptrg:after{background:color-mix(in srgb, var(--success) 58%, var(--border))}.workflow-conn-dim.svelte-nbptrg,.workflow-conn-dim.svelte-nbptrg:after{background:color-mix(in srgb, var(--border) 75%, transparent)}.workflow-node-success.svelte-nbptrg{border-color:color-mix(in srgb, var(--success) 52%, var(--border));background:color-mix(in srgb, var(--success) 9%, var(--bg-surface))}.workflow-node-current.svelte-nbptrg{border-color:color-mix(in srgb, var(--info) 56%, var(--border));background:color-mix(in srgb, var(--info) 10%, var(--bg-surface))}.workflow-node-warning.svelte-nbptrg{border-color:color-mix(in srgb, var(--warning) 52%, var(--border));background:color-mix(in srgb, var(--warning) 9%, var(--bg-surface))}.workflow-node-error.svelte-nbptrg{border-color:color-mix(in srgb, var(--danger) 52%, var(--border));background:color-mix(in srgb, var(--danger) 9%, var(--bg-surface))}.workflow-node-neutral.svelte-nbptrg{border-color:color-mix(in srgb, var(--text-muted) 40%, var(--border));background:color-mix(in srgb, var(--text-muted) 8%, var(--bg-surface))}.workflow-node-skipped.svelte-nbptrg{opacity:.28;position:relative}.workflow-card.svelte-1fo9fvq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:16px;padding:20px;display:flex}.workflow-card-head.svelte-1fo9fvq{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-card-footer.svelte-1fo9fvq{flex-direction:column;align-items:stretch;gap:10px;display:flex}.workflow-card-head.svelte-1fo9fvq h3{font-size:18px;font-weight:700}.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.workflow-card-meta-footer.svelte-1fo9fvq{justify-content:flex-start}.workflow-card-footer.svelte-1fo9fvq .alias-actions-cell{align-self:flex-end}.workflow-card-description.svelte-1fo9fvq{color:var(--text-muted);font-size:14px}.workflow-guardrails.svelte-1fo9fvq{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list.svelte-1fo9fvq{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-item.svelte-1fo9fvq{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}@media (width<=768px){.workflow-card-head.svelte-1fo9fvq,.workflow-card-footer.svelte-1fo9fvq,.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq,.workflow-guardrail-item.svelte-1fo9fvq{flex-direction:column;align-items:flex-start}}.model-editor.workflow-editor{width:min(1080px,100%);margin-bottom:0}.alert-inline-actions.svelte-1bcpzh1{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.workflow-guardrail-editor.svelte-1bcpzh1{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list-editor.svelte-1bcpzh1{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-row.svelte-1bcpzh1{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:stretch;align-items:center;gap:12px;padding:10px 12px;display:flex}.workflow-guardrail-field.svelte-1bcpzh1{flex:auto;min-width:0}.workflow-guardrail-step-field.svelte-1bcpzh1{flex:0 0 120px}.workflow-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-step-input.svelte-1bcpzh1{max-width:120px}@media (width<=768px){.workflow-guardrail-row.svelte-1bcpzh1{flex-direction:column;align-items:flex-start}.workflow-step-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-guardrail-field.svelte-1bcpzh1,.workflow-guardrail-step-field.svelte-1bcpzh1{flex-basis:auto;width:100%}}.workflow-list-loading.svelte-ie2kfk{justify-content:center;align-items:center;gap:8px;display:flex}.workflows-list.svelte-ie2kfk{min-width:0}.workflow-card-grid.svelte-ie2kfk{grid-template-columns:1fr;gap:16px;display:grid}.workflow-page-note.svelte-l8kr26{color:var(--text-muted);margin-top:6px;font-size:14px}.audit-log-toolbar.svelte-1pwbpcm{flex-direction:column;gap:10px;margin-bottom:14px;display:flex}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:repeat(12,minmax(0,1fr));gap:10px;display:grid}.audit-filter-select.svelte-1pwbpcm{grid-column:span 2;min-width:0}.audit-filter-row-search.svelte-1pwbpcm .filter-input-wrap{grid-column:1/-1;max-width:none}.audit-filter-row-controls.svelte-1pwbpcm .audit-filter-select:where(.svelte-1pwbpcm){grid-column:span 2}.audit-filter-row-controls.svelte-1pwbpcm .btn{grid-column:11/-1;justify-self:end;min-width:108px}.audit-clear-btn.svelte-1pwbpcm{justify-content:center;align-items:center;gap:8px;font-weight:600;display:inline-flex}.audit-clear-btn.svelte-1pwbpcm .table-icon-svg{width:12px;height:12px}@media (width<=768px){.audit-log-toolbar.svelte-1pwbpcm{gap:8px}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:1fr}.audit-filter-row.svelte-1pwbpcm .filter-input-wrap,.audit-filter-row.svelte-1pwbpcm .filter-input,.audit-filter-select.svelte-1pwbpcm,.audit-filter-row.svelte-1pwbpcm .btn{grid-column:auto}}.audit-live-status.svelte-tve6yv{color:var(--text-muted);align-items:center;gap:10px;margin-left:16px;padding-left:6px;font-size:12px;display:inline-flex}.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:1.8s ease-out infinite svelte-tve6yv-audit-live-dot-throb}@keyframes svelte-tve6yv-audit-live-dot-throb{0%{transform:scale(1)}35%{transform:scale(1.35)}70%{transform:scale(1)}to{transform:scale(1)}}@media (prefers-reduced-motion:reduce){.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:none}}.audit-live-status-text.is-live.svelte-tve6yv{color:var(--success);font-weight:600}.audit-entry-metadata.svelte-hyopt0{border-top:1px solid var(--border);align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:flex}.audit-entry-metadata-label.svelte-hyopt0{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:12px;font-weight:700}.audit-entry-context.svelte-hyopt0{flex-wrap:wrap;flex:auto;gap:8px;display:flex}.audit-alias-badge.svelte-hyopt0{background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 28%, var(--border));color:var(--accent-strong,var(--accent))}@media (width<=768px){.audit-entry-metadata.svelte-hyopt0{flex-direction:column;align-items:flex-start;gap:8px}}.audit-attempt-track.svelte-1eu22xn{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.audit-attempt-track-pips.svelte-1eu22xn{align-items:center;gap:3px;display:inline-flex}.audit-attempt-pip.svelte-1eu22xn{background:var(--text-muted);border-radius:2px;width:8px;height:8px}.audit-attempt-pip.audit-attempt-success.svelte-1eu22xn{background:var(--success)}.audit-attempt-pip.audit-attempt-error.svelte-1eu22xn{background:var(--danger)}.audit-attempt-track-count.svelte-1eu22xn{color:var(--text-muted);font-size:11px}.audit-entry-summary.svelte-17mysgz{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;padding:5px 14px;list-style:none;display:flex;position:relative}.audit-entry-summary.svelte-17mysgz::-webkit-details-marker{display:none}.audit-entry-summary-live-in-progress.svelte-17mysgz{background:color-mix(in srgb, var(--info) 7%, var(--bg))}.audit-entry-summary-live-in-progress.svelte-17mysgz:before{content:"";background:var(--info);pointer-events:none;width:3px;animation:1.2s ease-in-out infinite audit-live-summary-stripe-blink;position:absolute;inset:0 auto 0 0}@media (prefers-reduced-motion:reduce){.audit-entry-summary-live-in-progress.svelte-17mysgz:before{opacity:.78;animation:none}}.audit-entry-left.svelte-17mysgz{align-items:center;gap:8px;min-width:0;display:flex}.audit-entry-right.svelte-17mysgz{color:var(--text-muted);flex-shrink:0;align-items:center;gap:10px;min-height:28px;display:inline-flex}.audit-thread-expander.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);min-width:28px;height:28px;color:var(--text-muted);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:3px;padding:0 7px 0 4px;transition:background .1s ease-out,color .1s ease-out;display:inline-flex}.audit-thread-expander.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 12%, var(--bg));color:var(--accent)}.audit-thread-expander.svelte-17mysgz .audit-thread-expander-svg{width:14px;height:14px}.audit-thread-count.svelte-17mysgz{font-size:11px;font-weight:600}.audit-conversation-trigger.svelte-17mysgz{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:color-mix(in srgb, var(--accent) 12%, var(--bg));width:28px;height:28px;color:var(--accent);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin-right:-9px;transition:transform .1s ease-out,background .1s ease-out,color .1s ease-out;display:inline-flex}.audit-conversation-trigger.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 20%, var(--bg));transform:translate(1px)}.audit-conversation-trigger.svelte-17mysgz .audit-conversation-trigger-svg{stroke-linecap:butt;stroke-linejoin:miter;width:14px;height:14px}.audit-path.svelte-17mysgz{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.audit-method-badge.svelte-17mysgz{border:1px solid var(--border);letter-spacing:.2px;background:var(--bg-surface);min-width:52px;height:24px;color:var(--text-muted);border-radius:999px;justify-content:center;align-items:center;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.audit-provider-model.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);height:24px;color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;max-width:420px;padding:0 10px;font-size:12px;display:inline-flex;overflow:hidden}@media (width<=768px){.audit-entry-summary.svelte-17mysgz{flex-direction:column;align-items:flex-start}.audit-entry-right.svelte-17mysgz{justify-content:space-between;width:100%}}.audit-pane-split.svelte-1h5puht{grid-template-columns:1fr 2fr;align-items:start;gap:10px 14px;display:grid}.audit-pane-split-single.svelte-1h5puht{grid-template-columns:minmax(0,1fr)}.audit-pane-split.svelte-1h5puht .audit-pane-block-error:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-pane-empty:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-size-warning:where(.svelte-1h5puht){grid-column:1/-1}.audit-pane-block.svelte-1h5puht{min-width:0}.audit-pane-block.svelte-1h5puht>h5{margin-bottom:6px}.audit-pane-block-head.svelte-1h5puht{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.audit-pane-block-title.svelte-1h5puht{align-items:center;gap:8px;min-width:0;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn{background-color:var(--bg-surface);border:1px solid color-mix(in srgb, var(--border) 70%, var(--text) 30%);color:var(--text);cursor:pointer;border-radius:6px;flex:none;align-items:center;gap:6px;padding:4px 8px;font-family:inherit;font-size:12px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn:hover:not(:disabled){background:color-mix(in srgb, var(--bg-surface) 80%, var(--text) 20%);border-color:color-mix(in srgb, var(--border) 45%, var(--text) 55%)}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 18%, var(--bg-surface))}.audit-json.svelte-1h5puht{background:var(--bg-surface);border:1px solid var(--border);box-sizing:border-box;white-space:pre;max-width:100%;max-height:220px;color:var(--text);border-radius:6px;padding:10px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.45;overflow:auto}.audit-pane-error-message.svelte-1h5puht{color:var(--danger)}.audit-pane-clickable-preview.svelte-1h5puht{cursor:pointer}.audit-pane-clickable-preview.svelte-1h5puht:hover{background:color-mix(in srgb, var(--danger) 8%, transparent)}.audit-json-body.svelte-1h5puht{white-space:pre;overflow-wrap:normal}.audit-pane-empty.svelte-1h5puht{text-align:left;padding:8px 0 0}.audit-pane-pending.svelte-1h5puht{align-items:center;gap:8px;display:flex}.audit-pane-streaming.svelte-1h5puht{letter-spacing:.02em;color:var(--text-muted);align-items:center;gap:7px;padding-left:4px;font-size:11px;font-weight:600;display:inline-flex}.audit-size-warning.svelte-1h5puht{color:var(--warning);margin-top:8px;font-size:12px}.audit-request-response.svelte-1bc5vi5{margin-top:4px}.audit-pane-tablist.svelte-1bc5vi5{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;display:flex}.audit-pane-tab.svelte-1bc5vi5{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-bottom-color:#0000;border-radius:6px 6px 0 0;align-items:center;gap:8px;margin-bottom:-1px;margin-right:12px;padding:8px 12px;font-family:inherit;font-size:13px;transition:color .15s,border-color .15s,background-color .15s;display:inline-flex}.audit-pane-tab.svelte-1bc5vi5:not(.audit-pane-tab-active):hover{color:var(--text);background:color-mix(in srgb, var(--text) 5%, transparent)}.audit-pane-tab-active.svelte-1bc5vi5{color:var(--text);border-color:var(--border);border-bottom-color:var(--bg);background:var(--bg)}.audit-pane-tab-label.svelte-1bc5vi5{font-weight:600}.audit-pane-tabpanel.svelte-1bc5vi5{min-width:0}.audit-pane-icon.svelte-1bc5vi5{color:var(--text-muted);flex:none;align-items:center;display:inline-flex}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-request{color:var(--accent)}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-response{color:var(--info)}.audit-pane-icon.svelte-1bc5vi5 svg{width:16px;height:16px}.audit-pane-seq.svelte-1bc5vi5{color:var(--text-muted);font-size:12px}.audit-pane-kind.svelte-1bc5vi5{text-transform:uppercase;letter-spacing:.04em;font-size:10px;font-weight:600}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-primary{color:var(--text-muted)}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-failover{color:var(--accent);background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-retry{color:var(--warning);background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 30%, var(--border))}.audit-savings-pill.svelte-1bc5vi5{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);color:var(--prompt-cache-color);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;font-weight:700;display:inline-flex}.audit-step-pill.svelte-1bc5vi5{border:1px dashed var(--border);color:var(--text-muted);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;display:inline-flex}.audit-entry.svelte-cmjgwr{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);transition:background .12s ease-out,border-color .12s ease-out;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr{border-color:color-mix(in srgb, var(--prompt-cache-color) 38%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 7%, var(--bg))}.audit-entry-details.svelte-cmjgwr{border-top:1px solid var(--border);background:var(--bg-surface);padding:12px;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr .audit-entry-details:where(.svelte-cmjgwr){border-top-color:color-mix(in srgb, var(--prompt-cache-color) 24%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 5%, var(--bg-surface))}.audit-thread.svelte-pneivi{flex-direction:column;gap:10px;display:flex}.audit-thread-children.svelte-pneivi{flex-direction:column;gap:10px;margin-left:26px;display:flex}.audit-thread-child.svelte-pneivi,.audit-thread-loading.svelte-pneivi{position:relative}.audit-thread-child.svelte-pneivi:before,.audit-thread-loading.svelte-pneivi:before{content:"";border-left:1px solid var(--border);border-bottom:1px solid var(--border);pointer-events:none;border-bottom-left-radius:6px;width:12px;height:calc(50% + 10px);position:absolute;top:-10px;left:-14px}.audit-thread-child.svelte-pneivi:not(:last-child):after{content:"";border-left:1px solid var(--border);pointer-events:none;position:absolute;top:50%;bottom:-10px;left:-14px}.audit-thread-loading.svelte-pneivi{padding:6px 0 6px 4px;display:flex}.audit-thread-more.svelte-pneivi{color:var(--text-muted);padding-left:4px;font-size:12px}.chat-message.svelte-12s99s5{border:1px solid var(--border);background:var(--bg);border-radius:10px;max-width:94%;padding:10px 12px}.chat-message.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border));box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent)}.chat-message.is-after-anchor.svelte-12s99s5,.chat-function-note.is-after-anchor.svelte-12s99s5{opacity:.46}.chat-message.role-user.svelte-12s99s5{align-self:flex-start}.chat-message.role-assistant.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 18%, var(--bg));align-self:flex-end}.chat-message.role-system.svelte-12s99s5{background:color-mix(in srgb, var(--warning) 10%, var(--bg));align-self:center;width:100%;max-width:100%}.chat-message.role-error.svelte-12s99s5{border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg));align-self:flex-end}.chat-message.role-error.svelte-12s99s5 .chat-role:where(.svelte-12s99s5){color:color-mix(in srgb, var(--danger) 75%, var(--text-muted))}.chat-message-meta.svelte-12s99s5{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:6px;display:flex}.chat-role.svelte-12s99s5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:12px;font-weight:700}.chat-time.svelte-12s99s5{color:var(--text-muted);white-space:nowrap;font-size:11px}.chat-content.svelte-12s99s5{white-space:pre-wrap;overflow-wrap:break-word;color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;line-height:1.5}.chat-tool-calls.svelte-12s99s5{border-top:1px solid var(--border);flex-direction:column;gap:3px;margin-top:8px;padding-top:6px;display:flex}.chat-tool-call.svelte-12s99s5{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px}.chat-tool-call-name.svelte-12s99s5:before{content:"⚡"}.chat-function-note.svelte-12s99s5{max-width:94%;color:var(--text-muted);background:color-mix(in srgb, var(--border) 40%, transparent);border:1px dashed var(--border);border-radius:12px;align-self:center;padding:4px 12px;font-size:12px}.chat-function-note.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-inner.svelte-12s99s5{align-items:baseline;gap:6px;display:flex;overflow:hidden}.chat-function-label.svelte-12s99s5{text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;flex-shrink:0;font-size:11px;font-weight:600}.chat-function-detail.svelte-12s99s5{white-space:nowrap;text-overflow:ellipsis;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;overflow:hidden}.chat-function-note.role-function-call.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 8%, transparent);border-color:color-mix(in srgb, var(--accent) 30%, var(--border));align-self:flex-end}.chat-function-note.role-function-result.svelte-12s99s5{background:color-mix(in srgb, var(--success) 8%, transparent);border-color:color-mix(in srgb, var(--success) 30%, var(--border));align-self:flex-start}.chat-function-note.is-anchor.role-function-call.svelte-12s99s5,.chat-function-note.is-anchor.role-function-result.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-details.svelte-12s99s5{width:100%}.chat-function-note-details.svelte-12s99s5>summary{cursor:pointer;list-style:none}.chat-function-note-details.svelte-12s99s5>summary::-webkit-details-marker{display:none}.chat-function-expanded.svelte-12s99s5{border-top:1px solid var(--border);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);max-height:200px;margin-top:6px;padding-top:6px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.45;overflow:auto}@media (width<=768px){.chat-message.svelte-12s99s5{max-width:100%}}.conversation-overlay.svelte-ssrzja{z-index:50;background:#0000004d;position:fixed;inset:0}.conversation-drawer-header.svelte-ssrzja{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;display:flex}.conversation-drawer-header.svelte-ssrzja h3{font-size:16px;font-weight:700}.conversation-meta.svelte-ssrzja{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px}.conversation-drawer-footer.svelte-ssrzja{border-top:1px solid var(--border);background:var(--bg-surface);flex-direction:column;flex-shrink:0;gap:9px;padding:10px 16px;display:flex}.conversation-composer.svelte-ssrzja{flex-direction:column;gap:7px;display:flex}.conversation-composer.svelte-ssrzja label:where(.svelte-ssrzja){font-size:12px;font-weight:700}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja){resize:vertical;border:1px solid var(--border);background:var(--bg);width:100%;min-height:70px;color:var(--text);font:inherit;border-radius:7px;padding:9px 10px;line-height:1.45}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):focus{outline:2px solid color-mix(in srgb, var(--accent) 38%, transparent);outline-offset:1px}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):disabled{opacity:.65}.conversation-composer-actions.svelte-ssrzja{justify-content:space-between;align-items:center;gap:10px;display:flex}.conversation-endpoint.svelte-ssrzja{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);font-size:11px;overflow:hidden}.conversation-send-error.svelte-ssrzja{color:var(--danger);font-size:12px}.conversation-truncated.svelte-ssrzja{color:var(--text-muted);padding:0 16px 14px;font-size:12px}.conversation-thread.svelte-ssrzja{flex-direction:column;gap:10px;padding:14px 16px 20px;display:flex}.conversation-live-status.svelte-ssrzja{color:var(--text-muted);align-items:center;gap:10px;padding:4px 16px 20px;font-size:13px;display:flex}.audit-log-loading.svelte-1nhcbov{justify-content:center;padding:2rem 0;display:flex}.audit-list-toolbar.svelte-1nhcbov{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.audit-list-toolbar-left.svelte-1nhcbov{flex-wrap:wrap;align-items:center;gap:16px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov{color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;font-size:13px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov input:where(.svelte-1nhcbov){accent-color:var(--accent);cursor:pointer}.audit-retention-note.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-retention-highlight.svelte-1nhcbov{color:var(--text);font-weight:600}.audit-log-section.svelte-1nhcbov{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.audit-log-summary.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-log-list.svelte-1nhcbov{flex-direction:column;gap:10px;display:flex}.settings-guardrails-list.svelte-1bvx512{min-width:0}.settings-guardrail-type-pill.svelte-1bvx512{border:1px solid color-mix(in srgb, var(--accent) 18%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--text);white-space:nowrap;border-radius:999px;align-items:center;padding:6px 10px;font-size:12px;font-weight:600;display:inline-flex}.settings-guardrail-summary.svelte-1bvx512{color:var(--text);font-size:14px;line-height:1.45}.settings-guardrail-description.svelte-1bvx512{color:var(--text-muted);margin-top:6px;font-size:12px}.model-editor.guardrails-editor-wide{width:min(1080px,100%)}.form-field-fieldset.svelte-s964s3{border:0;min-inline-size:0;margin:0;padding:0}.form-field-legend.svelte-s964s3{color:var(--text-muted);letter-spacing:.5px;text-transform:uppercase;padding:0;font-size:12px;font-weight:600}.model-editor.settings-guardrails-editor{min-width:0}.settings-guardrails-hero.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));border-radius:var(--radius);background:radial-gradient(circle at top right, color-mix(in srgb, var(--accent-hover) 18%, transparent), transparent 42%), radial-gradient(circle at bottom left, color-mix(in srgb, var(--accent) 16%, transparent), transparent 40%), var(--bg-surface);justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:20px;padding:24px;display:flex}.settings-kicker.svelte-5x874c{color:var(--accent);letter-spacing:.08em;text-transform:uppercase;margin:0 0 10px;font-size:11px;font-weight:700}.settings-guardrails-hero.svelte-5x874c h3{margin-bottom:8px}.settings-guardrails-hero.svelte-5x874c p:last-child{color:var(--text-muted);margin-bottom:0}.settings-guardrails-meta.svelte-5x874c{gap:12px;display:flex}.settings-guardrails-stat.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));background:color-mix(in srgb, var(--bg-surface-hover) 76%, transparent);border-radius:16px;min-width:110px;padding:14px 16px}.settings-guardrails-stat-label.svelte-5x874c{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;margin-bottom:8px;font-size:11px;font-weight:700;display:block}.settings-guardrails-stat.svelte-5x874c strong{font-size:24px;font-weight:700}@media (width<=768px){.settings-guardrails-hero.svelte-5x874c{flex-direction:column}.settings-guardrails-meta.svelte-5x874c{width:100%}.settings-guardrails-stat.svelte-5x874c{flex:1 1 0}}.mcp-catalog-section.svelte-1xqrzco{margin-top:18px}.mcp-catalog-section.svelte-1xqrzco .form-field-label{margin-bottom:8px}.mcp-catalog-subtitle.svelte-1xqrzco{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.mcp-catalog-list.svelte-1xqrzco{flex-direction:column;gap:12px;margin:0 0 8px;padding:0;list-style:none;display:flex}.mcp-catalog-item-name.svelte-1xqrzco{overflow-wrap:anywhere;font-size:13px}.mcp-catalog-item-aggregated.svelte-1xqrzco{color:var(--text-muted);overflow-wrap:anywhere;margin-top:2px;font-size:11px}.mcp-catalog-item-description.svelte-1xqrzco{color:var(--text-muted);margin:2px 0 0;font-size:13px;font-weight:400}.mcp-server-sub-counts.svelte-ah8nrt{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;max-width:280px;margin-top:4px;font-size:11px;overflow:hidden}.mcp-server-table-wrapper.svelte-ah8nrt{overflow-x:auto}.mcp-server-table-wrapper.svelte-ah8nrt .data-table{min-width:860px}.auth-key-form-fields.svelte-1gswxes>.form-field{margin-bottom:4px}.auth-key-dashboard-toggle.svelte-1gswxes{cursor:pointer;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-key-issued-banner.svelte-1gswxes{background:color-mix(in srgb, var(--success) 8%, var(--bg-surface));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));border-radius:var(--radius);margin-bottom:20px;padding:16px}.auth-key-issued-warning.svelte-1gswxes{color:color-mix(in srgb, var(--success) 80%, var(--text));margin-bottom:12px;font-size:13px;font-weight:600}.auth-key-issued-value-row.svelte-1gswxes{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.auth-key-issued-token.svelte-1gswxes{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);word-break:break-all;flex:1;min-width:0;padding:8px 12px;font-size:13px;overflow-x:auto}.usage-label-chip-static.svelte-nf0ldb,.usage-label-chip-static.svelte-nf0ldb:hover{cursor:default;background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.auth-key-redacted.svelte-nf0ldb{color:var(--text-muted);font-size:13px}.auth-key-actions-cell.svelte-nf0ldb{white-space:nowrap}.auth-key-row-deactivated.svelte-nf0ldb td:where(.svelte-nf0ldb):not(.auth-key-actions-cell){opacity:.55}.auth-key-expiry.svelte-nf0ldb{white-space:nowrap;align-items:center;gap:8px;display:inline-flex}.auth-key-th-help.svelte-nf0ldb{cursor:help;align-items:center;gap:4px;display:inline-flex}.auth-key-row-actions.svelte-nf0ldb{align-items:center;gap:6px;display:inline-flex}.auth-keys-loading.svelte-1xpdcqx{justify-content:center;align-items:center;padding:32px 0;display:flex}.auth-keys-help-notice.svelte-1xpdcqx{margin-bottom:20px}.auth-keys-inactive-toggle.svelte-1xpdcqx{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-keys-inactive-toggle.svelte-1xpdcqx input:where(.svelte-1xpdcqx){width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.settings-panel-header.svelte-15kyv2y{justify-content:space-between;gap:16px;margin-bottom:20px;display:flex}.settings-panel-header.svelte-15kyv2y h3{font-size:18px}.settings-form-grid.svelte-15kyv2y{grid-template-columns:minmax(280px,420px);gap:16px;display:grid}@media (width<=768px){.settings-form-grid.svelte-15kyv2y{grid-template-columns:1fr}}.budget-settings-section.svelte-a747ys{width:100%}.budget-settings-grid.svelte-a747ys{gap:12px;display:grid}.budget-settings-row.svelte-a747ys{grid-template-columns:96px minmax(170px,1fr) minmax(110px,140px) minmax(110px,140px) minmax(220px,280px);align-items:start;gap:12px;display:grid}.budget-settings-period.svelte-a747ys{color:var(--text);letter-spacing:0;text-transform:uppercase;align-self:end;min-height:35px;padding-bottom:9px;font-size:12px;font-weight:700}.budget-settings-spacer.svelte-a747ys{min-height:1px}.budget-settings-help-cell.svelte-a747ys{align-self:start;min-width:0;min-height:35px}.budget-settings-help-cell.svelte-a747ys .inline-help-copy{max-width:280px;margin:22px 0 0;font-size:12px;line-height:1.35}@media (width<=768px){.budget-settings-grid.svelte-a747ys,.budget-settings-row.svelte-a747ys{grid-template-columns:1fr}.budget-settings-spacer.svelte-a747ys{display:none}}.tagging-settings-grid.svelte-18e8yem{gap:12px;display:grid}.tagging-settings-row.svelte-18e8yem{grid-template-columns:minmax(170px,1fr) minmax(150px,1fr) minmax(80px,110px) auto minmax(90px,auto);align-items:end;gap:12px;display:grid}.tagging-do-not-pass.svelte-18e8yem{color:var(--text);white-space:nowrap;align-items:center;gap:6px;min-height:35px;font-size:13px;display:flex}.tagging-row-trailer.svelte-18e8yem{align-items:center;gap:8px;min-height:35px;display:flex}.tagging-settings-empty.svelte-18e8yem{color:var(--text-muted);margin:0}.tagging-settings-actions.svelte-18e8yem{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.tagging-settings-row.svelte-18e8yem{grid-template-columns:1fr;align-items:stretch}.tagging-settings-actions.svelte-18e8yem,.tagging-settings-actions.svelte-18e8yem .btn{width:100%}}.pricing-recalculate-section.svelte-1cdxzyk{width:100%}.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:minmax(220px,320px) minmax(260px,360px);justify-content:start;align-items:end;gap:12px;width:100%;display:grid}.pricing-recalculate-date-field.svelte-1cdxzyk{grid-column:1/-1;width:100%;max-width:320px}.pricing-recalculate-filter-field.svelte-1cdxzyk{width:100%;max-width:360px}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker{width:100%}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-trigger{justify-content:space-between;width:100%}.pricing-recalculate-actions.svelte-1cdxzyk{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:1fr}.pricing-recalculate-actions.svelte-1cdxzyk,.pricing-recalculate-actions.svelte-1cdxzyk .btn{width:100%}}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-dropdown{inset:auto auto calc(100% + 6px) 0}.settings-refresh-icon.svelte-yeq2mp{flex:0 0 16px;width:16px;height:16px}.runtime-refresh-steps.svelte-yeq2mp{color:var(--text-muted);gap:8px;margin-top:14px;padding-left:18px;font-size:13px;display:grid}.runtime-refresh-step.is-ok.svelte-yeq2mp{color:var(--success)}.runtime-refresh-step.is-partial.svelte-yeq2mp{color:var(--warning)}.runtime-refresh-step.is-failed.svelte-yeq2mp{color:var(--danger)}.settings-version-footer.svelte-3naq7u{color:var(--text-muted);text-align:right;margin-top:24px;font-size:12px} +:root{--bg:#111110;--bg-surface:#1e1d1c;--bg-surface-hover:#2a2420;--border:#2a2826;--text:#e8e0d6;--text-muted:#9a918a;--accent:#b8956e;--accent-hover:#d4b896;--success:#34d399;--info:#3b82f6;--warning:#f59e0b;--danger:#ef4444;--prompt-cache-color:color-mix(in srgb, var(--info) 72%, #fff);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 24%, var(--bg-surface));--cache-meter-uncached:var(--token-input);--cache-meter-local:var(--token-local);--cache-meter-prompt:var(--token-prompt);--token-input:#c0824a;--token-output:#ddb27a;--token-prompt:color-mix(in srgb, var(--info) 60%, transparent);--token-local:color-mix(in srgb, var(--info) 20%, transparent);--sidebar-width:240px;--radius:8px;--chart-grid:#2a2826;--chart-text:#9a918a;--chart-day-marker:var(--text);--chart-tooltip-bg:#1e1d1c;--chart-tooltip-border:#2a2826;--chart-tooltip-text:#e8e0d6;--cal-level-0:#161b22;--cal-level-1:color-mix(in srgb, var(--info) 15%, var(--bg-surface));--cal-level-2:color-mix(in srgb, var(--info) 25%, var(--bg-surface));--cal-level-3:color-mix(in srgb, var(--info) 36%, var(--bg-surface));--cal-level-4:color-mix(in srgb, var(--info) 48%, var(--bg-surface));--cal-level-5:color-mix(in srgb, var(--info) 60%, var(--bg-surface));--cal-level-6:color-mix(in srgb, var(--info) 73%, var(--bg-surface));--cal-level-7:color-mix(in srgb, var(--info) 87%, var(--bg-surface));--cal-level-8:var(--info);--cal-level-9:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-10:color-mix(in srgb, var(--info) 62%, #fff);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface-hover) 86%, #fff 14%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface-hover) 72%, #fff 28%);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light]{--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--bg:#f5f0ea;--bg-surface:#fff;--bg-surface-hover:#ece5dc;--border:#e8e0d6;--text:#2d2519;--text-muted:#7a7068;--accent:#755c3d;--accent-hover:#9a7d5a;--success:#34d399;--info:#2563eb;--warning:#d97706;--danger:#dc2626;--prompt-cache-color:color-mix(in srgb, var(--info) 84%, #0f172a);--prompt-cache-color-bg:color-mix(in srgb, var(--token-prompt) 18%, var(--bg-surface));--chart-grid:#e8e0d6;--chart-text:#7a7068;--chart-day-marker:var(--text);--chart-tooltip-bg:#fff;--chart-tooltip-border:#e8e0d6;--chart-tooltip-text:#2d2519;--cal-level-0:#ebedf0;--cal-level-1:color-mix(in srgb, var(--info) 12%, #fff);--cal-level-2:color-mix(in srgb, var(--info) 24%, #fff);--cal-level-3:color-mix(in srgb, var(--info) 37%, #fff);--cal-level-4:color-mix(in srgb, var(--info) 50%, #fff);--cal-level-5:color-mix(in srgb, var(--info) 64%, #fff);--cal-level-6:color-mix(in srgb, var(--info) 80%, #fff);--cal-level-7:var(--info);--cal-level-8:color-mix(in srgb, var(--info) 85%, #000);--cal-level-9:color-mix(in srgb, var(--info) 72%, #000);--cal-level-10:color-mix(in srgb, var(--info) 60%, #000);--alias-row-valid-bg:color-mix(in srgb, var(--bg-surface) 96%, var(--accent) 4%);--alias-row-valid-bg-hover:color-mix(in srgb, var(--bg-surface) 90%, var(--accent) 10%);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5}body.dashboard-modal-open{overflow:hidden}.app{min-height:100vh;display:flex}.badge{background:var(--accent);color:#fff;text-transform:uppercase;letter-spacing:.5px;border-radius:10px;padding:2px 8px;font-size:10px;font-weight:600}.auth-dialog{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:min(440px,100%);padding:22px;box-shadow:0 24px 70px #00000061}.auth-dialog-header{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.auth-dialog h2{margin-top:2px;font-size:22px;line-height:1.2}.auth-dialog-close{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.auth-dialog-close:hover{color:var(--text);background:var(--bg-surface-hover)}.auth-dialog-close:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-hint{color:var(--text-muted);font-size:13px}.auth-dialog-error{color:var(--danger);font-size:13px;font-weight:600}.auth-dialog-form{gap:10px;margin-top:18px;display:grid}.auth-dialog-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.content{flex:1 1 0;width:100%;min-width:0;max-width:1400px;margin:0 auto;padding:32px;transition:width .2s}.page-header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.page-header h2{letter-spacing:-.3px;font-size:22px;font-weight:700}.page-header-controls{align-items:center;gap:12px;display:flex}.page-with-sticky-date{grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:12px;display:grid}.page-with-sticky-date>*{grid-column:1/-1}.page-with-sticky-date>.date-range-page-header{grid-column:1}.page-with-sticky-date>.sticky-date-range{z-index:8;grid-column:2;justify-self:end;position:sticky;top:16px}.model-count{color:var(--text-muted);font-size:14px}.provider-status-section{margin-top:28px;scroll-margin-top:24px}.cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:28px;display:grid}.card{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}.card-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:8px;font-size:12px;font-weight:600}.card-value{letter-spacing:-.5px;font-size:28px;font-weight:700}.cache-meter{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:28px;padding:24px}.chart-container{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.chart-container h3{margin-bottom:16px;font-size:16px;font-weight:600}.chart-container-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.chart-container-header h3{margin-bottom:0}.chart-wrapper{height:210px;position:relative}.live-dot{background:var(--text-muted);border-radius:50%;flex-shrink:0;width:8px;height:8px}.live-dot.is-streaming{background:var(--success);position:relative}.live-dot.is-streaming:after{content:"";z-index:-1;background:color-mix(in srgb, var(--success) 55%, transparent);border-radius:50%;animation:1.8s ease-out infinite live-dot-pulse;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.live-dot.is-streaming:after{opacity:0;animation:none}}@keyframes live-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(2.5)}to{opacity:0;transform:scale(2.5)}}.alert{border-radius:var(--radius);margin-bottom:20px;padding:12px 16px;font-size:14px}.alert-warning{color:var(--warning);background:#f59e0b1a;border:1px solid #f59e0b4d}.table-toolbar{align-items:center;gap:12px;margin-bottom:16px;display:flex}.table-toolbar-main{flex:1;min-width:0}.table-toolbar-actions{justify-content:flex-end;margin-left:auto;display:flex}input:is([type=text],[type=date],[type=number]){background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:8px 12px;font-family:inherit;font-size:13px}input:is([type=text],[type=date],[type=number]):focus{border-color:var(--accent)}input:is([type=text],[type=date],[type=number]):disabled,textarea:disabled,.form-input:disabled{opacity:.6;cursor:not-allowed}.table-wrapper{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table th{text-align:left;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);background:var(--bg);border-bottom:1px solid var(--border);padding:12px 16px;font-size:12px;font-weight:600}.data-table th.model-actions-header{text-align:right;white-space:nowrap;width:1%;min-width:156px}.data-table td{border-bottom:1px solid var(--border);padding:10px 16px}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:var(--bg-surface-hover)}.mono{font-family:SF Mono,Menlo,Consolas,monospace}.font-size-md{font-size:13px}.col-price,.data-table th.col-price{text-align:right}td.col-price{color:var(--text-muted);white-space:nowrap;font-family:SF Mono,Menlo,Consolas,monospace;font-size:13px}.provider-badge{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:2px 10px;font-size:12px;font-weight:500;display:inline-block}.empty-state{text-align:center;color:var(--text-muted);padding:48px 0;font-size:14px}.empty-state-icon{width:auto;height:auto;max-height:160px;color:var(--text-muted);margin:0 auto;display:block}.empty-state-icon text{fill:var(--text-muted);font-family:inherit;font-weight:600}.chart-empty-overlay{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.chart-empty-overlay .empty-state-icon{width:auto;max-width:90%;height:auto;max-height:195px}.loading-spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:16px;height:16px;animation:.8s linear infinite loading-spin}@keyframes loading-spin{to{transform:rotate(360deg)}}.table-action-btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:6px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:inline-flex}.table-action-btn:hover:not(:disabled){background:var(--bg-surface-hover)}.table-action-btn:disabled{opacity:.45;cursor:default}.table-action-btn-danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.table-action-btn-active{color:var(--accent-strong,var(--accent));background:color-mix(in srgb, var(--accent) 12%, var(--bg));border-color:color-mix(in srgb, var(--accent) 38%, var(--border))}.table-action-btn-active:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 18%, var(--bg-surface-hover))}.table-action-btn-failover-active{color:var(--info);background:color-mix(in srgb, var(--cache-meter-prompt) 35%, var(--bg));border-color:color-mix(in srgb, var(--info) 45%, var(--border));position:relative}.table-action-btn-failover-active:hover:not(:disabled){background:color-mix(in srgb, var(--cache-meter-prompt) 45%, var(--bg-surface-hover))}.table-icon-btn{border-radius:6px;gap:0;width:32px;min-width:32px;height:32px;padding:0}.table-icon-btn.table-action-btn-active{position:relative}.table-icon-btn.table-action-btn-active:after{content:"";background:var(--accent);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-btn.table-action-btn-failover-active:after{content:"";background:var(--info);width:6px;height:6px;box-shadow:0 0 0 2px var(--bg-surface);border-radius:999px;position:absolute;top:4px;right:4px}.table-icon-svg{flex-shrink:0;width:14px;height:14px}.model-editor{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:16px;padding:24px}.alias-kind-badge{border:1px solid var(--border);background:var(--bg);min-height:24px;color:var(--accent);letter-spacing:.2px;text-transform:uppercase;border-color:color-mix(in srgb, var(--accent) 55%, var(--border));border-radius:999px;justify-content:center;align-items:center;gap:4px;padding:0 10px;font-size:11px;font-weight:600;display:inline-flex}.form h3{font-size:20px;font-weight:700}.form-kicker,.form-hint{color:var(--text-muted);font-size:13px}.alias-actions-cell{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.model-list-actions{white-space:nowrap;flex-wrap:nowrap}.model-list-actions .table-icon-btn{flex:0 0 32px}.model-list-actions .alias-toggle{flex:none}.alias-toggle{border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-family:inherit;font-size:12px;transition:all .15s;display:inline-flex}.alias-toggle:hover:not(:disabled){background:var(--bg-surface-hover)}.alias-toggle:disabled{opacity:.45;cursor:default}.alias-toggle-track{background:color-mix(in srgb, var(--border) 80%, var(--bg));border-radius:6px;width:34px;height:18px;transition:background .15s;position:relative}.alias-toggle-thumb{background:var(--text-muted);border-radius:6px;width:16px;height:16px;transition:transform .15s,background .15s;position:absolute;top:1px;left:2px}.alias-toggle.enabled{border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.alias-toggle.enabled .alias-toggle-track{background:color-mix(in srgb, var(--success) 55%, var(--bg))}.alias-toggle.enabled .alias-toggle-thumb{background:#fff;transform:translate(14px)}.alias-toggle.restricted{border-color:color-mix(in srgb, var(--accent) 50%, var(--border));color:color-mix(in srgb, var(--accent) 70%, var(--text))}.alias-toggle.restricted .alias-toggle-track{background:color-mix(in srgb, var(--accent) 55%, var(--bg))}.editor-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:20px;display:flex}.form{flex-direction:column;gap:16px;display:flex}.auth-key-editor{background:color-mix(in srgb, var(--bg-surface) 82%, var(--bg) 18%)}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.form-field{flex-direction:column;gap:8px;display:flex}.form-field-label{text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);font-size:12px;font-weight:600;display:inline-block}.vm-target-row{align-items:center;gap:8px;display:flex}.vm-target-row .vm-target-model{flex:auto;min-width:0}.vm-target-row .vm-target-weight{flex:0 0 88px;width:88px}.vm-status-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.vm-status-row .vm-status-toggle{margin-left:auto}.form-error{border:1px solid color-mix(in srgb, var(--danger) 42%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface));color:var(--danger);overflow-wrap:anywhere;margin:0;padding:10px 12px;font-size:13px;font-weight:600;line-height:1.4}.form-error:empty{display:none}.form-field-error{color:var(--danger);overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:1.4}.form-field-required{color:var(--danger);margin-left:3px}:is(input,textarea,select)[aria-invalid=true]{border-color:color-mix(in srgb, var(--danger) 60%, var(--border))}:is(input,textarea,select)[aria-invalid=true]:focus{border-color:var(--danger)}textarea{resize:vertical;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:60px;color:var(--text);outline:none;padding:10px 12px;font-family:inherit;font-size:13px}textarea:focus{border-color:var(--accent)}.form-input{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:38px;color:var(--text);outline:none;padding:8px 10px;font-family:inherit;font-size:13px}.form-input:focus{border-color:var(--accent)}.form-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.failover-target-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.data-table tr.alias-row.is-valid td{background:var(--alias-row-valid-bg)}.data-table tr.alias-row.is-valid:hover td{background:var(--alias-row-valid-bg-hover)}.data-table tr.alias-row:not(.is-valid) td{background:color-mix(in srgb, var(--accent) 10%, var(--bg-surface))}.data-table tr.alias-row:not(.is-valid):hover td{background:color-mix(in srgb, var(--accent) 16%, var(--bg-surface-hover))}.data-table tr.alias-row.is-disabled td{background:var(--bg-surface);opacity:.58}.data-table tr.alias-row.is-disabled:hover td{background:var(--bg-surface-hover);opacity:.72}.data-table tr.model-access-disabled-row td{background:color-mix(in srgb, var(--danger) 6%, var(--bg-surface))}.data-table tr.model-access-disabled-row:hover td{background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface-hover))}.workflow-section-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-section-head h4{font-size:14px;font-weight:700}.workflow-preview{flex-direction:column;gap:12px;display:flex}.workflow-feature-toggles{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.workflow-feature-toggle{border:1px solid var(--border);background:var(--bg);border-radius:10px;align-items:center;gap:10px;padding:10px 12px;font-size:14px;font-weight:500;display:flex}.workflow-feature-toggle input{width:16px;height:16px}.model-chart-section{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:24px;padding:24px}.model-chart-section h3{margin:0;font-size:16px;font-weight:600}.model-chart-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;display:flex}.bar-chart-wrap{width:100%;height:180px;position:relative}.form-select,.usage-log-select{appearance:none;background-color:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 17px),calc(100% - 12px);background-repeat:no-repeat;background-size:5px 5px;outline:none;min-width:140px;padding:8px 34px 8px 12px;font-family:inherit;font-size:13px}.form-select:disabled,.usage-log-select:disabled{cursor:not-allowed;opacity:.6}.form-select:focus,.usage-log-select:focus{border-color:var(--accent)}.form-select{width:100%;min-width:0}.usage-label-chips{flex-wrap:wrap;gap:4px;max-width:280px;display:inline-flex}.usage-label-chip{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg));min-height:20px;color:var(--text);white-space:nowrap;cursor:pointer;border-radius:999px;align-items:center;padding:1px 9px;font-family:inherit;font-size:11px;font-style:normal;font-weight:600;line-height:1.4;transition:background .15s,border-color .15s;display:inline-flex}.usage-label-chip:hover{background:color-mix(in srgb, var(--label-color,var(--accent)) 26%, var(--bg))}.usage-label-chip.active{background:color-mix(in srgb, var(--label-color,var(--accent)) 32%, var(--bg));border-color:var(--label-color,var(--accent));box-shadow:0 0 0 1px color-mix(in srgb, var(--label-color,var(--accent)) 55%, transparent)}@keyframes audit-live-summary-stripe-blink{0%,to{opacity:.9}50%{opacity:.28}}.audit-status-badge{border:1px solid var(--border);letter-spacing:.2px;background:var(--bg-surface);border-radius:999px;justify-content:center;align-items:center;min-width:46px;height:24px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.audit-status-badge.status-success{color:var(--success);border-color:color-mix(in srgb, var(--success) 50%, var(--border))}.audit-status-badge.status-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.audit-status-badge.status-error{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 50%, var(--border))}.audit-status-badge.status-neutral{color:var(--text-muted)}.audit-status-badge.status-unknown{color:var(--text-muted);border-color:color-mix(in srgb, var(--border) 75%, transparent)}.audit-pane{border:1px solid var(--border);background:var(--bg);border-top:0;border-radius:0 0 8px 8px;min-width:0;padding:12px}.audit-pane h5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:11px;font-weight:600}.audit-prompt-cache-pill{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);min-height:20px;color:var(--prompt-cache-color);letter-spacing:.02em;text-transform:none;border-radius:999px;align-items:center;padding:2px 8px;font-size:11px;font-weight:700;display:inline-flex}.audit-prompt-cache-highlight{color:var(--prompt-cache-color);font-weight:700}.audit-audio{white-space:normal;flex-direction:column;gap:8px;display:flex}.audit-audio-player{width:100%;max-width:420px;height:36px}.audit-audio-meta{color:var(--text-muted);font-size:12px}.audit-audio-empty{align-items:flex-start;padding:4px 0}.audit-audio-icon{font-size:20px;line-height:1}.audit-audio-note{color:var(--text-muted);font-size:12px}.audit-audio-metadata{flex-direction:column;gap:2px;margin-top:4px;font-size:12px;display:flex}.audit-audio-meta-row{gap:8px;display:flex}.audit-audio-meta-key{color:var(--text-muted);min-width:120px}.conversation-body-highlight{border-left:2px solid color-mix(in srgb, var(--accent) 70%, var(--border));background:color-mix(in srgb, var(--accent) 10%, transparent);cursor:pointer;line-height:inherit;border-radius:2px;margin:0 0 0 -2px;padding:0 0 0 2px;display:inline}.conversation-body-highlight:hover{background:color-mix(in srgb, var(--accent) 18%, transparent)}.conversation-body-highlight.conversation-system{border-left-color:color-mix(in srgb, var(--warning) 70%, var(--border));background:color-mix(in srgb, var(--warning) 10%, transparent)}.conversation-body-highlight.conversation-user{border-left-color:color-mix(in srgb, var(--accent) 75%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent)}.conversation-body-highlight.conversation-assistant{border-left-color:color-mix(in srgb, var(--success) 65%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.conversation-drawer{background:var(--bg-surface);border-left:1px solid var(--border);z-index:60;flex-direction:column;width:min(560px,100vw);transition:transform .2s ease-out;display:flex;position:fixed;top:0;bottom:0;right:0;transform:translate(100%);box-shadow:-16px 0 40px #0003}.conversation-drawer.open{transform:translate(0)}body.conversation-drawer-open{overflow:hidden}#interactions-drawer-content{flex:1;min-height:0;overflow-y:auto}.pagination{justify-content:space-between;align-items:center;padding:12px 0 0;display:flex}.btn{background:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 16px;font-family:inherit;font-size:13px;transition:all .15s}.btn:hover:not(:disabled){background:var(--bg-surface-hover)}.btn-primary{background:var(--accent);border-color:color-mix(in srgb, var(--accent) 70%, #000 10%);color:#fff;font-weight:600;box-shadow:0 10px 22px #3b82f62e}.btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 90%, #fff 10%);border-color:color-mix(in srgb, var(--accent) 78%, #000 12%)}.btn-danger-outline{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:0 0;font-weight:600}.btn-danger-outline:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 75%, var(--border))}.btn-danger{color:#fff;border-color:color-mix(in srgb, var(--danger) 76%, #000 12%);background:var(--danger);box-shadow:0 10px 22px color-mix(in srgb, var(--danger) 20%, transparent);font-weight:600}.btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 90%, #fff 10%);border-color:color-mix(in srgb, var(--danger) 82%, #000 14%)}.btn-with-icon{justify-content:center;align-items:center;gap:8px;display:inline-flex}.btn-with-icon .table-icon-svg{width:16px;height:16px}.btn:disabled{opacity:.4;cursor:default}.settings-panel{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.inline-help-section{flex-direction:column;gap:2px;display:flex}.inline-help-title-row{align-items:center;gap:10px;display:inline-flex}.inline-help-title-row h2,.inline-help-title-row h3{margin-bottom:0}.inline-help-title-row h2:empty,.inline-help-title-row h3:empty{display:none}.inline-help-toggle{border:1px solid color-mix(in srgb, var(--accent) 28%, var(--border));width:16px;height:16px;color:var(--accent);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:4px;justify-content:center;align-items:center;padding:0;transition:color .18s,border-color .18s;display:inline-flex;position:relative}.inline-help-toggle:before{content:"";pointer-events:auto;background:0 0;width:32px;height:32px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.inline-help-toggle:hover{border-color:color-mix(in srgb, var(--accent) 48%, var(--border));color:var(--text);background:0 0}.inline-help-toggle:active{background:0 0}.inline-help-toggle:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.inline-help-toggle-icon{justify-content:center;align-items:center;width:100%;height:100%;padding-bottom:1px;font-size:13px;font-weight:700;line-height:1;transition:transform .52s cubic-bezier(.22,.72,.12,1);display:inline-flex;transform:rotate(0)}.inline-help-copy{max-width:780px;color:var(--text-muted);margin-top:2px;font-size:14px}.settings-select{width:100%}.settings-refresh-section{border-top:1px solid var(--border);justify-items:start;gap:12px;margin-top:24px;padding-top:22px;display:grid}.settings-refresh-section h3{font-size:18px}.settings-refresh-section p{max-width:720px;color:var(--text-muted);font-size:14px;line-height:1.55}.budget-list{gap:10px;padding:10px 0;display:grid}.budget-row{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:minmax(0,1fr);align-items:center;gap:16px;padding:12px 14px;display:grid}.budget-row-main{min-width:0}.budget-row-head{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.budget-scope-value{width:fit-content;max-width:100%;min-height:24px;color:var(--text);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;justify-self:start;align-items:center;gap:5px;padding:2px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;display:inline-flex;overflow:hidden}.budget-user-path{border:1px solid color-mix(in srgb, var(--accent) 32%, var(--border));background:color-mix(in srgb, var(--accent) 9%, var(--bg))}.budget-label{border:1px solid color-mix(in srgb, var(--label-color,var(--accent)) 45%, var(--border));background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.budget-scope-icon{stroke-width:2.2px;opacity:.85;flex:0 0 12px;width:12px;height:12px}.budget-row-meta{min-width:0;color:var(--text-muted);align-items:center;gap:8px;font-size:12px;display:inline-flex}.budget-source{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:999px;padding:2px 7px;font-size:11px}.budget-row-period{justify-content:center;min-width:0;display:flex}.budget-row-controls{justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.budget-bars{gap:6px;margin-top:10px;display:grid}.budget-bar-line{grid-template-columns:118px minmax(0,1fr);align-items:center;gap:10px;display:grid}.budget-bar-label{color:var(--text-muted);justify-content:space-between;align-items:center;gap:6px;font-size:11px;line-height:1;display:flex}.budget-bar-percent{font-weight:700}.budget-bar-track{background:color-mix(in srgb, var(--border) 75%, var(--bg));border-radius:999px;height:16px;position:relative;overflow:hidden}.budget-bar-fill{border-radius:inherit;min-width:0;height:100%;transition:width .2s}.budget-bar-fill-usage{background:color-mix(in srgb, var(--success) 82%, var(--accent))}.budget-bar-fill-danger{background:var(--danger)}.budget-bar-text-row{z-index:1;pointer-events:none;color:var(--text);position:absolute;inset:0}.budget-bar-text{text-overflow:ellipsis;white-space:nowrap;max-width:min(44%,190px);font-size:11px;font-weight:700;line-height:12px;position:absolute;top:50%;overflow:hidden}.budget-bar-text-center{max-width:min(46%,240px);left:50%;transform:translate(-50%,-50%)}.budget-bar-text-end{text-align:right;max-width:min(34%,180px);right:8px;transform:translateY(-50%)}.budget-period-label{border:1px solid var(--border);color:var(--text);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;gap:5px;padding:2px 7px;font-size:11px;font-weight:600;display:inline-flex}.budget-period-icon{stroke-width:2.2px;flex:0 0 12px;width:12px;height:12px}.budget-period-label-monthly{border-color:color-mix(in srgb, #30302c 62%, var(--border));background:color-mix(in srgb, #30302c 12%, var(--bg));color:color-mix(in srgb, #30302c 34%, var(--text) 66%)}.budget-period-label-weekly{border-color:color-mix(in srgb, #68765c 62%, var(--border));background:color-mix(in srgb, #68765c 12%, var(--bg));color:color-mix(in srgb, #68765c 34%, var(--text) 66%)}.budget-period-label-daily{border-color:color-mix(in srgb, #b5652d 62%, var(--border));background:color-mix(in srgb, #b5652d 12%, var(--bg));color:color-mix(in srgb, #b5652d 34%, var(--text) 66%)}.budget-period-label-hourly{border-color:color-mix(in srgb, #783f22 62%, var(--border));background:color-mix(in srgb, #783f22 12%, var(--bg));color:color-mix(in srgb, #783f22 34%, var(--text) 66%)}.budget-period-label-custom{border-style:dashed;border-color:color-mix(in srgb, #bfa584 68%, var(--border));background:color-mix(in srgb, #bfa584 16%, var(--bg));color:color-mix(in srgb, #8b6f4f 34%, var(--text) 66%)}[data-theme=light] .budget-period-label-monthly{color:#30302c}[data-theme=light] .budget-period-label-weekly{color:#68765c}[data-theme=light] .budget-period-label-daily{color:#b5652d}[data-theme=light] .budget-period-label-hourly{color:#783f22}[data-theme=light] .budget-period-label-custom{color:#8b6f4f}@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .budget-period-label-monthly{color:#30302c}:root:not([data-theme=dark]) .budget-period-label-weekly{color:#68765c}:root:not([data-theme=dark]) .budget-period-label-daily{color:#b5652d}:root:not([data-theme=dark]) .budget-period-label-hourly{color:#783f22}:root:not([data-theme=dark]) .budget-period-label-custom{color:#8b6f4f}}.budget-row-actions{flex-flow:wrap;justify-content:flex-end;align-items:center;gap:6px;display:flex}.budget-action-btn{white-space:nowrap;justify-content:center;gap:0;width:28px;min-width:0;height:28px;padding:0;transition:width .18s,border-color .15s,background .15s,color .15s;overflow:hidden}.budget-action-btn:hover,.budget-action-btn:focus-visible{gap:6px;width:82px;padding:0 9px}.budget-action-label{opacity:0;max-width:0;transition:max-width .18s,opacity .12s;overflow:hidden}.budget-action-btn:hover .budget-action-label,.budget-action-btn:focus-visible .budget-action-label{opacity:1;max-width:58px}.budget-action-btn-warning{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 50%, var(--border))}.budget-action-icon{flex:0 0 14px;width:14px;height:14px}.budget-editor{background:color-mix(in srgb, var(--bg-surface) 86%, var(--bg) 14%)}.budget-settings-actions{flex-wrap:wrap;gap:10px;display:flex}.budget-reset-dialog{max-width:460px}.form-action-icon{flex:0 0 16px;width:16px;height:16px}.settings-refresh-alert{margin-top:16px;margin-bottom:0}@media (width<=768px){.badge{display:none}.content{width:100%;margin:0 auto;padding:20px}.auth-dialog{padding:18px}.auth-dialog-actions{flex-direction:column-reverse}.auth-dialog-actions .btn{width:100%}.cards{grid-template-columns:repeat(2,1fr)}.page-header{flex-wrap:wrap;gap:12px}.page-header h2{width:100%}.page-header-controls{flex-wrap:wrap;justify-content:space-between;width:100%}.page-with-sticky-date{grid-template-columns:minmax(0,1fr)}.page-with-sticky-date>.date-range-page-header,.page-with-sticky-date>.sticky-date-range{grid-column:1}.page-with-sticky-date>.date-range-page-header{margin-bottom:12px}.page-with-sticky-date>.sticky-date-range{width:100%;margin-bottom:24px;top:10px}.sticky-date-range .date-picker-trigger{justify-content:space-between;width:100%}.usage-log-select{min-width:0}.budget-row{grid-template-columns:1fr}.budget-row-controls{flex-wrap:wrap}.budget-bar-line{grid-template-columns:1fr;gap:5px}.form-grid,.workflow-feature-toggles{grid-template-columns:1fr}.workflow-section-head{flex-direction:column;align-items:flex-start}.table-toolbar{flex-direction:column;align-items:stretch}.table-toolbar-actions{justify-content:stretch;margin-left:0}.table-toolbar-actions .btn{width:100%}.model-editor{padding:16px}.alias-actions-cell,.editor-header{flex-direction:column;align-items:flex-start}.alias-actions-cell .table-action-btn,.editor-header .table-action-btn{width:100%}.alias-actions-cell .table-icon-btn,.editor-header .table-icon-btn{width:36px}.model-list-actions{flex-flow:row;align-items:center}.model-list-actions .table-action-btn{width:auto}.model-list-actions .table-icon-btn{flex-basis:32px;width:32px}.model-editor .editor-header{flex-direction:row;align-items:flex-start}.model-editor .editor-header>:first-child{flex:1;min-width:0}.model-editor .editor-header .dialog-close-btn{flex:0 0 32px;align-self:flex-start;width:32px;min-width:32px}.conversation-drawer{width:100%}.settings-panel{padding:18px}.budget-settings-actions,.budget-settings-actions .btn{width:100%}}.workflow-conn{background:color-mix(in srgb, var(--accent) 44%, var(--border));flex:1 1 0;width:auto;min-width:13px;height:2px;position:relative}.workflow-conn:after{content:"";background:color-mix(in srgb, var(--accent) 44%, var(--border));clip-path:polygon(0 0,100% 50%,0 100%);width:7px;height:9px;position:absolute;top:50%;right:-1px;transform:translateY(-50%)}.workflow-node{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg-surface);text-align:center;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:4px;min-width:72px;padding:8px 12px;display:flex}.auth-key-description{color:var(--text-muted);max-width:220px;font-size:13px}.auth-key-status-badge{border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;display:inline-block}.auth-key-status-active{background:color-mix(in srgb, var(--success) 12%, var(--bg));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));color:var(--success)}.auth-key-status-inactive{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border:1px solid color-mix(in srgb, var(--danger) 30%, var(--border));color:var(--danger)}.mcp-server-advanced{border:1px solid var(--border);border-radius:var(--radius);background:color-mix(in srgb, var(--bg-surface) 72%, var(--bg) 28%);overflow:hidden}.mcp-server-advanced>summary{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;list-style:none;display:flex}.mcp-server-advanced>summary::-webkit-details-marker{display:none}.mcp-server-advanced>summary:after{border-right:2px solid var(--text-muted);border-bottom:2px solid var(--text-muted);content:"";flex:none;width:7px;height:7px;transition:transform .15s;transform:rotate(45deg)}.mcp-server-advanced[open]>summary:after{transform:rotate(225deg)}.mcp-server-advanced-summary-copy{flex-direction:column;gap:2px;min-width:0;display:flex}.mcp-server-advanced-title{font-size:13px;font-weight:600}.mcp-server-advanced-fields{border-top:1px solid var(--border);flex-direction:column;gap:16px;padding:14px;display:flex}.copy-feedback-btn{align-items:center;gap:6px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.rate-limit-pressure-row{background-image:linear-gradient(to right, color-mix(in srgb, var(--success) 16%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-high{background-image:linear-gradient(to right, color-mix(in srgb, var(--warning) 20%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.rate-limit-pressure-row.rate-limit-pressure-full{background-image:linear-gradient(to right, color-mix(in srgb, var(--danger) 22%, transparent) var(--rate-limit-pressure,0%), transparent var(--rate-limit-pressure,0%))}.table-icon-btn.rate-limit-gauge-inherited{color:var(--accent-strong,var(--accent));background:linear-gradient(to right, color-mix(in srgb, var(--accent) 22%, var(--bg)) 50%, var(--bg) 50%);border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.auth-dialog-input-icon{width:16px;height:16px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.auth-dialog-input-shell:focus-within .auth-dialog-input-icon{color:var(--accent)}.auth-dialog-submit-icon{flex:0 0 16px;width:16px;height:16px}.nav-icon{flex:0 0 18px;width:18px;height:18px}.api-key-open-icon{flex:0 0 15px;width:15px;height:15px}.theme-icon{flex:0 0 14px;width:14px;height:14px}.theme-toggle-mobile .theme-icon{flex-basis:16px;width:16px;height:16px}@media (width<=768px){.sidebar-footer .api-key-open-icon{flex-basis:16px;width:16px;height:16px}}.failover-drafts-loading{min-height:96px}.models-loading-state{top:16px;left:var(--sidebar-width);z-index:110;pointer-events:none;--loading-state-min-height:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-surface);width:fit-content;box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);margin:0 auto;padding:10px 14px;position:fixed;right:0}@media (width<=768px){.models-loading-state{left:60px}}.sidebar.sidebar-collapsed~.content .models-loading-state{left:60px}.alias-create-icon{flex:0 0 16px;width:16px;height:16px}.pricing-override-remove-row{margin-bottom:1px}@media (width<=768px){.pricing-override-remove-row{margin-bottom:0}}.pricing-recalculate-dialog{max-width:480px}.settings-refresh-btn.is-refreshing .settings-refresh-icon{transform-origin:50%;animation:.8s linear infinite loading-spin}.cost-source-icon{width:14px;height:14px;color:var(--success);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.cache-savings-icon{width:14px;height:14px;color:var(--accent);cursor:help;vertical-align:-2px;stroke-width:2px;margin-left:4px}.theme-toggle.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;margin-bottom:10px;padding:2px;display:inline-flex}.theme-btn.svelte-1keql7b{width:28px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:flex}.theme-btn.svelte-1keql7b:hover{color:var(--text)}.theme-btn.active.svelte-1keql7b{background:var(--accent);color:#fff}.theme-btn.svelte-1keql7b:focus-visible,.theme-toggle-mobile.svelte-1keql7b:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.theme-toggle-mobile.svelte-1keql7b{background:var(--bg);border:1px solid var(--border);width:36px;height:36px;color:var(--text-muted);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:none}.theme-toggle-mobile.svelte-1keql7b:hover{color:var(--text)}.theme-toggle.is-compact.svelte-1keql7b{display:none}.theme-toggle-mobile.is-compact.svelte-1keql7b{margin:0 auto;display:flex}@media (width<=768px){.theme-toggle.svelte-1keql7b{display:none}.theme-toggle-mobile.svelte-1keql7b{margin:0 auto;display:flex}}.sidebar.svelte-1nwtzae{flex:0 0 var(--sidebar-width);width:var(--sidebar-width);background:var(--bg-surface);border-right:1px solid var(--border);-webkit-overflow-scrolling:touch;z-index:10;flex-direction:column;max-height:100vh;transition:flex-basis .2s,width .2s;display:flex;position:sticky;top:0;overflow-y:auto}.sidebar-header.svelte-1nwtzae{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:20px;display:flex}.sidebar-logo.svelte-1nwtzae{width:28px;height:28px;color:var(--accent);flex-shrink:0}.sidebar-logo.svelte-1nwtzae svg{width:100%;height:100%}.sidebar-header.svelte-1nwtzae h1{letter-spacing:-.3px;font-size:18px;font-weight:700}.sidebar-nav.svelte-1nwtzae{flex-direction:column;flex:1;gap:4px;padding:12px;display:flex}.nav-item.svelte-1nwtzae{border-radius:var(--radius);color:var(--text-muted);align-items:center;gap:10px;padding:8px 12px;font-size:14px;font-weight:500;text-decoration:none;transition:all .15s;display:flex}.nav-item.svelte-1nwtzae:hover{background:var(--bg-surface-hover);color:var(--text)}.nav-item.active.svelte-1nwtzae{background:var(--accent);color:#fff}.sidebar-footer.svelte-1nwtzae{border-top:1px solid var(--border);padding:16px}.api-key-section.svelte-1nwtzae{gap:8px;display:grid}.api-key-open-btn.svelte-1nwtzae{border:1px solid var(--accent);border-radius:var(--radius);width:100%;color:var(--accent);cursor:pointer;background:0 0;justify-content:center;align-items:center;gap:8px;padding:8px 10px;font-family:inherit;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.api-key-open-btn.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);border-color:color-mix(in srgb, var(--accent) 78%, var(--text));color:color-mix(in srgb, var(--accent) 78%, var(--text))}.api-key-open-btn.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.sidebar-toggle.svelte-1nwtzae{cursor:w-resize;z-index:11;background:0 0;border:none;flex:0 0 6px;width:6px;height:100vh;padding:0;transition:background .15s;position:sticky;top:0}.sidebar-toggle.svelte-1nwtzae:hover{background:color-mix(in srgb, var(--accent) 15%, transparent)}.sidebar-toggle.collapsed.svelte-1nwtzae{cursor:e-resize}.sidebar-toggle.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.sidebar.sidebar-collapsed.svelte-1nwtzae{flex-basis:60px;width:60px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae){justify-content:center;padding:16px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-header:where(.svelte-1nwtzae) h1,.sidebar.sidebar-collapsed.svelte-1nwtzae .badge{display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-nav:where(.svelte-1nwtzae) .nav-item:where(.svelte-1nwtzae) span{display:none}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae){padding:8px}.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae){display:none}@media (width<=768px){.sidebar.svelte-1nwtzae{flex-basis:60px;width:60px}.sidebar-header.svelte-1nwtzae{justify-content:center;padding:16px}.sidebar-header.svelte-1nwtzae h1{display:none}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae){justify-content:center;padding:10px}.sidebar-nav.svelte-1nwtzae .nav-item:where(.svelte-1nwtzae) span{display:none}.sidebar-footer.svelte-1nwtzae{gap:8px;padding:8px;display:grid}.sidebar-footer.svelte-1nwtzae .api-key-section:where(.svelte-1nwtzae),.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .api-key-section:where(.svelte-1nwtzae){display:grid}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae){justify-self:center;width:36px;height:36px;min-height:36px;padding:0}.sidebar-footer.svelte-1nwtzae .api-key-open-btn:where(.svelte-1nwtzae) span,.sidebar-toggle.svelte-1nwtzae{display:none}}.dialog-close-btn.svelte-11l1bb5{background:var(--bg);border:1px solid var(--border);width:32px;min-width:32px;height:32px;color:var(--text-muted);cursor:pointer;font:inherit;border-radius:6px;flex:0 0 32px;justify-content:center;align-items:center;padding:0;line-height:1;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.dialog-close-btn.svelte-11l1bb5:hover{color:var(--text);background:var(--bg-surface-hover)}.dialog-close-btn.svelte-11l1bb5:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}.auth-dialog-backdrop.svelte-17e0w4c,.editor-modal-backdrop.svelte-17e0w4c{z-index:80;background:#0000007a;position:fixed;inset:0}.auth-dialog-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.editor-modal-shell.svelte-17e0w4c{z-index:90;place-items:center;padding:20px;display:grid;position:fixed;inset:0;overflow-y:auto}.editor-modal-shell.svelte-17e0w4c>*{overscroll-behavior:contain;width:min(760px,100%);max-height:min(100vh - 40px,960px);margin:0;overflow:auto;box-shadow:0 24px 70px #00000061}@media (width<=768px){.auth-dialog-shell.svelte-17e0w4c,.editor-modal-shell.svelte-17e0w4c{align-items:end;padding:12px}.editor-modal-shell.svelte-17e0w4c>*{max-height:calc(100vh - 24px)}}.auth-dialog-input-shell.svelte-1dsu6u0{position:relative}.auth-dialog-input.svelte-1dsu6u0{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);outline:none;padding:11px 12px 11px 38px;font-family:inherit;font-size:14px}.auth-dialog-input.svelte-1dsu6u0:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent)}.flash-region.svelte-1i257xg{top:16px;left:var(--sidebar-width);z-index:120;pointer-events:none;flex-direction:column;align-items:center;gap:10px;display:flex;position:fixed;right:0}.sidebar.sidebar-collapsed~.flash-region.svelte-1i257xg{left:60px}@media (width<=768px){.flash-region.svelte-1i257xg{left:60px}}.flash-toast.svelte-1i257xg{border-radius:var(--radius);pointer-events:auto;align-items:flex-start;gap:10px;width:max-content;max-width:min(480px,100% - 32px);padding:12px 12px 12px 16px;font-size:14px;animation:.9s ease-out svelte-1i257xg-flash-toast-glow;display:flex;box-shadow:0 10px 30px #00000059}@keyframes svelte-1i257xg-flash-toast-glow{0%{box-shadow:0 0 0 4px color-mix(in srgb, currentColor 45%, transparent), 0 10px 30px #00000059}to{box-shadow:0 0 0 4px #0000,0 10px 30px #00000059}}@media (prefers-reduced-motion:reduce){.flash-toast.svelte-1i257xg{animation:none}}.flash-toast-success.svelte-1i257xg{background:color-mix(in srgb, var(--success) 14%, var(--bg-surface));color:var(--success);border:1px solid #34d39959}.flash-toast-error.svelte-1i257xg{background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--warning);border:1px solid #f59e0b66}.flash-toast-text.svelte-1i257xg{overflow-wrap:anywhere;flex:1;min-width:0}.flash-toast-dismiss.svelte-1i257xg{color:inherit;cursor:pointer;opacity:.7;background:0 0;border:0;flex-shrink:0;padding:0 2px;font-size:18px;line-height:1}.flash-toast-dismiss.svelte-1i257xg:hover{opacity:1}.demo-mode-banner.svelte-1s3mcn8{border:1px solid color-mix(in srgb, var(--warning) 55%, var(--border));border-radius:var(--radius);background:color-mix(in srgb, var(--warning) 14%, var(--bg-surface));color:var(--text);box-shadow:0 8px 24px color-mix(in srgb, var(--bg) 70%, transparent);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;margin-bottom:24px;padding:12px 16px;display:grid}.demo-mode-banner-icon.svelte-1s3mcn8{width:20px;height:20px;color:var(--warning);flex:0 0 20px}.demo-mode-banner-copy.svelte-1s3mcn8{align-items:baseline;gap:8px;min-width:0;font-size:13px;display:flex}.demo-mode-banner.svelte-1s3mcn8 strong{color:var(--warning);letter-spacing:.06em;text-transform:uppercase;flex-shrink:0;font-size:12px}.demo-mode-banner-links.svelte-1s3mcn8{justify-content:flex-end;align-items:center;gap:6px;display:flex}.demo-mode-banner-links.svelte-1s3mcn8 a{border:1px solid color-mix(in srgb, var(--warning) 42%, var(--border));border-radius:var(--radius);min-height:28px;color:var(--text);white-space:nowrap;align-items:center;padding:4px 8px;font-size:12px;font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.demo-mode-banner-links.svelte-1s3mcn8 a:hover{border-color:var(--warning);background:color-mix(in srgb, var(--warning) 16%, transparent);color:var(--text)}.demo-mode-banner-links.svelte-1s3mcn8 a:focus-visible{outline:2px solid color-mix(in srgb, var(--warning) 42%, transparent);outline-offset:2px}@media (width<=768px){.demo-mode-banner.svelte-1s3mcn8{grid-template-columns:auto minmax(0,1fr);align-items:flex-start}.demo-mode-banner-copy.svelte-1s3mcn8{gap:2px;display:grid}.demo-mode-banner-links.svelte-1s3mcn8{flex-wrap:wrap;grid-column:2;justify-content:flex-start}}.auth-banner.svelte-1c5yh36{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.dp-calendar.svelte-g7ga4u{flex-shrink:0;width:224px}.dp-cal-header.svelte-g7ga4u{justify-content:space-between;align-items:center;margin-bottom:8px;padding:0 4px;display:flex}.dp-cal-title.svelte-g7ga4u{font-size:13px;font-weight:600}.dp-nav-btn.svelte-g7ga4u{width:28px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;transition:all .15s;display:flex}.dp-nav-btn.svelte-g7ga4u:hover{background:var(--bg-surface-hover);color:var(--text)}.dp-nav-btn.svelte-g7ga4u:disabled{opacity:.3;cursor:default;pointer-events:none}.dp-nav-prev-mobile.svelte-g7ga4u{display:none}.dp-weekdays.svelte-g7ga4u{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:4px;display:grid}.dp-weekdays.svelte-g7ga4u span:where(.svelte-g7ga4u){color:var(--text-muted);padding:4px 0;font-size:11px;font-weight:600}.dp-days.svelte-g7ga4u{grid-template-columns:repeat(7,1fr);gap:1px;display:grid}.dp-day.svelte-g7ga4u{width:32px;height:32px;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-family:inherit;font-size:12px;transition:all .1s;display:flex}.dp-day.svelte-g7ga4u:hover:not(.disabled):not(.other-month){background:var(--bg-surface-hover)}.dp-day.other-month.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default}.dp-day.today.svelte-g7ga4u{color:var(--accent);box-shadow:inset 0 0 0 1.5px var(--accent);font-weight:700}.dp-day.in-range.svelte-g7ga4u{background:color-mix(in srgb, var(--accent) 15%, transparent);border-radius:0}.dp-day.range-start.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:6px 0 0 6px;font-weight:600}.dp-day.range-end.svelte-g7ga4u{background:var(--accent);color:#fff;border-radius:0 6px 6px 0;font-weight:600}.dp-day.range-start.range-end.svelte-g7ga4u{border-radius:6px}.dp-day.range-start.today.svelte-g7ga4u,.dp-day.range-end.today.svelte-g7ga4u{box-shadow:none}.dp-day.disabled.svelte-g7ga4u{color:var(--text-muted);opacity:.3;cursor:default;pointer-events:none}@media (width<=768px){.dp-nav-prev-mobile.svelte-g7ga4u{display:flex}}.date-picker.svelte-ax7ma4{position:relative}.date-picker-trigger.svelte-ax7ma4{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);cursor:pointer;white-space:nowrap;align-items:center;gap:8px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s;display:inline-flex}.date-picker-trigger.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.date-picker-trigger.svelte-ax7ma4 svg:where(.svelte-ax7ma4){color:var(--text-muted);flex-shrink:0}.date-picker-chevron.svelte-ax7ma4{transition:transform .15s}.date-picker-chevron.open.svelte-ax7ma4{transform:rotate(180deg)}.date-picker-dropdown.svelte-ax7ma4{z-index:100;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 8px 24px #00000040}.date-picker-presets.svelte-ax7ma4{border-right:1px solid var(--border);flex-direction:column;gap:2px;min-width:140px;padding:8px;display:flex}.preset-btn.svelte-ax7ma4{color:var(--text);text-align:left;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:8px 12px;font-family:inherit;font-size:13px;transition:all .15s}.preset-btn.svelte-ax7ma4:hover{background:var(--bg-surface-hover)}.preset-btn.active.svelte-ax7ma4{background:var(--accent);color:#fff}.date-picker-calendars.svelte-ax7ma4{flex-wrap:nowrap;gap:16px;padding:12px;display:flex}.dp-cursor-hint.svelte-ax7ma4{pointer-events:none;z-index:101;background:var(--bg-surface);color:var(--text);border:1px solid var(--accent);white-space:nowrap;border-radius:4px;align-items:center;gap:5px;padding:3px 8px;font-size:11px;font-weight:500;display:flex;position:fixed;transform:translate(12px,-50%)}.dp-cursor-hint.svelte-ax7ma4 svg:where(.svelte-ax7ma4){width:12px;height:12px;color:var(--accent);flex-shrink:0}@media (width<=768px){.date-picker-dropdown.svelte-ax7ma4{border-radius:var(--radius) var(--radius) 0 0;flex-direction:column;max-height:80vh;position:fixed;inset:auto 0 0;overflow-y:auto}.date-picker-presets.svelte-ax7ma4{-webkit-overflow-scrolling:touch;border-right:none;border-bottom:1px solid var(--border);flex-flow:row;min-width:0;overflow-x:auto}.date-picker-calendars.svelte-ax7ma4{justify-content:center}.date-picker-calendars.svelte-ax7ma4>.dp-calendar:first-child{display:none}}.segmented-control.svelte-92fh5i{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.segmented-btn.svelte-92fh5i{color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:5px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .15s;display:flex}.segmented-btn.svelte-92fh5i:hover{color:var(--text)}.segmented-btn.active.svelte-92fh5i{background:var(--accent);color:#fff}@media (width<=768px){.segmented-btn.svelte-92fh5i{padding:4px 8px;font-size:11px}}.live-tokens.svelte-17qr2ta{margin-bottom:28px}.live-tokens-heading.svelte-17qr2ta{flex-direction:column;gap:2px;display:flex}.live-tokens-subtitle.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.live-tokens-legend.svelte-17qr2ta{flex-wrap:wrap;gap:8px 18px;margin-bottom:16px;display:flex}.live-tokens-legend-item.svelte-17qr2ta{color:var(--text-muted);align-items:center;gap:7px;font-size:12px;display:inline-flex}.live-tokens-swatch.svelte-17qr2ta{border-radius:2px;flex-shrink:0;width:10px;height:10px}.live-tokens-legend-value.svelte-17qr2ta{color:var(--text);font-weight:600}.live-tokens-empty.svelte-17qr2ta .live-tokens-empty-text:where(.svelte-17qr2ta){color:var(--text-muted);font-size:13px}.provider-status-flag.svelte-6tr9cf{grid-column:span 2}.provider-status-overview-card.svelte-6tr9cf{grid-column:span 1}.provider-status-flag.is-healthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, var(--bg-surface))}.provider-status-flag.is-degraded.svelte-6tr9cf{border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-flag.is-unhealthy.svelte-6tr9cf{border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg-surface))}.provider-status-value.svelte-6tr9cf{margin-bottom:8px}.provider-status-card-link.svelte-6tr9cf{color:var(--accent-strong,var(--accent));font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;margin:0;padding:0;font-size:13px;font-weight:600}.provider-status-card-link.svelte-6tr9cf:hover{color:var(--text);text-decoration:underline}.provider-status-card-link.svelte-6tr9cf:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:3px;border-radius:4px}.provider-status-card-note.svelte-6tr9cf{color:var(--text-muted);font-size:13px;display:block}@media (width>=720px){.card-wide.svelte-6tr9cf{grid-column:span 2}}.cache-token-value.svelte-6tr9cf{flex-wrap:wrap;align-items:center;gap:6px;line-height:1;display:flex}.cache-token-part.svelte-6tr9cf{align-items:center;display:inline-flex}.cache-token-operator.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;font-size:24px;font-weight:600;line-height:1}.cache-token-marker.svelte-6tr9cf{color:var(--text-muted);letter-spacing:0;text-transform:uppercase;margin-left:2px;font-size:14px;font-weight:700}.prompt-cache-gauge.svelte-6tr9cf{width:120px;height:60px;margin:8px auto 0;position:relative;overflow:hidden}.prompt-cache-gauge.svelte-6tr9cf canvas{display:block}.prompt-cache-gauge-value.svelte-6tr9cf{text-align:center;color:var(--text);font-size:18px;font-weight:700;line-height:1;position:absolute;bottom:4px;left:0;right:0}@media (width<=768px){.provider-status-flag.svelte-6tr9cf{grid-column:span 1}}.mcp-servers-flag.svelte-6tr9cf{grid-column:span 1}.cache-meter-header.svelte-1yzecxj{flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-bottom:16px;display:flex}.cache-meter-header.svelte-1yzecxj h3{font-size:16px;font-weight:600}.cache-meter-subtitle.svelte-1yzecxj{color:var(--text-muted);font-size:13px}.cache-meter-bar.svelte-1yzecxj{background:var(--bg-surface-hover);border-radius:6px;width:100%;height:28px;display:flex;overflow:hidden}.cache-meter-segment.svelte-1yzecxj{justify-content:center;align-items:center;min-width:3px;height:100%;transition:width .3s;display:flex;overflow:hidden}.cache-meter-segment-label.svelte-1yzecxj{color:#fff;white-space:nowrap;text-shadow:0 1px 2px #00000073;font-size:12px;font-weight:600;line-height:1}.cache-meter-segment.svelte-1yzecxj+.cache-meter-segment:where(.svelte-1yzecxj){box-shadow:-1px 0 0 var(--bg-surface)}.cache-meter-bar.is-empty.svelte-1yzecxj{background:var(--bg-surface-hover);justify-content:center;align-items:center;height:auto;min-height:28px;padding:6px 12px}.cache-meter-legend.svelte-1yzecxj{flex-wrap:wrap;gap:10px 24px;margin-top:16px;display:flex}.cache-meter-legend-item.svelte-1yzecxj{align-items:center;gap:8px;font-size:13px;display:flex}.cache-meter-swatch.svelte-1yzecxj{border-radius:3px;flex-shrink:0;width:12px;height:12px}.cache-meter-legend-label.svelte-1yzecxj{color:var(--text)}.cache-meter-legend-pct.svelte-1yzecxj{color:var(--text);font-weight:600}.cache-meter-legend-tokens.svelte-1yzecxj{color:var(--text-muted)}.cache-meter-empty.svelte-1yzecxj{color:var(--text-muted);text-align:center;font-size:13px}.spinner.svelte-b54l9o{width:var(--spinner-size);height:var(--spinner-size);border:2px solid var(--border,#80808059);border-top-color:var(--accent,currentColor);border-radius:50%;flex:none;animation:.7s linear infinite svelte-b54l9o-spinner-rotate;display:inline-block}@keyframes svelte-b54l9o-spinner-rotate{to{transform:rotate(360deg)}}.contribution-calendar-section.svelte-3hfxuq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);margin-top:24px;padding:24px}.contribution-calendar-header.svelte-3hfxuq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.contribution-calendar-header.svelte-3hfxuq h3{font-size:16px;font-weight:600}.contribution-calendar-grid-wrapper.svelte-3hfxuq{gap:8px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq{flex-direction:column;gap:2px;padding-top:22px;display:flex}.contribution-calendar-day-labels.svelte-3hfxuq span{height:13px;color:var(--text-muted);text-align:right;min-width:28px;font-size:10px;line-height:13px}.contribution-calendar-scroll.svelte-3hfxuq{--contribution-week-size:13px;--contribution-week-gap:2px;flex:1;min-width:0;overflow-x:auto}.contribution-calendar-months.svelte-3hfxuq{grid-auto-columns:var(--contribution-week-size);gap:var(--contribution-week-gap);grid-auto-flow:column;height:16px;margin-bottom:6px;display:grid}.contribution-calendar-month-label.svelte-3hfxuq{color:var(--text-muted);white-space:nowrap;font-size:10px}.contribution-calendar-grid.svelte-3hfxuq{gap:var(--contribution-week-gap);display:flex}.contribution-calendar-week.svelte-3hfxuq{flex-direction:column;gap:2px;display:flex}.contribution-calendar-cell.svelte-3hfxuq{width:var(--contribution-week-size);height:var(--contribution-week-size);background:var(--cal-level-0);border-radius:2px}.contribution-calendar-cell.level-1.svelte-3hfxuq{background:var(--cal-level-1)}.contribution-calendar-cell.level-2.svelte-3hfxuq{background:var(--cal-level-2)}.contribution-calendar-cell.level-3.svelte-3hfxuq{background:var(--cal-level-3)}.contribution-calendar-cell.level-4.svelte-3hfxuq{background:var(--cal-level-4)}.contribution-calendar-cell.level-5.svelte-3hfxuq{background:var(--cal-level-5)}.contribution-calendar-cell.level-6.svelte-3hfxuq{background:var(--cal-level-6)}.contribution-calendar-cell.level-7.svelte-3hfxuq{background:var(--cal-level-7)}.contribution-calendar-cell.level-8.svelte-3hfxuq{background:var(--cal-level-8)}.contribution-calendar-cell.level-9.svelte-3hfxuq{background:var(--cal-level-9)}.contribution-calendar-cell.level-10.svelte-3hfxuq{background:var(--cal-level-10)}.contribution-calendar-cell.empty.svelte-3hfxuq{background:0 0}.contribution-calendar-footer.svelte-3hfxuq{justify-content:space-between;align-items:center;gap:12px;margin-top:12px;display:flex}.contribution-calendar-meta.svelte-3hfxuq{flex-direction:column;gap:4px;display:flex}.contribution-calendar-summary.svelte-3hfxuq{color:var(--text-muted);font-size:12px}.contribution-calendar-legend.svelte-3hfxuq{color:var(--text-muted);align-items:center;gap:4px;font-size:11px;display:flex}.contribution-calendar-legend.svelte-3hfxuq .contribution-calendar-cell:where(.svelte-3hfxuq){cursor:default;width:11px;height:11px}.contribution-calendar-tooltip.svelte-3hfxuq{z-index:200;background:var(--bg-surface);color:var(--text);border:1px solid var(--border);white-space:nowrap;pointer-events:none;border-radius:4px;padding:4px 8px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;position:fixed;transform:translate(-50%);box-shadow:0 4px 12px #0003}@media (width<=768px){.contribution-calendar-day-labels.svelte-3hfxuq{display:none}.contribution-calendar-section.svelte-3hfxuq{padding:16px}.contribution-calendar-footer.svelte-3hfxuq{flex-direction:column;align-items:flex-start}}.inline-help-toggle.is-open.svelte-y40or3{color:var(--text);background:0 0}.inline-help-toggle.is-open.svelte-y40or3 .inline-help-toggle-icon{transform:rotate(540deg)}.audit-stats-section.svelte-14e9yan{margin-top:24px}.audit-stats-header.svelte-14e9yan{align-items:flex-start}.audit-stats-kpis.svelte-14e9yan{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.audit-stats-kpi.svelte-14e9yan{color:var(--text-muted);white-space:nowrap;align-items:center;gap:6px;font-size:12px;display:inline-flex}.audit-stats-kpi-value.svelte-14e9yan{color:var(--text);font-size:13px}.audit-stats-kpi-dot.svelte-14e9yan{border-radius:2px;flex-shrink:0;width:8px;height:8px}.audit-stats-dot-2xx.svelte-14e9yan{background:var(--success)}.audit-stats-dot-4xx.svelte-14e9yan{background:var(--warning)}.audit-stats-dot-5xx.svelte-14e9yan{background:var(--danger)}.provider-status-details.svelte-6y9wjv{opacity:0;grid-template-rows:0fr;transition:grid-template-rows .28s,opacity .22s;display:grid}.provider-status-details.is-expanded.svelte-6y9wjv{opacity:1;grid-template-rows:1fr}.provider-status-details.is-collapsed.svelte-6y9wjv{pointer-events:none}.provider-status-details-inner.svelte-6y9wjv{flex-direction:column;gap:14px;min-height:0;display:flex;overflow:hidden}.provider-status-reason.svelte-6y9wjv{color:var(--text-muted);font-size:13px}.provider-status-error.svelte-6y9wjv{color:var(--danger);overflow-wrap:break-word;font-size:12px}.provider-status-config-label.svelte-6y9wjv{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-config.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;padding-top:12px;display:flex}.provider-status-config-row.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-config-value.svelte-6y9wjv{color:var(--text);overflow-wrap:break-word;font-size:13px;display:block}.provider-status-health.svelte-6y9wjv{border-top:1px solid var(--border);flex-direction:column;gap:10px;margin-bottom:12px;padding-top:12px;display:flex}.provider-status-health-state.svelte-6y9wjv{border:1px solid var(--border);border-radius:999px;align-items:center;padding:1px 8px;font-size:12px;font-weight:600;display:inline-flex}.provider-status-health-state.is-healthy.svelte-6y9wjv{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-health-state.is-degraded.svelte-6y9wjv{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-health-state.is-unhealthy.svelte-6y9wjv{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-health-models.svelte-6y9wjv{flex-direction:column;gap:4px;display:flex}.provider-status-health-model.svelte-6y9wjv{color:var(--text);justify-content:space-between;gap:8px;font-size:13px;display:flex}.provider-status-health-model.is-flagged.svelte-6y9wjv{color:var(--danger)}.provider-status-health-model-name.svelte-6y9wjv{overflow-wrap:anywhere}.provider-status-health-model-stats.svelte-6y9wjv{white-space:nowrap;color:var(--text-muted)}.provider-status-health-model.is-flagged.svelte-6y9wjv .provider-status-health-model-stats:where(.svelte-6y9wjv){color:var(--danger);font-weight:700}.provider-status-card.svelte-nopjmh{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:14px;padding:18px;display:flex}.provider-status-card-toggle.svelte-nopjmh{border:0;border-top:1px solid var(--border);border-radius:0 0 var(--radius) var(--radius);color:var(--text-muted);cursor:pointer;background:0 0;justify-content:center;align-items:center;margin:auto -18px -18px;padding:7px 0;transition:background .15s,color .15s;display:flex}.provider-status-card-toggle.svelte-nopjmh:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--text)}.provider-status-card-toggle.svelte-nopjmh:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 32%, transparent);outline-offset:-2px}.provider-status-card-toggle.svelte-nopjmh .provider-status-card-toggle-icon{width:16px;height:16px;transition:transform .28s;display:block}.provider-status-card-toggle.is-expanded.svelte-nopjmh .provider-status-card-toggle-icon{transform:rotate(180deg)}.provider-status-card-head.svelte-nopjmh{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.provider-status-name.svelte-nopjmh{letter-spacing:-.02em;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:16px;font-weight:700;display:flex}.provider-doc-help.svelte-nopjmh{align-self:center;text-decoration:none}.provider-status-name-type.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-pill.svelte-nopjmh{border:1px solid var(--border);white-space:nowrap;border-radius:999px;justify-content:center;align-items:center;min-height:28px;padding:0 10px;font-size:12px;font-weight:700;display:inline-flex}.provider-status-pill.is-healthy.svelte-nopjmh{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border));background:color-mix(in srgb, var(--success) 10%, transparent)}.provider-status-pill.is-degraded.svelte-nopjmh{color:var(--warning);border-color:color-mix(in srgb, var(--warning) 48%, var(--border));background:color-mix(in srgb, var(--warning) 26%, var(--bg-surface))}.provider-status-pill.is-unhealthy.svelte-nopjmh{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 10%, transparent)}.provider-status-meta.svelte-nopjmh{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.provider-status-meta-item.svelte-nopjmh{background:var(--bg);border:1px solid var(--border);border-radius:6px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.provider-status-meta-label.svelte-nopjmh{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.provider-status-meta-value.svelte-nopjmh{color:var(--text);font-size:14px}@media (width<=768px){.provider-status-meta.svelte-nopjmh{grid-template-columns:1fr}}.provider-status-section-loading.svelte-1kx3uw4{justify-content:center;padding:24px 0;display:flex}.provider-status-section-header.svelte-1kx3uw4{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px;display:flex}.provider-status-toggle.svelte-1kx3uw4{background:var(--bg-surface);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;align-items:center;gap:10px;padding:8px 12px;font-family:inherit;font-size:12px;font-weight:600;transition:background-color .18s,border-color .18s,color .18s;display:inline-flex}.provider-status-toggle.svelte-1kx3uw4:hover{background:var(--bg-surface-hover)}.provider-status-toggle.svelte-1kx3uw4:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 28%, transparent);outline-offset:2px}.provider-status-toggle-copy.svelte-1kx3uw4{white-space:nowrap}.provider-status-toggle-track.svelte-1kx3uw4{background:color-mix(in srgb, var(--text-muted) 35%, var(--border));border-radius:999px;flex-shrink:0;width:34px;height:20px;transition:background-color .2s;position:relative}.provider-status-toggle-track.is-active.svelte-1kx3uw4{background:color-mix(in srgb, var(--accent) 82%, var(--bg-surface))}.provider-status-toggle-thumb.svelte-1kx3uw4{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .2s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000003d}.provider-status-toggle-track.is-active.svelte-1kx3uw4 .provider-status-toggle-thumb:where(.svelte-1kx3uw4){transform:translate(14px)}.provider-status-grid.svelte-1kx3uw4{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));align-items:start;gap:16px;display:grid}@media (width<=768px){.provider-status-section-header.svelte-1kx3uw4{flex-direction:column;align-items:flex-start}.provider-status-toggle.svelte-1kx3uw4{justify-content:space-between;width:100%}}.filter-input-wrap.svelte-30xz1k{flex:1;width:100%;min-width:min(400px,100%);display:flex;position:relative}.filter-input.svelte-30xz1k{flex:1;width:100%;min-width:0;padding-left:34px}.filter-input-wrap.svelte-30xz1k .filter-input-icon{width:14px;height:14px;color:var(--text-muted);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.usage-page-filters.svelte-1oi6ywk{flex-wrap:wrap;gap:10px;margin-bottom:20px;display:flex}.usage-page-filters.svelte-1oi6ywk .usage-log-select{flex:0 auto}.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:220px;min-width:180px;max-width:360px}@media (width<=768px){.usage-page-filters.svelte-1oi6ywk .usage-log-select,.usage-page-filters.svelte-1oi6ywk .usage-page-filters-user-path{flex:100%;max-width:none}}.pro-saved-value.svelte-1qiwzdu{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.pro-saved-delta.svelte-1qiwzdu{color:var(--success);letter-spacing:0;font-size:13px;font-weight:600}.usage-breakdown-loading.svelte-1kee4g8{justify-content:center;align-items:center;min-height:120px;display:flex}.chart-view-toggle.svelte-1kee4g8{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;padding:2px;display:inline-flex}.chart-view-btn.svelte-1kee4g8{width:30px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.chart-view-btn.svelte-1kee4g8:hover{color:var(--text)}.chart-view-btn.active.svelte-1kee4g8{background:var(--accent);color:#fff}.chart-view-btn.svelte-1kee4g8 svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}.usage-chart-table-wrapper.svelte-1kee4g8{-webkit-overflow-scrolling:touch;margin-top:0;overflow-x:auto}.usage-chart-data-table.svelte-1kee4g8{min-width:max-content}.usage-chart-data-table.svelte-1kee4g8 th,.usage-chart-data-table.svelte-1kee4g8 td{white-space:nowrap}.pagination-info.svelte-1imew3q{color:var(--text-muted);font-size:13px}.pagination-buttons.svelte-1imew3q{gap:8px;display:flex}.usage-log-loading.svelte-hg4ill{justify-content:center;align-items:center;min-height:120px;display:flex}.usage-log-section.svelte-hg4ill{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.usage-log-section.svelte-hg4ill h3{margin-bottom:16px;font-size:16px;font-weight:600}.usage-log-section.svelte-hg4ill .table-wrapper{overflow-x:auto}.usage-log-toolbar.svelte-hg4ill{gap:12px;margin-bottom:16px;display:grid}.usage-filter-row.svelte-hg4ill{grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;gap:12px;display:grid}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1/-1}.usage-filter-row-options.svelte-hg4ill{grid-template-columns:1fr}.usage-log-checkbox.svelte-hg4ill{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.usage-log-checkbox.svelte-hg4ill input{cursor:pointer;width:16px;height:16px}.usage-ts.svelte-hg4ill{white-space:nowrap;font-size:12px}.usage-log-row-cached.svelte-hg4ill td{opacity:.75;font-style:italic}.usage-log-row-cached.svelte-hg4ill .usage-log-cache-cell:where(.svelte-hg4ill){font-weight:700}.caveat-icon.svelte-hg4ill{color:var(--warning);cursor:help;margin-left:4px;font-size:14px}@media (width<=768px){.usage-log-toolbar.svelte-hg4ill{gap:10px}.usage-filter-row.svelte-hg4ill{grid-template-columns:1fr}.usage-filter-row-search.svelte-hg4ill .filter-input-wrap{grid-column:1}.usage-log-table.svelte-hg4ill{display:block;overflow-x:auto}}.usage-sticky-controls.svelte-spwie6{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;display:flex}.usage-charts-grid.svelte-spwie6{flex-wrap:wrap;gap:24px;margin-bottom:24px;display:flex}.usage-charts-grid.svelte-spwie6 .model-chart-section{flex:calc(50% - 24px);min-width:420px;margin-bottom:0}@media (width<=520px){.usage-charts-grid.svelte-spwie6 .model-chart-section{min-width:0}}.loading-state.svelte-hzxv1d{min-height:var(--loading-state-min-height,64px);color:var(--text-muted);justify-content:center;align-items:center;gap:10px;font-size:14px;display:flex}.budget-bar-text-row-on-fill.svelte-1jm56wo{color:#fff;clip-path:inset(0 calc(100% - var(--budget-progress,0%)) 0 0)}.budget-bar-text-start.svelte-1jm56wo{left:8px;transform:translateY(-50%)}.budget-bar-track-period-custom.svelte-1jm56wo .budget-bar-text-row-on-fill:where(.svelte-1jm56wo){color:#3f332a}.budget-override-dialog.svelte-13ryo7h{max-width:460px}.budget-sort-control.svelte-1752fqe{align-items:center;gap:8px}.budget-sort-control.svelte-1752fqe label{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.budget-sort-select.svelte-1752fqe{background-color:var(--bg-surface);min-width:132px}.budget-sort-select.svelte-1752fqe:hover{background-color:var(--bg-surface-hover)}.model-name-cell.svelte-1iynym{flex-direction:column;gap:8px;display:flex}.model-name-primary.svelte-1iynym{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.model-name-secondary.svelte-1iynym{color:var(--text-muted);font-size:12px}.model-redirect-remove-btn.svelte-1iynym{appearance:none;color:var(--danger);cursor:pointer;background:0 0;border:0;margin-left:4px;padding:0;font-size:11px}.model-redirect-remove-btn.svelte-1iynym:hover:not(:disabled){text-decoration:underline}.model-redirect-remove-btn.svelte-1iynym:disabled{opacity:.45;cursor:default}.model-kind-icon.svelte-1iynym{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:var(--bg);width:24px;height:24px;color:var(--accent);border-radius:999px;flex:0 0 24px;justify-content:center;align-items:center;display:inline-flex}.model-kind-icon-svg.svelte-1iynym{width:14px;height:14px}.model-row-actions.svelte-1iynym{text-align:right;width:170px}@media (width<=768px){.model-name-primary.svelte-1iynym{flex-direction:column;align-items:flex-start}}.provider-group-row.svelte-1911hy6 td{background:color-mix(in srgb, var(--accent) 6%, var(--bg));padding-top:12px;padding-bottom:12px}.provider-group-row.svelte-1911hy6:hover td{background:color-mix(in srgb, var(--accent) 8%, var(--bg))}.provider-group-header.svelte-1911hy6{justify-content:space-between;align-items:center;gap:16px;display:flex}.provider-group-meta.svelte-1911hy6{flex-direction:column;gap:4px;min-width:0;display:flex}.provider-group-title.svelte-1911hy6{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.provider-group-type.svelte-1911hy6,.provider-group-count.svelte-1911hy6,.provider-group-summary.svelte-1911hy6{color:var(--text-muted);font-size:12px}@media (width<=768px){.provider-group-header.svelte-1911hy6{flex-direction:column;align-items:flex-start}}.vm-session-affinity-checkbox.svelte-d1j6xw{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}.vm-session-affinity-checkbox.svelte-d1j6xw input:where(.svelte-d1j6xw){accent-color:var(--accent);cursor:pointer}.pricing-override-rows.svelte-u8snes{gap:12px;display:grid}.pricing-override-row.svelte-u8snes{grid-template-columns:minmax(220px,1fr) minmax(130px,180px) 32px;align-items:end;gap:12px;display:grid}.pricing-override-row-actions.svelte-u8snes{justify-content:flex-start;display:flex}.pricing-override-tier-note.svelte-u8snes{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);border-radius:6px;padding:10px 12px;font-size:13px}.pricing-preview.svelte-u8snes{border:1px solid var(--border);border-radius:6px;overflow:hidden}.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:minmax(150px,1fr) minmax(90px,auto) minmax(130px,.8fr);align-items:center;gap:12px;padding:10px 12px;display:grid}.pricing-preview-header.svelte-u8snes{background:var(--bg);color:var(--text-muted);text-transform:uppercase;font-size:12px;font-weight:600}.pricing-preview-row.svelte-u8snes{border-top:1px solid var(--border);font-size:13px}.pricing-preview-row-empty.svelte-u8snes{color:var(--text-muted);grid-template-columns:1fr}@media (width<=768px){.pricing-override-row.svelte-u8snes,.pricing-preview-header.svelte-u8snes,.pricing-preview-row.svelte-u8snes{grid-template-columns:1fr}}.failover-drafts-editor.svelte-1n87bip{flex-direction:column;gap:16px;display:flex}.failover-draft-header-actions.svelte-1n87bip{flex:none;align-items:center;gap:10px;display:flex}.failover-draft-counter.svelte-1n87bip{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.failover-draft-toolbar.svelte-1n87bip{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.failover-draft-toolbar.svelte-1n87bip .filter-input-wrap,.failover-draft-toolbar.svelte-1n87bip .filter-input{min-width:0}.failover-draft-toggle-all.svelte-1n87bip{flex:none}.failover-draft-list.svelte-1n87bip{flex-direction:column;gap:8px;max-height:min(52vh,430px);padding-right:4px;display:flex;overflow-y:auto}.failover-draft-row.svelte-1n87bip{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer;grid-template-columns:18px minmax(0,1fr);align-items:start;gap:10px;padding:10px;display:grid}.failover-draft-row.svelte-1n87bip:hover{border-color:color-mix(in srgb, var(--accent) 42%, var(--border));background:var(--bg-surface-hover)}.failover-draft-row.svelte-1n87bip input{width:16px;height:16px;margin-top:2px}.failover-draft-copy.svelte-1n87bip{gap:4px;min-width:0;display:grid}.failover-draft-source.svelte-1n87bip,.failover-draft-targets.svelte-1n87bip{overflow-wrap:anywhere}.failover-draft-targets.svelte-1n87bip{color:var(--text-muted);font-size:12px}.failover-drafts-empty.svelte-1n87bip{align-items:center;min-height:96px;display:flex}.failover-draft-actions.svelte-1n87bip{margin-top:0}.category-tabs.svelte-scpjps{-webkit-overflow-scrolling:touch;align-items:center;gap:4px;margin-bottom:16px;padding-bottom:2px;display:flex;overflow-x:auto}.category-tab.svelte-scpjps{background:var(--bg-surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;white-space:nowrap;border-radius:6px;flex-shrink:0;align-items:center;gap:6px;padding:6px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.category-tab.svelte-scpjps:hover{color:var(--text);background:var(--bg-surface-hover)}.category-tab.active.svelte-scpjps{background:var(--accent);color:#fff;border-color:var(--accent)}.category-tab.svelte-scpjps .tab-count:where(.svelte-scpjps){background:#ffffff26;border-radius:9px;justify-content:center;align-items:center;min-width:20px;height:18px;padding:0 5px;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.category-tab.svelte-scpjps:not(.active) .tab-count:where(.svelte-scpjps){background:var(--bg)}@media (width<=768px){.category-tabs.svelte-scpjps{gap:4px}.category-tab.svelte-scpjps{padding:5px 10px;font-size:12px}}.workflow-pipeline-meta.svelte-1viff7o{border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 86%, transparent);min-width:0;max-width:calc(100% - 28px);color:var(--text-muted);white-space:nowrap;appearance:none;cursor:pointer;text-align:left;border-radius:12px;align-items:center;gap:0;padding:2px 10px;font-size:12px;font-weight:500;line-height:1.2;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s;display:inline-flex;position:absolute;top:12px;right:14px;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover,.workflow-pipeline-meta.svelte-1viff7o:focus-visible{border-color:color-mix(in srgb, var(--accent) 40%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface));color:color-mix(in srgb, var(--accent) 74%, var(--text))}.workflow-pipeline-meta.svelte-1viff7o:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}.workflow-pipeline-meta-label.svelte-1viff7o{flex:none;font-weight:700}.workflow-pipeline-meta-placeholder.svelte-1viff7o{opacity:1;flex:none;max-width:3ch;margin-left:4px;transition:max-width .18s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta-value.svelte-1viff7o{opacity:0;text-overflow:clip;flex:0 auto;max-width:0;margin-left:0;transition:max-width .22s,margin-left .18s,opacity .15s;overflow:hidden}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-placeholder:where(.svelte-1viff7o){opacity:0;max-width:0;margin-left:0}.workflow-pipeline-meta.svelte-1viff7o:hover .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta.svelte-1viff7o:focus-visible .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o),.workflow-pipeline-meta-error.svelte-1viff7o .workflow-pipeline-meta-value:where(.svelte-1viff7o){opacity:1;max-width:42ch;margin-left:4px}.workflow-pipeline-meta-icon.svelte-1viff7o{opacity:0;flex:none;justify-content:center;align-items:center;width:0;height:14px;margin-left:0;line-height:0;transition:width .18s,margin-left .18s,opacity .15s,transform .18s;display:inline-flex;overflow:hidden;transform:translate(4px)translateY(1px)scale(.84)}.workflow-pipeline-meta-icon.svelte-1viff7o svg{width:14px;height:14px}.workflow-pipeline-meta-copied.svelte-1viff7o,.workflow-pipeline-meta-copied.svelte-1viff7o:hover,.workflow-pipeline-meta-copied.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--success) 12%, var(--bg));border-color:color-mix(in srgb, var(--success) 40%, var(--border));color:var(--success)}.workflow-pipeline-meta-copied.svelte-1viff7o .workflow-pipeline-meta-icon:where(.svelte-1viff7o){opacity:1;width:14px;margin-left:6px;transform:translateY(1px)}.workflow-pipeline-meta-error.svelte-1viff7o,.workflow-pipeline-meta-error.svelte-1viff7o:hover,.workflow-pipeline-meta-error.svelte-1viff7o:focus-visible{background:color-mix(in srgb, var(--danger) 10%, var(--bg));border-color:color-mix(in srgb, var(--danger) 34%, var(--border));color:var(--danger)}.workflow-pipeline.svelte-nbptrg{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg);flex-direction:column;gap:0;margin-bottom:12px;padding:18px 20px 20px;display:flex;position:relative}.workflow-pipeline-has-meta.svelte-nbptrg{padding-top:42px}.workflow-pipeline-row.svelte-nbptrg{align-items:center;width:100%;min-width:0;display:flex;overflow-x:auto}.workflow-node-icon.svelte-nbptrg{border-radius:var(--radius);background:var(--bg);width:28px;height:28px;color:var(--text-muted);justify-content:center;align-items:center;display:flex}.workflow-node-icon.svelte-nbptrg svg{stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.workflow-node-label.svelte-nbptrg{letter-spacing:.03em;color:var(--text);white-space:nowrap;font-size:11px;font-weight:700;line-height:1.2}.workflow-node-sub.svelte-nbptrg{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;max-width:120px;font-size:10px;font-weight:500;line-height:1.2;font-family:var(--font-mono,ui-monospace, monospace);overflow:hidden}.workflow-node-badge.svelte-nbptrg{border-radius:var(--radius);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);align-items:center;padding:2px 7px;font-size:9px;font-weight:800;line-height:1.5;display:inline-flex}.workflow-node-endpoint.svelte-nbptrg{border-radius:var(--radius);border-color:var(--border);background:var(--bg-surface);flex-direction:row;gap:7px;min-width:auto;padding:10px 14px}.workflow-node-icon-endpoint.svelte-nbptrg{border-radius:var(--radius);width:auto;height:auto;color:var(--text-muted);background:0 0;justify-content:flex-start;padding:0}.workflow-node-icon-endpoint.svelte-nbptrg svg{width:14px;height:14px}.workflow-node-endpoint.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted);font-size:11px;font-weight:600}.workflow-node-feature.svelte-nbptrg{border-color:color-mix(in srgb, var(--accent) 46%, var(--border));background:color-mix(in srgb, var(--accent) 8%, var(--bg-surface))}.workflow-node-feature.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--accent) 16%, var(--bg));color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--accent)}.workflow-node-feature.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--accent) 70%, var(--text-muted))}.workflow-node-ai.svelte-nbptrg{border-radius:var(--radius);gap:6px;min-width:96px;padding:12px 16px}.workflow-async-section.svelte-nbptrg{justify-content:flex-end;align-items:center;gap:0;width:100%;min-width:0;margin-top:10px;display:flex}.workflow-async-turn.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 60px;height:2px;position:relative}.workflow-async-turn.svelte-nbptrg:before{content:"";background:color-mix(in srgb, var(--text-muted) 40%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);width:7px;height:9px;position:absolute;top:50%;left:-7px;transform:translateY(-50%)}.workflow-async-turn.svelte-nbptrg:after{content:"";border-right:2px dashed color-mix(in srgb, var(--text-muted) 40%, var(--border));height:16px;position:absolute;bottom:1px;right:0}.workflow-async-row.svelte-nbptrg{align-items:center;min-width:0;margin-right:7px;display:flex}.workflow-conn-async.svelte-nbptrg{background:repeating-linear-gradient(to left, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 0, color-mix(in srgb, var(--text-muted) 45%, var(--border)) 5px, transparent 5px, transparent 9px);flex:0 0 24px;width:24px}.workflow-conn-async.svelte-nbptrg:after{background:color-mix(in srgb, var(--text-muted) 45%, var(--border));clip-path:polygon(100% 0,0 50%,100% 100%);left:-1px;right:auto}.workflow-node-async.svelte-nbptrg{border-radius:var(--radius);border-style:dashed;flex-direction:row;gap:7px;min-width:auto;padding:7px 12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){border-radius:var(--radius);width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg) svg{width:12px;height:12px}.workflow-node-async.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){font-size:10px;font-weight:700}.workflow-async-label.svelte-nbptrg{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);opacity:.55;white-space:nowrap;flex-shrink:0;align-items:center;margin-left:8px;font-size:9px;font-weight:800;display:inline-flex}.workflow-node-success.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 18%, var(--bg));color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--success)}.workflow-node-success.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 85%, var(--text))}.workflow-node-success.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--success) 74%, var(--text-muted))}.workflow-node-success.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--success) 14%, var(--bg));border-color:color-mix(in srgb, var(--success) 38%, var(--border));color:var(--success)}.workflow-node-current.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 16%, var(--bg));color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--info)}.workflow-node-current.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 85%, var(--text))}.workflow-node-current.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--info) 72%, var(--text-muted))}.workflow-node-current.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--info) 13%, var(--bg));border-color:color-mix(in srgb, var(--info) 36%, var(--border));color:var(--info)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--warning)}.workflow-node-warning.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 85%, var(--text))}.workflow-node-warning.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--warning) 72%, var(--text-muted))}.workflow-node-warning.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 38%, var(--border));color:var(--warning)}.workflow-node-error.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--danger) 14%, var(--bg));color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg){color:var(--danger)}.workflow-node-error.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 85%, var(--text))}.workflow-node-error.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--danger) 72%, var(--text-muted))}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 12%, var(--bg));color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-icon-endpoint:where(.svelte-nbptrg),.workflow-node-neutral.svelte-nbptrg .workflow-node-label:where(.svelte-nbptrg){color:var(--text-muted)}.workflow-node-neutral.svelte-nbptrg .workflow-node-sub:where(.svelte-nbptrg){color:color-mix(in srgb, var(--text-muted) 84%, var(--border))}.workflow-node-neutral.svelte-nbptrg .workflow-node-badge:where(.svelte-nbptrg){background:color-mix(in srgb, var(--text-muted) 10%, var(--bg));border-color:color-mix(in srgb, var(--text-muted) 28%, var(--border));color:var(--text-muted)}.workflow-conn-hit.svelte-nbptrg,.workflow-conn-hit.svelte-nbptrg:after{background:color-mix(in srgb, var(--success) 58%, var(--border))}.workflow-conn-dim.svelte-nbptrg,.workflow-conn-dim.svelte-nbptrg:after{background:color-mix(in srgb, var(--border) 75%, transparent)}.workflow-node-success.svelte-nbptrg{border-color:color-mix(in srgb, var(--success) 52%, var(--border));background:color-mix(in srgb, var(--success) 9%, var(--bg-surface))}.workflow-node-current.svelte-nbptrg{border-color:color-mix(in srgb, var(--info) 56%, var(--border));background:color-mix(in srgb, var(--info) 10%, var(--bg-surface))}.workflow-node-warning.svelte-nbptrg{border-color:color-mix(in srgb, var(--warning) 52%, var(--border));background:color-mix(in srgb, var(--warning) 9%, var(--bg-surface))}.workflow-node-error.svelte-nbptrg{border-color:color-mix(in srgb, var(--danger) 52%, var(--border));background:color-mix(in srgb, var(--danger) 9%, var(--bg-surface))}.workflow-node-neutral.svelte-nbptrg{border-color:color-mix(in srgb, var(--text-muted) 40%, var(--border));background:color-mix(in srgb, var(--text-muted) 8%, var(--bg-surface))}.workflow-node-skipped.svelte-nbptrg{opacity:.28;position:relative}.workflow-card.svelte-1fo9fvq{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:16px;padding:20px;display:flex}.workflow-card-head.svelte-1fo9fvq{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.workflow-card-footer.svelte-1fo9fvq{flex-direction:column;align-items:stretch;gap:10px;display:flex}.workflow-card-head.svelte-1fo9fvq h3{font-size:18px;font-weight:700}.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.workflow-card-meta-footer.svelte-1fo9fvq{justify-content:flex-start}.workflow-card-footer.svelte-1fo9fvq .alias-actions-cell{align-self:flex-end}.workflow-card-description.svelte-1fo9fvq{color:var(--text-muted);font-size:14px}.workflow-guardrails.svelte-1fo9fvq{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list.svelte-1fo9fvq{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-item.svelte-1fo9fvq{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}@media (width<=768px){.workflow-card-head.svelte-1fo9fvq,.workflow-card-footer.svelte-1fo9fvq,.workflow-card-badges.svelte-1fo9fvq,.workflow-card-meta.svelte-1fo9fvq,.workflow-guardrail-item.svelte-1fo9fvq{flex-direction:column;align-items:flex-start}}.model-editor.workflow-editor{width:min(1080px,100%);margin-bottom:0}.alert-inline-actions.svelte-1bcpzh1{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.workflow-guardrail-editor.svelte-1bcpzh1{flex-direction:column;gap:12px;display:flex}.workflow-guardrail-list-editor.svelte-1bcpzh1{flex-direction:column;gap:10px;display:flex}.workflow-guardrail-row.svelte-1bcpzh1{border:1px solid var(--border);background:var(--bg);border-radius:10px;justify-content:stretch;align-items:center;gap:12px;padding:10px 12px;display:flex}.workflow-guardrail-field.svelte-1bcpzh1{flex:auto;min-width:0}.workflow-guardrail-step-field.svelte-1bcpzh1{flex:0 0 120px}.workflow-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-step-input.svelte-1bcpzh1{max-width:120px}@media (width<=768px){.workflow-guardrail-row.svelte-1bcpzh1{flex-direction:column;align-items:flex-start}.workflow-step-input.svelte-1bcpzh1{width:100%;max-width:none}.workflow-guardrail-field.svelte-1bcpzh1,.workflow-guardrail-step-field.svelte-1bcpzh1{flex-basis:auto;width:100%}}.workflow-list-loading.svelte-ie2kfk{justify-content:center;align-items:center;gap:8px;display:flex}.workflows-list.svelte-ie2kfk{min-width:0}.workflow-card-grid.svelte-ie2kfk{grid-template-columns:1fr;gap:16px;display:grid}.workflow-page-note.svelte-l8kr26{color:var(--text-muted);margin-top:6px;font-size:14px}.audit-log-toolbar.svelte-1pwbpcm{flex-direction:column;gap:10px;margin-bottom:14px;display:flex}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:repeat(12,minmax(0,1fr));gap:10px;display:grid}.audit-filter-select.svelte-1pwbpcm{grid-column:span 2;min-width:0}.audit-filter-row-search.svelte-1pwbpcm .filter-input-wrap{grid-column:1/-1;max-width:none}.audit-filter-row-controls.svelte-1pwbpcm .audit-filter-select:where(.svelte-1pwbpcm){grid-column:span 2}.audit-filter-row-controls.svelte-1pwbpcm .btn{grid-column:11/-1;justify-self:end;min-width:108px}.audit-clear-btn.svelte-1pwbpcm{justify-content:center;align-items:center;gap:8px;font-weight:600;display:inline-flex}.audit-clear-btn.svelte-1pwbpcm .table-icon-svg{width:12px;height:12px}@media (width<=768px){.audit-log-toolbar.svelte-1pwbpcm{gap:8px}.audit-filter-row.svelte-1pwbpcm{grid-template-columns:1fr}.audit-filter-row.svelte-1pwbpcm .filter-input-wrap,.audit-filter-row.svelte-1pwbpcm .filter-input,.audit-filter-select.svelte-1pwbpcm,.audit-filter-row.svelte-1pwbpcm .btn{grid-column:auto}}.audit-live-status.svelte-tve6yv{color:var(--text-muted);align-items:center;gap:10px;margin-left:16px;padding-left:6px;font-size:12px;display:inline-flex}.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:1.8s ease-out infinite svelte-tve6yv-audit-live-dot-throb}@keyframes svelte-tve6yv-audit-live-dot-throb{0%{transform:scale(1)}35%{transform:scale(1.35)}70%{transform:scale(1)}to{transform:scale(1)}}@media (prefers-reduced-motion:reduce){.audit-live-status.svelte-tve6yv .live-dot.is-streaming:where(.svelte-tve6yv){animation:none}}.audit-live-status-text.is-live.svelte-tve6yv{color:var(--success);font-weight:600}.audit-entry-metadata.svelte-hyopt0{border-top:1px solid var(--border);align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:flex}.audit-entry-metadata-label.svelte-hyopt0{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:12px;font-weight:700}.audit-entry-context.svelte-hyopt0{flex-wrap:wrap;flex:auto;gap:8px;display:flex}.audit-alias-badge.svelte-hyopt0{background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 28%, var(--border));color:var(--accent-strong,var(--accent))}@media (width<=768px){.audit-entry-metadata.svelte-hyopt0{flex-direction:column;align-items:flex-start;gap:8px}}.audit-attempt-track.svelte-1eu22xn{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.audit-attempt-track-pips.svelte-1eu22xn{align-items:center;gap:3px;display:inline-flex}.audit-attempt-pip.svelte-1eu22xn{background:var(--text-muted);border-radius:2px;width:8px;height:8px}.audit-attempt-pip.audit-attempt-success.svelte-1eu22xn{background:var(--success)}.audit-attempt-pip.audit-attempt-error.svelte-1eu22xn{background:var(--danger)}.audit-attempt-track-count.svelte-1eu22xn{color:var(--text-muted);font-size:11px}.audit-entry-summary.svelte-17mysgz{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;padding:5px 14px;list-style:none;display:flex;position:relative}.audit-entry-summary.svelte-17mysgz::-webkit-details-marker{display:none}.audit-entry-summary-live-in-progress.svelte-17mysgz{background:color-mix(in srgb, var(--info) 7%, var(--bg))}.audit-entry-summary-live-in-progress.svelte-17mysgz:before{content:"";background:var(--info);pointer-events:none;width:3px;animation:1.2s ease-in-out infinite audit-live-summary-stripe-blink;position:absolute;inset:0 auto 0 0}@media (prefers-reduced-motion:reduce){.audit-entry-summary-live-in-progress.svelte-17mysgz:before{opacity:.78;animation:none}}.audit-entry-left.svelte-17mysgz{align-items:center;gap:8px;min-width:0;display:flex}.audit-entry-right.svelte-17mysgz{color:var(--text-muted);flex-shrink:0;align-items:center;gap:10px;min-height:28px;display:inline-flex}.audit-thread-expander.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);min-width:28px;height:28px;color:var(--text-muted);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:3px;padding:0 7px 0 4px;transition:background .1s ease-out,color .1s ease-out;display:inline-flex}.audit-thread-expander.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 12%, var(--bg));color:var(--accent)}.audit-thread-expander.svelte-17mysgz .audit-thread-expander-svg{width:14px;height:14px}.audit-thread-count.svelte-17mysgz{font-size:11px;font-weight:600}.audit-conversation-trigger.svelte-17mysgz{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--border));background:color-mix(in srgb, var(--accent) 12%, var(--bg));width:28px;height:28px;color:var(--accent);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin-right:-9px;transition:transform .1s ease-out,background .1s ease-out,color .1s ease-out;display:inline-flex}.audit-conversation-trigger.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 20%, var(--bg));transform:translate(1px)}.audit-conversation-trigger.svelte-17mysgz .audit-conversation-trigger-svg{stroke-linecap:butt;stroke-linejoin:miter;width:14px;height:14px}.audit-path.svelte-17mysgz{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.audit-method-badge.svelte-17mysgz{border:1px solid var(--border);letter-spacing:.2px;background:var(--bg-surface);min-width:52px;height:24px;color:var(--text-muted);border-radius:999px;justify-content:center;align-items:center;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.audit-provider-model.svelte-17mysgz{border:1px solid var(--border);background:var(--bg-surface);height:24px;color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;max-width:420px;padding:0 10px;font-size:12px;display:inline-flex;overflow:hidden}@media (width<=768px){.audit-entry-summary.svelte-17mysgz{flex-direction:column;align-items:flex-start}.audit-entry-right.svelte-17mysgz{justify-content:space-between;width:100%}}.audit-pane-split.svelte-1h5puht{grid-template-columns:1fr 2fr;align-items:start;gap:10px 14px;display:grid}.audit-pane-split-single.svelte-1h5puht{grid-template-columns:minmax(0,1fr)}.audit-pane-split.svelte-1h5puht .audit-pane-block-error:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-pane-empty:where(.svelte-1h5puht),.audit-pane-split.svelte-1h5puht .audit-size-warning:where(.svelte-1h5puht){grid-column:1/-1}.audit-pane-block.svelte-1h5puht{min-width:0}.audit-pane-block.svelte-1h5puht>h5{margin-bottom:6px}.audit-pane-block-head.svelte-1h5puht{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.audit-pane-block-title.svelte-1h5puht{align-items:center;gap:8px;min-width:0;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn{background-color:var(--bg-surface);border:1px solid color-mix(in srgb, var(--border) 70%, var(--text) 30%);color:var(--text);cursor:pointer;border-radius:6px;flex:none;align-items:center;gap:6px;padding:4px 8px;font-family:inherit;font-size:12px;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn:hover:not(:disabled){background:color-mix(in srgb, var(--bg-surface) 80%, var(--text) 20%);border-color:color-mix(in srgb, var(--border) 45%, var(--text) 55%)}.audit-pane-block-head.svelte-1h5puht .audit-copy-btn.copy-feedback-btn-copied{background:color-mix(in srgb, var(--success) 18%, var(--bg-surface))}.audit-json.svelte-1h5puht{background:var(--bg-surface);border:1px solid var(--border);box-sizing:border-box;white-space:pre;max-width:100%;max-height:220px;color:var(--text);border-radius:6px;padding:10px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px;line-height:1.45;overflow:auto}.audit-pane-error-message.svelte-1h5puht{color:var(--danger)}.audit-pane-clickable-preview.svelte-1h5puht{cursor:pointer}.audit-pane-clickable-preview.svelte-1h5puht:hover{background:color-mix(in srgb, var(--danger) 8%, transparent)}.audit-json-body.svelte-1h5puht{white-space:pre;overflow-wrap:normal}.audit-pane-empty.svelte-1h5puht{text-align:left;padding:8px 0 0}.audit-pane-pending.svelte-1h5puht{align-items:center;gap:8px;display:flex}.audit-pane-streaming.svelte-1h5puht{letter-spacing:.02em;color:var(--text-muted);align-items:center;gap:7px;padding-left:4px;font-size:11px;font-weight:600;display:inline-flex}.audit-size-warning.svelte-1h5puht{color:var(--warning);margin-top:8px;font-size:12px}.audit-request-response.svelte-1bc5vi5{margin-top:4px}.audit-pane-tablist.svelte-1bc5vi5{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;display:flex}.audit-pane-tab.svelte-1bc5vi5{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-bottom-color:#0000;border-radius:6px 6px 0 0;align-items:center;gap:8px;margin-bottom:-1px;margin-right:12px;padding:8px 12px;font-family:inherit;font-size:13px;transition:color .15s,border-color .15s,background-color .15s;display:inline-flex}.audit-pane-tab.svelte-1bc5vi5:not(.audit-pane-tab-active):hover{color:var(--text);background:color-mix(in srgb, var(--text) 5%, transparent)}.audit-pane-tab-active.svelte-1bc5vi5{color:var(--text);border-color:var(--border);border-bottom-color:var(--bg);background:var(--bg)}.audit-pane-tab-label.svelte-1bc5vi5{font-weight:600}.audit-pane-tabpanel.svelte-1bc5vi5{min-width:0}.audit-pane-icon.svelte-1bc5vi5{color:var(--text-muted);flex:none;align-items:center;display:inline-flex}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-request{color:var(--accent)}.audit-pane-icon.svelte-1bc5vi5.audit-pane-icon-response{color:var(--info)}.audit-pane-icon.svelte-1bc5vi5 svg{width:16px;height:16px}.audit-pane-seq.svelte-1bc5vi5{color:var(--text-muted);font-size:12px}.audit-pane-kind.svelte-1bc5vi5{text-transform:uppercase;letter-spacing:.04em;font-size:10px;font-weight:600}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-primary{color:var(--text-muted)}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-failover{color:var(--accent);background:color-mix(in srgb, var(--accent) 14%, var(--bg));border-color:color-mix(in srgb, var(--accent) 30%, var(--border))}.audit-pane-kind.svelte-1bc5vi5.audit-pane-kind-retry{color:var(--warning);background:color-mix(in srgb, var(--warning) 14%, var(--bg));border-color:color-mix(in srgb, var(--warning) 30%, var(--border))}.audit-savings-pill.svelte-1bc5vi5{border:1px solid color-mix(in srgb, var(--prompt-cache-color) 45%, var(--border));background:var(--prompt-cache-color-bg);color:var(--prompt-cache-color);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;font-weight:700;display:inline-flex}.audit-step-pill.svelte-1bc5vi5{border:1px dashed var(--border);color:var(--text-muted);letter-spacing:.02em;border-radius:999px;align-items:center;padding:1px 7px;font-size:11px;display:inline-flex}.audit-entry.svelte-cmjgwr{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);transition:background .12s ease-out,border-color .12s ease-out;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr{border-color:color-mix(in srgb, var(--prompt-cache-color) 38%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 7%, var(--bg))}.audit-entry-details.svelte-cmjgwr{border-top:1px solid var(--border);background:var(--bg-surface);padding:12px;overflow:hidden}.audit-entry-interactions-open.svelte-cmjgwr .audit-entry-details:where(.svelte-cmjgwr){border-top-color:color-mix(in srgb, var(--prompt-cache-color) 24%, var(--border));background:color-mix(in srgb, var(--prompt-cache-color) 5%, var(--bg-surface))}.audit-thread.svelte-pneivi{flex-direction:column;gap:10px;display:flex}.audit-thread-children.svelte-pneivi{flex-direction:column;gap:10px;margin-left:26px;display:flex}.audit-thread-child.svelte-pneivi,.audit-thread-loading.svelte-pneivi{position:relative}.audit-thread-child.svelte-pneivi:before,.audit-thread-loading.svelte-pneivi:before{content:"";border-left:1px solid var(--border);border-bottom:1px solid var(--border);pointer-events:none;border-bottom-left-radius:6px;width:12px;height:calc(50% + 10px);position:absolute;top:-10px;left:-14px}.audit-thread-child.svelte-pneivi:not(:last-child):after{content:"";border-left:1px solid var(--border);pointer-events:none;position:absolute;top:50%;bottom:-10px;left:-14px}.audit-thread-loading.svelte-pneivi{padding:6px 0 6px 4px;display:flex}.audit-thread-more.svelte-pneivi{color:var(--text-muted);padding-left:4px;font-size:12px}.chat-message.svelte-12s99s5{border:1px solid var(--border);background:var(--bg);border-radius:10px;max-width:94%;padding:10px 12px}.chat-message.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border));box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent)}.chat-message.is-after-anchor.svelte-12s99s5,.chat-function-note.is-after-anchor.svelte-12s99s5{opacity:.46}.chat-message.role-user.svelte-12s99s5{align-self:flex-start}.chat-message.role-assistant.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 18%, var(--bg));align-self:flex-end}.chat-message.role-system.svelte-12s99s5{background:color-mix(in srgb, var(--warning) 10%, var(--bg));align-self:center;width:100%;max-width:100%}.chat-message.role-error.svelte-12s99s5{border-color:color-mix(in srgb, var(--danger) 55%, var(--border));background:color-mix(in srgb, var(--danger) 10%, var(--bg));align-self:flex-end}.chat-message.role-error.svelte-12s99s5 .chat-role:where(.svelte-12s99s5){color:color-mix(in srgb, var(--danger) 75%, var(--text-muted))}.chat-message-meta.svelte-12s99s5{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:6px;display:flex}.chat-role.svelte-12s99s5{text-transform:uppercase;letter-spacing:.4px;color:var(--text-muted);font-size:12px;font-weight:700}.chat-time.svelte-12s99s5{color:var(--text-muted);white-space:nowrap;font-size:11px}.chat-content.svelte-12s99s5{white-space:pre-wrap;overflow-wrap:break-word;color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;line-height:1.5}.chat-tool-calls.svelte-12s99s5{border-top:1px solid var(--border);flex-direction:column;gap:3px;margin-top:8px;padding-top:6px;display:flex}.chat-tool-call.svelte-12s99s5{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px}.chat-tool-call-name.svelte-12s99s5:before{content:"⚡"}.chat-function-note.svelte-12s99s5{max-width:94%;color:var(--text-muted);background:color-mix(in srgb, var(--border) 40%, transparent);border:1px dashed var(--border);border-radius:12px;align-self:center;padding:4px 12px;font-size:12px}.chat-function-note.is-anchor.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-inner.svelte-12s99s5{align-items:baseline;gap:6px;display:flex;overflow:hidden}.chat-function-label.svelte-12s99s5{text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;flex-shrink:0;font-size:11px;font-weight:600}.chat-function-detail.svelte-12s99s5{white-space:nowrap;text-overflow:ellipsis;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;overflow:hidden}.chat-function-note.role-function-call.svelte-12s99s5{background:color-mix(in srgb, var(--accent) 8%, transparent);border-color:color-mix(in srgb, var(--accent) 30%, var(--border));align-self:flex-end}.chat-function-note.role-function-result.svelte-12s99s5{background:color-mix(in srgb, var(--success) 8%, transparent);border-color:color-mix(in srgb, var(--success) 30%, var(--border));align-self:flex-start}.chat-function-note.is-anchor.role-function-call.svelte-12s99s5,.chat-function-note.is-anchor.role-function-result.svelte-12s99s5{border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.chat-function-note-details.svelte-12s99s5{width:100%}.chat-function-note-details.svelte-12s99s5>summary{cursor:pointer;list-style:none}.chat-function-note-details.svelte-12s99s5>summary::-webkit-details-marker{display:none}.chat-function-expanded.svelte-12s99s5{border-top:1px solid var(--border);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);max-height:200px;margin-top:6px;padding-top:6px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.45;overflow:auto}@media (width<=768px){.chat-message.svelte-12s99s5{max-width:100%}}.conversation-overlay.svelte-ssrzja{z-index:50;background:#0000004d;position:fixed;inset:0}.conversation-drawer-header.svelte-ssrzja{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;display:flex}.conversation-drawer-header.svelte-ssrzja h3{font-size:16px;font-weight:700}.conversation-meta.svelte-ssrzja{color:var(--text-muted);font-family:SF Mono,Menlo,Consolas,monospace;font-size:12px}.conversation-drawer-footer.svelte-ssrzja{border-top:1px solid var(--border);background:var(--bg-surface);flex-direction:column;flex-shrink:0;gap:9px;padding:10px 16px;display:flex}.conversation-composer.svelte-ssrzja{flex-direction:column;gap:7px;display:flex}.conversation-composer.svelte-ssrzja label:where(.svelte-ssrzja){font-size:12px;font-weight:700}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja){resize:vertical;border:1px solid var(--border);background:var(--bg);width:100%;min-height:70px;color:var(--text);font:inherit;border-radius:7px;padding:9px 10px;line-height:1.45}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):focus{outline:2px solid color-mix(in srgb, var(--accent) 38%, transparent);outline-offset:1px}.conversation-composer.svelte-ssrzja textarea:where(.svelte-ssrzja):disabled{opacity:.65}.conversation-composer-actions.svelte-ssrzja{justify-content:space-between;align-items:center;gap:10px;display:flex}.conversation-endpoint.svelte-ssrzja{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);font-size:11px;overflow:hidden}.conversation-send-error.svelte-ssrzja{color:var(--danger);font-size:12px}.conversation-truncated.svelte-ssrzja{color:var(--text-muted);padding:0 16px 14px;font-size:12px}.conversation-thread.svelte-ssrzja{flex-direction:column;gap:10px;padding:14px 16px 20px;display:flex}.conversation-live-status.svelte-ssrzja{color:var(--text-muted);align-items:center;gap:10px;padding:4px 16px 20px;font-size:13px;display:flex}.audit-log-loading.svelte-1nhcbov{justify-content:center;padding:2rem 0;display:flex}.audit-list-toolbar.svelte-1nhcbov{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.audit-list-toolbar-left.svelte-1nhcbov{flex-wrap:wrap;align-items:center;gap:16px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov{color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;font-size:13px;display:inline-flex}.audit-group-checkbox.svelte-1nhcbov input:where(.svelte-1nhcbov){accent-color:var(--accent);cursor:pointer}.audit-retention-note.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-retention-highlight.svelte-1nhcbov{color:var(--text);font-weight:600}.audit-log-section.svelte-1nhcbov{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px}.audit-log-summary.svelte-1nhcbov{color:var(--text-muted);font-size:13px}.audit-log-list.svelte-1nhcbov{flex-direction:column;gap:10px;display:flex}.settings-guardrails-list.svelte-1bvx512{min-width:0}.settings-guardrail-type-pill.svelte-1bvx512{border:1px solid color-mix(in srgb, var(--accent) 18%, var(--border));background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--text);white-space:nowrap;border-radius:999px;align-items:center;padding:6px 10px;font-size:12px;font-weight:600;display:inline-flex}.settings-guardrail-summary.svelte-1bvx512{color:var(--text);font-size:14px;line-height:1.45}.settings-guardrail-description.svelte-1bvx512{color:var(--text-muted);margin-top:6px;font-size:12px}.model-editor.guardrails-editor-wide{width:min(1080px,100%)}.form-field-fieldset.svelte-s964s3{border:0;min-inline-size:0;margin:0;padding:0}.form-field-legend.svelte-s964s3{color:var(--text-muted);letter-spacing:.5px;text-transform:uppercase;padding:0;font-size:12px;font-weight:600}.model-editor.settings-guardrails-editor{min-width:0}.settings-guardrails-hero.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));border-radius:var(--radius);background:radial-gradient(circle at top right, color-mix(in srgb, var(--accent-hover) 18%, transparent), transparent 42%), radial-gradient(circle at bottom left, color-mix(in srgb, var(--accent) 16%, transparent), transparent 40%), var(--bg-surface);justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:20px;padding:24px;display:flex}.settings-kicker.svelte-5x874c{color:var(--accent);letter-spacing:.08em;text-transform:uppercase;margin:0 0 10px;font-size:11px;font-weight:700}.settings-guardrails-hero.svelte-5x874c h3{margin-bottom:8px}.settings-guardrails-hero.svelte-5x874c p:last-child{color:var(--text-muted);margin-bottom:0}.settings-guardrails-meta.svelte-5x874c{gap:12px;display:flex}.settings-guardrails-stat.svelte-5x874c{border:1px solid color-mix(in srgb, var(--accent) 14%, var(--border));background:color-mix(in srgb, var(--bg-surface-hover) 76%, transparent);border-radius:16px;min-width:110px;padding:14px 16px}.settings-guardrails-stat-label.svelte-5x874c{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;margin-bottom:8px;font-size:11px;font-weight:700;display:block}.settings-guardrails-stat.svelte-5x874c strong{font-size:24px;font-weight:700}@media (width<=768px){.settings-guardrails-hero.svelte-5x874c{flex-direction:column}.settings-guardrails-meta.svelte-5x874c{width:100%}.settings-guardrails-stat.svelte-5x874c{flex:1 1 0}}.mcp-catalog-section.svelte-1xqrzco{margin-top:18px}.mcp-catalog-section.svelte-1xqrzco .form-field-label{margin-bottom:8px}.mcp-catalog-subtitle.svelte-1xqrzco{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.mcp-catalog-list.svelte-1xqrzco{flex-direction:column;gap:12px;margin:0 0 8px;padding:0;list-style:none;display:flex}.mcp-catalog-item-name.svelte-1xqrzco{overflow-wrap:anywhere;font-size:13px}.mcp-catalog-item-aggregated.svelte-1xqrzco{color:var(--text-muted);overflow-wrap:anywhere;margin-top:2px;font-size:11px}.mcp-catalog-item-description.svelte-1xqrzco{color:var(--text-muted);margin:2px 0 0;font-size:13px;font-weight:400}.mcp-server-sub-counts.svelte-ah8nrt{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;max-width:280px;margin-top:4px;font-size:11px;overflow:hidden}.mcp-server-table-wrapper.svelte-ah8nrt{overflow-x:auto}.mcp-server-table-wrapper.svelte-ah8nrt .data-table{min-width:860px}.auth-key-form-fields.svelte-1gswxes>.form-field{margin-bottom:4px}.auth-key-dashboard-toggle.svelte-1gswxes{cursor:pointer;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-key-issued-banner.svelte-1gswxes{background:color-mix(in srgb, var(--success) 8%, var(--bg-surface));border:1px solid color-mix(in srgb, var(--success) 30%, var(--border));border-radius:var(--radius);margin-bottom:20px;padding:16px}.auth-key-issued-warning.svelte-1gswxes{color:color-mix(in srgb, var(--success) 80%, var(--text));margin-bottom:12px;font-size:13px;font-weight:600}.auth-key-issued-value-row.svelte-1gswxes{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:12px;display:flex}.auth-key-issued-token.svelte-1gswxes{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);word-break:break-all;flex:1;min-width:0;padding:8px 12px;font-size:13px;overflow-x:auto}.usage-label-chip-static.svelte-nf0ldb,.usage-label-chip-static.svelte-nf0ldb:hover{cursor:default;background:color-mix(in srgb, var(--label-color,var(--accent)) 14%, var(--bg))}.auth-key-redacted.svelte-nf0ldb{color:var(--text-muted);font-size:13px}.auth-key-actions-cell.svelte-nf0ldb{white-space:nowrap}.auth-key-row-deactivated.svelte-nf0ldb td:where(.svelte-nf0ldb):not(.auth-key-actions-cell){opacity:.55}.auth-key-expiry.svelte-nf0ldb{white-space:nowrap;align-items:center;gap:8px;display:inline-flex}.auth-key-th-help.svelte-nf0ldb{cursor:help;align-items:center;gap:4px;display:inline-flex}.auth-key-row-actions.svelte-nf0ldb{align-items:center;gap:6px;display:inline-flex}.auth-keys-loading.svelte-1xpdcqx{justify-content:center;align-items:center;padding:32px 0;display:flex}.auth-keys-help-notice.svelte-1xpdcqx{margin-bottom:20px}.auth-keys-inactive-toggle.svelte-1xpdcqx{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;align-items:center;gap:8px;font-size:13px;display:inline-flex}.auth-keys-inactive-toggle.svelte-1xpdcqx input:where(.svelte-1xpdcqx){width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.settings-panel-header.svelte-15kyv2y{justify-content:space-between;gap:16px;margin-bottom:20px;display:flex}.settings-panel-header.svelte-15kyv2y h3{font-size:18px}.settings-form-grid.svelte-15kyv2y{grid-template-columns:minmax(280px,420px);gap:16px;display:grid}@media (width<=768px){.settings-form-grid.svelte-15kyv2y{grid-template-columns:1fr}}.budget-settings-section.svelte-a747ys{width:100%}.budget-settings-grid.svelte-a747ys{gap:12px;display:grid}.budget-settings-row.svelte-a747ys{grid-template-columns:96px minmax(170px,1fr) minmax(110px,140px) minmax(110px,140px) minmax(220px,280px);align-items:start;gap:12px;display:grid}.budget-settings-period.svelte-a747ys{color:var(--text);letter-spacing:0;text-transform:uppercase;align-self:end;min-height:35px;padding-bottom:9px;font-size:12px;font-weight:700}.budget-settings-spacer.svelte-a747ys{min-height:1px}.budget-settings-help-cell.svelte-a747ys{align-self:start;min-width:0;min-height:35px}.budget-settings-help-cell.svelte-a747ys .inline-help-copy{max-width:280px;margin:22px 0 0;font-size:12px;line-height:1.35}@media (width<=768px){.budget-settings-grid.svelte-a747ys,.budget-settings-row.svelte-a747ys{grid-template-columns:1fr}.budget-settings-spacer.svelte-a747ys{display:none}}.tagging-settings-grid.svelte-18e8yem{gap:12px;display:grid}.tagging-settings-row.svelte-18e8yem{grid-template-columns:minmax(170px,1fr) minmax(150px,1fr) minmax(80px,110px) auto minmax(90px,auto);align-items:end;gap:12px;display:grid}.tagging-do-not-pass.svelte-18e8yem{color:var(--text);white-space:nowrap;align-items:center;gap:6px;min-height:35px;font-size:13px;display:flex}.tagging-row-trailer.svelte-18e8yem{align-items:center;gap:8px;min-height:35px;display:flex}.tagging-settings-empty.svelte-18e8yem{color:var(--text-muted);margin:0}.tagging-settings-actions.svelte-18e8yem{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.tagging-settings-row.svelte-18e8yem{grid-template-columns:1fr;align-items:stretch}.tagging-settings-actions.svelte-18e8yem,.tagging-settings-actions.svelte-18e8yem .btn{width:100%}}.pricing-recalculate-section.svelte-1cdxzyk{width:100%}.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:minmax(220px,320px) minmax(260px,360px);justify-content:start;align-items:end;gap:12px;width:100%;display:grid}.pricing-recalculate-date-field.svelte-1cdxzyk{grid-column:1/-1;width:100%;max-width:320px}.pricing-recalculate-filter-field.svelte-1cdxzyk{width:100%;max-width:360px}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker{width:100%}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-trigger{justify-content:space-between;width:100%}.pricing-recalculate-actions.svelte-1cdxzyk{flex-wrap:wrap;gap:10px;display:flex}@media (width<=768px){.pricing-recalculate-grid.svelte-1cdxzyk{grid-template-columns:1fr}.pricing-recalculate-actions.svelte-1cdxzyk,.pricing-recalculate-actions.svelte-1cdxzyk .btn{width:100%}}.pricing-recalculate-date-field.svelte-1cdxzyk .date-picker-dropdown{inset:auto auto calc(100% + 6px) 0}.settings-refresh-icon.svelte-yeq2mp{flex:0 0 16px;width:16px;height:16px}.runtime-refresh-steps.svelte-yeq2mp{color:var(--text-muted);gap:8px;margin-top:14px;padding-left:18px;font-size:13px;display:grid}.runtime-refresh-step.is-ok.svelte-yeq2mp{color:var(--success)}.runtime-refresh-step.is-partial.svelte-yeq2mp{color:var(--warning)}.runtime-refresh-step.is-failed.svelte-yeq2mp{color:var(--danger)}.runtime-settings-copy.svelte-tldbe5{min-width:180px}.runtime-settings-fields.svelte-tldbe5{gap:16px;width:min(560px,100%);display:grid}.runtime-setting-row.svelte-tldbe5{grid-template-columns:minmax(220px,1fr) 180px;align-items:center;gap:20px;display:grid}.runtime-setting-description.svelte-tldbe5,.runtime-setting-managed.svelte-tldbe5{color:var(--text-muted);margin:4px 0 0;font-size:12px}.runtime-setting-managed.svelte-tldbe5{color:var(--warning)}@media (width<=720px){.runtime-setting-row.svelte-tldbe5{grid-template-columns:1fr;gap:8px}}.settings-version-footer.svelte-3naq7u{color:var(--text-muted);text-align:right;margin-top:24px;font-size:12px} diff --git a/internal/admin/dashboard/static/dist/assets/index-CXQeo5ha.js b/internal/admin/dashboard/static/dist/assets/index-CXQeo5ha.js new file mode 100644 index 000000000..f03e15c81 --- /dev/null +++ b/internal/admin/dashboard/static/dist/assets/index-CXQeo5ha.js @@ -0,0 +1,67 @@ +(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible;function d(e){return typeof e==`function`}var f=()=>{};function p(e){for(var t=0;t{e=n,t=r}),resolve:e,reject:t}}function h(e,t,n=!1){return e===void 0?n?t():t:e}function g(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);let n=[];for(let r of e)if(n.push(r),n.length===t)break;return n}var _=1<<24,v=1024,y=2048,b=4096,x=8192,S=16384,C=32768,w=1<<25,ee=65536,te=1<<19,ne=1<<20,re=1<<25,ie=65536,ae=1<<21,oe=1<<22,se=1<<23,ce=Symbol(`$state`),le=Symbol(`legacy props`),ue=Symbol(``),de=Symbol(`attributes`),fe=Symbol(`class`),pe=Symbol(`style`),me=Symbol(`text`),he=Symbol(`form reset`),ge=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},_e=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function ve(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function ye(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function be(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function xe(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function Se(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function Ce(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function we(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function Te(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Ee(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function De(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function Oe(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var ke={},Ae=Symbol(`uninitialized`),je=`http://www.w3.org/1999/xhtml`,Me=`http://www.w3.org/2000/svg`,Ne=`http://www.w3.org/1998/Math/MathML`;function Pe(){console.warn(`https://svelte.dev/e/derived_inert`)}function Fe(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Ie(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function Le(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var Re=!1;function ze(e){Re=e}var Be;function Ve(e){if(e===null)throw Fe(),ke;return Be=e}function He(){return Ve(bn(Be))}function T(e){if(Re){if(bn(Be)!==null)throw Fe(),ke;Be=e}}function Ue(e=1){if(Re){for(var t=e,n=Be;t--;)n=bn(n);Be=n}}function We(e=!0){for(var t=0,n=Be;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else(r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=bn(n);e&&n.remove(),n=i}}function Ge(e){if(!e||e.nodeType!==8)throw Fe(),ke;return e.data}function Ke(e){return e===this.v}function qe(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Je(e){return!qe(e,this.v)}var Ye=null;function Xe(e){Ye=e}function E(e,t=!1,n){Ye={p:Ye,i:!1,c:null,e:null,s:e,x:null,r:ir,l:null}}function D(e){var t=Ye,n=t.e;if(n!==null){t.e=null;for(var r of n)jn(r)}return e!==void 0&&(t.x=e),t.i=!0,Ye=t.p,e??{}}function Ze(){return!0}var Qe=[];function $e(){var e=Qe;Qe=[],p(e)}function et(e){if(Qe.length===0&&!zt){var t=Qe;queueMicrotask(()=>{t===Qe&&$e()})}Qe.push(e)}function tt(){for(;Qe.length>0;)$e()}function nt(e){var t=ir;if(t===null)return tr.f|=se,e;if(!(t.f&32768)&&!(t.f&4))throw e;rt(e,t)}function rt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var it=~(y|b|v);function at(e,t){e.f=e.f&it|t}function ot(e){e.f&512||e.deps===null?at(e,v):at(e,b)}function st(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=ie,st(t.deps))}function ct(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),st(e.deps),at(e,v)}var lt=!1;function ut(e){var t=lt;try{return lt=!1,[e(),lt]}finally{lt=t}}function dt(e,t){if(t){let t=document.body;e.autofocus=!0,et(()=>{document.activeElement===t&&e.focus()})}}function ft(e){Re&&yn(e)!==null&&xn(e)}var pt=!1;function mt(){pt||(pt=!0,document.addEventListener(`reset`,e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(let t of e.target.elements)t[he]?.()})},{capture:!0}))}function ht(e){var t=tr,n=ir;rr(null),ar(null);try{return e()}finally{rr(t),ar(n)}}function gt(e,t,n,r=n){e.addEventListener(t,()=>ht(n));let i=e[he];i?e[he]=()=>{i(),r(!0)}:e[he]=()=>r(!0),mt()}function _t(e){let t=0,n=an(0),r;return()=>{On()&&(I(n),In(()=>(t===0&&(r=Er(()=>e(()=>ln(n)))),t+=1,()=>{et(()=>{--t,t===0&&(r?.(),r=void 0,ln(n))})})))}}var vt=ee|te;function yt(e,t,n,r){new bt(e,t,n,r)}var bt=class{parent;is_pending=!1;transform_error;#e;#t=Re?Be:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=_t(()=>(this.#m=an(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=ir;t.b=this,t.f|=128,n(e)},this.parent=ir.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=Ln(()=>{if(Re){let e=this.#t;He();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},vt),Re&&(this.#e=Be)}#g(){try{this.#a=zn(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=zn(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=zn(()=>e(this.#e)),et(()=>{var e=this.#c=document.createDocumentFragment(),t=vn();e.append(t),this.#a=this.#x(()=>zn(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,Kn(this.#o,()=>{this.#o=null}),this.#b(Ft))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=zn(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();Xn(this.#a,e);let t=this.#n.pending;this.#o=zn(()=>t(this.#e))}else this.#b(Ft)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){ct(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=ir,n=tr,r=Ye;ar(this.#i),rr(this.#i),Xe(this.#i.ctx);try{return Gt.ensure(),e()}catch(e){return nt(e),null}finally{ar(t),rr(n),Xe(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&Kn(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,et(()=>{this.#d=!1,this.#m&&sn(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),I(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;Ft?.is_fork?(this.#a&&Ft.skip_effect(this.#a),this.#o&&Ft.skip_effect(this.#o),this.#s&&Ft.skip_effect(this.#s),Ft.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(Un(this.#a),null),this.#o&&=(Un(this.#o),null),this.#s&&=(Un(this.#s),null),Re&&(Ve(this.#t),Ue(),Ve(We()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Le();return}r=!0,i&&Oe(),this.#s!==null&&Kn(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){rt(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return zn(()=>{var t=ir;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return rt(e,this.#i.parent),null}}))};et(()=>{var t;try{t=this.transform_error(e)}catch(e){rt(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>rt(e,this.#i&&this.#i.parent)):o(t)})}};function xt(e,t,n,r){let i=Ze()?Tt:Ot;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=ir,c=St(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){rt(e,s)}Ct()}}var d=wt();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>Dt(e))).then(u).catch(e=>rt(e,s)).finally(d)}l?l.then(()=>{c(),f(),Ct()}):f()}function St(){var e=ir,t=tr,n=Ye,r=Ft;return function(i=!0){ar(e),rr(t),Xe(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function Ct(e=!0){ar(null),rr(null),Xe(null),e&&Ft?.deactivate()}function wt(){var e=ir,t=e.b,n=Ft,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function Tt(e){var t=2|y;return ir!==null&&(ir.f|=te),{ctx:Ye,deps:null,effects:null,equals:Ke,f:t,fn:e,reactions:null,rv:0,v:Ae,wv:0,parent:ir,ac:null}}var Et=Symbol(`obsolete`);function Dt(e,t,n){let r=ir;r===null&&ve();var i=void 0,a=an(Ae),o=!tr,s=new Set;return Fn(()=>{var t=ir,n=m();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==ge&&n.reject(e)}).finally(Ct)}catch(e){n.reject(e),Ct()}var c=Ft;if(o){if(t.f&32768)var l=wt();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(Et);else for(let e of s.values())e.reject(Et);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==Et&&(c.activate(),t?(a.f|=se,sn(a,t)):(a.f&8388608&&(a.f^=se),sn(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),kn(()=>{for(let e of s)e.reject(Et)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function O(e){let t=Tt(e);return sr(t),t}function Ot(e){let t=Tt(e);return t.equals=Je,t}function kt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n{t.ac.abort(ge),t.ac=null}),t.fn!==null&&(t.teardown=f),xr(t,0),Vn(t))}function Nt(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&Sr(t)}var Pt=null,Ft=null,It=null,Lt=null,Rt=null,zt=!1,Bt=!1,Vt=null,Ht=null,Ut=0,Wt=1,Gt=class e{id=Wt++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){Pt===null?Pt=this:(Pt.#n=this,this.#t=Pt),Pt=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)at(r,y),t(r);for(r of n.m)at(r,b),t(r)}this.#p.add(e)}#g(){this.#e=!0,Ut++>1e3&&(this.#x(),qt());for(let e of this.#u)this.#d.delete(e),at(e,y),this.schedule(e);for(let e of this.#d)at(e,b),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Vt=[],r=[],i=Ht=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw en(e),this.#h()||this.discard(),t}if(Ft=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Vt=null,Ht=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)$t(e,t);i.length>0&&Ft.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),It=this,Yt(r),Yt(n),It=null,this.#s?.resolve();var s=Ft;if(this.#a===0&&(this.#c.length===0||s!==null)&&this.#x(),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=v;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=v:i&4?t.push(r):_r(r)&&(i&16&&this.#d.add(r),Sr(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null&&!(e.f&2&&!(e.f&6144)))for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),at(i,y),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#x(),Ft=this,this.#g()}#b(e){for(var t=0;t{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=m()).promise}static ensure(){if(Ft===null){let t=Ft=new e;!Bt&&!zt&&et(()=>{t.#e||t.flush()})}return Ft}apply(){Lt=null}schedule(e){if(Rt=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(Vt!==null&&t===ir&&(tr===null||!(tr.f&2)))return;if(n&96){if(!(n&1024))return;t.f^=v}}this.#c.push(t)}#x(){if(this.linked){var e=this.#t,t=this.#n;e===null||(e.#n=t),t===null?Pt=e:t.#t=e,this.linked=!1}}};function Kt(e){var t=zt;zt=!0;try{var n;for(e&&(Ft!==null&&!Ft.is_fork&&Ft.flush(),n=e());;){if(tt(),Ft===null)return n;Ft.flush()}}finally{zt=t}}function qt(){try{Ce()}catch(e){rt(e,Rt)}}var Jt=null;function Yt(e){var t=e.length;if(t!==0){for(var n=0;n0)){nn.clear();for(let e of Jt){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)Jt.has(n)&&(Jt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||Sr(n)}}Jt.clear()}}Jt=null}}function Xt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?Xt(i,t,n,r):e&4194320&&!(e&2048)&&Zt(i,t,r)&&(at(i,y),Qt(i))}}function Zt(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&Zt(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function Qt(e){Ft.schedule(e)}function $t(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),at(e,v);for(var n=e.first;n!==null;)$t(n,t),n=n.next}}function en(e){at(e,v);for(var t=e.first;t!==null;)en(t),t=t.next}var tn=new Set,nn=new Map,rn=!1;function an(e,t){return{f:0,v:e,reactions:null,equals:Ke,rv:0,wv:0}}function k(e,t){let n=an(e,t);return sr(n),n}function on(e,t=!1,n=!0){let r=an(e);return t||(r.equals=Je),r}function A(e,t,n=!1){return tr!==null&&(!nr||tr.f&131072)&&Ze()&&tr.f&4325394&&(or===null||!or.has(e))&&De(),sn(e,n?j(t):t,Ht)}function sn(e,t,n=null){if(!e.equals(t)){nn.set(e,$n?t:e.v);var r=Gt.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&At(t),Lt===null&&ot(t)}e.wv=gr(),un(e,y,n),Ze()&&ir!==null&&ir.f&1024&&!(ir.f&96)&&(ur===null?dr([e]):ur.push(e)),!r.is_fork&&tn.size>0&&!rn&&cn()}return t}function cn(){rn=!1;for(let e of tn){e.f&1024&&at(e,b);let t;try{t=_r(e)}catch{t=!0}t&&Sr(e)}tn.clear()}function ln(e){A(e,e.v+1)}function un(e,t,n){var r=e.reactions;if(r!==null)for(var i=Ze(),a=r.length,o=0;o{if(mr===d)return e();var t=tr,n=mr;rr(null),hr(d);var r=e();return rr(t),hr(n),r};return i&&r.set(`length`,k(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&Te();var i=r.get(t);return i===void 0?f(()=>{var e=k(n.value,u);return r.set(t,e),e}):A(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>k(Ae,u));r.set(t,e),ln(o)}}else A(n,Ae),ln(o);return!0},get(e,n,i){if(n===ce)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>k(j(s?e[n]:Ae),u)),r.set(n,o)),o!==void 0){var c=I(o);return c===Ae?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=I(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==Ae)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===ce)return!0;var n=r.get(t),i=n!==void 0&&n.v!==Ae||Reflect.has(e,t);return(n!==void 0||ir!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>k(i?j(e[t]):Ae,u)),r.set(t,n)),I(n)===Ae)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;dk(Ae,u)),r.set(d+``,p)):A(p,Ae)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>k(void 0,u)),A(c,j(n)),r.set(t,c));else{l=c.v!==Ae;var m=f(()=>j(n));A(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&A(g,_+1)}ln(o)}return!0},ownKeys(e){I(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==Ae});for(var[n,i]of r)i.v!==Ae&&!(n in e)&&t.push(n);return t},setPrototypeOf(){Ee()}})}function dn(e){try{if(typeof e==`object`&&e&&ce in e)return e[ce]}catch{}return e}function fn(e,t){return Object.is(dn(e),dn(t))}var pn,mn,hn,gn;function _n(){if(pn===void 0){pn=window,mn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;hn=a(t,`firstChild`).get,gn=a(t,`nextSibling`).get,u(e)&&(e[fe]=void 0,e[de]=null,e[pe]=void 0,e.__e=void 0),u(n)&&(n[me]=void 0)}}function vn(e=``){return document.createTextNode(e)}function yn(e){return hn.call(e)}function bn(e){return gn.call(e)}function M(e,t){if(!Re)return yn(e);var n=yn(Be);if(n===null)n=Be.appendChild(vn());else if(t&&n.nodeType!==3){var r=vn();return n?.before(r),Ve(r),r}return t&&wn(n),Ve(n),n}function N(e,t=!1){if(!Re){var n=yn(e);return n instanceof Comment&&n.data===``?bn(n):n}if(t){if(Be?.nodeType!==3){var r=vn();return Be?.before(r),Ve(r),r}wn(Be)}return Be}function P(e,t=1,n=!1){let r=Re?Be:e;for(var i;t--;)i=r,r=bn(r);if(!Re)return r;if(n){if(r?.nodeType!==3){var a=vn();return r===null?i?.after(a):r.before(a),Ve(a),a}wn(r)}return Ve(r),r}function xn(e){e.textContent=``}function Sn(){return!1}function Cn(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function wn(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function Tn(e){ir===null&&(tr===null&&Se(e),xe()),$n&&be(e)}function En(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function Dn(e,t){var n=ir;n!==null&&n.f&8192&&(e|=x);var r={ctx:Ye,deps:null,nodes:null,f:e|y|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Ft?.register_created_effect(r);var i=r;if(e&4)Vt===null?Gt.ensure().schedule(r):Vt.push(r);else if(t!==null){try{Sr(r)}catch(e){throw Un(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=ee))}if(i!==null&&(i.parent=n,n!==null&&En(i,n),tr!==null&&tr.f&2&&!(e&64))){var a=tr;(a.effects??=[]).push(i)}return r}function On(){return tr!==null&&!nr}function kn(e){let t=Dn(8,null);return at(t,v),t.teardown=e,t}function An(e){Tn(`$effect`);var t=ir.f;if(!tr&&t&32&&Ye!==null&&!Ye.i){var n=Ye;(n.e??=[]).push(e)}else return jn(e)}function jn(e){return Dn(4|ne,e)}function Mn(e){Gt.ensure();let t=Dn(64|te,e);return()=>{Un(t)}}function Nn(e){Gt.ensure();let t=Dn(64|te,e);return(e={})=>new Promise(n=>{e.outro?Kn(t,()=>{Un(t),n(void 0)}):(Un(t),n(void 0))})}function Pn(e){return Dn(4,e)}function Fn(e){return Dn(oe|te,e)}function In(e,t=0){return Dn(8|t,e)}function F(e,t=[],n=[],r=[]){xt(r,t,n,t=>{Dn(8,()=>{e(...t.map(I))})})}function Ln(e,t=0){return Dn(16|t,e)}function Rn(e,t=0){return Dn(_|t,e)}function zn(e){return Dn(32|te,e)}function Bn(e){var t=e.teardown;if(t!==null){let e=$n,n=tr;er(!0),rr(null);try{t.call(null)}finally{er(e),rr(n)}}}function Vn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&ht(()=>{e.abort(ge)});var r=n.next;n.f&64?n.parent=null:Un(n,t),n=r}}function Hn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||Un(t),t=n}}function Un(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Wn(e.nodes.start,e.nodes.end),n=!0),e.f|=w,Vn(e,t&&!n),xr(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();Bn(e),e.f^=w,e.f|=S;var i=e.parent;i!==null&&i.first!==null&&Gn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Wn(e,t){for(;e!==null;){var n=e===t?null:bn(e);e.remove(),e=n}}function Gn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Kn(e,t,n=!0){var r=[];qn(e,r,!0);var i=()=>{n&&Un(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function qn(e,t,n){if(!(e.f&8192)){e.f^=x;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;qn(i,t,o?n:!1)}i=a}}}function Jn(e){Yn(e,!0)}function Yn(e,t){if(e.f&8192){e.f^=x,e.f&1024||(at(e,y),Gt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;Yn(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function Xn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:bn(n);t.append(n),n=i}}var Zn=null,Qn=!1,$n=!1;function er(e){$n=e}var tr=null,nr=!1;function rr(e){tr=e}var ir=null;function ar(e){ir=e}var or=null;function sr(e){tr!==null&&(or??=new Set).add(e)}var cr=null,lr=0,ur=null;function dr(e){ur=e}var fr=1,pr=0,mr=pr;function hr(e){mr=e}function gr(){return++fr}function _r(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~ie),t&4096){for(var n=e.deps,r=n.length,i=0;ie.wv)return!0}t&512&&Lt===null&&at(e,v)}return!1}function vr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(or!==null&&or.has(e)))for(var i=0;i{e.ac.abort(ge)}),e.ac=null);try{e.f|=ae;var u=e.fn,d=u();e.f|=C;var f=e.deps,p=Ft?.is_fork;if(cr!==null){var m;if(p||xr(e,lr),f!==null&&lr>0)for(f.length=lr+cr.length,m=0;m{s.ac.abort(ge),s.ac=null,at(s,y)}),Mt(s),xr(s,0)}}function xr(e,t){var n=e.deps;if(n!==null)for(var r=t;rn?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?et(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Vr(e,t,n,r,i){var a={capture:r,passive:i},o=Br(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&kn(()=>{t.removeEventListener(e,o,a)})}function L(e,t,n){(t[Lr]??={})[e]=n}function Hr(e){for(var t=0;t{throw e});throw p}}finally{e[Lr]=t,delete e.currentTarget,rr(d),ar(f)}}}var Gr=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function Kr(e){return Gr?.createHTML(e)??e}function qr(e){var t=Cn(`template`);return t.innerHTML=Kr(e.replaceAll(``,``)),t.content}function Jr(e,t){var n=ir;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function R(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(``);return()=>{if(Re)return Jr(Be,null),Be;i===void 0&&(i=qr(a?e:``+e),n||(i=yn(i)));var t=r||mn?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=yn(t),s=t.lastChild;Jr(o,s)}else Jr(t,t);return t}}function Yr(e,t,n=`svg`){var r=!e.startsWith(``),i=(t&1)!=0,a=`<${n}>${r?e:``+e}`,o;return()=>{if(Re)return Jr(Be,null),Be;if(!o){var e=yn(qr(a));if(i)for(o=document.createDocumentFragment();yn(e);)o.appendChild(yn(e));else o=yn(e)}var t=o.cloneNode(!0);if(i){var n=yn(t),r=t.lastChild;Jr(n,r)}else Jr(t,t);return t}}function Xr(e,t){return Yr(e,t,`svg`)}function Zr(e=``){if(!Re){var t=vn(e+``);return Jr(t,t),t}var n=Be;return n.nodeType===3?wn(n):(n.before(n=vn()),Ve(n)),Jr(n,n),n}function Qr(){if(Re)return Jr(Be,null),Be;var e=document.createDocumentFragment(),t=document.createComment(``),n=vn();return e.append(t,n),Jr(t,n),e}function z(e,t){if(Re){var n=ir;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=Be),He();return}e!==null&&e.before(t)}var $r=!0;function ei(e){$r=e}function B(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[me]??=e.nodeValue)&&(e[me]=n,e.nodeValue=`${n}`)}function ti(e,t){return ri(e,t)}var ni=new Map;function ri(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){_n();var l=void 0,u=Nn(()=>{var u=n??t.appendChild(vn());yt(u,{pending:()=>{}},t=>{E({});var n=Ye;if(o&&(n.c=o),a&&(i.$$events=a),Re&&Jr(t,null),$r=s,l=e(t,i)||{},$r=!0,Re&&(ir.nodes.end=Be,Be===null||Be.nodeType!==8||Be.data!==`]`))throw Fe(),ke;D()},c);var d=new Set,f=e=>{for(var n=0;n{for(var e of d)for(let n of[t,document]){var r=ni.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,Wr),r.delete(e),r.size===0&&ni.delete(n)):r.set(e,i)}zr.delete(f),u!==n&&u.parentNode?.removeChild(u)}});return ii.set(l,u),l}var ii=new WeakMap,ai=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)Jn(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(Jn(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(Un(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();Xn(r,t),t.append(vn()),this.#n.set(e,{effect:r,fragment:t})}else Un(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),Kn(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(Un(n.effect),this.#n.delete(e))};ensure(e,t){var n=Ft,r=Sn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=vn();i.append(a),this.#n.set(e,{effect:zn(()=>t(a)),fragment:i})}else this.#t.set(e,zn(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else Re&&(this.anchor=Be),this.#a(n)}};function V(e,t,n=!1){var r;Re&&(r=Be,He());var i=new ai(e),a=n?ee:0;function o(e,t){if(Re){var n=Ge(r);if(e!==parseInt(n.substring(1))){var a=We();Ve(a),i.anchor=a,ze(!1),i.ensure(e,t),ze(!0);return}}i.ensure(e,t)}Ln(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}function oi(e,t){return t}function si(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;ci(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else--s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;xn(d),d.append(u),e.items.clear()}ci(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function ci(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,di(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=re,pi(d,null,c)):Jn(d):Kn(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:Ln(()=>{p=I(f);var e=p.length;let t=!1;Re&&Ge(c)===`[!`!=(e===0)&&(c=We(),Ve(c),ze(!1),t=!0);for(var r=new Set,u=Ft,v=Sn(),y=0;ys(c)):(d=zn(()=>s(li??=vn())),d.f|=re)),e>r.size&&ye(``,``,``),Re&&e>0&&Ve(We()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&ze(!0),I(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,Re&&(c=Be)}function ui(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function di(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=ui(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v0){var te=i&4&&s===0?n:null;if(o){for(v=0;v{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function fi(e,t,n,r,i,a,o,s){var c=o&1?o&16?an(n):on(n,!1,!1):null,l=o&2?an(i):null;return{v:c,i:l,e:zn(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function pi(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=bn(r);if(a.before(r),r===i)return;r=o}}function mi(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function hi(e,t,n=!1,r=!1,i=!1,a=!1){var o=e,s=``;if(n){var c=e;Re&&(o=Ve(yn(c)))}F(()=>{var e=ir;if(s===(s=t()??``)){Re&&He();return}if(n&&!Re){e.nodes=null,c.innerHTML=s,s!==``&&Jr(yn(c),c.lastChild);return}if(e.nodes!==null&&(Wn(e.nodes.start,e.nodes.end),e.nodes=null),s!==``){if(Re){for(var a=Be.data,l=He(),u=l;l!==null&&(l.nodeType!==8||l.data!==``);)u=l,l=bn(l);if(l===null)throw Fe(),ke;Jr(Be,u),o=Ve(l);return}var d=Cn(r?`svg`:i?`math`:`template`,r?Me:i?Ne:void 0);d.innerHTML=s;var f=r||i?d:d.content;if(Jr(yn(f),f.lastChild),r||i)for(;yn(f);)o.before(yn(f));else o.before(f)}})}function gi(e,t,...n){var r=new ai(e);Ln(()=>{let e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},ee)}function _i(e,t,n){var r;Re&&(r=Be,He());var i=new ai(e);Ln(()=>{var e=t()??null;if(Re&&Ge(r)===`[`!=(e!==null)){var a=We();Ve(a),i.anchor=a,ze(!1),i.ensure(e,e&&(t=>n(t,e))),ze(!0);return}i.ensure(e,e&&(t=>n(t,e)))},ee)}var vi=()=>performance.now(),yi={tick:e=>requestAnimationFrame(e),now:()=>vi(),tasks:new Set};function bi(){let e=yi.now();yi.tasks.forEach(t=>{t.c(e)||(yi.tasks.delete(t),t.f())}),yi.tasks.size!==0&&yi.tick(bi)}function xi(e){let t;return yi.tasks.size===0&&yi.tick(bi),{promise:new Promise(n=>{yi.tasks.add(t={c:e,f:n})}),abort(){yi.tasks.delete(t)}}}function Si(e,t){ht(()=>{e.dispatchEvent(new CustomEvent(t))})}function Ci(e){if(e===`float`)return`cssFloat`;if(e===`offset`)return`cssOffset`;if(e.startsWith(`--`))return e;let t=e.split(`-`);return t.length===1?t[0]:t[0]+t.slice(1).map(e=>e[0].toUpperCase()+e.slice(1)).join(``)}function wi(e){let t={},n=e.split(`;`);for(let e of n){let[n,r]=e.split(`:`);if(!n||r===void 0)break;let i=Ci(n.trim());t[i]=r.trim()}return t}var Ti=e=>e,Ei=null;function Di(e){Ei=e}function Oi(e,t,n){var r=(Ei??ir).nodes,i,a,o,s=null;r.a??={element:e,measure(){i=this.element.getBoundingClientRect()},apply(){if(o?.abort(),a=this.element.getBoundingClientRect(),i.left!==a.left||i.right!==a.right||i.top!==a.top||i.bottom!==a.bottom){let e=t()(this.element,{from:i,to:a},n?.());o=Ai(this.element,e,void 0,1,()=>{},()=>{o?.abort(),o=void 0})}},fix(){if(!e.getAnimations().length){var{position:t,width:n,height:r}=getComputedStyle(e);if(t!==`absolute`&&t!==`fixed`){var a=e.style;s={position:a.position,width:a.width,height:a.height,transform:a.transform},a.position=`absolute`,a.width=n,a.height=r;var o=e.getBoundingClientRect();if(i.left!==o.left||i.top!==o.top){var c=`translate(${i.left-o.left}px, ${i.top-o.top}px)`;a.transform=a.transform?`${a.transform} ${c}`:c}}}},unfix(){if(s){var t=e.style;t.position=s.position,t.width=s.width,t.height=s.height,t.transform=s.transform}}},r.a.element=e}function ki(e,t,n,r){var i=(e&1)!=0,a=(e&2)!=0,o=i&&a,s=(e&4)!=0,c=o?`both`:i?`in`:`out`,l,u=t.inert,d=t.style.overflow,f,p;function m(){return ht(()=>l??=n()(t,r?.()??{},{direction:c}))}var h={is_global:s,in(){if(t.inert=u,!i){p?.abort(),p?.reset?.();return}a||f?.abort(),f=Ai(t,m(),p,1,()=>{Si(t,`introstart`)},()=>{Si(t,`introend`),f?.abort(),f=l=void 0,t.style.overflow=d})},out(e){if(!a){e?.(),l=void 0;return}t.inert=!0,p=Ai(t,m(),f,0,()=>{Si(t,`outrostart`)},()=>{Si(t,`outroend`),e?.()})},stop:()=>{f?.abort(),p?.abort()}},g=ir;if((g.nodes.t??=[]).push(h),i&&$r){var _=s;if(!_){for(var v=g.parent;v&&v.f&65536;)for(;(v=v.parent)&&!(v.f&16););_=!v||(v.f&32768)!=0}_&&Pn(()=>{Er(()=>h.in())})}}function Ai(e,t,n,r,i,a){var o=r===1;if(d(t)){var s,c=!1;return et(()=>{c||(s=Ai(e,t({direction:o?`in`:`out`}),n,r,i,a))}),{abort:()=>{c=!0,s?.abort()},deactivate:()=>s.deactivate(),reset:()=>s.reset(),t:()=>s.t()}}if(n?.deactivate(),!t?.duration&&!t?.delay)return i(),a(),{abort:f,deactivate:f,reset:f,t:()=>r};let{delay:l=0,css:u,tick:p,easing:m=Ti}=t;var h=[];if(o&&n===void 0&&(p&&p(0,1),u)){var g=wi(u(0,1));h.push(g,g)}var _=()=>1-r,v=e.animate(h,{duration:l,fill:`forwards`});return v.onfinish=()=>{v.cancel(),i();var o=n?.t()??1-r;n?.abort();var s=r-o,c=t.duration*Math.abs(s),l=[];if(c>0){var d=!1;if(u)for(var f=Math.ceil(c/(1e3/60)),h=0;h<=f;h+=1){var g=o+s*m(h/f),y=wi(u(g,1-g));l.push(y),d||=y.overflow===`hidden`}d&&(e.style.overflow=`hidden`),_=()=>{var e=v.currentTime;return o+s*m(e/c)},p&&xi(()=>{if(v.playState!==`running`)return!1;var e=_();return p(e,1-e),!0})}v=e.animate(l,{duration:c,fill:`forwards`}),v.onfinish=()=>{_=()=>r,p?.(r,1-r),a()}},{abort:()=>{v&&(v.cancel(),v.effect=null,v.onfinish=f)},deactivate:()=>{a=f},reset:()=>{r===0&&p?.(1,0)},t:()=>_()}}function ji(e,t,n,r,i,a){let o=Re;Re&&He();var s=null;Re&&Be.nodeType===1&&(s=Be,He());var c=Re?Be:e,l=ir,u=new ai(c,!1);Ln(()=>{let e=t()||null;var a=i?i():n||e===`svg`?Me:void 0;if(e===null){u.ensure(null,null),ei(!0);return}return u.ensure(e,t=>{if(e){if(s=Re?s:Cn(e,a),Jr(s,s),r){var n=null;Re&&Ir(e)&&s.append(n=document.createComment(``));var i=Re?yn(s):s.appendChild(vn());Re&&(i===null?ze(!1):Ve(i)),Di(l),r(s,i),n?.remove(),Di(null)}ir.nodes.end=s,t.before(s)}Re&&Ve(t)}),ei(!0),()=>{e&&ei(!1)}},ee),kn(()=>{ei(!0)}),o&&(ze(!0),Ve(c))}function Mi(e,t){var n=void 0,r;Rn(()=>{n!==(n=t())&&(r&&=(Un(r),null),n&&(r=zn(()=>{Pn(()=>n(e))})))})}function Ni(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t=0;){var s=o+a;(o===0||Ii.includes(r[o-1]))&&(s===r.length||Ii.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Ri(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function zi(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function Bi(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(zi)),i&&c.push(...Object.keys(i).map(zi));var l=0,u=-1;let t=e.length;for(var d=0;d{Ui(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),kn(()=>{t.disconnect()})}function Gi(e,t,n=t){var r=new WeakSet,i=!0;gt(e,`change`,t=>{var i=t?`[selected]`:`:checked`,a;if(e.multiple)a=[].map.call(e.querySelectorAll(i),Ki);else{var o=e.querySelector(i)??e.querySelector(`option:not([disabled])`);a=o&&Ki(o)}n(a),e.__value=a,Ft!==null&&r.add(Ft)}),Pn(()=>{var a=t();if(e===document.activeElement){var o=Ft;if(r.has(o))return}if(Ui(e,a,i),i&&a===void 0){var s=e.querySelector(`:checked`);s!==null&&(a=Ki(s),n(a))}e.__value=a,i=!1}),Wi(e)}function Ki(e){return`__value`in e?e.__value:e.value}var qi=Symbol(`class`),Ji=Symbol(`style`),Yi=Symbol(`is custom element`),Xi=Symbol(`is html`),Zi=_e?`link`:`LINK`,Qi=_e?`input`:`INPUT`,$i=_e?`option`:`OPTION`,ea=_e?`select`:`SELECT`,ta=_e?`progress`:`PROGRESS`;function na(e){if(Re){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;W(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;W(e,`checked`,null),e.checked=r}}};e[he]=n,et(n),mt()}}function ra(e,t){var n=ca(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==ta)||(e.value=t??``)}function ia(e,t){var n=ca(e);n.checked!==(n.checked=t??void 0)&&(e.checked=t)}function aa(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function W(e,t,n,r){var i=ca(e);Re&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Zi)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[ue]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&ua(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function oa(e,t,n,r,i=!1,a=!1){if(Re&&i&&e.nodeName===Qi){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||na(o)}var s=ca(e),c=s[Yi],l=!s[Xi];let u=Re&&c;u&&ze(!1);var d=t||{},f=e.nodeName===$i;for(var p in t)p in n||(n[p]=null);n.class?n.class=Fi(n.class):(r||n[qi])&&(n.class=null),n[Ji]&&(n.style??=null);var m=ua(e);if(e.nodeName===Qi&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,W(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){U(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[qi],n[qi]),d[i]=o,d[qi]=n[qi];continue}if(i===`style`){Hi(e,o,t?.[Ji],n[Ji]),d[i]=o,d[Ji]=n[Ji];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=kr(r);if(Dr(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)L(r,e,o),Hr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=Br(r,e,a,t)}}else if(i===`style`)W(e,i,o);else if(i===`autofocus`)dt(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))e.value=e.__value=o;else if(i===`selected`&&f)aa(e,o);else{var y=i;l||(y=Mr(y));var b=y===`defaultValue`||y===`defaultChecked`;if(o==null&&!c&&!b)if(s[i]=null,y===`value`||y===`checked`){let n=e,r=t===void 0;if(y===`value`){let e=n.defaultValue;n.removeAttribute(y),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(y),n.defaultChecked=e,n.checked=r?e:!1}}else e.removeAttribute(i);else b||m.includes(y)&&(c||typeof o!=`string`)?(e[y]=o,y in s&&(s[y]=Ae)):typeof o!=`function`&&W(e,y,o,a)}}}return u&&ze(!0),d}function sa(e,t,n=[],r=[],i=[],a,o=!1,s=!1){xt(i,n,r,n=>{var r=void 0,i={},c=e.nodeName===ea,l=!1;if(Rn(()=>{var u=t(...n.map(I)),d=oa(e,r,u,a,o,s);l&&c&&`value`in u&&Ui(e,u.value);for(let e of Object.getOwnPropertySymbols(i))u[e]||Un(i[e]);for(let t of Object.getOwnPropertySymbols(u)){var f=u[t];t.description===`@attach`&&(!r||f!==r[t])&&(i[t]&&Un(i[t]),i[t]=zn(()=>Mi(e,()=>f))),d[t]=f}r=d}),c){var u=e;Pn(()=>{Ui(u,r.value,!0),Wi(u)})}l=!0})}function ca(e){return e[de]??={[Yi]:e.nodeName.includes(`-`),[Xi]:e.namespaceURI===je}}var la=new Map;function ua(e){var t=e.getAttribute(`is`)||e.nodeName,n=la.get(t);if(n)return n;la.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function da(e,t,n=t){var r=new WeakSet;gt(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=pa(e)?ma(a):a,n(a),Ft!==null&&r.add(Ft),await Cr(),a!==(a=t())){var o=e.selectionStart,s=e.selectionEnd,c=e.value.length;if(e.value=a??``,s!==null){var l=e.value.length;o===s&&s===c&&l>c?(e.selectionStart=l,e.selectionEnd=l):(e.selectionStart=o,e.selectionEnd=Math.min(s,l))}}}),(Re&&e.defaultValue!==e.value||Er(t)==null&&e.value)&&(n(pa(e)?ma(e.value):e.value),Ft!==null&&r.add(Ft)),In(()=>{var n=t();if(e===document.activeElement){var i=Ft;if(r.has(i))return}pa(e)&&n===ma(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function fa(e,t,n=t){gt(e,`change`,t=>{n(t?e.defaultChecked:e.checked)}),(Re&&e.defaultChecked!==e.checked||Er(t)==null)&&n(e.checked),In(()=>{e.checked=!!t()})}function pa(e){var t=e.type;return t===`number`||t===`range`}function ma(e){return e===``?null:+e}function ha(e,t){return e===t||e?.[ce]===t}function ga(e={},t,n,r){var i=Ye.r,a=ir;return Pn(()=>{var o,s;return In(()=>{o=s,s=r?.()||[],Er(()=>{ha(n(...s),e)||(t(e,...s),o&&ha(n(...o),e)&&t(null,...o))})}),()=>{let r=a;for(;r!==i&&r.parent!==null&&r.parent.f&33554432;)r=r.parent;let o=()=>{s&&ha(n(...s),e)&&t(null,...s)},c=r.teardown;r.teardown=()=>{o(),c?.()}}}),e}var _a={get(e,t){if(!e.exclude.has(t))return e.props[t]},set(e,t){return!1},getOwnPropertyDescriptor(e,t){if(!e.exclude.has(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},has(e,t){return!e.exclude.has(t)&&t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.has(t))}};function va(e,t,n){return new Proxy({props:e,exclude:t},_a)}function ya(e,t,n,r){var i=!0,o=(n&8)!=0,s=(n&16)!=0,c=r,l=!0,u=void 0,d=()=>s&&i?(u??=Tt(r),I(u)):(l&&(l=!1,c=s?Er(r):r),c);let f;if(o){var p=ce in e||le in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=ut(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&we(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?Tt:Ot)(()=>(v=!1,g()));o&&I(y);var b=ir;return(function(e,t){if(arguments.length>0){let n=t?I(y):i&&o?j(e):e;return A(y,n),v=!0,c!==void 0&&(c=n),e}return $n&&v||b.f&16384?y.v:I(y)})}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var ba=new Set([`$$slots`,`$$events`,`$$legacy`,`icon`,`class`]),xa=Xr(``);function G(e,t){let n=ya(t,`icon`,19,()=>[]),r=ya(t,`class`,3,``),i=va(t,ba);var a=xa();sa(a,()=>({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`,class:r(),"aria-hidden":`true`,focusable:`false`,...i}));{let e=(t,n=f)=>{var r=Qr();H(N(r),17,n,oi,(t,n)=>{var r=O(()=>g(I(n),3));let i=()=>I(r)[0],a=()=>I(r)[1],o=()=>I(r)[2];var s=Qr();ji(N(s),i,!0,(t,n)=>{sa(t,()=>({xmlns:`http://www.w3.org/2000/svg`,...a()}));var r=Qr(),i=N(r),s=t=>{e(t,o)},c=O(()=>Array.isArray(o()));V(i,e=>{I(c)&&e(s)}),z(n,r)}),z(t,s)}),z(t,r)};e(M(a),n),T(a)}z(e,a)}var Sa=Xr(``);function Ca(e){z(e,Sa())}function wa(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function Ta(e,t=null){let n=wa();if(!n)return t;try{return n.getItem(e)??t}catch{return t}}function Ea(e,t){let n=wa();if(n)try{n.setItem(e,String(t))}catch{}}var Da=new class{#e=k(`system`);get theme(){return I(this.#e)}set theme(e){A(this.#e,e,!0)}#t=k(0);get tick(){return I(this.#t)}set tick(e){A(this.#t,e,!0)}init(){this.theme=Ta(`gomodel_theme`,`system`),this.apply(),window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{this.theme===`system`&&this.tick++})}set(e){this.theme=e,Ea(`gomodel_theme`,e),this.apply(),this.tick++}toggle(){let e=[`light`,`system`,`dark`];this.set(e[(e.indexOf(this.theme)+1)%e.length])}apply(){let e=document.documentElement;this.theme===`system`?e.removeAttribute(`data-theme`):e.setAttribute(`data-theme`,this.theme)}},Oa=new class{#e=k(!1);get collapsed(){return I(this.#e)}set collapsed(e){A(this.#e,e,!0)}init(){this.collapsed=Ta(`gomodel_sidebar_collapsed`)===`true`}toggle(){this.collapsed=!this.collapsed,Ea(`gomodel_sidebar_collapsed`,this.collapsed)}},ka=new class{#e=k(j([]));get stack(){return I(this.#e)}set stack(e){A(this.#e,e,!0)}#t=1;opened(){let e=this.#t++;return this.stack=[...this.stack,e],e}closed(e){this.stack=this.stack.filter(t=>t!==e)}isTop(e){return this.stack.length>0&&this.stack[this.stack.length-1]===e}get openCount(){return this.stack.length}get anyOpen(){return this.stack.length>0}},Aa=[[`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`}]],ja=[[`path`,{d:`m12 19-7-7 7-7`}],[`path`,{d:`M19 12H5`}]],Ma=[[`path`,{d:`M5 12h14`}],[`path`,{d:`m12 5 7 7-7 7`}]],Na=[[`path`,{d:`M21 8a2 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.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`}],[`path`,{d:`M12 22V12`}]],Pa=[[`rect`,{width:`16`,height:`20`,x:`4`,y:`2`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`6`,y2:`6`}],[`line`,{x1:`16`,x2:`16`,y1:`14`,y2:`18`}],[`path`,{d:`M16 10h.01`}],[`path`,{d:`M12 10h.01`}],[`path`,{d:`M8 10h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M8 18h.01`}]],Fa=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M16 14h.01`}],[`path`,{d:`M8 18h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M16 18h.01`}]],Ia=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}]],La=[[`path`,{d:`M13 17V9`}],[`path`,{d:`M18 17V5`}],[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M8 17v-3`}]],Ra=[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M18 17V9`}],[`path`,{d:`M13 17V5`}],[`path`,{d:`M8 17v-3`}]],za=[[`path`,{d:`M20 6 9 17l-5-5`}]],Ba=[[`path`,{d:`m6 9 6 6 6-6`}]],Va=[[`path`,{d:`m9 18 6-6-6-6`}]],Ha=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`}],[`path`,{d:`m9 11 3 3L22 4`}]],Ua=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m9 12 2 2 4-4`}]],Wa=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`}],[`path`,{d:`M12 18V6`}]],Ga=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 6v6l4 2`}]],Ka=[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`}]],qa=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 15 21.84`}],[`path`,{d:`M21 5V8`}],[`path`,{d:`M21 12L18 17H22L19 22`}],[`path`,{d:`M3 12A9 3 0 0 0 14.59 14.87`}]],Ja=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`}]],Ya=[[`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`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`}],[`path`,{d:`M10 9H8`}],[`path`,{d:`M16 13H8`}],[`path`,{d:`M16 17H8`}]],Xa=[[`path`,{d:`m12 14 4-4`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`}]],Za=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}],[`path`,{d:`M12 7v5l4 2`}]],Qa=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 16v-4`}],[`path`,{d:`M12 8h.01`}]],$a=[[`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`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],eo=[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`}]],to=[[`path`,{d:`M3 5h.01`}],[`path`,{d:`M3 12h.01`}],[`path`,{d:`M3 19h.01`}],[`path`,{d:`M8 5h13`}],[`path`,{d:`M8 12h13`}],[`path`,{d:`M8 19h13`}]],no=[[`circle`,{cx:`12`,cy:`16`,r:`1`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`}]],ro=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`m21 3-7 7`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M9 21H3v-6`}]],io=[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`}]],ao=[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`}]],oo=[[`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`}],[`path`,{d:`m15 5 4 4`}]],so=[[`path`,{d:`M12 22v-5`}],[`path`,{d:`M15 8V2`}],[`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`}],[`path`,{d:`M9 8V2`}]],co=[[`path`,{d:`M5 12h14`}],[`path`,{d:`M12 5v14`}]],lo=[[`path`,{d:`M12 2v10`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`}]],uo=[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`}],[`path`,{d:`M21 3v5h-5`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`}],[`path`,{d:`M8 16H3v5`}]],fo=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}]],po=[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`}]],mo=[[`path`,{d:`m21 21-4.34-4.34`}],[`circle`,{cx:`11`,cy:`11`,r:`8`}]],ho=[[`path`,{d:`m10.852 14.772-.383.923`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`}],[`path`,{d:`m13.148 9.228.383-.923`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`}],[`path`,{d:`m14.772 10.852.923-.383`}],[`path`,{d:`m14.772 13.148.923.383`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`}],[`path`,{d:`M6 18h.01`}],[`path`,{d:`M6 6h.01`}],[`path`,{d:`m9.228 10.852-.923-.383`}],[`path`,{d:`m9.228 13.148-.923.383`}]],go=[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`}]],_o=[[`path`,{d:`M14 17H5`}],[`path`,{d:`M19 7h-9`}],[`circle`,{cx:`17`,cy:`17`,r:`3`}],[`circle`,{cx:`7`,cy:`7`,r:`3`}]],vo=[[`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`}],[`circle`,{cx:`12`,cy:`12`,r:`3`}]],yo=[[`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`}],[`path`,{d:`m9 12 2 2 4-4`}]],bo=[[`path`,{d:`m2 2 20 20`}],[`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`}],[`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`}]],xo=[[`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`}]],So=[[`path`,{d:`m18 14 4 4-4 4`}],[`path`,{d:`m18 2 4 4-4 4`}],[`path`,{d:`M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22`}],[`path`,{d:`M2 6h1.972a4 4 0 0 1 3.6 2.2`}],[`path`,{d:`M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45`}]],Co=[[`circle`,{cx:`12`,cy:`12`,r:`4`}],[`path`,{d:`M12 2v2`}],[`path`,{d:`M12 20v2`}],[`path`,{d:`m4.93 4.93 1.41 1.41`}],[`path`,{d:`m17.66 17.66 1.41 1.41`}],[`path`,{d:`M2 12h2`}],[`path`,{d:`M20 12h2`}],[`path`,{d:`m6.34 17.66-1.41 1.41`}],[`path`,{d:`m19.07 4.93-1.41 1.41`}]],wo=[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],To=[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`}],[`circle`,{cx:`12`,cy:`14`,r:`8`}]],Eo=[[`path`,{d:`M10 11v6`}],[`path`,{d:`M14 11v6`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}],[`path`,{d:`M3 6h18`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}]],Do=[[`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`}],[`path`,{d:`M12 9v4`}],[`path`,{d:`M12 17h.01`}]],Oo=[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`}],[`circle`,{cx:`12`,cy:`7`,r:`4`}]],ko=[[`path`,{d:`M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1`}],[`path`,{d:`M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4`}]],Ao=[[`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`}],[`path`,{d:`m14 7 3 3`}],[`path`,{d:`M5 6v4`}],[`path`,{d:`M19 14v4`}],[`path`,{d:`M10 2v2`}],[`path`,{d:`M7 8H3`}],[`path`,{d:`M21 16h-4`}],[`path`,{d:`M11 3H9`}]],jo=[[`rect`,{width:`8`,height:`8`,x:`3`,y:`3`,rx:`2`}],[`path`,{d:`M7 11v4a2 2 0 0 0 2 2h4`}],[`rect`,{width:`8`,height:`8`,x:`13`,y:`13`,rx:`2`}]],Mo=[[`path`,{d:`M18 6 6 18`}],[`path`,{d:`m6 6 12 12`}]],No=R(``),Po=R(`
`,1);function Fo(e,t){E(t,!0);let n=ya(t,`compact`,3,!1),r=[{value:`light`,icon:Co,label:`Light theme`},{value:`system`,icon:io,label:`System theme`},{value:`dark`,icon:ao,label:`Dark theme`}],i=O(()=>r.find(e=>e.value===Da.theme)||r[1]),a=O(()=>`Change theme (currently `+I(i).label+`)`);var o=Po(),s=N(o);let c;H(s,21,()=>r,e=>e.value,(e,t)=>{var n=No();let r;G(M(n),{get icon(){return I(t).icon},class:`theme-icon`}),T(n),F(()=>{r=U(n,1,`theme-btn svelte-1keql7b`,null,r,{active:Da.theme===I(t).value}),W(n,`aria-pressed`,Da.theme===I(t).value),W(n,`title`,I(t).label),W(n,`aria-label`,I(t).label)}),L(`click`,n,()=>Da.set(I(t).value)),z(e,n)}),T(s);var l=P(s,2);let u;G(M(l),{get icon(){return I(i).icon},class:`theme-icon`}),T(l),F(()=>{c=U(s,1,`theme-toggle svelte-1keql7b`,null,c,{"is-compact":n()}),u=U(l,1,`theme-toggle-mobile svelte-1keql7b`,null,u,{"is-compact":n()}),W(l,`title`,I(a)),W(l,`aria-label`,I(a))}),L(`click`,l,()=>Da.toggle()),z(e,o),D()}Hr([`click`]);function Io(){return typeof window>`u`?`/`:window.GOMODEL_BASE_PATH||`/`}function Lo(e){let t=Io();return!e||e.charAt(0)!==`/`||e.indexOf(`//`)===0||t===`/`||e===t||e.indexOf(t+`/`)===0?e:t+e}function Ro(e){let t=Io();return t===`/`||!e?e:e===t?`/`:e.indexOf(t+`/`)===0?e.slice(t.length)||`/`:e}function zo(){return typeof window>`u`?``:window.GOMODEL_VERSION||``}function Bo(){return typeof window>`u`?!1:window.GOMODEL_DEMO_MODE===!0}var Vo=[`overview`,`usage`,`budgets`,`rate-limits`,`models`,`workflows`,`audit-logs`,`guardrails`,`mcp-servers`,`providers-config`,`auth-keys`,`settings`];function Ho(e){return e.startsWith(`/admin/static/`)?`/`+e.slice(14).replace(/^\/+/,``):e}function Uo(e){let t=Ho(Ro(e)).replace(/\/$/,``).replace(`/admin/dashboard`,``).replace(/^\//,``).split(`/`),n=t[0];n===`audit`&&(n=`audit-logs`);let r=t[1]||null;return n===`settings`&&r===`guardrails`?{page:`guardrails`,sub:null}:(n=Vo.includes(n)?n:`overview`,{page:n,sub:r})}var Wo=new class{#e=k(`overview`);get page(){return I(this.#e)}set page(e){A(this.#e,e,!0)}#t=k(null);get sub(){return I(this.#t)}set sub(e){A(this.#t,e,!0)}init(){let{page:e,sub:t}=Uo(window.location.pathname);this.page=e,this.sub=t,window.addEventListener(`popstate`,()=>{let{page:e,sub:t}=Uo(window.location.pathname);this.page=e,this.sub=t})}navigate(e,t=null){let n=t?`/`+t:``;history.pushState(null,``,Lo(`/admin/dashboard/`+e+n)),this.page=e,this.sub=t}},Go=`gomodel_api_key`;function Ko(e){let t=String(e||``).trim();if(/^Bearer\s*$/i.test(t))return``;let n=t.match(/^Bearer\s+(.+)$/i);return n?n[1].trim():t}var K=new class{#e=k(``);get apiKey(){return I(this.#e)}set apiKey(e){A(this.#e,e,!0)}#t=k(!1);get needsAuth(){return I(this.#t)}set needsAuth(e){A(this.#t,e,!0)}#n=k(!1);get authError(){return I(this.#n)}set authError(e){A(this.#n,e,!0)}#r=k(``);get authErrorMessage(){return I(this.#r)}set authErrorMessage(e){A(this.#r,e,!0)}#i=k(!1);get dialogOpen(){return I(this.#i)}set dialogOpen(e){A(this.#i,e,!0)}#a=k(0);get generation(){return I(this.#a)}set generation(e){A(this.#a,e,!0)}#o=k(0);get refreshTick(){return I(this.#o)}set refreshTick(e){A(this.#o,e,!0)}init(){try{this.apiKey=Ko(localStorage.getItem(Go)||``)}catch{this.apiKey=``}}hasApiKey(){return Ko(this.apiKey)!==``}save(){this.apiKey=Ko(this.apiKey);try{localStorage.setItem(Go,this.apiKey)}catch{}}openDialog(){this.dialogOpen=!0}closeDialog(){this.dialogOpen=!1}submit(){let e=Ko(this.apiKey);return e?(this.apiKey=e,this.save(),this.generation++,this.authError=!1,this.authErrorMessage=``,this.needsAuth=!1,this.closeDialog(),this.refresh(),!0):(this.apiKey=``,this.authError=!0,this.authErrorMessage=``,this.needsAuth=!0,this.openDialog(),!1)}refresh(){this.refreshTick++}handleUnauthorized(e,t=``){return typeof e==`number`&&e{r[e.type]=e.value}),r.year+`-`+r.month+`-`+r.day}formatTimestampInTimeZone(e,t){if(e==null)return`-`;let n=new Date(e);if(Number.isNaN(n.getTime()))return`-`;let r=rs(`en-CA`,{timeZone:is(t)?t:$o,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`}).formatToParts(n),i={};return r.forEach(e=>{i[e.type]=e.value}),i.year+`-`+i.month+`-`+i.day+` `+i.hour+`:`+i.minute+`:`+i.second}formatTimestamp(e){return this.formatTimestampInTimeZone(e,this.effectiveTimezone())}currentDateKey(e){return this.dateKeyInTimeZone(e||new Date,this.effectiveTimezone())}dateKeyToDate(e){return Jo(e)}dateToDateKey(e){return Yo(e)}addDaysToDateKey(e,t){return Xo(e,t)}todayDate(){return this.dateKeyToDate(this.currentDateKey())}startOfMonthDate(e){let t=e instanceof Date?e:this.todayDate();return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),1))}timeZoneOffsetLabel(e,t){let n=is(e)?e:$o;try{let e=rs(`en-US`,{timeZone:n,hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`,timeZoneName:`longOffset`}).formatToParts(t||new Date).find(e=>e.type===`timeZoneName`);if(!e||!e.value)return`UTC+00:00`;let r=e.value.replace(`GMT`,`UTC`);return r===`UTC`?`UTC+00:00`:r}catch{return`UTC+00:00`}}timeZoneOffsetMinutes(e,t){let n=/^UTC([+-])(\d{2}):(\d{2})$/.exec(this.timeZoneOffsetLabel(e,t));if(!n)return 0;let r=Number(n[2])*60+Number(n[3]);return n[1]===`-`?-r:r}timeZoneOptionLabel(e,t){return e+` (`+this.timeZoneOffsetLabel(e,t)+`)`}detectedTimeZoneLabel(){return this.timeZoneOptionLabel(this.detectedTimezone)}effectiveTimeZoneLabel(){return this.timeZoneOptionLabel(this.effectiveTimezone())}ensureOptions(){if(this.optionsLoaded)return;let e=new Date,t=[];try{typeof Intl.supportedValuesOf==`function`&&(t=Intl.supportedValuesOf(`timeZone`))}catch{t=[]}[$o,this.detectedTimezone,this.override].forEach(e=>{e&&t.indexOf(e)===-1&&is(e)&&t.push(e)}),t=t.filter(e=>is(e)),t.sort((t,n)=>{let r=this.timeZoneOffsetMinutes(t,e)-this.timeZoneOffsetMinutes(n,e);return r===0?t.localeCompare(n):r}),this.options=t.map(t=>({value:t,label:this.timeZoneOptionLabel(t,e)})),this.optionsLoaded=!0}saveOverride(){let e=wa();if(e)if(this.override&&is(this.override))try{e.setItem(es,this.override)}catch{}else{try{e.removeItem(es)}catch{}this.override=``}this.optionsLoaded=!1,this.ensureOptions()}clearOverride(){let e=wa();if(e)try{e.removeItem(es)}catch{}this.override=``}calendarTimeZoneText(){let e=this.override?`manual override`:`auto-detected`;return`Activity grouped by `+this.effectiveTimeZoneLabel()+` (`+e+`)`}};function cs(e,t){let n=e&&typeof e==`object`&&e.error&&e.error.message;return(typeof n==`string`?n.trim():``)||t}function ls(e,t){let n=e&&e.data;if(n&&typeof n==`object`){let e=[n.message,n.error,n.error&&typeof n.error==`object`?n.error.message:null];for(let t of e)if(typeof t==`string`&&t.trim())return t.trim()}return t}function us(){let e={"Content-Type":`application/json`},t=Ko(K.apiKey);return t&&(e.Authorization=`Bearer `+t),e[`X-GoModel-Timezone`]=ss.effectiveTimezone(),e}function ds(e,t={}){return fetch(Lo(e),{...t,headers:{...us(),...t.headers||{}}})}async function fs(e,t,{label:n=e,parse:r=!0}={}){let i=K.generation,a=await ds(e,t);if(a.status===401)return K.handleUnauthorized(i),{ok:!1,stale:ie.trim()).filter(Boolean);return e.length>0?e:_s}cacheVisible(){if(this.flag(`CACHE_ENABLED`)!==``)return this.booleanFlag(`CACHE_ENABLED`,!1);let e=this.flag(`REDIS_URL`),t=this.flag(`SEMANTIC_CACHE_ENABLED`);return e===``&&t===``||this.booleanFlag(`REDIS_URL`,!1)||this.booleanFlag(`SEMANTIC_CACHE_ENABLED`,!1)}auditVisible(){return this.booleanFlag(`LOGGING_ENABLED`,!0)}usageVisible(){return this.booleanFlag(`USAGE_ENABLED`,!0)}budgetsVisible(){return this.booleanFlag(`BUDGETS_ENABLED`,!0)}rateLimitsVisible(){return this.booleanFlag(`RATE_LIMITS_ENABLED`,!0)}guardrailsVisible(){return this.booleanFlag(`GUARDRAILS_ENABLED`,!0)}mcpVisible(){return this.booleanFlag(`MCP_ENABLED`,!0)}liveLogsVisible(){return this.booleanFlag(`DASHBOARD_LIVE_LOGS_ENABLED`,!0)}fetch(){return this.#n||=this.#r().finally(()=>{this.#n=null}),this.#n}async ensureLoaded(){if(this.#n){await this.#n;return}this.loaded||await this.fetch()}async#r(){let e=typeof AbortController==`function`?new AbortController:null,t=e?setTimeout(()=>e.abort(),1e4):null;try{let t=await ps(`/admin/runtime/config`,{label:`dashboard config`,signal:e?e.signal:void 0});if(t.stale)return;if(!t.ok){this.config={},this.loaded=!1;return}let n=t.data,r={};for(let e of gs)n&&typeof n==`object`&&!Array.isArray(n)&&n[e]!==void 0&&n[e]!==null&&(r[e]=String(n[e]).trim());this.config=r,this.loaded=!0}catch(e){console.error(`Failed to fetch dashboard config:`,e),this.config={},this.loaded=!1}finally{t!==null&&clearTimeout(t)}}},ys=[{page:`overview`,label:`Overview`,icon:eo},{page:`providers-config`,label:`Providers`,icon:ho},{page:`models`,label:`Models`,icon:Na},{page:`audit-logs`,label:`Audit Logs`,icon:Za},{page:`usage`,label:`Usage`,icon:Ra},{page:`budgets`,label:`Budgets`,icon:ko,visible:()=>vs.budgetsVisible()},{page:`rate-limits`,label:`Rate Limits`,icon:Xa,visible:()=>vs.rateLimitsVisible()},{page:`auth-keys`,label:`API Keys`,icon:$a},{page:`workflows`,label:`Workflows`,icon:jo},{page:`guardrails`,label:`Guardrails (experimental)`,icon:yo,visible:()=>vs.guardrailsVisible()},{page:`mcp-servers`,label:`MCP Servers`,icon:so,visible:()=>vs.mcpVisible()},{page:`settings`,label:`Settings`,icon:vo}],bs=R(` `),xs=R(`
`),Ss=R(` `,1);function Cs(e,t){E(t,!0);let n=O(()=>ys.filter(e=>!e.visible||e.visible()));var r=Ss(),i=N(r);let a;var o=M(i),s=M(o);Ca(M(s),{}),T(s),Ue(4),T(o);var c=P(o,2);H(c,21,()=>I(n),e=>e.page,(e,t)=>{var n=bs();let r;var i=M(n);G(i,{get icon(){return I(t).icon},class:`nav-icon`});var a=P(i,2),o=M(a,!0);T(a),T(n),F(e=>{W(n,`href`,e),r=U(n,1,`nav-item svelte-1nwtzae`,null,r,{active:Wo.page===I(t).page}),W(n,`title`,I(t).label),B(o,I(t).label)},[()=>Lo(`/admin/dashboard/`+I(t).page)]),L(`click`,n,e=>{e.preventDefault(),Wo.navigate(I(t).page)}),z(e,n)}),T(c);var l=P(c,2),u=M(l);Fo(u,{get compact(){return Oa.collapsed}});var d=P(u,2),f=e=>{var t=xs(),n=M(t),r=M(n);G(r,{get icon(){return no},class:`api-key-open-icon`});var i=P(r,2),a=M(i,!0);T(i),T(n),T(t),F(()=>{W(n,`aria-label`,K.needsAuth?`Enter API key`:`Change API key`),B(a,K.needsAuth?`Enter API key`:`Change API key`)}),L(`click`,n,()=>K.openDialog()),z(e,t)},p=O(()=>K.needsAuth||K.hasApiKey());V(d,e=>{I(p)&&e(f)}),T(l),T(i);var m=P(i,2);let h;F(()=>{a=U(i,1,`sidebar svelte-1nwtzae`,null,a,{"sidebar-collapsed":Oa.collapsed}),h=U(m,1,`sidebar-toggle svelte-1nwtzae`,null,h,{collapsed:Oa.collapsed}),W(m,`title`,Oa.collapsed?`Expand sidebar`:`Collapse sidebar`),W(m,`aria-label`,Oa.collapsed?`Expand sidebar`:`Collapse sidebar`),W(m,`aria-expanded`,!Oa.collapsed)}),L(`click`,m,()=>Oa.toggle()),z(e,r),D()}Hr([`click`]);var ws=R(``);function Ts(e,t){E(t,!0);let n=ya(t,`label`,3,`Close`),r=ya(t,`class`,3,``),i=ya(t,`iconClass`,3,`table-icon-svg`),a=ya(t,`disabled`,3,!1),o=ya(t,`el`,15,null);var s=ws();G(M(s),{get icon(){return Mo},get class(){return i()}}),T(s),ga(s,e=>o(e),()=>o()),F(()=>{U(s,1,Fi([`dialog-close-btn`,r()]),`svelte-11l1bb5`),W(s,`aria-label`,n()),s.disabled=a()}),L(`click`,s,function(...e){t.onclick?.apply(this,e)}),z(e,s),D()}Hr([`click`]);function Es(e){return t=>{let n=n=>{t.contains(n.target)||e()},r=t=>{t.key===`Escape`&&e()};return document.addEventListener(`click`,n,!0),window.addEventListener(`keydown`,r),()=>{document.removeEventListener(`click`,n,!0),window.removeEventListener(`keydown`,r)}}}function Ds(e=`[data-modal-autofocus]`){return t=>{let n=t.querySelector(e);n&&typeof n.focus==`function`&&n.focus()}}var Os=R(`
`,1);function ks(e,t){E(t,!0);let n=ya(t,`open`,3,!1),r=ya(t,`variant`,3,`editor`),i=ya(t,`closeOnBackdrop`,3,!0),a=O(()=>r()===`auth`?`auth-dialog-backdrop`:`editor-modal-backdrop`),o=O(()=>r()===`auth`?`auth-dialog-shell`:`editor-modal-shell`);An(()=>{if(!n())return;let e=Er(()=>ka.opened()),r=n=>{n.key===`Escape`&&ka.isTop(e)&&t.onclose?.()};return window.addEventListener(`keydown`,r),()=>{ka.closed(e),window.removeEventListener(`keydown`,r)}});function s(e){i()&&e.target===e.currentTarget&&t.onclose?.()}var c=Qr(),l=N(c),u=e=>{var n=Os(),r=N(n),i=P(r,2);gi(M(i),()=>t.children??f),T(i),Mi(i,Ds),F(()=>{U(r,1,Fi(I(a)),`svelte-17e0w4c`),U(i,1,Fi(I(o)),`svelte-17e0w4c`)}),L(`click`,i,s),z(e,n)};V(l,e=>{n()&&e(u)}),z(e,c),D()}Hr([`click`]);var As=R(``),js=R(``);function Ms(e,t){E(t,!0),ks(e,{get open(){return K.dialogOpen},variant:`auth`,onclose:()=>K.closeDialog(),children:(e,t)=>{var n=js(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a),T(i),Ts(P(i,2),{label:`Close authentication dialog`,onclick:()=>K.closeDialog(),class:`auth-dialog-close`,iconClass:``}),T(r);var s=P(r,2),c=M(s),l=M(c);G(l,{get icon(){return no},class:`auth-dialog-input-icon`});var u=P(l,2);na(u),T(c);var d=P(c,2),f=e=>{var t=As(),n=M(t,!0);T(t),F(()=>B(n,K.authErrorMessage||`Enter a valid API key to continue.`)),z(e,t)};V(d,e=>{K.authError&&e(f)});var p=P(d,4),m=M(p),h=M(m);G(h,{get icon(){return za},class:`auth-dialog-submit-icon`});var g=P(h,2),_=M(g,!0);T(g),T(m),T(p),T(s),T(n),F(()=>{B(o,K.needsAuth?`Dashboard locked`:`Change API key`),B(_,K.needsAuth?`Unlock dashboard`:`Save API key`)}),Vr(`submit`,s,e=>{e.preventDefault(),K.submit()}),da(u,()=>K.apiKey,e=>K.apiKey=e),z(e,n)},$$slots:{default:!0}}),D()}function Ns(){return{open:!1,title:``,titleId:`typedConfirmationDialogTitle`,inputId:`typed-confirmation-input`,message:``,requiredText:``,value:``,confirmLabel:`Confirm`,icon:Do,dialogClass:``,loading:!1,onConfirm:null,onClose:null}}var Ps=new class{#e=k(j(Ns()));get state(){return I(this.#e)}set state(e){A(this.#e,e,!0)}#t=k(``);get error(){return I(this.#t)}set error(e){A(this.#t,e,!0)}open(e){this.error=``,this.state={...Ns(),open:!0,...e||{}}}close(){let e=this.state;typeof e.onClose==`function`&&e.onClose(),this.state=Ns(),this.error=``}ready(){return String(this.state.value||``).trim().toLowerCase()===String(this.state.requiredText||``).trim().toLowerCase()}inputLabel(){return`Type `+String(this.state.requiredText||``).trim()+` to confirm`}async submit(){if(!this.ready()){this.error=this.inputLabel()+`.`;return}if(typeof this.state.onConfirm==`function`){this.state.loading=!0;try{await this.state.onConfirm()}finally{this.state.loading=!1}}}},Fs=R(`

`),Is=R(``),Ls=R(`

`);function Rs(e,t){E(t,!0);let n=O(()=>Ps.state);ks(e,{get open(){return I(n).open},variant:`auth`,onclose:()=>Ps.close(),children:(e,t)=>{var r=Ls(),i=M(r),a=M(i),o=M(a,!0);T(a),Ts(P(a,2),{label:`Close confirmation dialog`,onclick:()=>Ps.close(),class:`auth-dialog-close`,iconClass:``}),T(i);var s=P(i,2),c=M(s),l=e=>{var t=Fs(),r=M(t,!0);T(t),F(()=>B(r,I(n).message)),z(e,t)};V(c,e=>{I(n).message&&e(l)});var u=P(c,2),d=M(u),f=M(d,!0);T(d);var p=P(d,2);na(p),T(u);var m=P(u,2),h=e=>{var t=Is(),n=M(t,!0);T(t),F(()=>B(n,Ps.error)),z(e,t)};V(m,e=>{Ps.error&&e(h)});var g=P(m,2),_=M(g),v=P(_,2),y=M(v);G(y,{get icon(){return I(n).icon},class:`form-action-icon`});var b=P(y,2),x=M(b,!0);T(b),T(v),T(g),T(s),T(r),F((e,t)=>{U(r,1,`auth-dialog ${I(n).dialogClass??``}`),W(r,`aria-labelledby`,I(n).titleId),W(a,`id`,I(n).titleId),B(o,I(n).title),W(d,`for`,I(n).inputId),B(f,e),W(p,`id`,I(n).inputId),v.disabled=t,B(x,I(n).confirmLabel)},[()=>Ps.inputLabel(),()=>I(n).loading||!Ps.ready()]),Vr(`submit`,s,e=>{e.preventDefault(),Ps.submit()}),da(p,()=>Ps.state.value,e=>Ps.state.value=e),L(`click`,_,()=>Ps.close()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var zs=e=>e;function Bs(e){let t=e-1;return t*t*t+1}function Vs(e){let t=typeof e==`string`&&e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return t?[parseFloat(t[1]),t[2]||`px`]:[e,`px`]}function Hs(e,{delay:t=0,duration:n=400,easing:r=zs}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function Us(e,{delay:t=0,duration:n=400,easing:r=Bs,x:i=0,y:a=0,opacity:o=0}={}){let s=getComputedStyle(e),c=+s.opacity,l=s.transform===`none`?``:s.transform,u=c*(1-o),[d,f]=Vs(i),[p,m]=Vs(a);return{delay:t,duration:n,easing:r,css:(e,t)=>` + transform: ${l} translate(${(1-e)*d}${f}, ${(1-e)*p}${m}); + opacity: ${c-u*t}`}}function Ws(e,{delay:t=0,duration:n=400,easing:r=Bs,axis:i=`y`}={}){let a=getComputedStyle(e),o=+a.opacity,s=i===`y`?`height`:`width`,c=parseFloat(a[s]),l=i===`y`?[`top`,`bottom`]:[`left`,`right`],u=l.map(e=>`${e[0].toUpperCase()}${e.slice(1)}`),d=parseFloat(a[`padding${u[0]}`]),f=parseFloat(a[`padding${u[1]}`]),p=parseFloat(a[`margin${u[0]}`]),m=parseFloat(a[`margin${u[1]}`]),h=parseFloat(a[`border${u[0]}Width`]),g=parseFloat(a[`border${u[1]}Width`]);return{delay:t,duration:n,easing:r,css:e=>`overflow: hidden;opacity: ${Math.min(e*20,1)*o};${s}: ${e*c}px;padding-${l[0]}: ${e*d}px;padding-${l[1]}: ${e*f}px;margin-${l[0]}: ${e*p}px;margin-${l[1]}: ${e*m}px;border-${l[0]}-width: ${e*h}px;border-${l[1]}-width: ${e*g}px;min-${s}: 0`}}function Gs(e){return--e*e*(2.70158*e+1.70158)+1}function Ks(e){let t=e-1;return t*t*t+1}var qs=5e3,Js=8e3,q=new class{#e=k(j([]));get toasts(){return I(this.#e)}set toasts(e){A(this.#e,e,!0)}#t=0;#n=new Map;success(e){this.#r(`success`,e,qs)}error(e){this.#r(`error`,e,Js)}dismiss(e){let t=this.#n.get(e);t&&(clearTimeout(t),this.#n.delete(e)),this.toasts=this.toasts.filter(t=>t.id!==e)}#r(e,t,n){let r=String(t||``).trim();if(!r)return;let i=this.toasts.find(t=>t.kind===e&&t.text===r);i&&this.dismiss(i.id);let a=++this.#t;this.toasts=[...this.toasts,{id:a,kind:e,text:r}],this.#n.set(a,setTimeout(()=>this.dismiss(a),n))}},Ys=R(`
`),Xs=R(`
`);function Zs(e,t){E(t,!0);var n=Xs();H(n,21,()=>q.toasts,e=>e.id,(e,t)=>{var n=Ys();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2);T(n),F(()=>{r=U(n,1,`flash-toast svelte-1i257xg`,null,r,{"flash-toast-success":I(t).kind===`success`,"flash-toast-error":I(t).kind===`error`}),W(n,`role`,I(t).kind===`error`?`alert`:`status`),W(n,`aria-live`,I(t).kind===`error`?`assertive`:`polite`),B(a,I(t).text)}),L(`click`,o,()=>q.dismiss(I(t).id)),ki(1,n,()=>Us,()=>({y:-24,duration:360,easing:Gs})),ki(2,n,()=>Hs,()=>({duration:150})),z(e,n)}),T(n),z(e,n),D()}Hr([`click`]);var Qs=R(``);function $s(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{z(e,Qs())},a=O(()=>Bo());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}function ec(e){return String(e||``).split(`,`).map(e=>e.trim()).filter(e=>e)}function tc(e){if(e==null||e===``)return`Not captured`;if(typeof e==`string`){let t=e.trim();if(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`))try{return JSON.stringify(JSON.parse(t),null,2)}catch{return e}return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function nc(e){return e==null||e===void 0?`-`:e.toLocaleString()}function rc(e){if(e==null)return`---`;let t=Number(e);return Number.isFinite(t)?t>0&&t<1e-4?`<$0.0001`:`$`+t.toFixed(4).replace(/(\.\d{2}\d*?)0+$/,`$1`):`---`}function ic(e){return e==null||e===void 0?`—`:`$`+e.toFixed(2)}function ac(e){return e==null||e===void 0?`—`:e<.01?`$`+e.toFixed(6):`$`+e.toFixed(4)}function oc(e){if(e==null||e===``)return`-`;let t=Number(e);if(!Number.isFinite(t))return`-`;let n=Math.abs(t),r=[{threshold:1e9,suffix:`B`},{threshold:1e6,suffix:`M`},{threshold:1e3,suffix:`K`}];for(let e=0;e=i.threshold){let n=t/i.threshold;return Math.abs(Number(n.toFixed(1)))>=1e3&&e>0&&(i=r[e-1],n=t/i.threshold),n.toFixed(1).replace(/\.0$/,``)+i.suffix}}return String(t)}function sc(e,t){let n=t==null||t===``?NaN:Number(t),r=Number.isFinite(n)?nc(n):`-`;return String(e||`Tokens`)+`: `+r}function cc(e){return e?typeof e==`string`?e:e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`):``}function lc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)}function uc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)+` `+String(t.getUTCHours()).padStart(2,`0`)+`:`+String(t.getUTCMinutes()).padStart(2,`0`)+`:`+String(t.getUTCSeconds()).padStart(2,`0`)+` UTC`}function dc(e){return String(e&&e.provider||``).trim()}function fc(e){return String(e&&e.provider_name||``).trim()||dc(e)}function pc(e,t){let n=String(t||``).trim();if(!n)return`-`;let r=fc(e);return!r||n===r||n.startsWith(r+`/`)?n:r+`/`+n}function mc(e){return pc(e,e&&e.model)}function hc(e){return pc(e,e&&e.resolved_model)}function gc(e){let t=String(e&&(e.requested_model||e.model)||``).trim();if(!e)return t;let n=String(e.data&&e.data.failover&&e.data.failover.target_model||``).trim();if(n&&n!==t)return t+` ⮕ `+n;if(e.alias_used&&e.resolved_model){let n=hc(e);if(n&&n!==`-`&&n!==t)return t+` ⮕ `+n}return t}var _c=`gomodel_date_range`,vc=1;function yc(e){return/^[1-9]\d*$/.test(String(e??``))}var bc=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function xc({selectedPreset:e,startKey:t,endKey:n,followsToday:r}){return e&&yc(e)?{v:vc,mode:`preset`,days:String(e)}:e?null:Zo(t)&&Zo(n)?{v:vc,mode:`custom`,start:t,end:n,follow:r===!0}:null}function Sc(e){let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return null}return!t||typeof t!=`object`?null:t.mode===`preset`?yc(t.days)?{mode:`preset`,days:String(t.days)}:null:t.mode===`custom`&&Zo(t.start)&&Zo(t.end)&&t.start<=t.end?{mode:`custom`,start:t.start,end:t.end,follow:t.follow===!0}:null}function Cc(e,t,n){let r=Qo(e,t);return r<1||!Zo(n)?{start:e,end:t}:{start:Xo(n,-(r-1)),end:n}}function wc(e,t){if(e===t)return`Today`;let[n,r,i]=e.split(`-`);return bc[Number(r)-1]+` `+Number(i)+`, `+n}function Tc({selectedPreset:e,startKey:t,endKey:n,followsToday:r,todayKey:i}){if(e)return`Last `+e+` days`;if(!Zo(t)||!Zo(n))return``;let a=Qo(t,n);return r||n===i?a===1?`Today`:`Last `+a+` days`:a===1?`1 day`:a+` days`}function Ec({selectedPreset:e,startKey:t,endKey:n,todayKey:r}){if(e)return`Last `+e+` days`;let i=e=>wc(e,r);return Zo(t)&&Zo(n)?t===n?i(t):i(t)+` – `+i(n):Zo(t)?i(t)+` – ...`:`Last 30 days`}var Dc=6e4,Oc=new class{#e=k(j(`30`));get days(){return I(this.#e)}set days(e){A(this.#e,e,!0)}#t=k(j(`30`));get selectedPreset(){return I(this.#t)}set selectedPreset(e){A(this.#t,e,!0)}#n=k(null);get customStartDate(){return I(this.#n)}set customStartDate(e){A(this.#n,e,!0)}#r=k(null);get customEndDate(){return I(this.#r)}set customEndDate(e){A(this.#r,e,!0)}#i=k(!1);get followsToday(){return I(this.#i)}set followsToday(e){A(this.#i,e,!0)}#a=k(`daily`);get interval(){return I(this.#a)}set interval(e){A(this.#a,e,!0)}#o=k(0);get syncTick(){return I(this.#o)}set syncTick(e){A(this.#o,e,!0)}init(){this.restore(),this.syncToToday(),typeof setInterval==`function`&&setInterval(()=>this.syncToToday(),Dc)}queryStr(){return this.customStartDate&&this.customEndDate?`start_date=`+cc(this.customStartDate)+`&end_date=`+cc(this.customEndDate):`days=`+this.days}selectPreset(e){this.selectedPreset=e,this.customStartDate=null,this.customEndDate=null,this.followsToday=!1,this.days=e,this.persist()}selectStart(e){this.selectedPreset=null,this.customStartDate=e,this.customEndDate&&this.customEndDatet.category===e);return t?t.count:0}get filteredModels(){if(!this.filter)return this.models;let e=this.filter.toLowerCase();return this.models.filter(t=>(t.model?.id??``).toLowerCase().includes(e)||(t.provider_name??``).toLowerCase().includes(e)||(t.provider_type??``).toLowerCase().includes(e)||(t.selector??``).toLowerCase().includes(e)||(t.model?.owned_by??``).toLowerCase().includes(e)||(t.model?.metadata?.modes??[]).join(`,`).toLowerCase().includes(e)||(t.model?.metadata?.categories??[]).join(`,`).toLowerCase().includes(e))}},Ac=R(``);function jc(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=Ac(),n=P(M(t),2);T(t),L(`click`,n,()=>K.openDialog()),z(e,t)};V(r,e=>{K.authError&&e(i)}),z(e,n),D()}Hr([`click`]);function Mc(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null}}function Nc(){return{summary:{total_hits:0,exact_hits:0,semantic_hits:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_saved_cost:null},daily:[]}}var Pc=new class{#e=k(j(Mc()));get summary(){return I(this.#e)}set summary(e){A(this.#e,e,!0)}#t=k(j([]));get daily(){return I(this.#t)}set daily(e){A(this.#t,e,!0)}#n=k(j(Nc()));get cacheOverview(){return I(this.#n)}set cacheOverview(e){A(this.#n,e,!0)}#r=k(!1);get loading(){return I(this.#r)}set loading(e){A(this.#r,e,!0)}#i=null;#a=null;cacheAnalyticsEnabled(){return vs.cacheVisible()}async fetchUsage(){this.#i&&this.#i.abort();let e=new AbortController;this.#i=e,this.loading=!0;try{let t=Oc.queryStr()+`&interval=`+Oc.interval,[n,r]=await Promise.all([ps(`/admin/usage/summary?`+t,{label:`usage summary`,signal:e.signal}),ps(`/admin/usage/daily?`+t,{label:`usage daily`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.summary=Mc(),this.daily=[],this.cacheOverview=Nc();return}this.summary=n.data||Mc(),this.daily=Array.isArray(r.data)?r.data:[]}catch(e){if(hs(e))return;console.error(`Failed to fetch usage:`,e),this.summary=Mc(),this.daily=[]}finally{this.#i===e&&(this.#i=null,this.loading=!1)}}async fetchCacheOverview(e=``){if(await vs.ensureLoaded(),!this.cacheAnalyticsEnabled()){this.cacheOverview=Nc();return}this.#a&&this.#a.abort();let t=new AbortController;this.#a=t;try{let n=await ps(`/admin/cache/overview?`+(Oc.queryStr()+`&interval=`+Oc.interval+e),{label:`cache overview`,signal:t.signal});if(n.stale||t.signal.aborted)return;if(!n.ok){this.cacheOverview=Nc();return}let r=n.data&&typeof n.data==`object`?n.data:Nc();r.summary||=Nc().summary,Array.isArray(r.daily)||(r.daily=[]),this.cacheOverview=r}catch(e){if(hs(e))return;console.error(`Failed to fetch cache overview:`,e),this.cacheOverview=Nc()}finally{this.#a===t&&(this.#a=null)}}},Fc=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`];function Ic(e,t){let n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return Fc[n.getUTCMonth()]+` `+n.getUTCFullYear()}function Lc(e,t,n){let r=e.getUTCFullYear(),i=e.getUTCMonth()+t,a=new Date(Date.UTC(r,i,1)),o=new Date(Date.UTC(r,i+1,0)),s=(a.getUTCDay()+6)%7,c=[],l=new Date(Date.UTC(r,i,0));for(let e=s-1;e>=0;e--){let t=l.getUTCDate()-e,a=new Date(Date.UTC(r,i-1,t));c.push({day:t,date:a,current:!1,key:`p-`+n(a)})}for(let e=1;e<=o.getUTCDate();e++){let t=new Date(Date.UTC(r,i,e));c.push({day:e,date:t,current:!0,key:`c-`+n(t)})}let u=42-c.length;for(let e=1;e<=u;e++){let t=new Date(Date.UTC(r,i+1,e));c.push({day:e,date:t,current:!1,key:`n-`+n(t)})}return c}function Rc(e,t,n){let r=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return n&&r.getTime()>n.getTime()?e:r}function zc(e,t){return e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()}var Bc=R(``),Vc=R(``),Hc=R(``),Uc=R(`
MoTuWeThFrSaSu
`);function Wc(e,t){E(t,!0);let n=ya(t,`offset`,3,0),r=O(()=>Lc(t.calendarMonth,n(),e=>ss.dateToDateKey(e))),i=O(()=>zc(t.calendarMonth,ss.todayDate())),a=e=>ss.dateToDateKey(e.date),o=e=>a(e)>ss.currentDateKey(),s=e=>e.current&&a(e)===ss.currentDateKey();function c(e,t){let n=t===`start`?Oc.rangeStart():Oc.rangeEnd();return e.current&&!!n&&a(e)===ss.dateToDateKey(n)}function l(e){let t=Oc.rangeStart(),n=Oc.rangeEnd();return!e.current||!t||!n?!1:a(e)>=ss.dateToDateKey(t)&&a(e)<=ss.dateToDateKey(n)}var u=Uc(),d=M(u),f=M(d);let p;var m=P(f,2),h=M(m,!0);T(m);var g=P(m,2),_=e=>{z(e,Bc())},v=e=>{var n=Vc();F(()=>n.disabled=I(i)),L(`click`,n,function(...e){t.onnext?.apply(this,e)}),z(e,n)};V(g,e=>{n()===-1?e(_):e(v,-1)}),T(d);var y=P(d,4);H(y,21,()=>I(r),e=>e.key,(e,n)=>{var r=Hc(),i=M(r,!0);T(r),F((e,t)=>{U(r,1,e,`svelte-g7ga4u`),r.disabled=t,B(i,I(n).day)},[()=>Fi([`dp-day`,{"other-month":!I(n).current,today:s(I(n)),"range-start":c(I(n),`start`),"range-end":c(I(n),`end`),"in-range":l(I(n)),disabled:o(I(n))}]),()=>o(I(n))||!I(n).current]),L(`click`,r,()=>t.onselect?.(I(n))),z(e,r)}),T(y),T(u),F(e=>{p=U(f,1,`dp-nav-btn svelte-g7ga4u`,null,p,{"dp-nav-prev-mobile":n()!==-1}),B(h,e)},[()=>Ic(t.calendarMonth,n())]),L(`click`,f,function(...e){t.onprev?.apply(this,e)}),z(e,u),D()}Hr([`click`]);var Gc=R(``),Kc=R(`
`),qc=Xr(``),Jc=Xr(``),Yc=R(`
`),Xc=R(`
`);function Zc(e,t){E(t,!0);let n=[`3`,`7`,`14`,`30`,`90`],r=k(!1),i=k(`start`),a=k(j(new Date)),o=k(j({show:!1,x:0,y:0}));function s(){A(r,!I(r)),I(r)&&(Oc.syncToToday(),A(a,ss.startOfMonthDate(Oc.customEndDate||ss.todayDate()),!0),A(i,`start`))}function c(){A(r,!1),A(o,{show:!1,x:0,y:0},!0)}let l=Oc.syncTick;An(()=>{let e=Oc.syncTick;e!==l&&(l=e,t.onchange?.())});function u(e){Oc.selectPreset(e),A(i,`start`),t.onchange?.(),c()}let d=()=>A(a,Rc(I(a),-1),!0),f=()=>A(a,Rc(I(a),1,ss.startOfMonthDate(ss.todayDate())),!0);function p(e){let n=new Date(e.date);if(I(i)===`start`){Oc.selectStart(n),A(i,`end`),t.onchange?.();return}Oc.selectEnd(n),A(i,`start`),t.onchange?.(),c()}var m=Xc(),h=M(m),g=P(M(h),2),_=M(g,!0);T(g);var v=P(g,2);let y;T(h);var b=P(h,2),x=e=>{var t=Kc(),r=M(t);H(r,20,()=>n,e=>e,(e,t)=>{var n=Gc();let r;var i=M(n);T(n),F(()=>{r=U(n,1,`preset-btn svelte-ax7ma4`,null,r,{active:Oc.selectedPreset===t}),B(i,`Last ${t??``} days`)}),L(`click`,n,()=>u(t)),z(e,n)}),T(r);var i=P(r,2);H(i,20,()=>[-1,0],e=>e,(e,t)=>{Wc(e,{get calendarMonth(){return I(a)},get offset(){return t},onprev:d,onnext:f,onselect:p})}),T(i),T(t),L(`mousemove`,i,e=>A(o,{show:!0,x:e.clientX,y:e.clientY},!0)),Vr(`mouseleave`,i,()=>A(o,{show:!1,x:0,y:0},!0)),z(e,t)};V(b,e=>{I(r)&&e(x)});var S=P(b,2),C=e=>{var t=Yc(),n=M(t),r=e=>{z(e,qc())},a=e=>{z(e,Jc())};V(n,e=>{I(i)===`start`?e(r):e(a,-1)});var s=P(n,2),c=M(s,!0);T(s),T(t),F(()=>{Hi(t,`left:${I(o).x??``}px;top:${I(o).y??``}px`),B(c,I(i)===`end`?`Select end date`:`Select start date`)}),z(e,t)};V(S,e=>{I(o).show&&e(C)}),T(m),Mi(m,()=>I(r)?Es(c):void 0),F((e,t)=>{W(h,`title`,e),B(_,t),y=U(v,0,`date-picker-chevron svelte-ax7ma4`,null,y,{open:I(r)})},[()=>Oc.dateRangeSpanLabel(),()=>Oc.dateRangeLabel()]),L(`click`,h,s),z(e,m),D()}Hr([`click`,`mousemove`]);function Qc(e){return e+.5|0}var $c=(e,t,n)=>Math.max(Math.min(e,n),t);function el(e){return $c(Qc(e*2.55),0,255)}function tl(e){return $c(Qc(e*255),0,255)}function nl(e){return $c(Qc(e/2.55)/100,0,1)}function rl(e){return $c(Qc(e*100),0,100)}var il={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},al=[...`0123456789ABCDEF`],ol=e=>al[e&15],sl=e=>al[(e&240)>>4]+al[e&15],cl=e=>(e&240)>>4==(e&15),ll=e=>cl(e.r)&&cl(e.g)&&cl(e.b)&&cl(e.a);function ul(e){var t=e.length,n;return e[0]===`#`&&(t===4||t===5?n={r:255&il[e[1]]*17,g:255&il[e[2]]*17,b:255&il[e[3]]*17,a:t===5?il[e[4]]*17:255}:(t===7||t===9)&&(n={r:il[e[1]]<<4|il[e[2]],g:il[e[3]]<<4|il[e[4]],b:il[e[5]]<<4|il[e[6]],a:t===9?il[e[7]]<<4|il[e[8]]:255})),n}var dl=(e,t)=>e<255?t(e):``;function fl(e){var t=ll(e)?ol:sl;return e?`#`+t(e.r)+t(e.g)+t(e.b)+dl(e.a,t):void 0}var pl=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function ml(e,t,n){let r=t*Math.min(n,1-n),i=(t,i=(t+e/30)%12)=>n-r*Math.max(Math.min(i-3,9-i,1),-1);return[i(0),i(8),i(4)]}function hl(e,t,n){let r=(r,i=(r+e/60)%6)=>n-n*t*Math.max(Math.min(i,4-i,1),0);return[r(5),r(3),r(1)]}function gl(e,t,n){let r=ml(e,1,.5),i;for(t+n>1&&(i=1/(t+n),t*=i,n*=i),i=0;i<3;i++)r[i]*=1-t-n,r[i]+=t;return r}function _l(e,t,n,r,i){return e===i?(t-n)/r+(t.5?l/(2-i-a):l/(i+a),s=_l(t,n,r,l,i),s=s*60+.5),[s|0,c||0,o]}function yl(e,t,n,r){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,n,r)).map(tl)}function bl(e,t,n){return yl(ml,e,t,n)}function xl(e,t,n){return yl(gl,e,t,n)}function Sl(e,t,n){return yl(hl,e,t,n)}function Cl(e){return(e%360+360)%360}function wl(e){let t=pl.exec(e),n=255,r;if(!t)return;t[5]!==r&&(n=t[6]?el(+t[5]):tl(+t[5]));let i=Cl(+t[2]),a=t[3]/100,o=t[4]/100;return r=t[1]===`hwb`?xl(i,a,o):t[1]===`hsv`?Sl(i,a,o):bl(i,a,o),{r:r[0],g:r[1],b:r[2],a:n}}function Tl(e,t){var n=vl(e);n[0]=Cl(n[0]+t),n=bl(n),e.r=n[0],e.g=n[1],e.b=n[2]}function El(e){if(!e)return;let t=vl(e),n=t[0],r=rl(t[1]),i=rl(t[2]);return e.a<255?`hsla(${n}, ${r}%, ${i}%, ${nl(e.a)})`:`hsl(${n}, ${r}%, ${i}%)`}var Dl={x:`dark`,Z:`light`,Y:`re`,X:`blu`,W:`gr`,V:`medium`,U:`slate`,A:`ee`,T:`ol`,S:`or`,B:`ra`,C:`lateg`,D:`ights`,R:`in`,Q:`turquois`,E:`hi`,P:`ro`,O:`al`,N:`le`,M:`de`,L:`yello`,F:`en`,K:`ch`,G:`arks`,H:`ea`,I:`ightg`,J:`wh`},Ol={OiceXe:`f0f8ff`,antiquewEte:`faebd7`,aqua:`ffff`,aquamarRe:`7fffd4`,azuY:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`0`,blanKedOmond:`ffebcd`,Xe:`ff`,XeviTet:`8a2be2`,bPwn:`a52a2a`,burlywood:`deb887`,caMtXe:`5f9ea0`,KartYuse:`7fff00`,KocTate:`d2691e`,cSO:`ff7f50`,cSnflowerXe:`6495ed`,cSnsilk:`fff8dc`,crimson:`dc143c`,cyan:`ffff`,xXe:`8b`,xcyan:`8b8b`,xgTMnPd:`b8860b`,xWay:`a9a9a9`,xgYF:`6400`,xgYy:`a9a9a9`,xkhaki:`bdb76b`,xmagFta:`8b008b`,xTivegYF:`556b2f`,xSange:`ff8c00`,xScEd:`9932cc`,xYd:`8b0000`,xsOmon:`e9967a`,xsHgYF:`8fbc8f`,xUXe:`483d8b`,xUWay:`2f4f4f`,xUgYy:`2f4f4f`,xQe:`ced1`,xviTet:`9400d3`,dAppRk:`ff1493`,dApskyXe:`bfff`,dimWay:`696969`,dimgYy:`696969`,dodgerXe:`1e90ff`,fiYbrick:`b22222`,flSOwEte:`fffaf0`,foYstWAn:`228b22`,fuKsia:`ff00ff`,gaRsbSo:`dcdcdc`,ghostwEte:`f8f8ff`,gTd:`ffd700`,gTMnPd:`daa520`,Way:`808080`,gYF:`8000`,gYFLw:`adff2f`,gYy:`808080`,honeyMw:`f0fff0`,hotpRk:`ff69b4`,RdianYd:`cd5c5c`,Rdigo:`4b0082`,ivSy:`fffff0`,khaki:`f0e68c`,lavFMr:`e6e6fa`,lavFMrXsh:`fff0f5`,lawngYF:`7cfc00`,NmoncEffon:`fffacd`,ZXe:`add8e6`,ZcSO:`f08080`,Zcyan:`e0ffff`,ZgTMnPdLw:`fafad2`,ZWay:`d3d3d3`,ZgYF:`90ee90`,ZgYy:`d3d3d3`,ZpRk:`ffb6c1`,ZsOmon:`ffa07a`,ZsHgYF:`20b2aa`,ZskyXe:`87cefa`,ZUWay:`778899`,ZUgYy:`778899`,ZstAlXe:`b0c4de`,ZLw:`ffffe0`,lime:`ff00`,limegYF:`32cd32`,lRF:`faf0e6`,magFta:`ff00ff`,maPon:`800000`,VaquamarRe:`66cdaa`,VXe:`cd`,VScEd:`ba55d3`,VpurpN:`9370db`,VsHgYF:`3cb371`,VUXe:`7b68ee`,VsprRggYF:`fa9a`,VQe:`48d1cc`,VviTetYd:`c71585`,midnightXe:`191970`,mRtcYam:`f5fffa`,mistyPse:`ffe4e1`,moccasR:`ffe4b5`,navajowEte:`ffdead`,navy:`80`,Tdlace:`fdf5e6`,Tive:`808000`,TivedBb:`6b8e23`,Sange:`ffa500`,SangeYd:`ff4500`,ScEd:`da70d6`,pOegTMnPd:`eee8aa`,pOegYF:`98fb98`,pOeQe:`afeeee`,pOeviTetYd:`db7093`,papayawEp:`ffefd5`,pHKpuff:`ffdab9`,peru:`cd853f`,pRk:`ffc0cb`,plum:`dda0dd`,powMrXe:`b0e0e6`,purpN:`800080`,YbeccapurpN:`663399`,Yd:`ff0000`,Psybrown:`bc8f8f`,PyOXe:`4169e1`,saddNbPwn:`8b4513`,sOmon:`fa8072`,sandybPwn:`f4a460`,sHgYF:`2e8b57`,sHshell:`fff5ee`,siFna:`a0522d`,silver:`c0c0c0`,skyXe:`87ceeb`,UXe:`6a5acd`,UWay:`708090`,UgYy:`708090`,snow:`fffafa`,sprRggYF:`ff7f`,stAlXe:`4682b4`,tan:`d2b48c`,teO:`8080`,tEstN:`d8bfd8`,tomato:`ff6347`,Qe:`40e0d0`,viTet:`ee82ee`,JHt:`f5deb3`,wEte:`ffffff`,wEtesmoke:`f5f5f5`,Lw:`ffff00`,LwgYF:`9acd32`};function kl(){let e={},t=Object.keys(Ol),n=Object.keys(Dl),r,i,a,o,s;for(r=0;r>16&255,a>>8&255,a&255]}return e}var Al;function jl(e){Al||(Al=kl(),Al.transparent=[0,0,0,0]);let t=Al[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Ml=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Nl(e){let t=Ml.exec(e),n=255,r,i,a;if(t){if(t[7]!==r){let e=+t[7];n=t[8]?el(e):$c(e*255,0,255)}return r=+t[1],i=+t[3],a=+t[5],r=255&(t[2]?el(r):$c(r,0,255)),i=255&(t[4]?el(i):$c(i,0,255)),a=255&(t[6]?el(a):$c(a,0,255)),{r,g:i,b:a,a:n}}}function Pl(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${nl(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`)}var Fl=e=>e<=.0031308?e*12.92:e**(1/2.4)*1.055-.055,Il=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Ll(e,t,n){let r=Il(nl(e.r)),i=Il(nl(e.g)),a=Il(nl(e.b));return{r:tl(Fl(r+n*(Il(nl(t.r))-r))),g:tl(Fl(i+n*(Il(nl(t.g))-i))),b:tl(Fl(a+n*(Il(nl(t.b))-a))),a:e.a+n*(t.a-e.a)}}function Rl(e,t,n){if(e){let r=vl(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*n,t===0?360:1)),r=bl(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function zl(e,t){return e&&Object.assign(t||{},e)}function Bl(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(t={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(t.a=tl(e[3]))):(t=zl(e,{r:0,g:0,b:0,a:1}),t.a=tl(t.a)),t}function Vl(e){return e.charAt(0)===`r`?Nl(e):wl(e)}var Hl=class e{constructor(t){if(t instanceof e)return t;let n=typeof t,r;n===`object`?r=Bl(t):n===`string`&&(r=ul(t)||jl(t)||Vl(t)),this._rgb=r,this._valid=!!r}get valid(){return this._valid}get rgb(){var e=zl(this._rgb);return e&&(e.a=nl(e.a)),e}set rgb(e){this._rgb=Bl(e)}rgbString(){return this._valid?Pl(this._rgb):void 0}hexString(){return this._valid?fl(this._rgb):void 0}hslString(){return this._valid?El(this._rgb):void 0}mix(e,t){if(e){let n=this.rgb,r=e.rgb,i,a=t===i?.5:t,o=2*a-1,s=n.a-r.a,c=((o*s===-1?o:(o+s)/(1+o*s))+1)/2;i=1-c,n.r=255&c*n.r+i*r.r+.5,n.g=255&c*n.g+i*r.g+.5,n.b=255&c*n.b+i*r.b+.5,n.a=a*n.a+(1-a)*r.a,this.rgb=n}return this}interpolate(e,t){return e&&(this._rgb=Ll(this._rgb,e._rgb,t)),this}clone(){return new e(this.rgb)}alpha(e){return this._rgb.a=tl(e),this}clearer(e){let t=this._rgb;return t.a*=1-e,this}greyscale(){let e=this._rgb;return e.r=e.g=e.b=Qc(e.r*.3+e.g*.59+e.b*.11),this}opaquer(e){let t=this._rgb;return t.a*=1+e,this}negate(){let e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Rl(this._rgb,2,e),this}darken(e){return Rl(this._rgb,2,-e),this}saturate(e){return Rl(this._rgb,1,e),this}desaturate(e){return Rl(this._rgb,1,-e),this}rotate(e){return Tl(this._rgb,e),this}};function Ul(){}var Wl=(()=>{let e=0;return()=>e++})();function Gl(e){return e==null}function Kl(e){if(Array.isArray&&Array.isArray(e))return!0;let t=Object.prototype.toString.call(e);return t.slice(0,7)===`[object`&&t.slice(-6)===`Array]`}function ql(e){return e!==null&&Object.prototype.toString.call(e)===`[object Object]`}function Jl(e){return(typeof e==`number`||e instanceof Number)&&isFinite(+e)}function Yl(e,t){return Jl(e)?e:t}function Xl(e,t){return e===void 0?t:e}var Zl=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100:+e/t,Ql=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100*t:+e;function $l(e,t,n){if(e&&typeof e.call==`function`)return e.apply(n,t)}function eu(e,t,n,r){let i,a,o;if(Kl(e))if(a=e.length,r)for(i=a-1;i>=0;i--)t.call(n,e[i],i);else for(i=0;ie,x:e=>e.x,y:e=>e.y};function lu(e){let t=e.split(`.`),n=[],r=``;for(let e of t)r+=e,r.endsWith(`\\`)?r=r.slice(0,-1)+`.`:(n.push(r),r=``);return n}function uu(e){let t=lu(e);return e=>{for(let n of t){if(n===``)break;e&&=e[n]}return e}}function du(e,t){return(cu[t]||(cu[t]=uu(t)))(e)}function fu(e){return e.charAt(0).toUpperCase()+e.slice(1)}var pu=e=>e!==void 0,mu=e=>typeof e==`function`,hu=(e,t)=>{if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0};function gu(e){return e.type===`mouseup`||e.type===`click`||e.type===`contextmenu`}var _u=Math.PI,vu=2*_u,yu=vu+_u,bu=1/0,xu=_u/180,Su=_u/2,Cu=_u/4,wu=_u*2/3,Tu=Math.log10,Eu=Math.sign;function Du(e,t,n){return Math.abs(e-t)e-t).pop(),t}function Au(e){return typeof e==`symbol`||typeof e==`object`&&!!e&&!(Symbol.toPrimitive in e||`toString`in e||`valueOf`in e)}function ju(e){return!Au(e)&&!isNaN(parseFloat(e))&&isFinite(e)}function Mu(e,t){let n=Math.round(e);return n-t<=e&&n+t>=e}function Nu(e,t,n){let r,i,a;for(r=0,i=e.length;rc&&l=Math.min(t,n)-r&&e<=Math.max(t,n)+r}function Gu(e,t,n){n||=(n=>e[n]1;)a=i+r>>1,n(a)?i=a:r=a;return{lo:i,hi:r}}var Ku=(e,t,n,r)=>Gu(e,n,r?r=>{let i=e[r][t];return ie[r][t]Gu(e,n,r=>e[r][t]>=n);function Ju(e,t,n){let r=0,i=e.length;for(;rr&&e[i-1]>n;)i--;return r>0||i{let n=`_onData`+fu(t),r=e[t];Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value(...t){let i=r.apply(this,t);return e._chartjs.listeners.forEach(e=>{typeof e[n]==`function`&&e[n](...t)}),i}})})}function Zu(e,t){let n=e._chartjs;if(!n)return;let r=n.listeners,i=r.indexOf(t);i!==-1&&r.splice(i,1),!(r.length>0)&&(Yu.forEach(t=>{delete e[t]}),delete e._chartjs)}function Qu(e){let t=new Set(e);return t.size===e.length?e:Array.from(t)}var $u=function(){return typeof window>`u`?function(e){return e()}:window.requestAnimationFrame}();function ed(e,t){let n=[],r=!1;return function(...i){n=i,r||(r=!0,$u.call(window,()=>{r=!1,e.apply(t,n)}))}}function td(e,t){let n;return function(...r){return t?(clearTimeout(n),n=setTimeout(e,t,r)):e.apply(this,r),t}}var nd=e=>e===`start`?`left`:e===`end`?`right`:`center`,rd=(e,t,n)=>e===`start`?t:e===`end`?n:(t+n)/2,id=(e,t,n,r)=>e===(r?`left`:`right`)?n:e===`center`?(t+n)/2:t;function ad(e,t,n){let r=t.length,i=0,a=r;if(e._sorted){let{iScale:o,vScale:s,_parsed:c}=e,l=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null,u=o.axis,{min:d,max:f,minDefined:p,maxDefined:m}=o.getUserBounds();if(p){if(i=Math.min(Ku(c,u,d).lo,n?r:Ku(t,u,o.getPixelForValue(d)).lo),l){let e=c.slice(0,i+1).reverse().findIndex(e=>!Gl(e[s.axis]));i-=Math.max(0,e)}i=Hu(i,0,r-1)}if(m){let e=Math.max(Ku(c,o.axis,f,!0).hi+1,n?0:Ku(t,u,o.getPixelForValue(f),!0).hi+1);if(l){let t=c.slice(e-1).findIndex(e=>!Gl(e[s.axis]));e+=Math.max(0,t)}a=Hu(e,i,r)-i}else a=r-i}return{start:i,count:a}}function od(e){let{xScale:t,yScale:n,_scaleRanges:r}=e,i={xmin:t.min,xmax:t.max,ymin:n.min,ymax:n.max};if(!r)return e._scaleRanges=i,!0;let a=r.xmin!==t.min||r.xmax!==t.max||r.ymin!==n.min||r.ymax!==n.max;return Object.assign(r,i),a}var sd=e=>e===0||e===1,cd=(e,t,n)=>-(2**(10*--e)*Math.sin((e-t)*vu/n)),ld=(e,t,n)=>2**(-10*e)*Math.sin((e-t)*vu/n)+1,ud={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>-e*(e-2),easeInOutQuad:e=>(e/=.5)<1?.5*e*e:-.5*(--e*(e-2)-1),easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2),easeInQuart:e=>e*e*e*e,easeOutQuart:e=>-(--e*e*e*e-1),easeInOutQuart:e=>(e/=.5)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2),easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>--e*e*e*e*e+1,easeInOutQuint:e=>(e/=.5)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2),easeInSine:e=>-Math.cos(e*Su)+1,easeOutSine:e=>Math.sin(e*Su),easeInOutSine:e=>-.5*(Math.cos(_u*e)-1),easeInExpo:e=>e===0?0:2**(10*(e-1)),easeOutExpo:e=>e===1?1:-(2**(-10*e))+1,easeInOutExpo:e=>sd(e)?e:e<.5?.5*2**(10*(e*2-1)):.5*(-(2**(-10*(e*2-1)))+2),easeInCirc:e=>e>=1?e:-(Math.sqrt(1-e*e)-1),easeOutCirc:e=>Math.sqrt(1- --e*e),easeInOutCirc:e=>(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1),easeInElastic:e=>sd(e)?e:cd(e,.075,.3),easeOutElastic:e=>sd(e)?e:ld(e,.075,.3),easeInOutElastic(e){let t=.1125,n=.45;return sd(e)?e:e<.5?.5*cd(e*2,t,n):.5+.5*ld(e*2-1,t,n)},easeInBack(e){return e*e*(2.70158*e-1.70158)},easeOutBack(e){return--e*e*(2.70158*e+1.70158)+1},easeInOutBack(e){let t=1.70158;return(e/=.5)<1?.5*(e*e*(((t*=1.525)+1)*e-t)):.5*((e-=2)*e*(((t*=1.525)+1)*e+t)+2)},easeInBounce:e=>1-ud.easeOutBounce(1-e),easeOutBounce(e){let t=7.5625,n=2.75;return e<1/n?t*e*e:e<2/n?t*(e-=1.5/n)*e+.75:e<2.5/n?t*(e-=2.25/n)*e+.9375:t*(e-=2.625/n)*e+.984375},easeInOutBounce:e=>e<.5?ud.easeInBounce(e*2)*.5:ud.easeOutBounce(e*2-1)*.5+.5};function dd(e){if(e&&typeof e==`object`){let t=e.toString();return t===`[object CanvasPattern]`||t===`[object CanvasGradient]`}return!1}function fd(e){return dd(e)?e:new Hl(e)}function pd(e){return dd(e)?e:new Hl(e).saturate(.5).darken(.1).hexString()}var md=[`x`,`y`,`borderWidth`,`radius`,`tension`],hd=[`color`,`borderColor`,`backgroundColor`];function gd(e){e.set(`animation`,{delay:void 0,duration:1e3,easing:`easeOutQuart`,fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),e.describe(`animation`,{_fallback:!1,_indexable:!1,_scriptable:e=>e!==`onProgress`&&e!==`onComplete`&&e!==`fn`}),e.set(`animations`,{colors:{type:`color`,properties:hd},numbers:{type:`number`,properties:md}}),e.describe(`animations`,{_fallback:`animation`}),e.set(`transitions`,{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:`transparent`},visible:{type:`boolean`,duration:0}}},hide:{animations:{colors:{to:`transparent`},visible:{type:`boolean`,easing:`linear`,fn:e=>e|0}}}})}function _d(e){e.set(`layout`,{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var vd=new Map;function yd(e,t){t||={};let n=e+JSON.stringify(t),r=vd.get(n);return r||(r=new Intl.NumberFormat(e,t),vd.set(n,r)),r}function bd(e,t,n){return yd(t,n).format(e)}var xd={values(e){return Kl(e)?e:``+e},numeric(e,t,n){if(e===0)return`0`;let r=this.chart.options.locale,i,a=e;if(n.length>1){let t=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(t<1e-4||t>0x38d7ea4c68000)&&(i=`scientific`),a=Sd(e,n)}let o=Tu(Math.abs(a)),s=isNaN(o)?1:Math.max(Math.min(-1*Math.floor(o),20),0),c={notation:i,minimumFractionDigits:s,maximumFractionDigits:s};return Object.assign(c,this.options.ticks.format),bd(e,r,c)},logarithmic(e,t,n){if(e===0)return`0`;let r=n[t].significand||e/10**Math.floor(Tu(e));return[1,2,3,5,10,15].includes(r)||t>.8*n.length?xd.numeric.call(this,e,t,n):``}};function Sd(e,t){let n=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(n)>=1&&e!==Math.floor(e)&&(n=e-Math.floor(e)),n}var Cd={formatters:xd};function wd(e){e.set(`scale`,{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:`ticks`,clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,t)=>t.lineWidth,tickColor:(e,t)=>t.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:``,padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:``,padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Cd.formatters.values,minor:{},major:{},align:`center`,crossAlign:`near`,showLabelBackdrop:!1,backdropColor:`rgba(255, 255, 255, 0.75)`,backdropPadding:2}}),e.route(`scale.ticks`,`color`,``,`color`),e.route(`scale.grid`,`color`,``,`borderColor`),e.route(`scale.border`,`color`,``,`borderColor`),e.route(`scale.title`,`color`,``,`color`),e.describe(`scale`,{_fallback:!1,_scriptable:e=>!e.startsWith(`before`)&&!e.startsWith(`after`)&&e!==`callback`&&e!==`parser`,_indexable:e=>e!==`borderDash`&&e!==`tickBorderDash`&&e!==`dash`}),e.describe(`scales`,{_fallback:`scale`}),e.describe(`scale.ticks`,{_scriptable:e=>e!==`backdropPadding`&&e!==`callback`,_indexable:e=>e!==`backdropPadding`})}var Td=Object.create(null),Ed=Object.create(null);function Dd(e,t){if(!t)return e;let n=t.split(`.`);for(let t=0,r=n.length;te.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[`mousemove`,`mouseout`,`click`,`touchstart`,`touchmove`],this.font={family:`'Helvetica Neue', 'Helvetica', 'Arial', sans-serif`,size:12,style:`normal`,lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,t)=>pd(t.backgroundColor),this.hoverBorderColor=(e,t)=>pd(t.borderColor),this.hoverColor=(e,t)=>pd(t.color),this.indexAxis=`x`,this.interaction={mode:`nearest`,intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e),this.apply(t)}set(e,t){return Od(this,e,t)}get(e){return Dd(this,e)}describe(e,t){return Od(Ed,e,t)}override(e,t){return Od(Td,e,t)}route(e,t,n,r){let i=Dd(this,e),a=Dd(this,n),o=`_`+t;Object.defineProperties(i,{[o]:{value:i[t],writable:!0},[t]:{enumerable:!0,get(){let e=this[o],t=a[r];return ql(e)?Object.assign({},t,e):Xl(e,t)},set(e){this[o]=e}}})}apply(e){e.forEach(e=>e(this))}}({_scriptable:e=>!e.startsWith(`on`),_indexable:e=>e!==`events`,hover:{_fallback:`interaction`},interaction:{_scriptable:!1,_indexable:!1}},[gd,_d,wd]);function Ad(e){return!e||Gl(e.size)||Gl(e.family)?null:(e.style?e.style+` `:``)+(e.weight?e.weight+` `:``)+e.size+`px `+e.family}function jd(e,t,n,r,i){let a=t[i];return a||(a=t[i]=e.measureText(i).width,n.push(i)),a>r&&(r=a),r}function Md(e,t,n,r){r||={};let i=r.data=r.data||{},a=r.garbageCollect=r.garbageCollect||[];r.font!==t&&(i=r.data={},a=r.garbageCollect=[],r.font=t),e.save(),e.font=t;let o=0,s=n.length,c,l,u,d,f;for(c=0;cn.length){for(c=0;c0&&e.stroke()}}function Ld(e,t,n){return n||=.5,!t||e&&e.x>t.left-n&&e.xt.top-n&&e.y0&&a.strokeColor!==``,c,l;for(e.save(),e.font=i.string,Hd(e,a),c=0;c+e||0;function Zd(e,t){let n={},r=ql(t),i=r?Object.keys(t):t,a=ql(e)?r?n=>Xl(e[n],e[t[n]]):t=>e[t]:()=>e;for(let e of i)n[e]=Xd(a(e));return n}function Qd(e){return Zd(e,{top:`y`,right:`x`,bottom:`y`,left:`x`})}function $d(e){return Zd(e,[`topLeft`,`topRight`,`bottomLeft`,`bottomRight`])}function ef(e){let t=Qd(e);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function tf(e,t){e||={},t||=kd.font;let n=Xl(e.size,t.size);typeof n==`string`&&(n=parseInt(n,10));let r=Xl(e.style,t.style);r&&!(``+r).match(Jd)&&(console.warn(`Invalid font style specified: "`+r+`"`),r=void 0);let i={family:Xl(e.family,t.family),lineHeight:Yd(Xl(e.lineHeight,t.lineHeight),n),size:n,style:r,weight:Xl(e.weight,t.weight),string:``};return i.string=Ad(i),i}function nf(e,t,n,r){let i=!0,a,o,s;for(a=0,o=e.length;an&&e===0?0:e+t;return{min:o(r,-Math.abs(a)),max:o(i,a)}}function af(e,t){return Object.assign(Object.create(e),t)}function of(e,t=[``],n,r,i=()=>e[0]){let a=n||e;return r===void 0&&(r=Sf(`_fallback`,e)),new Proxy({[Symbol.toStringTag]:`Object`,_cacheable:!0,_scopes:e,_rootScopes:a,_fallback:r,_getTarget:i,override:n=>of([n,...e],t,a,r)},{deleteProperty(t,n){return delete t[n],delete t._keys,delete e[0][n],!0},get(n,r){return df(n,r,()=>xf(r,t,e,n))},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e._scopes[0],t)},getPrototypeOf(){return Reflect.getPrototypeOf(e[0])},has(e,t){return Cf(e).includes(t)},ownKeys(e){return Cf(e)},set(e,t,n){let r=e._storage||=i();return e[t]=r[t]=n,delete e._keys,!0}})}function sf(e,t,n,r){let i={_cacheable:!1,_proxy:e,_context:t,_subProxy:n,_stack:new Set,_descriptors:cf(e,r),setContext:t=>sf(e,t,n,r),override:i=>sf(e.override(i),t,n,r)};return new Proxy(i,{deleteProperty(t,n){return delete t[n],delete e[n],!0},get(e,t,n){return df(e,t,()=>ff(e,t,n))},getOwnPropertyDescriptor(t,n){return t._descriptors.allKeys?Reflect.has(e,n)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(e,n)},getPrototypeOf(){return Reflect.getPrototypeOf(e)},has(t,n){return Reflect.has(e,n)},ownKeys(){return Reflect.ownKeys(e)},set(t,n,r){return e[n]=r,delete t[n],!0}})}function cf(e,t={scriptable:!0,indexable:!0}){let{_scriptable:n=t.scriptable,_indexable:r=t.indexable,_allKeys:i=t.allKeys}=e;return{allKeys:i,scriptable:n,indexable:r,isScriptable:mu(n)?n:()=>n,isIndexable:mu(r)?r:()=>r}}var lf=(e,t)=>e?e+fu(t):t,uf=(e,t)=>ql(t)&&e!==`adapters`&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function df(e,t,n){if(Object.prototype.hasOwnProperty.call(e,t)||t===`constructor`)return e[t];let r=n();return e[t]=r,r}function ff(e,t,n){let{_proxy:r,_context:i,_subProxy:a,_descriptors:o}=e,s=r[t];return mu(s)&&o.isScriptable(t)&&(s=pf(t,s,e,n)),Kl(s)&&s.length&&(s=mf(t,s,e,o.isIndexable)),uf(t,s)&&(s=sf(s,i,a&&a[t],o)),s}function pf(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_stack:s}=n;if(s.has(e))throw Error(`Recursion detected: `+Array.from(s).join(`->`)+`->`+e);s.add(e);let c=t(a,o||r);return s.delete(e),uf(e,c)&&(c=vf(i._scopes,i,e,c)),c}function mf(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_descriptors:s}=n;if(a.index!==void 0&&r(e))return t[a.index%t.length];if(ql(t[0])){let n=t,r=i._scopes.filter(e=>e!==n);t=[];for(let c of n){let n=vf(r,i,e,c);t.push(sf(n,a,o&&o[e],s))}}return t}function hf(e,t,n){return mu(e)?e(t,n):e}var gf=(e,t)=>e===!0?t:typeof e==`string`?du(t,e):void 0;function _f(e,t,n,r,i){for(let a of t){let t=gf(n,a);if(t){e.add(t);let a=hf(t._fallback,n,i);if(a!==void 0&&a!==n&&a!==r)return a}else if(t===!1&&r!==void 0&&n!==r)return null}return!1}function vf(e,t,n,r){let i=t._rootScopes,a=hf(t._fallback,n,r),o=[...e,...i],s=new Set;s.add(r);let c=yf(s,o,n,a||n,r);return c===null||a!==void 0&&a!==n&&(c=yf(s,o,a,c,r),c===null)?!1:of(Array.from(s),[``],i,a,()=>bf(t,n,r))}function yf(e,t,n,r,i){for(;n;)n=_f(e,t,n,r,i);return n}function bf(e,t,n){let r=e._getTarget();t in r||(r[t]={});let i=r[t];return Kl(i)&&ql(n)?n:i||{}}function xf(e,t,n,r){let i;for(let a of t)if(i=Sf(lf(a,e),n),i!==void 0)return uf(e,i)?vf(n,r,e,i):i}function Sf(e,t){for(let n of t){if(!n)continue;let t=n[e];if(t!==void 0)return t}}function Cf(e){let t=e._keys;return t||=e._keys=wf(e._scopes),t}function wf(e){let t=new Set;for(let n of e)for(let e of Object.keys(n).filter(e=>!e.startsWith(`_`)))t.add(e);return Array.from(t)}function Tf(e,t,n,r){let{iScale:i}=e,{key:a=`r`}=this._parsing,o=Array(r),s,c,l,u;for(s=0,c=r;ste===`x`?`y`:`x`;function kf(e,t,n,r){let i=e.skip?t:e,a=t,o=n.skip?t:n,s=Ru(a,i),c=Ru(o,a),l=s/(s+c),u=c/(s+c);l=isNaN(l)?0:l,u=isNaN(u)?0:u;let d=r*l,f=r*u;return{previous:{x:a.x-d*(o.x-i.x),y:a.y-d*(o.y-i.y)},next:{x:a.x+f*(o.x-i.x),y:a.y+f*(o.y-i.y)}}}function Af(e,t,n){let r=e.length,i,a,o,s,c,l=Df(e,0);for(let u=0;u!e.skip)),t.cubicInterpolationMode===`monotone`)Mf(e,i);else{let n=r?e[e.length-1]:e[0];for(a=0,o=e.length;ae.ownerDocument.defaultView.getComputedStyle(e,null);function Bf(e,t){return zf(e).getPropertyValue(t)}var Vf=[`top`,`right`,`bottom`,`left`];function Hf(e,t,n){let r={};n=n?`-`+n:``;for(let i=0;i<4;i++){let a=Vf[i];r[a]=parseFloat(e[t+`-`+a+n])||0}return r.width=r.left+r.right,r.height=r.top+r.bottom,r}var Uf=(e,t,n)=>(e>0||t>0)&&(!n||!n.shadowRoot);function Wf(e,t){let n=e.touches,r=n&&n.length?n[0]:e,{offsetX:i,offsetY:a}=r,o=!1,s,c;if(Uf(i,a,e.target))s=i,c=a;else{let e=t.getBoundingClientRect();s=r.clientX-e.left,c=r.clientY-e.top,o=!0}return{x:s,y:c,box:o}}function Gf(e,t){if(`native`in e)return e;let{canvas:n,currentDevicePixelRatio:r}=t,i=zf(n),a=i.boxSizing===`border-box`,o=Hf(i,`padding`),s=Hf(i,`border`,`width`),{x:c,y:l,box:u}=Wf(e,n),d=o.left+(u&&s.left),f=o.top+(u&&s.top),{width:p,height:m}=t;return a&&(p-=o.width+s.width,m-=o.height+s.height),{x:Math.round((c-d)/p*n.width/r),y:Math.round((l-f)/m*n.height/r)}}function Kf(e,t,n){let r,i;if(t===void 0||n===void 0){let a=e&&Lf(e);if(!a)t=e.clientWidth,n=e.clientHeight;else{let e=a.getBoundingClientRect(),o=zf(a),s=Hf(o,`border`,`width`),c=Hf(o,`padding`);t=e.width-c.width-s.width,n=e.height-c.height-s.height,r=Rf(o.maxWidth,a,`clientWidth`),i=Rf(o.maxHeight,a,`clientHeight`)}}return{width:t,height:n,maxWidth:r||bu,maxHeight:i||bu}}var qf=e=>Math.round(e*10)/10;function Jf(e,t,n,r){let i=zf(e),a=Hf(i,`margin`),o=Rf(i.maxWidth,e,`clientWidth`)||bu,s=Rf(i.maxHeight,e,`clientHeight`)||bu,c=Kf(e,t,n),{width:l,height:u}=c;if(i.boxSizing===`content-box`){let e=Hf(i,`border`,`width`),t=Hf(i,`padding`);l-=t.width+e.width,u-=t.height+e.height}return l=Math.max(0,l-a.width),u=Math.max(0,r?l/r:u-a.height),l=qf(Math.min(l,o,c.maxWidth)),u=qf(Math.min(u,s,c.maxHeight)),l&&!u&&(u=qf(l/2)),(t!==void 0||n!==void 0)&&r&&c.height&&u>c.height&&(u=c.height,l=qf(Math.floor(u*r))),{width:l,height:u}}function Yf(e,t,n){let r=t||1,i=qf(e.height*r),a=qf(e.width*r);e.height=qf(e.height),e.width=qf(e.width);let o=e.canvas;return o.style&&(n||!o.style.height&&!o.style.width)&&(o.style.height=`${e.height}px`,o.style.width=`${e.width}px`),e.currentDevicePixelRatio!==r||o.height!==i||o.width!==a?(e.currentDevicePixelRatio=r,o.height=i,o.width=a,e.ctx.setTransform(r,0,0,r,0,0),!0):!1}var Xf=function(){let e=!1;try{let t={get passive(){return e=!0,!1}};If()&&(window.addEventListener(`test`,null,t),window.removeEventListener(`test`,null,t))}catch{}return e}();function Zf(e,t){let n=Bf(e,t),r=n&&n.match(/^(\d+)(\.\d+)?px$/);return r?+r[1]:void 0}function Qf(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}}function $f(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:r===`middle`?n<.5?e.y:t.y:r===`after`?n<1?e.y:t.y:n>0?t.y:e.y}}function ep(e,t,n,r){let i={x:e.cp2x,y:e.cp2y},a={x:t.cp1x,y:t.cp1y},o=Qf(e,i,n),s=Qf(i,a,n),c=Qf(a,t,n);return Qf(Qf(o,s,n),Qf(s,c,n),n)}var tp=function(e,t){return{x(n){return e+e+t-n},setWidth(e){t=e},textAlign(e){return e===`center`?e:e===`right`?`left`:`right`},xPlus(e,t){return e-t},leftForLtr(e,t){return e-t}}},np=function(){return{x(e){return e},setWidth(e){},textAlign(e){return e},xPlus(e,t){return e+t},leftForLtr(e,t){return e}}};function rp(e,t,n){return e?tp(t,n):np()}function ip(e,t){let n,r;(t===`ltr`||t===`rtl`)&&(n=e.canvas.style,r=[n.getPropertyValue(`direction`),n.getPropertyPriority(`direction`)],n.setProperty(`direction`,t,`important`),e.prevTextDirection=r)}function ap(e,t){t!==void 0&&(delete e.prevTextDirection,e.canvas.style.setProperty(`direction`,t[0],t[1]))}function op(e){return e===`angle`?{between:Vu,compare:zu,normalize:Bu}:{between:Wu,compare:(e,t)=>e-t,normalize:e=>e}}function sp({start:e,end:t,count:n,loop:r,style:i}){return{start:e%n,end:t%n,loop:r&&(t-e+1)%n===0,style:i}}function cp(e,t,n){let{property:r,start:i,end:a}=n,{between:o,normalize:s}=op(r),c=t.length,{start:l,end:u,loop:d}=e,f,p;if(d){for(l+=c,u+=c,f=0,p=c;fc(i,y,_)&&s(i,y)!==0,x=()=>s(a,_)===0||c(a,y,_),S=()=>h||b(),C=()=>!h||x();for(let e=u,n=u;e<=d;++e)v=t[e%o],!v.skip&&(_=l(v[r]),_!==y&&(h=c(_,i,a),g===null&&S()&&(g=s(_,i)===0?e:n),g!==null&&C()&&(m.push(sp({start:g,end:e,loop:f,count:o,style:p})),g=null),n=e,y=_));return g!==null&&m.push(sp({start:g,end:d,loop:f,count:o,style:p})),m}function up(e,t){let n=[],r=e.segments;for(let i=0;ii&&e[a%t].skip;)a--;return a%=t,{start:i,end:a}}function fp(e,t,n,r){let i=e.length,a=[],o=t,s=e[t],c;for(c=t+1;c<=n;++c){let n=e[c%i];n.skip||n.stop?s.skip||(r=!1,a.push({start:t%i,end:(c-1)%i,loop:r}),t=o=n.stop?c:null):(o=c,s.skip&&(t=c)),s=n}return o!==null&&a.push({start:t%i,end:o%i,loop:r}),a}function pp(e,t){let n=e.points,r=e.options.spanGaps,i=n.length;if(!i)return[];let a=!!e._loop,{start:o,end:s}=dp(n,i,a,r);return r===!0?mp(e,[{start:o,end:s,loop:a}],n,t):mp(e,fp(n,o,sr({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(n-t.start,a)}))}_refresh(){this._request||=(this._running=!0,$u.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((n,r)=>{if(!n.running||!n.items.length)return;let i=n.items,a=i.length-1,o=!1,s;for(;a>=0;--a)s=i[a],s._active?(s._total>n.duration&&(n.duration=s._total),s.tick(e),o=!0):(i[a]=i[i.length-1],i.pop());o&&(r.draw(),this._notify(r,n,e,`progress`)),i.length||(n.running=!1,this._notify(r,n,e,`complete`),n.initial=!1),t+=i.length}),this._lastDate=e,t===0&&(this._running=!1)}_getAnims(e){let t=this._charts,n=t.get(e);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,n)),n}listen(e,t,n){this._getAnims(e).listeners[t].push(n)}add(e,t){!t||!t.length||this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){let t=this._charts.get(e);t&&(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((e,t)=>Math.max(e,t._duration),0),this._refresh())}running(e){if(!this._running)return!1;let t=this._charts.get(e);return!(!t||!t.running||!t.items.length)}stop(e){let t=this._charts.get(e);if(!t||!t.items.length)return;let n=t.items,r=n.length-1;for(;r>=0;--r)n[r].cancel();t.items=[],this._notify(e,t,Date.now(),`complete`)}remove(e){return this._charts.delete(e)}},Sp=`transparent`,Cp={boolean(e,t,n){return n>.5?t:e},color(e,t,n){let r=fd(e||Sp),i=r.valid&&fd(t||Sp);return i&&i.valid?i.mix(r,n).hexString():t},number(e,t,n){return e+(t-e)*n}},wp=class{constructor(e,t,n,r){let i=t[n];r=nf([e.to,r,i,e.from]);let a=nf([e.from,i,r]);this._active=!0,this._fn=e.fn||Cp[e.type||typeof a],this._easing=ud[e.easing]||ud.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=n,this._from=a,this._to=r,this._promises=void 0}active(){return this._active}update(e,t,n){if(this._active){this._notify(!1);let r=this._target[this._prop],i=n-this._start,a=this._duration-i;this._start=n,this._duration=Math.floor(Math.max(a,e.duration)),this._total+=i,this._loop=!!e.loop,this._to=nf([e.to,t,r,e.from]),this._from=nf([e.from,r,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){let t=e-this._start,n=this._duration,r=this._prop,i=this._from,a=this._loop,o=this._to,s;if(this._active=i!==o&&(a||t1?2-s:s,s=this._easing(Math.min(1,Math.max(0,s))),this._target[r]=this._fn(i,o,s)}wait(){let e=this._promises||=[];return new Promise((t,n)=>{e.push({res:t,rej:n})})}_notify(e){let t=e?`res`:`rej`,n=this._promises||[];for(let e=0;e{let i=e[r];if(!ql(i))return;let a={};for(let e of t)a[e]=i[e];(Kl(i.properties)&&i.properties||[r]).forEach(e=>{(e===r||!n.has(e))&&n.set(e,a)})})}_animateOptions(e,t){let n=t.options,r=Dp(e,n);if(!r)return[];let i=this._createAnimations(r,n);return n.$shared&&Ep(e.options.$animations,n).then(()=>{e.options=n},()=>{}),i}_createAnimations(e,t){let n=this._properties,r=[],i=e.$animations||={},a=Object.keys(t),o=Date.now(),s;for(s=a.length-1;s>=0;--s){let c=a[s];if(c.charAt(0)===`$`)continue;if(c===`options`){r.push(...this._animateOptions(e,t));continue}let l=t[c],u=i[c],d=n.get(c);if(u)if(d&&u.active()){u.update(d,l,o);continue}else u.cancel();if(!d||!d.duration){e[c]=l;continue}i[c]=u=new wp(d,e,c,l),r.push(u)}return r}update(e,t){if(this._properties.size===0){Object.assign(e,t);return}let n=this._createAnimations(e,t);if(n.length)return xp.add(this._chart,n),!0}};function Ep(e,t){let n=[],r=Object.keys(t);for(let t=0;t0||!n&&t<0)return i.index}return null}function zp(e,t){let{chart:n,_cachedMeta:r}=e,i=n._stacks||={},{iScale:a,vScale:o,index:s}=r,c=a.axis,l=o.axis,u=Fp(a,o,r),d=t.length,f;for(let e=0;en[e].axis===t).shift()}function Vp(e,t){return af(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:`default`,type:`dataset`})}function Hp(e,t,n){return af(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:n,index:t,mode:`default`,type:`data`})}function Up(e,t){let n=e.controller.index,r=e.vScale&&e.vScale.axis;if(r){t||=e._parsed;for(let e of t){let t=e._stacks;if(!t||t[r]===void 0||t[r][n]===void 0)return;delete t[r][n],t[r]._visualValues!==void 0&&t[r]._visualValues[n]!==void 0&&delete t[r]._visualValues[n]}}}var Wp=e=>e===`reset`||e===`none`,Gp=(e,t)=>t?e:Object.assign({},e),Kp=(e,t,n)=>e&&!t.hidden&&t._stacked&&{keys:jp(n,!0),values:null},qp=class{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(e,t){this.chart=e,this._ctx=e.ctx,this.index=t,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=Pp(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled(`filler`)&&console.warn(`Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options`)}updateIndex(e){this.index!==e&&Up(this._cachedMeta),this.index=e}linkScales(){let e=this.chart,t=this._cachedMeta,n=this.getDataset(),r=(e,t,n,r)=>e===`x`?t:e===`r`?r:n,i=t.xAxisID=Xl(n.xAxisID,Bp(e,`x`)),a=t.yAxisID=Xl(n.yAxisID,Bp(e,`y`)),o=t.rAxisID=Xl(n.rAxisID,Bp(e,`r`)),s=t.indexAxis,c=t.iAxisID=r(s,i,a,o),l=t.vAxisID=r(s,a,i,o);t.xScale=this.getScaleForId(i),t.yScale=this.getScaleForId(a),t.rScale=this.getScaleForId(o),t.iScale=this.getScaleForId(c),t.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){let t=this._cachedMeta;return e===t.iScale?t.vScale:t.iScale}reset(){this._update(`reset`)}_destroy(){let e=this._cachedMeta;this._data&&Zu(this._data,this),e._stacked&&Up(e)}_dataCheck(){let e=this.getDataset(),t=e.data||=[],n=this._data;if(ql(t)){let e=this._cachedMeta;this._data=Np(t,e)}else if(n!==t){if(n){Zu(n,this);let e=this._cachedMeta;Up(e),e._parsed=[]}t&&Object.isExtensible(t)&&Xu(t,this),this._syncList=[],this._data=t}}addElements(){let e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){let t=this._cachedMeta,n=this.getDataset(),r=!1;this._dataCheck();let i=t._stacked;t._stacked=Pp(t.vScale,t),t.stack!==n.stack&&(r=!0,Up(t),t.stack=n.stack),this._resyncElements(e),(r||i!==t._stacked)&&(zp(this,t._parsed),t._stacked=Pp(t.vScale,t))}configure(){let e=this.chart.config,t=e.datasetScopeKeys(this._type),n=e.getOptionScopes(this.getDataset(),t,!0);this.options=e.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,t){let{_cachedMeta:n,_data:r}=this,{iScale:i,_stacked:a}=n,o=i.axis,s=e===0&&t===r.length||n._sorted,c=e>0&&n._parsed[e-1],l,u,d;if(this._parsing===!1)n._parsed=r,n._sorted=!0,d=r;else{d=Kl(r[e])?this.parseArrayData(n,r,e,t):ql(r[e])?this.parseObjectData(n,r,e,t):this.parsePrimitiveData(n,r,e,t);let i=()=>u[o]===null||c&&u[o]t||u=0;--d)if(!p()){this.updateRangeFromParsed(c,e,f,s);break}}return c}getAllParsedValues(e){let t=this._cachedMeta._parsed,n=[],r,i,a;for(r=0,i=t.length;r=0&&ethis.getContext(n,r,t),u);return p.$shared&&(p.$shared=s,i[a]=Object.freeze(Gp(p,s))),p}_resolveAnimations(e,t,n){let r=this.chart,i=this._cachedDataOpts,a=`animation-${t}`,o=i[a];if(o)return o;let s;if(r.options.animation!==!1){let r=this.chart.config,i=r.datasetAnimationScopeKeys(this._type,t),a=r.getOptionScopes(this.getDataset(),i);s=r.createResolver(a,this.getContext(e,n,t))}let c=new Tp(r,s&&s.animations);return s&&s._cacheable&&(i[a]=Object.freeze(c)),c}getSharedOptions(e){if(e.$shared)return this._sharedOptions||=Object.assign({},e)}includeOptions(e,t){return!t||Wp(e)||this.chart._animationsDisabled}_getSharedOptions(e,t){let n=this.resolveDataElementOptions(e,t),r=this._sharedOptions,i=this.getSharedOptions(n),a=this.includeOptions(t,i)||i!==r;return this.updateSharedOptions(i,t,n),{sharedOptions:i,includeOptions:a}}updateElement(e,t,n,r){Wp(r)?Object.assign(e,n):this._resolveAnimations(t,r).update(e,n)}updateSharedOptions(e,t,n){e&&!Wp(t)&&this._resolveAnimations(void 0,t).update(e,n)}_setStyle(e,t,n,r){e.active=r;let i=this.getStyle(t,r);this._resolveAnimations(t,n,r).update(e,{options:!r&&this.getSharedOptions(i)||i})}removeHoverStyle(e,t,n){this._setStyle(e,n,`active`,!1)}setHoverStyle(e,t,n){this._setStyle(e,n,`active`,!0)}_removeDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!1)}_setDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!0)}_resyncElements(e){let t=this._data,n=this._cachedMeta.data;for(let[e,t,n]of this._syncList)this[e](t,n);this._syncList=[];let r=n.length,i=t.length,a=Math.min(i,r);a&&this.parse(0,a),i>r?this._insertElements(r,i-r,e):i{for(e.length+=t,o=e.length-1;o>=a;o--)e[o]=e[o-t]};for(s(i),o=e;oe-t))}return e._cache.$bar}function Yp(e){let t=e.iScale,n=Jp(t,e.type),r=t._length,i,a,o,s,c=()=>{o===32767||o===-32768||(pu(s)&&(r=Math.min(r,Math.abs(o-s)||r)),s=o)};for(i=0,a=n.length;i0?i[e-1]:null,s=eMath.abs(s)&&(c=s,l=o),t[n.axis]=l,t._custom={barStart:c,barEnd:l,start:i,end:a,min:o,max:s}}function $p(e,t,n,r){return Kl(e)?Qp(e,t,n,r):t[n.axis]=n.parse(e,r),t}function em(e,t,n,r){let i=e.iScale,a=e.vScale,o=i.getLabels(),s=i===a,c=[],l,u,d,f;for(l=n,u=n+r;l=n?1:-1):Eu(e)}function rm(e){let t,n,r,i,a;return e.horizontal?(t=e.base>e.x,n=`left`,r=`right`):(t=e.basee.controller.options.grouped),i=n.options.stacked,a=[],o=this._cachedMeta.controller.getParsed(t),s=o&&o[n.axis],c=e=>{let t=e._parsed.find(e=>e[n.axis]===s),r=t&&t[e.vScale.axis];if(Gl(r)||isNaN(r))return!0};for(let n of r)if(!(t!==void 0&&c(n))&&((i===!1||a.indexOf(n.stack)===-1||i===void 0&&n.stack===void 0)&&a.push(n.stack),n.index===e))break;return a.length||a.push(void 0),a}_getStackCount(e){return this._getStacks(void 0,e).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let e=this.chart.scales,t=this.chart.options.indexAxis;return Object.keys(e).filter(n=>e[n].axis===t).shift()}_getAxis(){let e={},t=this.getFirstScaleIdForIndexAxis();for(let n of this.chart.data.datasets)e[Xl(this.chart.options.indexAxis===`x`?n.xAxisID:n.yAxisID,t)]=!0;return Object.keys(e)}_getStackIndex(e,t,n){let r=this._getStacks(e,n),i=t===void 0?-1:r.indexOf(t);return i===-1?r.length-1:i}_getRuler(){let e=this.options,t=this._cachedMeta,n=t.iScale,r=[],i,a;for(i=0,a=t.data.length;i=0;--n)t=Math.max(t,e[n].size(this.resolveDataElementOptions(n))/2);return t>0&&t}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart.data.labels||[],{xScale:r,yScale:i}=t,a=this.getParsed(e),o=r.getLabelForValue(a.x),s=i.getLabelForValue(a.y),c=a._custom;return{label:n[e]||``,value:`(`+o+`, `+s+(c?`, `+c:``)+`)`}}update(e){let t=this._cachedMeta.data;this.updateElements(t,0,t.length,e)}updateElements(e,t,n,r){let i=r===`reset`,{iScale:a,vScale:o}=this._cachedMeta,{sharedOptions:s,includeOptions:c}=this._getSharedOptions(t,r),l=a.axis,u=o.axis;for(let d=t;dVu(e,s,c,!0)?1:Math.max(t,t*n,r,r*n),m=(e,t,r)=>Vu(e,s,c,!0)?-1:Math.min(t,t*n,r,r*n),h=p(0,l,d),g=p(Su,u,f),_=m(_u,l,d),v=m(_u+Su,u,f);r=(h-_)/2,i=(g-v)/2,a=-(h+_)/2,o=-(g+v)/2}return{ratioX:r,ratioY:i,offsetX:a,offsetY:o}}var fm=class extends qp{static id=`doughnut`;static defaults={datasetElementType:!1,dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:`number`,properties:[`circumference`,`endAngle`,`innerRadius`,`outerRadius`,`startAngle`,`x`,`y`,`offset`,`borderWidth`,`spacing`]}},cutout:`50%`,rotation:0,circumference:360,radius:`100%`,spacing:0,indexAxis:`r`};static descriptors={_scriptable:e=>e!==`spacing`,_indexable:e=>e!==`spacing`&&!e.startsWith(`borderDash`)&&!e.startsWith(`hoverBorderDash`)};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data,{labels:{pointStyle:n,textAlign:r,color:i,useBorderRadius:a,borderRadius:o}}=e.legend.options;return t.labels.length&&t.datasets.length?t.labels.map((t,s)=>{let c=e.getDatasetMeta(0).controller.getStyle(s);return{text:t,fillStyle:c.backgroundColor,fontColor:i,hidden:!e.getDataVisibility(s),lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:c.borderWidth,strokeStyle:c.borderColor,textAlign:r,pointStyle:n,borderRadius:a&&(o||c.borderRadius),index:s}}):[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}}};constructor(e,t){super(e,t),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,t){let n=this.getDataset().data,r=this._cachedMeta;if(this._parsing===!1)r._parsed=n;else{let i=e=>+n[e];if(ql(n[e])){let{key:e=`value`}=this._parsing;i=t=>+du(n[t],e)}let a,o;for(a=e,o=e+t;a0&&!isNaN(e)?Math.abs(e)/t*vu:0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=bd(t._parsed[e],n.options.locale);return{label:r[e]||``,value:i}}getMaxBorderWidth(e){let t=0,n=this.chart,r,i,a,o,s;if(!e){for(r=0,i=n.data.datasets.length;r0&&this.getParsed(t-1);for(let n=0;n=_){v.skip=!0;continue}let b=this.getParsed(n),x=Gl(b[f]),S=v[d]=a.getPixelForValue(b[d],n),C=v[f]=i||x?o.getBasePixel():o.getPixelForValue(s?this.applyStack(o,b,s):b[f],n);v.skip=isNaN(S)||isNaN(C)||x,v.stop=n>0&&Math.abs(b[d]-y[d])>h,m&&(v.parsed=b,v.raw=c.data[n]),u&&(v.options=l||this.resolveDataElementOptions(n,p.active?`active`:r)),g||this.updateElement(p,n,v,r),y=b}}getMaxOverflow(){let e=this._cachedMeta,t=e.dataset,n=t.options&&t.options.borderWidth||0,r=e.data||[];if(!r.length)return n;let i=r[0].size(this.resolveDataElementOptions(0)),a=r[r.length-1].size(this.resolveDataElementOptions(r.length-1));return Math.max(n,i,a)/2}draw(){let e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}},mm=class extends qp{static id=`polarArea`;static defaults={dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:`number`,properties:[`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`]}},indexAxis:`r`,startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:n,color:r}}=e.legend.options;return t.labels.map((t,i)=>{let a=e.getDatasetMeta(0).controller.getStyle(i);return{text:t,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,fontColor:r,lineWidth:a.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(i),index:i}})}return[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}},scales:{r:{type:`radialLinear`,angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(e,t){super(e,t),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=bd(t._parsed[e].r,n.options.locale);return{label:r[e]||``,value:i}}parseObjectData(e,t,n,r){return Tf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta.data;this._updateRadius(),this.updateElements(t,0,t.length,e)}getMinMax(){let e=this._cachedMeta,t={min:1/0,max:-1/0};return e.data.forEach((e,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(rt.max&&(t.max=r))}),t}_updateRadius(){let e=this.chart,t=e.chartArea,n=e.options,r=Math.min(t.right-t.left,t.bottom-t.top),i=Math.max(r/2,0),a=(i-Math.max(n.cutoutPercentage?i/100*n.cutoutPercentage:1,0))/e.getVisibleDatasetCount();this.outerRadius=i-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(e,t,n,r){let i=r===`reset`,a=this.chart,o=a.options.animation,s=this._cachedMeta.rScale,c=s.xCenter,l=s.yCenter,u=s.getIndexAngle(0)-.5*_u,d=u,f,p=360/this.countVisibleElements();for(f=0;f{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&t++}),t}_computeAngle(e,t,n){return this.chart.getDataVisibility(e)?Pu(this.resolveDataElementOptions(e,t).angle||n):0}},hm=Object.freeze({__proto__:null,BarController:lm,BubbleController:um,DoughnutController:fm,LineController:pm,PieController:class extends fm{static id=`pie`;static defaults={cutout:0,rotation:0,circumference:360,radius:`100%`}},PolarAreaController:mm,RadarController:class extends qp{static id=`radar`;static defaults={datasetElementType:`line`,dataElementType:`point`,indexAxis:`r`,showLine:!0,elements:{line:{fill:`start`}}};static overrides={aspectRatio:1,scales:{r:{type:`radialLinear`}}};getLabelAndValue(e){let t=this._cachedMeta.vScale,n=this.getParsed(e);return{label:t.getLabels()[e],value:``+t.getLabelForValue(n[t.axis])}}parseObjectData(e,t,n,r){return Tf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta,n=t.dataset,r=t.data||[],i=t.iScale.getLabels();if(n.points=r,e!==`resize`){let t=this.resolveDatasetElementOptions(e);this.options.showLine||(t.borderWidth=0);let a={_loop:!0,_fullLoop:i.length===r.length,options:t};this.updateElement(n,void 0,a,e)}this.updateElements(r,0,r.length,e)}updateElements(e,t,n,r){let i=this._cachedMeta.rScale,a=r===`reset`;for(let o=t;o0&&this.getParsed(t-1);for(let l=t;l0&&Math.abs(n[f]-v[f])>g,h&&(m.parsed=n,m.raw=c.data[l]),d&&(m.options=u||this.resolveDataElementOptions(l,t.active?`active`:r)),_||this.updateElement(t,l,m,r),v=n}this.updateSharedOptions(u,r,l)}getMaxOverflow(){let e=this._cachedMeta,t=e.data||[];if(!this.options.showLine){let e=0;for(let n=t.length-1;n>=0;--n)e=Math.max(e,t[n].size(this.resolveDataElementOptions(n))/2);return e>0&&e}let n=e.dataset,r=n.options&&n.options.borderWidth||0;if(!t.length)return r;let i=t[0].size(this.resolveDataElementOptions(0)),a=t[t.length-1].size(this.resolveDataElementOptions(t.length-1));return Math.max(r,i,a)/2}}});function gm(){throw Error(`This method is not implemented: Check that a complete date adapter is provided.`)}var _m={_date:class e{static override(t){Object.assign(e.prototype,t)}options;constructor(e){this.options=e||{}}init(){}formats(){return gm()}parse(){return gm()}format(){return gm()}add(){return gm()}diff(){return gm()}startOf(){return gm()}endOf(){return gm()}}};function vm(e,t,n,r){let{controller:i,data:a,_sorted:o}=e,s=i._cachedMeta.iScale,c=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null;if(s&&t===s.axis&&t!==`r`&&o&&a.length){let o=s._reversePixels?qu:Ku;if(!r){let r=o(a,t,n);if(c){let{vScale:t}=i._cachedMeta,{_parsed:n}=e,a=n.slice(0,r.lo+1).reverse().findIndex(e=>!Gl(e[t.axis]));r.lo-=Math.max(0,a);let o=n.slice(r.hi).findIndex(e=>!Gl(e[t.axis]));r.hi+=Math.max(0,o)}return r}else if(i._sharedOptions){let e=a[0],r=typeof e.getRange==`function`&&e.getRange(t);if(r){let e=o(a,t,n-r),i=o(a,t,n+r);return{lo:e.lo,hi:i.hi}}}}return{lo:0,hi:a.length-1}}function ym(e,t,n,r,i){let a=e.getSortedVisibleDatasetMetas(),o=n[t];for(let e=0,n=a.length;e{e[o]&&e[o](t[n],i)&&(a.push({element:e,datasetIndex:r,index:c}),s||=e.inRange(t.x,t.y,i))}),r&&!s?[]:a}var Em={evaluateInteractionItems:ym,modes:{index(e,t,n,r){let i=Gf(t,e),a=n.axis||`x`,o=n.includeInvisible||!1,s=n.intersect?xm(e,i,a,r,o):wm(e,i,a,!1,r,o),c=[];return s.length?(e.getSortedVisibleDatasetMetas().forEach(e=>{let t=s[0].index,n=e.data[t];n&&!n.skip&&c.push({element:n,datasetIndex:e.index,index:t})}),c):[]},dataset(e,t,n,r){let i=Gf(t,e),a=n.axis||`xy`,o=n.includeInvisible||!1,s=n.intersect?xm(e,i,a,r,o):wm(e,i,a,!1,r,o);if(s.length>0){let t=s[0].datasetIndex,n=e.getDatasetMeta(t).data;s=[];for(let e=0;ee.pos===t)}function km(e,t){return e.filter(e=>Dm.indexOf(e.pos)===-1&&e.box.axis===t)}function Am(e,t){return e.sort((e,n)=>{let r=t?n:e,i=t?e:n;return r.weight===i.weight?r.index-i.index:r.weight-i.weight})}function jm(e){let t=[],n,r,i,a,o,s;for(n=0,r=(e||[]).length;ne.box.fullSize),!0),r=Am(Om(t,`left`),!0),i=Am(Om(t,`right`)),a=Am(Om(t,`top`),!0),o=Am(Om(t,`bottom`)),s=km(t,`x`),c=km(t,`y`);return{fullSize:n,leftAndTop:r.concat(a),rightAndBottom:i.concat(c).concat(o).concat(s),chartArea:Om(t,`chartArea`),vertical:r.concat(i).concat(c),horizontal:a.concat(o).concat(s)}}function Fm(e,t,n,r){return Math.max(e[n],t[n])+Math.max(e[r],t[r])}function Im(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.left),e.bottom=Math.max(e.bottom,t.bottom),e.right=Math.max(e.right,t.right)}function Lm(e,t,n,r){let{pos:i,box:a}=n,o=e.maxPadding;if(!ql(i)){n.size&&(e[i]-=n.size);let t=r[n.stack]||{size:0,count:1};t.size=Math.max(t.size,n.horizontal?a.height:a.width),n.size=t.size/t.count,e[i]+=n.size}a.getPadding&&Im(o,a.getPadding());let s=Math.max(0,t.outerWidth-Fm(o,e,`left`,`right`)),c=Math.max(0,t.outerHeight-Fm(o,e,`top`,`bottom`)),l=s!==e.w,u=c!==e.h;return e.w=s,e.h=c,n.horizontal?{same:l,other:u}:{same:u,other:l}}function Rm(e){let t=e.maxPadding;function n(n){let r=Math.max(t[n]-e[n],0);return e[n]+=r,r}e.y+=n(`top`),e.x+=n(`left`),n(`right`),n(`bottom`)}function zm(e,t){let n=t.maxPadding;function r(e){let r={left:0,top:0,right:0,bottom:0};return e.forEach(e=>{r[e]=Math.max(t[e],n[e])}),r}return r(e?[`left`,`right`]:[`top`,`bottom`])}function Bm(e,t,n,r){let i=[],a,o,s,c,l,u;for(a=0,o=e.length,l=0;a{typeof e.beforeLayout==`function`&&e.beforeLayout()});let u=c.reduce((e,t)=>t.box.options&&t.box.options.display===!1?e:e+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:n,padding:i,availableWidth:a,availableHeight:o,vBoxMaxWidth:a/2/u,hBoxMaxHeight:o/2}),f=Object.assign({},i);Im(f,ef(r));let p=Object.assign({maxPadding:f,w:a,h:o,x:i.left,y:i.top},i),m=Nm(c.concat(l),d);Bm(s.fullSize,p,d,m),Bm(c,p,d,m),Bm(l,p,d,m)&&Bm(c,p,d,m),Rm(p),Hm(s.leftAndTop,p,d,m),p.x+=p.w,p.y+=p.h,Hm(s.rightAndBottom,p,d,m),e.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},eu(s.chartArea,t=>{let n=t.box;Object.assign(n,e.chartArea),n.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}},Wm=class{acquireContext(e,t){}releaseContext(e){return!1}addEventListener(e,t,n){}removeEventListener(e,t,n){}getDevicePixelRatio(){return 1}getMaximumSize(e,t,n,r){return t=Math.max(0,t||e.width),n||=e.height,{width:t,height:Math.max(0,r?Math.floor(t/r):n)}}isAttached(e){return!0}updateConfig(e){}},Gm=class extends Wm{acquireContext(e){return e&&e.getContext&&e.getContext(`2d`)||null}updateConfig(e){e.options.animation=!1}},Km=`$chartjs`,qm={touchstart:`mousedown`,touchmove:`mousemove`,touchend:`mouseup`,pointerenter:`mouseenter`,pointerdown:`mousedown`,pointermove:`mousemove`,pointerup:`mouseup`,pointerleave:`mouseout`,pointerout:`mouseout`},Jm=e=>e===null||e===``;function Ym(e,t){let n=e.style,r=e.getAttribute(`height`),i=e.getAttribute(`width`);if(e[Km]={initial:{height:r,width:i,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||`block`,n.boxSizing=n.boxSizing||`border-box`,Jm(i)){let t=Zf(e,`width`);t!==void 0&&(e.width=t)}if(Jm(r))if(e.style.height===``)e.height=e.width/(t||2);else{let t=Zf(e,`height`);t!==void 0&&(e.height=t)}return e}var Xm=Xf?{passive:!0}:!1;function Zm(e,t,n){e&&e.addEventListener(t,n,Xm)}function Qm(e,t,n){e&&e.canvas&&e.canvas.removeEventListener(t,n,Xm)}function $m(e,t){let n=qm[e.type]||e.type,{x:r,y:i}=Gf(e,t);return{type:n,chart:t,native:e,x:r===void 0?null:r,y:i===void 0?null:i}}function eh(e,t){for(let n of e)if(n===t||n.contains(t))return!0}function th(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=eh(n.addedNodes,r),t&&=!eh(n.removedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}function nh(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=eh(n.removedNodes,r),t&&=!eh(n.addedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}var rh=new Map,ih=0;function ah(){let e=window.devicePixelRatio;e!==ih&&(ih=e,rh.forEach((t,n)=>{n.currentDevicePixelRatio!==e&&t()}))}function oh(e,t){rh.size||window.addEventListener(`resize`,ah),rh.set(e,t)}function sh(e){rh.delete(e),rh.size||window.removeEventListener(`resize`,ah)}function ch(e,t,n){let r=e.canvas,i=r&&Lf(r);if(!i)return;let a=ed((e,t)=>{let r=i.clientWidth;n(e,t),r{let t=e[0],n=t.contentRect.width,r=t.contentRect.height;n===0&&r===0||a(n,r)});return o.observe(i),oh(e,a),o}function lh(e,t,n){n&&n.disconnect(),t===`resize`&&sh(e)}function uh(e,t,n){let r=e.canvas,i=ed(t=>{e.ctx!==null&&n($m(t,e))},e);return Zm(r,t,i),i}var dh=class extends Wm{acquireContext(e,t){let n=e&&e.getContext&&e.getContext(`2d`);return n&&n.canvas===e?(Ym(e,t),n):null}releaseContext(e){let t=e.canvas;if(!t[Km])return!1;let n=t[Km].initial;[`height`,`width`].forEach(e=>{let r=n[e];Gl(r)?t.removeAttribute(e):t.setAttribute(e,r)});let r=n.style||{};return Object.keys(r).forEach(e=>{t.style[e]=r[e]}),t.width=t.width,delete t[Km],!0}addEventListener(e,t,n){this.removeEventListener(e,t);let r=e.$proxies||={};r[t]=({attach:th,detach:nh,resize:ch}[t]||uh)(e,t,n)}removeEventListener(e,t){let n=e.$proxies||={},r=n[t];r&&(({attach:lh,detach:lh,resize:lh}[t]||Qm)(e,t,r),n[t]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,n,r){return Jf(e,t,n,r)}isAttached(e){let t=e&&Lf(e);return!!(t&&t.isConnected)}};function fh(e){return!If()||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas?Gm:dh}var ph=class{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(e){let{x:t,y:n}=this.getProps([`x`,`y`],e);return{x:t,y:n}}hasValue(){return ju(this.x)&&ju(this.y)}getProps(e,t){let n=this.$animations;if(!t||!n)return this;let r={};return e.forEach(e=>{r[e]=n[e]&&n[e].active()?n[e]._to:this[e]}),r}};function mh(e,t){let n=e.options.ticks,r=hh(e),i=Math.min(n.maxTicksLimit||r,r),a=n.major.enabled?_h(t):[],o=a.length,s=a[0],c=a[o-1],l=[];if(o>i)return vh(t,l,a,o/i),l;let u=gh(a,t,i);if(o>0){let e,n,r=o>1?Math.round((c-s)/(o-1)):null;for(yh(t,l,u,Gl(r)?0:s-r,s),e=0,n=o-1;ei)return t}return Math.max(i,1)}function _h(e){let t=[],n,r;for(n=0,r=e.length;ne===`left`?`right`:e===`right`?`left`:e,Sh=(e,t,n)=>t===`top`||t===`left`?e[t]+n:e[t]-n,Ch=(e,t)=>Math.min(t||e,e);function wh(e,t){let n=[],r=e.length/t,i=e.length,a=0;for(;ao+s)))return c}function Eh(e,t){eu(e,e=>{let n=e.gc,r=n.length/2,i;if(r>t){for(i=0;in?n:t,n=r&&t>n?t:n,{min:Yl(t,Yl(n,t)),max:Yl(n,Yl(t,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){return this._labelItems||=this._computeLabelItems(e)}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){$l(this.options.beforeUpdate,[this])}update(e,t,n){let{beginAtZero:r,grace:i,ticks:a}=this.options,o=a.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=t,this._margins=n=Object.assign({left:0,right:0,top:0,bottom:0},n),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+n.left+n.right:this.height+n.top+n.bottom,this._dataLimitsCached||=(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=rf(this,i,r),!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let s=o=i||n<=1||!this.isHorizontal()){this.labelRotation=r;return}let l=this._getLabelSizes(),u=l.widest.width,d=l.highest.height,f=Hu(this.chart.width-u,0,this.maxWidth);o=e.offset?this.maxWidth/n:f/(n-1),u+6>o&&(o=f/(n-(e.offset?.5:1)),s=this.maxHeight-Dh(e.grid)-t.padding-Oh(e.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),a=Fu(Math.min(Math.asin(Hu((l.highest.height+6)/o,-1,1)),Math.asin(Hu(s/c,-1,1))-Math.asin(Hu(d/c,-1,1)))),a=Math.max(r,Math.min(i,a))),this.labelRotation=a}afterCalculateLabelRotation(){$l(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){$l(this.options.beforeFit,[this])}fit(){let e={width:0,height:0},{chart:t,options:{ticks:n,title:r,grid:i}}=this,a=this._isVisible(),o=this.isHorizontal();if(a){let a=Oh(r,t.options.font);if(o?(e.width=this.maxWidth,e.height=Dh(i)+a):(e.height=this.maxHeight,e.width=Dh(i)+a),n.display&&this.ticks.length){let{first:t,last:r,widest:i,highest:a}=this._getLabelSizes(),s=n.padding*2,c=Pu(this.labelRotation),l=Math.cos(c),u=Math.sin(c);if(o){let t=n.mirror?0:u*i.width+l*a.height;e.height=Math.min(this.maxHeight,e.height+t+s)}else{let t=n.mirror?0:l*i.width+u*a.height;e.width=Math.min(this.maxWidth,e.width+t+s)}this._calculatePadding(t,r,u,l)}}this._handleMargins(),o?(this.width=this._length=t.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=t.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,t,n,r){let{ticks:{align:i,padding:a},position:o}=this.options,s=this.labelRotation!==0,c=o!==`top`&&this.axis===`x`;if(this.isHorizontal()){let o=this.getPixelForTick(0)-this.left,l=this.right-this.getPixelForTick(this.ticks.length-1),u=0,d=0;s?c?(u=r*e.width,d=n*t.height):(u=n*e.height,d=r*t.width):i===`start`?d=t.width:i===`end`?u=e.width:i!==`inner`&&(u=e.width/2,d=t.width/2),this.paddingLeft=Math.max((u-o+a)*this.width/(this.width-o),0),this.paddingRight=Math.max((d-l+a)*this.width/(this.width-l),0)}else{let n=t.height/2,r=e.height/2;i===`start`?(n=0,r=e.height):i===`end`&&(n=t.height,r=0),this.paddingTop=n+a,this.paddingBottom=r+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){$l(this.options.afterFit,[this])}isHorizontal(){let{axis:e,position:t}=this.options;return t===`top`||t===`bottom`||e===`x`}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){this.beforeTickToLabelConversion(),this.generateTickLabels(e);let t,n;for(t=0,n=e.length;t({width:a[e]||0,height:o[e]||0});return{first:C(0),last:C(t-1),widest:C(x),highest:C(S),widths:a,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,t){return NaN}getValueForPixel(e){}getPixelForTick(e){let t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);let t=this._startPixel+e*this._length;return Uu(this._alignToPixels?Nd(this.chart,t,0):t)}getDecimalForPixel(e){let t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:e,max:t}=this;return e<0&&t<0?t:e>0&&t>0?e:0}getContext(e){let t=this.ticks||[];if(e>=0&&eo*r?o/n:s/r:s*r0:!!e}_computeGridLineItems(e){let t=this.axis,n=this.chart,r=this.options,{grid:i,position:a,border:o}=r,s=i.offset,c=this.isHorizontal(),l=this.ticks.length+ +!!s,u=Dh(i),d=[],f=o.setContext(this.getContext()),p=f.display?f.width:0,m=p/2,h=function(e){return Nd(n,e,p)},g,_,v,y,b,x,S,C,w,ee,te,ne;if(a===`top`)g=h(this.bottom),x=this.bottom-u,C=g-m,ee=h(e.top)+m,ne=e.bottom;else if(a===`bottom`)g=h(this.top),ee=e.top,ne=h(e.bottom)-m,x=g+m,C=this.top+u;else if(a===`left`)g=h(this.right),b=this.right-u,S=g-m,w=h(e.left)+m,te=e.right;else if(a===`right`)g=h(this.left),w=e.left,te=h(e.right)-m,b=g+m,S=this.left+u;else if(t===`x`){if(a===`center`)g=h((e.top+e.bottom)/2+.5);else if(ql(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}ee=e.top,ne=e.bottom,x=g+m,C=x+u}else if(t===`y`){if(a===`center`)g=h((e.left+e.right)/2);else if(ql(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}b=g-m,S=b-u,w=e.left,te=e.right}let re=Xl(r.ticks.maxTicksLimit,l),ie=Math.max(1,Math.ceil(l/re));for(_=0;_0&&(a-=r/2);break}f={left:a,top:i,width:r+t.width,height:n+t.height,color:e.backdropColor}}h.push({label:y,font:w,textOffset:ne,options:{rotation:m,color:n,strokeColor:s,strokeWidth:l,textAlign:d,textBaseline:re,translation:[b,x],backdrop:f}})}return h}_getXAxisLabelAlignment(){let{position:e,ticks:t}=this.options;if(-Pu(this.labelRotation))return e===`top`?`left`:`right`;let n=`center`;return t.align===`start`?n=`left`:t.align===`end`?n=`right`:t.align===`inner`&&(n=`inner`),n}_getYAxisLabelAlignment(e){let{position:t,ticks:{crossAlign:n,mirror:r,padding:i}}=this.options,a=this._getLabelSizes(),o=e+i,s=a.widest.width,c,l;return t===`left`?r?(l=this.right+i,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l+=s)):(l=this.right-o,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l=this.left)):t===`right`?r?(l=this.left+i,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l-=s)):(l=this.left+o,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l=this.right)):c=`right`,{textAlign:c,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;let e=this.chart,t=this.options.position;if(t===`left`||t===`right`)return{top:0,left:this.left,bottom:e.height,right:this.right};if(t===`top`||t===`bottom`)return{top:this.top,left:0,bottom:this.bottom,right:e.width}}drawBackground(){let{ctx:e,options:{backgroundColor:t},left:n,top:r,width:i,height:a}=this;t&&(e.save(),e.fillStyle=t,e.fillRect(n,r,i,a),e.restore())}getLineWidthForValue(e){let t=this.options.grid;if(!this._isVisible()||!t.display)return 0;let n=this.ticks.findIndex(t=>t.value===e);return n>=0?t.setContext(this.getContext(n)).lineWidth:0}drawGrid(e){let t=this.options.grid,n=this.ctx,r=this._gridLineItems||=this._computeGridLineItems(e),i,a,o=(e,t,r)=>{!r.width||!r.color||(n.save(),n.lineWidth=r.width,n.strokeStyle=r.color,n.setLineDash(r.borderDash||[]),n.lineDashOffset=r.borderDashOffset,n.beginPath(),n.moveTo(e.x,e.y),n.lineTo(t.x,t.y),n.stroke(),n.restore())};if(t.display)for(i=0,a=r.length;i{this.draw(e)}}]:[{z:r,draw:e=>{this.drawBackground(),this.drawGrid(e),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:n,draw:e=>{this.drawLabels(e)}}]}getMatchingVisibleMetas(e){let t=this.chart.getSortedVisibleDatasetMetas(),n=this.axis+`AxisID`,r=[],i,a;for(i=0,a=t.length;i{let r=n.split(`.`),i=r.pop(),a=[e].concat(r).join(`.`),o=t[n].split(`.`),s=o.pop(),c=o.join(`.`);kd.route(a,i,c,s)})}function Lh(e){return`id`in e&&`defaults`in e}var Rh=new class{constructor(){this.controllers=new Ph(qp,`datasets`,!0),this.elements=new Ph(ph,`elements`),this.plugins=new Ph(Object,`plugins`),this.scales=new Ph(Nh,`scales`),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each(`register`,e)}remove(...e){this._each(`unregister`,e)}addControllers(...e){this._each(`register`,e,this.controllers)}addElements(...e){this._each(`register`,e,this.elements)}addPlugins(...e){this._each(`register`,e,this.plugins)}addScales(...e){this._each(`register`,e,this.scales)}getController(e){return this._get(e,this.controllers,`controller`)}getElement(e){return this._get(e,this.elements,`element`)}getPlugin(e){return this._get(e,this.plugins,`plugin`)}getScale(e){return this._get(e,this.scales,`scale`)}removeControllers(...e){this._each(`unregister`,e,this.controllers)}removeElements(...e){this._each(`unregister`,e,this.elements)}removePlugins(...e){this._each(`unregister`,e,this.plugins)}removeScales(...e){this._each(`unregister`,e,this.scales)}_each(e,t,n){[...t].forEach(t=>{let r=n||this._getRegistryForType(t);n||r.isForType(t)||r===this.plugins&&t.id?this._exec(e,r,t):eu(t,t=>{let r=n||this._getRegistryForType(t);this._exec(e,r,t)})})}_exec(e,t,n){let r=fu(e);$l(n[`before`+r],[],n),t[e](n),$l(n[`after`+r],[],n)}_getRegistryForType(e){for(let t=0;te.filter(e=>!t.some(t=>e.plugin.id===t.plugin.id));this._notify(r(t,n),e,`stop`),this._notify(r(n,t),e,`start`)}};function Bh(e){let t={},n=[],r=Object.keys(Rh.plugins.items);for(let e=0;e1&&qh(e[0].toLowerCase());if(t)return t}throw Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function Xh(e,t,n){if(n[t+`AxisID`]===e)return{axis:t}}function Zh(e,t){if(t.data&&t.data.datasets){let n=t.data.datasets.filter(t=>t.xAxisID===e||t.yAxisID===e);if(n.length)return Xh(e,`x`,n[0])||Xh(e,`y`,n[0])}return{}}function Qh(e,t){let n=Td[e.type]||{scales:{}},r=t.scales||{},i=Wh(e.type,t),a=Object.create(null);return Object.keys(r).forEach(t=>{let o=r[t];if(!ql(o))return console.error(`Invalid scale configuration for scale: ${t}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);let s=Yh(t,o,Zh(t,e),kd.scales[o.type]),c=Kh(s,i),l=n.scales||{};a[t]=ou(Object.create(null),[{axis:s},o,l[s],l[c]])}),e.data.datasets.forEach(n=>{let i=n.type||e.type,o=n.indexAxis||Wh(i,t),s=(Td[i]||{}).scales||{};Object.keys(s).forEach(e=>{let t=Gh(e,o),i=n[t+`AxisID`]||t;a[i]=a[i]||Object.create(null),ou(a[i],[{axis:t},r[i],s[e]])})}),Object.keys(a).forEach(e=>{let t=a[e];ou(t,[kd.scales[t.type],kd.scale])}),a}function $h(e){let t=e.options||={};t.plugins=Xl(t.plugins,{}),t.scales=Qh(e,t)}function eg(e){return e||={},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function tg(e){return e||={},e.data=eg(e.data),$h(e),e}var ng=new Map,rg=new Set;function ig(e,t){let n=ng.get(e);return n||(n=t(),ng.set(e,n),rg.add(n)),n}var ag=(e,t,n)=>{let r=du(t,n);r!==void 0&&e.add(r)},og=class{constructor(e){this._config=tg(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=eg(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){let e=this._config;this.clearCache(),$h(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return ig(e,()=>[[`datasets.${e}`,``]])}datasetAnimationScopeKeys(e,t){return ig(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,``]])}datasetElementScopeKeys(e,t){return ig(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,``]])}pluginScopeKeys(e){let t=e.id,n=this.type;return ig(`${n}-plugin-${t}`,()=>[[`plugins.${t}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,t){let n=this._scopeCache,r=n.get(e);return(!r||t)&&(r=new Map,n.set(e,r)),r}getOptionScopes(e,t,n){let{options:r,type:i}=this,a=this._cachedScopes(e,n),o=a.get(t);if(o)return o;let s=new Set;t.forEach(t=>{e&&(s.add(e),t.forEach(t=>ag(s,e,t))),t.forEach(e=>ag(s,r,e)),t.forEach(e=>ag(s,Td[i]||{},e)),t.forEach(e=>ag(s,kd,e)),t.forEach(e=>ag(s,Ed,e))});let c=Array.from(s);return c.length===0&&c.push(Object.create(null)),rg.has(t)&&a.set(t,c),c}chartOptionScopes(){let{options:e,type:t}=this;return[e,Td[t]||{},kd.datasets[t]||{},{type:t},kd,Ed]}resolveNamedOptions(e,t,n,r=[``]){let i={$shared:!0},{resolver:a,subPrefixes:o}=sg(this._resolverCache,e,r),s=a;if(lg(a,t)){i.$shared=!1,n=mu(n)?n():n;let t=this.createResolver(e,n,o);s=sf(a,n,t)}for(let e of t)i[e]=s[e];return i}createResolver(e,t,n=[``],r){let{resolver:i}=sg(this._resolverCache,e,n);return ql(t)?sf(i,t,void 0,r):i}};function sg(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let i=n.join(),a=r.get(i);return a||(a={resolver:of(t,n),subPrefixes:n.filter(e=>!e.toLowerCase().includes(`hover`))},r.set(i,a)),a}var cg=e=>ql(e)&&Object.getOwnPropertyNames(e).some(t=>mu(e[t]));function lg(e,t){let{isScriptable:n,isIndexable:r}=cf(e);for(let i of t){let t=n(i),a=r(i),o=(a||t)&&e[i];if(t&&(mu(o)||cg(o))||a&&Kl(o))return!0}return!1}var ug=`4.5.1`,dg=[`top`,`bottom`,`left`,`right`,`chartArea`];function fg(e,t){return e===`top`||e===`bottom`||dg.indexOf(e)===-1&&t===`x`}function pg(e,t){return function(n,r){return n[e]===r[e]?n[t]-r[t]:n[e]-r[e]}}function mg(e){let t=e.chart,n=t.options.animation;t.notifyPlugins(`afterRender`),$l(n&&n.onComplete,[e],t)}function hg(e){let t=e.chart,n=t.options.animation;$l(n&&n.onProgress,[e],t)}function gg(e){return If()&&typeof e==`string`?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}var _g={},vg=e=>{let t=gg(e);return Object.values(_g).filter(e=>e.canvas===t).pop()};function yg(e,t,n){let r=Object.keys(e);for(let i of r){let r=+i;if(r>=t){let a=e[i];delete e[i],(n>0||r>t)&&(e[r+n]=a)}}}function bg(e,t,n,r){return!n||e.type===`mouseout`?null:r?t:e}var xg=class{static defaults=kd;static instances=_g;static overrides=Td;static registry=Rh;static version=ug;static getChart=vg;static register(...e){Rh.add(...e),Sg()}static unregister(...e){Rh.remove(...e),Sg()}constructor(e,t){let n=this.config=new og(t),r=gg(e),i=vg(r);if(i)throw Error(`Canvas is already in use. Chart with ID '`+i.id+`' must be destroyed before the canvas with ID '`+i.canvas.id+`' can be reused.`);let a=n.createResolver(n.chartOptionScopes(),this.getContext());this.platform=new(n.platform||(fh(r))),this.platform.updateConfig(n);let o=this.platform.acquireContext(r,a.aspectRatio),s=o&&o.canvas,c=s&&s.height,l=s&&s.width;if(this.id=Wl(),this.ctx=o,this.canvas=s,this.width=l,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new zh,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=td(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],_g[this.id]=this,!o||!s){console.error(`Failed to create chart: can't acquire context from the given item`);return}xp.listen(this,`complete`,mg),xp.listen(this,`progress`,hg),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:e,maintainAspectRatio:t},width:n,height:r,_aspectRatio:i}=this;return Gl(e)?t&&i?i:r?n/r:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return Rh}_initialize(){return this.notifyPlugins(`beforeInit`),this.options.responsive?this.resize():Yf(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(`afterInit`),this}clear(){return Pd(this.canvas,this.ctx),this}stop(){return xp.stop(this),this}resize(e,t){xp.running(this)?this._resizeBeforeDraw={width:e,height:t}:this._resize(e,t)}_resize(e,t){let n=this.options,r=this.canvas,i=n.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(r,e,t,i),o=n.devicePixelRatio||this.platform.getDevicePixelRatio(),s=this.width?`resize`:`attach`;this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,Yf(this,o,!0)&&(this.notifyPlugins(`resize`,{size:a}),$l(n.onResize,[this,a],this),this.attached&&this._doResize(s)&&this.render())}ensureScalesHaveIDs(){eu(this.options.scales||{},(e,t)=>{e.id=t})}buildOrUpdateScales(){let e=this.options,t=e.scales,n=this.scales,r=Object.keys(n).reduce((e,t)=>(e[t]=!1,e),{}),i=[];t&&(i=i.concat(Object.keys(t).map(e=>{let n=t[e],r=Yh(e,n),i=r===`r`,a=r===`x`;return{options:n,dposition:i?`chartArea`:a?`bottom`:`left`,dtype:i?`radialLinear`:a?`category`:`linear`}}))),eu(i,t=>{let i=t.options,a=i.id,o=Yh(a,i),s=Xl(i.type,t.dtype);(i.position===void 0||fg(i.position,o)!==fg(t.dposition))&&(i.position=t.dposition),r[a]=!0;let c=null;a in n&&n[a].type===s?c=n[a]:(c=new(Rh.getScale(s))({id:a,type:s,ctx:this.ctx,chart:this}),n[c.id]=c),c.init(i,e)}),eu(r,(e,t)=>{e||delete n[t]}),eu(n,e=>{Um.configure(this,e,e.options),Um.addBox(this,e)})}_updateMetasets(){let e=this._metasets,t=this.data.datasets.length,n=e.length;if(e.sort((e,t)=>e.index-t.index),n>t){for(let e=t;et.length&&delete this._stacks,e.forEach((e,n)=>{t.filter(t=>t===e._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let e=[],t=this.data.datasets,n,r;for(this._removeUnreferencedMetasets(),n=0,r=t.length;n{this.getDatasetMeta(t).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins(`reset`)}update(e){let t=this.config;t.update();let n=this._options=t.createResolver(t.chartOptionScopes(),this.getContext()),r=this._animationsDisabled=!n.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins(`beforeUpdate`,{mode:e,cancelable:!0})===!1)return;let i=this.buildOrUpdateControllers();this.notifyPlugins(`beforeElementsUpdate`);let a=0;for(let e=0,t=this.data.datasets.length;e{e.reset()}),this._updateDatasets(e),this.notifyPlugins(`afterUpdate`,{mode:e}),this._layers.sort(pg(`z`,`_idx`));let{_active:o,_lastEvent:s}=this;s?this._eventHandler(s,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){eu(this.scales,e=>{Um.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let e=this.options;(!hu(new Set(Object.keys(this._listeners)),new Set(e.events))||!!this._responsiveListeners!==e.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:e}=this,t=this._getUniformDataChanges()||[];for(let{method:n,start:r,count:i}of t)yg(e,r,n===`_removeElements`?-i:i)}_getUniformDataChanges(){let e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];let t=this.data.datasets.length,n=t=>new Set(e.filter(e=>e[0]===t).map((e,t)=>t+`,`+e.splice(1).join(`,`))),r=n(0);for(let e=1;ee.split(`,`)).map(e=>({method:e[1],start:+e[2],count:+e[3]}))}_updateLayout(e){if(this.notifyPlugins(`beforeLayout`,{cancelable:!0})===!1)return;Um.update(this,this.width,this.height,e);let t=this.chartArea,n=t.width<=0||t.height<=0;this._layers=[],eu(this.boxes,e=>{n&&e.position===`chartArea`||(e.configure&&e.configure(),this._layers.push(...e._layers()))},this),this._layers.forEach((e,t)=>{e._idx=t}),this.notifyPlugins(`afterLayout`)}_updateDatasets(e){if(this.notifyPlugins(`beforeDatasetsUpdate`,{mode:e,cancelable:!0})!==!1){for(let e=0,t=this.data.datasets.length;e=0;--t)this._drawDataset(e[t]);this.notifyPlugins(`afterDatasetsDraw`)}_drawDataset(e){let t=this.ctx,n={meta:e,index:e.index,cancelable:!0},r=bp(this,e);this.notifyPlugins(`beforeDatasetDraw`,n)!==!1&&(r&&Rd(t,r),e.controller.draw(),r&&zd(t),n.cancelable=!1,this.notifyPlugins(`afterDatasetDraw`,n))}isPointInArea(e){return Ld(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,n,r){let i=Em.modes[t];return typeof i==`function`?i(this,e,n,r):[]}getDatasetMeta(e){let t=this.data.datasets[e],n=this._metasets,r=n.filter(e=>e&&e._dataset===t).pop();return r||(r={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t&&t.order||0,index:e,_dataset:t,_parsed:[],_sorted:!1},n.push(r)),r}getContext(){return this.$context||=af(null,{chart:this,type:`chart`})}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){let t=this.data.datasets[e];if(!t)return!1;let n=this.getDatasetMeta(e);return typeof n.hidden==`boolean`?!n.hidden:!t.hidden}setDatasetVisibility(e,t){let n=this.getDatasetMeta(e);n.hidden=!t}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,t,n){let r=n?`show`:`hide`,i=this.getDatasetMeta(e),a=i.controller._resolveAnimations(void 0,r);pu(t)?(i.data[t].hidden=!n,this.update()):(this.setDatasetVisibility(e,n),a.update(i,{visible:n}),this.update(t=>t.datasetIndex===e?r:void 0))}hide(e,t){this._updateVisibility(e,t,!1)}show(e,t){this._updateVisibility(e,t,!0)}_destroyDatasetMeta(e){let t=this._metasets[e];t&&t.controller&&t.controller._destroy(),delete this._metasets[e]}_stop(){let e,t;for(this.stop(),xp.remove(this),e=0,t=this.data.datasets.length;e{t.addEventListener(this,n,r),e[n]=r},r=(e,t,n)=>{e.offsetX=t,e.offsetY=n,this._eventHandler(e)};eu(this.options.events,e=>n(e,r))}bindResponsiveEvents(){this._responsiveListeners||={};let e=this._responsiveListeners,t=this.platform,n=(n,r)=>{t.addEventListener(this,n,r),e[n]=r},r=(n,r)=>{e[n]&&(t.removeEventListener(this,n,r),delete e[n])},i=(e,t)=>{this.canvas&&this.resize(e,t)},a,o=()=>{r(`attach`,o),this.attached=!0,this.resize(),n(`resize`,i),n(`detach`,a)};a=()=>{this.attached=!1,r(`resize`,i),this._stop(),this._resize(0,0),n(`attach`,o)},t.isAttached(this.canvas)?o():a()}unbindEvents(){eu(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},eu(this._responsiveListeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,t,n){let r=n?`set`:`remove`,i,a,o,s;for(t===`dataset`&&(i=this.getDatasetMeta(e[0].datasetIndex),i.controller[`_`+r+`DatasetHoverStyle`]()),o=0,s=e.length;o{let n=this.getDatasetMeta(e);if(!n)throw Error(`No dataset found at index `+e);return{datasetIndex:e,element:n.data[t],index:t}});tu(n,t)||(this._active=n,this._lastEvent=null,this._updateHoverStyles(n,t))}notifyPlugins(e,t,n){return this._plugins.notify(this,e,t,n)}isPluginEnabled(e){return this._plugins._cache.filter(t=>t.plugin.id===e).length===1}_updateHoverStyles(e,t,n){let r=this.options.hover,i=(e,t)=>e.filter(e=>!t.some(t=>e.datasetIndex===t.datasetIndex&&e.index===t.index)),a=i(t,e),o=n?e:i(e,t);a.length&&this.updateHoverStyle(a,r.mode,!1),o.length&&r.mode&&this.updateHoverStyle(o,r.mode,!0)}_eventHandler(e,t){let n={event:e,replay:t,cancelable:!0,inChartArea:this.isPointInArea(e)},r=t=>(t.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins(`beforeEvent`,n,r)===!1)return;let i=this._handleEvent(e,t,n.inChartArea);return n.cancelable=!1,this.notifyPlugins(`afterEvent`,n,r),(i||n.changed)&&this.render(),this}_handleEvent(e,t,n){let{_active:r=[],options:i}=this,a=t,o=this._getActiveElements(e,r,n,a),s=gu(e),c=bg(e,this._lastEvent,n,s);n&&(this._lastEvent=null,$l(i.onHover,[e,o,this],this),s&&$l(i.onClick,[e,o,this],this));let l=!tu(o,r);return(l||t)&&(this._active=o,this._updateHoverStyles(o,r,t)),this._lastEvent=c,l}_getActiveElements(e,t,n,r){if(e.type===`mouseout`)return[];if(!n)return t;let i=this.options.hover;return this.getElementsAtEventForMode(e,i.mode,i,r)}};function Sg(){return eu(xg.instances,e=>e._plugins.invalidate())}function Cg(e,t,n){let{startAngle:r,x:i,y:a,outerRadius:o,innerRadius:s,options:c}=t,{borderWidth:l,borderJoinStyle:u}=c,d=Math.min(l/o,Bu(r-n));if(e.beginPath(),e.arc(i,a,o-l/2,r+d/2,n-d/2),s>0){let t=Math.min(l/s,Bu(r-n));e.arc(i,a,s+l/2,n-t/2,r+t/2,!0)}else{let t=Math.min(l/2,o*Bu(r-n));if(u===`round`)e.arc(i,a,t,n-_u/2,r+_u/2,!0);else if(u===`bevel`){let o=2*t*t,s=-o*Math.cos(n+_u/2)+i,c=-o*Math.sin(n+_u/2)+a,l=o*Math.cos(r+_u/2)+i,u=o*Math.sin(r+_u/2)+a;e.lineTo(s,c),e.lineTo(l,u)}}e.closePath(),e.moveTo(0,0),e.rect(0,0,e.canvas.width,e.canvas.height),e.clip(`evenodd`)}function wg(e,t,n){let{startAngle:r,pixelMargin:i,x:a,y:o,outerRadius:s,innerRadius:c}=t,l=i/s;e.beginPath(),e.arc(a,o,s,r-l,n+l),c>i?(l=i/c,e.arc(a,o,c,n+l,r-l,!0)):e.arc(a,o,i,n+Su,r-Su),e.closePath(),e.clip()}function Tg(e){return Zd(e,[`outerStart`,`outerEnd`,`innerStart`,`innerEnd`])}function Eg(e,t,n,r){let i=Tg(e.options.borderRadius),a=(n-t)/2,o=Math.min(a,r*t/2),s=e=>{let t=(n-Math.min(a,e))*r/2;return Hu(e,0,Math.min(a,t))};return{outerStart:s(i.outerStart),outerEnd:s(i.outerEnd),innerStart:Hu(i.innerStart,0,o),innerEnd:Hu(i.innerEnd,0,o)}}function Dg(e,t,n,r){return{x:n+e*Math.cos(t),y:r+e*Math.sin(t)}}function Og(e,t,n,r,i,a){let{x:o,y:s,startAngle:c,pixelMargin:l,innerRadius:u}=t,d=Math.max(t.outerRadius+r+n-l,0),f=u>0?u+r+n+l:0,p=0,m=i-c;if(r){let e=((u>0?u-r:0)+(d>0?d-r:0))/2;p=(m-(e===0?m:m*e/(e+r)))/2}let h=(m-Math.max(.001,m*d-n/_u)/d)/2,g=c+h+p,_=i-h-p,{outerStart:v,outerEnd:y,innerStart:b,innerEnd:x}=Eg(t,f,d,_-g),S=d-v,C=d-y,w=g+v/S,ee=_-y/C,te=f+b,ne=f+x,re=g+b/te,ie=_-x/ne;if(e.beginPath(),a){let t=(w+ee)/2;if(e.arc(o,s,d,w,t),e.arc(o,s,d,t,ee),y>0){let t=Dg(C,ee,o,s);e.arc(t.x,t.y,y,ee,_+Su)}let n=Dg(ne,_,o,s);if(e.lineTo(n.x,n.y),x>0){let t=Dg(ne,ie,o,s);e.arc(t.x,t.y,x,_+Su,ie+Math.PI)}let r=(_-x/f+(g+b/f))/2;if(e.arc(o,s,f,_-x/f,r,!0),e.arc(o,s,f,r,g+b/f,!0),b>0){let t=Dg(te,re,o,s);e.arc(t.x,t.y,b,re+Math.PI,g-Su)}let i=Dg(S,g,o,s);if(e.lineTo(i.x,i.y),v>0){let t=Dg(S,w,o,s);e.arc(t.x,t.y,v,g-Su,w)}}else{e.moveTo(o,s);let t=Math.cos(w)*d+o,n=Math.sin(w)*d+s;e.lineTo(t,n);let r=Math.cos(ee)*d+o,i=Math.sin(ee)*d+s;e.lineTo(r,i)}e.closePath()}function kg(e,t,n,r,i){let{fullCircles:a,startAngle:o,circumference:s}=t,c=t.endAngle;if(a){Og(e,t,n,r,c,i);for(let t=0;t=_u&&p===0&&u!==`miter`&&Cg(e,t,h),a||(Og(e,t,n,r,h,i),e.stroke())}var jg=class extends ph{static id=`arc`;static defaults={borderAlign:`center`,borderColor:`#fff`,borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:`backgroundColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(e){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,t,n){let{angle:r,distance:i}=Lu(this.getProps([`x`,`y`],n),{x:e,y:t}),{startAngle:a,endAngle:o,innerRadius:s,outerRadius:c,circumference:l}=this.getProps([`startAngle`,`endAngle`,`innerRadius`,`outerRadius`,`circumference`],n),u=(this.options.spacing+this.options.borderWidth)/2,d=Xl(l,o-a),f=Vu(r,a,o)&&a!==o,p=d>=vu||f,m=Wu(i,s+u,c+u);return p&&m}getCenterPoint(e){let{x:t,y:n,startAngle:r,endAngle:i,innerRadius:a,outerRadius:o}=this.getProps([`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`],e),{offset:s,spacing:c}=this.options,l=(r+i)/2,u=(a+o+c+s)/2;return{x:t+Math.cos(l)*u,y:n+Math.sin(l)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){let{options:t,circumference:n}=this,r=(t.offset||0)/4,i=(t.spacing||0)/2,a=t.circular;if(this.pixelMargin=t.borderAlign===`inner`?.33:0,this.fullCircles=n>vu?Math.floor(n/vu):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();let o=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(o)*r,Math.sin(o)*r);let s=r*(1-Math.sin(Math.min(_u,n||0)));e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,kg(e,this,s,i,a),Ag(e,this,s,i,a),e.restore()}};function Mg(e,t,n=t){e.lineCap=Xl(n.borderCapStyle,t.borderCapStyle),e.setLineDash(Xl(n.borderDash,t.borderDash)),e.lineDashOffset=Xl(n.borderDashOffset,t.borderDashOffset),e.lineJoin=Xl(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=Xl(n.borderWidth,t.borderWidth),e.strokeStyle=Xl(n.borderColor,t.borderColor)}function Ng(e,t,n){e.lineTo(n.x,n.y)}function Pg(e){return e.stepped?Bd:e.tension||e.cubicInterpolationMode===`monotone`?Vd:Ng}function Fg(e,t,n={}){let r=e.length,{start:i=0,end:a=r-1}=n,{start:o,end:s}=t,c=Math.max(i,o),l=Math.min(a,s),u=is&&a>s;return{count:r,start:c,loop:t.loop,ilen:l(o+(l?s-e:e))%a,y=()=>{h!==g&&(e.lineTo(u,g),e.lineTo(u,h),e.lineTo(u,_))};for(c&&(p=i[v(0)],e.moveTo(p.x,p.y)),f=0;f<=s;++f){if(p=i[v(f)],p.skip)continue;let t=p.x,n=p.y,r=t|0;r===m?(ng&&(g=n),u=(d*u+t)/++d):(y(),e.lineTo(t,n),m=r,d=0,h=g=n),_=n}y()}function Rg(e){let t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&t.cubicInterpolationMode!==`monotone`&&!t.stepped&&!n?Lg:Ig}function zg(e){return e.stepped?$f:e.tension||e.cubicInterpolationMode===`monotone`?ep:Qf}function Bg(e,t,n,r){let i=t._path;i||(i=t._path=new Path2D,t.path(i,n,r)&&i.closePath()),Mg(e,t.options),e.stroke(i)}function Vg(e,t,n,r){let{segments:i,options:a}=t,o=Rg(t);for(let s of i)Mg(e,a,s.style),e.beginPath(),o(e,t,s,{start:n,end:n+r-1})&&e.closePath(),e.stroke()}var Hg=typeof Path2D==`function`;function Ug(e,t,n,r){Hg&&!t.options.segment?Bg(e,t,n,r):Vg(e,t,n,r)}var Wg=class extends ph{static id=`line`;static defaults={borderCapStyle:`butt`,borderDash:[],borderDashOffset:0,borderJoinStyle:`miter`,borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:`default`,fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:`backgroundColor`,borderColor:`borderColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`&&e!==`fill`};constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,t){let n=this.options;if((n.tension||n.cubicInterpolationMode===`monotone`)&&!n.stepped&&!this._pointsUpdated){let r=n.spanGaps?this._loop:this._fullLoop;Ff(this._points,n,e,r,t),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||=pp(this,this.options.segment)}first(){let e=this.segments,t=this.points;return e.length&&t[e[0].start]}last(){let e=this.segments,t=this.points,n=e.length;return n&&t[e[n-1].end]}interpolate(e,t){let n=this.options,r=e[t],i=this.points,a=up(this,{property:t,start:r,end:r});if(!a.length)return;let o=[],s=zg(n),c,l;for(c=0,l=a.length;ce.replace(`rgb(`,`rgba(`).replace(`)`,`, 0.5)`));function a_(e){return r_[e%r_.length]}function o_(e){return i_[e%i_.length]}function s_(e,t){return e.borderColor=a_(t),e.backgroundColor=o_(t),++t}function c_(e,t){return e.backgroundColor=e.data.map(()=>a_(t++)),t}function l_(e,t){return e.backgroundColor=e.data.map(()=>o_(t++)),t}function u_(e){let t=0;return(n,r)=>{let i=e.getDatasetMeta(r).controller;i instanceof fm?t=c_(n,t):i instanceof mm?t=l_(n,t):i&&(t=s_(n,t))}}function d_(e){let t;for(t in e)if(e[t].borderColor||e[t].backgroundColor)return!0;return!1}function f_(e){return e&&(e.borderColor||e.backgroundColor)}function p_(){return kd.borderColor!==`rgba(0,0,0,0.1)`||kd.backgroundColor!==`rgba(0,0,0,0.1)`}var m_={id:`colors`,defaults:{enabled:!0,forceOverride:!1},beforeLayout(e,t,n){if(!n.enabled)return;let{data:{datasets:r},options:i}=e.config,{elements:a}=i,o=d_(r)||f_(i)||a&&d_(a)||p_();if(!n.forceOverride&&o)return;let s=u_(e);r.forEach(s)}};function h_(e,t,n,r,i){let a=i.samples||r;if(a>=n)return e.slice(t,t+n);let o=[],s=(n-2)/(a-2),c=0,l=t+n-1,u=t,d,f,p,m,h;for(o[c++]=e[u],d=0;dp&&(p=m,f=e[a],h=a);o[c++]=f,u=h}return o[c++]=e[l],o}function g_(e,t,n,r){let i=0,a=0,o,s,c,l,u,d,f,p,m,h,g=[],_=t+n-1,v=e[t].x,y=e[_].x-v;for(o=t;oh&&(h=l,f=o),i=(a*i+s.x)/++a;else{let n=o-1;if(!Gl(d)&&!Gl(f)){let t=Math.min(d,f),r=Math.max(d,f);t!==p&&t!==n&&g.push({...e[t],x:i}),r!==p&&r!==n&&g.push({...e[r],x:i})}o>0&&n!==p&&g.push(e[n]),g.push(s),u=t,a=0,m=h=l,d=f=p=o}}return g}function __(e){if(e._decimated){let t=e._data;delete e._decimated,delete e._data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function v_(e){e.data.datasets.forEach(e=>{__(e)})}function y_(e,t){let n=t.length,r=0,i,{iScale:a}=e,{min:o,max:s,minDefined:c,maxDefined:l}=a.getUserBounds();return c&&(r=Hu(Ku(t,a.axis,o).lo,0,n-1)),i=l?Hu(Ku(t,a.axis,s).hi+1,r,n)-r:n-r,{start:r,count:i}}var b_={id:`decimation`,defaults:{algorithm:`min-max`,enabled:!1},beforeElementsUpdate:(e,t,n)=>{if(!n.enabled){v_(e);return}let r=e.width;e.data.datasets.forEach((t,i)=>{let{_data:a,indexAxis:o}=t,s=e.getDatasetMeta(i),c=a||t.data;if(nf([o,e.options.indexAxis])===`y`||!s.controller.supportsDecimation)return;let l=e.scales[s.xAxisID];if(l.type!==`linear`&&l.type!==`time`||e.options.parsing)return;let{start:u,count:d}=y_(s,c);if(d<=(n.threshold||4*r)){__(t);return}Gl(a)&&(t._data=c,delete t.data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(e){this._data=e}}));let f;switch(n.algorithm){case`lttb`:f=h_(c,u,d,r,n);break;case`min-max`:f=g_(c,u,d,r);break;default:throw Error(`Unsupported decimation algorithm '${n.algorithm}'`)}t._decimated=f})},destroy(e){v_(e)}};function x_(e,t,n){let r=e.segments,i=e.points,a=t.points,o=[];for(let e of r){let{start:r,end:s}=e;s=w_(r,s,i);let c=S_(n,i[r],i[s],e.loop);if(!t.segments){o.push({source:e,target:c,start:i[r],end:i[s]});continue}let l=up(t,c);for(let t of l){let r=S_(n,a[t.start],a[t.end],t.loop),s=lp(e,i,r);for(let e of s)o.push({source:e,target:t,start:{[n]:T_(c,r,`start`,Math.max)},end:{[n]:T_(c,r,`end`,Math.min)}})}}return o}function S_(e,t,n,r){if(r)return;let i=t[e],a=n[e];return e===`angle`&&(i=Bu(i),a=Bu(a)),{property:e,start:i,end:a}}function C_(e,t){let{x:n=null,y:r=null}=e||{},i=t.points,a=[];return t.segments.forEach(({start:e,end:t})=>{t=w_(e,t,i);let o=i[e],s=i[t];r===null?n!==null&&(a.push({x:n,y:o.y}),a.push({x:n,y:s.y})):(a.push({x:o.x,y:r}),a.push({x:s.x,y:r}))}),a}function w_(e,t,n){for(;t>e;t--){let e=n[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function T_(e,t,n,r){return e&&t?r(e[n],t[n]):e?e[n]:t?t[n]:0}function E_(e,t){let n=[],r=!1;return Kl(e)?(r=!0,n=e):n=C_(e,t),n.length?new Wg({points:n,options:{tension:0},_loop:r,_fullLoop:r}):null}function D_(e){return e&&e.fill!==!1}function O_(e,t,n){let r=e[t].fill,i=[t],a;if(!n)return r;for(;r!==!1&&i.indexOf(r)===-1;){if(!Jl(r))return r;if(a=e[r],!a)return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function k_(e,t,n){let r=N_(e);if(ql(r))return!isNaN(r.value)&&r;let i=parseFloat(r);return Jl(i)&&Math.floor(i)===i?A_(r[0],t,i,n):[`origin`,`start`,`end`,`stack`,`shape`].indexOf(r)>=0&&r}function A_(e,t,n,r){return(e===`-`||e===`+`)&&(n=t+n),n===t||n<0||n>=r?!1:n}function j_(e,t){let n=null;return e===`start`?n=t.bottom:e===`end`?n=t.top:ql(e)?n=t.getPixelForValue(e.value):t.getBasePixel&&(n=t.getBasePixel()),n}function M_(e,t,n){let r;return r=e===`start`?n:e===`end`?t.options.reverse?t.min:t.max:ql(e)?e.value:t.getBaseValue(),r}function N_(e){let t=e.options,n=t.fill,r=Xl(n&&n.target,n);return r===void 0&&(r=!!t.backgroundColor),r===!1||r===null?!1:r===!0?`origin`:r}function P_(e){let{scale:t,index:n,line:r}=e,i=[],a=r.segments,o=r.points,s=F_(t,n);s.push(E_({x:null,y:t.bottom},r));for(let e=0;e=0;--t){let n=i[t].$filler;n&&(n.line.updateControlPoints(a,n.axis),r&&n.fill&&W_(e.ctx,n,a))}},beforeDatasetsDraw(e,t,n){if(n.drawTime!==`beforeDatasetsDraw`)return;let r=e.getSortedVisibleDatasetMetas();for(let t=r.length-1;t>=0;--t){let n=r[t].$filler;D_(n)&&W_(e.ctx,n,e.chartArea)}},beforeDatasetDraw(e,t,n){let r=t.meta.$filler;!D_(r)||n.drawTime!==`beforeDatasetDraw`||W_(e.ctx,r,e.chartArea)},defaults:{propagate:!0,drawTime:`beforeDatasetDraw`}},Q_=(e,t)=>{let{boxHeight:n=t,boxWidth:r=t}=e;return e.usePointStyle&&(n=Math.min(n,t),r=e.pointStyleWidth||Math.min(r,t)),{boxWidth:r,boxHeight:n,itemHeight:Math.max(t,n)}},$_=(e,t)=>e!==null&&t!==null&&e.datasetIndex===t.datasetIndex&&e.index===t.index,ev=class extends ph{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t,n){this.maxWidth=e,this.maxHeight=t,this._margins=n,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let e=this.options.labels||{},t=$l(e.generateLabels,[this.chart],this)||[];e.filter&&(t=t.filter(t=>e.filter(t,this.chart.data))),e.sort&&(t=t.sort((t,n)=>e.sort(t,n,this.chart.data))),this.options.reverse&&t.reverse(),this.legendItems=t}fit(){let{options:e,ctx:t}=this;if(!e.display){this.width=this.height=0;return}let n=e.labels,r=tf(n.font),i=r.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:s}=Q_(n,i),c,l;t.font=r.string,this.isHorizontal()?(c=this.maxWidth,l=this._fitRows(a,i,o,s)+10):(l=this.maxHeight,c=this._fitCols(a,r,o,s)+10),this.width=Math.min(c,e.maxWidth||this.maxWidth),this.height=Math.min(l,e.maxHeight||this.maxHeight)}_fitRows(e,t,n,r){let{ctx:i,maxWidth:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.lineWidths=[0],l=r+o,u=e;i.textAlign=`left`,i.textBaseline=`middle`;let d=-1,f=-l;return this.legendItems.forEach((e,p)=>{let m=n+t/2+i.measureText(e.text).width;(p===0||c[c.length-1]+m+2*o>a)&&(u+=l,c[c.length-(p>0?0:1)]=0,f+=l,d++),s[p]={left:0,top:f,row:d,width:m,height:r},c[c.length-1]+=m+o}),u}_fitCols(e,t,n,r){let{ctx:i,maxHeight:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.columnSizes=[],l=a-e,u=o,d=0,f=0,p=0,m=0;return this.legendItems.forEach((e,a)=>{let{itemWidth:h,itemHeight:g}=tv(n,t,i,e,r);a>0&&f+g+2*o>l&&(u+=d+o,c.push({width:d,height:f}),p+=d+o,m++,d=f=0),s[a]={left:p,top:f,col:m,width:h,height:g},d=Math.max(d,h),f+=g+o}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let e=this._computeTitleHeight(),{legendHitBoxes:t,options:{align:n,labels:{padding:r},rtl:i}}=this,a=rp(i,this.left,this.width);if(this.isHorizontal()){let i=0,o=rd(n,this.left+r,this.right-this.lineWidths[i]);for(let s of t)i!==s.row&&(i=s.row,o=rd(n,this.left+r,this.right-this.lineWidths[i])),s.top+=this.top+e+r,s.left=a.leftForLtr(a.x(o),s.width),o+=s.width+r}else{let i=0,o=rd(n,this.top+e+r,this.bottom-this.columnSizes[i].height);for(let s of t)s.col!==i&&(i=s.col,o=rd(n,this.top+e+r,this.bottom-this.columnSizes[i].height)),s.top=o,s.left+=this.left+r,s.left=a.leftForLtr(a.x(s.left),s.width),o+=s.height+r}}isHorizontal(){return this.options.position===`top`||this.options.position===`bottom`}draw(){if(this.options.display){let e=this.ctx;Rd(e,this),this._draw(),zd(e)}}_draw(){let{options:e,columnSizes:t,lineWidths:n,ctx:r}=this,{align:i,labels:a}=e,o=kd.color,s=rp(e.rtl,this.left,this.width),c=tf(a.font),{padding:l}=a,u=c.size,d=u/2,f;this.drawTitle(),r.textAlign=s.textAlign(`left`),r.textBaseline=`middle`,r.lineWidth=.5,r.font=c.string;let{boxWidth:p,boxHeight:m,itemHeight:h}=Q_(a,u),g=function(e,t,n){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;r.save();let i=Xl(n.lineWidth,1);if(r.fillStyle=Xl(n.fillStyle,o),r.lineCap=Xl(n.lineCap,`butt`),r.lineDashOffset=Xl(n.lineDashOffset,0),r.lineJoin=Xl(n.lineJoin,`miter`),r.lineWidth=i,r.strokeStyle=Xl(n.strokeStyle,o),r.setLineDash(Xl(n.lineDash,[])),a.usePointStyle){let o={radius:m*Math.SQRT2/2,pointStyle:n.pointStyle,rotation:n.rotation,borderWidth:i},c=s.xPlus(e,p/2),l=t+d;Id(r,o,c,l,a.pointStyleWidth&&p)}else{let a=t+Math.max((u-m)/2,0),o=s.leftForLtr(e,p),c=$d(n.borderRadius);r.beginPath(),Object.values(c).some(e=>e!==0)?Kd(r,{x:o,y:a,w:p,h:m,radius:c}):r.rect(o,a,p,m),r.fill(),i!==0&&r.stroke()}r.restore()},_=function(e,t,n){Gd(r,n.text,e,t+h/2,c,{strikethrough:n.hidden,textAlign:s.textAlign(n.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();f=v?{x:rd(i,this.left+l,this.right-n[0]),y:this.top+l+y,line:0}:{x:this.left+l,y:rd(i,this.top+y+l,this.bottom-t[0].height),line:0},ip(this.ctx,e.textDirection);let b=h+l;this.legendItems.forEach((o,u)=>{r.strokeStyle=o.fontColor,r.fillStyle=o.fontColor;let m=r.measureText(o.text).width,h=s.textAlign(o.textAlign||=a.textAlign),x=p+d+m,S=f.x,C=f.y;s.setWidth(this.width),v?u>0&&S+x+l>this.right&&(C=f.y+=b,f.line++,S=f.x=rd(i,this.left+l,this.right-n[f.line])):u>0&&C+b>this.bottom&&(S=f.x=S+t[f.line].width+l,f.line++,C=f.y=rd(i,this.top+y+l,this.bottom-t[f.line].height));let w=s.x(S);if(g(w,C,o),S=id(h,S+p+d,v?S+x:this.right,e.rtl),_(s.x(S),C,o),v)f.x+=x+l;else if(typeof o.text!=`string`){let e=c.lineHeight;f.y+=iv(o,e)+l}else f.y+=b}),ap(this.ctx,e.textDirection)}drawTitle(){let e=this.options,t=e.title,n=tf(t.font),r=ef(t.padding);if(!t.display)return;let i=rp(e.rtl,this.left,this.width),a=this.ctx,o=t.position,s=n.size/2,c=r.top+s,l,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),l=this.top+c,u=rd(e.align,u,this.right-d);else{let t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);l=c+rd(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}let f=rd(o,u,u+d);a.textAlign=i.textAlign(nd(o)),a.textBaseline=`middle`,a.strokeStyle=t.color,a.fillStyle=t.color,a.font=n.string,Gd(a,t.text,f,l,n)}_computeTitleHeight(){let e=this.options.title,t=tf(e.font),n=ef(e.padding);return e.display?t.lineHeight+n.height:0}_getLegendItemAt(e,t){let n,r,i;if(Wu(e,this.left,this.right)&&Wu(t,this.top,this.bottom)){for(i=this.legendHitBoxes,n=0;ne.length>t.length?e:t)),t+n.size/2+r.measureText(i).width}function rv(e,t,n){let r=e;return typeof t.text!=`string`&&(r=iv(t,n)),r}function iv(e,t){return t*(e.text?e.text.length:0)}function av(e,t){return!!((e===`mousemove`||e===`mouseout`)&&(t.onHover||t.onLeave)||t.onClick&&(e===`click`||e===`mouseup`))}var ov={id:`legend`,_element:ev,start(e,t,n){let r=e.legend=new ev({ctx:e.ctx,options:n,chart:e});Um.configure(e,r,n),Um.addBox(e,r)},stop(e){Um.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,n){let r=e.legend;Um.configure(e,r,n),r.options=n},afterUpdate(e){let t=e.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)},defaults:{display:!0,position:`top`,align:`center`,fullSize:!0,reverse:!1,weight:1e3,onClick(e,t,n){let r=t.datasetIndex,i=n.chart;i.isDatasetVisible(r)?(i.hide(r),t.hidden=!0):(i.show(r),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){let t=e.data.datasets,{labels:{usePointStyle:n,pointStyle:r,textAlign:i,color:a,useBorderRadius:o,borderRadius:s}}=e.legend.options;return e._getSortedDatasetMetas().map(e=>{let c=e.controller.getStyle(n?0:void 0),l=ef(c.borderWidth);return{text:t[e.index].label,fillStyle:c.backgroundColor,fontColor:a,hidden:!e.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:c.borderColor,pointStyle:r||c.pointStyle,rotation:c.rotation,textAlign:i||c.textAlign,borderRadius:o&&(s||c.borderRadius),datasetIndex:e.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:`center`,text:``}},descriptors:{_scriptable:e=>!e.startsWith(`on`),labels:{_scriptable:e=>![`generateLabels`,`filter`,`sort`].includes(e)}}},sv=class extends ph{constructor(e){super(),this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t){let n=this.options;if(this.left=0,this.top=0,!n.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=e,this.height=this.bottom=t;let r=Kl(n.text)?n.text.length:1;this._padding=ef(n.padding);let i=r*tf(n.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=i:this.width=i}isHorizontal(){let e=this.options.position;return e===`top`||e===`bottom`}_drawArgs(e){let{top:t,left:n,bottom:r,right:i,options:a}=this,o=a.align,s=0,c,l,u;return this.isHorizontal()?(l=rd(o,n,i),u=t+e,c=i-n):(a.position===`left`?(l=n+e,u=rd(o,r,t),s=_u*-.5):(l=i-e,u=rd(o,t,r),s=_u*.5),c=r-t),{titleX:l,titleY:u,maxWidth:c,rotation:s}}draw(){let e=this.ctx,t=this.options;if(!t.display)return;let n=tf(t.font),r=n.lineHeight/2+this._padding.top,{titleX:i,titleY:a,maxWidth:o,rotation:s}=this._drawArgs(r);Gd(e,t.text,0,0,n,{color:t.color,maxWidth:o,rotation:s,textAlign:nd(t.align),textBaseline:`middle`,translation:[i,a]})}};function cv(e,t){let n=new sv({ctx:e.ctx,options:t,chart:e});Um.configure(e,n,t),Um.addBox(e,n),e.titleBlock=n}var lv={id:`title`,_element:sv,start(e,t,n){cv(e,n)},stop(e){let t=e.titleBlock;Um.removeBox(e,t),delete e.titleBlock},beforeUpdate(e,t,n){let r=e.titleBlock;Um.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`bold`},fullSize:!0,padding:10,position:`top`,text:``,weight:2e3},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},uv=new WeakMap,dv={id:`subtitle`,start(e,t,n){let r=new sv({ctx:e.ctx,options:n,chart:e});Um.configure(e,r,n),Um.addBox(e,r),uv.set(e,r)},stop(e){Um.removeBox(e,uv.get(e)),uv.delete(e)},beforeUpdate(e,t,n){let r=uv.get(e);Um.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`normal`},fullSize:!0,padding:0,position:`top`,text:``,weight:1500},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},fv={average(e){if(!e.length)return!1;let t,n,r=new Set,i=0,a=0;for(t=0,n=e.length;te+t)/r.size,y:i/a}},nearest(e,t){if(!e.length)return!1;let n=t.x,r=t.y,i=1/0,a,o,s;for(a=0,o=e.length;a-1?e.split(` +`):e}function hv(e,t){let{element:n,datasetIndex:r,index:i}=t,a=e.getDatasetMeta(r).controller,{label:o,value:s}=a.getLabelAndValue(i);return{chart:e,label:o,parsed:a.getParsed(i),raw:e.data.datasets[r].data[i],formattedValue:s,dataset:a.getDataset(),dataIndex:i,datasetIndex:r,element:n}}function gv(e,t){let n=e.chart.ctx,{body:r,footer:i,title:a}=e,{boxWidth:o,boxHeight:s}=t,c=tf(t.bodyFont),l=tf(t.titleFont),u=tf(t.footerFont),d=a.length,f=i.length,p=r.length,m=ef(t.padding),h=m.height,g=0,_=r.reduce((e,t)=>e+t.before.length+t.lines.length+t.after.length,0);if(_+=e.beforeBody.length+e.afterBody.length,d&&(h+=d*l.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),_){let e=t.displayColors?Math.max(s,c.lineHeight):c.lineHeight;h+=p*e+(_-p)*c.lineHeight+(_-1)*t.bodySpacing}f&&(h+=t.footerMarginTop+f*u.lineHeight+(f-1)*t.footerSpacing);let v=0,y=function(e){g=Math.max(g,n.measureText(e).width+v)};return n.save(),n.font=l.string,eu(e.title,y),n.font=c.string,eu(e.beforeBody.concat(e.afterBody),y),v=t.displayColors?o+2+t.boxPadding:0,eu(r,e=>{eu(e.before,y),eu(e.lines,y),eu(e.after,y)}),v=0,n.font=u.string,eu(e.footer,y),n.restore(),g+=m.width,{width:g,height:h}}function _v(e,t){let{y:n,height:r}=t;return ne.height-r/2?`bottom`:`center`}function vv(e,t,n,r){let{x:i,width:a}=r,o=n.caretSize+n.caretPadding;if(e===`left`&&i+a+o>t.width||e===`right`&&i-a-o<0)return!0}function yv(e,t,n,r){let{x:i,width:a}=n,{width:o,chartArea:{left:s,right:c}}=e,l=`center`;return r===`center`?l=i<=(s+c)/2?`left`:`right`:i<=a/2?l=`left`:i>=o-a/2&&(l=`right`),vv(l,e,t,n)&&(l=`center`),l}function bv(e,t,n){let r=n.yAlign||t.yAlign||_v(e,n);return{xAlign:n.xAlign||t.xAlign||yv(e,t,n,r),yAlign:r}}function xv(e,t){let{x:n,width:r}=e;return t===`right`?n-=r:t===`center`&&(n-=r/2),n}function Sv(e,t,n){let{y:r,height:i}=e;return t===`top`?r+=n:t===`bottom`?r-=i+n:r-=i/2,r}function Cv(e,t,n,r){let{caretSize:i,caretPadding:a,cornerRadius:o}=e,{xAlign:s,yAlign:c}=n,l=i+a,{topLeft:u,topRight:d,bottomLeft:f,bottomRight:p}=$d(o),m=xv(t,s),h=Sv(t,c,l);return c===`center`?s===`left`?m+=l:s===`right`&&(m-=l):s===`left`?m-=Math.max(u,f)+i:s===`right`&&(m+=Math.max(d,p)+i),{x:Hu(m,0,r.width-t.width),y:Hu(h,0,r.height-t.height)}}function wv(e,t,n){let r=ef(n.padding);return t===`center`?e.x+e.width/2:t===`right`?e.x+e.width-r.right:e.x+r.left}function Tv(e){return pv([],mv(e))}function Ev(e,t,n){return af(e,{tooltip:t,tooltipItems:n,type:`tooltip`})}function Dv(e,t){let n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}var Ov={beforeTitle:Ul,title(e){if(e.length>0){let t=e[0],n=t.chart.data.labels,r=n?n.length:0;if(this&&this.options&&this.options.mode===`dataset`)return t.dataset.label||``;if(t.label)return t.label;if(r>0&&t.dataIndex{let t={before:[],lines:[],after:[]},i=Dv(n,e);pv(t.before,mv(kv(i,`beforeLabel`,this,e))),pv(t.lines,kv(i,`label`,this,e)),pv(t.after,mv(kv(i,`afterLabel`,this,e))),r.push(t)}),r}getAfterBody(e,t){return Tv(kv(t.callbacks,`afterBody`,this,e))}getFooter(e,t){let{callbacks:n}=t,r=kv(n,`beforeFooter`,this,e),i=kv(n,`footer`,this,e),a=kv(n,`afterFooter`,this,e),o=[];return o=pv(o,mv(r)),o=pv(o,mv(i)),o=pv(o,mv(a)),o}_createItems(e){let t=this._active,n=this.chart.data,r=[],i=[],a=[],o=[],s,c;for(s=0,c=t.length;se.filter(t,r,i,n))),e.itemSort&&(o=o.sort((t,r)=>e.itemSort(t,r,n))),eu(o,t=>{let n=Dv(e.callbacks,t);r.push(kv(n,`labelColor`,this,t)),i.push(kv(n,`labelPointStyle`,this,t)),a.push(kv(n,`labelTextColor`,this,t))}),this.labelColors=r,this.labelPointStyles=i,this.labelTextColors=a,this.dataPoints=o,o}update(e,t){let n=this.options.setContext(this.getContext()),r=this._active,i,a=[];if(!r.length)this.opacity!==0&&(i={opacity:0});else{let e=fv[n.position].call(this,r,this._eventPosition);a=this._createItems(n),this.title=this.getTitle(a,n),this.beforeBody=this.getBeforeBody(a,n),this.body=this.getBody(a,n),this.afterBody=this.getAfterBody(a,n),this.footer=this.getFooter(a,n);let t=this._size=gv(this,n),o=Object.assign({},e,t),s=bv(this.chart,n,o),c=Cv(n,o,s,this.chart);this.xAlign=s.xAlign,this.yAlign=s.yAlign,i={opacity:1,x:c.x,y:c.y,width:t.width,height:t.height,caretX:e.x,caretY:e.y}}this._tooltipItems=a,this.$context=void 0,i&&this._resolveAnimations().update(this,i),e&&n.external&&n.external.call(this,{chart:this.chart,tooltip:this,replay:t})}drawCaret(e,t,n,r){let i=this.getCaretPosition(e,n,r);t.lineTo(i.x1,i.y1),t.lineTo(i.x2,i.y2),t.lineTo(i.x3,i.y3)}getCaretPosition(e,t,n){let{xAlign:r,yAlign:i}=this,{caretSize:a,cornerRadius:o}=n,{topLeft:s,topRight:c,bottomLeft:l,bottomRight:u}=$d(o),{x:d,y:f}=e,{width:p,height:m}=t,h,g,_,v,y,b;return i===`center`?(y=f+m/2,r===`left`?(h=d,g=h-a,v=y+a,b=y-a):(h=d+p,g=h+a,v=y-a,b=y+a),_=h):(g=r===`left`?d+Math.max(s,l)+a:r===`right`?d+p-Math.max(c,u)-a:this.caretX,i===`top`?(v=f,y=v-a,h=g-a,_=g+a):(v=f+m,y=v+a,h=g+a,_=g-a),b=v),{x1:h,x2:g,x3:_,y1:v,y2:y,y3:b}}drawTitle(e,t,n){let r=this.title,i=r.length,a,o,s;if(i){let c=rp(n.rtl,this.x,this.width);for(e.x=wv(this,n.titleAlign,n),t.textAlign=c.textAlign(n.titleAlign),t.textBaseline=`middle`,a=tf(n.titleFont),o=n.titleSpacing,t.fillStyle=n.titleColor,t.font=a.string,s=0;se!==0)?(e.beginPath(),e.fillStyle=i.multiKeyBackground,Kd(e,{x:t,y:p,w:c,h:s,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),Kd(e,{x:n,y:p+1,w:c-2,h:s-2,radius:o}),e.fill()):(e.fillStyle=i.multiKeyBackground,e.fillRect(t,p,c,s),e.strokeRect(t,p,c,s),e.fillStyle=a.backgroundColor,e.fillRect(n,p+1,c-2,s-2))}e.fillStyle=this.labelTextColors[n]}drawBody(e,t,n){let{body:r}=this,{bodySpacing:i,bodyAlign:a,displayColors:o,boxHeight:s,boxWidth:c,boxPadding:l}=n,u=tf(n.bodyFont),d=u.lineHeight,f=0,p=rp(n.rtl,this.x,this.width),m=function(n){t.fillText(n,p.x(e.x+f),e.y+d/2),e.y+=d+i},h=p.textAlign(a),g,_,v,y,b,x,S;for(t.textAlign=a,t.textBaseline=`middle`,t.font=u.string,e.x=wv(this,h,n),t.fillStyle=n.bodyColor,eu(this.beforeBody,m),f=o&&h!==`right`?a===`center`?c/2+l:c+2+l:0,y=0,x=r.length;y0&&t.stroke()}_updateAnimationTarget(e){let t=this.chart,n=this.$animations,r=n&&n.x,i=n&&n.y;if(r||i){let n=fv[e.position].call(this,this._active,this._eventPosition);if(!n)return;let a=this._size=gv(this,e),o=Object.assign({},n,this._size),s=bv(t,e,o),c=Cv(e,o,s,t);(r._to!==c.x||i._to!==c.y)&&(this.xAlign=s.xAlign,this.yAlign=s.yAlign,this.width=a.width,this.height=a.height,this.caretX=n.x,this.caretY=n.y,this._resolveAnimations().update(this,c))}}_willRender(){return!!this.opacity}draw(e){let t=this.options.setContext(this.getContext()),n=this.opacity;if(!n)return;this._updateAnimationTarget(t);let r={width:this.width,height:this.height},i={x:this.x,y:this.y};n=Math.abs(n)<.001?0:n;let a=ef(t.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;t.enabled&&o&&(e.save(),e.globalAlpha=n,this.drawBackground(i,e,r,t),ip(e,t.textDirection),i.y+=a.top,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),ap(e,t.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,t){let n=this._active,r=e.map(({datasetIndex:e,index:t})=>{let n=this.chart.getDatasetMeta(e);if(!n)throw Error(`Cannot find a dataset at index `+e);return{datasetIndex:e,element:n.data[t],index:t}}),i=!tu(n,r),a=this._positionChanged(r,t);(i||a)&&(this._active=r,this._eventPosition=t,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,t,n=!0){if(t&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let r=this.options,i=this._active||[],a=this._getActiveElements(e,i,t,n),o=this._positionChanged(a,e),s=t||!tu(a,i)||o;return s&&(this._active=a,(r.enabled||r.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,t))),s}_getActiveElements(e,t,n,r){let i=this.options;if(e.type===`mouseout`)return[];if(!r)return t.filter(e=>this.chart.data.datasets[e.datasetIndex]&&this.chart.getDatasetMeta(e.datasetIndex).controller.getParsed(e.index)!==void 0);let a=this.chart.getElementsAtEventForMode(e,i.mode,i,n);return i.reverse&&a.reverse(),a}_positionChanged(e,t){let{caretX:n,caretY:r,options:i}=this,a=fv[i.position].call(this,e,t);return a!==!1&&(n!==a.x||r!==a.y)}},jv=Object.freeze({__proto__:null,Colors:m_,Decimation:b_,Filler:Z_,Legend:ov,SubTitle:dv,Title:lv,Tooltip:{id:`tooltip`,_element:Av,positioners:fv,afterInit(e,t,n){n&&(e.tooltip=new Av({chart:e,options:n}))},beforeUpdate(e,t,n){e.tooltip&&e.tooltip.initialize(n)},reset(e,t,n){e.tooltip&&e.tooltip.initialize(n)},afterDraw(e){let t=e.tooltip;if(t&&t._willRender()){let n={tooltip:t};if(e.notifyPlugins(`beforeTooltipDraw`,{...n,cancelable:!0})===!1)return;t.draw(e.ctx),e.notifyPlugins(`afterTooltipDraw`,n)}},afterEvent(e,t){if(e.tooltip){let n=t.replay;e.tooltip.handleEvent(t.event,n,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:`average`,backgroundColor:`rgba(0,0,0,0.8)`,titleColor:`#fff`,titleFont:{weight:`bold`},titleSpacing:2,titleMarginBottom:6,titleAlign:`left`,bodyColor:`#fff`,bodySpacing:2,bodyFont:{},bodyAlign:`left`,footerColor:`#fff`,footerSpacing:2,footerMarginTop:6,footerFont:{weight:`bold`},footerAlign:`left`,padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:`#fff`,displayColors:!0,boxPadding:0,borderColor:`rgba(0,0,0,0)`,borderWidth:0,animation:{duration:400,easing:`easeOutQuart`},animations:{numbers:{type:`number`,properties:[`x`,`y`,`width`,`height`,`caretX`,`caretY`]},opacity:{easing:`linear`,duration:200}},callbacks:Ov},defaultRoutes:{bodyFont:`font`,footerFont:`font`,titleFont:`font`},descriptors:{_scriptable:e=>e!==`filter`&&e!==`itemSort`&&e!==`external`,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:`animation`}},additionalOptionScopes:[`interaction`]}}),Mv=(e,t,n,r)=>(typeof t==`string`?(n=e.push(t)-1,r.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function Nv(e,t,n,r){let i=e.indexOf(t);return i===-1?Mv(e,t,n,r):i===e.lastIndexOf(t)?i:n}var Pv=(e,t)=>e===null?null:Hu(Math.round(e),0,t);function Fv(e){let t=this.getLabels();return e>=0&&et.length-1?null:this.getPixelForValue(t[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}};function Lv(e,t){let n=[],{bounds:r,step:i,min:a,max:o,precision:s,count:c,maxTicks:l,maxDigits:u,includeBounds:d}=e,f=i||1,p=l-1,{min:m,max:h}=t,g=!Gl(a),_=!Gl(o),v=!Gl(c),y=(h-m)/(u+1),b=Ou((h-m)/p/f)*f,x,S,C,w;if(b<1e-14&&!g&&!_)return[{value:m},{value:h}];w=Math.ceil(h/b)-Math.floor(m/b),w>p&&(b=Ou(w*b/p/f)*f),Gl(s)||(x=10**s,b=Math.ceil(b*x)/x),r===`ticks`?(S=Math.floor(m/b)*b,C=Math.ceil(h/b)*b):(S=m,C=h),g&&_&&i&&Mu((o-a)/i,b/1e3)?(w=Math.round(Math.min((o-a)/b,l)),b=(o-a)/w,S=a,C=o):v?(S=g?a:S,C=_?o:C,w=c-1,b=(C-S)/w):(w=(C-S)/b,w=Du(w,Math.round(w),b/1e3)?Math.round(w):Math.ceil(w));let ee=Math.max(Iu(b),Iu(S));x=10**(Gl(s)?ee:s),S=Math.round(S*x)/x,C=Math.round(C*x)/x;let te=0;for(g&&(d&&S!==a?(n.push({value:a}),So)break;n.push({value:e})}return _&&d&&C!==o?n.length&&Du(n[n.length-1].value,o,Rv(o,y,e))?n[n.length-1].value=o:n.push({value:o}):(!_||C===o)&&n.push({value:C}),n}function Rv(e,t,{horizontal:n,minRotation:r}){let i=Pu(r),a=(n?Math.sin(i):Math.cos(i))||.001,o=.75*t*(``+e).length;return Math.min(t/a,o)}var zv=class extends Nh{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,t){return Gl(e)||(typeof e==`number`||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){let{beginAtZero:e}=this.options,{minDefined:t,maxDefined:n}=this.getUserBounds(),{min:r,max:i}=this,a=e=>r=t?r:e,o=e=>i=n?i:e;if(e){let e=Eu(r),t=Eu(i);e<0&&t<0?o(0):e>0&&t>0&&a(0)}if(r===i){let t=i===0?1:Math.abs(i*.05);o(i+t),e||a(r-t)}this.min=r,this.max=i}getTickLimit(){let{maxTicksLimit:e,stepSize:t}=this.options.ticks,n;return t?(n=Math.ceil(this.max/t)-Math.floor(this.min/t)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${t} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e||=11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return 1/0}buildTicks(){let e=this.options,t=e.ticks,n=this.getTickLimit();n=Math.max(2,n);let r=Lv({maxTicks:n,bounds:e.bounds,min:e.min,max:e.max,precision:t.precision,step:t.stepSize,count:t.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:t.minRotation||0,includeBounds:t.includeBounds!==!1},this._range||this);return e.bounds===`ticks`&&Nu(r,this,`value`),e.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){let e=this.ticks,t=this.min,n=this.max;if(super.configure(),this.options.offset&&e.length){let r=(n-t)/Math.max(e.length-1,1)/2;t-=r,n+=r}this._startValue=t,this._endValue=n,this._valueRange=n-t}getLabelForValue(e){return bd(e,this.chart.options.locale,this.options.ticks.format)}},Bv=class extends zv{static id=`linear`;static defaults={ticks:{callback:Cd.formatters.numeric}};determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=Jl(e)?e:0,this.max=Jl(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){let e=this.isHorizontal(),t=e?this.width:this.height,n=Pu(this.options.ticks.minRotation),r=(e?Math.sin(n):Math.cos(n))||.001,i=this._resolveTickFontOptions(0);return Math.ceil(t/Math.min(40,i.lineHeight/r))}getPixelForValue(e){return e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}},Vv=e=>Math.floor(Tu(e)),Hv=(e,t)=>10**(Vv(e)+t);function Uv(e){return e/10**Vv(e)==1}function Wv(e,t,n){let r=10**n,i=Math.floor(e/r);return Math.ceil(t/r)-i}function Gv(e,t){let n=Vv(t-e);for(;Wv(e,t,n)>10;)n++;for(;Wv(e,t,n)<10;)n--;return Math.min(n,Vv(e))}function Kv(e,{min:t,max:n}){t=Yl(e.min,t);let r=[],i=Vv(t),a=Gv(t,n),o=a<0?10**Math.abs(a):1,s=10**a,c=i>a?10**i:0,l=Math.round((t-c)*o)/o,u=Math.floor((t-c)/s/10)*s*10,d=Math.floor((l-u)/10**a),f=Yl(e.min,Math.round((c+u+d*10**a)*o)/o);for(;f=10?d=d<15?15:20:d++,d>=20&&(a++,d=2,o=a>=0?1:o),f=Math.round((c+u+d*10**a)*o)/o;let p=Yl(e.max,f);return r.push({value:p,major:Uv(p),significand:d}),r}var qv=class extends Nh{static id=`logarithmic`;static defaults={ticks:{callback:Cd.formatters.logarithmic,major:{enabled:!0}}};constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,t){let n=zv.prototype.parse.apply(this,[e,t]);if(n===0){this._zero=!0;return}return Jl(n)&&n>0?n:null}determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=Jl(e)?Math.max(0,e):null,this.max=Jl(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Jl(this._userMin)&&(this.min=e===Hv(this.min,0)?Hv(this.min,-1):Hv(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:e,maxDefined:t}=this.getUserBounds(),n=this.min,r=this.max,i=t=>n=e?n:t,a=e=>r=t?r:e;n===r&&(n<=0?(i(1),a(10)):(i(Hv(n,-1)),a(Hv(r,1)))),n<=0&&i(Hv(r,-1)),r<=0&&a(Hv(n,1)),this.min=n,this.max=r}buildTicks(){let e=this.options,t=Kv({min:this._userMin,max:this._userMax},this);return e.bounds===`ticks`&&Nu(t,this,`value`),e.reverse?(t.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),t}getLabelForValue(e){return e===void 0?`0`:bd(e,this.chart.options.locale,this.options.ticks.format)}configure(){let e=this.min;super.configure(),this._startValue=Tu(e),this._valueRange=Tu(this.max)-Tu(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(Tu(e)-this._startValue)/this._valueRange)}getValueForPixel(e){let t=this.getDecimalForPixel(e);return 10**(this._startValue+t*this._valueRange)}};function Jv(e){let t=e.ticks;if(t.display&&e.display){let e=ef(t.backdropPadding);return Xl(t.font&&t.font.size,kd.font.size)+e.height}return 0}function Yv(e,t,n){return n=Kl(n)?n:[n],{w:Md(e,t.string,n),h:n.length*t.lineHeight}}function Xv(e,t,n,r,i){return e===r||e===i?{start:t-n/2,end:t+n/2}:ei?{start:t-n,end:t}:{start:t,end:t+n}}function Zv(e){let t={l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom},n=Object.assign({},t),r=[],i=[],a=e._pointLabels.length,o=e.options.pointLabels,s=o.centerPointLabels?_u/a:0;for(let c=0;ct.r&&(s=(r.end-t.r)/a,e.r=Math.max(e.r,t.r+s)),i.startt.b&&(c=(i.end-t.b)/o,e.b=Math.max(e.b,t.b+c))}function $v(e,t,n){let r=e.drawingArea,{extra:i,additionalAngle:a,padding:o,size:s}=n,c=e.getPointPosition(t,r+i+o,a),l=Math.round(Fu(Bu(c.angle+Su))),u=iy(c.y,s.h,l),d=ny(l),f=ry(c.x,s.w,d);return{visible:!0,x:c.x,y:u,textAlign:d,left:f,top:u,right:f+s.w,bottom:u+s.h}}function ey(e,t){if(!t)return!0;let{left:n,top:r,right:i,bottom:a}=e;return!(Ld({x:n,y:r},t)||Ld({x:n,y:a},t)||Ld({x:i,y:r},t)||Ld({x:i,y:a},t))}function ty(e,t,n){let r=[],i=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:s}=a.pointLabels,c={extra:Jv(a)/2,additionalAngle:o?_u/i:0},l;for(let a=0;a270||n<90)&&(e-=t),e}function ay(e,t,n){let{left:r,top:i,right:a,bottom:o}=n,{backdropColor:s}=t;if(!Gl(s)){let n=$d(t.borderRadius),c=ef(t.backdropPadding);e.fillStyle=s;let l=r-c.left,u=i-c.top,d=a-r+c.width,f=o-i+c.height;Object.values(n).some(e=>e!==0)?(e.beginPath(),Kd(e,{x:l,y:u,w:d,h:f,radius:n}),e.fill()):e.fillRect(l,u,d,f)}}function oy(e,t){let{ctx:n,options:{pointLabels:r}}=e;for(let i=t-1;i>=0;i--){let t=e._pointLabelItems[i];if(!t.visible)continue;let a=r.setContext(e.getPointLabelContext(i));ay(n,a,t);let o=tf(a.font),{x:s,y:c,textAlign:l}=t;Gd(n,e._pointLabels[i],s,c+o.lineHeight/2,o,{color:a.color,textAlign:l,textBaseline:`middle`})}}function sy(e,t,n,r){let{ctx:i}=e;if(n)i.arc(e.xCenter,e.yCenter,t,0,vu);else{let n=e.getPointPosition(0,t);i.moveTo(n.x,n.y);for(let a=1;a{let n=$l(this.options.pointLabels.callback,[e,t],this);return n||n===0?n:``}).filter((e,t)=>this.chart.getDataVisibility(t))}fit(){let e=this.options;e.display&&e.pointLabels.display?Zv(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,t,n,r){this.xCenter+=Math.floor((e-t)/2),this.yCenter+=Math.floor((n-r)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,t,n,r))}getIndexAngle(e){let t=vu/(this._pointLabels.length||1),n=this.options.startAngle||0;return Bu(e*t+Pu(n))}getDistanceFromCenterForValue(e){if(Gl(e))return NaN;let t=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*t:(e-this.min)*t}getValueForDistanceFromCenter(e){if(Gl(e))return NaN;let t=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-t:this.min+t}getPointLabelContext(e){let t=this._pointLabels||[];if(e>=0&&e{if(t!==0||t===0&&this.min<0){s=this.getDistanceFromCenterForValue(e.value);let n=this.getContext(t),o=r.setContext(n),c=i.setContext(n);cy(this,o,s,a,c)}}),n.display){for(e.save(),o=a-1;o>=0;o--){let r=n.setContext(this.getPointLabelContext(o)),{color:i,lineWidth:a}=r;!a||!i||(e.lineWidth=a,e.strokeStyle=i,e.setLineDash(r.borderDash),e.lineDashOffset=r.borderDashOffset,s=this.getDistanceFromCenterForValue(t.reverse?this.min:this.max),c=this.getPointPosition(o,s),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(c.x,c.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){let e=this.ctx,t=this.options,n=t.ticks;if(!n.display)return;let r=this.getIndexAngle(0),i,a;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(r),e.textAlign=`center`,e.textBaseline=`middle`,this.ticks.forEach((r,o)=>{if(o===0&&this.min>=0&&!t.reverse)return;let s=n.setContext(this.getContext(o)),c=tf(s.font);if(i=this.getDistanceFromCenterForValue(this.ticks[o].value),s.showLabelBackdrop){e.font=c.string,a=e.measureText(r.label).width,e.fillStyle=s.backdropColor;let t=ef(s.backdropPadding);e.fillRect(-a/2-t.left,-i-c.size/2-t.top,a+t.width,c.size+t.height)}Gd(e,r.label,0,-i,c,{color:s.color,strokeColor:s.textStrokeColor,strokeWidth:s.textStrokeWidth})}),e.restore()}drawTitle(){}},dy={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},fy=Object.keys(dy);function py(e,t){return e-t}function my(e,t){if(Gl(t))return null;let n=e._adapter,{parser:r,round:i,isoWeekday:a}=e._parseOpts,o=t;return typeof r==`function`&&(o=r(o)),Jl(o)||(o=typeof r==`string`?n.parse(o,r):n.parse(o)),o===null?null:(i&&(o=i===`week`&&(ju(a)||a===!0)?n.startOf(o,`isoWeek`,a):n.startOf(o,i)),+o)}function hy(e,t,n,r){let i=fy.length;for(let a=fy.indexOf(e);a=fy.indexOf(n);a--){let n=fy[a];if(dy[n].common&&e._adapter.diff(i,r,n)>=t-1)return n}return fy[n?fy.indexOf(n):0]}function _y(e){for(let t=fy.indexOf(e)+1,n=fy.length;t=t?n[r]:n[i];e[a]=!0}}function yy(e,t,n,r){let i=e._adapter,a=+i.startOf(t[0].value,r),o=t[t.length-1].value,s,c;for(s=a;s<=o;s=+i.add(s,1,r))c=n[s],c>=0&&(t[c].major=!0);return t}function by(e,t,n){let r=[],i={},a=t.length,o,s;for(o=0;o+e.value))}initOffsets(e=[]){let t=0,n=0,r,i;this.options.offset&&e.length&&(r=this.getDecimalForValue(e[0]),t=e.length===1?1-r:(this.getDecimalForValue(e[1])-r)/2,i=this.getDecimalForValue(e[e.length-1]),n=e.length===1?i:(i-this.getDecimalForValue(e[e.length-2]))/2);let a=e.length<3?.5:.25;t=Hu(t,0,a),n=Hu(n,0,a),this._offsets={start:t,end:n,factor:1/(t+1+n)}}_generate(){let e=this._adapter,t=this.min,n=this.max,r=this.options,i=r.time,a=i.unit||hy(i.minUnit,t,n,this._getLabelCapacity(t)),o=Xl(r.ticks.stepSize,1),s=a===`week`&&i.isoWeekday,c=ju(s)||s===!0,l={},u=t,d,f;if(c&&(u=+e.startOf(u,`isoWeek`,s)),u=+e.startOf(u,c?`day`:a),e.diff(n,t,a)>1e5*o)throw Error(t+` and `+n+` are too far apart with stepSize of `+o+` `+a);let p=r.ticks.source===`data`&&this.getDataTimestamps();for(d=u,f=0;d+e)}getLabelForValue(e){let t=this._adapter,n=this.options.time;return n.tooltipFormat?t.format(e,n.tooltipFormat):t.format(e,n.displayFormats.datetime)}format(e,t){let n=this.options.time.displayFormats,r=this._unit,i=t||n[r];return this._adapter.format(e,i)}_tickFormatFunction(e,t,n,r){let i=this.options,a=i.ticks.callback;if(a)return $l(a,[e,t,n],this);let o=i.time.displayFormats,s=this._unit,c=this._majorUnit,l=s&&o[s],u=c&&o[c],d=n[t],f=c&&u&&d&&d.major;return this._adapter.format(e,r||(f?u:l))}generateTickLabels(e){let t,n,r;for(t=0,n=e.length;t0?o:1}getDataTimestamps(){let e=this._cache.data||[],t,n;if(e.length)return e;let r=this.getMatchingVisibleMetas();if(this._normalized&&r.length)return this._cache.data=r[0].controller.getAllParsedValues(this);for(t=0,n=r.length;t=e[r].pos&&t<=e[i].pos&&({lo:r,hi:i}=Ku(e,`pos`,t)),{pos:a,time:s}=e[r],{pos:o,time:c}=e[i]):(t>=e[r].time&&t<=e[i].time&&({lo:r,hi:i}=Ku(e,`time`,t)),{time:a,pos:s}=e[r],{time:o,pos:c}=e[i]);let l=o-a;return l?s+(c-s)*(t-a)/l:s}var Cy=class extends xy{static id=`timeseries`;static defaults=xy.defaults;constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let e=this._getTimestampsForTable(),t=this._table=this.buildLookupTable(e);this._minPos=Sy(t,this.min),this._tableRange=Sy(t,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){let{min:t,max:n}=this,r=[],i=[],a,o,s,c,l;for(a=0,o=e.length;a=t&&c<=n&&r.push(c);if(r.length<2)return[{time:t,pos:0},{time:n,pos:1}];for(a=0,o=r.length;ae-t)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;let t=this.getDataTimestamps(),n=this.getLabelTimestamps();return e=t.length&&n.length?this.normalize(t.concat(n)):t.length?t:n,e=this._cache.all=e,e}getDecimalForValue(e){return(Sy(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){let t=this._offsets,n=this.getDecimalForPixel(e)/t.factor-t.end;return Sy(this._table,n*this._tableRange+this._minPos,!0)}},wy=[hm,n_,jv,Object.freeze({__proto__:null,CategoryScale:Iv,LinearScale:Bv,LogarithmicScale:qv,RadialLinearScale:uy,TimeScale:xy,TimeSeriesScale:Cy})];xg.register(...wy);var Ty=xg,Ey=R(``);function Dy(e,t){E(t,!0);let n=ya(t,`class`,3,``),r=ya(t,`ariaLabel`,3,``);function i(e){if(Da.tick,typeof t.build!=`function`)return;let n=t.build();if(!n)return;let r=new Ty(e.getContext(`2d`),n);return()=>r.destroy()}var a=Ey();Mi(a,()=>i),F(()=>{U(a,1,Fi(n())),W(a,`aria-label`,r())}),z(e,a),D()}var Oy=R(``),ky=R(`
`);function Ay(e,t){E(t,!0);let n=ya(t,`options`,19,()=>[]),r=ya(t,`ariaLabel`,3,``),i=ya(t,`class`,3,``);var a=ky();H(a,21,n,e=>e.value,(e,n)=>{var r=Oy();let i;var a=M(r,!0);T(r),F(()=>{i=U(r,1,`segmented-btn svelte-92fh5i`,null,i,{active:t.value===I(n).value}),W(r,`aria-pressed`,t.value===I(n).value),B(a,I(n).label)}),L(`click`,r,()=>t.onchange?.(I(n).value)),z(e,r)}),T(a),F(()=>{U(a,1,Fi([`segmented-control`,i()]),`svelte-92fh5i`),W(a,`aria-label`,r())}),z(e,a),D()}Hr([`click`]);function jy(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function My(){return{grid:jy(`--chart-grid`),text:jy(`--chart-text`),dayMarker:jy(`--chart-day-marker`),tooltipBg:jy(`--chart-tooltip-bg`),tooltipBorder:jy(`--chart-tooltip-border`),tooltipText:jy(`--chart-tooltip-text`)}}function Ny(){return{size:11,family:`'SF Mono', Menlo, Consolas, monospace`}}function Py(e,t){return{backgroundColor:e.tooltipBg,borderColor:e.tooltipBorder,borderWidth:1,titleColor:e.tooltipText,bodyColor:e.tooltipText,callbacks:t}}function Fy(e){if(typeof document>`u`||!document.body)return e;let t=document.createElement(`span`);t.style.display=`none`,t.style.color=e,document.body.appendChild(t);let n=getComputedStyle(t).color;return document.body.removeChild(t),n||e}var Iy=[`#c2845a`,`#7a9e7e`,`#d4a574`,`#b8a98e`,`#8b9e6b`,`#7d8a97`,`#c47a5a`,`#6b8e6b`,`#a09486`,`#9b7ea4`,`#c49a6c`];function Ly(){return[...Iy]}function Ry(e){let t=5381,n=String(e||``);for(let e=0;eoc(e)}}var Wy={seconds:{apiName:`second`,windowLabel:`Last 60 seconds`,refreshMs:2e3},minutes:{apiName:`minute`,windowLabel:`Last 60 minutes`,refreshMs:5e3},hours:{apiName:`hour`,windowLabel:`Last 24 hours`,refreshMs:2e4},days:{apiName:`day`,windowLabel:`Last 30 days`,refreshMs:6e4}},Gy=[{value:`seconds`,label:`Seconds`},{value:`minutes`,label:`Minutes`},{value:`hours`,label:`Hours`},{value:`days`,label:`Days`}];function Ky(){return{input:0,output:0,prompt:0,local:0}}function qy(e){return String(e).padStart(2,`0`)}function Jy(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function Yy(e,t){if(!Number.isFinite(t))return``;let n=new Date(t);switch(e){case`seconds`:return qy(n.getHours())+`:`+qy(n.getMinutes())+`:`+qy(n.getSeconds());case`minutes`:return qy(n.getHours())+`:`+qy(n.getMinutes());case`hours`:return qy(n.getHours())+`:00`;default:return qy(n.getMonth()+1)+`-`+qy(n.getDate())}}function Xy(e,t){let n=[],r=[],i={input:[],output:[],prompt:[],local:[]},a=Ky();for(let o of e||[]){let e=Date.parse(o&&o.start),s=Jy(o&&o.input_tokens),c=Jy(o&&o.output_tokens),l=Jy(o&&o.prompt_cached_tokens),u=Jy(o&&o.locally_cached_tokens);n.push(Yy(t,e)),r.push(Number.isFinite(e)?e:null),i.input.push(s),i.output.push(c),i.prompt.push(l),i.local.push(u),a.input+=s,a.output+=c,a.prompt+=l,a.local+=u}return{labels:n,stamps:r,cols:i,totals:a}}function Zy(e){let t=e||Ky();return t.input+t.output+t.prompt+t.local>0}function Qy(e,t){return oc(Math.max(0,Math.round(e&&e[t]||0)))}function $y(e){return(Wy[e]||Wy.minutes).windowLabel}function eb(e,t){return`Live token throughput, `+$y(t).toLowerCase()+`. Input `+Qy(e,`input`)+`, output `+Qy(e,`output`)+`, prompt cached `+Qy(e,`prompt`)+`, locally cached `+Qy(e,`local`)+` tokens.`}function tb(e,t,n,r){let i=e=>oc(Math.max(0,Math.round(e))),a=n.stamps,o=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderWidth:0,borderRadius:0,categoryPercentage:1,barPercentage:1,stack:`tokens`});return{type:`bar`,plugins:[{id:`liveTokensDayMarks`,afterDatasetsDraw:t=>{if(r===`days`)return;let n=t.getDatasetMeta(0),i=t.chartArea;if(!n||!n.data||!i)return;let o=t.ctx;o.save(),o.font=`10px 'SF Mono', Menlo, Consolas, monospace`;let s=null;for(let t=0;t{if(!e.length)return``;let t=a[e[0].dataIndex];if(!t)return e[0].label;let n=new Date(t);return r===`days`?n.toLocaleDateString():n.toLocaleString()},label:e=>e.dataset.label+`: `+i(e.parsed.y),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+i(t)}})}}}}var nb=900,rb=new class{#e=k(`minutes`);get granularity(){return I(this.#e)}set granularity(e){A(this.#e,e,!0)}#t=k(j([]));get buckets(){return I(this.#t)}set buckets(e){A(this.#t,e,!0)}#n=k(!1);get active(){return I(this.#n)}set active(e){A(this.#n,e,!0)}#r=null;#i=null;#a=null;#o=0;#s=null;#c=!1;start(){this.stop(),this.active=!0,this.fetch(),this.#l(),this.#u()}stop(){this.active=!1,this.#r&&=(clearInterval(this.#r),null),this.#i&&=(clearTimeout(this.#i),null),this.#a&&=(clearTimeout(this.#a),null),this.#o=0,this.#s&&=(this.#s.abort(),null),this.buckets=[]}setGranularity(e){!Wy[e]||e===this.granularity||(this.granularity=e,this.buckets=[],this.#l(),this.fetch())}#l(){this.#r&&=(clearInterval(this.#r),null);let e=Wy[this.granularity]||Wy.minutes;this.#r=setInterval(()=>{this.active&&this.fetch()},e.refreshMs)}noteUsageEvent(e){!this.active||e!==`usage.flushed`||(this.#i||=setTimeout(()=>{this.#i=null,this.fetch()},nb))}async fetch(){if(!this.active||this.#c)return;this.#c=!0;let e=this.granularity;try{let t=await ps(`/admin/usage/throughput?granularity=`+(Wy[e]||Wy.minutes).apiName,{label:`token throughput`});if(t.stale||!t.ok||this.granularity!==e)return;this.buckets=t.data&&Array.isArray(t.data.buckets)?t.data.buckets:[]}catch(e){if(hs(e))return;console.error(`Failed to fetch token throughput:`,e)}finally{this.#c=!1,this.active&&this.granularity!==e&&this.fetch()}}async#u(){await vs.ensureLoaded(),this.active&&vs.liveLogsVisible()&&(typeof ReadableStream>`u`||(this.#s&&this.#s.abort(),this.#s=new AbortController,this.#d(this.#s)))}async#d(e){try{let t=await ds(`/admin/live/logs?types=usage`,{signal:e.signal});if(!t.ok||!t.body||typeof t.body.getReader!=`function`){this.#p();return}this.#o=0,await By(t.body.getReader(),e=>this.#f(e)),this.#p()}catch(e){if(hs(e))return;console.error(`Live usage stream failed:`,e),this.#p()}}#f(e){if(!e||typeof e!=`object`)return;let t=String(e.type||``).trim();t.indexOf(`usage.`)===0&&this.noteUsageEvent(t)}#p(){if(!this.active||this.#a)return;let{attempt:e,delay:t}=Hy(this.#o);this.#o=e,this.#a=setTimeout(()=>{this.#a=null,this.#u()},t)}},ib=R(`
`),ab=R(`
Waiting for live requests…
`),ob=R(`

Live Token Throughput

`);function sb(e,t){E(t,!0);let n=O(()=>Xy(rb.buckets,rb.granularity)),r=O(()=>I(n).totals);function i(){return{input:Fy(`var(--token-input)`),output:Fy(`var(--token-output)`),prompt:Fy(`var(--token-prompt)`),local:Fy(`var(--token-local)`)}}let a=[{metric:`input`,label:`Input Tokens`,colorVar:`--token-input`},{metric:`output`,label:`Output Tokens`,colorVar:`--token-output`},{metric:`prompt`,label:`Prompt (Input) Cached`,colorVar:`--token-prompt`},{metric:`local`,label:`Locally Cached`,colorVar:`--token-local`}];var o=ob(),s=M(o),c=M(s),l=P(M(c),2),u=M(l);let d;var f=P(u,2),p=M(f,!0);T(f),T(l),T(c),Ay(P(c,2),{ariaLabel:`Live token throughput granularity`,get options(){return Gy},get value(){return rb.granularity},onchange:e=>rb.setGranularity(e)}),T(s);var m=P(s,2);H(m,21,()=>a,e=>e.metric,(e,t)=>{var n=ib(),i=M(n),a=P(i,2),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(n),F(e=>{Hi(i,`background: var(${I(t).colorVar??``})`),B(o,I(t).label),B(c,e)},[()=>Qy(I(r),I(t).metric)]),z(e,n)}),T(m);var h=P(m,2),g=M(h);{let e=O(()=>eb(I(r),rb.granularity));Dy(g,{get ariaLabel(){return I(e)},build:()=>tb(My(),i(),I(n),rb.granularity)})}var _=P(g,2),v=e=>{z(e,ab())},y=O(()=>!Zy(I(r)));V(_,e=>{I(y)&&e(v)}),T(h),T(o),F(e=>{d=U(u,1,`live-dot`,null,d,{"is-streaming":rb.active}),B(p,e)},[()=>$y(rb.granularity)]),z(e,o),D()}function cb(e){let t=e||{};if(t.total_tokens!==null&&t.total_tokens!==void 0){let e=Number(t.total_tokens);if(Number.isFinite(e))return e}let n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function lb(e,t){if(!t)return 0;let n=e&&e.summary?e.summary:{},r=Number(n.total_hits||0);return Number.isFinite(r)&&r>0?r:0}function ub(e,t,n){let r=Number(e&&e.total_requests||0);return(Number.isFinite(r)?r:0)+lb(t,n)}function db(e,t,n){let r=lb(t,n);return r<=0?``:nc(ub(e,t,n)-r)+` to providers + `+nc(r)+` from cache`}function fb(e){let t=e&&e.summary?e.summary:{},n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function pb(e,t,n){let r=e=>{let t=Number(e||0);return Number.isFinite(t)&&t>0?t:0},i=e||{},a=r(i.uncached_input_tokens),o=r(i.cached_input_tokens),s=r(i.cache_write_input_tokens),c=t&&t.summary?t.summary:{},l=n?r(c.total_input_tokens):0;return[{key:`uncached`,label:`Regular`,tokens:a+s,colorVar:`--cache-meter-uncached`,note:s>0?`Includes `+nc(s)+` cache-write tokens`:``},{key:`prompt`,label:`Prompt cached`,tokens:o,colorVar:`--cache-meter-prompt`,note:`Provider prompt-cache reads`},{key:`local`,label:`Locally cached`,tokens:l,colorVar:`--cache-meter-local`,note:`Served from GoModel response cache`}]}function mb(e,t,n){return pb(e,t,n).reduce((e,t)=>e+t.tokens,0)}function hb(e,t,n){return mb(e,t,n)>0}function gb(e,t,n){let r=pb(e,t,n),i=r.reduce((e,t)=>e+t.tokens,0);if(i<=0)return r.map(e=>Object.assign({},e,{pct:0}));let a=r.map(e=>{let t=e.tokens/i*100,n=Math.floor(t);return Object.assign({},e,{pct:n,remainder:t-n})}),o=100-a.reduce((e,t)=>e+t.pct,0);return a.map((e,t)=>({index:t,remainder:e.remainder,tokens:e.tokens})).filter(e=>e.tokens>0).sort((e,t)=>t.remainder-e.remainder).forEach(e=>{o>0&&(a[e.index].pct+=1,--o)}),a}function _b(e,t,n){return gb(e,t,n).filter(e=>e.tokens>0)}function vb(e){let t=[e.label+`: `+nc(e.tokens)+` input tokens (`+e.pct+`%)`];return e.note&&t.push(e.note),t.join(` +`)}function yb(e){let t=(e||[]).map(e=>e.label+` `+e.pct+`%`);return`Cache breakdown of input tokens — `+(t.length?t.join(`, `):`no data`)}function bb(e){return e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`)}function xb(e,t,n,r){if(t!==`daily`||!n||!r)return e;let i={};(e||[]).forEach(e=>{i[e.date]=e});let a=[];for(let e=new Date(n);e<=r;e.setUTCDate(e.getUTCDate()+1)){let t=bb(e);a.push(i[t]||{date:t,input_tokens:0,output_tokens:0,total_tokens:0,requests:0,input_cost:null,output_cost:null,total_cost:null})}return a}function Sb(e,t){let n=e=>Number(e)||0,r=e.map(e=>e.date),i=e.map(e=>n(e.uncached_input_tokens)+n(e.cache_write_input_tokens)+n(e.cached_input_tokens)>0?n(e.uncached_input_tokens)+n(e.cache_write_input_tokens):n(e.input_tokens)),a=e.map(e=>n(e.output_tokens)),o=e.map(e=>n(e.cached_input_tokens)),s={};return(t||[]).forEach(e=>{s[e.date]=e}),{labels:r,inputPaid:i,output:a,prompt:o,local:r.map(e=>{let t=s[e];return t?n(t.input_tokens)+n(t.output_tokens):0})}}function Cb(e){let t=e||{},n=Math.max(0,Number(t.uncached_input_tokens)||0),r=Math.max(0,Number(t.cached_input_tokens)||0),i=Math.max(0,Number(t.cache_write_input_tokens)||0),a=n+r+i;return a>0?r/a*100:0}function wb(e){let t=e||{};return(Number(t.uncached_input_tokens)||0)+(Number(t.cached_input_tokens)||0)+(Number(t.cache_write_input_tokens)||0)>0}function Tb(e){return wb(e)?Math.round(Cb(e))+`%`:`—`}function Eb(e,t,n={}){let r=!!n.cacheEnabled,i=n.resolve||(e=>e),a=(e,t)=>i(`color-mix(in srgb, `+e+` `+t+`%, transparent)`),o=(e,t,n,r)=>Object.assign({label:e,data:t,borderColor:n,backgroundColor:n,fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4},r||{}),s=[o(`Input Tokens`,t.inputPaid,i(`var(--token-input)`),{fill:`origin`}),o(`Output Tokens`,t.output,i(`var(--token-output)`),{fill:`-1`}),o(`Prompt (Input) Cached`,t.prompt,i(`var(--token-prompt)`),{fill:`-1`,borderDash:[6,4]})];return r&&s.push(o(`Locally Cached`,t.local,a(`var(--info)`,35),{fill:`-1`,borderDash:[2,3]})),{type:`line`,data:{labels:t.labels,datasets:s},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),maxRotation:0,autoSkip:!0,maxTicksLimit:10}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:Uy(e)}}}}}function Db(e,t,n){let r=Math.max(0,Math.min(100,e));return{type:`doughnut`,data:{datasets:[{data:[r,100-r],backgroundColor:[t,n],borderWidth:0,spacing:0}]},options:{rotation:-90,circumference:180,cutout:`84%`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:1},events:[],plugins:{legend:{display:!1},tooltip:{enabled:!1}}}}}var Ob=`gomodel_provider_status_details_expanded`,kb=`gomodel_provider_card_expanded_overrides`,Ab=3e3,jb=`https://gomodel.enterpilot.io/docs/providers/`,Mb={anthropic:`anthropic`,azure:`azure`,bailian:`bailian`,bedrock:`bedrock`,"bedrock-mantle":`bedrock-mantle`,cohere:`cohere`,deepseek:`deepseek`,gemini:`gemini`,opencode_go:`opencode-go`,oracle:`oracle`,vertex:`vertex`,vllm:`vllm`,xiaomi:`xiaomi`};function Nb(){return{summary:{total:0,healthy:0,degraded:0,unhealthy:0,overall_status:`degraded`},providers:[]}}function Pb(e){let t={detailsExpanded:!1,cardOverrides:{}};try{if(e){let n=e.getItem(Ob);n===`true`||n===`false`?t.detailsExpanded=n===`true`:e.setItem(Ob,`false`);let r=JSON.parse(e.getItem(kb)||`{}`);r&&typeof r==`object`&&!Array.isArray(r)&&(t.cardOverrides=r)}}catch{}return t}function Fb(e,t){if(e)try{e.setItem(Ob,t?`true`:`false`)}catch{}}function Ib(e,t){if(e)try{e.setItem(kb,JSON.stringify(t))}catch{}}function Lb(e,t,n){let r=n&&n.name?String(n.name):``;return r&&Object.prototype.hasOwnProperty.call(e,r)?e[r]===!0:t}function Rb(e){return`is-`+(String(e&&e.overall_status||`degraded`).trim()||`degraded`)}function zb(e){return`is-`+(String(e||`degraded`).trim()||`degraded`)}function Bb(e){let t=e||{};return String(t.healthy||0)+`/`+String(t.total||0)}function Vb(e){let t=e||{},n=Number(t.total||0),r=Number(t.healthy||0);return n>0&&rString(e&&e.status_label||``).trim().toLowerCase()===`starting`)}function Wb(e){if(!e||!e.runtime)return``;let t=e.runtime.last_model_fetch_at||``,n=e.runtime.last_availability_check_at||``;return t?n&&Date.parse(n)>Date.parse(t)?n:t:n}function Gb(e,t){let n=Wb(e);if(!n||typeof t!=`function`)return`-`;let r=t(n);if(!r||r===`-`)return`-`;let i=String(r).split(` `);return i.length>1?i.slice(1).join(` `):r}function Kb(e,t){let n=Wb(e);return n?typeof t==`function`?t(n):String(n):``}function qb(e){if(!e)return``;let t=String(e.name||``).trim(),n=String(e.type||e.config&&e.config.type||``).trim();return!n||n===t?``:n}function Jb(e){let t=String(e&&(e.type||e.config&&e.config.type)||``).trim().toLowerCase(),n=t?Mb[t]:``;return n?jb+n+`?utm_source=gomodel_dashboard`:``}function Yb(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.retry:null;return t?String(t.max_retries)+` retries, `+t.initial_backoff+` initial, `+t.max_backoff+` max, factor `+t.backoff_factor+`, jitter `+t.jitter_factor:`-`}function Xb(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.circuit_breaker:null;return t?String(t.failure_threshold)+` fail, `+String(t.success_threshold)+` success, `+t.timeout+` timeout`:`-`}function Zb(e){let t=e&&e.config&&Array.isArray(e.config.models)?e.config.models.filter(Boolean):[];return t.length===0?`Automatic`:t.join(`, `)}function Qb(e){if(!e)return``;let t=[];return e.status_reason&&t.push(String(e.status_reason)),e.last_error&&t.push(`Last error: `+String(e.last_error)),t.join(` + +`)}function $b(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function ex(e){let t=$b(e);return t?String(t.circuit_state||``).trim():``}function tx(e){let t=ex(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function nx(e){let t=ex(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function rx(e){let t=$b(e);if(!t)return``;let n=Number(t.requests||0),r=Number(t.errors||0),i=Math.round(Number(t.window_seconds||0)/60),a=i>0?`last `+i+` min`:`recent`;return String(n)+` request`+(n===1?``:`s`)+` · `+String(r)+` error`+(r===1?``:`s`)+` (`+a+`)`}function ix(e){let t=$b(e);return t&&Array.isArray(t.models)?t.models:[]}function ax(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function ox(e){let t=e&&e.last_error;return!t||!t.message?``:(t.status_code?`HTTP `+String(t.status_code)+`: `:``)+t.message}function sx(){return{name:``,slug:``,url:``,transport:`http`,description:``,enabled:!0,headers:[],allowed_tools:``,disallowed_tools:``,user_paths:``,tool_timeout_seconds:``}}function cx(){return{server:``,status:``,instructions:``,tools:[],prompts:[],resources:[],templates:[]}}function lx(e){return String(e&&(e.slug||e.name)||``).trim()}function ux(e){return String(e&&e.status||``).trim()||`connecting`}function dx(e){switch(ux(e)){case`connected`:return`status-success`;case`degraded`:return String(e&&e.last_error||``).trim()?`status-error`:`status-warning`;case`connecting`:return`status-neutral`;default:return`status-unknown`}}function fx(e,t){let n=ux(e),r=String(e&&e.last_error||``).trim();return r&&n!==`connected`?r:n===`connected`&&e&&e.connected_at?`Connected since `+(typeof t==`function`?t:String)(e.connected_at):``}function px(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function mx(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function hx(e){let t=String(e||``).normalize(`NFKD`).toLowerCase(),n=t.replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64).replace(/-+$/g,``);if(n)return n;let r=2166136261;for(let e of t)r=Math.imul((r^e.codePointAt(0))>>>0,16777619)>>>0;return`mcp-`+r.toString(16).padStart(8,`0`)}function gx(e){return String(e||``).split(` +`).map(e=>e.trim()).filter(e=>e)}function _x(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function vx(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=String(e&&e.name||``).trim();n&&(t[n]=String(e&&e.value||``))}),t}function yx(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.slug,e.url,e.transport,e.description,e.status].some(e=>String(e||``).toLowerCase().includes(r)))}function bx(e){return{name:String(e.name||``).trim(),slug:lx(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:_x(e.headers),allowed_tools:(Array.isArray(e.allowed_tools)?e.allowed_tools:[]).join(`, `),disallowed_tools:(Array.isArray(e.disallowed_tools)?e.disallowed_tools:[]).join(`, `),user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` +`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function xx(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||hx(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>lx(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:vx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:ec(e.allowed_tools),disallowed_tools:ec(e.disallowed_tools),user_paths:gx(e.user_paths),tool_timeout_seconds:s}}}function Sx(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Cx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function wx(e){let t=e||cx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Cx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function Tx(e){return wx(e).length===0}function Ex(e){return(e||[]).length}function Dx(e){return(e||[]).filter(e=>ux(e)===`connected`).length}function Ox(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&ux(e)===`degraded`).length}function kx(e,t){return!!e&&Ex(t)>0}function Ax(e){return String(Dx(e))+`/`+String(Ex(e))}function jx(e){return Ox(e)>0?`is-degraded`:`is-healthy`}function Mx(e){let t=Ox(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Ex(e),r=Dx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Nx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Px(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function Fx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Ix(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Lx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function Rx(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function zx(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function Bx(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:zx(Number(t))}function Vx(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function Hx(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=Vx(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function Ux(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=Vx(i,n);return a.month+` `+a.day+`, `+a.year}function Wx(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function Gx(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>Hx(e,r,i)),c=Wx(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{title:e=>e.length?Ux(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Ny(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),precision:0,callback:e=>oc(e)}}}}}}function Kx(e=Ly()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function qx(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||Kx();return{type:`line`,data:{labels:t.map(e=>Hx(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{title:e=>e.length?Ux(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+zx(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),callback:e=>zx(e)}}}}}}var Jx=class{#e=k(j(Nb()));get status(){return I(this.#e)}set status(e){A(this.#e,e,!0)}#t=k(!1);get loading(){return I(this.#t)}set loading(e){A(this.#t,e,!0)}#n=k(!1);get loadedOnce(){return I(this.#n)}set loadedOnce(e){A(this.#n,e,!0)}#r=k(!1);get detailsExpanded(){return I(this.#r)}set detailsExpanded(e){A(this.#r,e,!0)}#i=k(j({}));get cardOverrides(){return I(this.#i)}set cardOverrides(e){A(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Pb(wa());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Lb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Ib(wa(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Fb(wa(),this.detailsExpanded),Ib(wa(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await ps(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Nb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Nb();n.summary||=Nb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(hs(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Nb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),Ub(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Ab))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},Yx=class{#e=k(j(Nx()));get stats(){return I(this.#e)}set stats(e){A(this.#e,e,!0)}#t=k(!1);get loading(){return I(this.#t)}set loading(e){A(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await ps(`/admin/audit/stats?`+Oc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Nx();return}this.stats=Px(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Nx()}finally{e===this.#n&&(this.loading=!1)}}},Xx=class{#e=k(j([]));get servers(){return I(this.#e)}set servers(e){A(this.#e,e,!0)}#t=k(!1);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}async fetch(){if(await vs.ensureLoaded(),!vs.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await ps(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},Zx=class{#e=k(j([]));get data(){return I(this.#e)}set data(e){A(this.#e,e,!0)}#t=k(`tokens`);get mode(){return I(this.#t)}set mode(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await ps(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(hs(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},Qx=new Jx,$x=new Yx,eS=new Xx,tS=new Zx,nS=(e,t=f,n=f,r=f,i=f)=>{var a=iS(),o=M(a),s=M(o,!0);T(o);var c=P(o,2),l=M(c),u=M(l),d=M(u,!0);T(u),Ue(),T(l);var p=P(l,4),m=M(p),h=M(m,!0);T(m),Ue(),T(p);var g=P(p,4),_=M(g,!0);T(g),T(c),T(a),F((e,n,r,i,a,o)=>{B(s,t()),W(l,`title`,e),B(d,n),W(p,`title`,r),B(h,i),W(g,`title`,a),B(_,o)},[()=>sc(`Input tokens`,n()),()=>oc(n()),()=>sc(`Output tokens`,r()),()=>oc(r()),()=>sc(`Total tokens`,i()),()=>oc(i())]),z(e,a)},rS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=sS(),c=M(s),l=M(c,!0);T(c);var u=P(c,2),d=M(u,!0);T(u);var p=P(u,2),m=e=>{var t=aS(),n=M(t,!0);T(t),F(()=>{W(t,`aria-label`,o().title),W(t,`title`,o().title),B(n,a())}),L(`click`,t,function(...e){o().onclick?.apply(this,e)}),z(e,t)},h=e=>{var t=oS(),n=M(t,!0);T(t),F(()=>B(n,a())),z(e,t)};V(p,e=>{o()?e(m):e(h,-1)}),T(s),F(()=>{U(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),B(l,r()),B(d,i())}),z(e,s)},iS=R(`
i + o =
`),aS=R(``),oS=R(` `),sS=R(`
`),cS=R(`
Cache Hits
`),lS=R(`
Total Requests
Estimated Cost
Prompt Cache Rate
`);function uS(e,t){E(t,!0);let n=O(()=>Pc.summary),r=O(()=>Pc.cacheOverview),i=O(()=>Pc.cacheAnalyticsEnabled()),a=O(()=>Qx.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=lS(),c=M(s);{let e=O(()=>cb(I(n)));nS(c,()=>`Tokens`,()=>I(n).total_input_tokens,()=>I(n).total_output_tokens,()=>I(e))}var l=P(c,2),u=P(M(l),2),d=M(u,!0);T(u),T(l);var f=P(l,2),p=e=>{var t=cS(),n=P(M(t),2),i=M(n,!0);T(n),T(t),F(e=>B(i,e),[()=>nc(I(r).summary.total_hits)]),z(e,t)};V(f,e=>{I(i)&&e(p)});var m=P(f,2),h=P(M(m),2),g=M(h,!0);T(h),T(m);var _=P(m,2),v=e=>{{let t=O(()=>fb(I(r)));nS(e,()=>`Local Cache`,()=>I(r).summary.total_input_tokens,()=>I(r).summary.total_output_tokens,()=>I(t))}};V(_,e=>{I(i)&&e(v)});var y=P(_,2),b=P(M(y),2),x=M(b);Dy(x,{build:()=>Db(Cb(I(n)),Fy(`var(--token-prompt)`),Fy(`var(--bg-surface-hover)`))});var S=P(x,2),C=M(S,!0);T(S),T(b),T(y);var w=P(y,2),ee=e=>{{let t=O(()=>Rb(I(a))),n=O(()=>Bb(I(a))),r=O(()=>Hb(I(a))),i=O(()=>Vb(I(a))?{title:`View providers overview`,onclick:o}:null);rS(e,()=>`provider-status-overview-card`,()=>I(t),()=>`Provider Status`,()=>I(n),()=>I(r),()=>I(i))}};V(w,e=>{I(a).total>0&&e(ee)});var te=P(w,2),ne=e=>{{let t=O(()=>jx(eS.servers)),n=O(()=>Ax(eS.servers)),r=O(()=>Mx(eS.servers));rS(e,()=>`mcp-servers-flag`,()=>I(t),()=>`MCP Servers`,()=>I(n),()=>I(r),()=>({title:`View MCP servers`,onclick:()=>Wo.navigate(`mcp-servers`)}))}},re=O(()=>kx(eS.available,eS.servers));V(te,e=>{I(re)&&e(ne)}),T(s),F((e,t,n,r,i)=>{W(u,`title`,e),B(d,t),B(g,n),W(b,`aria-label`,r),B(C,i)},[()=>db(I(n),I(r),I(i)),()=>nc(ub(I(n),I(r),I(i))),()=>rc(I(n).total_cost),()=>`Prompt cache rate `+Tb(I(n)),()=>Tb(I(n))]),z(e,s),D()}Hr([`click`]);var dS=R(` `),fS=R(`
`),pS=R(`No usage in the selected period yet`),mS=R(`
`),hS=R(`

Tokens

Share of input tokens over the selected period
`);function gS(e,t){E(t,!0);let n=O(()=>Pc.cacheAnalyticsEnabled()),r=O(()=>gb(Pc.summary,Pc.cacheOverview,I(n))),i=O(()=>_b(Pc.summary,Pc.cacheOverview,I(n))),a=O(()=>hb(Pc.summary,Pc.cacheOverview,I(n)));var o=hS(),s=P(M(o),2);let c;var l=M(s);H(l,17,()=>I(i),e=>e.key,(e,t)=>{var n=fS(),r=M(n),i=e=>{var n=dS(),r=M(n);T(n),F(()=>B(r,`${I(t).pct??``}%`)),z(e,n)};V(r,e=>{I(t).pct>=8&&e(i)}),T(n),F(e=>{Hi(n,`width: ${I(t).pct??``}%; background: var(${I(t).colorVar??``})`),W(n,`title`,e)},[()=>vb(I(t))]),z(e,n)});var u=P(l,2),d=e=>{z(e,pS())};V(u,e=>{I(a)||e(d)}),T(s);var f=P(s,2);H(f,21,()=>I(r),e=>e.key,(e,t)=>{var n=mS(),r=M(n),i=P(r,2),a=M(i,!0);T(i);var o=P(i,2),s=M(o);T(o);var c=P(o,2),l=M(c,!0);T(c),T(n),F((e,i)=>{W(n,`title`,e),Hi(r,`background: var(${I(t).colorVar??``})`),B(a,I(t).label),B(s,`${I(t).pct??``}%`),B(l,i)},[()=>vb(I(t)),()=>nc(I(t).tokens)]),z(e,n)}),T(f),T(o),F(e=>{c=U(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!I(a)}),W(s,`aria-label`,e)},[()=>yb(I(i))]),z(e,o),D()}var _S=R(``);function vS(e,t){let n=ya(t,`size`,3,16),r=ya(t,`label`,3,`Loading`),i=ya(t,`class`,3,``);var a=_S();F(()=>{U(a,1,Fi([`spinner`,i()]),`svelte-b54l9o`),Hi(a,`--spinner-size: ${n()??``}px`),W(a,`aria-label`,r())}),z(e,a)}var yS=Xr(` `),bS=Xr(``);function xS(e,t){let n=ya(t,`label`,3,`No data`);var r=bS(),i=P(M(r),9),a=e=>{var t=yS(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)};V(i,e=>{n()&&e(a)}),T(r),F(()=>{W(r,`role`,n()?`img`:void 0),W(r,`aria-label`,n()||void 0),W(r,`aria-hidden`,n()?void 0:`true`)}),z(e,r)}var SS=R(`
`),CS=R(`

`);function wS(e,t){E(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Oc.interval=e,t.onintervalchange?.()}function i(){let e=Pc.daily;if(e.length===0)return null;let t=Oc.rangeStart(),n=Oc.rangeEnd(),r=Sb(xb(e,Oc.interval,t,n),xb(Array.isArray(Pc.cacheOverview.daily)?Pc.cacheOverview.daily:[],Oc.interval,t,n));return Eb(My(),r,{cacheEnabled:Pc.cacheAnalyticsEnabled(),resolve:Fy})}var a=CS(),o=M(a),s=M(o),c=M(s,!0);T(s);var l=P(s,2);{let e=O(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Ay(l,{ariaLabel:`Usage chart interval`,get options(){return I(e)},get value(){return Oc.interval},onchange:r})}T(o);var u=P(o,2),d=M(u);Dy(d,{build:i});var f=P(d,2),p=e=>{var t=SS();vS(M(t),{size:24,label:`Loading usage`}),T(t),z(e,t)},m=e=>{var t=SS();xS(M(t),{}),T(t),z(e,t)};V(f,e=>{Pc.daily.length===0&&Pc.loading?e(p):Pc.daily.length===0&&!K.authError&&e(m,1)}),T(u),T(a),F(e=>B(c,e),[()=>Oc.chartTitle()]),z(e,a),D()}var TS=10,ES=.7;function DS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+ES,r=Math.ceil(n*TS);return r<1?1:r>TS?TS:r}function OS(){let e=[];for(let t=0;t<=TS;t++)e.push(t);return e}function kS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=Jo(Xo(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);Yo(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=Yo(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function AS(e){let t=Jo(Xo(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);Yo(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),Yo(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),PS=R(`
`),FS=R(`
`),IS=R(`
`),LS=R(`
`),RS=R(`

Activity

Mon Wed Fri
`,1);function zS(e,t){E(t,!0);let n=k(j({show:!1,x:0,y:0,text:``})),r=O(()=>ss.currentDateKey()),i=O(()=>kS(tS.data,tS.mode,I(r))),a=O(()=>AS(I(r)));function o(e,t){t.empty||A(n,{show:!0,x:e.clientX,y:e.clientY,text:MS(t,tS.mode)},!0)}function s(){A(n,{show:!1,x:0,y:0,text:``},!0)}var c=RS(),l=N(c),u=M(l),d=P(M(u),2),f=e=>{vS(e,{size:14,label:`Loading activity`})};V(d,e=>{tS.loading&&tS.data.length===0&&e(f)}),Ay(P(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return tS.mode},onchange:e=>tS.mode=e}),T(u);var p=P(u,2),m=P(M(p),2),h=M(m);H(h,21,()=>I(a),e=>e.key,(e,t)=>{var n=NS(),r=M(n,!0);T(n),F(()=>{Hi(n,`grid-column: ${I(t).col+1} / span ${I(t).span??``}`),B(r,I(t).label)}),z(e,n)}),T(h);var g=P(h,2);H(g,21,()=>I(i),oi,(e,t,n)=>{var r=FS();H(r,23,()=>I(t),(e,t)=>n+`-`+t,(e,t)=>{var n=PS();F(()=>U(n,1,Fi([`contribution-calendar-cell`,I(t).empty?`empty`:`level-${I(t).level}`]),`svelte-3hfxuq`)),Vr(`mouseenter`,n,e=>o(e,I(t))),Vr(`mouseleave`,n,s),z(e,n)}),T(r),z(e,r)}),T(g),T(m),T(p);var _=P(p,2),v=M(_),y=M(v),b=M(y,!0);T(y),T(v);var x=P(v,2);H(P(M(x),2),16,OS,e=>e,(e,t)=>{var n=IS();F(()=>U(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),z(e,n)}),Ue(2),T(x),T(_),T(l);var S=P(l,2),C=e=>{var t=LS(),r=M(t,!0);T(t),F(()=>{Hi(t,`left: ${I(n).x??``}px; top: ${I(n).y-40}px`),B(r,I(n).text)}),z(e,t)};V(S,e=>{I(n).show&&e(C)}),F(e=>B(b,e),[()=>jS(tS.data,tS.mode)]),z(e,c),D()}var BS=R(``),VS=R(`

`),HS=R(`
`);function US(e,t){E(t,!0);let n=ya(t,`label`,3,`help`),r=ya(t,`text`,3,``),i=ya(t,`open`,15,!1),a=ya(t,`external`,3,!1),o=O(()=>!!r()||!!t.help||a());var s=HS(),c=M(s),l=M(c);gi(l,()=>t.title??f);var u=P(l,2),d=e=>{var r=BS();let a;F(()=>{a=U(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),W(r,`aria-label`,(i()?`Hide `:`Show `)+n()),W(r,`aria-expanded`,i()),W(r,`aria-controls`,t.copyId)}),L(`click`,r,()=>i(!i())),z(e,r)};V(u,e=>{I(o)&&e(d)}),gi(P(u,2),()=>t.extra??f),T(c);var p=P(c,2),m=e=>{var n=VS(),i=M(n),a=e=>{var n=Qr();gi(N(n),()=>t.help),z(e,n)},o=e=>{var t=Zr();F(()=>B(t,r())),z(e,t)};V(i,e=>{t.help?e(a):e(o,-1)}),T(n),F(()=>W(n,`id`,t.copyId)),z(e,n)};V(p,e=>{i()&&I(o)&&!a()&&e(m)}),T(s),z(e,s),D()}Hr([`click`]);var WS=R(`

Provider Latency

`),GS=R(`
Avg
`),KS=R(`

Requests by Status

Success 2xx 4xx 5xx
`,1);function qS(e,t){E(t,!0);let n=Kx(),r=O(()=>$x.stats);function i(){return{interval:I(r).interval,zone:ss.effectiveTimezone(),resolve:Fy,formatTimestamp:e=>ss.formatTimestamp(e)}}var a=Qr(),o=N(a),s=e=>{var t=KS(),a=N(t),o=M(a),s=P(M(o),2),c=M(s),l=P(M(c),2),u=M(l,!0);T(l),T(c);var d=P(c,2),f=P(M(d),4),p=M(f,!0);T(f),T(d);var m=P(d,2),h=P(M(m),4),g=M(h,!0);T(h),T(m);var _=P(m,2),v=P(M(_),4),y=M(v,!0);T(v),T(_),T(s),T(o);var b=P(o,2);Dy(M(b),{build:()=>Gx(My(),I(r).buckets,i())}),T(b),T(a);var x=P(a,2),S=e=>{var t=GS(),a=M(t),o=M(a);US(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{z(e,WS())},$$slots:{title:!0}});var s=P(o,2),c=M(s),l=P(M(c),2),u=M(l,!0);T(l),T(c),T(s),T(a);var d=P(a,2);Dy(M(d),{build:()=>qx(My(),I(r).buckets,I(r).provider_latency,{...i(),providerColor:n})}),T(d),T(t),F(e=>B(u,e),[()=>Bx(I(r))]),z(e,t)},C=O(()=>Ix(I(r)));V(x,e=>{I(C)&&e(S)}),F((e,t,n,r)=>{B(u,e),B(p,t),B(g,n),B(y,r)},[()=>Lx(I(r)),()=>nc(Rx(I(r),`status_2xx`)),()=>nc(Rx(I(r),`status_4xx`)),()=>nc(Rx(I(r),`status_5xx`))]),z(e,t)},c=O(()=>Fx(I(r)));V(o,e=>{I(c)&&e(s)}),z(e,a),D()}var JS=(e,t=f,n=f,r)=>{let i=Ot(()=>h(r?.(),!1));var a=ZS(),o=M(a),s=M(o,!0);T(o);var c=P(o,2),l=e=>{var t=YS(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)},u=e=>{var t=XS(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)};V(c,e=>{I(i)?e(l):e(u,-1)}),T(a),F(()=>B(s,t())),z(e,a)},YS=R(` `),XS=R(` `),ZS=R(`
`),QS=R(`

`),$S=R(`
Breaker State
`),eC=R(`
`),tC=R(`
Models (Recent Traffic)
`),nC=R(`
`),rC=R(`

`);function iC(e,t){E(t,!0);let n=O(()=>nx(t.provider)),r=O(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=rC();let a;var o=M(i),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=e=>{var n=QS(),r=M(n,!0);T(n),F(()=>B(r,t.provider.last_error)),z(e,n)};V(l,e=>{t.provider.last_error&&e(u)});var d=P(l,2),f=e=>{var r=nC(),i=M(r);{let e=O(()=>rx(t.provider));JS(i,()=>`Recent Requests`,()=>I(e))}var a=P(i,2),o=e=>{var r=$S(),i=P(M(r),2),a=M(i),o=M(a,!0);T(a),T(i),T(r),F(e=>{U(a,1,Fi([`provider-status-health-state`,I(n)]),`svelte-6y9wjv`),B(o,e)},[()=>tx(t.provider)]),z(e,r)},s=O(()=>ex(t.provider));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{var n=tC(),r=P(M(n),2);H(r,21,()=>ix(t.provider),e=>e.model,(e,t)=>{var n=eC();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(n),F((e,i)=>{r=U(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":I(t).flagged}),W(n,`title`,e),B(a,I(t).model),B(s,i)},[()=>ox(I(t)),()=>ax(I(t))]),z(e,n)}),T(r),T(n),z(e,n)},u=O(()=>ix(t.provider).length>0);V(c,e=>{I(u)&&e(l)}),T(r),z(e,r)},p=O(()=>$b(t.provider));V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=M(m);H(h,17,()=>I(r),([e,t])=>e,(e,t)=>{var n=O(()=>g(I(t),2));JS(e,()=>I(n)[0],()=>I(n)[1],()=>!0)});var _=P(h,2);{let e=O(()=>Zb(t.provider));JS(_,()=>`Configured Models`,()=>I(e))}var v=P(_,2);{let e=O(()=>Yb(t.provider));JS(v,()=>`Retry`,()=>I(e))}var y=P(v,2);{let e=O(()=>Xb(t.provider));JS(y,()=>`Circuit Breaker`,()=>I(e))}T(m),T(o),T(i),F(()=>{a=U(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),W(i,`aria-hidden`,!t.expanded),B(c,t.provider.status_reason)}),z(e,i),D()}var aC=R(` `),oC=R(``),sC=R(`

Models Available
Last Checked
`);function cC(e,t){E(t,!0);let n=O(()=>Qx.cardExpanded(t.provider)),r=e=>ss.formatTimestamp(e);var i=sC(),a=M(i),o=M(a),s=M(o),c=M(s),l=M(c,!0);T(c);var u=P(c,2),d=e=>{var n=aC(),r=M(n);T(n),F(e=>B(r,`(${e??``})`),[()=>qb(t.provider)]),z(e,n)},f=O(()=>qb(t.provider));V(u,e=>{I(f)&&e(d)});var p=P(u,2),m=e=>{var n=oC();F((e,t,r)=>{W(n,`href`,e),W(n,`aria-label`,t),W(n,`title`,r)},[()=>Jb(t.provider),()=>`View `+(qb(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(qb(t.provider)||t.provider.name)+` provider docs`]),z(e,n)},h=O(()=>Jb(t.provider));V(p,e=>{I(h)&&e(m)}),T(s),T(o);var g=P(o,2),_=M(g,!0);T(g),T(a);var v=P(a,2),y=M(v),b=P(M(y),2),x=M(b,!0);T(b),T(y);var S=P(y,2),C=P(M(S),2),w=M(C,!0);T(C),T(S),T(v);var ee=P(v,2);iC(ee,{get provider(){return t.provider},get expanded(){return I(n)}});var te=P(ee,2);let ne;G(M(te),{get icon(){return Ba},class:`provider-status-card-toggle-icon`}),T(te),T(i),F((e,r,i,a,o)=>{B(l,t.provider.name),U(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),W(g,`title`,r),B(_,t.provider.status_label),B(x,i),W(C,`title`,a),B(w,o),ne=U(te,1,`provider-status-card-toggle svelte-nopjmh`,null,ne,{"is-expanded":I(n)}),W(te,`aria-expanded`,I(n)),W(te,`aria-label`,(I(n)?`Collapse `:`Expand `)+t.provider.name+` details`),W(te,`title`,I(n)?`Collapse details`:`Expand details`)},[()=>zb(t.provider.status),()=>Qb(t.provider),()=>nc(t.provider.runtime?.discovered_model_count),()=>Kb(t.provider,r),()=>Gb(t.provider,r)]),L(`click`,te,()=>Qx.toggleCard(t.provider)),z(e,i),D()}Hr([`click`]);var lC=R(`

Providers Overview

`),uC=R(`
`);function dC(e,t){E(t,!0);let n=O(()=>Qx.status.providers);var r=Qr(),i=N(r),a=e=>{var t=lC(),r=M(t),i=P(M(r),2),a=M(i),o=M(a,!0);T(a);var s=P(a,2);let c;T(i),T(r);var l=P(r,2);H(l,21,()=>I(n),e=>e.name,(e,t)=>{cC(e,{get provider(){return I(t)}})}),T(l),T(t),F((e,t)=>{W(i,`aria-checked`,Qx.detailsExpanded),W(i,`title`,e),B(o,t),c=U(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":Qx.detailsExpanded})},[()=>Qx.detailsToggleLabel(),()=>Qx.detailsToggleLabel()]),L(`click`,i,()=>Qx.toggleDetails()),z(e,t)},o=e=>{var t=uC();vS(M(t),{size:18,label:`Loading provider status`}),T(t),z(e,t)};V(i,e=>{I(n).length>0?e(a):Qx.loading&&!Qx.loadedOnce&&e(o,1)}),z(e,r),D()}Hr([`click`]);var fC=R(`
`);function pC(e,t){E(t,!0);function n(){Pc.fetchUsage(),Pc.fetchCacheOverview(``),$x.fetch(),Qx.fetch(),eS.fetch(),tS.fetch()}function r(){Pc.fetchUsage(),Pc.fetchCacheOverview(``),$x.fetch()}function i(){r(),tS.fetch()}An(()=>{if(K.refreshTick,Wo.page===`overview`)return Er(()=>{n(),rb.start()}),()=>{rb.stop(),Qx.stopPolling()}});var a=fC(),o=M(a);sb(o,{});var s=P(o,4);Zc(M(s),{onchange:i}),T(s);var c=P(s,2);jc(c,{});var l=P(c,2);uS(l,{});var u=P(l,2);gS(u,{});var d=P(u,2);wS(d,{onintervalchange:r});var f=P(d,2);zS(f,{});var p=P(f,2);qS(p,{}),dC(P(p,2),{}),T(a),z(e,a),D()}var mC=`/admin/live/logs?types=audit,usage`;function hC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function gC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function _C(e){let t=mC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function vC(){return{async consumeLiveLogsBody(e){await By(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>hC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.notifyLiveConversation(e),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.notifyLiveConversation(l),l;if(!this.auditLiveInsertAllowed())return;if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.notifyLiveConversation(e),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.notifyLiveConversation(u),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;ehC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1}),s=[...n];return s.splice(r,1),s.unshift(o),this.auditLog.entries=s,this.prependLiveAuditThreadChild(t,i),o},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!hC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=[...n];a.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t)}),this.auditLog.entries=a},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},notifyLiveConversation(e){e&&typeof this.refreshLiveConversation==`function`&&this.refreshLiveConversation(e)},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!hC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!hC(e,t,n)):[];if(u.length===0){s=!0;return}let d={...u[0],session_id:r,session_count:c-1};i.push(d),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var yC=class{#e=k(j({entries:[],total:0,limit:25,offset:0}));get auditLog(){return I(this.#e)}set auditLog(e){A(this.#e,e,!0)}#t=k(j({entries:[],total:0,limit:50,offset:0}));get usageLog(){return I(this.#t)}set usageLog(e){A(this.#t,e,!0)}#n=k(``);get auditSearch(){return I(this.#n)}set auditSearch(e){A(this.#n,e,!0)}#r=k(``);get auditMethod(){return I(this.#r)}set auditMethod(e){A(this.#r,e,!0)}#i=k(``);get auditStatusCode(){return I(this.#i)}set auditStatusCode(e){A(this.#i,e,!0)}#a=k(``);get auditStream(){return I(this.#a)}set auditStream(e){A(this.#a,e,!0)}#o=k(Ta(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return I(this.#o)}set auditGroupSessions(e){A(this.#o,e,!0)}#s=k(j({}));get auditThreadChildren(){return I(this.#s)}set auditThreadChildren(e){A(this.#s,e,!0)}#c=k(``);get usageLogSearch(){return I(this.#c)}set usageLogSearch(e){A(this.#c,e,!0)}#l=k(``);get usageFilterModel(){return I(this.#l)}set usageFilterModel(e){A(this.#l,e,!0)}#u=k(``);get usageFilterProvider(){return I(this.#u)}set usageFilterProvider(e){A(this.#u,e,!0)}#d=k(``);get usageFilterLabel(){return I(this.#d)}set usageFilterLabel(e){A(this.#d,e,!0)}#f=k(``);get usageFilterUserPath(){return I(this.#f)}set usageFilterUserPath(e){A(this.#f,e,!0)}#p=k(!1);get usageLogHideCached(){return I(this.#p)}set usageLogHideCached(e){A(this.#p,e,!0)}#m=k(!1);get liveLogsStreaming(){return I(this.#m)}set liveLogsStreaming(e){A(this.#m,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;refreshLiveConversation=null;noteLiveTokenUsage=null;get page(){return Wo.page}get customStartDate(){return Oc.customStartDate}get customEndDate(){return Oc.customEndDate}get followsToday(){return Oc.followsToday}liveLogsEnabled(){return vs.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await vs.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=_C(this.liveLogsLastSeq),r=K.generation;try{let i=await ds(n,t);if(i.status===401){if(K.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await ps(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(yC.prototype,vC());var bC=new yC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!bC.liveLogsController,bC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&bC.ensureLiveLogs()})}var xC=null;Mn(()=>{An(()=>{let e=K.refreshTick;if(xC===null){xC=e;return}e!==xC&&(xC=e,Er(()=>{bC.stopLiveLogs(),bC.startLiveLogs()}))})});function SC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function CC(){return{entries:[],total:0,limit:50,offset:0}}function wC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function TC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function EC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function DC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function OC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function kC(e,t,n){let r=DC(e,t);return r<=0?``:n?nc(r)+` cached requests hidden`:nc(Number(e&&e.total_requests||0))+` to providers + `+nc(r)+` from cache`}function AC(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:rc(t.total_input_cost)+` input + `+rc(t.total_output_cost)+` output`}function jC(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function MC(e){return jC(e)>0}function NC(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function PC(){return`Estimated at 4 net characters removed per token`}function FC(e,t){return t===`costs`?rc(NC(e)):oc(jC(e))}function IC(e,t){let n=t===`costs`,r=n?Number(NC(e)):jC(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function LC(e,t){let n=IC(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function RC(e,t){let n=jC(e);if(n<=0)return``;let r=[nc(n)+` estimated prompt token-transmissions removed across provider requests`,PC(),`Savings are summed per provider request; resent conversation history is counted again`],i=NC(e);i!=null&&(r.push(rc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=LC(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` +`)}function zC(e){return String(e&&e.cost_source||``).trim()}function BC(e){let t=zC(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function VC(e){switch(zC(e)){case`openrouter_credits`:return`Costs from OpenRouter USD-based credits.`;case`xai_cost_in_usd_ticks`:return`Costs from xAI usage.cost_in_usd_ticks.`;default:return``}}function HC(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function UC(e){let t=HC(e);return t===`exact`||t===`semantic`}function WC(e){let t=HC(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function GC(e,t){let n=t?String(t):``;return UC(e)?n?`Saved by cache — not charged +`+n:`Saved by cache — not charged`:n}function KC(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function qC(e){return Number(e&&e.cached_input_tokens||0)>0}function JC(e){return qC(e)?(KC(e)*100).toFixed(1)+`%`:``}function YC(e){if(!qC(e))return``;let t=Number(e.cached_input_tokens||0),n=Number(e.uncached_input_tokens||0),r=Number(e.cache_write_input_tokens||0),i=t+n+r,a=[nc(t)+` cached / `+nc(i)+` input tokens`];return r>0&&a.push(nc(r)+` cache write`),a.join(` +`)}function XC(e){let t=[];if(VC(e)&&(t.push(VC(e)),t.push(``)),t.push(`Input: `+rc(e.input_cost)),t.push(`Output: `+rc(e.output_cost)),e.raw_data){t.push(``);for(let[n,r]of Object.entries(e.raw_data)){let e=n.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase()),i=r&&typeof r==`object`?JSON.stringify(r):nc(r);t.push(e+`: `+i)}}return t.join(` +`)}function ZC(e){return Array.isArray(e&&e.labels)?e.labels:[]}function QC(e,t,n){return(e||[]).length>0||t?!0:(n||[]).some(e=>ZC(e).length>0)}function $C(e){return e&&typeof e.total_tokens==`number`?e.total_tokens:(e&&e.input_tokens||0)+(e&&e.output_tokens||0)}function ew(e,t){return t?e.total_cost||0:$C(e)}function tw(e,t){return[...e||[]].sort((e,n)=>t?(n.total_cost||0)-(e.total_cost||0):ew(n,t)-ew(e,t))}function nw(e){let t=Array.isArray(e)?e:[];if(t.length===0)return!1;if(t.length!==1)return!0;let n=String(t[0]&&t[0].user_path||``).trim();return n!==``&&n!==`/`}function rw(e){return(e||`chart`)===`chart`||e===`stacked`}function iw(e,t,n){let r=tw(e,n),i=e=>Number(e)||0,a=e=>n?Math.min(i(e.cached_input_cost),i(e.input_cost)):i(e.cached_input_tokens),o=e=>n?i(e.input_cost)-a(e):i(e.uncached_input_tokens)+i(e.cached_input_tokens)+i(e.cache_write_input_tokens)>0?i(e.uncached_input_tokens)+i(e.cache_write_input_tokens):i(e.input_tokens),s=e=>i(n?e.output_cost:e.output_tokens),c=e=>n?0:i(e.local_cached_input_tokens),l=e=>n?0:i(e.local_cached_output_tokens),u=r.slice(0,10),d=r.slice(10),f=u.map(t),p=u.map(o),m=u.map(s),h=u.map(a),g=u.map(c),_=u.map(l);if(d.length>0){f.push(`Other`);let e=e=>d.reduce((t,n)=>t+e(n),0);p.push(e(o)),m.push(e(s)),h.push(e(a)),g.push(e(c)),_.push(e(l))}return{labels:f,inputs:p,outputs:m,prompts:h,localIns:g,localOuts:_}}function aw(e){return Math.max(200,e*32+72)}var J=new class{#e=k(`tokens`);get usageMode(){return I(this.#e)}set usageMode(e){A(this.#e,e,!0)}get usageFilterModel(){return bC.usageFilterModel}set usageFilterModel(e){bC.usageFilterModel=e}get usageFilterProvider(){return bC.usageFilterProvider}set usageFilterProvider(e){bC.usageFilterProvider=e}get usageFilterLabel(){return bC.usageFilterLabel}set usageFilterLabel(e){bC.usageFilterLabel=e}get usageFilterUserPath(){return bC.usageFilterUserPath}set usageFilterUserPath(e){bC.usageFilterUserPath=e}#t=k(j({models:[],providers:[],labels:[]}));get usageFacetOptions(){return I(this.#t)}set usageFacetOptions(e){A(this.#t,e,!0)}#n=k(j(SC()));get usageSummary(){return I(this.#n)}set usageSummary(e){A(this.#n,e,!0)}#r=k(j(SC()));get usageSummaryAll(){return I(this.#r)}set usageSummaryAll(e){A(this.#r,e,!0)}#i=k(j([]));get modelUsage(){return I(this.#i)}set modelUsage(e){A(this.#i,e,!0)}#a=k(j([]));get userPathUsage(){return I(this.#a)}set userPathUsage(e){A(this.#a,e,!0)}#o=k(j([]));get labelUsage(){return I(this.#o)}set labelUsage(e){A(this.#o,e,!0)}get usageLog(){return bC.usageLog}set usageLog(e){bC.usageLog=e}get usageLogSearch(){return bC.usageLogSearch}set usageLogSearch(e){bC.usageLogSearch=e}get usageLogHideCached(){return bC.usageLogHideCached}set usageLogHideCached(e){bC.usageLogHideCached=e}#s=k(`chart`);get modelUsageView(){return I(this.#s)}set modelUsageView(e){A(this.#s,e,!0)}#c=k(`chart`);get userPathUsageView(){return I(this.#c)}set userPathUsageView(e){A(this.#c,e,!0)}#l=k(`chart`);get labelUsageView(){return I(this.#l)}set labelUsageView(e){A(this.#l,e,!0)}#u=k(!1);get summaryLoading(){return I(this.#u)}set summaryLoading(e){A(this.#u,e,!0)}#d=k(!1);get modelUsageLoading(){return I(this.#d)}set modelUsageLoading(e){A(this.#d,e,!0)}#f=k(!1);get userPathUsageLoading(){return I(this.#f)}set userPathUsageLoading(e){A(this.#f,e,!0)}#p=k(!1);get labelUsageLoading(){return I(this.#p)}set labelUsageLoading(e){A(this.#p,e,!0)}#m=k(!1);get usageLogLoading(){return I(this.#m)}set usageLogLoading(e){A(this.#m,e,!0)}#h={};#g(e){this.#h[e]&&this.#h[e].abort();let t=new AbortController;return this.#h[e]=t,t}#_(e,t){this.#h[e]===t&&(this.#h[e]=null)}filterQueryStr(e){return wC({model:this.usageFilterModel,provider:this.usageFilterProvider,label:this.usageFilterLabel,user_path:this.usageFilterUserPath},e)}onUsageFilterChanged(){this.fetchUsagePage()}toggleUsageLabelFilter(e){this.usageFilterLabel=this.usageFilterLabel===e?``:e,this.onUsageFilterChanged()}usageLabelChipTitle(e){return this.usageFilterLabel===e?`Clear label filter`:`Filter usage by "`+e+`"`}toggleUsageMode(e){this.usageMode=e,Wo.navigate(`usage`,e===`costs`?`costs`:null)}toggleUsageChartView(e,t){e===`model`&&(this.modelUsageView=t),e===`userPath`&&(this.userPathUsageView=t),e===`label`&&(this.labelUsageView=t)}usageFilterModelOptions(){return EC(this.usageFacetOptions.models,this.usageFilterModel)}usageFilterProviderOptions(){return EC(this.usageFacetOptions.providers,this.usageFilterProvider)}usageFilterLabelOptions(){return EC(this.usageFacetOptions.labels,this.usageFilterLabel)}async fetchUsagePage(){await vs.ensureLoaded();let e=[this.fetchUsagePageSummary(),this.fetchUsageFacetOptions(),this.fetchModelUsage(),this.fetchUserPathUsage(),this.fetchLabelUsage(),this.fetchUsageLog(!0)];Pc.cacheAnalyticsEnabled()&&e.push(Pc.fetchCacheOverview(this.filterQueryStr())),await Promise.all(e)}async fetchUsagePageSummary(){let e=this.#g(`summary`);this.summaryLoading=!0;try{let t=Oc.queryStr()+this.filterQueryStr(),[n,r]=await Promise.all([ps(`/admin/usage/summary?`+t+`&cache_mode=uncached`,{label:`usage page summary`,signal:e.signal}),ps(`/admin/usage/summary?`+t+`&cache_mode=all`,{label:`usage page summary (all)`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.usageSummary=SC(),this.usageSummaryAll=SC();return}this.usageSummary=n.data&&typeof n.data==`object`?n.data:SC(),this.usageSummaryAll=r.data&&typeof r.data==`object`?r.data:SC()}catch(e){if(hs(e))return;console.error(`Failed to fetch usage page summary:`,e),this.usageSummary=SC(),this.usageSummaryAll=SC()}finally{this.#_(`summary`,e),this.#h.summary===null&&(this.summaryLoading=!1)}}async fetchUsageFacetOptions(){let e=this.#g(`facets`);try{let t=async(t,n)=>{let r=await ps(t+`?`+Oc.queryStr()+this.filterQueryStr(n),{label:`usage facet options`,signal:e.signal});return r.stale?null:r.ok&&Array.isArray(r.data)?r.data:[]},n=t(`/admin/usage/models`,`model`),r=!this.usageFilterModel&&!this.usageFilterProvider,[i,a,o]=await Promise.all([n,r?n:t(`/admin/usage/models`,`provider`),t(`/admin/usage/labels`,`label`)]);if(e.signal.aborted||i===null||a===null||o===null)return;this.usageFacetOptions={models:i.map(e=>e&&e.model).filter(Boolean),providers:a.map(e=>fc(e)).filter(Boolean),labels:o.map(e=>e&&e.label).filter(Boolean)}}catch(e){if(hs(e))return;console.error(`Failed to fetch usage facet options:`,e),this.usageFacetOptions={models:[],providers:[],labels:[]}}finally{this.#_(`facets`,e)}}async#v(e,t,n,r,i){let a=this.#g(e);i(!0);try{let e=await ps(t+`?`+Oc.queryStr()+this.filterQueryStr(),{label:n,signal:a.signal});if(e.stale||a.signal.aborted)return;if(!e.ok){r([]);return}r(Array.isArray(e.data)?e.data:[])}catch(e){if(hs(e))return;console.error(`Failed to fetch `+n+`:`,e),r([])}finally{this.#_(e,a),this.#h[e]===null&&i(!1)}}fetchModelUsage(){return this.#v(`modelUsage`,`/admin/usage/models`,`usage models`,e=>this.modelUsage=e,e=>this.modelUsageLoading=e)}fetchUserPathUsage(){return this.#v(`userPathUsage`,`/admin/usage/user-paths`,`usage user paths`,e=>this.userPathUsage=e,e=>this.userPathUsageLoading=e)}fetchLabelUsage(){return this.#v(`labelUsage`,`/admin/usage/labels`,`usage labels`,e=>this.labelUsage=e,e=>this.labelUsageLoading=e)}async fetchUsageLog(e){let t=this.#g(`usageLog`);this.usageLogLoading=!0;try{e&&(this.usageLog.offset=0);let n=Oc.queryStr()+this.filterQueryStr();n+=TC({limit:this.usageLog.limit,offset:this.usageLog.offset,hideCached:this.usageLogHideCached,search:this.usageLogSearch});let r=await ps(`/admin/usage/log?`+n,{label:`usage log`,signal:t.signal});if(r.stale||t.signal.aborted)return;if(!r.ok){this.usageLog=CC();return}let i=r.data&&typeof r.data==`object`?r.data:CC();i.entries||=[],this.usageLog=i}catch(e){if(hs(e))return;console.error(`Failed to fetch usage log:`,e),this.usageLog=CC()}finally{this.#_(`usageLog`,t),this.#h.usageLog===null&&(this.usageLogLoading=!1)}}usageLogNextPage(){this.usageLog.offset+this.usageLog.limit0&&(this.usageLog.offset=Math.max(0,this.usageLog.offset-this.usageLog.limit),this.fetchUsageLog(!1))}};bC.fetchUsage=()=>{Wo.page===`usage`&&J.fetchUsagePage()};var ow=R(`
`);function sw(e,t){E(t,!0);let n=ya(t,`value`,15,``),r=ya(t,`placeholder`,3,``),i=ya(t,`label`,3,``),a=ya(t,`id`,3,void 0),o=ya(t,`oninput`,3,void 0),s=ya(t,`class`,3,``);var c=ow(),l=M(c);G(l,{get icon(){return mo},class:`filter-input-icon`});var u=P(l,2);na(u),T(c),F(()=>{U(c,1,Fi([`filter-input-wrap`,s()]),`svelte-30xz1k`),W(u,`id`,a()),W(u,`placeholder`,r()),W(u,`aria-label`,i())}),L(`input`,u,function(...e){o()?.apply(this,e)}),da(u,n),z(e,c),D()}Hr([`input`]);function cw(e,t=300){let n=null,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>{n=null,e(...r)},t)};return r.cancel=()=>{clearTimeout(n),n=null},r}var lw=R(``),uw=R(``),dw=R(`
`);function fw(e,t){E(t,!0);let n=cw(()=>J.onUsageFilterChanged());An(()=>n.cancel);var r=dw(),i=M(r),a=M(i);a.value=a.__value=``,H(P(a),16,()=>J.usageFilterModelOptions(),e=>e,(e,t)=>{var n=lw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(i);var o=P(i,2),s=M(o);s.value=s.__value=``,H(P(s),16,()=>J.usageFilterProviderOptions(),e=>e,(e,t)=>{var n=lw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(o);var c=P(o,2),l=e=>{var t=uw(),n=M(t);n.value=n.__value=``,H(P(n),16,()=>J.usageFilterLabelOptions(),e=>e,(e,t)=>{var n=lw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(t),L(`change`,t,()=>J.onUsageFilterChanged()),Gi(t,()=>J.usageFilterLabel,e=>J.usageFilterLabel=e),z(e,t)},u=O(()=>J.usageFilterLabelOptions().length>0);V(c,e=>{I(u)&&e(l)}),sw(P(c,2),{class:`usage-page-filters-user-path`,placeholder:`User path /team/alpha`,label:`Filter by user path`,get oninput(){return n},get value(){return J.usageFilterUserPath},set value(e){J.usageFilterUserPath=e}}),T(r),L(`change`,i,()=>J.onUsageFilterChanged()),Gi(i,()=>J.usageFilterModel,e=>J.usageFilterModel=e),L(`change`,o,()=>J.onUsageFilterChanged()),Gi(o,()=>J.usageFilterProvider,e=>J.usageFilterProvider=e),z(e,r),D()}Hr([`change`]);var pw=R(`
Cache Saved
Cache Hits
`,1);function mw(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=pw(),n=N(t),r=P(M(n),2),i=M(r,!0);T(r),T(n);var a=P(n,2),o=P(M(a),2),s=M(o,!0);T(o),T(a),F((e,t)=>{B(i,e),B(s,t)},[()=>rc(Pc.cacheOverview.summary.total_saved_cost),()=>nc(Pc.cacheOverview.summary.total_hits)]),z(e,t)},a=O(()=>Pc.cacheAnalyticsEnabled());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}var hw=R(` `),gw=R(`
Pro Saved
`),_w=R(`
Total Requests
Estimated Cost
`);function vw(e,t){E(t,!0);let n=O(()=>MC(J.usageSummary)),r=O(()=>FC(J.usageSummary,J.usageMode)),i=O(()=>LC(J.usageSummary,J.usageMode));var a=_w(),o=M(a),s=P(M(o),2),c=M(s),l=e=>{vS(e,{size:18,label:`Loading usage summary`})},u=e=>{var t=Zr();F(e=>B(t,e),[()=>nc(OC(J.usageSummary,J.usageSummaryAll,J.usageLogHideCached))]),z(e,t)};V(c,e=>{J.summaryLoading?e(l):e(u,-1)}),T(s),T(o);var d=P(o,2),f=P(M(d),2),p=M(f),m=e=>{vS(e,{size:18,label:`Loading usage summary`})},h=e=>{var t=Zr();F(e=>B(t,e),[()=>rc(J.usageSummary.total_cost)]),z(e,t)};V(p,e=>{J.summaryLoading?e(m):e(h,-1)}),T(f),T(d);var g=P(d,2),_=e=>{var t=gw(),n=P(M(t),2),a=M(n),o=M(a,!0);T(a);var s=P(a,2),c=e=>{var t=hw(),n=M(t,!0);T(t),F(()=>B(n,I(i))),z(e,t)};V(s,e=>{I(i)&&e(c)}),T(n),T(t),F(e=>{W(n,`title`,e),B(o,I(r))},[()=>RC(J.usageSummary,J.usageMode)]),z(e,t)};V(g,e=>{I(n)&&e(_)}),mw(P(g,2),{}),T(a),F((e,t)=>{W(s,`title`,e),W(f,`title`,t)},[()=>kC(J.usageSummary,J.usageSummaryAll,J.usageLogHideCached),()=>AC(J.usageSummary)]),z(e,a),D()}function yw(e,t,n,r){let{stacked:i=!1,costs:a=!1,resolve:o=e=>e}=r||{},s=e=>a?`$`+Math.abs(e).toFixed(2):oc(Math.abs(e)),c=e=>a?`$`+Math.abs(e).toFixed(4):Math.abs(e).toLocaleString(),l=e=>e.map(e=>i?Math.abs(e):-Math.abs(e)),u=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:`transparent`,borderWidth:0,borderRadius:4,maxBarThickness:22}),d=e=>(e||[]).some(e=>Math.abs(e)>0),f=[u(a?`Input Cost`:`Input Tokens`,l(n.inputs),o(`var(--token-input)`)),u(a?`Output Cost`:`Output Tokens`,n.outputs,o(`var(--token-output)`))];return d(n.prompts)&&f.push(u(a?`Prompt Cached Cost`:`Prompt Cached`,l(n.prompts),o(`var(--token-prompt)`))),!a&&d(n.localIns)&&f.push(u(`Locally Cached (Input)`,l(n.localIns),o(`var(--token-local)`))),!a&&d(n.localOuts)&&f.push(u(`Locally Cached (Output)`,n.localOuts,o(`var(--token-local)`))),{type:`bar`,data:{labels:t,datasets:f},options:{indexAxis:`y`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:{top:8}},scales:{x:{stacked:!0,beginAtZero:!0,grid:i?{color:e.grid}:{color:t=>t.tick&&t.tick.value===0?e.text:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),callback:e=>s(e)}},y:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Ny(),autoSkip:!1}}},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{label:e=>e.dataset.label+`: `+c(e.parsed.x),footer:e=>{let t=0;return e.forEach(e=>{t+=Math.abs(Number(e.parsed.x))||0}),`Total: `+c(t)}})}}}}var bw=R(`
`),xw=R(`

`),Sw=R(`

`,1),Cw=R(`
`),ww=R(`Model Provider`,1),Tw=R(`User Path`),Ew=R(`Label Requests`,1),Dw=R(` `,1),Ow=R(` `),kw=R(` `,1),Aw=R(` `),jw=R(`
Input TokensOutput TokensPrompt CachedLocal CachedTotal TokensInput CostOutput CostTotal Cost
`),Mw=R(`
`),Nw=R(`
`);function Pw(e,t){E(t,!0);let n=e=>{var n=bw(),r=M(n);let a;var o=P(r,2);let s;var l=P(o,2);let u;T(n),F(()=>{W(n,`aria-label`,I(i).group),a=U(r,1,`chart-view-btn svelte-1kee4g8`,null,a,{active:I(c)===`chart`}),W(r,`aria-pressed`,I(c)===`chart`),W(r,`aria-label`,`Show ${I(i).noun??``} chart`),s=U(o,1,`chart-view-btn svelte-1kee4g8`,null,s,{active:I(c)===`stacked`}),W(o,`aria-pressed`,I(c)===`stacked`),W(o,`aria-label`,`Show ${I(i).noun??``} stacked chart`),u=U(l,1,`chart-view-btn svelte-1kee4g8`,null,u,{active:I(c)===`table`}),W(l,`aria-pressed`,I(c)===`table`),W(l,`aria-label`,`Show ${I(i).noun??``} table`)}),L(`click`,r,()=>J.toggleUsageChartView(t.kind,`chart`)),L(`click`,o,()=>J.toggleUsageChartView(t.kind,`stacked`)),L(`click`,l,()=>J.toggleUsageChartView(t.kind,`table`)),z(e,n)},r={model:{group:`Model usage view`,noun:`model usage`,tokensTitle:`Token Usage by Model`,costsTitle:`Cost by Model`},userPath:{group:`User path usage view`,noun:`user path usage`,tokensTitle:`Usage by User Path`,costsTitle:`Cost by User Path`},label:{group:`Label usage view`,noun:`label usage`,tokensTitle:`Usage by Label`,costsTitle:`Cost by Label`}},i=O(()=>r[t.kind]),a=O(()=>t.kind===`model`?e=>mc(e):t.kind===`userPath`?e=>e.user_path||`/`:e=>e.label);function o(e){return t.kind===`model`?(e.provider_name||e.provider||`-`)+`/`+e.model:t.kind===`userPath`?e.user_path||`/`:e.label}let s=O(()=>t.kind===`model`?J.modelUsage:t.kind===`userPath`?J.userPathUsage:J.labelUsage),c=O(()=>t.kind===`model`?J.modelUsageView:t.kind===`userPath`?J.userPathUsageView:J.labelUsageView),l=O(()=>t.kind===`model`?J.modelUsageLoading:t.kind===`userPath`?J.userPathUsageLoading:J.labelUsageLoading),u=O(()=>J.usageMode===`costs`),d=O(()=>t.kind===`userPath`?nw(I(s)):I(s).length>0),f=O(()=>I(u)?I(i).costsTitle:I(i).tokensTitle),p=O(()=>iw(I(s),I(a),I(u))),m=O(()=>tw(I(s),I(u)));function h(){return rw(I(c))?yw(My(),I(p).labels,I(p),{stacked:I(c)===`stacked`,costs:I(u),resolve:Fy}):null}var g=Qr(),_=N(g),v=e=>{var r=Mw(),a=M(r),s=M(a),u=e=>{US(e,{copyId:`label-usage-help-copy`,label:`label usage help`,text:`One request can have multiple labels. Such a request counts once under each of its labels, so label rows can overlap and add up to more than the period totals.`,title:e=>{var t=xw(),n=M(t,!0);T(t),F(()=>B(n,I(f))),z(e,t)},extra:e=>{var t=Qr(),n=N(t),r=e=>{vS(e,{size:14,get label(){return`Loading ${I(i).noun??``}`}})};V(n,e=>{I(l)&&e(r)}),z(e,t)},$$slots:{title:!0,extra:!0}})},d=e=>{var t=Sw(),n=N(t),r=M(n,!0);T(n);var a=P(n,2),o=e=>{vS(e,{size:14,get label(){return`Loading ${I(i).noun??``}`}})};V(a,e=>{I(l)&&e(o)}),F(()=>B(r,I(f))),z(e,t)};V(s,e=>{t.kind===`label`?e(u):e(d,-1)});var g=P(s,2);n(g),T(a);var _=P(a,2),v=e=>{var t=Cw();let n;Dy(M(t),{build:h}),T(t),F(e=>n=Hi(t,``,n,e),[()=>({height:`${aw(I(p).labels.length)??``}px`})]),z(e,t)},y=O(()=>rw(I(c))),b=e=>{var n=jw(),r=M(n),i=M(r),a=M(i),s=M(a),c=e=>{var t=ww();Ue(2),z(e,t)},l=e=>{z(e,Tw())},u=e=>{var t=Ew();Ue(2),z(e,t)};V(s,e=>{t.kind===`model`?e(c):t.kind===`userPath`?e(l,1):e(u,-1)}),Ue(8),T(a),T(i);var d=P(i);H(d,21,()=>I(m),e=>o(e),(e,n)=>{var r=Aw(),i=M(r),a=e=>{var t=Dw(),r=N(t),i=M(r,!0);T(r);var a=P(r,2),o=M(a),s=M(o,!0);T(o),T(a),F(e=>{B(i,I(n).model||`-`),B(s,e)},[()=>fc(I(n))||`-`]),z(e,t)},o=e=>{var t=Ow(),r=M(t,!0);T(t),F(()=>B(r,I(n).user_path||`/`)),z(e,t)},s=e=>{var t=kw(),r=N(t),i=M(r);let a;var o=M(i,!0);T(i),T(r);var s=P(r,2),c=M(s,!0);T(s),F((e,t,r)=>{a=U(i,1,`usage-label-chip`,null,a,{active:J.usageFilterLabel===I(n).label}),Hi(i,`--label-color: ${e??``}`),W(i,`title`,t),B(o,I(n).label),B(c,r)},[()=>Ry(I(n).label),()=>J.usageLabelChipTitle(I(n).label),()=>nc(I(n).requests)]),L(`click`,i,()=>J.toggleUsageLabelFilter(I(n).label)),z(e,t)};V(i,e=>{t.kind===`model`?e(a):t.kind===`userPath`?e(o,1):e(s,-1)});var c=P(i),l=M(c,!0);T(c);var u=P(c),d=M(u,!0);T(u);var f=P(u),p=M(f,!0);T(f);var m=P(f),h=M(m,!0);T(m);var g=P(m),_=M(g,!0);T(g);var v=P(g),y=M(v,!0);T(v);var b=P(v),x=M(b,!0);T(b);var S=P(b),C=M(S,!0);T(S),T(r),F((e,t,n,r,i,a,o,s,c,u,g)=>{B(l,e),B(d,t),W(f,`title`,n),B(p,r),W(m,`title`,`${i??``} input + ${a??``} output`),B(h,o),B(_,s),B(y,c),B(x,u),B(C,g)},[()=>nc(I(n).input_tokens),()=>nc(I(n).output_tokens),()=>I(n).cached_input_cost==null?``:`~`+rc(I(n).cached_input_cost)+` at current cached-input pricing`,()=>nc(I(n).cached_input_tokens||0),()=>nc(I(n).local_cached_input_tokens||0),()=>nc(I(n).local_cached_output_tokens||0),()=>nc((I(n).local_cached_input_tokens||0)+(I(n).local_cached_output_tokens||0)),()=>nc($C(I(n))),()=>rc(I(n).input_cost),()=>rc(I(n).output_cost),()=>rc(I(n).total_cost)]),z(e,r)}),T(d),T(r),T(n),z(e,n)};V(_,e=>{I(y)?e(v):e(b,-1)}),T(r),z(e,r)},y=e=>{var t=Nw();vS(M(t),{size:20,get label(){return`Loading ${I(i).noun??``}`}}),T(t),z(e,t)};V(_,e=>{I(d)?e(v):I(l)&&e(y,1)}),z(e,g),D()}Hr([`click`]);var Fw=R(``);function Iw(e,t){E(t,!0);let n=ya(t,`total`,3,0),r=ya(t,`offset`,3,0),i=ya(t,`limit`,3,25);var a=Qr(),o=N(a),s=e=>{var a=Fw(),o=M(a),s=M(o);T(o);var c=P(o,2),l=M(c),u=P(l,2);T(c),T(a),F(e=>{B(s,`Showing ${r()+1}-${e??``} of ${n()??``}`),l.disabled=r()===0,u.disabled=r()+i()>=n()},[()=>Math.min(r()+i(),n())]),L(`click`,l,()=>t.onprev?.()),L(`click`,u,()=>t.onnext?.()),z(e,a)};V(o,e=>{n()>0&&e(s)}),z(e,a),D()}Hr([`click`]);var Lw=(e,t=f)=>{var n=Qr(),r=N(n),i=e=>{var n=zw();H(n,20,()=>ZC(t()),e=>e,(e,t)=>{var n=Rw();let r;var i=M(n,!0);T(n),F((e,a)=>{r=U(n,1,`usage-label-chip`,null,r,{active:J.usageFilterLabel===t}),Hi(n,`--label-color: ${e??``}`),W(n,`title`,a),B(i,t)},[()=>Ry(t),()=>J.usageLabelChipTitle(t)]),L(`click`,n,()=>J.toggleUsageLabelFilter(t)),z(e,n)}),T(n),z(e,n)},a=O(()=>ZC(t()).length>0),o=e=>{z(e,Bw())};V(r,e=>{I(a)?e(i):e(o,-1)}),z(e,n)},Rw=R(``),zw=R(`
`),Bw=R(`-`),Vw=R(`Labels`),Hw=R(`Cost`),Uw=R(``),Ww=R(` `),Gw=R(``),Kw=R(` `),qw=R(` `),Jw=R(`
TimestampProviderModelUser PathCacheProvider Cache
`),Yw=R(`
`),Xw=R(`
`),Zw=R(`

Request Log

`);function Qw(e,t){E(t,!0);let n=O(()=>J.usageMode===`costs`),r=O(()=>QC(J.labelUsage,J.usageFilterLabel,J.usageLog.entries)),i=cw(()=>J.fetchUsageLog(!0));An(()=>i.cancel);var a=Zw(),o=P(M(a),2),s=M(o);sw(M(s),{placeholder:`Search by request ID, model, provider...`,label:`Search by request ID, model, provider`,get oninput(){return i},get value(){return J.usageLogSearch},set value(e){J.usageLogSearch=e}}),T(s);var c=P(s,2),l=M(c),u=M(l);na(u),Ue(2),T(l),T(c),T(o);var d=P(o,2),f=e=>{var t=Jw(),i=M(t),a=M(i),o=M(a),s=P(M(o),4),c=e=>{z(e,Vw())};V(s,e=>{I(r)&&e(c)});var l=P(s,3),u=M(l,!0);T(l);var d=P(l),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=e=>{z(e,Hw())};V(h,e=>{I(n)||e(g)}),T(o),T(a);var _=P(a);H(_,21,()=>J.usageLog.entries,e=>e.id,(e,t)=>{var i=qw();let a;var o=M(i),s=M(o,!0);T(o);var c=P(o),l=M(c),u=M(l,!0);T(l),T(c);var d=P(c),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=e=>{var n=Uw();Lw(M(n),()=>I(t)),T(n),z(e,n)};V(h,e=>{I(r)&&e(g)});var _=P(h),v=M(_,!0);T(_);var y=P(_),b=M(y),x=e=>{var n=Ww(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>JC(I(t))]),z(e,n)},S=O(()=>qC(I(t))),C=e=>{z(e,Bw())};V(b,e=>{I(S)?e(x):e(C,-1)}),T(y);var w=P(y),ee=M(w,!0);T(w);var te=P(w),ne=M(te,!0);T(te);var re=P(te),ie=M(re),ae=M(ie,!0);T(ie);var oe=P(ie,2),se=e=>{{let n=O(()=>VC(I(t)));G(e,{get icon(){return Wa},class:`cost-source-icon`,get title(){return I(n)}})}},ce=O(()=>I(n)&&BC(I(t)));V(oe,e=>{I(ce)&&e(se)});var le=P(oe,2),ue=e=>{G(e,{get icon(){return qa},class:`cache-savings-icon`})},de=O(()=>I(n)&&UC(I(t)));V(le,e=>{I(de)&&e(ue)});var fe=P(le,2),pe=e=>{var n=Gw();F(()=>W(n,`title`,I(t).costs_calculation_caveat)),z(e,n)};V(fe,e=>{I(n)&&I(t).costs_calculation_caveat&&e(pe)}),T(re);var me=P(re),he=e=>{var n=Kw(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{{let n=O(()=>VC(I(t)));G(e,{get icon(){return Wa},class:`cost-source-icon`,get title(){return I(n)}})}},s=O(()=>BC(I(t)));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{G(e,{get icon(){return qa},class:`cache-savings-icon`})},u=O(()=>UC(I(t)));V(c,e=>{I(u)&&e(l)});var d=P(c,2),f=e=>{var n=Gw();F(()=>W(n,`title`,I(t).costs_calculation_caveat)),z(e,n)};V(d,e=>{I(t).costs_calculation_caveat&&e(f)}),T(n),F((e,t)=>{W(n,`title`,e),B(i,t)},[()=>GC(I(t),XC(I(t))),()=>rc(I(t).total_cost)]),z(e,n)};V(me,e=>{I(n)||e(he)}),T(i),F((e,n,r,c,l,d,p,h,g,_,b,x,S)=>{a=U(i,1,`svelte-hg4ill`,null,a,e),W(o,`title`,n),B(s,r),B(u,c),B(f,I(t).model),B(m,I(t).user_path||`-`),B(v,l),W(y,`title`,d),W(w,`title`,p),B(ee,h),W(te,`title`,g),B(ne,_),W(re,`title`,b),W(ie,`title`,x),B(ae,S)},[()=>({"usage-log-row-cached":UC(I(t))}),()=>uc(I(t).timestamp),()=>ss.formatTimestamp(I(t).timestamp),()=>fc(I(t))||`-`,()=>WC(I(t)),()=>YC(I(t)),()=>I(n)?nc(I(t).input_tokens)+` tokens`:``,()=>I(n)?rc(I(t).input_cost):nc(I(t).input_tokens),()=>I(n)?nc(I(t).output_tokens)+` tokens`:``,()=>I(n)?rc(I(t).output_cost):nc(I(t).output_tokens),()=>I(n)?GC(I(t),``):``,()=>I(n)?GC(I(t),nc(I(t).total_tokens)+` tokens +`+XC(I(t))):``,()=>I(n)?rc(I(t).total_cost):nc(I(t).total_tokens)]),z(e,i)}),T(_),T(i),T(t),F(()=>{B(u,I(n)?`Input Cost`:`Input`),B(f,I(n)?`Output Cost`:`Output`),B(m,I(n)?`Total Cost`:`Total`)}),z(e,t)},p=e=>{var t=Yw();vS(M(t),{size:20,label:`Loading request log`}),T(t),z(e,t)},m=e=>{var t=Xw();xS(M(t),{}),T(t),z(e,t)};V(d,e=>{J.usageLog.entries.length>0?e(f):J.usageLogLoading?e(p,1):e(m,-1)}),Iw(P(d,2),{get total(){return J.usageLog.total},get offset(){return J.usageLog.offset},get limit(){return J.usageLog.limit},onprev:()=>J.usageLogPrevPage(),onnext:()=>J.usageLogNextPage()}),T(a),L(`change`,u,()=>J.fetchUsageLog(!0)),fa(u,()=>J.usageLogHideCached,e=>J.usageLogHideCached=e),z(e,a),D()}Hr([`click`,`change`]);var $w=R(`
`);function eT(e,t){E(t,!0);let n=`usage`;An(()=>{K.refreshTick,Wo.page===n&&(J.fetchUsagePage(),bC.ensureLiveLogs())}),An(()=>{Wo.page===n&&(J.usageMode=Wo.sub===`costs`?`costs`:`tokens`)});var r=$w(),i=P(M(r),2),a=M(i);Ay(a,{ariaLabel:`Usage mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return J.usageMode},onchange:e=>J.toggleUsageMode(e)}),Zc(P(a,2),{onchange:()=>J.fetchUsagePage()}),T(i);var o=P(i,2);fw(o,{});var s=P(o,2);vw(s,{});var c=P(s,2),l=M(c);Pw(l,{kind:`model`});var u=P(l,2);Pw(u,{kind:`userPath`}),Pw(P(u,2),{kind:`label`}),T(c),Qw(P(c,2),{}),T(r),z(e,r),D()}var tT=R(`
`);function nT(e,t){let n=ya(t,`label`,3,`Loading...`),r=ya(t,`class`,3,``);var i=tT(),a=P(M(i),2),o=M(a,!0);T(a),T(i),F(()=>{U(i,1,Fi([`loading-state`,r()]),`svelte-hzxv1d`),B(o,n())}),z(e,i)}var rT=R(``);function iT(e,t){let n=ya(t,`label`,3,``),r=ya(t,`class`,3,``),i=ya(t,`disabled`,3,!1);var a=rT();gi(M(a),()=>t.children??f),T(a),F(()=>{U(a,1,Fi([`table-action-btn`,r()])),W(a,`aria-label`,n()),W(a,`title`,n()),a.disabled=i()}),L(`click`,a,function(...e){t.onclick?.apply(this,e)}),z(e,a)}Hr([`click`]);async function aT(e,{label:t,errorFallback:n=`Unable to load ${t}.`,unavailableStatuses:r=[503],normalize:i=e=>Array.isArray(e)?e:[],options:a}){let o;try{o=await ps(e,{...a||{},label:t})}catch(e){return hs(e)||console.error(`Failed to fetch ${t}:`,e),{status:`error`,items:[],error:n,result:null}}return o.stale?{status:`stale`,items:[],error:``,result:o}:r.includes(o.status)?{status:`unavailable`,items:[],error:``,result:o}:o.ok?{status:`ok`,items:i(o.data),error:``,result:o}:{status:`error`,items:[],error:o.status===401?``:cs(o.data,n),result:o}}async function oT(e,t,n,{label:r,errorFallback:i=`Unable to ${r}.`,unavailableStatuses:a=[503],unavailableMessage:o=`This feature is unavailable on the gateway.`,options:s}){let c;try{c=await ms(e,t,n,{...s||{},label:r})}catch(e){return hs(e)||console.error(`Failed to ${r}:`,e),{status:`error`,error:i,result:null}}return c.stale?{status:`stale`,error:``,result:c}:a.includes(c.status)?{status:`unavailable`,error:o,result:c}:c.ok?{status:`ok`,error:``,result:c}:{status:`error`,error:c.status===401?`Authentication required.`:cs(c.data,i),result:c}}function sT(){return{scope:`user_path`,subject:`/`,period:`daily`,period_seconds:86400,amount:``,source:`manual`}}function cT(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},label:{label:`Label`,chip:`label`,fieldLabel:`Label`,placeholder:`Mobile-App-iOS`}};return t[e]||t.user_path}function lT(){return[`user_path`,`label`].map(e=>({value:e,label:cT(e).label}))}function uT(e){return String(e&&e.scope||``).trim()||`user_path`}function dT(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function fT(e){return cT(uT(e)).chip}function pT(e){return uT(e)===`label`?`budget-label`:`budget-user-path`}function mT(e){return cT(String(e&&e.scope||``)).fieldLabel}function hT(e){return cT(String(e&&e.scope||``)).placeholder}function gT(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function _T(){return[{value:`hourly`,label:`Hourly`},{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`},{value:`custom`,label:`Custom seconds`}]}function vT(e){switch(String(e||``).trim().toLowerCase()){case`hourly`:return 3600;case`daily`:return 86400;case`weekly`:return 604800;case`monthly`:return 2592e3;default:return 0}}function yT(e){switch(Number(e||0)){case 3600:return`hourly`;case 86400:return`daily`;case 604800:return`weekly`;case 2592e3:return`monthly`;default:return`custom`}}function bT(e){return uT(e)+`:`+dT(e)+`:`+String(e&&e.period_seconds||``)}function xT(e,t){if(!t||!Array.isArray(e))return null;let n=bT(t);return e.find(e=>bT(e)===n)||null}function ST(e){let t=String(e||``).trim();if(!t)return`User path is required.`;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function CT(e){if(ST(e))return``;let t=String(e||``).trim(),n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function wT(e){return`/`+String(e||``).trimStart().replace(/^\/+/,``)}function TT(e){return Array.isArray(e)?e:e&&Array.isArray(e.budgets)?e.budgets:[]}function ET(e){let t=Number(e&&e.period_seconds||0);return[dT(e),fT(e),UT(e),yT(t),t?String(t)+`s`:``,t?String(t)+` seconds`:``].join(` `).toLowerCase()}var DT={user_path:0,label:1};function OT(e,t){let n=Array.isArray(e)?e.slice():[],r=String(t||`subject`);return n.sort((e,t)=>{let n=(DT[uT(e)]||0)-(DT[uT(t)]||0),i=dT(e).localeCompare(dT(t)),a=Number(t&&t.period_seconds||0)-Number(e&&e.period_seconds||0);return r===`period`?a||n||i:n||i||a}),n}function kT(e,t,n){let r=Array.isArray(e)?e:[],i=String(t||``).trim().toLowerCase();return OT(i?r.filter(e=>ET(e).includes(i)):r.slice(),n)}function AT(e){let t=e||{},n=uT(t),r=String(t.subject||``).trim();if(n===`user_path`){let e=ST(r);if(e)return{payload:null,error:e}}else if(!r)return{payload:null,error:`Label is required.`};let i=Number(t.amount);if(!Number.isFinite(i)||i<=0)return{payload:null,error:`Amount must be greater than 0.`};let a=String(t.period||``).trim(),o=vT(a);return a===`custom`&&(o=Number(t.period_seconds)),!Number.isFinite(o)||o<=0?{payload:null,error:`Period seconds must be greater than 0.`}:{payload:{scope:n,subject:n===`user_path`?CT(r):r,period_seconds:Math.trunc(o),amount:i,source:String(t.source||`manual`).trim()||`manual`},error:``}}function jT(e){return{scope:uT(e),subject:dT(e),budget_key:{period_seconds:e.period_seconds},amount:e.amount}}function MT(e){return{scope:uT(e),subject:dT(e),budget_key:{period_seconds:e.period_seconds}}}function NT(e){return{scope:uT(e),subject:dT(e),period_seconds:e.period_seconds}}function PT(e){return rc(e)}function FT(e,t){let n=e||{},r=t||{};return`A budget for "`+((dT(n)||dT(r))+` `+UT({period_seconds:n.period_seconds||r.period_seconds,period_label:r.period_label}))+`" already exists. Saving will override the current `+PT(r.amount)+` limit with `+PT(n.amount)+`.`}function IT(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:t}function LT(e,t){let n=IT(e);return Math.round((t?Math.min(n,1):n)*1e3)/10}function RT(e){return IT(e&&e.usage_ratio)}function zT(e){return LT(RT(e),!0)}function BT(e){return LT(e&&e.period_ratio,!0)}function VT(e){return LT(RT(e),!1).toFixed(1).replace(/\.0$/,``)+`%`}function HT(e){return BT(e).toFixed(1).replace(/\.0$/,``)+`%`}function UT(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`Hourly`;case 86400:return`Daily`;case 604800:return`Weekly`;case 2592e3:return`Monthly`;default:{let n=String(e&&e.period_label||``).trim();return n?`Custom `+n:`Custom `+String(t||``)+`s`}}}function WT(e){switch(Number(e&&e.period_seconds||0)){case 3600:return`budget-period-label-hourly`;case 86400:return`budget-period-label-daily`;case 604800:return`budget-period-label-weekly`;case 2592e3:return`budget-period-label-monthly`;default:return`budget-period-label-custom`}}function GT(e){return WT(e).replace(`budget-period-label-`,`budget-bar-fill-period-`)}function KT(e){return WT(e).replace(`budget-period-label-`,`budget-bar-track-period-`)}function qT(e){switch(Number(e&&e.period_seconds||0)){case 3600:return Ga;case 86400:return Co;case 604800:return Fa;case 2592e3:return Ia;default:return _o}}function JT(e){let t=Math.max(0,Math.trunc(Number(e||0)));return t+` `+(t===1?`second`:`seconds`)}function YT(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`1 hour`;case 86400:return`1 day`;case 604800:return`1 week`;case 2592e3:return`1 month`;default:return JT(t)}}function XT(e){return String(e&&e.source||``).trim()||`manual`}function ZT(e){let t=XT(e).toLowerCase();return t===`manual`?`Created from the dashboard.`:t===`config`?`Loaded from configuration.`:`Budget source: `+t}function QT(e){let t=Number(e&&e.remaining);return Number.isFinite(t)?t<0?rc(Math.abs(t))+` over`:rc(t)+` remaining`:``}var Y=new class{#e=k(j([]));get budgets(){return I(this.#e)}set budgets(e){A(this.#e,e,!0)}#t=k(!0);get budgetsAvailable(){return I(this.#t)}set budgetsAvailable(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get filter(){return I(this.#r)}set filter(e){A(this.#r,e,!0)}#i=k(`subject`);get sortBy(){return I(this.#i)}set sortBy(e){A(this.#i,e,!0)}#a=k(``);get error(){return I(this.#a)}set error(e){A(this.#a,e,!0)}#o=k(!1);get formOpen(){return I(this.#o)}set formOpen(e){A(this.#o,e,!0)}#s=k(!1);get formSubmitting(){return I(this.#s)}set formSubmitting(e){A(this.#s,e,!0)}#c=k(``);get formError(){return I(this.#c)}set formError(e){A(this.#c,e,!0)}#l=k(!1);get editing(){return I(this.#l)}set editing(e){A(this.#l,e,!0)}#u=k(j(sT()));get form(){return I(this.#u)}set form(e){A(this.#u,e,!0)}#d=k(!1);get overrideDialogOpen(){return I(this.#d)}set overrideDialogOpen(e){A(this.#d,e,!0)}#f=k(null);get overridePendingPayload(){return I(this.#f)}set overridePendingPayload(e){A(this.#f,e,!0)}#p=k(null);get overrideExistingBudget(){return I(this.#p)}set overrideExistingBudget(e){A(this.#p,e,!0)}#m=k(``);get resettingKey(){return I(this.#m)}set resettingKey(e){A(this.#m,e,!0)}#h=k(``);get deletingKey(){return I(this.#h)}set deletingKey(e){A(this.#h,e,!0)}#g=k(!1);get resetAllLoading(){return I(this.#g)}set resetAllLoading(e){A(this.#g,e,!0)}#_=null;managementEnabled(){return vs.budgetsVisible()}filteredBudgets(){return kT(this.budgets,this.filter,this.sortBy)}async fetchBudgetsPage(){if(await vs.ensureLoaded(),!this.managementEnabled()){this.budgets=[],this.budgetsAvailable=!1,this.error=``;return}return this.#_||=this.fetchBudgets().finally(()=>{this.#_=null}),this.#_}async fetchBudgets(){this.loading=!0,this.error=``;let e=await aT(`/admin/budgets`,{label:`budgets`,errorFallback:`Unable to load budgets.`,normalize:TT});if(this.loading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.budgetsAvailable=!1,this.budgets=[];return}if(!e.result){this.budgets=[],this.error=e.error;return}if(this.budgetsAvailable=!0,e.status===`error`){this.error=e.error;return}this.budgets=e.items}}openForm(e){if(this.editing=!!e,this.formError=``,e){let t=Number(e.period_seconds||0);this.form={scope:uT(e),subject:dT(e),period:yT(t),period_seconds:t,amount:String(e.amount||``),source:String(e.source||`manual`)}}else this.form=sT();this.formOpen=!0}syncPeriodSeconds(){let e=vT(String(this.form.period||``).trim());e>0&&(this.form.period_seconds=e)}setFormSubject(e){this.form.subject=this.form.scope===`label`?String(e??``):wT(e)}syncScope(){gT(this.form)}closeForm(){this.closeOverrideDialog(),this.formOpen=!1,this.formSubmitting=!1,this.formError=``,this.editing=!1,this.form=sT()}async submitForm(){if(this.formSubmitting)return;let{payload:e,error:t}=AT(this.form);if(!e){this.formError=t;return}if(!this.editing){let t=xT(this.budgets,e);if(t){this.openOverrideDialog(t,e);return}}await this.saveBudgetPayload(e)}async saveBudgetPayload(e){if(this.formSubmitting||!e)return;this.formSubmitting=!0,this.formError=``;let t=await oT(`/admin/budgets`,`PUT`,jT(e),{label:`save budget`,errorFallback:`Unable to save budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.formSubmitting=!1,t.status!==`stale`){if(t.status===`unavailable`){this.budgetsAvailable=!1,this.formError=t.error;return}if(t.status===`error`){this.formError=t.error;return}this.closeForm(),q.success(`Budget saved.`),this.fetchBudgets()}}openOverrideDialog(e,t){this.overrideExistingBudget=e||null,this.overridePendingPayload=t||null,this.overrideDialogOpen=!0}closeOverrideDialog(){this.overrideDialogOpen=!1,this.overridePendingPayload=null,this.overrideExistingBudget=null}async confirmOverride(){if(!this.overridePendingPayload){this.closeOverrideDialog();return}let e=this.overridePendingPayload;this.closeOverrideDialog(),await this.saveBudgetPayload(e)}async resetBudget(e){if(!e)return;let t=bT(e);if(this.resettingKey===t)return;let n=dT(e)+` `+UT(e);if(!confirm(`Reset budget "`+n+`"?`))return;this.resettingKey=t;let r=await oT(`/admin/budgets/reset-one`,`POST`,NT(e),{label:`reset budget`,errorFallback:`Unable to reset budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.resettingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,q.error(r.error);return}if(r.status===`error`){q.error(r.error);return}q.success(`Budget reset.`),this.fetchBudgets()}}async deleteBudget(e){if(!e)return;let t=bT(e);if(this.deletingKey===t)return;let n=dT(e)+` `+UT(e);if(!confirm(`Delete budget "`+n+`"? This cannot be undone.`))return;this.deletingKey=t;let r=await oT(`/admin/budgets`,`DELETE`,MT(e),{label:`delete budget`,errorFallback:`Unable to delete budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.deletingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,q.error(r.error);return}if(r.status===`error`){q.error(r.error);return}this.budgets=TT(r.result.data),q.success(`Budget deleted.`)}}openResetDialog(){Ps.open({title:`Reset Budgets`,titleId:`budgetResetDialogTitle`,inputId:`budget-reset-confirmation`,requiredText:`reset`,confirmLabel:`Reset All Budgets`,icon:fo,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.resetAllBudgets()})}async resetAllBudgets(){if(this.resetAllLoading)return;this.resetAllLoading=!0;let e=await oT(`/admin/budgets/reset`,`POST`,{confirmation:`reset`},{label:`reset budgets`,errorFallback:`Unable to reset budgets.`,unavailableStatuses:[]});if(this.resetAllLoading=!1,e.status!==`stale`){if(e.status!==`ok`){Ps.error=e.error;return}Ps.close(),q.success(`Budgets reset.`),Wo.page===`budgets`&&this.fetchBudgets()}}},$T=R(` Edit`,1),eE=R(` `,1),tE=R(`
Usage
Period
`),nE=R(`
`);function rE(e,t){E(t,!0);let n=ya(t,`budgets`,19,()=>[]);function r(e){if(!e)return``;let t=ss.formatTimestamp(e);return!t||t===`-`?``:t+` `+ss.effectiveTimeZoneLabel()}var i=nE();H(i,21,n,e=>bT(e),(e,t)=>{var n=tE(),i=M(n),a=M(i),o=M(a),s=M(o),c=e=>{G(e,{get icon(){return wo},class:`budget-scope-icon`})},l=O(()=>uT(I(t))===`label`);V(s,e=>{I(l)&&e(c)});var u=P(s);T(o);var d=P(o,2),f=M(d),p=M(f);{let e=O(()=>qT(I(t)));G(p,{get icon(){return I(e)},class:`budget-period-icon`})}var m=P(p,2),h=M(m,!0);T(m),T(f),T(d);var g=P(d,2),_=M(g),v=M(_),y=M(v,!0);T(v),T(_);var b=P(_,2),x=M(b);iT(x,{label:`Edit budget`,class:`budget-action-btn`,onclick:()=>Y.openForm(I(t)),children:(e,t)=>{var n=$T();G(N(n),{get icon(){return oo},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}});var S=P(x,2);{let e=O(()=>Y.resettingKey===bT(I(t))?`Resetting budget`:`Reset budget`),n=O(()=>Y.resettingKey===bT(I(t)));iT(S,{get label(){return I(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>Y.resetBudget(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=eE(),i=N(r);G(i,{get icon(){return fo},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.resettingKey===bT(I(t))?`Resetting`:`Reset`]),z(e,r)},$$slots:{default:!0}})}var C=P(S,2);{let e=O(()=>Y.deletingKey===bT(I(t))?`Deleting budget`:`Delete budget`),n=O(()=>Y.deletingKey===bT(I(t)));iT(C,{get label(){return I(e)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>Y.deleteBudget(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=eE(),i=N(r);G(i,{get icon(){return Eo},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.deletingKey===bT(I(t))?`Deleting`:`Delete`]),z(e,r)},$$slots:{default:!0}})}T(b),T(g),T(a);var w=P(a,2),ee=M(w),te=M(ee),ne=P(M(te),2),re=M(ne,!0);T(ne),T(te);var ie=P(te,2),ae=M(ie);let oe;var se=P(ae,2),ce=M(se),le=M(ce,!0);T(ce);var ue=P(ce,2),de=M(ue,!0);T(ue),T(se);var fe=P(se,2),pe=M(fe),me=M(pe,!0);T(pe);var he=P(pe,2),ge=M(he,!0);T(he),T(fe),T(ie),T(ee);var _e=P(ee,2),ve=M(_e),ye=P(M(ve),2),be=M(ye,!0);T(ye),T(ve);var xe=P(ve,2),Se=M(xe),Ce=P(Se,2),we=M(Ce),Te=M(we,!0);T(we);var Ee=P(we,2),De=M(Ee,!0);T(Ee);var Oe=P(Ee,2),ke=M(Oe,!0);T(Oe),T(Ce);var Ae=P(Ce,2),je=M(Ae),Me=M(je,!0);T(je);var Ne=P(je,2),Pe=M(Ne,!0);T(Ne);var Fe=P(Ne,2),Ie=M(Fe,!0);T(Fe),T(Ae),T(xe),T(_e),T(w),T(i),T(n),F((e,t,n,r,i,a,s,c,l,d,p,m,g,_,b,x,S,C,w,ee,te,ne,se,ce,ue,fe,pe,he,_e,ve)=>{U(o,1,`budget-scope-value ${e??``}`,`svelte-1jm56wo`),Hi(o,t),W(o,`title`,n),B(u,` ${r??``}`),U(f,1,`budget-period-label ${i??``}`,`svelte-1jm56wo`),B(h,a),W(v,`title`,s),B(y,c),B(re,l),W(ie,`aria-valuenow`,d),W(ie,`aria-label`,p),Hi(ie,`--budget-progress: ${m??``}%`),oe=U(ae,1,`budget-bar-fill budget-bar-fill-usage`,null,oe,g),B(le,_),B(de,b),B(me,x),B(ge,S),B(be,C),U(xe,1,`budget-bar-track ${w??``}`,`svelte-1jm56wo`),W(xe,`aria-valuenow`,ee),Hi(xe,`--budget-progress: ${te??``}%`),U(Se,1,`budget-bar-fill budget-bar-fill-period ${ne??``}`,`svelte-1jm56wo`),W(we,`title`,se),B(Te,ce),B(De,ue),W(Oe,`title`,fe),B(ke,pe),B(Me,he),B(Pe,_e),B(Ie,ve)},[()=>pT(I(t)),()=>uT(I(t))===`label`?`--label-color: `+Ry(dT(I(t))):void 0,()=>fT(I(t))+`: `+dT(I(t)),()=>dT(I(t)),()=>WT(I(t)),()=>UT(I(t)),()=>ZT(I(t)),()=>XT(I(t)),()=>VT(I(t)),()=>zT(I(t)),()=>`Budget usage: `+rc(I(t).spent)+` of `+rc(I(t).amount)+`, `+QT(I(t)),()=>zT(I(t)),()=>({"budget-bar-fill-danger":RT(I(t))>=1}),()=>rc(I(t).spent)+` of `+rc(I(t).amount),()=>QT(I(t)),()=>rc(I(t).spent)+` of `+rc(I(t).amount),()=>QT(I(t)),()=>HT(I(t)),()=>KT(I(t)),()=>BT(I(t)),()=>BT(I(t)),()=>GT(I(t)),()=>r(I(t).period_start),()=>ss.formatTimestamp(I(t).period_start),()=>YT(I(t)),()=>r(I(t).period_end),()=>ss.formatTimestamp(I(t).period_end),()=>ss.formatTimestamp(I(t).period_start),()=>YT(I(t)),()=>ss.formatTimestamp(I(t).period_end)]),z(e,n)}),T(i),z(e,i),D()}var iE=R(`

`,1),aE=R(``),oE=R(``),sE=R(`
`);function cE(e,t){E(t,!0);let n=ya(t,`open`,3,!1),r=ya(t,`title`,3,``),i=ya(t,`ariaLabel`,3,``),a=ya(t,`error`,3,``),o=ya(t,`submitting`,3,!1),s=ya(t,`submitDisabled`,3,!1),c=ya(t,`submitLabel`,3,`Save`),l=ya(t,`submittingLabel`,3,`Saving...`),u=ya(t,`submitIcon`,3,po),d=ya(t,`cancel`,3,!0),p=ya(t,`dialogClass`,3,``),m=ya(t,`novalidate`,3,!1),h=ya(t,`canClose`,3,()=>!0);function g(){K.dialogOpen||h()()&&t.onclose?.()}ks(e,{get open(){return n()},variant:`editor`,onclose:g,children:(e,n)=>{var h=sE(),g=M(h),_=M(g),v=M(_),y=M(v),b=e=>{var n=Qr();gi(N(n),()=>t.header),z(e,n)},x=e=>{var n=iE(),i=N(n),a=M(i,!0);T(i);var o=P(i,2),s=e=>{var n=Qr();gi(N(n),()=>t.headerHint),z(e,n)};V(o,e=>{t.headerHint&&e(s)}),F(()=>B(a,r())),z(e,n)};V(y,e=>{t.header?e(b):e(x,-1)}),T(v);var S=P(v,2);{let e=O(()=>`Close `+(i()||r()).toLowerCase());Ts(S,{get label(){return I(e)},onclick:()=>t.onclose?.()})}T(_);var C=P(_,2);gi(C,()=>t.children??f);var w=P(C,2),ee=e=>{var t=aE(),n=M(t,!0);T(t),F(()=>B(n,a())),z(e,t)};V(w,e=>{a()&&e(ee)});var te=P(w,2),ne=M(te),re=e=>{var n=oE();L(`click`,n,()=>t.onclose?.()),z(e,n)};V(ne,e=>{d()&&e(re)});var ie=P(ne,2),ae=e=>{var n=Qr();gi(N(n),()=>t.extraActions),z(e,n)};V(ie,e=>{t.extraActions&&e(ae)});var oe=P(ie,2),se=M(oe);G(se,{get icon(){return u()},class:`form-action-icon`});var ce=P(se,2),le=M(ce,!0);T(ce),T(oe),T(te),T(g),T(h),F(()=>{U(h,1,Fi([`model-editor`,p()])),W(h,`aria-label`,i()||r()),g.noValidate=m(),oe.disabled=o()||s(),B(le,o()?l():c())}),Vr(`submit`,g,e=>{e.preventDefault(),t.onsubmit?.()}),z(e,h)},$$slots:{default:!0}}),D()}Hr([`click`]);var lE=R(`
`);function uE(e,t){let n=ya(t,`label`,3,``);var r=lE(),i=M(r),a=M(i,!0);T(i),gi(P(i,2),()=>t.children??f),T(r),F(()=>{W(i,`for`,t.id),B(a,n())}),z(e,r)}var dE=R(``),fE=R(``),pE=R(``),mE=R(``),hE=R(``),gE=R(``),_E=R(`

Editing a budget updates its limit only. Use Reset to start a new + budget period.

`),vE=R(`
`,1),yE=R(``),bE=R(` `,1);function xE(e,t){E(t,!0);function n(e){Y.setFormSubject(e.target.value),e.target.value=Y.form.subject}var r=bE(),i=N(r);{let e=O(()=>Y.editing?`Edit Budget`:`Create Budget`);cE(i,{get open(){return Y.formOpen},get title(){return I(e)},ariaLabel:`Budget editor`,get error(){return Y.formError},get submitting(){return Y.formSubmitting},submitLabel:`Save Budget`,dialogClass:`budget-editor`,canClose:()=>!Y.overrideDialogOpen,onclose:()=>Y.closeForm(),onsubmit:()=>Y.submitForm(),children:(e,t)=>{var r=vE(),i=N(r),a=M(i);uE(a,{id:`budget-scope`,label:`Scope`,children:(e,t)=>{var n=fE();H(n,21,lT,e=>e.value,(e,t)=>{var n=dE(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),F(()=>n.disabled=Y.editing),L(`change`,n,()=>Y.syncScope()),Gi(n,()=>Y.form.scope,e=>Y.form.scope=e),z(e,n)},$$slots:{default:!0}});var o=P(a,2);{let e=O(()=>mT(Y.form));uE(o,{id:`budget-subject`,get label(){return I(e)},children:(e,t)=>{var r=pE();na(r),F(e=>{W(r,`placeholder`,e),ra(r,Y.form.subject),r.disabled=Y.editing,W(r,`data-modal-autofocus`,!Y.editing||void 0)},[()=>hT(Y.form)]),L(`input`,r,n),z(e,r)},$$slots:{default:!0}})}var s=P(o,2);uE(s,{id:`budget-period`,label:`Period`,children:(e,t)=>{var n=mE();H(n,21,_T,e=>e.value,(e,t)=>{var n=dE(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),F(()=>n.disabled=Y.editing),L(`change`,n,()=>Y.syncPeriodSeconds()),Gi(n,()=>Y.form.period,e=>Y.form.period=e),z(e,n)},$$slots:{default:!0}});var c=P(s,2),l=e=>{uE(e,{id:`budget-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=hE();na(n),F(()=>n.disabled=Y.editing),da(n,()=>Y.form.period_seconds,e=>Y.form.period_seconds=e),z(e,n)},$$slots:{default:!0}})};V(c,e=>{Y.form.period===`custom`&&e(l)}),uE(P(c,2),{id:`budget-amount`,label:`Amount`,children:(e,t)=>{var n=gE();na(n),F(()=>W(n,`data-modal-autofocus`,Y.editing||void 0)),da(n,()=>Y.form.amount,e=>Y.form.amount=e),z(e,n)},$$slots:{default:!0}}),T(i);var u=P(i,2),d=e=>{z(e,_E())};V(u,e=>{Y.editing&&e(d)}),z(e,r)},$$slots:{default:!0}})}ks(P(i,2),{get open(){return Y.overrideDialogOpen},variant:`auth`,onclose:()=>Y.closeOverrideDialog(),children:(e,t)=>{var n=yE(),r=M(n);Ts(P(M(r),2),{label:`Close budget override dialog`,onclick:()=>Y.closeOverrideDialog(),class:`auth-dialog-close`,iconClass:``}),T(r);var i=P(r,2),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=P(c,2),u=M(l);G(u,{get icon(){return po},class:`form-action-icon`});var d=P(u,2),f=M(d,!0);T(d),T(l),T(s),T(i),T(n),F(e=>{B(o,e),l.disabled=Y.formSubmitting,B(f,Y.formSubmitting?`Saving...`:`Override Budget`)},[()=>FT(Y.overridePendingPayload,Y.overrideExistingBudget)]),Vr(`submit`,i,e=>{e.preventDefault(),Y.confirmOverride()}),L(`click`,c,()=>Y.closeOverrideDialog()),z(e,n)},$$slots:{default:!0}}),z(e,r),D()}Hr([`change`,`input`,`click`]);var SE=R(`

Budgets

`),CE=R(``),wE=R(`
Budget management is unavailable.
`),TE=R(``),EE=R(`
`),DE=R(`

No budgets configured yet.

`),OE=R(`

No budgets match your filter.

`),kE=R(`
`);function AE(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`budgets`&&Y.fetchBudgetsPage()});let n=O(()=>Y.filteredBudgets());var r=kE(),i=M(r),a=M(i);US(M(a),{copyId:`budgets-help-copy`,label:`budgets help`,title:e=>{z(e,SE())},help:e=>{Ue(),z(e,Zr(`Budgets are evaluated from tracked usage cost records for each user + path subtree. Enforcement runs only when Budget is enabled for the + active workflow.`))},$$slots:{title:!0,help:!0}}),T(a);var o=P(a,2),s=M(o),c=e=>{var t=CE();G(M(t),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=Y.formSubmitting),L(`click`,t,()=>Y.openForm()),z(e,t)},l=O(()=>Y.managementEnabled()&&Y.budgetsAvailable&&!K.authError);V(s,e=>{I(l)&&e(c)}),T(o),T(i);var u=P(i,2);jc(u,{});var d=P(u,2),f=e=>{z(e,wE())},p=O(()=>(!Y.managementEnabled()||!Y.budgetsAvailable)&&!K.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=TE(),n=M(t,!0);T(t),F(()=>B(n,Y.error)),z(e,t)};V(m,e=>{Y.error&&!K.authError&&e(h)});var g=P(m,2),_=e=>{nT(e,{label:`Loading budgets...`})};V(g,e=>{Y.loading&&!K.authError&&e(_)});var v=P(g,2),y=e=>{var t=EE(),n=M(t);sw(M(n),{id:`budget-filter`,placeholder:`Filter by user path, label, or period...`,label:`Filter budgets by user path or period`,get value(){return Y.filter},set value(e){Y.filter=e}}),T(n);var r=P(n,2),i=P(M(r),2),a=M(i);a.value=a.__value=`subject`;var o=P(a);o.value=o.__value=`period`,T(i),T(r),T(t),Gi(i,()=>Y.sortBy,e=>Y.sortBy=e),z(e,t)};V(v,e=>{(Y.budgets.length>0||Y.filter)&&Y.budgetsAvailable&&!K.authError&&!Y.formOpen&&e(y)});var b=P(v,2);xE(b,{});var x=P(b,2),S=e=>{rE(e,{get budgets(){return I(n)}})};V(x,e=>{I(n).length>0&&Y.budgetsAvailable&&!K.authError&&e(S)});var C=P(x,2),w=e=>{z(e,DE())},ee=O(()=>Y.budgets.length===0&&!Y.filter&&!Y.loading&&!K.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{z(e,OE())},re=O(()=>Y.budgets.length>0&&I(n).length===0&&Y.filter&&!Y.loading&&!K.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());V(te,e=>{I(re)&&e(ne)}),T(r),z(e,r),D()}Hr([`click`]);function jE(){return{scope:`user_path`,subject:`/`,period:`minute`,period_seconds:60,max_requests:``,max_tokens:``,source:`manual`}}function ME(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},provider:{label:`Provider`,chip:`provider`,fieldLabel:`Provider Name`,placeholder:`openai`},model:{label:`Model`,chip:`model`,fieldLabel:`Model`,placeholder:`openai/gpt-4o`}};return t[e]||t.user_path}function NE(){return[`user_path`,`provider`,`model`].map(e=>({value:e,label:ME(e).label}))}function PE(e){return String(e&&e.scope||``).trim()||`user_path`}function FE(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function IE(e){return ME(PE(e)).chip}function LE(e){return ME(String(e&&e.scope||``)).fieldLabel}function RE(e){return ME(String(e&&e.scope||``)).placeholder}function zE(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function BE(){return[{value:`minute`,label:`Per minute`},{value:`hour`,label:`Per hour`},{value:`day`,label:`Per day`},{value:`concurrent`,label:`Concurrent (in-flight)`},{value:`custom`,label:`Custom seconds`}]}function VE(e){switch(String(e||``).trim().toLowerCase()){case`minute`:return 60;case`hour`:return 3600;case`day`:return 86400;case`concurrent`:return 0;default:return-1}}function HE(e){switch(Number(e||0)){case 60:return`minute`;case 3600:return`hour`;case 86400:return`day`;case 0:return`concurrent`;default:return`custom`}}function UE(e){let t=String(e&&e.period||``).trim(),n=VE(t);n>=0&&(e.period_seconds=n),t===`concurrent`&&(e.max_tokens=``)}function WE(e){return PE(e)+`:`+FE(e)+`:`+String(e&&e.period_seconds||`0`)}function GE(e){return Number(e&&e.period_seconds||0)===0}function KE(e){return String(e&&e.period_label||``).trim()||HE(Number(e&&e.period_seconds||0))}function qE(e){return String(e&&e.source||``)===`config`?`config`:`manual`}function JE(e){return String(e&&e.source||``)===`config`}function YE(e){let t=Number(e);return Number.isFinite(t)?t.toLocaleString():`0`}function XE(e,t){let n=Number(e),r=Number(t);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0)return 0;let i=Math.round(n/r*100);return Math.min(Math.max(i,0),100)}function ZE(e,t){let n=String(t||``).trim().toLowerCase(),r=Array.isArray(e)?e.slice():[],i={user_path:0,provider:1,model:2};return r.sort((e,t)=>{let n=(i[PE(e)]||0)-(i[PE(t)]||0);if(n!==0)return n;let r=FE(e).localeCompare(FE(t));return r===0?Number(e.period_seconds||0)-Number(t.period_seconds||0):r}),n?r.filter(e=>{let t=FE(e).toLowerCase(),r=IE(e).toLowerCase(),i=KE(e).toLowerCase();return t.includes(n)||r.includes(n)||i.includes(n)}):r}function QE(e){return!e||!Array.isArray(e.rate_limits)?[]:e.rate_limits}function $E(e,t,n){let r=String(t||``).trim();return r=e===`provider`||e===`model`?r.toLowerCase():`/`+r.split(`/`).map(e=>e.trim()).filter(Boolean).join(`/`),e+`:`+r+`:`+Number(n||0)}function eD(e,t){return e?$E(t.scope,t.subject,t.limit_key.period_seconds)!==$E(e.scope,e.subject,e.period_seconds):!1}function tD(e){let t=e||{},n=String(t.scope||`user_path`),r=String(t.subject||``).trim();if(n!==`user_path`&&!r)return{error:LE(t)+` is required.`};let i=String(t.period||``)===`concurrent`,a=t.period_seconds;if(a===``||a==null)return{error:`Period seconds is required.`};let o=Number(a);if(!Number.isInteger(o)||o<0||o===0&&!i)return{error:`Period seconds must be a positive integer (0 only for the concurrent period).`};let s=String(t.max_requests===void 0||t.max_requests===null?``:t.max_requests).trim(),c=String(t.max_tokens===void 0||t.max_tokens===null?``:t.max_tokens).trim();if(!s&&!c)return{error:`Set max requests, max tokens, or both.`};if(i&&c)return{error:`Token limits are not valid for the concurrent period.`};let l={scope:n,subject:r||`/`,limit_key:{period_seconds:o}};if(s){let e=Number(s);if(!Number.isInteger(e)||e<=0)return{error:`Max requests must be a positive integer.`};l.max_requests=e}if(c){let e=Number(c);if(!Number.isInteger(e)||e<=0)return{error:`Max tokens must be a positive integer.`};l.max_tokens=e}return{payload:l}}function nD(e,t,n){if(PE(e)!==`model`)return!1;let r=String(FE(e)).toLowerCase(),i=String(n||``).trim().toLowerCase();if(!i)return!1;if(r===i)return!0;let a=String(t||``).trim().toLowerCase();return a?r===a+`/`+i||i.startsWith(a+`/`)&&r===i.slice(a.length+1):!1}function rD(e,t){return PE(e)===`provider`&&String(FE(e)).toLowerCase()===String(t||``).trim().toLowerCase()}function iD(e){let t=e||{},n=String(t.model||``),r=String(t.provider||``);return!r||n.toLowerCase().startsWith(r+`/`)?n:r+`/`+n}function aD(e,t){let n=e||{},r=Array.isArray(t)?t:[],i=[];return n.kind===`model`&&i.push({key:`model`,title:`Model limits`,scope:`model`,subject:iD(n),hint:``,items:r.filter(e=>nD(e,n.provider,n.model))}),i.push({key:`provider`,title:`Provider limits (`+n.provider+`)`,scope:`provider`,subject:n.provider,hint:n.kind===`model`?`Shared by every model routed to this provider.`:``,items:r.filter(e=>rD(e,n.provider))}),i.push({key:`global`,title:`Global limits`,scope:`user_path`,subject:`/`,hint:`Root user-path rules throttle all traffic. Narrower user-path rules also apply, per consumer.`,items:r.filter(e=>PE(e)===`user_path`&&FE(e)===`/`)}),i}function oD(e){return GE(e)?XE(e.in_flight,e.max_requests):Math.max(XE(e.requests_used,e.max_requests),XE(e.tokens_used,e.max_tokens))}function sD(e){return`--rate-limit-pressure: `+oD(e)+`%`}function cD(e){let t=oD(e);return t>=100?`rate-limit-pressure-row rate-limit-pressure-full`:t>=75?`rate-limit-pressure-row rate-limit-pressure-high`:`rate-limit-pressure-row`}function lD(e){return(Array.isArray(e)?e:[]).some(e=>PE(e)===`user_path`&&FE(e)===`/`)}function uD(e,t,n){let r=Array.isArray(e)?e:[];return r.some(e=>nD(e,t,n))?`table-action-btn-active`:r.some(e=>rD(e,t))||lD(r)?`rate-limit-gauge-inherited`:``}function dD(e,t){let n=Array.isArray(e)?e:[];return n.some(e=>rD(e,t))?`table-action-btn-active`:lD(n)?`rate-limit-gauge-inherited`:``}function fD(e,t){let n=`Rate limits for `+e;return t===`table-action-btn-active`?n+` (direct limits configured)`:t?n+` (inherited limits apply)`:n}function pD(e){if(GE(e))return YE(e.in_flight)+` of `+YE(e.max_requests)+` in flight`;let t=[];return e.max_requests!==null&&e.max_requests!==void 0&&t.push(YE(e.requests_used)+`/`+YE(e.max_requests)+` req`),e.max_tokens!==null&&e.max_tokens!==void 0&&t.push(YE(e.tokens_used)+`/`+YE(e.max_tokens)+` tok`),t.join(` · `)}var X=new class{#e=k(j([]));get rateLimits(){return I(this.#e)}set rateLimits(e){A(this.#e,e,!0)}#t=k(!0);get rateLimitsAvailable(){return I(this.#t)}set rateLimitsAvailable(e){A(this.#t,e,!0)}#n=k(!1);get rateLimitsLoading(){return I(this.#n)}set rateLimitsLoading(e){A(this.#n,e,!0)}rateLimitFetchPromise=null;#r=k(``);get rateLimitFilter(){return I(this.#r)}set rateLimitFilter(e){A(this.#r,e,!0)}#i=k(``);get rateLimitError(){return I(this.#i)}set rateLimitError(e){A(this.#i,e,!0)}#a=k(!1);get rateLimitFormOpen(){return I(this.#a)}set rateLimitFormOpen(e){A(this.#a,e,!0)}#o=k(!1);get rateLimitFormSubmitting(){return I(this.#o)}set rateLimitFormSubmitting(e){A(this.#o,e,!0)}#s=k(``);get rateLimitFormError(){return I(this.#s)}set rateLimitFormError(e){A(this.#s,e,!0)}#c=k(!1);get rateLimitEditing(){return I(this.#c)}set rateLimitEditing(e){A(this.#c,e,!0)}rateLimitEditingOriginal=null;rateLimitFormReturnToInspector=!1;#l=k(``);get rateLimitResettingKey(){return I(this.#l)}set rateLimitResettingKey(e){A(this.#l,e,!0)}#u=k(``);get rateLimitDeletingKey(){return I(this.#u)}set rateLimitDeletingKey(e){A(this.#u,e,!0)}#d=k(!1);get rateLimitInspectorOpen(){return I(this.#d)}set rateLimitInspectorOpen(e){A(this.#d,e,!0)}#f=k(j({kind:``,provider:``,model:``,title:``}));get rateLimitInspector(){return I(this.#f)}set rateLimitInspector(e){A(this.#f,e,!0)}#p=k(j(jE()));get rateLimitForm(){return I(this.#p)}set rateLimitForm(e){A(this.#p,e,!0)}rateLimitsEnabled(){return vs.rateLimitsVisible()}defaultRateLimitForm(){return jE()}rateLimitScopeMeta(e){return ME(e)}rateLimitScopeOptions(){return NE()}rateLimitScope(e){return PE(e)}rateLimitSubject(e){return FE(e)}rateLimitScopeLabel(e){return IE(e)}rateLimitSubjectFieldLabel(){return LE(this.rateLimitForm)}rateLimitSubjectPlaceholder(){return RE(this.rateLimitForm)}syncRateLimitScope(){zE(this.rateLimitForm)}rateLimitPeriodOptions(){return BE()}rateLimitPeriodSeconds(e){return VE(e)}rateLimitPeriodFromSeconds(e){return HE(e)}syncRateLimitPeriodSeconds(){UE(this.rateLimitForm)}rateLimitKey(e){return WE(e)}rateLimitIsConcurrent(e){return GE(e)}rateLimitPeriodLabel(e){return KE(e)}rateLimitSourceLabel(e){return qE(e)}rateLimitIsReadOnly(e){return JE(e)}formatRateLimitNumber(e){return YE(e)}rateLimitUsagePercent(e,t){return XE(e,t)}filteredRateLimits(){return ZE(this.rateLimits,this.rateLimitFilter)}normalizeRateLimitListPayload(e){return QE(e)}async fetchRateLimitsPage(){if(await vs.ensureLoaded(),!this.rateLimitsEnabled()){this.rateLimits=[],this.rateLimitsAvailable=!1,this.rateLimitError=``;return}return this.rateLimitFetchPromise||=this.fetchRateLimits().finally(()=>{this.rateLimitFetchPromise=null}),this.rateLimitFetchPromise}async fetchRateLimits(){this.rateLimitsLoading=!0,this.rateLimitError=``;let e=await aT(`/admin/rate-limits`,{label:`rate limits`,errorFallback:`Unable to load rate limits.`,normalize:QE});if(this.rateLimitsLoading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.rateLimitsAvailable=!1,this.rateLimits=[];return}if(!e.result){this.rateLimits=[],this.rateLimitError=e.error;return}if(this.rateLimitsAvailable=!0,e.status===`error`){this.rateLimitError=e.error;return}this.rateLimits=e.items}}openRateLimitForm(e){if(this.rateLimitEditing=!!e,this.rateLimitFormError=``,e){let t=Number(e.period_seconds||0);this.rateLimitEditingOriginal={scope:PE(e),subject:FE(e),period_seconds:t},this.rateLimitForm={scope:PE(e),subject:FE(e),period:HE(t),period_seconds:t,max_requests:e.max_requests===null||e.max_requests===void 0?``:String(e.max_requests),max_tokens:e.max_tokens===null||e.max_tokens===void 0?``:String(e.max_tokens),source:String(e.source||`manual`)}}else this.rateLimitEditingOriginal=null,this.rateLimitForm=jE();this.rateLimitFormOpen=!0}closeRateLimitForm(){this.rateLimitFormOpen=!1,this.rateLimitFormSubmitting=!1,this.rateLimitFormError=``,this.rateLimitEditing=!1,this.rateLimitEditingOriginal=null,this.rateLimitForm=jE(),this.rateLimitFormReturnToInspector&&(this.rateLimitFormReturnToInspector=!1,this.rateLimitInspectorOpen=!0)}rateLimitNormalizedIdentity(e,t,n){return $E(e,t,n)}rateLimitIdentityMoved(e){return eD(this.rateLimitEditingOriginal,e)}setRateLimitFormSubject(e){this.rateLimitForm.subject=String(e||``)}rateLimitFormPayload(){return tD(this.rateLimitForm)}async submitRateLimitForm(){if(this.rateLimitFormSubmitting)return;let{payload:e,error:t}=this.rateLimitFormPayload();if(t){this.rateLimitFormError=t;return}let n=this.rateLimitIdentityMoved(e),r=this.rateLimitEditingOriginal;this.rateLimitFormSubmitting=!0,this.rateLimitFormError=``;try{let t=await oT(`/admin/rate-limits`,`PUT`,e,{label:`save rate limit`,errorFallback:`Unable to save rate limit.`,unavailableStatuses:[]});if(t.status===`stale`)return;if(t.status!==`ok`){this.rateLimitFormError=t.error;return}if(this.rateLimits=QE(t.result.data),n&&!await this.deleteMovedRateLimitOriginal(r))return;this.closeRateLimitForm(),q.success(n?`Rate limit moved; live counters restarted.`:`Rate limit saved.`)}finally{this.rateLimitFormSubmitting=!1}}async deleteMovedRateLimitOriginal(e){let t=await oT(`/admin/rate-limits`,`DELETE`,{scope:e.scope,subject:e.subject,limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`remove the moved rate limit`,errorFallback:`The new rule was saved, but the previous one could not be removed. Delete it manually.`,unavailableStatuses:[]});return t.status===`stale`?!1:t.status===`ok`?(this.rateLimits=QE(t.result.data),!0):(this.rateLimitFormError=t.error,!1)}async deleteRateLimit(e){let t=WE(e);if(this.rateLimitDeletingKey===t)return;this.rateLimitDeletingKey=t;let n=await oT(`/admin/rate-limits`,`DELETE`,{scope:PE(e),subject:FE(e),limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`delete rate limit`,errorFallback:`Unable to delete rate limit.`,unavailableStatuses:[]});if(this.rateLimitDeletingKey=``,n.status!==`stale`){if(n.status!==`ok`){q.error(n.error);return}this.rateLimits=QE(n.result.data),q.success(`Rate limit deleted.`)}}async resetRateLimit(e){let t=WE(e);if(this.rateLimitResettingKey===t)return;this.rateLimitResettingKey=t;let n=await oT(`/admin/rate-limits/reset-one`,`POST`,{scope:PE(e),subject:FE(e),period_seconds:Number(e.period_seconds||0)},{label:`reset rate limit`,errorFallback:`Unable to reset rate limit.`,unavailableStatuses:[]});if(this.rateLimitResettingKey=``,n.status!==`stale`){if(n.status!==`ok`){q.error(n.error);return}this.rateLimits=QE(n.result.data),q.success(`Rate limit counters reset.`)}}rateLimitInspectorModelID(e){return String(e&&e.model&&e.model.id||``).trim()}openRateLimitInspectorForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`model`,provider:n,model:t,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}openRateLimitInspectorForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`provider`,provider:t,model:``,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}showRateLimitInspector(){this.rateLimitInspectorOpen=!0,this.fetchRateLimitsPage()}closeRateLimitInspector(){this.rateLimitInspectorOpen=!1}rateLimitRuleMatchesModel(e,t,n){return nD(e,t,n)}rateLimitRuleMatchesProvider(e,t){return rD(e,t)}rateLimitInspectorQualifiedModel(){return iD(this.rateLimitInspector)}rateLimitInspectorSections(){return aD(this.rateLimitInspector,this.rateLimits)}rateLimitPressurePercent(e){return oD(e)}rateLimitPressureStyle(e){return sD(e)}rateLimitPressureClass(e){return cD(e)}rateLimitGaugeCache={rules:null,states:{}};rateLimitGaugeMemo(e,t){this.rateLimitGaugeCache.rules!==this.rateLimits&&(this.rateLimitGaugeCache={rules:this.rateLimits,states:{}});let n=this.rateLimitGaugeCache.states;return e in n||(n[e]=t()),n[e]}rateLimitGaugeClassForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase(),r=this.rateLimits;return this.rateLimitGaugeMemo(`model:`+n+`/`+t,()=>uD(r,n,t))}rateLimitGaugeClassForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase(),n=this.rateLimits;return this.rateLimitGaugeMemo(`provider:`+t,()=>dD(n,t))}hasGlobalRateLimits(){let e=this.rateLimits;return this.rateLimitGaugeMemo(`global`,()=>lD(e))}rateLimitGaugeTitle(e,t){return fD(e,t)}rateLimitInspectorSummary(e){return pD(e)}openRateLimitFormFromInspector(e,t,n){this.rateLimitInspectorOpen=!1,this.rateLimitFormReturnToInspector=!0,this.openRateLimitForm(n||void 0),n||(this.rateLimitForm.scope=e,this.rateLimitForm.subject=t)}},mD=R(``),hD=R(``),gD=R(``),_D=R(``),vD=R(``),yD=R(``),bD=R(``),xD=R(`

Scope, subject, and period identify the rule: changing any of them + moves the rule to a new key and restarts its live counters.

`),SD=R(`

A user path rule limits the whole subtree; provider and model rules cap + all traffic routed there and make load balancing skip the target while + it is saturated. One shared counter per rule. Leave a field empty to + skip that limit. Token limits require usage tracking.

`,1);function CD(e,t){E(t,!0);{let t=O(()=>X.rateLimitEditing?`Edit Rate Limit`:`Create Rate Limit`);cE(e,{get open(){return X.rateLimitFormOpen},get title(){return I(t)},ariaLabel:`Rate limit editor`,get error(){return X.rateLimitFormError},get submitting(){return X.rateLimitFormSubmitting},submitLabel:`Save Rate Limit`,dialogClass:`budget-editor`,novalidate:!0,onclose:()=>X.closeRateLimitForm(),onsubmit:()=>X.submitRateLimitForm(),children:(e,t)=>{var n=SD(),r=N(n),i=M(r);uE(i,{id:`rate-limit-scope`,label:`Scope`,children:(e,t)=>{var n=hD();H(n,21,()=>X.rateLimitScopeOptions(),e=>e.value,(e,t)=>{var n=mD(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),L(`change`,n,()=>X.syncRateLimitScope()),Gi(n,()=>X.rateLimitForm.scope,e=>X.rateLimitForm.scope=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2);{let e=O(()=>X.rateLimitSubjectFieldLabel());uE(a,{id:`rate-limit-subject`,get label(){return I(e)},children:(e,t)=>{var n=gD();na(n),F(e=>{W(n,`placeholder`,e),W(n,`data-modal-autofocus`,!X.rateLimitEditing||void 0),ra(n,X.rateLimitForm.subject)},[()=>X.rateLimitSubjectPlaceholder()]),L(`input`,n,e=>X.setRateLimitFormSubject(e.currentTarget.value)),z(e,n)},$$slots:{default:!0}})}var o=P(a,2);uE(o,{id:`rate-limit-period`,label:`Period`,children:(e,t)=>{var n=_D();H(n,21,()=>X.rateLimitPeriodOptions(),e=>e.value,(e,t)=>{var n=mD(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),L(`change`,n,()=>X.syncRateLimitPeriodSeconds()),Gi(n,()=>X.rateLimitForm.period,e=>X.rateLimitForm.period=e),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=e=>{uE(e,{id:`rate-limit-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=vD();na(n),da(n,()=>X.rateLimitForm.period_seconds,e=>X.rateLimitForm.period_seconds=e),z(e,n)},$$slots:{default:!0}})};V(s,e=>{X.rateLimitForm.period===`custom`&&e(c)});var l=P(s,2);{let e=O(()=>X.rateLimitForm.period===`concurrent`?`Max In-Flight Requests`:`Max Requests`);uE(l,{id:`rate-limit-max-requests`,get label(){return I(e)},children:(e,t)=>{var n=yD();na(n),F(()=>W(n,`data-modal-autofocus`,X.rateLimitEditing?!0:void 0)),da(n,()=>X.rateLimitForm.max_requests,e=>X.rateLimitForm.max_requests=e),z(e,n)},$$slots:{default:!0}})}var u=P(l,2),d=e=>{uE(e,{id:`rate-limit-max-tokens`,label:`Max Tokens`,children:(e,t)=>{var n=bD();na(n),da(n,()=>X.rateLimitForm.max_tokens,e=>X.rateLimitForm.max_tokens=e),z(e,n)},$$slots:{default:!0}})};V(u,e=>{X.rateLimitForm.period!==`concurrent`&&e(d)}),T(r);var f=P(r,4),p=e=>{z(e,xD())};V(f,e=>{X.rateLimitEditing&&e(p)}),z(e,n)},$$slots:{default:!0}})}D()}Hr([`change`,`input`]);var wD=R(` `),TD=R(` Edit`,1),ED=R(` `,1),DD=R(`
In-flight
`),OD=R(`
Requests
`),kD=R(`
Tokens
`),AD=R(`
`),jD=R(`
`);function MD(e,t){E(t,!0);var n=jD();H(n,21,()=>t.rules,e=>X.rateLimitKey(e),(e,t)=>{var n=AD(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=e=>{var n=wD(),r=M(n);{let e=O(()=>X.rateLimitScope(I(t))===`provider`?go:Na);G(r,{get icon(){return I(e)},class:`budget-period-icon`})}var i=P(r,2),a=M(i,!0);T(i),T(n),F((e,t)=>{W(n,`title`,e),B(a,t)},[()=>`Rule scope: `+X.rateLimitScopeLabel(I(t)),()=>X.rateLimitScopeLabel(I(t))]),z(e,n)},u=O(()=>X.rateLimitScope(I(t))!==`user_path`);V(c,e=>{I(u)&&e(l)});var d=P(c,2),f=M(d);{let e=O(()=>X.rateLimitIsConcurrent(I(t))?Aa:To);G(f,{get icon(){return I(e)},class:`budget-period-icon`})}var p=P(f,2),m=M(p,!0);T(p),T(d),T(s);var h=P(s,2),g=M(h),_=M(g),v=M(_,!0);T(_),T(g);var y=P(g,2),b=M(y),x=e=>{iT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitForm(I(t)),children:(e,t)=>{var n=TD();G(N(n),{get icon(){return oo},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}})},S=O(()=>!X.rateLimitIsReadOnly(I(t)));V(b,e=>{I(S)&&e(x)});var C=P(b,2);{let e=O(()=>X.rateLimitResettingKey===X.rateLimitKey(I(t))?`Resetting counters`:`Reset counters`),n=O(()=>X.rateLimitResettingKey===X.rateLimitKey(I(t)));iT(C,{get label(){return I(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>X.resetRateLimit(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=ED(),i=N(r);G(i,{get icon(){return fo},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>X.rateLimitResettingKey===X.rateLimitKey(I(t))?`Resetting`:`Reset`]),z(e,r)},$$slots:{default:!0}})}var w=P(C,2),ee=e=>{{let n=O(()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t))?`Deleting rate limit`:`Delete rate limit`),r=O(()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t)));iT(e,{get label(){return I(n)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>X.deleteRateLimit(I(t)),get disabled(){return I(r)},children:(e,n)=>{var r=ED(),i=N(r);G(i,{get icon(){return Eo},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t))?`Deleting`:`Delete`]),z(e,r)},$$slots:{default:!0}})}},te=O(()=>!X.rateLimitIsReadOnly(I(t)));V(w,e=>{I(te)&&e(ee)}),T(y),T(h),T(i);var ne=P(i,2),re=M(ne),ie=e=>{var n=DD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u),T(l),T(o),T(n),F((e,t,n,r,i,l)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l)},[()=>X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests),()=>`In-flight requests: `+X.formatRateLimitNumber(I(t).in_flight)+` of `+X.formatRateLimitNumber(I(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)>=100}),()=>X.formatRateLimitNumber(I(t).in_flight)+` of `+X.formatRateLimitNumber(I(t).max_requests)+` in flight`]),z(e,n)},ae=O(()=>X.rateLimitIsConcurrent(I(t)));V(re,e=>{I(ae)&&e(ie)});var oe=P(re,2),se=e=>{var n=OD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=M(f,!0);T(f),T(l),T(o),T(n),F((e,t,n,r,i,l,u)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l),B(p,u)},[()=>X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests),()=>`Requests used: `+X.formatRateLimitNumber(I(t).requests_used)+` of `+X.formatRateLimitNumber(I(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)>=100}),()=>X.formatRateLimitNumber(I(t).requests_used)+` of `+X.formatRateLimitNumber(I(t).max_requests)+` requests`,()=>X.formatRateLimitNumber(I(t).requests_remaining)+` left`]),z(e,n)},ce=O(()=>!X.rateLimitIsConcurrent(I(t))&&I(t).max_requests);V(oe,e=>{I(ce)&&e(se)});var le=P(oe,2),ue=e=>{var n=kD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=M(f,!0);T(f),T(l),T(o),T(n),F((e,t,n,r,i,l,u)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l),B(p,u)},[()=>X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)+`%`,()=>X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens),()=>`Tokens used: `+X.formatRateLimitNumber(I(t).tokens_used)+` of `+X.formatRateLimitNumber(I(t).max_tokens),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)>=100}),()=>X.formatRateLimitNumber(I(t).tokens_used)+` of `+X.formatRateLimitNumber(I(t).max_tokens)+` tokens`,()=>X.formatRateLimitNumber(I(t).tokens_remaining)+` left`]),z(e,n)},de=O(()=>!X.rateLimitIsConcurrent(I(t))&&I(t).max_tokens);V(le,e=>{I(de)&&e(ue)}),T(ne),T(r),T(n),F((e,t,n,r,i)=>{W(a,`title`,e),B(o,t),B(m,n),W(_,`title`,r),B(v,i)},[()=>X.rateLimitScopeLabel(I(t))+`: `+X.rateLimitSubject(I(t)),()=>X.rateLimitSubject(I(t)),()=>X.rateLimitPeriodLabel(I(t)),()=>X.rateLimitIsReadOnly(I(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(I(t))]),z(e,n)}),T(n),z(e,n),D()}var ND=R(`

Rate Limits

`),PD=R(``),FD=R(`
Rate limit management is unavailable.
`),ID=R(``),LD=R(`
`),RD=R(`

No rate limits configured yet.

`),zD=R(`

No rate limits match your filter.

`),BD=R(`
`);function VD(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`rate-limits`&&X.fetchRateLimitsPage()});let n=O(()=>X.filteredRateLimits());var r=BD(),i=M(r),a=M(i);US(M(a),{copyId:`rate-limits-help-copy`,label:`rate limits help`,text:`Rate limits cap requests, tokens, and in-flight concurrency for a user path subtree, a provider, or a model. Consumer (user path) breaches return 429 with Retry-After and x-ratelimit-* headers; saturated providers and models are skipped by load balancing and failover while capacity exists elsewhere. Counters are per gateway instance and reset on restart; token limits need usage tracking.`,title:e=>{z(e,ND())},$$slots:{title:!0}}),T(a);var o=P(a,2),s=M(o),c=e=>{var t=PD();G(M(t),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=X.rateLimitFormSubmitting),L(`click`,t,()=>X.openRateLimitForm()),z(e,t)},l=O(()=>X.rateLimitsEnabled()&&X.rateLimitsAvailable&&!K.authError);V(s,e=>{I(l)&&e(c)}),T(o),T(i);var u=P(i,2);jc(u,{});var d=P(u,2),f=e=>{z(e,FD())},p=O(()=>(!X.rateLimitsEnabled()||!X.rateLimitsAvailable)&&!K.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=ID(),n=M(t,!0);T(t),F(()=>B(n,X.rateLimitError)),z(e,t)};V(m,e=>{X.rateLimitError&&!K.authError&&e(h)});var g=P(m,2),_=e=>{nT(e,{label:`Loading rate limits...`})};V(g,e=>{X.rateLimitsLoading&&!K.authError&&e(_)});var v=P(g,2),y=e=>{var t=LD(),n=M(t);sw(M(n),{id:`rate-limit-filter`,placeholder:`Filter by subject, scope, or period...`,label:`Filter rate limits by subject, scope, or period`,get value(){return X.rateLimitFilter},set value(e){X.rateLimitFilter=e}}),T(n),T(t),z(e,t)};V(v,e=>{(X.rateLimits.length>0||X.rateLimitFilter)&&X.rateLimitsAvailable&&!K.authError&&!X.rateLimitFormOpen&&e(y)});var b=P(v,2);CD(b,{});var x=P(b,2),S=e=>{MD(e,{get rules(){return I(n)}})};V(x,e=>{I(n).length>0&&X.rateLimitsAvailable&&!K.authError&&e(S)});var C=P(x,2),w=e=>{z(e,RD())},ee=O(()=>X.rateLimits.length===0&&!X.rateLimitFilter&&!X.rateLimitsLoading&&!K.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{z(e,zD())},re=O(()=>X.rateLimits.length>0&&I(n).length===0&&X.rateLimitFilter&&!X.rateLimitsLoading&&!K.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());V(te,e=>{I(re)&&e(ne)}),T(r),z(e,r),D()}Hr([`click`]);function HD(e){return String(e||``).trim().toLowerCase()}function UD(e){if(!e)return``;let t=String(e.selector||``).trim();if(t)return t;if(!e.model||!e.model.id)return``;let n=String(e.model.id||``).trim(),r=String(e.provider_name||``).trim();if(r)return r+`/`+n;let i=String(e.provider_type||``).trim();return!i||n.includes(`/`)?n:i+`/`+n}function WD(e,t,n,r){let i=new Set,a=String(e||``).trim().toLowerCase(),o=String(t||``).trim().toLowerCase(),s=String(n||``).trim().toLowerCase(),c=String(r||``).trim().toLowerCase();if(c&&i.add(c),!a)return i;i.add(a),s&&i.add(s+`/`+a),o&&!a.includes(`/`)&&i.add(o+`/`+a);let l=a.split(`/`);return l.length===2&&l[1]&&i.add(l[1]),i}function GD(e){return WD(e&&e.model?e.model.id:``,e?e.provider_type:``,e?e.provider_name:``,e?e.selector:``)}function KD(e){let t=new Set,n=String(e.resolved_model||``).trim().toLowerCase(),r=String(e.target_model||``).trim().toLowerCase(),i=String(e.target_provider||``).trim().toLowerCase();if(n){t.add(n);let e=n.split(`/`);e.length===2&&e[1]&&t.add(e[1])}if(r){t.add(r);let e=r.split(`/`);e.length===2&&e[1]&&t.add(e[1])}return r&&i&&t.add(i+`/`+r),t}function qD(e){if(!e)return``;let t=String(e.provider||``).trim(),n=String(e.model||``).trim();return!t||!n||n===t||n.startsWith(t+`/`)?n:t+`/`+n}function JD(e){if(e===``||e==null)return null;let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function YD(e,t){let n={model:e},r=JD(t);return r!==null&&(n.weight=r),n}function XD(e){let t=Array.isArray(e)?e:[],n=[];for(let e of t){let t=String(e&&e.model||``).trim();t&&n.push(YD(t,e&&e.weight))}return n}function ZD(e){switch(String(e||``).toLowerCase()){case`cost`:return`lowest cost`;case`round_robin`:case``:return`round robin`;default:return e}}var QD={round_robin:`Round-robin (rotate across targets; honors weights)`,cost:`Lowest cost (cheapest target per request)`,adaptive:`Adaptive (target chosen by the registered routing extension)`};function $D(e,t){let n=Array.isArray(e)?[...e]:[],r=String(t||``).trim().toLowerCase();return r&&!n.includes(r)&&n.push(r),n.map(e=>({value:e,label:QD[e]||e}))}function eO(e){let t=Array.isArray(e.targets)?e.targets:[],n=t.length>0?t[0]:{},r=t.map(e=>{let t={provider:e.provider||``,model:e.model||``};return e.weight&&(t.weight=e.weight),t});return{name:e.source,target_provider:n.provider||``,target_model:n.model||``,targets:r,strategy:e.strategy||``,session_affinity:e.session_affinity!==!1,description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,valid:!!e.valid,resolved_model:e.resolved_model||``,provider_type:e.provider_type||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[]}}function tO(e){let t=Array.isArray(e)?e:[],n=[],r=[];for(let e of t)!e||typeof e!=`object`||(e.kind===`redirect`?n.push(eO(e)):e.kind===`policy`&&r.push({selector:e.source,provider_name:e.provider_name||``,model:e.model||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[],description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,scope_kind:e.scope_kind||``}));return{aliases:n,policies:r}}function nO(e){if(!e)return`—`;let t=Array.isArray(e.targets)?e.targets:[];return t.length>1?t.length+` targets · `+ZD(e.strategy):e.resolved_model?e.resolved_model:e.target_provider?e.target_provider+`/`+e.target_model:e.target_model||`—`}function rO(e){return e?e.enabled===!1?`is-disabled`:e.valid?`is-valid`:`is-invalid`:`is-invalid`}function iO(e){return e?e.enabled===!1?`Disabled`:e.valid?`Active`:`Invalid`:`Invalid`}function aO(e){return Array.isArray(e)&&e.length>0&&e.indexOf(`/`)===-1}function oO(e,t){return!t||!e?``:e.effective_enabled===!1?`is-disabled`:aO(e.user_paths)?`is-restricted`:`is-enabled`}function sO(e){if(!e)return``;let t=[];e.effective_enabled===!1&&t.push(e.default_enabled===!1?`Disabled by default`:`Disabled`);let n=Array.isArray(e.user_paths)?e.user_paths:[];return n.length>0&&t.push(`Allowed for `+n.join(`, `)),t.join(` · `)}function cO({models:e,aliases:t,virtualModelsAvailable:n,activeCategory:r}){let i=Array.isArray(e)?e:[],a=Array.isArray(t)?t:[],o=new Map;if(n)for(let e of a){let t=HD(e&&e.name);!t||e.enabled===!1||!e.valid||o.set(t,e)}let s=new Map,c=i.map(e=>{let t=UD(e),n=null;for(let t of GD(e))s.has(t)||s.set(t,e),!n&&o.has(t)&&(n=o.get(t));let r=e&&e.access?e.access:null;return{key:`model:`+t,display_name:t,secondary_name:``,provider_name:e.provider_name||``,provider_type:e.provider_type||``,model:e.model,selector:e.selector||``,is_alias:!1,alias:null,access:r,masking_alias:n,has_virtual_model:!!(n||r&&r.override),alias_state_class:``,alias_state_text:``}});if(!n)return c;for(let e of a){let t=s.get(HD(e&&e.name));if(e&&e.enabled!==!1&&e.valid&&t)continue;let n=null;for(let t of KD(e))if(n=s.get(t)||null,n)break;!n&&r&&r!==`all`||c.push({key:`alias:`+e.name,display_name:e.name,secondary_name:nO(e),provider_name:n&&n.provider_name||``,provider_type:n?n.provider_type||e.provider_type||``:e.provider_type||``,model:n?n.model:{id:e.name,object:`model`},selector:``,is_alias:!0,alias:e,access:null,masking_alias:null,source_model_exists:!!t,has_virtual_model:!0,alias_state_class:rO(e),alias_state_text:iO(e)})}return c.sort((e,t)=>e.is_alias===t.is_alias?String(e.display_name||``).localeCompare(String(t.display_name||``)):e.is_alias?-1:1)}function lO(e,t){if(!t)return e;let n=String(t).toLowerCase();return e.filter(e=>[e.display_name,e.secondary_name,e.provider_name,e.provider_type,e.model&&e.model.owned_by,e.alias&&e.alias.description,e.alias&&e.alias_state_text,e.model&&e.model.metadata&&e.model.metadata.modes?e.model.metadata.modes.join(`,`):``,e.model&&e.model.metadata&&e.model.metadata.categories?e.model.metadata.categories.join(`,`):``].some(e=>String(e||``).toLowerCase().includes(n)))}function uO(e,t){return String(e||``).trim()||String(t||``).trim()||`Unassigned`}function dO(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return!r||r===n?``:r}function fO(e){let t=String(e||``).trim();return t?t+`/`:``}function pO(e){let t=Array.isArray(e)?e:[],n=t.filter(e=>e&&!e.is_alias).length,r=t.filter(e=>e&&e.is_alias).length,i=[];return n>0&&i.push(n+(n===1?` model`:` models`)),r>0&&i.push(r+(r===1?` alias`:` aliases`)),i.join(` · `)}function mO(e,t,n){let r=String(t||``).trim(),i=String(n||``).trim();for(let t of Array.isArray(e)?e:[]){let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim();if(!(r&&e!==r)&&!(!r&&i&&n!==i)&&t&&t.access)return t.access.default_enabled!==!1}return!0}function hO(e){for(let t of Array.isArray(e)?e:[])if(t&&t.access)return t.access.default_enabled!==!1;return!0}function gO(e,t){let n=String(t||``).trim();if(!n)return null;for(let t of Array.isArray(e)?e:[])if(String(t&&t.selector||``).trim()===n)return t;return null}function _O(e,t,n,r){let i=fO(t),a=r&&r.get(`/`)||null,o=i&&r&&r.get(i)||null,s=mO(e,t,n),c=o||a,l=c&&Array.isArray(c.user_paths)?Array.from(new Set(c.user_paths)).sort():[];return{selector:i,default_enabled:s,effective_enabled:c?c.enabled!==!1:s,user_paths:l,override:o}}function vO(e,t,n){if(!Array.isArray(e)||e.length===0)return[];let r=new Map;for(let e of Array.isArray(n)?n:[]){let t=String(e&&e.selector||``).trim();t&&r.set(t,e)}let i=[],a=new Map;for(let t of e){if(t&&t.is_alias){i.push(t);continue}let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim(),r=`provider-group:`+(e||n||`unassigned`);a.has(r)||a.set(r,{key:r,provider_name:e,provider_type:n,display_name:uO(e,n),type_label:dO(e,n),rows:[]});let o=a.get(r);!o.provider_name&&e&&(o.provider_name=e),!o.provider_type&&n&&(o.provider_type=n),o.display_name=uO(o.provider_name,o.provider_type),o.type_label=dO(o.provider_name,o.provider_type),o.rows.push(t)}let o=Array.from(a.values()).map(e=>{let n=_O(t,e.provider_name,e.provider_type,r);return{...e,access:n,access_summary:sO(n),item_count_label:pO(e.rows)}}).sort((e,t)=>String(e.display_name||``).localeCompare(String(t.display_name||``)));return i.length>0&&o.unshift({key:`virtual-model-group`,is_virtual_models:!0,provider_name:``,provider_type:``,display_name:`Virtual models`,type_label:``,rows:i,access:{selector:``},access_summary:``,item_count_label:pO(i)}),o}function yO(e,t){let n=gO(t,`/`),r=hO(e),i=n&&Array.isArray(n.user_paths)?n.user_paths:[];return{key:`scope-global`,is_alias:!1,display_name:`all providers and models`,access:{selector:`/`,default_enabled:r,effective_enabled:n?n.enabled!==!1:r,user_paths:i,override:n}}}function bO(e){return e?String(e.access&&e.access.selector||``).trim()||String(e.override_selector||``).trim()||UD(e):``}function xO(e){if(!e)return[];let t=[];return e.is_alias?t.push(`alias-row`,rO(e.alias)):e.has_virtual_model&&t.push(`alias-row`,`is-valid`),!e.is_alias&&e.masking_alias&&t.push(`masked-model-row`),!e.is_alias&&e.access&&e.access.effective_enabled===!1&&t.push(`model-access-disabled-row`),t}function SO(e){return!!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)}function CO(e){return!!(e&&!e.is_alias&&e.masking_alias&&e.masking_alias.name&&!e.masking_alias.managed)}function wO(e){return e&&e.is_alias&&e.alias&&e.alias.name?`alias-row-`+String(e.alias.name).replace(/[^a-zA-Z0-9_-]+/g,`-`):``}function TO(e){return e?e.is_alias?!!(e.alias&&e.alias.managed):!!(e.access&&e.access.override&&e.access.override.managed||e.masking_alias&&e.masking_alias.managed):!1}function EO(e){return!!(e&&e.override)}function DO(e){return e?`table-action-btn-active`:``}function OO(e,t){let n=`Edit `+String(e||`model access`);return t?n+` (virtual model exists)`:n}function kO(){return{source:``,target_model:``,target_weight:1,targets:[],strategy:`round_robin`,session_affinity:!0,user_paths:``,description:``,enabled:!0}}function AO(e){return String(e&&e.target_model||``).trim()!==``}function jO(e){return String(e&&e.target_model||``).trim()?!0:XD(e&&e.targets).length>0}function MO(e){return!!e&&Array.isArray(e.targets)&&e.targets.length>0}function NO(e){return MO(e)&&String(e&&e.strategy||``).toLowerCase()!==`cost`}function PO(e){let t=Array.isArray(e.targets)?e.targets:[];if(t.length>0){let n=t.shift();e.target_model=n.model||``,e.target_weight=n.weight||1;return}e.target_model=``,e.target_weight=1}function FO(e){let t=Array.isArray(e&&e.targets)?e.targets:[];return t.length>0?{primaryModel:qD(t[0]),primaryWeight:t[0].weight||1,extraTargets:t.slice(1).map(e=>({model:qD(e),weight:e.weight||1}))}:{primaryModel:e&&e.target_provider?e.target_provider+`/`+e.target_model:e&&e.target_model||``,primaryWeight:1,extraTargets:[]}}function IO(e){return String(e||``).split(/\r?\n|,/).map(e=>String(e||``).trim()).filter(Boolean)}function LO(e,t,n){let r=String(e&&e.source||``).trim(),i=String(e&&e.target_model||``).trim(),a=XD(e&&e.targets),o=jO(e),s=String(t||``).trim(),c=n===`edit`&&!!s&&r!==s,l={source:r,user_paths:IO(e&&e.user_paths),description:String(e&&e.description||``).trim(),enabled:!!(e&&e.enabled)};if(c&&(l.old_source=s),o){let t=[];if(i&&t.push(YD(i,e.target_weight)),t.push(...a),t.length>1){let n=e.strategy||`round_robin`;l.targets=n===`cost`?t.map(e=>({model:e.model})):t,l.strategy=n,e&&e.session_affinity===!1&&(l.session_affinity=!1)}else l.target_model=t[0].model}return{payload:l,source:r,isRedirect:o,isRename:c}}function RO(e){let t={source:e.name,description:String(e.description||``).trim(),user_paths:Array.isArray(e.user_paths)?e.user_paths:[],enabled:e.enabled===!1},n=Array.isArray(e.targets)?e.targets:[];return n.length>1?(t.strategy=e.strategy||`round_robin`,e.session_affinity===!1&&(t.session_affinity=!1),t.targets=t.strategy===`cost`?n.map(e=>({model:qD(e)})):n.map(e=>YD(qD(e),e.weight))):n.length===1?t.target_model=qD(n[0]):t.target_model=e.target_provider?e.target_provider+`/`+e.target_model:e.target_model,t}function zO(e,t,n){let r=n||{},i=r.effective_enabled===!1,a=t&&Array.isArray(t.user_paths)?t.user_paths:[],o=`PUT`,s;return i===!1?s={source:e,enabled:!1,user_paths:a}:t&&a.length===0&&r.default_enabled!==!1?(o=`DELETE`,s={source:e}):s={source:e,enabled:!0,user_paths:a},{method:o,payload:s,desired:i}}function BO(e,t,n){let r=Math.max(1,Number(t||75)),i=Math.min(n,e+r);return{limit:i,rendering:icO({models:kc.models,aliases:this.aliases,virtualModelsAvailable:this.virtualModelsAvailable,activeCategory:kc.activeCategory}));get displayModels(){return I(this.#T)}set displayModels(e){A(this.#T,e)}#E=O(()=>vO(this.displayModels,kc.models,this.modelOverrideViews));get displayModelGroups(){return I(this.#E)}set displayModelGroups(e){A(this.#E,e)}#D=O(()=>lO(this.displayModels,kc.filter));get filteredDisplayModels(){return I(this.#D)}set filteredDisplayModels(e){A(this.#D,e)}#O=O(()=>{let e=this.filteredDisplayModels,t=Math.max(0,Math.min(Number(this.modelRenderLimit||0),e.length));return!kc.filter&&t>=this.displayModels.length?this.displayModelGroups:vO(e.slice(0,t),kc.models,this.modelOverrideViews)});get filteredDisplayModelGroups(){return I(this.#O)}set filteredDisplayModelGroups(e){A(this.#O,e)}#k=O(()=>yO(kc.models,this.modelOverrideViews));get globalScopeRow(){return I(this.#k)}set globalScopeRow(e){A(this.#k,e)}modelsBusy(){return!!(kc.loading||this.modelsRendering)}modelLoadingText(){if(kc.loading)return this.displayModels.length>0?`Refreshing models...`:`Loading models...`;let e=this.filteredDisplayModels.length;return`Rendering models... `+Math.min(Number(this.modelRenderLimit||0),e)+` / `+e}restartModelRendering(e){let t=++this.#a,n=VO(this.modelRenderBatchSize,e);this.modelRenderLimit=n.limit,this.modelsRendering=n.rendering,n.rendering&&this.#A(t)}stopModelRendering(){this.#a++,this.modelsRendering=!1}#A(e){let t=()=>{if(e!==this.#a)return;let t=BO(this.modelRenderLimit,this.modelRenderBatchSize,this.filteredDisplayModels.length);this.modelRenderLimit=t.limit,this.modelsRendering=t.rendering,t.rendering&&this.#A(e)};typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>setTimeout(t,0)):setTimeout(t,0)}async fetchVirtualModels(){this.aliasLoading=!0,this.aliasError=``;try{let e=await ps(`/admin/virtual-models`,{label:`virtual models`});if(e.status===503){this.virtualModelsAvailable=!1,this.aliases=[],this.modelOverrideViews=[];return}if(e.stale)return;if(this.virtualModelsAvailable=!0,!e.ok){this.aliases=[],this.modelOverrideViews=[];return}let{aliases:t,policies:n}=tO(e.data);this.aliases=t,this.modelOverrideViews=n}catch(e){console.error(`Failed to fetch virtual models:`,e),this.aliases=[],this.modelOverrideViews=[],this.aliasError=`Unable to load virtual models.`}finally{this.aliasLoading=!1}}qualifiedModelName(e){return UD(e)}findModelOverrideView(e){return gO(this.modelOverrideViews,e)}hasGlobalModelOverride(){return!!this.findModelOverrideView(`/`)}findExistingAliasByName(e){let t=HD(e);if(!t)return null;for(let e of this.aliases)if(HD(e&&e.name)===t)return e;return null}findConcreteModelByName(e){let t=HD(e);if(!t)return null;for(let e of kc.models)if(GD(e).has(t))return e;return null}rowToggleEnabled(e){return e?e.is_alias?e.alias&&e.alias.enabled!==!1:!!(e.access&&e.access.effective_enabled!==!1):!1}rowToggleLabel(e){return this.rowTogglingKey&&this.rowTogglingKey===e.key?`Updating...`:this.rowToggleRestricted(e)?`Restricted`:this.rowToggleEnabled(e)?`Enabled`:`Disabled`}rowToggleRestricted(e){return!!e&&!e.is_alias&&oO(e.access,this.virtualModelsAvailable)===`is-restricted`}rowToggleAriaLabel(e){if(!e)return``;let t=this.rowToggleEnabled(e)?`Disable `:`Enable `,n;return n=e.is_alias?`alias `+String(e.alias&&e.alias.name||``):String(e.display_name||e.access&&e.access.selector||`model`),t+n.trim()}async toggleRowEnabled(e){if(this.virtualModelsAvailable&&!(!e||this.rowTogglingKey===e.key)){if(TO(e)){q.success(`This virtual model is managed by configuration and is read-only.`);return}if(e.is_alias){await this.toggleAliasRow(e);return}await this.toggleModelRow(e)}}async toggleAliasRow(e){let t=e.alias;if(!t||!t.name)return;this.rowTogglingKey=e.key;let n=RO(t);try{let e=await ms(`/admin/virtual-models`,`PUT`,n,{label:`alias state`});if(e.status===503){this.virtualModelsAvailable=!1,q.error(`Virtual models feature is unavailable.`);return}if(e.stale)return;if(!e.ok){q.error(e.status===401?`Authentication required.`:ls(e,`Failed to update alias state.`));return}q.success(n.enabled?`Alias enabled.`:`Alias disabled.`),this.fetchVirtualModels()}catch(e){console.error(`Failed to toggle alias state:`,e),q.error(`Failed to update alias state.`)}finally{this.rowTogglingKey=``}}async toggleModelRow(e){let t=bO(e);if(!t)return;let{method:n,payload:r,desired:i}=zO(t,this.findModelOverrideView(t),e.access||{});this.rowTogglingKey=e.key;try{let e=await ms(`/admin/virtual-models`,n,r,{label:`model access`});if(e.status===503){this.virtualModelsAvailable=!1,q.error(`Virtual models feature is unavailable.`);return}if(!(n===`DELETE`&&e.status===404)){if(e.stale)return;if(!e.ok){q.error(e.status===401?`Authentication required.`:ls(e,`Failed to update model access.`));return}}q.success(i?`Model enabled.`:`Model disabled.`),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to toggle model access:`,e),q.error(`Failed to update model access.`)}finally{this.rowTogglingKey=``}}async removeAliasRow(e){if(!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)||this.rowDeletingKey)return;let t=String(e.alias.name||``).trim();t&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the virtual model alias "`+t+`"?`,method:`DELETE`,payload:{source:t},operation:`virtual model`,failureMessage:`Failed to remove virtual model.`,notice:`Virtual model removed.`,ignoreNotFound:!0})}async removeRedirectRow(e){let t=e&&e.masking_alias;if(!(e&&!e.is_alias&&t&&t.name&&!t.managed)||this.rowDeletingKey)return;let n=String(t.name||``).trim();n&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the redirect for "`+n+`"? Other virtual model settings will be preserved.`,method:`PUT`,payload:{source:n,user_paths:Array.isArray(t.user_paths)?t.user_paths:[],description:String(t.description||``).trim(),enabled:t.enabled!==!1},operation:`virtual model redirect`,failureMessage:`Failed to remove redirect.`,notice:`Redirect removed. Other virtual model settings were preserved.`})}async mutateVirtualModelRow(e){if(!this.rowDeletingKey&&window.confirm(e.confirmMessage)){this.rowDeletingKey=e.rowKey;try{let t=await ms(`/admin/virtual-models`,e.method,e.payload,{label:e.operation});if(t.status===503){this.virtualModelsAvailable=!1,q.error(`Virtual models feature is unavailable.`);return}if(!(e.ignoreNotFound&&t.status===404)){if(t.stale)return;if(!t.ok){q.error(t.status===401?`Authentication required.`:ls(t,e.failureMessage));return}}this.virtualModelsAvailable=!0,q.success(e.notice),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(t){console.error(e.failureMessage,t),q.error(e.failureMessage)}finally{this.rowDeletingKey=``}}}addVmTarget(){Array.isArray(this.vmForm.targets)||(this.vmForm.targets=[]),this.vmForm.targets.push({model:``,weight:1})}removeVmTarget(e){Array.isArray(this.vmForm.targets)&&this.vmForm.targets.splice(e,1)}removePrimaryTarget(){PO(this.vmForm)}vmFormHasPrimaryTarget(){return AO(this.vmForm)}vmFormShowStrategy(){return MO(this.vmForm)}vmStrategyOptions(){return $D(vs.virtualModelStrategies(),this.vmForm.strategy)}vmFormShowWeights(){return NO(this.vmForm)}vmFormToggleRestricted(){return!!(this.vmForm&&this.vmForm.enabled)&&aO(IO(this.vmForm.user_paths))}vmFormToggleLabel(){return!this.vmForm||!this.vmForm.enabled?`Disabled`:this.vmFormToggleRestricted()?`Restricted`:`Enabled`}resetVirtualModelForm(){this.vmFormError=``,this.vmFormHelpOpen=!1,this.vmFormUserPathsHelpOpen=!1,this.vmSubmitting=!1,this.vmDeleting=!1,this.vmFormHasExisting=!1,this.vmFormDefaultEnabled=!0,this.vmFormEffectiveEnabled=!0,this.vmFormDisplayName=``,this.vmFormSourceLocked=!1,this.vmFormOriginalSource=``,this.vmFormManaged=!1,this.vmForm=kO()}closeVirtualModelForm(){this.vmFormOpen=!1,this.resetVirtualModelForm()}openVirtualModelCreate(e){this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`create`,this.vmFormSourceLocked=!1,this.vmFormDisplayName=`New virtual model`,e&&e.model&&e.model.id&&(this.vmForm.target_model=UD(e))}openVirtualModelEditAlias(e){if(!e)return;this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!1,this.vmFormHasExisting=!0,this.vmFormManaged=!!e.managed,this.vmFormOriginalSource=e.name||``,this.vmFormDisplayName=e.name||``,this.vmFormDefaultEnabled=hO(kc.models),this.vmFormEffectiveEnabled=e.enabled!==!1;let{primaryModel:t,primaryWeight:n,extraTargets:r}=FO(e);this.vmForm={source:e.name||``,target_model:t,target_weight:n,targets:r,strategy:e.strategy||`round_robin`,session_affinity:e.session_affinity!==!1,user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` +`),description:e.description||``,enabled:e.enabled!==!1}}openVirtualModelEditModel(e){if(!e||e.is_alias)return;let t=e.access||{},n=t.override||null,r=n&&Array.isArray(n.user_paths)?n.user_paths:Array.isArray(t.user_paths)?t.user_paths:[],i=bO(e);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!n,this.vmFormOriginalSource=i;let a=n?n.enabled!==!1:t.effective_enabled!==!1;this.vmFormDefaultEnabled=t.default_enabled!==!1,this.vmFormEffectiveEnabled=a,this.vmFormManaged=!!(n&&n.managed),this.vmFormDisplayName=e.access_display_name||e.display_name||i||``,this.vmForm={source:i,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:r.join(` +`),description:n&&n.description?n.description:``,enabled:a}}openGlobalModelOverrideEdit(){let e=this.findModelOverrideView(`/`),t=e&&Array.isArray(e.user_paths)?e.user_paths:[],n=hO(kc.models);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!e,this.vmFormOriginalSource=`/`,this.vmFormDefaultEnabled=n,this.vmFormEffectiveEnabled=e?e.enabled!==!1:n,this.vmFormManaged=!!(e&&e.managed),this.vmFormDisplayName=`All providers and models`,this.vmForm={source:`/`,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:t.join(` +`),description:e&&e.description?e.description:``,enabled:e?e.enabled!==!1:n}}openProviderOverrideEdit(e){!e||!e.access||!e.access.selector||this.openVirtualModelEditModel({display_name:e.display_name,access_display_name:`All models in `+e.display_name,provider_name:e.provider_name,provider_type:e.provider_type,access:e.access,override_selector:e.access.selector,is_alias:!1})}async submitVirtualModelForm(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be edited here.`;return}let{payload:e,source:t,isRedirect:n,isRename:r}=LO(this.vmForm,this.vmFormOriginalSource,this.vmFormMode);if(!t){this.vmFormError=`Source is required.`;return}if(this.vmFormError=``,this.vmFormMode!==`edit`){let e=this.findExistingAliasByName(t),r=e?null:this.findModelOverrideView(t);if(e||r){let n=e?`A virtual model named "`+e.name+`" already exists. Saving will update that virtual model. Continue?`:`An access policy for "`+t+`" already exists. Saving will update that virtual model. Continue?`;if(!window.confirm(n)){this.vmFormError=`Choose a different source or edit the existing virtual model.`;return}}else if(n){let e=this.findConcreteModelByName(t);if(e){let t=UD(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Creating this alias will mask that model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}else if(r){let e=(this.aliases||[]).find(e=>e&&e.name===t)||null,r=e?null:this.findModelOverrideView(t);if(e||r){this.vmFormError=`A virtual model for "`+t+`" already exists. Choose a different source.`;return}if(n){let e=this.findConcreteModelByName(t);if(e){let t=UD(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Renaming to that name will mask the model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}this.vmSubmitting=!0;try{let t=await ms(`/admin/virtual-models`,`PUT`,e,{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:ls(t,`Failed to save virtual model.`);return}let r=!n&&t.status===204;this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),q.success(n?`Alias saved.`:r?`Model access reset to inherited/default.`:`Model access saved.`),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to save virtual model:`,e),this.vmFormError=`Failed to save virtual model.`}finally{this.vmSubmitting=!1}}async deleteVirtualModel(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be removed here.`;return}let e=String(this.vmForm.source||this.vmFormOriginalSource||``).trim();if(!(!e||!this.vmFormHasExisting)&&window.confirm(`Remove the virtual model for "`+e+`"? This reverts to inherited/default behavior.`)){this.vmDeleting=!0,this.vmFormError=``;try{let t=await ms(`/admin/virtual-models`,`DELETE`,{source:e},{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:ls(t,`Failed to remove virtual model.`);return}}this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),q.success(`Virtual model removed.`),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to delete virtual model:`,e),this.vmFormError=`Failed to remove virtual model.`}finally{this.vmDeleting=!1}}}},UO=[{value:`input_per_mtok`,label:`Input $/MTok`,group:`Tokens`},{value:`output_per_mtok`,label:`Output $/MTok`,group:`Tokens`},{value:`cached_input_per_mtok`,label:`Cached input $/MTok`,group:`Tokens`},{value:`cache_write_per_mtok`,label:`Cache write $/MTok`,group:`Tokens`},{value:`reasoning_output_per_mtok`,label:`Reasoning output $/MTok`,group:`Tokens`},{value:`batch_input_per_mtok`,label:`Batch input $/MTok`,group:`Batch`},{value:`batch_output_per_mtok`,label:`Batch output $/MTok`,group:`Batch`},{value:`audio_input_per_mtok`,label:`Audio input $/MTok`,group:`Audio`},{value:`audio_output_per_mtok`,label:`Audio output $/MTok`,group:`Audio`},{value:`per_image`,label:`$/Image`,group:`Image`},{value:`input_per_image`,label:`Input $/Image`,group:`Image`},{value:`per_second_input`,label:`Input $/Second`,group:`Audio/Video`},{value:`per_second_output`,label:`Output $/Second`,group:`Video`},{value:`per_character_input`,label:`$/Character`,group:`Audio`},{value:`per_page`,label:`$/Page`,group:`Utility`},{value:`per_request`,label:`$/Request`,group:`Utility`}];function WO(e){let t=UO.find(t=>t.value===e);return t?t.label:String(e||``).replace(/_/g,` `)}function GO(e){return e&&typeof e==`object`?JSON.parse(JSON.stringify(e)):{}}function KO(e,t){let n=GO(e),r=t&&t.pricing?t.pricing:t;if(!r||typeof r!=`object`)return n;for(let e of UO)r[e.value]!==null&&r[e.value]!==void 0&&(n[e.value]=Number(r[e.value]));return Array.isArray(r.tiers)&&r.tiers.length>0&&(n.tiers=GO(r.tiers)),n}function qO(e){switch(String(e||``).trim()){case`config_yaml`:return`config.yaml`;case`model_registry`:return`Model registry`;default:return e?String(e):`Unknown`}}function JO(e){let t=e&&e.pricing?e.pricing:{},n=e&&e.pricing_sources&&typeof e.pricing_sources==`object`?e.pricing_sources:{},r={};for(let e of UO)t[e.value]!==null&&t[e.value]!==void 0&&(r[e.value]=qO(n[e.value]||`model_registry`));return r}function YO(e){let t=String(e&&e.selector||``).trim();return t?`Dashboard/API override (`+t+`)`:`Dashboard/API override`}function XO(e){let t=String(e||``).trim();return t?t+`/`:``}function ZO(e){return String(e&&e.model&&e.model.id||``).trim()}function QO(e){let t=String(e&&e.provider_name||``).trim(),n=ZO(e);return t&&n?t+`/`+n:n}function $O(e){return ZO(e)}function ek(e){let t=new Map;for(let n of Array.isArray(e)?e:[]){let e=String(n&&n.selector||``).trim();e&&t.set(e,n)}return t}function tk(e,t){let n=String(t||``).trim();return n&&ek(e).get(n)||null}function nk(e,t,n){let r=ek(e),i=QO(t),a=$O(t),o=XO(t&&t.provider_name),s=String(n||``).trim();for(let e of[i,a,o,`/`]){if(!e||e===s)continue;let t=r.get(e);if(t)return t}return null}function rk(e,t,n){let r=e&&e.model&&e.model.metadata?e.model.metadata:null,i=GO(r&&r.pricing),a=JO(r),o=nk(t,e,n),s=o&&o.pricing?o.pricing:null;if(s){let e=YO(o);for(let t of UO)s[t.value]!==null&&s[t.value]!==void 0&&(i[t.value]=Number(s[t.value]),a[t.value]=e);Array.isArray(s.tiers)&&s.tiers.length>0&&(i.tiers=GO(s.tiers),a.tiers=e)}return{pricing:i,sources:a}}function ik(e,t){let n=e&&e.pricing?e.pricing:{},r=[];for(let e of UO)n[e.value]!==null&&n[e.value]!==void 0&&r.push({id:t(),field:e.value,value:String(n[e.value])});return r}function ak(e,t){let n=new Set;for(let r of Array.isArray(e)?e:[]){if(t&&r.id===t)continue;let e=String(r.field||``).trim();e&&n.add(e)}return n}function ok(e,t){let n=ak(e,t&&t.id);return UO.filter(e=>e.value===(t&&t.field)||!n.has(e.value))}function sk(e,t){let n={},r=new Set;for(let t of Array.isArray(e)?e:[]){let e=String(t.field||``).trim();if(!e)return{error:`Choose a price type for every row.`};if(r.has(e))return{error:`Each price type can only be used once.`};r.add(e);let i=String(t.value||``).trim();if(i===``)return{error:`Enter a value for `+WO(e)+`.`};let a=Number(i);if(!Number.isFinite(a)||a<0)return{error:`Pricing values must be numbers greater than or equal to 0.`};n[e]=a}let i=Array.isArray(t)?t:[];return i.length>0&&(n.tiers=GO(i)),Object.keys(n).length===0?{error:`Add at least one pricing field before saving.`}:{pricing:n}}function ck(e,t,n){let r=e||{},i=t||{},a=n||{},o=KO(r,a);return UO.map(e=>{let t=a[e.value]!==null&&a[e.value]!==void 0,n=r[e.value]!==null&&r[e.value]!==void 0;return{field:e.value,label:e.label,value:o[e.value],source:t?`Form/API value`:n?i[e.value]||`Model registry`:`Unset`}}).filter(e=>e.source!==`Unset`||e.value!==void 0)}var lk=new class{#e=k(!0);get modelPricingOverridesAvailable(){return I(this.#e)}set modelPricingOverridesAvailable(e){A(this.#e,e,!0)}#t=k(j([]));get modelPricingOverrideViews(){return I(this.#t)}set modelPricingOverrideViews(e){A(this.#t,e,!0)}#n=k(``);get modelPricingOverrideError(){return I(this.#n)}set modelPricingOverrideError(e){A(this.#n,e,!0)}#r=k(!1);get modelPricingOverrideFormOpen(){return I(this.#r)}set modelPricingOverrideFormOpen(e){A(this.#r,e,!0)}#i=k(!1);get modelPricingOverrideSubmitting(){return I(this.#i)}set modelPricingOverrideSubmitting(e){A(this.#i,e,!0)}#a=k(!1);get modelPricingOverrideFormHasExistingOverride(){return I(this.#a)}set modelPricingOverrideFormHasExistingOverride(e){A(this.#a,e,!0)}#o=k(``);get modelPricingOverrideFormDisplayName(){return I(this.#o)}set modelPricingOverrideFormDisplayName(e){A(this.#o,e,!0)}#s=k(``);get modelPricingOverrideFormScope(){return I(this.#s)}set modelPricingOverrideFormScope(e){A(this.#s,e,!0)}#c=k(j([]));get modelPricingOverrideFormScopeOptions(){return I(this.#c)}set modelPricingOverrideFormScopeOptions(e){A(this.#c,e,!0)}#l=k(null);get modelPricingOverrideFormRow(){return I(this.#l)}set modelPricingOverrideFormRow(e){A(this.#l,e,!0)}#u=k(null);get modelPricingOverrideFormBasePricing(){return I(this.#u)}set modelPricingOverrideFormBasePricing(e){A(this.#u,e,!0)}#d=k(null);get modelPricingOverrideFormBasePricingSources(){return I(this.#d)}set modelPricingOverrideFormBasePricingSources(e){A(this.#d,e,!0)}#f=k(j([]));get modelPricingOverrideFormPreservedTiers(){return I(this.#f)}set modelPricingOverrideFormPreservedTiers(e){A(this.#f,e,!0)}#p=k(j([]));get modelPricingOverrideRows(){return I(this.#p)}set modelPricingOverrideRows(e){A(this.#p,e,!0)}#m=k(j({selector:``}));get modelPricingOverrideForm(){return I(this.#m)}set modelPricingOverrideForm(e){A(this.#m,e,!0)}_modelPricingOverrideRowID=0;pricingFieldOptions(){return UO}pricingFieldLabel(e){return WO(e)}async fetchModelPricingOverrides(){this.modelPricingOverrideError=``;try{let e=await ps(`/admin/model-pricing-overrides`,{label:`model pricing overrides`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideViews=[];return}if(e.stale)return;if(this.modelPricingOverridesAvailable=!0,!e.ok){this.modelPricingOverrideViews=[];return}this.modelPricingOverrideViews=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch model pricing overrides:`,e),this.modelPricingOverrideViews=[],this.modelPricingOverrideError=`Unable to load model pricing overrides.`}}findModelPricingOverrideView(e){return tk(this.modelPricingOverrideViews,e)}hasGlobalPricingOverride(){return!!this.findModelPricingOverrideView(`/`)}hasProviderPricingOverride(e){return!!this.findModelPricingOverrideView(XO(e&&e.provider_name))}hasModelPricingOverride(e){return!!this.findModelPricingOverrideView(QO(e))}modelPricingButtonClass(e){return e?`table-action-btn-active`:``}modelPricingButtonLabel(e,t){let n=`Edit `+String(e||`model pricing`);return t?n+` (override exists)`:n}modelRowPricing(e){return rk(e,this.modelPricingOverrideViews).pricing}openGlobalPricingOverrideEdit(){this.openModelPricingOverrideForm({displayName:`All providers and models`,selector:`/`,scope:`global`,scopeOptions:[{value:`global`,label:`All providers and models`,selector:`/`}],row:null})}openProviderPricingOverrideEdit(e){let t=XO(e&&e.provider_name);t&&this.openModelPricingOverrideForm({displayName:`All models in `+(e.display_name||e.provider_name||t),selector:t,scope:`provider`,scopeOptions:[{value:`provider`,label:`Provider`,selector:t}],row:null})}openModelPricingOverrideEdit(e){if(!e||e.is_alias)return;let t=QO(e),n=$O(e),r=[{value:`exact`,label:`This provider and model`,selector:t}];n&&n!==t&&r.push({value:`model`,label:`This model across providers`,selector:n}),this.openModelPricingOverrideForm({displayName:e.display_name||t,selector:t,scope:`exact`,scopeOptions:r,row:e})}openModelPricingOverrideForm(e){let t=e||{};this.modelPricingOverrideFormOpen=!0,this.modelPricingOverrideError=``,this.modelPricingOverrideFormDisplayName=t.displayName||t.selector||`Pricing`,this.modelPricingOverrideFormScope=t.scope||``,this.modelPricingOverrideFormScopeOptions=Array.isArray(t.scopeOptions)?t.scopeOptions:[],this.modelPricingOverrideFormRow=t.row||null,this.modelPricingOverrideForm={selector:t.selector||``},this.loadModelPricingOverrideFormSelector(t.selector||``)}loadModelPricingOverrideFormSelector(e){e=String(e||``).trim();let t=this.findModelPricingOverrideView(e);this.modelPricingOverrideFormHasExistingOverride=!!t,this.modelPricingOverrideRows=ik(t,()=>this.nextModelPricingOverrideRowID()),this.modelPricingOverrideFormPreservedTiers=t&&t.pricing&&Array.isArray(t.pricing.tiers)?GO(t.pricing.tiers):[],this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow();let n=this.modelPricingOverrideFormRow,r=n?rk(n,this.modelPricingOverrideViews,e):{pricing:{},sources:{}};this.modelPricingOverrideFormBasePricing=r.pricing,this.modelPricingOverrideFormBasePricingSources=r.sources}setModelPricingOverrideScope(e){this.modelPricingOverrideFormScope=e;let t=this.modelPricingOverrideFormScopeOptions.find(t=>t.value===e);t&&(this.modelPricingOverrideForm.selector=t.selector,this.loadModelPricingOverrideFormSelector(t.selector))}nextModelPricingOverrideRowID(){return this._modelPricingOverrideRowID=(this._modelPricingOverrideRowID||0)+1,`pricing-row-`+this._modelPricingOverrideRowID}availablePricingFieldOptions(e){return ok(this.modelPricingOverrideRows,e)}addModelPricingOverrideRow(){let e=ak(this.modelPricingOverrideRows),t=UO.find(t=>!e.has(t.value))||UO[0];t&&this.modelPricingOverrideRows.push({id:this.nextModelPricingOverrideRowID(),field:t.value,value:``})}removeModelPricingOverrideRow(e){this.modelPricingOverrideRows=this.modelPricingOverrideRows.filter(t=>t.id!==e.id),this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow()}modelPricingOverridePayload(){return sk(this.modelPricingOverrideRows,this.modelPricingOverrideFormPreservedTiers)}modelPricingOverrideDraftPricing(){let e=this.modelPricingOverridePayload();return e&&e.pricing?e.pricing:{}}modelPricingEffectivePreviewRows(){return ck(this.modelPricingOverrideFormBasePricing,this.modelPricingOverrideFormBasePricingSources,this.modelPricingOverrideDraftPricing())}closeModelPricingOverrideForm(){this.modelPricingOverrideFormOpen=!1,this.modelPricingOverrideSubmitting=!1,this.modelPricingOverrideError=``,this.modelPricingOverrideFormHasExistingOverride=!1,this.modelPricingOverrideFormDisplayName=``,this.modelPricingOverrideFormScope=``,this.modelPricingOverrideFormScopeOptions=[],this.modelPricingOverrideFormRow=null,this.modelPricingOverrideFormBasePricing=null,this.modelPricingOverrideFormBasePricingSources=null,this.modelPricingOverrideFormPreservedTiers=[],this.modelPricingOverrideRows=[],this.modelPricingOverrideForm={selector:``}}async submitModelPricingOverrideForm(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!e){this.modelPricingOverrideError=`Model pricing selector is required.`;return}let t=this.modelPricingOverridePayload();if(t.error){this.modelPricingOverrideError=t.error;return}let n={selector:e,...t};this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let e=await ms(`/admin/model-pricing-overrides`,`PUT`,n,{label:`model pricing override`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(e.stale)return;if(!e.ok){this.modelPricingOverrideError=e.status===401?`Authentication required.`:ls(e,`Failed to save model pricing.`);return}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),q.success(`Model pricing saved.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to save model pricing override:`,e),this.modelPricingOverrideError=`Failed to save model pricing.`}finally{this.modelPricingOverrideSubmitting=!1}}async deleteModelPricingOverride(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!(!e||!this.modelPricingOverrideFormHasExistingOverride)&&window.confirm(`Remove the model pricing override for "`+e+`"?`)){this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let t=await ms(`/admin/model-pricing-overrides`,`DELETE`,{selector:e},{label:`model pricing override`});if(t.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.modelPricingOverrideError=t.status===401?`Authentication required.`:ls(t,`Failed to remove model pricing override.`);return}}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),q.success(`Model pricing override removed.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to delete model pricing override:`,e),this.modelPricingOverrideError=`Failed to remove model pricing override.`}finally{this.modelPricingOverrideSubmitting=!1}}}},uk=R(``);function dk(e,t){E(t,!0);var n=uk();let r;var i=P(M(n),2),a=M(i,!0);T(i),T(n),F((e,i,o)=>{r=U(n,1,`alias-toggle`,null,r,e),n.disabled=HO.rowTogglingKey===t.row.key||!HO.virtualModelsAvailable,W(n,`aria-label`,i),B(a,o)},[()=>({enabled:HO.rowToggleEnabled(t.row),restricted:HO.rowToggleRestricted(t.row)}),()=>HO.rowToggleAriaLabel(t.row),()=>HO.rowToggleLabel(t.row)]),L(`click`,n,()=>HO.toggleRowEnabled(t.row)),z(e,n),D()}Hr([`click`]);var fk=R(`
`);function pk(e,t){E(t,!0);var n=fk(),r=M(n),i=e=>{dk(e,{get row(){return HO.globalScopeRow}})};V(r,e=>{HO.virtualModelsAvailable&&e(i)});var a=P(r,2),o=e=>{{let t=O(()=>lk.modelPricingButtonLabel(`global model pricing`,lk.hasGlobalPricingOverride())),n=O(()=>lk.modelPricingButtonClass(lk.hasGlobalPricingOverride()));iT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>lk.openGlobalPricingOverrideEdit(),children:(e,t)=>{G(e,{get icon(){return Wa},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(a,e=>{lk.modelPricingOverridesAvailable&&e(o)});var s=P(a,2),c=e=>{{let t=O(()=>OO(`global model access`,HO.hasGlobalModelOverride())),n=O(()=>DO(HO.hasGlobalModelOverride()));iT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>HO.openGlobalModelOverrideEdit(),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{HO.virtualModelsAvailable&&e(c)}),T(n),z(e,n),D()}function mk(e){return String(e&&(e.primary_model||e.source)||``).trim()}function hk(e){return Array.isArray(e&&e.fallback_models)?e.fallback_models:Array.isArray(e&&e.targets)?e.targets:[]}function gk(e){return Array.isArray(e)?e.map(e=>({...e,source:mk(e),targets:hk(e)})):[]}function _k(e){let t=hk(e);return t.length===0?`-`:t.join(`, `)}function vk(e){return e&&e.enabled===!1?`Off`:e&&e.managed?`Config`:`On`}function yk(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>mk(e)===n)||null}function bk(e,t){if(!t||t.is_alias)return!1;let n=yk(e,UD(t));return!!(n&&n.enabled!==!1&&hk(n).length>0)}function xk(e,t){return bk(e,t)?`table-action-btn-failover-active`:``}function Sk(e,t){let n=`Edit failover for `+(t&&t.display_name?t.display_name:`model`);return bk(e,t)?n+` (active)`:n}function Ck(e){let t=[e&&e.target_model];return(Array.isArray(e&&e.targets)?e.targets:[]).forEach(e=>t.push(e&&e.model)),t.map(e=>String(e||``).trim()).filter(Boolean)}function wk(e){let t=Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(Boolean):[];return{target_model:t[0]||``,targets:t.slice(1).map(e=>({model:e}))}}function Tk(e){return{primary_model:String(e&&e.source||``).trim(),fallback_models:Ck(e),enabled:!(e&&e.enabled===!1)}}function Ek(e){return mk(e)}function Dk(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=Ek(e);n&&(t[n]=!0)}),t}function Ok(e,t){let n=Ek(t);return!!(n&&e&&e[n])}function kk(e,t){return(Array.isArray(e)?e:[]).filter(e=>Ok(t,e))}function Ak(e,t){let n=Array.isArray(e)?e:[];return n.length>0&&kk(n,t).length===n.length}function jk(e){return[mk(e),hk(e).join(` `)].join(` `).toLowerCase()}function Mk(e,t){let n=Array.isArray(e)?e:[],r=String(t||``).trim().toLowerCase();return r?n.filter(e=>jk(e).includes(r)):n}function Nk(e){return{primary_model:mk(e),fallback_models:hk(e).map(e=>String(e||``).trim()).filter(Boolean),enabled:!!(e&&e.enabled!==!1)}}function Pk(){return{source:``,target_model:``,targets:[],enabled:!0}}var Z=new class{#e=k(!0);get failoverAvailable(){return I(this.#e)}set failoverAvailable(e){A(this.#e,e,!0)}#t=k(j([]));get failoverRules(){return I(this.#t)}set failoverRules(e){A(this.#t,e,!0)}#n=k(!1);get failoverLoading(){return I(this.#n)}set failoverLoading(e){A(this.#n,e,!0)}#r=k(!1);get failoverSaving(){return I(this.#r)}set failoverSaving(e){A(this.#r,e,!0)}#i=k(!1);get failoverGenerating(){return I(this.#i)}set failoverGenerating(e){A(this.#i,e,!0)}#a=k(``);get failoverError(){return I(this.#a)}set failoverError(e){A(this.#a,e,!0)}#o=k(j([]));get failoverGeneratedRules(){return I(this.#o)}set failoverGeneratedRules(e){A(this.#o,e,!0)}#s=k(!1);get failoverDraftsOpen(){return I(this.#s)}set failoverDraftsOpen(e){A(this.#s,e,!0)}#c=k(j({}));get failoverDraftSelections(){return I(this.#c)}set failoverDraftSelections(e){A(this.#c,e,!0)}#l=k(``);get failoverDraftFilter(){return I(this.#l)}set failoverDraftFilter(e){A(this.#l,e,!0)}#u=k(!1);get failoverDraftSaving(){return I(this.#u)}set failoverDraftSaving(e){A(this.#u,e,!0)}#d=k(!1);get failoverFormOpen(){return I(this.#d)}set failoverFormOpen(e){A(this.#d,e,!0)}#f=k(`create`);get failoverFormMode(){return I(this.#f)}set failoverFormMode(e){A(this.#f,e,!0)}#p=k(!1);get failoverFormManaged(){return I(this.#p)}set failoverFormManaged(e){A(this.#p,e,!0)}#m=k(j(Pk()));get failoverForm(){return I(this.#m)}set failoverForm(e){A(this.#m,e,!0)}failoverEnabled(){return vs.booleanFlag(`FAILOVER_ENABLED`,!0)}async fetchFailoverRules(){if(!this.failoverEnabled()){this.failoverAvailable=!1,this.failoverRules=[],this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,this.failoverError=``,this.failoverLoading=!1;return}this.failoverLoading=!0,this.failoverError=``;try{let e=await ps(`/admin/failover`,{label:`failover mappings`});if(e.status===503){this.failoverAvailable=!1,this.failoverRules=[];return}if(e.stale)return;if(this.failoverAvailable=!0,!e.ok){this.failoverRules=[];return}this.failoverRules=gk(e.data)}catch(e){console.error(`Failed to fetch failover mappings:`,e),this.failoverRules=[],this.failoverError=`Unable to load failover mappings.`}finally{this.failoverLoading=!1}}resetFailoverForm(){this.failoverFormMode=`create`,this.failoverFormManaged=!1,this.failoverForm=Pk()}openFailoverCreate(){this.resetFailoverForm(),this.failoverFormOpen=!0,this.focusFailoverEditor()}openFailoverEdit(e){if(!e)return;this.resetFailoverForm(),this.failoverFormMode=`edit`,this.failoverFormOpen=!0,this.failoverFormManaged=!!e.managed;let t=this.failoverPrimaryModel(e),n=this.failoverTargets(e);this.failoverForm={source:t,target_model:n[0]||``,targets:n.slice(1).map(e=>({model:e})),enabled:e.enabled!==!1},this.focusFailoverEditor()}openFailoverForModel(e){if(!e||e.is_alias)return;let t=this.qualifiedModelName(e),n=this.failoverRules.find(e=>this.failoverPrimaryModel(e)===t);if(n){this.openFailoverEdit(n);return}this.resetFailoverForm(),this.failoverFormMode=`create`,this.failoverFormOpen=!0,this.failoverForm.source=t,this.focusFailoverEditor()}closeFailoverForm(){this.failoverFormOpen=!1}closeFailoverDraftsModal(){this.failoverDraftSaving||(this.failoverDraftsOpen=!1)}failoverFormTargets(){return Ck(this.failoverForm)}setFailoverFormTargets(e){let t=wk(e);this.failoverForm.target_model=t.target_model,this.failoverForm.targets=t.targets}addFailoverTarget(){Array.isArray(this.failoverForm.targets)||(this.failoverForm.targets=[]),this.failoverForm.targets.push({model:``}),this.focusFailoverEditor()}removeFailoverTarget(e){if(!Array.isArray(this.failoverForm.targets)){this.failoverForm.targets=[];return}this.failoverForm.targets.splice(e,1)}removePrimaryFailoverTarget(){let e=Array.isArray(this.failoverForm.targets)?this.failoverForm.targets:[];if(e.length>0){let t=e.shift();this.failoverForm.target_model=t&&t.model?t.model:``,this.failoverForm.targets=e;return}this.failoverForm.target_model=``}failoverRulePayload(){return Tk(this.failoverForm)}async submitFailoverForm(){if(this.failoverSaving||this.failoverGenerating||this.failoverFormManaged)return;let e=this.failoverRulePayload();if(!e.primary_model){this.failoverError=`Primary model is required.`;return}if(e.enabled&&e.fallback_models.length===0){this.failoverError=`Add at least one failover target.`;return}this.failoverSaving=!0,this.failoverError=``;try{let t=await ms(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to save failover mapping.`;return}q.success(`Failover mapping saved.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to save failover mapping:`,e),this.failoverError=`Failed to save failover mapping.`}finally{this.failoverSaving=!1}}async deleteFailoverRule(e){let t=String(e&&this.failoverPrimaryModel(e)||this.failoverForm.source||``).trim();if(!(!t||this.failoverSaving||this.failoverGenerating)&&confirm(`Remove failover mapping for "`+t+`"?`)){this.failoverSaving=!0,this.failoverError=``;try{let e=await ms(`/admin/failover`,`DELETE`,{primary_model:t},{label:`failover mapping`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mapping.`;return}q.success(`Failover mapping removed.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to remove failover mapping:`,e),this.failoverError=`Failed to remove failover mapping.`}finally{this.failoverSaving=!1}}}async generateFailoverForForm(){if(this.failoverGenerating||this.failoverSaving||this.failoverFormManaged)return;let e=String(this.failoverForm.source||``).trim();if(!e){this.failoverError=`Primary model is required.`;return}this.failoverGenerating=!0,this.failoverError=``;try{let t=await ms(`/admin/failover/generate`,`POST`,{primary_model:e},{label:`failover generation`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to generate failover mapping.`;return}let n=gk(t.data),r=n.find(t=>this.failoverPrimaryModel(t)===e)||n[0]||null,i=this.failoverTargets(r);if(i.length===0){this.failoverError=`No failover suggestions were generated for this model.`;return}this.setFailoverFormTargets(i),q.success(`Generated `+i.length+` fallback model`+(i.length===1?`.`:`s.`)),this.focusFailoverEditor()}catch(e){console.error(`Failed to generate failover mapping:`,e),this.failoverError=`Failed to generate failover mapping.`}finally{this.failoverGenerating=!1}}openFailoverResetDialog(){Ps.open({title:`Remove failover models`,titleId:`failoverResetDialogTitle`,inputId:`failover-reset-confirmation`,message:`Remove every dashboard-managed failover mapping. Configuration-managed mappings remain active.`,requiredText:`remove`,confirmLabel:`Remove Failover`,icon:Eo,dialogClass:`budget-reset-dialog`,onConfirm:async()=>{await this.resetFailoverRules(),this.failoverError&&(Ps.error=this.failoverError)}})}async resetFailoverRules(){if(!this.failoverSaving){this.failoverSaving=!0,this.failoverError=``;try{let e=await ms(`/admin/failover/reset`,`POST`,void 0,{label:`failover removal`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mappings.`;return}this.failoverRules=gk(e.data),this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,q.success(`Dashboard-managed failover mappings removed.`),Ps.close()}catch(e){console.error(`Failed to remove failover mappings:`,e),this.failoverError=`Failed to remove failover mappings.`}finally{this.failoverSaving=!1}}}async generateFailoverRules(){if(!(this.failoverGenerating||this.failoverDraftSaving)){this.failoverGenerating=!0,this.failoverError=``,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!0;try{let e=await ms(`/admin/failover/generate`,`POST`,void 0,{label:`failover generation`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to generate failover mappings.`;return}this.failoverGeneratedRules=gk(e.data),this.selectAllFailoverDrafts(this.failoverGeneratedRules)}catch(e){console.error(`Failed to generate failover mappings:`,e),this.failoverError=`Failed to generate failover mappings.`}finally{this.failoverGenerating=!1}}}failoverDraftKey(e){return Ek(e)}selectAllFailoverDrafts(e){this.failoverDraftSelections=Dk(e)}failoverDraftSelected(e){return Ok(this.failoverDraftSelections,e)}setFailoverDraftSelected(e,t){let n=this.failoverDraftKey(e);n&&(this.failoverDraftSelections={...this.failoverDraftSelections,[n]:!!t})}selectedFailoverDrafts(){return kk(this.failoverGeneratedRules,this.failoverDraftSelections)}selectedFailoverDraftCount(){return this.selectedFailoverDrafts().length}failoverDraftCountLabel(){return this.selectedFailoverDraftCount()+` / `+this.failoverGeneratedRules.length+` selected`}allFailoverDraftsSelected(){return Ak(this.failoverGeneratedRules,this.failoverDraftSelections)}toggleAllFailoverDrafts(){if(!(this.failoverDraftSaving||this.failoverGenerating||this.failoverGeneratedRules.length===0)){if(this.allFailoverDraftsSelected()){this.failoverDraftSelections={};return}this.selectAllFailoverDrafts(this.failoverGeneratedRules)}}failoverDraftSearchText(e){return jk(e)}filteredFailoverDrafts(){return Mk(this.failoverGeneratedRules,this.failoverDraftFilter)}failoverDraftPayload(e){return Nk(e)}async saveSelectedFailoverDrafts(){if(this.failoverDraftSaving||this.failoverGenerating)return;let e=this.selectedFailoverDrafts();if(e.length===0){this.failoverError=`Select at least one failover draft.`;return}this.failoverDraftSaving=!0,this.failoverError=``;try{for(let t of e){let e=this.failoverDraftPayload(t);if(!e.primary_model||e.fallback_models.length===0){this.failoverError=`Generated failover draft is missing model data.`;return}let n=await ms(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(n.stale)return;if(!n.ok){this.failoverError=`Failed to save failover mapping.`;return}}q.success(`Saved `+e.length+` failover mapping`+(e.length===1?`.`:`s.`)),this.failoverDraftsOpen=!1,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.fetchFailoverRules()}catch(e){console.error(`Failed to save generated failover mappings:`,e),this.failoverError=`Failed to save failover mappings.`}finally{this.failoverDraftSaving=!1}}focusFailoverEditor(){setTimeout(()=>{let e=document.querySelector(`[data-failover-editor]`),t=e&&e.querySelector?e.querySelector(`[data-modal-autofocus], input:not([disabled]), textarea:not([disabled]), button:not([disabled])`):null;t&&typeof t.focus==`function`&&t.focus({preventScroll:!0})},0)}failoverTargetLabel(e){return _k(e)}failoverPrimaryModel(e){return mk(e)}failoverTargets(e){return hk(e)}findFailoverMapping(e){return yk(this.failoverRules,e)}hasActiveFailoverMapping(e){return bk(this.failoverRules,e)}failoverButtonClass(e){return xk(this.failoverRules,e)}failoverButtonLabel(e){return Sk(this.failoverRules,e)}normalizeFailoverRules(e){return gk(e)}failoverRuleStatus(e){return vk(e)}qualifiedModelName(e){return UD(e)}},Fk=R(``),Ik=R(``),Lk=R(`Config`),Rk=R(`
Targets
`),zk=R(``),Bk=R(`
Redirects to
`),Vk=R(` `),Hk=R(`
`),Uk=R(`
`),Wk=R(`
`);function Gk(e,t){E(t,!0);let n=O(()=>lk.modelRowPricing(t.row));var r=Wk(),i=M(r),a=M(i),o=M(a),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=e=>{z(e,Fk())};V(l,e=>{t.row.is_alias&&e(u)});var d=P(l,2),f=e=>{z(e,Ik())};V(d,e=>{!t.row.is_alias&&t.row.masking_alias&&e(f)});var p=P(d,2),m=e=>{z(e,Lk())},h=O(()=>TO(t.row));V(p,e=>{I(h)&&e(m)}),T(o);var g=P(o,2),_=e=>{var n=Rk(),r=P(M(n)),i=M(r,!0);T(r),T(n),F(()=>B(i,t.row.secondary_name)),z(e,n)};V(g,e=>{t.row.is_alias&&e(_)});var v=P(g,2),y=e=>{var n=Bk(),r=P(M(n)),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=zk();F(e=>{W(n,`aria-label`,HO.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),W(n,`title`,HO.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),n.disabled=e},[()=>!!HO.rowDeletingKey]),L(`click`,n,()=>HO.removeRedirectRow(t.row)),z(e,n)},s=O(()=>HO.virtualModelsAvailable&&CO(t.row));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>nO(t.row.masking_alias)]),z(e,n)};V(v,e=>{!t.row.is_alias&&t.row.masking_alias&&e(y)}),T(a),T(i);var b=P(i);H(b,17,()=>t.columns,oi,(e,r)=>{var i=Vk(),a=M(i,!0);T(i),F(e=>{U(i,1,Fi(I(r).class),`svelte-1iynym`),B(a,e)},[()=>I(r).value(t.row,I(n))]),z(e,i)});var x=P(b),S=M(x),C=e=>{var n=Hk(),r=M(n);dk(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>HO.rowDeletingKey===t.row.key?`Removing alias `+t.row.alias.name:`Remove alias `+t.row.alias.name),r=O(()=>!!HO.rowDeletingKey);iT(e,{get label(){return I(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>HO.removeAliasRow(t.row),get disabled(){return I(r)},children:(e,t)=>{G(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}})}},o=O(()=>HO.virtualModelsAvailable&&SO(t.row));V(i,e=>{I(o)&&e(a)});var s=P(i,2),c=e=>{{let n=O(()=>`Edit alias `+t.row.alias.name);iT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>HO.openVirtualModelEditAlias(t.row.alias),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{HO.virtualModelsAvailable&&e(c)}),T(n),z(e,n)},w=e=>{var n=Uk(),r=M(n);dk(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>lk.modelPricingButtonLabel(`model pricing for `+t.row.display_name,lk.hasModelPricingOverride(t.row))),r=O(()=>lk.modelPricingButtonClass(lk.hasModelPricingOverride(t.row)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>lk.openModelPricingOverrideEdit(t.row),children:(e,t)=>{G(e,{get icon(){return Wa},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(i,e=>{lk.modelPricingOverridesAvailable&&e(a)});var o=P(i,2),s=e=>{{let n=O(()=>Z.failoverButtonLabel(t.row)),r=O(()=>Z.failoverButtonClass(t.row));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>Z.openFailoverForModel(t.row),children:(e,t)=>{G(e,{get icon(){return So},class:`table-icon-svg`})},$$slots:{default:!0}})}},c=O(()=>Z.failoverAvailable&&Z.failoverEnabled());V(o,e=>{I(c)&&e(s)});var l=P(o,2),u=e=>{{let n=O(()=>X.rateLimitGaugeTitle(t.row.display_name,X.rateLimitGaugeClassForModel(t.row))),r=O(()=>X.rateLimitGaugeClassForModel(t.row));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>X.openRateLimitInspectorForModel(t.row),children:(e,t)=>{G(e,{get icon(){return Xa},class:`table-icon-svg`})},$$slots:{default:!0}})}},d=O(()=>X.rateLimitsEnabled()&&X.rateLimitInspectorModelID(t.row));V(l,e=>{I(d)&&e(u)});var f=P(l,2),p=e=>{{let n=O(()=>`Edit redirect for `+t.row.display_name);iT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>HO.openVirtualModelEditAlias(t.row.masking_alias),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(f,e=>{HO.virtualModelsAvailable&&t.row.masking_alias&&t.row.masking_alias.name&&e(p)});var m=P(f,2),h=e=>{{let n=O(()=>OO(`model access for `+t.row.display_name,EO(t.row.access))),r=O(()=>DO(EO(t.row.access)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>HO.openVirtualModelEditModel(t.row),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(m,e=>{HO.virtualModelsAvailable&&!t.row.masking_alias&&e(h)}),T(n),z(e,n)};V(S,e=>{t.row.is_alias?e(C):e(w,-1)}),T(x),T(r),F((e,n)=>{W(r,`id`,e),U(r,1,n,`svelte-1iynym`),B(c,t.row.display_name)},[()=>wO(t.row)||void 0,()=>Fi(xO(t.row))]),z(e,r),D()}Hr([`click`]);var Kk={headerLines:[`Modes`],value:e=>(e.model?.metadata?.modes??[]).join(`, `)||`-`};function qk(e,t){return{headerLines:e,class:`col-price`,value:t}}var Jk=qk([`Input / Output ($/MTok)`],(e,t)=>ic(t?.input_per_mtok)+` / `+ic(t?.output_per_mtok)),Yk={all:[Kk,Jk],text_generation:[Kk,Jk,qk([`Cached $/MTok`],(e,t)=>ic(t?.cached_input_per_mtok))],embedding:[qk([`Input`,`$/MTok`],(e,t)=>ic(t?.input_per_mtok))],image:[qk([`$/Image`],(e,t)=>ac(t?.per_image))],audio:[qk([`$/Second`],(e,t)=>ac(t?.per_second_input)),qk([`$/Character`],(e,t)=>ac(t?.per_character_input))],video:[qk([`$/Second (In)`],(e,t)=>ac(t?.per_second_input)),qk([`$/Second (Out)`],(e,t)=>ac(t?.per_second_output))],utility:[qk([`$/Page`],(e,t)=>ac(t?.per_page)),qk([`$/Request`],(e,t)=>ac(t?.per_request))]};function Xk(e){return Yk[e]||Yk.all}function Zk(e){return Xk(e).length+2}var Qk=R(`
`),$k=R(` `,1),eA=R(``),tA=R(` `),nA=R(` `),rA=R(`
`),iA=R(`
`),aA=R(`
Model
`);function oA(e,t){E(t,!0);let n=O(()=>kc.activeCategory||`all`),r=O(()=>Xk(I(n))),i=O(()=>Zk(I(n)));var a=aA(),o=M(a),s=M(o),c=M(s),l=P(M(c));H(l,17,()=>I(r),oi,(e,t)=>{var n=eA();H(n,21,()=>I(t).headerLines,oi,(e,t,n)=>{var r=$k(),i=N(r),a=e=>{z(e,Qk())};V(i,e=>{n>0&&e(a)});var o=P(i,1,!0);F(()=>B(o,I(t))),z(e,r)}),T(n),F(()=>U(n,1,Fi(I(t).class),`svelte-1911hy6`)),z(e,n)});var u=P(l);pk(M(u),{}),T(u),T(c),T(s),H(P(s),17,()=>HO.filteredDisplayModelGroups,e=>e.key,(e,t)=>{var n=iA(),a=M(n),o=M(a),s=M(o),c=M(s),l=M(c),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=e=>{var n=tA(),r=M(n,!0);T(n),F(()=>B(r,`(`+I(t).type_label+`)`)),z(e,n)};V(f,e=>{I(t).type_label&&e(p)});var m=P(f,2),h=e=>{var n=nA(),r=M(n,!0);T(n),F(()=>B(r,I(t).item_count_label)),z(e,n)};V(m,e=>{I(t).item_count_label&&e(h)}),T(l);var g=P(l,2),_=e=>{var n=rA(),r=M(n,!0);T(n),F(()=>B(r,I(t).access_summary)),z(e,n)};V(g,e=>{I(t).access_summary&&e(_)}),T(c);var v=P(c,2),y=M(v),b=e=>{dk(e,{get row(){return I(t)}})};V(y,e=>{I(t).access.selector&&e(b)});var x=P(y,2),S=e=>{{let n=O(()=>lk.modelPricingButtonLabel(`provider pricing for `+I(t).display_name,lk.hasProviderPricingOverride(I(t)))),r=O(()=>lk.modelPricingButtonClass(lk.hasProviderPricingOverride(I(t))));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>lk.openProviderPricingOverrideEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return Wa},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(x,e=>{lk.modelPricingOverridesAvailable&&I(t).provider_name&&e(S)});var C=P(x,2),w=e=>{{let n=O(()=>X.rateLimitGaugeTitle(`provider `+I(t).display_name,X.rateLimitGaugeClassForProvider(I(t)))),r=O(()=>X.rateLimitGaugeClassForProvider(I(t)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>X.openRateLimitInspectorForProvider(I(t)),children:(e,t)=>{G(e,{get icon(){return Xa},class:`table-icon-svg`})},$$slots:{default:!0}})}},ee=O(()=>X.rateLimitsEnabled()&&I(t).provider_name);V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{{let n=O(()=>OO(`provider access for `+I(t).display_name,EO(I(t).access))),r=O(()=>DO(EO(I(t).access)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>HO.openProviderOverrideEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(te,e=>{HO.virtualModelsAvailable&&I(t).access.selector&&e(ne)}),T(v),T(s),T(o),T(a),H(P(a),17,()=>I(t).rows,e=>e.key,(e,t)=>{Gk(e,{get row(){return I(t)},get columns(){return I(r)}})}),T(n),F(()=>{W(o,`colspan`,I(i)),B(d,I(t).display_name)}),z(e,n)}),T(o),T(a),z(e,a),D()}var sA=R(``);function cA(e,t){let n=ya(t,`enabled`,3,!1),r=ya(t,`label`,3,``),i=ya(t,`disabled`,3,!1),a=ya(t,`restricted`,3,!1);var o=sA();let s;var c=P(M(o),2),l=M(c,!0);T(c),T(o),F(()=>{s=U(o,1,`alias-toggle`,null,s,{enabled:n(),restricted:a()}),o.disabled=i(),W(o,`aria-label`,(n()?`Disable `:`Enable `)+r()),B(l,t.text??(n()?`Enabled`:`Disabled`))}),L(`click`,o,function(...e){t.onclick?.apply(this,e)}),z(e,o)}Hr([`click`]);var lA=R(``),uA=R(`
`);function dA(e,t){E(t,!0);let n=ya(t,`model`,15,``),r=ya(t,`weight`,15),i=ya(t,`id`,3,void 0),a=ya(t,`placeholder`,3,`openai/gpt-4o`),o=ya(t,`showRemove`,3,!0);var s=uA(),c=M(s);na(c);var l=P(c,2),u=e=>{var t=lA();na(t),F(()=>t.disabled=HO.vmFormManaged),da(t,r),z(e,t)},d=O(()=>HO.vmFormShowWeights());V(l,e=>{I(d)&&e(u)});var f=P(l,2),p=e=>{iT(e,{label:`Remove target`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,get onclick(){return t.onremove},get disabled(){return HO.vmFormManaged},children:(e,t)=>{G(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}})};V(f,e=>{o()&&e(p)}),T(s),F(()=>{W(c,`id`,i()),W(c,`placeholder`,a()),c.disabled=HO.vmFormManaged}),da(c,n),z(e,s),D()}var fA=R(`

`),pA=R(`adaptive lets the registered routing extension pick the target per + request.`,1),mA=R(`Add one target to make this a redirect/alias, or two or more to load + balance across them, then pick a strategy: round_robin rotates across targets + (weight biases the share) and cost always routes to the cheapest available + target. Leave Targets empty to make it only an access policy on the Source selector. The selector uses / for all providers and + models, for one provider, or for one model. user_paths is + matched against the effective request user_path: the managed API key user_path when present, otherwise the configured user path request header.`,1),hA=R(``),gA=R(`

This virtual model is defined in configuration (config.yaml / VIRTUAL_MODELS) and is read-only here. Edit your configuration to change it.

`),_A=R(``),vA=R(``),yA=R(``),bA=R(`
`,1),xA=R(``),SA=R(`Use / to allow every user path. Use a team path to restrict to that + subtree, or an unused path to make the selector unavailable.`,1),CA=R(``),wA=R(` `),TA=R(`
Targets
`,1);function EA(e,t){E(t,!0);let n=HO;An(()=>{n.vmFormOpen&&vs.ensureLoaded()});{let t=e=>{US(e,{copyId:`virtual-model-help-copy`,label:`virtual model help`,get open(){return n.vmFormHelpOpen},set open(e){n.vmFormHelpOpen=e},title:e=>{var t=fA(),r=M(t,!0);T(t),F(()=>B(r,n.vmFormDisplayName||n.vmForm.source||`Virtual model`)),z(e,t)},help:e=>{Ue();var t=mA(),n=P(N(t),7),r=e=>{var t=pA();Ue(),z(e,t)},i=O(()=>vs.virtualModelStrategies().includes(`adaptive`));V(n,e=>{I(i)&&e(r)});var a=P(n,8);a.textContent=`{provider_name}/`;var o=P(a,2);o.textContent=`{provider_name}/{model}`,Ue(7),z(e,t)},$$slots:{title:!0,help:!0}})},r=e=>{var t=Qr(),r=N(t),i=e=>{var t=hA();F(()=>t.disabled=n.vmDeleting||n.vmSubmitting),L(`click`,t,()=>n.deleteVirtualModel()),z(e,t)};V(r,e=>{n.vmFormHasExisting&&!n.vmFormManaged&&e(i)}),z(e,t)},i=O(()=>n.vmDeleting||n.vmFormManaged),a=O(()=>n.vmFormMode===`edit`?`Save`:`Create`),o=O(()=>n.vmFormMode===`edit`?po:co);cE(e,{get open(){return n.vmFormOpen},ariaLabel:`Virtual model editor`,get error(){return n.vmFormError},get submitting(){return n.vmSubmitting},get submitDisabled(){return I(i)},get submitLabel(){return I(a)},get submitIcon(){return I(o)},onclose:()=>n.closeVirtualModelForm(),onsubmit:()=>n.submitVirtualModelForm(),header:t,extraActions:r,children:(e,t)=>{var r=TA(),i=N(r),a=e=>{z(e,gA())};V(i,e=>{n.vmFormManaged&&e(a)});var o=P(i,2);uE(o,{id:`virtual-model-source`,label:`Source`,children:(e,t)=>{var r=_A();na(r),F(()=>r.disabled=n.vmFormSourceLocked||n.vmFormManaged),da(r,()=>n.vmForm.source,e=>n.vmForm.source=e),z(e,r)},$$slots:{default:!0}});var s=P(o,2);H(s,21,()=>kc.models,e=>UD(e),(e,t)=>{var n=vA(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>UD(I(t)),()=>UD(I(t))]),z(e,n)}),T(s);var c=P(s,2),l=P(M(c),2);{let e=O(()=>n.vmFormHasPrimaryTarget());dA(l,{id:`virtual-model-target`,get showRemove(){return I(e)},onremove:()=>n.removePrimaryTarget(),get model(){return n.vmForm.target_model},set model(e){n.vmForm.target_model=e},get weight(){return n.vmForm.target_weight},set weight(e){n.vmForm.target_weight=e}})}var u=P(l,2);H(u,17,()=>n.vmForm.targets,oi,(e,t,r)=>{dA(e,{placeholder:`groq/llama`,onremove:()=>n.removeVmTarget(r),get model(){return I(t).model},set model(e){I(t).model=e},get weight(){return I(t).weight},set weight(e){I(t).weight=e}})});var d=P(u,2),f=M(d);G(M(f),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(f),T(d),T(c);var p=P(c,2),m=e=>{var t=bA(),r=N(t);uE(r,{id:`virtual-model-strategy`,label:`Load-balancing strategy`,children:(e,t)=>{var r=yA();H(r,21,()=>n.vmStrategyOptions(),e=>e.value,(e,t)=>{var n=vA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(r),F(()=>r.disabled=n.vmFormManaged),Gi(r,()=>n.vmForm.strategy,e=>n.vmForm.strategy=e),z(e,r)},$$slots:{default:!0}});var i=P(r,2),a=M(i),o=M(a);na(o),Ue(2),T(a),T(i),F(()=>o.disabled=n.vmFormManaged),fa(o,()=>n.vmForm.session_affinity,e=>n.vmForm.session_affinity=e),z(e,t)},h=O(()=>n.vmFormShowStrategy());V(p,e=>{I(h)&&e(m)});var g=P(p,2),_=M(g);US(_,{copyId:`virtual-model-user-paths-help`,label:`user paths help`,get open(){return n.vmFormUserPathsHelpOpen},set open(e){n.vmFormUserPathsHelpOpen=e},title:e=>{z(e,xA())},help:e=>{Ue();var t=SA();Ue(2),z(e,t)},$$slots:{title:!0,help:!0}});var v=P(_,2);ft(v),W(v,`placeholder`,`/ +/team/alpha +/non-existing`),T(g);var y=P(g,2);uE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=CA();ft(r),F(()=>r.disabled=n.vmFormManaged),da(r,()=>n.vmForm.description,e=>n.vmForm.description=e),z(e,r)},$$slots:{default:!0}});var b=P(y,2),x=M(b),S=e=>{var t=wA(),r=M(t,!0);T(t),F(()=>B(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),z(e,t)};V(x,e=>{n.vmFormMode===`edit`&&e(S)});var C=P(x,2),w=M(C);{let e=O(()=>n.vmFormToggleRestricted()),t=O(()=>n.vmFormToggleLabel());cA(w,{get enabled(){return n.vmForm.enabled},get restricted(){return I(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return I(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}T(C),T(b),F(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),L(`click`,f,()=>n.addVmTarget()),da(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),z(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}D()}Hr([`click`]);var DA=R(`

Pricing override

`,1),OA=R(``),kA=R(``),AA=R(``),jA=R(``),MA=R(`
`),NA=R(`
Tiered pricing exists for this override and will be preserved. Tier editing can be added + without a database migration.
`),PA=R(`
No pricing fields set.
`),FA=R(`
`),IA=R(`

Currency is USD. Saved fields override model registry and config.yaml pricing for this + selector; unset fields continue to inherit.

Price Type USD Source
`,1);function LA(e,t){E(t,!0);let n=lk;cE(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=DA(),r=P(N(t),2),i=M(r,!0);T(r),F(()=>B(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),z(e,t)},extraActions:e=>{var t=Qr(),r=N(t),i=e=>{var t=OA();F(()=>t.disabled=n.modelPricingOverrideSubmitting),L(`click`,t,()=>n.deleteModelPricingOverride()),z(e,t)};V(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),z(e,t)},children:(e,t)=>{var r=IA(),i=N(r),a=M(i);uE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=kA();na(r),da(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),z(e,r)},$$slots:{default:!0}});var o=P(a,2),s=e=>{uE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=jA();H(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=AA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(r),L(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Gi(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),z(e,r)},$$slots:{default:!0}})};V(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),T(i);var c=P(i,4);H(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=MA(),a=M(i),o=M(a),s=P(o,2);H(s,21,()=>n.availablePricingFieldOptions(I(t)),e=>e.value,(e,t)=>{var n=AA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).group+` - `+I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(s),T(a);var c=P(a,2),l=M(c),u=P(l,2);na(u),T(c);var d=P(c,2);{let e=O(()=>`Remove `+n.pricingFieldLabel(I(t).field));iT(d,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(I(t)),children:(e,t)=>{G(e,{get icon(){return Mo},class:`table-icon-svg`})},$$slots:{default:!0}})}T(i),F(()=>{W(o,`for`,`pricing-type-`+I(t).id),W(s,`id`,`pricing-type-`+I(t).id),W(l,`for`,`pricing-value-`+I(t).id),W(u,`id`,`pricing-value-`+I(t).id)}),Gi(s,()=>I(t).field,e=>I(t).field=e),da(u,()=>I(t).value,e=>I(t).value=e),z(e,i)}),T(c);var l=P(c,2),u=M(l);G(M(u),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(u),T(l);var d=P(l,2),f=e=>{z(e,NA())};V(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=P(d,2),m=P(M(p),2),h=e=>{z(e,PA())},g=O(()=>n.modelPricingEffectivePreviewRows().length===0);V(m,e=>{I(g)&&e(h)}),H(P(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=FA(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(n),F(e=>{B(i,I(t).label),B(o,e),B(c,I(t).source)},[()=>I(t).value===null||I(t).value===void 0?`-`:ac(Number(I(t).value))]),z(e,n)}),T(p),L(`click`,u,()=>n.addModelPricingOverrideRow()),z(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),D()}Hr([`click`,`change`]);var RA=R(`

Failover mapping

`,1),zA=R(``),BA=R(`

This failover mapping is defined in configuration and is read-only here.

`),VA=R(``),HA=R(`
`),UA=R(`
`,1),WA=R(`
`);function GA(e,t){E(t,!0);{let t=e=>{var t=RA(),n=P(N(t),2),r=M(n,!0);T(n),F(()=>B(r,Z.failoverForm.source||`Failover`)),z(e,t)},n=e=>{var t=Qr(),n=N(t),r=e=>{var t=zA();F(()=>t.disabled=Z.failoverSaving||Z.failoverGenerating),L(`click`,t,()=>Z.deleteFailoverRule()),z(e,t)};V(n,e=>{Z.failoverFormMode===`edit`&&!Z.failoverFormManaged&&e(r)}),z(e,t)},r=O(()=>Z.failoverGenerating||Z.failoverFormManaged);cE(e,{get open(){return Z.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Z.failoverError},get submitting(){return Z.failoverSaving},get submitDisabled(){return I(r)},submitLabel:`Save`,onclose:()=>Z.closeFailoverForm(),onsubmit:()=>Z.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=WA(),r=M(n),i=e=>{z(e,BA())};V(r,e=>{Z.failoverFormManaged&&e(i)});var a=P(r,2);H(a,21,()=>kc.models,oi,(e,t)=>{var n=VA(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>UD(I(t)),()=>UD(I(t))]),z(e,n)}),T(a);var o=P(a,2);uE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=UA(),r=N(n),i=M(r),a=M(i);na(a);var o=P(a,2),s=e=>{iT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removePrimaryFailoverTarget(),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{G(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}})};V(o,e=>{Z.failoverForm.target_model&&e(s)}),T(i),H(P(i,2),17,()=>Z.failoverForm.targets,oi,(e,t,n)=>{var r=HA(),i=M(r);na(i),iT(P(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removeFailoverTarget(n),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{G(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}}),T(r),F(()=>i.disabled=Z.failoverFormManaged),da(i,()=>I(t).model,e=>I(t).model=e),z(e,r)}),T(r);var c=P(r,2),l=M(c);G(M(l),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(l);var u=P(l,2),d=M(u);G(d,{get icon(){return Ao},class:`form-action-icon`});var f=P(d,2),p=M(f,!0);T(f),T(u),T(c),F(e=>{a.disabled=Z.failoverFormManaged,l.disabled=Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving,u.disabled=e,B(p,Z.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving||!Z.failoverEnabled()]),da(a,()=>Z.failoverForm.target_model,e=>Z.failoverForm.target_model=e),L(`click`,l,()=>Z.addFailoverTarget()),L(`click`,u,()=>Z.generateFailoverForForm()),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=M(s);cA(M(c),{get enabled(){return Z.failoverForm.enabled},label:`failover mapping`,get disabled(){return Z.failoverFormManaged},onclick:()=>{Z.failoverFormManaged||(Z.failoverForm.enabled=!Z.failoverForm.enabled)}}),T(c),T(s),T(n),z(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}D()}Hr([`click`]);var KA=R(` `),qA=R(`
`),JA=R(``),YA=R(`
`),XA=R(`

No failover suggestions were generated.

`),ZA=R(`

No failover drafts match the filter.

`),QA=R(``),$A=R(``);function ej(e,t){E(t,!0),ks(e,{get open(){return Z.failoverDraftsOpen},variant:`editor`,onclose:()=>Z.closeFailoverDraftsModal(),children:(e,t)=>{var n=$A(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=KA(),n=M(t,!0);T(t),F(e=>B(n,e),[()=>Z.failoverDraftCountLabel()]),z(e,t)};V(a,e=>{Z.failoverGeneratedRules.length>0&&e(o)}),Ts(P(a,2),{label:`Close failover drafts`,onclick:()=>Z.closeFailoverDraftsModal(),get disabled(){return Z.failoverDraftSaving}}),T(i),T(r);var s=P(r,2),c=e=>{nT(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};V(s,e=>{Z.failoverGenerating&&e(c)});var l=P(s,2),u=e=>{var t=qA(),n=M(t);sw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Z.failoverDraftFilter},set value(e){Z.failoverDraftFilter=e}});var r=P(n,2),i=M(r);G(i,{get icon(){return za},class:`form-action-icon`});var a=P(i,2),o=M(a,!0);T(a),T(r),T(t),F(e=>{r.disabled=Z.failoverDraftSaving,B(o,e)},[()=>Z.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),L(`click`,r,()=>Z.toggleAllFailoverDrafts()),z(e,t)};V(l,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&e(u)});var d=P(l,2),f=e=>{var t=YA();H(t,21,()=>Z.filteredFailoverDrafts(),e=>`failover-draft:`+Z.failoverPrimaryModel(e),(e,t)=>{var n=JA(),r=M(n);na(r);var i=P(r,2),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(i),T(n),F((e,t,n,i)=>{ia(r,e),r.disabled=Z.failoverDraftSaving,W(r,`aria-label`,t),B(o,n),B(c,i)},[()=>Z.failoverDraftSelected(I(t)),()=>`Select failover draft for `+Z.failoverPrimaryModel(I(t)),()=>Z.failoverPrimaryModel(I(t)),()=>Z.failoverTargetLabel(I(t))]),L(`change`,r,e=>Z.setFailoverDraftSelected(I(t),e.currentTarget.checked)),z(e,n)}),T(t),z(e,t)},p=O(()=>!Z.failoverGenerating&&Z.filteredFailoverDrafts().length>0);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{z(e,XA())};V(m,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length===0&&!Z.failoverError&&e(h)});var g=P(m,2),_=e=>{z(e,ZA())},v=O(()=>!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&Z.filteredFailoverDrafts().length===0);V(g,e=>{I(v)&&e(_)});var y=P(g,2),b=e=>{var t=QA(),n=M(t,!0);T(t),F(()=>B(n,Z.failoverError)),z(e,t)};V(y,e=>{Z.failoverError&&e(b)});var x=P(y,2),S=M(x),C=P(S,2),w=M(C);G(w,{get icon(){return po},class:`form-action-icon`});var ee=P(w,2),te=M(ee,!0);T(ee),T(C),T(x),T(n),F(e=>{S.disabled=Z.failoverDraftSaving,C.disabled=e,B(te,Z.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Z.failoverGenerating||Z.failoverDraftSaving||Z.selectedFailoverDraftCount()===0]),L(`click`,S,()=>Z.closeFailoverDraftsModal()),L(`click`,C,()=>Z.saveSelectedFailoverDrafts()),z(e,n)},$$slots:{default:!0}}),D()}Hr([`click`,`change`]);var tj=R(`
Rate limit management is unavailable.
`),nj=R(` Add`,1),rj=R(`

`),ij=R(`

No rules.

`),aj=R(` Edit`,1),oj=R(`
`),sj=R(`
`),cj=R(`

`),lj=R(``),uj=R(``);function dj(e,t){E(t,!0);function n(){K.dialogOpen||X.closeRateLimitInspector()}ks(e,{get open(){return X.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=uj(),r=M(n),i=M(r),a=P(M(i),2),o=M(a),s=M(o,!0);T(o),T(a),T(i),Ts(P(i,2),{label:`Close rate limits inspector`,onclick:()=>X.closeRateLimitInspector()}),T(r);var c=P(r,2),l=e=>{nT(e,{label:`Loading rate limits...`})},u=e=>{z(e,tj())},d=e=>{var t=Qr();H(N(t),17,()=>X.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=cj(),r=M(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2);{let e=O(()=>`Add `+I(t).title.toLowerCase());iT(o,{get label(){return I(e)},class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(I(t).scope,I(t).subject),children:(e,t)=>{var n=nj();G(N(n),{get icon(){return co},class:`table-icon-svg`}),Ue(2),z(e,n)},$$slots:{default:!0}})}T(r);var s=P(r,2),c=e=>{var n=rj(),r=M(n,!0);T(n),F(()=>B(r,I(t).hint)),z(e,n)};V(s,e=>{I(t).hint&&e(c)});var l=P(s,2),u=e=>{z(e,ij())},d=e=>{var n=sj();H(n,21,()=>I(t).items,e=>X.rateLimitKey(e),(e,t)=>{var n=oj(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=M(c);{let e=O(()=>X.rateLimitIsConcurrent(I(t))?Aa:To);G(l,{get icon(){return I(e)},class:`budget-period-icon`})}var u=P(l,2),d=M(u,!0);T(u),T(c),T(s);var f=P(s,2),p=M(f),m=M(p),h=M(m,!0);T(m);var g=P(m,2),_=M(g,!0);T(g),T(p);var v=P(p,2),y=M(v),b=e=>{iT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(null,null,I(t)),children:(e,t)=>{var n=aj();G(N(n),{get icon(){return oo},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}})},x=O(()=>!X.rateLimitIsReadOnly(I(t)));V(y,e=>{I(x)&&e(b)}),T(v),T(f),T(i),T(r),T(n),F((e,t,r,i,a,s,c,l)=>{U(n,1,`budget-row ${e??``}`),Hi(n,t),W(n,`title`,r),B(o,i),B(d,a),B(h,s),W(g,`title`,c),B(_,l)},[()=>X.rateLimitPressureClass(I(t)),()=>X.rateLimitPressureStyle(I(t)),()=>X.rateLimitPressurePercent(I(t))+`% of the most constrained cap used`,()=>X.rateLimitSubject(I(t)),()=>X.rateLimitPeriodLabel(I(t)),()=>X.rateLimitInspectorSummary(I(t)),()=>X.rateLimitIsReadOnly(I(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(I(t))]),z(e,n)}),T(n),z(e,n)};V(l,e=>{I(t).items.length===0?e(u):e(d,-1)}),T(n),F(()=>B(a,I(t).title)),z(e,n)}),z(e,t)};V(c,e=>{X.rateLimitsLoading?e(l):X.rateLimitsAvailable?e(d,-1):e(u,1)});var f=P(c,2),p=M(f),m=P(p,2),h=e=>{var t=lj();L(`click`,t,()=>{X.closeRateLimitInspector(),Wo.navigate(`rate-limits`)}),z(e,t)},g=O(()=>X.rateLimitsEnabled());V(m,e=>{I(g)&&e(h)}),T(f),T(n),F(()=>B(s,X.rateLimitInspector.title)),L(`click`,p,()=>X.closeRateLimitInspector()),z(e,n)},$$slots:{default:!0}}),D()}Hr([`click`]);var fj=R(`
models
`),pj=R(`
Virtual models feature is unavailable.
`),mj=R(`
`),hj=R(``),gj=R(`
`),_j=R(``),vj=R(`
`),yj=R(`

No models registered.

`),bj=R(`

No models in this category.

`),xj=R(`

No models match your filter.

`),Sj=R(`
`);function Cj(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`models`&&(HO.fetchVirtualModels(),lk.fetchModelPricingOverrides(),Z.fetchFailoverRules(),X.fetchRateLimitsPage())}),An(()=>{let e=HO.filteredDisplayModels.length;return Er(()=>HO.restartModelRendering(e)),()=>HO.stopModelRendering()});let n=O(()=>K.needsAuth);var r=Sj(),i=M(r),a=P(M(i),2),o=e=>{var t=fj(),n=M(t),r=M(n,!0);T(n),Ue(),T(t),F(()=>B(r,kc.filter?HO.filteredDisplayModels.length+` / `+HO.displayModels.length:HO.displayModels.length)),z(e,t)};V(a,e=>{HO.displayModels.length>0&&e(o)}),T(i);var s=P(i,2);jc(s,{});var c=P(s,2),l=e=>{z(e,pj())};V(c,e=>{!HO.virtualModelsAvailable&&!I(n)&&e(l)});var u=P(c,2),d=e=>{var t=mj(),n=M(t,!0);T(t),F(()=>B(n,HO.aliasError)),z(e,t)};V(u,e=>{HO.aliasError&&!I(n)&&e(d)});var f=P(u,2),p=e=>{var t=mj(),n=M(t,!0);T(t),F(()=>B(n,lk.modelPricingOverrideError)),z(e,t)};V(f,e=>{lk.modelPricingOverrideError&&!I(n)&&!lk.modelPricingOverrideFormOpen&&e(p)});var m=P(f,2),h=e=>{var t=gj();H(t,21,()=>kc.categories,e=>e.category,(e,t)=>{var n=hj();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(n),F(()=>{r=U(n,1,`category-tab svelte-scpjps`,null,r,{active:kc.activeCategory===I(t).category}),B(a,I(t).display_name),B(s,I(t).count)}),L(`click`,n,()=>kc.selectCategory(I(t).category)),z(e,n)}),T(t),z(e,t)};V(m,e=>{kc.categories.length>0&&e(h)});var g=P(m,2),_=e=>{var t=vj(),n=M(t);sw(M(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return kc.filter},set value(e){kc.filter=e}}),T(n);var r=P(n,2),i=M(r),a=e=>{var t=_j();G(M(t),{get icon(){return co},class:`alias-create-icon`}),Ue(2),T(t),L(`click`,t,()=>HO.openVirtualModelCreate()),z(e,t)};V(i,e=>{HO.virtualModelsAvailable&&e(a)}),T(r),T(t),z(e,t)};V(g,e=>{(HO.displayModels.length>0||kc.filter||HO.virtualModelsAvailable)&&e(_)});var v=P(g,2),y=e=>{{let t=O(()=>HO.modelLoadingText());nT(e,{get label(){return I(t)},class:`models-loading-state`})}},b=O(()=>HO.modelsBusy()&&!I(n));V(v,e=>{I(b)&&e(y)});var x=P(v,2);EA(x,{});var S=P(x,2);LA(S,{});var C=P(S,2),w=e=>{oA(e,{})};V(C,e=>{(HO.displayModels.length>0||kc.filter)&&e(w)});var ee=P(C,2),te=e=>{z(e,yj())};V(ee,e=>{HO.displayModels.length===0&&!kc.loading&&!I(n)&&!kc.filter&&(kc.activeCategory===`all`||!kc.activeCategory)&&e(te)});var ne=P(ee,2),re=e=>{z(e,bj())};V(ne,e=>{HO.displayModels.length===0&&!kc.loading&&!I(n)&&!kc.filter&&kc.activeCategory&&kc.activeCategory!==`all`&&e(re)});var ie=P(ne,2),ae=e=>{z(e,xj())};V(ie,e=>{HO.displayModels.length>0&&HO.filteredDisplayModels.length===0&&kc.filter&&e(ae)});var oe=P(ie,2);dj(oe,{});var se=P(oe,2);CD(se,{});var ce=P(se,2);GA(ce,{}),ej(P(ce,2),{}),T(r),z(e,r),D()}Hr([`click`]);var wj=`draft-workflow-preview`;function Tj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function Ej(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function Dj(e){return{ref:``,step:Number.isFinite(e)?e:10}}function Oj(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function kj(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function Aj(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function jj(e){return{cache:!!kj(e,`cache`,!1),audit:!!kj(e,`audit`,!1),usage:!!kj(e,`usage`,!1),budget:kj(e,`budget`,!0)!==!1,guardrails:!!kj(e,`guardrails`,!1),failover:kj(e,`failover`,!0)!==!1}}function Mj(e,t){let n=jj(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function Nj(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...Mj((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:jj(n).failover}}function Pj(e,t){return Nj(e,t).failover?`On`:`Off`}function Fj(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Oj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function Ij(e,t){return Nj(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function Lj(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function Rj(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function zj(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=Rj(e);t&&n.add(t)}),[...n].sort()}function Bj(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&Rj(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function Vj(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function Hj(e){return String(e&&e.scope_display||`global`).trim()||`global`}function Uj(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=Hj(e);return n===`global`?`All models`:n}function Wj(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function Gj(e){if(Wj(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function Kj(e){let t=e||Tj(),n=String(t.scope_provider||``).trim(),r=Gj(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function qj(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=Gj(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function Jj(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=Gj(e&&e.scope_user_path),i=qj({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function Yj(e,t){let n=t||Ej(),r=Lj(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=Gj(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===Gj(n.scope_user_path)}function Xj(e,t,n){let r=Kj(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>Yj(e,r))||null}function Zj(e){return String(e&&e.scope_type||``).trim()!==`global`}function Qj(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function $j(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,Lj(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function eM(e,t){let n=e||Tj(),r=Kj(n),i=jj(n.features||{}),a=Mj(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?Fj(n):[];return{id:wj,scope_type:qj(r),scope_display:Jj(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function tM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Tj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=Gj(a.scope_user_path),l=jj(a.features||{}),u=Mj(l,t),d=Xj(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=Aj(f,`failover`),m=p?kj(f,`failover`,!0)!==!1:null,h=i||Ej(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&Gj(h.scope_user_path)===Gj(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Oj(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function nM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||Ej(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!zj(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=Bj(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=Wj(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var rM=new class{#e=k(j([]));get workflows(){return I(this.#e)}set workflows(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get submitting(){return I(this.#o)}set submitting(e){A(this.#o,e,!0)}#s=k(``);get deactivatingID(){return I(this.#s)}set deactivatingID(e){A(this.#s,e,!0)}#c=k(``);get formError(){return I(this.#c)}set formError(e){A(this.#c,e,!0)}#l=k(!1);get formHydrated(){return I(this.#l)}set formHydrated(e){A(this.#l,e,!0)}#u=k(j(Ej()));get hydratedScope(){return I(this.#u)}set hydratedScope(e){A(this.#u,e,!0)}#d=k(j([]));get guardrailRefs(){return I(this.#d)}set guardrailRefs(e){A(this.#d,e,!0)}#f=k(j(Tj()));get form(){return I(this.#f)}set form(e){A(this.#f,e,!0)}#p=null;failoverVisible(){return vs.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:vs.cacheVisible(),audit:vs.auditVisible(),usage:vs.usageVisible(),budget:vs.budgetsVisible(),guardrails:vs.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return $j(this.workflows,this.filter)}providerOptions(){return zj(kc.models,this.hydratedScope)}modelOptions(e){return Bj(kc.models,e,this.hydratedScope)}activeScopeMatch(){return Xj(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return eM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=Ej(),this.form=Tj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:Lj(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?jj(e.workflow_payload.features):Nj(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:Oj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):Fj(e);this.form={scope_provider:Lj(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=Ej(),this.form=Tj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(Dj(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return tM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await aT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await aT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([vs.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=nM(e,{models:kc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await oT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}q.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!Zj(e))return;let n=Uj(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await oT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){q.error(e.error);return}q.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function iM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function aM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=j({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await iM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var oM=R(``);function sM(e,t){E(t,!0);let n=ya(t,`workflowID`,3,``),r=aM({logPrefix:`Failed to copy workflow ID:`});An(()=>{n(),r.reset()});let i=O(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=O(()=>n()?I(i)+` `+n():I(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=oM();let c;var l=P(M(s),4),u=M(l,!0);T(l);var d=P(l,2);G(M(d),{get icon(){return Ka}}),T(d),T(s),F(()=>{c=U(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),W(s,`title`,I(i)),W(s,`aria-label`,I(a)),B(u,n())}),L(`click`,s,o),z(e,s),D()}Hr([`click`]);var cM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Ot(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=fM(),l=M(c),u=e=>{var t=lM();let r;G(M(t),{get icon(){return n()}}),T(t),F(()=>r=U(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":I(i)===`workflow-node-endpoint`})),z(e,t)};V(l,e=>{n()&&e(u)});var d=P(l,2),f=M(d,!0);T(d);var p=P(d,2),m=e=>{var t=uM(),n=M(t,!0);T(t),F(()=>B(n,s())),z(e,t)};V(p,e=>{s()&&e(m)});var g=P(p,2),_=e=>{var t=dM(),n=M(t,!0);T(t),F(()=>B(n,o())),z(e,t)};V(g,e=>{o()&&e(_)}),T(c),F(()=>{U(c,1,Fi([`workflow-node`,I(i),a()]),`svelte-nbptrg`),B(f,r())}),z(e,c)},lM=R(`
`),uM=R(` `),dM=R(` `),fM=R(`
`),pM=R(`
`,1),mM=R(`
`,1),hM=R(`
`),gM=R(`
Async
`),_M=R(`
`);function vM(e,t){E(t,!0);let n=ya(t,`chart`,19,()=>({}));var r=_M();let i;var a=M(r),o=e=>{sM(e,{get workflowID(){return n().workflowID}})};V(a,e=>{n().workflowID&&e(o)});var s=P(a,2),c=M(s);cM(c,()=>({icon:Oo,label:`Client`,variant:`workflow-node-endpoint`}));var l=P(c,4);cM(l,()=>({icon:Ja,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=P(l,2),d=e=>{var t=pM(),r=N(t);cM(P(r,2),()=>({icon:Ja,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),F(()=>U(r,1,Fi([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),z(e,t)};V(u,e=>{n().showCache&&e(d)});var f=P(u,2),p=e=>{var t=mM();cM(P(N(t),2),()=>({icon:ko,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),z(e,t)};V(f,e=>{n().showBudget&&e(p)});var m=P(f,2),h=e=>{var t=mM();cM(P(N(t),2),()=>({icon:xo,label:`Guardrails`,sub:n().guardrailLabel})),z(e,t)};V(m,e=>{n().showGuardrails&&e(h)});var g=P(m,2),_=P(g,2);cM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=P(_,2),y=e=>{var t=pM(),r=N(t);cM(P(r,2),()=>({icon:ro,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),F(()=>U(r,1,Fi([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),z(e,t)};V(v,e=>{n().showFailover&&e(y)});var b=P(v,2);cM(P(b,2),()=>({icon:Ha,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),T(s);var x=P(s,2),S=e=>{var t=gM(),r=M(t),i=M(r),a=e=>{cM(e,()=>({icon:La,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};V(i,e=>{n().showUsage&&e(a)});var o=P(i,2),s=e=>{z(e,hM())};V(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=P(o,2),l=e=>{cM(e,()=>({icon:Ya,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};V(c,e=>{n().showAudit&&e(l)}),T(r),Ue(4),T(t),z(e,t)};V(x,e=>{n().showAsync&&e(S)}),T(r),F(()=>{i=U(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),U(g,1,Fi([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),U(b,1,Fi([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),z(e,r),D()}function yM(e){let t=Fj(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function bM(e,t){return t&&t.provider?t.provider:Lj(e&&e.scope)||`AI`}function xM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function SM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function CM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:jj(t)}function wM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function TM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return TM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=TM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:TM(e.error,t+1)):``}function EM(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||TM(t.response_body)}function DM(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function OM(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=wM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=DM(n);if(i)return i;let a=Lj(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function kM(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=wM(e),o=OM(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=EM(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function AM(e){return!!(e&&e.cacheHit)}function jM(e){return!!(e&&e.failoverTarget)}function MM(e){return!!(e&&e.budgetExceeded)}function NM(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function PM(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function FM(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function IM(e,t,n,r){return e?MM(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function LM(e){return MM(e)?`Exceeded`:null}function RM(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function zM(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function BM(e){return e&&e.failoverTarget?`Redirected`:null}function VM(e){return e&&e.failoverTarget?e.failoverTarget:null}function HM(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function UM(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function WM(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function GM(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function KM(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function qM(e){return!e||!e.authMethod?null:e.authMethod}function JM(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function YM(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function XM(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function ZM(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function QM(e,t){return!e||!e._live||YM(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function $M(e,t,n){return!e||!e._live?``:ZM(e)?`usage`:QM(e,t)?`audit`:YM(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function eN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?jj(i.features):Nj(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||MM(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||jM(t),m=SM(e,i.entry),h=$M(i.entry,t,a),g=ZM(i.entry),_=QM(i.entry,t),v=YM(i.entry,s),y=XM(i.entry,s);return{showBudget:c,budgetNodeClass:IM(c,t,s,h===`budget`),budgetStatusLabel:LM(t),showGuardrails:l,guardrailLabel:l?yM(e):``,showCache:!!i.forceCache||!!a.cache||AM(t),cacheNodeClass:NM(t,h===`cache`),cacheConnClass:PM(t),cacheStatusLabel:FM(t),showFailover:p,failoverNodeClass:p?RM(t):``,failoverConnClass:p?zM(t):``,failoverStatusLabel:p?BM(t):null,failoverTargetLabel:p?VM(t):null,aiLabel:bM(e,t),aiSublabel:xM(e,t),aiConnClass:HM(t),aiNodeClass:UM(t,h===`ai`),responseConnClass:HM(t),responseNodeClass:WM(t,h===`response`),responseNodeSublabel:GM(t),authNodeClass:KM(t,h===`auth`),authNodeSublabel:qM(t),usageNodeClass:JM(u,y,g),auditNodeClass:JM(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function tN(e,t){return eN(e,null,{forceCache:!1},t)}function nN(e,t,n){return eN(t,kM(e,t),{entry:e,features:CM(e)||(t?Nj(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var rN=R(`

`),iN=R(`

`),aN=R(`
`),oN=R(`
`),sN=R(`

No guardrails configured for this workflow.

`),cN=R(`

Guardrails

`),lN=R(``),uN=R(`

`);function dN(e,t){E(t,!0);let n=ya(t,`preview`,3,!1),r=O(()=>rM.featureCaps()),i=O(()=>Uj(t.workflow)),a=O(()=>Ij(t.workflow,I(r))),o=O(()=>tN(t.workflow,I(r))),s=O(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=uN();let l;var u=M(c),d=M(u),f=M(d),p=M(f,!0);T(f);var m=P(f,2),h=M(m,!0);T(m),T(d);var g=P(d,2),_=M(g),v=M(_,!0);T(_),T(g),T(u);var y=P(u,2),b=e=>{var n=rN(),r=M(n,!0);T(n),F(()=>B(r,t.workflow.description)),z(e,n)};V(y,e=>{t.workflow.description&&e(b)});var x=P(y,2),S=e=>{var n=iN(),i=M(n);T(n),F(e=>B(i,`Failover: ${e??``}`),[()=>Pj(t.workflow,I(r))]),z(e,n)},C=O(()=>rM.failoverVisible());V(x,e=>{I(C)&&e(S)});var w=P(x,2);vM(w,{get chart(){return I(o)}});var ee=P(w,2),te=e=>{var t=cN(),n=M(t),r=P(M(n),2),i=M(r,!0);T(r),T(n);var o=P(n,2),c=e=>{var t=oN();H(t,23,()=>I(a),(e,t)=>I(s)+t,(e,t)=>{var n=aN(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=M(a);T(a),T(n),F(()=>{B(i,I(t).ref),B(o,`step ${I(t).step??``}`)}),z(e,n)}),T(t),z(e,t)},l=e=>{z(e,sN())};V(o,e=>{I(a).length>0?e(c):e(l,-1)}),T(t),F(()=>B(i,I(a).length?I(a).length+` steps`:`None`)),z(e,t)},ne=O(()=>vs.guardrailsVisible());V(ee,e=>{I(ne)&&e(te)});var re=P(ee,2),ie=e=>{var n=lN(),r=M(n),a=M(r),o=M(a,!0);T(a);var s=P(a,2);{let e=O(()=>`Edit workflow `+I(i));iT(s,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>rM.openCreate(t.workflow),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}T(r);var c=P(r,2),l=M(c),u=M(l);T(l);var d=P(l,2),f=M(d);T(d);var p=P(d,2),m=M(p);T(p),T(c),T(n),F((e,n,r,s)=>{a.disabled=e,W(a,`aria-label`,`Deactivate workflow `+I(i)),W(a,`title`,n),B(o,rM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),B(u,`version: v${t.workflow.version??``}`),B(f,`created: ${r??``}`),B(m,`hash: ${s??``}`)},[()=>rM.deactivatingID===t.workflow.id||!Zj(t.workflow),()=>Zj(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>ss.formatTimestamp(t.workflow.created_at),()=>Qj(t.workflow.workflow_hash)]),L(`click`,a,()=>rM.deactivate(t.workflow)),z(e,n)};V(re,e=>{n()||e(ie)}),T(c),F((e,t)=>{l=U(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),B(p,e),B(h,I(i)),B(v,t)},[()=>Vj(t.workflow),()=>Hj(t.workflow)]),z(e,c),D()}Hr([`click`]);var fN=R(`

`),pN=R(``),mN=R(``),hN=R(``),gN=R(``),_N=R(``),vN=R(``),yN=R(``),bN=R(``),xN=R(``),SN=R(``),CN=R(``),wN=R(``),TN=R(`
No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
`),EN=R(`
`),DN=R(`
`),ON=R(`

No guardrail steps configured yet.

`),kN=R(`

Guardrail Steps

Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

`),AN=R(`

Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

Preview

Live
`,1);function jN(e,t){E(t,!0);{let t=e=>{US(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=fN(),n=M(t,!0);T(t),F(e=>B(n,e),[()=>rM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),z(e,t)},$$slots:{title:!0}})},n=O(()=>rM.submitLabel()),r=O(()=>rM.submittingLabel()),i=O(()=>rM.submitMode()===`create`?co:po);cE(e,{get open(){return rM.formOpen},ariaLabel:`Workflow editor`,get error(){return rM.formError},get submitting(){return rM.submitting},get submitLabel(){return I(n)},get submittingLabel(){return I(r)},get submitIcon(){return I(i)},dialogClass:`workflow-editor`,onclose:()=>rM.closeForm(),onsubmit:()=>rM.submitForm(),header:t,children:(e,t)=>{var n=AN(),r=N(n),i=M(r);uE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=mN(),r=M(n);r.value=r.__value=``,H(P(r),16,()=>rM.providerOptions(),e=>e,(e,t)=>{var n=pN(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(n),L(`change`,n,e=>rM.setProvider(e.currentTarget.value)),Gi(n,()=>rM.form.scope_provider,e=>rM.form.scope_provider=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2),o=e=>{uE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=hN(),r=M(n);r.value=r.__value=``,H(P(r),17,()=>rM.modelOptions(rM.form.scope_provider),e=>rM.form.scope_provider+`-`+e,(e,t)=>{var n=pN(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t)),i!==(i=I(t))&&(n.value=(n.__value=I(t))??``)}),z(e,n)}),T(n),Gi(n,()=>rM.form.scope_model,e=>rM.form.scope_model=e),z(e,n)},$$slots:{default:!0}})};V(a,e=>{rM.form.scope_provider&&e(o)});var s=P(a,2);uE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=gN();na(n),da(n,()=>rM.form.name,e=>rM.form.name=e),z(e,n)},$$slots:{default:!0}}),uE(P(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=_N();na(n),da(n,()=>rM.form.scope_user_path,e=>rM.form.scope_user_path=e),z(e,n)},$$slots:{default:!0}}),T(r);var c=P(r,8);uE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=vN();ft(n),da(n,()=>rM.form.description,e=>rM.form.description=e),z(e,n)},$$slots:{default:!0}});var l=P(c,2),u=M(l),d=e=>{var t=yN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.cache,e=>rM.form.features.cache=e),z(e,t)},f=O(()=>vs.cacheVisible());V(u,e=>{I(f)&&e(d)});var p=P(u,2),m=e=>{var t=bN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.audit,e=>rM.form.features.audit=e),z(e,t)},h=O(()=>vs.auditVisible());V(p,e=>{I(h)&&e(m)});var g=P(p,2),_=e=>{var t=xN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.usage,e=>rM.form.features.usage=e),z(e,t)},v=O(()=>vs.usageVisible());V(g,e=>{I(v)&&e(_)});var y=P(g,2),b=e=>{var t=SN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.budget,e=>rM.form.features.budget=e),z(e,t)},x=O(()=>vs.budgetsVisible());V(y,e=>{I(x)&&e(b)});var S=P(y,2),C=e=>{var t=CN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.guardrails,e=>rM.form.features.guardrails=e),z(e,t)},w=O(()=>vs.guardrailsVisible());V(S,e=>{I(w)&&e(C)});var ee=P(S,2),te=e=>{var t=wN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.failover,e=>rM.form.features.failover=e),z(e,t)},ne=O(()=>rM.failoverVisible());V(ee,e=>{I(ne)&&e(te)}),T(l);var re=P(l,2),ie=P(M(re),2);{let e=O(()=>rM.preview());dN(ie,{get workflow(){return I(e)},preview:!0})}T(re);var ae=P(re,2),oe=e=>{var t=kN(),n=M(t),r=P(M(n),2);T(n);var i=P(n,2),a=e=>{var t=TN(),n=P(M(t),2);T(t),L(`click`,n,()=>Wo.navigate(`guardrails`)),z(e,t)};V(i,e=>{rM.guardrailRefs.length===0&&e(a)});var o=P(i,2),s=e=>{var t=DN();H(t,21,()=>rM.form.guardrails,oi,(e,t,n)=>{var r=EN(),i=M(r),a=M(i);W(a,`for`,`workflow-guardrail-ref-`+n);var o=P(a,2);na(o),W(o,`id`,`workflow-guardrail-ref-`+n),W(o,`aria-label`,`Guardrail reference `+(n+1)),T(i);var s=P(i,2),c=M(s);W(c,`for`,`workflow-guardrail-step-`+n);var l=P(c,2);na(l),W(l,`id`,`workflow-guardrail-step-`+n),W(l,`aria-label`,`Guardrail step `+(n+1)),T(s);var u=P(s,2);T(r),da(o,()=>I(t).ref,e=>I(t).ref=e),da(l,()=>I(t).step,e=>I(t).step=e),L(`click`,u,()=>rM.removeGuardrailStep(n)),z(e,r)}),T(t),z(e,t)},c=e=>{z(e,ON())};V(o,e=>{rM.form.guardrails.length>0?e(s):e(c,-1)}),T(t),L(`click`,r,()=>rM.addGuardrailStep()),z(e,t)},se=O(()=>rM.form.features.guardrails&&vs.guardrailsVisible());V(ae,e=>{I(se)&&e(oe)}),z(e,n)},$$slots:{header:!0,default:!0}})}D()}Hr([`change`,`click`]);var MN=R(`

Loading workflows...

`),NN=R(`
`),PN=R(`

No active workflows found.

`),FN=R(`

No workflows match your filter.

`),IN=R(`
`);function LN(e,t){E(t,!0);var n=IN(),r=M(n),i=e=>{var t=MN();vS(M(t),{size:16,label:`Loading workflows`}),Ue(),T(t),z(e,t)};V(r,e=>{rM.loading&&!K.authError&&e(i)});var a=P(r,2),o=e=>{var t=NN();H(t,21,()=>rM.filteredWorkflows,e=>e.id,(e,t)=>{dN(e,{get workflow(){return I(t)}})}),T(t),z(e,t)};V(a,e=>{rM.filteredWorkflows.length>0&&e(o)});var s=P(a,2),c=e=>{z(e,PN())};V(s,e=>{rM.workflows.length===0&&!rM.loading&&!K.authError&&rM.available&&e(c)});var l=P(s,2),u=e=>{z(e,FN())};V(l,e=>{rM.workflows.length>0&&rM.filteredWorkflows.length===0&&!rM.loading&&e(u)}),T(n),z(e,n),D()}var RN=R(``),zN=R(`
Workflows feature is unavailable.
`),BN=R(`
`),VN=R(`
`),HN=R(``),UN=R(`
`);function WN(e,t){E(t,!0),An(()=>{K.refreshTick,rM.fetchPage()});var n=UN(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=RN();G(M(t),{get icon(){return co},class:`form-action-icon`,"aria-hidden":`true`}),Ue(2),T(t),L(`click`,t,()=>rM.openCreate()),z(e,t)};V(a,e=>{rM.available&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,zN())};V(s,e=>{!rM.available&&!K.authError&&e(c)});var l=P(s,2),u=e=>{var t=BN(),n=M(t,!0);T(t),F(()=>B(n,rM.error)),z(e,t)};V(l,e=>{rM.error&&!K.authError&&e(u)});var d=P(l,2),f=e=>{var t=VN(),n=M(t);sw(M(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return rM.filter},set value(e){rM.filter=e}}),T(n);var r=P(n,2),i=M(r),a=M(i,!0);T(i),T(r),T(t),F(()=>B(a,rM.filteredWorkflows.length+` active scopes`)),z(e,t)};V(d,e=>{rM.available&&e(f)});var p=P(d,2);jN(p,{});var m=P(p,2);LN(m,{});var h=P(m,2);H(h,20,()=>rM.guardrailRefs,e=>e,(e,t)=>{var n=HN(),r={};F(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(h),T(n),z(e,n),D()}Hr([`click`]);function GN(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=Ks}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=KN(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function KN(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var qN=null;function JN(){return qN===null&&(qN=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(qN&&qN.matches)}function YN(e){return JN()?0:e}function XN(e,t){return!t||!t.live?{duration:0}:Ws(e,{duration:YN(150)})}var ZN=new class{#e=k(j({}));get workflowVersionsByID(){return I(this.#e)}set workflowVersionsByID(e){A(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:vs.cacheVisible(),audit:vs.auditVisible(),usage:vs.usageVisible(),budget:vs.budgetsVisible(),guardrails:vs.guardrailsVisible(),failover:vs.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await ps(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},QN=6;function $N(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function eP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>QN)return r;let i=$N(r);return i==null?r:tP(i,t+1,n)||n&&n(i)||r}function tP(e,t=0,n=null,r=null){if(e==null||t>QN)return``;if(typeof e==`string`){let i=$N(e.trim());return i==null?``:tP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||iP(t&&t.response_body)}function oP(e){let t=e&&e.data?e.data:null;return t?nP(t.error_message)||(aP(e,t)?tP(t.response_body,0):``):``}function sP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function cP(e){let t=sP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function lP(e){let t=sP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function uP(e){let t=sP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function dP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function fP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function pP(e){return String(e&&e.session_id||``).trim()}function mP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function hP(e){return!!pP(e)&&mP(e)>1}function gP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_id:pP(e.latest)||String(e.session_id||``).trim(),session_count:Number(e.count||1)})),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function _P(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>xP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!xP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>xP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!xP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function vP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function yP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>pP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function bP(e){return String(e&&e.id||``).trim()}function xP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function SP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function CP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function wP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&CP(t)}function TP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!wP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>SP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>xP(e))),s=[];return a.forEach(e=>{let t=xP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function EP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!wP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>SP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>xP(e))),s=new Map;i.forEach((e,t)=>{let n=pP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=xP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=pP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(mP(l[r]),mP(e))},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function DP(e,t){let n=bP(t),r=e||{};if(!n)return r;if(r[n]){let e={...r};return delete e[n],e}return{...r,[n]:!0}}function OP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>bP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function kP(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function AP(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function jP(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function MP(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function NP(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function PP(e){let t=NP(e);return t.length>1||t.some(e=>!(e&&e.success))}function FP(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function IP(e){return String(e&&e.kind||``).trim()||`attempt`}function LP(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function RP(e){return String(e&&e.model||``).trim()||`-`}function zP(e){let t=NP(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function BP(e){return NP(e).length+`×`}function VP(e){let t=NP(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function HP(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=IP(e);n&&n!==`attempt`&&t.push(n),t.push(FP(e));let r=LP(e);r&&r!==`-`&&t.push(r);let i=RP(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function UP(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function WP(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function GP(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function KP(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function qP(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=UP(e,t),a=GP(e,t),o=WP(t),s=i!=null&&i!==``,c=IP(t),l=NP(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:KP(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function JP(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function YP(e){return JP(e).filter(e=>!(e&&e.no_change))}function XP(e){return JP(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function ZP(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function QP(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=YP(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:ZP(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function $P(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function eF(e){let t=$P(e);return Number(t&&t.cached_input_tokens||0)>0}function tF(e){let t=$P(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function nF(e){let t=$P(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?nc(r)+` cached`:tF(e).toFixed(1)+`% cached`}function rF(e){return eF(e)?nF(e):``}function iF(e,t){let n=$P(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function aF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&jP(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:rF(e),promptCacheHighlight:iF(e,t),noChangeSteps:XP(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function oF(e){let t=e&&e.data?e.data:null,n=oP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&jP(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&jP(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function sF(e,t){let n=[{id:`request`,pane:aF(e,t)}];return YP(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:QP(e,t)})}),PP(e)?NP(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:qP(e,t)})}):n.push({id:`response`,pane:oF(e)}),n}function cF(e){if(!PP(e))return`response`;let t=NP(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function lF(e,t,n){return e&&(Array.isArray(n)?n:sF(t)).some(t=>t.id===e)?e:cF(t)}function uF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var dF=100;function fF(){return{entries:[],total:0,limit:25,offset:0}}var pF=new class{#e=k(j({}));get auditExpandedEntries(){return I(this.#e)}set auditExpandedEntries(e){A(this.#e,e,!0)}#t=k(j({}));get auditExpandedThreads(){return I(this.#t)}set auditExpandedThreads(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return bC.auditLog}set auditLog(e){bC.auditLog=e}get auditSearch(){return bC.auditSearch}set auditSearch(e){bC.auditSearch=e}get auditMethod(){return bC.auditMethod}set auditMethod(e){bC.auditMethod=e}get auditStatusCode(){return bC.auditStatusCode}set auditStatusCode(e){bC.auditStatusCode=e}get auditStream(){return bC.auditStream}set auditStream(e){bC.auditStream=e}get auditGroupSessions(){return bC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Oc.customStartDate,customEndDate:Oc.customEndDate}}toggleAuditGroupSessions(){bC.auditGroupSessions=!bC.auditGroupSessions,Ea(`gomodel_audit_group_sessions`,bC.auditGroupSessions),this.auditExpandedThreads={},bC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=dP({dateQuery:Oc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await ps((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=fF();return}let a=n?gP(i.data):i.data,o=(n?EP:TP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),this.auditLog=o,this.auditExpandedThreads=yP(this.auditExpandedThreads,o.entries),bC.auditThreadChildren=yP(bC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=OP(this.auditExpandedEntries,s);try{await ZN.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=fF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=bC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&bC.auditThreadChildren[e]||null}async toggleThread(e){let t=pP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=vP(this.auditExpandedThreads,t);let r=bC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=pP(e);if(!t)return;let n=bC.auditThreadChildren[t];bC.auditThreadChildren={...bC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...bC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=vP(this.auditExpandedThreads,t))),bC.auditThreadChildren=e};try{let n=await ps(`/admin/audit/log?`+fP({sessionId:t,limit:dF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=bC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>pP(e)===t),o=_P(i,n.data.entries,a?[a]:[e]);bC.auditThreadChildren={...bC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=bP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=DP(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof bC.fetchAuditEntryDetail==`function`&&bC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};bC.fetchAuditLog=e=>pF.fetchAuditLog(e),bC.isAuditEntryExpanded=e=>pF.isAuditEntryExpanded(e);var mF=R(`
`);function hF(e,t){E(t,!0);let n=cw(()=>pF.fetchAuditLog(!0));An(()=>n.cancel);var r=mF(),i=M(r);sw(M(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return pF.auditSearch},set value(e){pF.auditSearch=e}}),T(i);var a=P(i,2),o=M(a),s=M(o);s.value=s.__value=``;var c=P(s);c.value=c.__value=`GET`;var l=P(c);l.value=l.__value=`POST`;var u=P(l);u.value=u.__value=`PUT`;var d=P(u);d.value=d.__value=`PATCH`;var f=P(d);f.value=f.__value=`DELETE`,T(o);var p=P(o,2),m=M(p);m.value=m.__value=``;var h=P(m);h.value=h.__value=`200`;var g=P(h);g.value=g.__value=`201`;var _=P(g);_.value=_.__value=`400`;var v=P(_);v.value=v.__value=`401`;var y=P(v);y.value=y.__value=`403`;var b=P(y);b.value=b.__value=`404`;var x=P(b);x.value=x.__value=`429`;var S=P(x);S.value=S.__value=`500`;var C=P(S);C.value=C.__value=`502`;var w=P(C);w.value=w.__value=`503`;var ee=P(w);ee.value=ee.__value=`504`,T(p);var te=P(p,2),ne=M(te);ne.value=ne.__value=``;var re=P(ne);re.value=re.__value=`true`;var ie=P(re);ie.value=ie.__value=`false`,T(te);var ae=P(te,2);G(M(ae),{get icon(){return Mo},class:`table-icon-svg`}),Ue(2),T(ae),T(a),T(r),L(`change`,o,()=>pF.fetchAuditLog(!0)),Gi(o,()=>pF.auditMethod,e=>pF.auditMethod=e),L(`change`,p,()=>pF.fetchAuditLog(!0)),Gi(p,()=>pF.auditStatusCode,e=>pF.auditStatusCode=e),L(`change`,te,()=>pF.fetchAuditLog(!0)),Gi(te,()=>pF.auditStream,e=>pF.auditStream=e),L(`click`,ae,()=>pF.clearAuditFilters()),z(e,r),D()}Hr([`change`,`click`]);var gF=R(`Live stream connecting…`),_F=R(` `),vF=R(`Live`),yF=R(` `);function bF(e,t){E(t,!0);let n=O(()=>bC.auditLivePauseReason()),r=O(()=>bC.liveLogsStreaming&&!I(n));var i=Qr(),a=N(i),o=e=>{var t=yF(),i=M(t);let a;var o=P(i,2),s=e=>{z(e,gF())},c=e=>{var t=_F(),r=M(t,!0);T(t),F(e=>B(r,e),[()=>gC(I(n))]),z(e,t)},l=e=>{z(e,vF())};V(o,e=>{bC.liveLogsStreaming?I(n)?e(c,1):e(l,-1):e(s)}),T(t),F(()=>a=U(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":I(r)})),z(e,t)},s=O(()=>vs.liveLogsVisible());V(a,e=>{I(s)&&e(o)}),z(e,i),D()}var xF=R(` `),SF=R(``);function CF(e,t){E(t,!0);let n=O(()=>[{key:`provider`,text:fc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+hc(t.entry),mono:!0},{key:`failover`,text:MP(t.entry)&&`failover: `+MP(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=SF(),i=P(M(r),2);H(i,21,()=>I(n),e=>e.key,(e,t)=>{var n=xF(),r=M(n,!0);T(n),F(()=>{U(n,1,Fi([`provider-badge`,I(t).class,{mono:I(t).mono}]),`svelte-hyopt0`),B(r,I(t).text)}),z(e,n)}),T(i),T(r),z(e,r),D()}var wF=R(``),TF=R(` `);function EF(e,t){E(t,!0);let n=O(()=>zP(t.entry)),r=O(()=>I(n).length>0?VP(t.entry):``),i=O(()=>I(n).length>0?BP(t.entry):``);var a=Qr(),o=N(a),s=e=>{var a=TF(),o=M(a);H(o,21,()=>I(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=wF();let r;F(e=>{r=U(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(I(t)&&I(t).success),"audit-attempt-error":!(I(t)&&I(t).success)}),W(n,`title`,e)},[()=>HP(I(t))]),z(e,n)}),T(o);var s=P(o,2),c=M(s,!0);T(s),T(a),F(()=>{W(a,`title`,I(r)),W(a,`aria-label`,I(r)),B(c,I(i))}),z(e,a)};V(o,e=>{I(n).length>0&&e(s)}),z(e,a),D()}var DF=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function OF(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:``).filter(Boolean).join(` +`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function kF(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function AF(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=OF(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=OF(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function jF(e){return!e||typeof e!=`object`?``:Array.isArray(e.content)?e.content.map(e=>e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(` +`).trim():OF(e.content)}function MF(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...kF(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||t.push(...kF(e.content))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{!e||typeof e!=`object`||(t.push(...kF(e.content)),typeof e.text==`string`&&t.push(e.text))}):e.input&&typeof e.input==`object`&&(t.push(...kF(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var NF=e=>OF(e);function PF(e){if(!e||!e.data)return``;let t=tP(e.data.response_body,0,NF);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?tP($N(e),0,NF)||e:``}return tP(n,0,NF)||OF(n)}function FF(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function IF(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function LF(e){return e?!!zF(e):!1}function RF(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function zF(e){switch(RF(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function BF(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function VF(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function HF(e){let t=zF(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||xI(n)!==``}function UF(e,t){let n=String(t||``).trim(),r=zF(e&&e.path),i=BF(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=xI(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&VF(o,BF(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&VF(o,{role:String(a.role||`assistant`),content:BF(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var WF=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function GF(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||WF.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function KF(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function qF(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=JF(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function JF(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function YF(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function XF(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?SI(t,e)>=0?t:e:t,null)}function ZF(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return XF((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function QF(e,t){let n=XF(e);return!!n&&String(n.id||``)===String(t||``)}function $F(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||FF(n.output));return!!(r||i)}function eI(e){return!e||IF(e.path)?!1:LF(e.path)||$F(e)}function tI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function aI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function oI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
`+iI(t)+``+iI(cI(e[t]))+`
`);return t.length?``:``}function uI(e){let t=sI(e.content_type),n=iI(t+` · `+oI(e.bytes)),r=lI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
`+n+`
`+r+`
`}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
`+n+`
`+iI(i)+`
`+r+`
`}function dI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function fI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function pI(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return iI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+iI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+iI(e.slice(r)):iI(e)}function mI(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=fI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return iI(o);if(!i(e))return o.split(` +`).map(e=>pI(e,a)).join(` +`);let s=o.split(` +`),c=[],l=0;for(;lpI(e,a)).join(` +`);c.push(``+o+``),l=r+1;continue}c.push(pI(e,a)),l++}return c.join(` +`)}function hI(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function gI(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c}){let l=hI(e);return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:l.role,roleLabel:l.label,roleClass:l.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``}}function _I(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e;return{name:t.name||e.name||``,arguments:t.arguments||e.arguments||``}}).filter(Boolean):[]}function vI(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{!t||!Array.isArray(t.tool_calls)||t.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{if(!t||typeof t!=`object`||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{if(!t||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)})}function yI(e){return Array.isArray(e)?`[`+e.map(yI).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+yI(e[t])).join(`,`)+`}`:JSON.stringify(e)}function bI(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(yI)}function xI(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function SI(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function CI(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(SI),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;vI(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(t,n,{toolCalls:r,functionName:i}={})=>gI(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i});if(g&&g.system!==void 0){let e=OF(g.system);e&&i.push(y(`system`,e))}if(g&&g.instructions!==void 0){let e=OF(g.instructions);e&&i.push(y(`system`,e))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=OF(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(y(`function_result`,t,{functionName:n}));return}if(t===`assistant`){let n=OF(e.content),r=_I(e.tool_calls);(n||r.length>0)&&i.push(y(t,n,{toolCalls:r}));return}let n=OF(e.content);n&&i.push(y(t,n))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`){let t=typeof e.output==`string`?e.output:OF(e.output);t&&i.push(y(`function_result`,t,{functionName:r[e.call_id]||``}))}else if(e.type===`function_call`)i.push(y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]}));else if(e.role){let t=String(e.role).toLowerCase(),n=OF(e.content);n&&i.push(y(t,n))}}}):AF(g.input).forEach(e=>{e.text&&i.push(y(e.role,e.text))}));let b=i.splice(v),x=b.map(f),S=bI(g),C=S!==null,w=JF(e),ee=!!w&&a.has(w),te=String(g&&g.previous_response_id||``).trim(),ne=xI(g),re=ee||!!te&&o.has(te)||!!ne&&s.has(ne);if(m){let e=C&&l&&l.length>0&&l.every((e,t)=>S[t]===e);if(C&&!e&&!ee||!C&&!re)return}p&&C&&(l=[...S]);let ie=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ie&&(p||m)&&a.add(ie),ne&&s.add(ne);let ae=0;for(;ae0;){let t=c.slice(-e),n=x.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...b.slice(e)),c.push(...x.slice(e))}if(_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=OF(e.message.content),r=_I(e.message.tool_calls);if(n||r.length>0){let e=y(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`){let t=y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=jF(e);if(n){let e=y(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=OF(_.content);if(t){let n=y(e,t);i.push(n),c.push(f(n))}}let oe=PF(e);oe&&i.push(y(`error`,oe));let se=String(_&&_.id||``).trim();se&&o.add(se)}),{messages:i,entryIDs:[...a]}}function wI(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){let t=e.arguments||``;try{t=JSON.stringify(JSON.parse(t),null,2)}catch{}return e.name+`(`+t+`)`}).join(` + +`):e.text||``}var TI=600*1e3,EI=15*1e3,DI=250,OI=class{#e=k(!1);get conversationOpen(){return I(this.#e)}set conversationOpen(e){A(this.#e,e,!0)}#t=k(!1);get conversationLoading(){return I(this.#t)}set conversationLoading(e){A(this.#t,e,!0)}#n=k(``);get conversationError(){return I(this.#n)}set conversationError(e){A(this.#n,e,!0)}#r=k(``);get conversationAnchorID(){return I(this.#r)}set conversationAnchorID(e){A(this.#r,e,!0)}#i=k(j([]));get conversationEntries(){return I(this.#i)}set conversationEntries(e){A(this.#i,e,!0)}#a=k(j([]));get conversationMessages(){return I(this.#a)}set conversationMessages(e){A(this.#a,e,!0)}#o=k(j([]));get conversationBranchEntryIDs(){return I(this.#o)}set conversationBranchEntryIDs(e){A(this.#o,e,!0)}#s=k(``);get conversationSessionID(){return I(this.#s)}set conversationSessionID(e){A(this.#s,e,!0)}#c=k(!1);get conversationTruncated(){return I(this.#c)}set conversationTruncated(e){A(this.#c,e,!0)}#l=k(!1);get conversationFollowLatest(){return I(this.#l)}set conversationFollowLatest(e){A(this.#l,e,!0)}#u=k(``);get conversationOpenedFromID(){return I(this.#u)}set conversationOpenedFromID(e){A(this.#u,e,!0)}#d=k(``);get followUpText(){return I(this.#d)}set followUpText(e){A(this.#d,e,!0)}#f=k(!1);get followUpSending(){return I(this.#f)}set followUpSending(e){A(this.#f,e,!0)}#p=k(``);get followUpError(){return I(this.#p)}set followUpError(e){A(this.#p,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#m=k(null);get conversationDialogEl(){return I(this.#m)}set conversationDialogEl(e){A(this.#m,e,!0)}#h=k(null);get conversationCloseBtnEl(){return I(this.#h)}set conversationCloseBtnEl(e){A(this.#h,e,!0)}#g=k(null);get conversationThreadEl(){return I(this.#g)}set conversationThreadEl(e){A(this.#g,e,!0)}canShowConversation(e){return eI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return tc(e)}renderBodyWithConversationHighlights(e,t,n){return mI(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this.conversationEntries=[],this.conversationMessages=[],this.conversationBranchEntryIDs=[],this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,document.body.classList.add(`conversation-drawer-open`),requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this.applyLiveConversationEntry(e),this._scheduleLatestScroll();return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof bC.auditEntryLiveDetailPending==`function`&&bC.auditEntryLiveDetailPending(e)}applyLiveConversationEntry(e){let t=[...this.conversationEntries||[]],n=String(e.id||``).trim(),r=String(e.request_id||``).trim(),i=t.findIndex(e=>n&&String(e.id||``).trim()===n||r&&String(e.request_id||``).trim()===r);i>=0?t.splice(i,1,{...t[i],...e}):t.push(e),this.conversationEntries=t,!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(t),this.conversationFollowLatest&&this._scheduleLatestScroll()}_applyConversationView(e){let t=CI(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=ZF(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id),t=CI(e,this.conversationAnchorID))}this.conversationBranchEntryIDs=t.entryIDs,this.conversationMessages=t.messages}refreshLiveConversation(e){if(!this.conversationOpen||!e)return;let t=String(e.id||``).trim(),n=qF(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(!n.accepted)return;this.followUpRequestID=n.followUpRequestID,t&&n.submittedChild&&(this.conversationAnchorID=t,this.conversationFollowLatest=!0);let r=String(e._live_state||``).trim();if(r===`audit.flushed`||r===`audit.detail`){this.applyLiveConversationEntry(e),this.conversationMessages.length===0&&(this.conversationLoading=!0);let n=++this.conversationRequestToken;this.fetchConversation(this.conversationAnchorID||t,n,!1);return}this.applyLiveConversationEntry(e)}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof bC.liveAuditStateSettled!=`function`||!bC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this.conversationBranchEntryIDs=[],this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1,document.body.classList.remove(`conversation-drawer-open`);let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await ps(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`,this.conversationEntries=[],this.conversationMessages=[],this.conversationBranchEntryIDs=[];return}let a=i.data||{},o=a.anchor_id||e;this.conversationEntries=Array.isArray(a.entries)?a.entries:[],r&&(this.conversationFollowLatest=QF(this.conversationEntries,o)),this.conversationAnchorID=o;let s=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);s&&s.session_id&&(this.conversationSessionID=String(s.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(this.conversationEntries),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`,this.conversationEntries=[],this.conversationMessages=[],this.conversationBranchEntryIDs=[]}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return YF(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return HF(e)?zF(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=UF(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=AI(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},TI);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=GF(e,n,r),o=await ds(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await kI(o),!bC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){hs(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+EI;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function kI(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function AI(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function jI(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var MI=new OI;bC.refreshLiveConversation=e=>MI.refreshLiveConversation(e);var NI=R(``),PI=R(` `),FI=R(``),II=R(`
`);function LI(e,t){E(t,!0);let n=ya(t,`thread`,3,null),r=ya(t,`expanded`,3,!1),i=ya(t,`onactivate`,3,null);function a(e){e.preventDefault(),i()&&i()()}function o(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function s(e){e.stopPropagation(),e.preventDefault(),pF.expandAuditEntry(t.entry),MI.openConversation(t.entry,e.currentTarget)}var c=II();let l;var u=M(c),d=M(u),f=e=>{var t=NI(),r=M(t);{let e=O(()=>n().expanded?Ba:Va);G(r,{get icon(){return I(e)},class:`audit-thread-expander-svg`})}var i=P(r,2),a=M(i,!0);T(i),T(t),F(()=>{W(t,`aria-expanded`,n().expanded),W(t,`title`,`Session with `+n().count+` requests`),W(t,`aria-label`,`Session with `+n().count+` requests, `+(n().expanded?`collapse`:`expand`)),B(a,n().count)}),L(`click`,t,o),z(e,t)};V(d,e=>{n()&&e(f)});var p=P(d,2),m=M(p,!0);T(p);var h=P(p,2),g=M(h,!0);T(h);var _=P(h,2),v=e=>{var n=PI(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>gc(t.entry)]),z(e,n)};V(_,e=>{(t.entry.requested_model||t.entry.model)&&e(v)});var y=P(_,2),b=M(y,!0);T(y),T(u);var x=P(u,2),S=M(x);EF(S,{get entry(){return t.entry}});var C=P(S,2),w=M(C,!0);T(C);var ee=P(C,2),te=M(ee,!0);T(ee);var ne=P(ee,2),re=e=>{var t=FI();G(M(t),{get icon(){return Va},class:`audit-conversation-trigger-svg`}),T(t),L(`click`,t,s),z(e,t)},ie=O(()=>MI.canShowConversation(t.entry));V(ne,e=>{I(ie)&&e(re)}),T(x),T(c),F((e,n,i,a,o)=>{l=U(c,1,`audit-entry-summary svelte-17mysgz`,null,l,e),W(c,`aria-expanded`,r()),U(p,1,`audit-status-badge ${n??``}`,`svelte-17mysgz`),B(m,t.entry.status_code||`-`),B(g,t.entry.method||`-`),B(b,t.entry.path||`-`),W(C,`title`,i),B(w,a),B(te,o)},[()=>({"audit-entry-summary-live-in-progress":jP(t.entry)}),()=>AP(t.entry.status_code),()=>uc(t.entry.timestamp),()=>ss.formatTimestamp(t.entry.timestamp),()=>kP(t.entry.duration_ns)]),L(`click`,c,a),z(e,c),D()}Hr([`click`]);var RI=R(``);function zI(e,t){E(t,!0);let n=ya(t,`label`,3,`Copy`),r=ya(t,`copiedLabel`,3,`Copied`),i=ya(t,`errorLabel`,3,``),a=ya(t,`class`,3,`btn`),o=O(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=RI();let c;var l=M(s),u=e=>{G(e,{get icon(){return Ua},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{G(e,{get icon(){return Ka},width:`14`,height:`14`})};V(l,e=>{t.state.copied?e(u):e(d,-1)});var f=P(l,2),p=M(f,!0);T(f),T(s),F(()=>{c=U(s,1,Fi([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),B(p,I(o))}),L(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),z(e,s),D()}Hr([`click`]);var BI=R(`
Error Message
 
`),VI=R(`
 
`),HI=R(` `),UI=R(` streaming`),WI=R(`
Body
`),GI=R(`

`),KI=R(`

`),qI=R(`

`),JI=R(`
`);function YI(e,t){E(t,!0);let n=aM({logPrefix:`Failed to copy audit payload:`}),r=aM({logPrefix:`Failed to copy audit payload:`}),i=O(()=>t.pane&&t.pane.showHeaders?tc(t.pane.headers):``),a=O(()=>!t.pane||!t.pane.showBody?``:aI(t.pane.body)?uI(t.pane.body):MI.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=O(()=>!!(t.pane&&MI.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),MI.handleErrorConversationClick(e,t.pane.entry))}var c=JI();let l;var u=M(c),d=e=>{var n=BI(),r=P(M(n),2);let i;var a=M(r,!0);T(r),T(n),F(()=>{i=U(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":I(o)}),W(r,`role`,I(o)?`button`:null),W(r,`tabindex`,I(o)?0:null),B(a,t.pane.errorMessage)}),L(`mousedown`,r,e=>MI.startBodyInteraction(e)),L(`keydown`,r,s),L(`click`,r,e=>MI.handleErrorConversationClick(e,t.pane.entry)),z(e,n)};V(u,e=>{t.pane.showErrorMessage&&e(d)});var f=P(u,2),p=e=>{var n=VI(),a=M(n),o=M(a),s=M(o,!0);T(o),zI(P(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,tc)}),T(a);var c=P(a,2),l=M(c,!0);T(c),T(n),F(()=>{B(s,t.pane.headersTitle||`Headers`),B(l,I(i))}),z(e,n)};V(f,e=>{t.pane.showHeaders&&e(p)});var m=P(f,2),h=e=>{var r=WI(),i=M(r),o=M(i),s=P(M(o),2),c=e=>{var n=HI(),r=M(n,!0);T(n),F(()=>B(r,t.pane.bodyCacheRatioLabel)),z(e,n)};V(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=P(s,2),u=e=>{z(e,UI())};V(l,e=>{t.pane.streaming&&e(u)}),T(o),zI(P(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,tc)}),T(i);var d=P(i,2);hi(d,()=>I(a),!0),T(d),T(r),L(`mousedown`,d,e=>MI.startBodyInteraction(e)),L(`click`,d,e=>MI.handleBodyConversationClick(e,t.pane.entry)),z(e,r)};V(m,e=>{t.pane.showBody&&e(h)});var g=P(m,2),_=e=>{var n=GI(),r=M(n,!0);T(n),F(()=>B(r,t.pane.emptyMessage)),z(e,n)};V(g,e=>{t.pane.showEmpty&&e(_)});var v=P(g,2),y=e=>{var n=KI(),r=P(M(n),2),i=M(r,!0);T(r),T(n),F(()=>B(i,t.pane.pendingMessage)),z(e,n)};V(v,e=>{t.pane.showPending&&e(y)});var b=P(v,2),x=e=>{var n=qI(),r=M(n,!0);T(n),F(()=>B(r,t.pane.tooLargeMessage)),z(e,n)};V(b,e=>{t.pane.showTooLarge&&e(x)}),T(c),F(()=>l=U(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),z(e,c),D()}Hr([`mousedown`,`keydown`,`click`]);var XI=R(` `),ZI=R(` `),QI=R(` `),$I=R(` `),eL=R(``),tL=R(`
`),nL=R(`
`);function rL(e,t){E(t,!0);let n=ya(t,`panes`,19,()=>[]),r=k(null),i=O(()=>lF(I(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=uF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),A(r,a,!0))}var c=nL(),l=M(c);H(l,21,n,e=>e.id,(e,t)=>{var n=eL();let c;var l=M(n),u=M(l),d=e=>{G(e,{get icon(){return Ma}})},f=e=>{G(e,{get icon(){return ja}})};V(u,e=>{I(t).pane.direction===`request`?e(d):I(t).pane.direction===`response`&&e(f,1)}),T(l);var p=P(l,2),m=M(p,!0);T(p);var h=P(p,2),g=e=>{var n=XI(),r=M(n);T(n),F(()=>B(r,`#${I(t).pane.seq??``}`)),z(e,n)};V(h,e=>{I(t).pane.seq&&e(g)});var _=P(h,2),v=e=>{var n=ZI(),r=M(n,!0);T(n),F(()=>{U(n,1,`provider-badge audit-pane-kind audit-pane-kind-${I(t).pane.kind??``}`,`svelte-1bc5vi5`),B(r,I(t).pane.kind)}),z(e,n)};V(_,e=>{I(t).pane.kind&&e(v)});var y=P(_,2);H(y,17,()=>I(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=QI(),r=M(n,!0);T(n),F(()=>{W(n,`title`,I(t).title),B(r,I(t).label)}),z(e,n)});var b=P(y,2),x=e=>{var n=$I(),r=M(n,!0);T(n),F(()=>B(r,I(t).pane.savingsLabel)),z(e,n)};V(b,e=>{I(t).pane.savingsLabel&&e(x)});var S=P(b,2),C=e=>{var n=ZI(),r=M(n,!0);T(n),F(e=>{U(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),B(r,I(t).pane.statusCode)},[()=>AP(I(t).pane.statusCode)]),z(e,n)};V(S,e=>{I(t).pane.statusCode&&e(C)}),T(n),F((e,r)=>{c=U(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":I(i)===I(t).id}),W(n,`aria-selected`,I(i)===I(t).id),W(n,`id`,e),W(n,`aria-controls`,r),W(n,`tabindex`,I(i)===I(t).id?0:-1),U(l,1,Fi([`audit-pane-icon`,I(t).pane.direction&&`audit-pane-icon-${I(t).pane.direction}`]),`svelte-1bc5vi5`),B(m,I(t).pane.title)},[()=>a(I(t).id),()=>o(I(t).id)]),L(`keydown`,n,e=>s(e,I(t).id)),L(`click`,n,()=>A(r,I(t).id,!0)),z(e,n)}),T(l),H(P(l,2),17,n,e=>e.id,(e,t)=>{var n=tL();let r;YI(M(n),{get pane(){return I(t).pane}}),T(n),F((e,a)=>{W(n,`id`,e),W(n,`aria-labelledby`,a),r=Hi(n,``,r,{display:I(i)===I(t).id?null:`none`})},[()=>o(I(t).id),()=>a(I(t).id)]),z(e,n)}),T(c),z(e,c),D()}Hr([`keydown`,`click`]);var iL=R(`
`),aL=R(`
`);function oL(e,t){E(t,!0);let n=ya(t,`thread`,3,null),r=O(()=>pF.isAuditEntryExpanded(t.entry)),i=O(()=>MI.conversationOpen&&String(MI.conversationAnchorID||``)===String(t.entry.id||``)),a=O(()=>I(r)?sF(t.entry,MF):[]),o=O(()=>I(r)?nN(t.entry,ZN.auditEntryWorkflow(t.entry),ZN.workflowFeatureCaps()):null);function s(){pF.toggleAuditEntryExpanded(t.entry)}var c=aL();let l;var u=M(c);LI(u,{get entry(){return t.entry},get thread(){return n()},get expanded(){return I(r)},onactivate:s});var d=P(u,2),f=e=>{var n=iL(),r=M(n),i=e=>{vM(e,{get chart(){return I(o)}})};V(r,e=>{I(o)&&e(i)});var s=P(r,2);rL(s,{get entry(){return t.entry},get panes(){return I(a)}}),CF(P(s,2),{get entry(){return t.entry}}),T(n),ki(3,n,()=>Us,()=>({y:-6,duration:YN(150)})),z(e,n)};V(d,e=>{I(r)&&e(f)}),T(c),F(()=>l=U(c,1,`audit-entry svelte-cmjgwr`,null,l,{"audit-entry-interactions-open":I(i)})),z(e,c),D()}var sL=R(`
`),cL=R(`
`),lL=R(`

`),uL=R(`
`),dL=R(`
`);function fL(e,t){E(t,!0);let n=O(()=>pP(t.entry)),r=O(()=>pF.isThreadExpanded(I(n))),i=O(()=>pF.threadChildren(I(n))),a=O(()=>I(i)&&!I(i).loading&&Number(I(i).total||0)>I(i).entries.length+1);var o=Qr(),s=N(o),c=e=>{oL(e,{get entry(){return t.entry}})},l=O(()=>!hP(t.entry)),u=e=>{var n=dL(),o=M(n);{let e=O(()=>({count:mP(t.entry),expanded:I(r),ontoggle:()=>pF.toggleThread(t.entry)}));oL(o,{get entry(){return t.entry},get thread(){return I(e)}})}var s=P(o,2),c=e=>{var t=uL(),n=M(t),r=e=>{var t=sL();vS(M(t),{size:14,label:`Loading session requests`}),T(t),z(e,t)};V(n,e=>{I(i)&&I(i).loading&&e(r)});var o=P(n,2);H(o,17,()=>I(i)&&I(i).entries||[],e=>e.id,(e,t)=>{var n=cL();oL(M(n),{get entry(){return I(t)}}),T(n),z(e,n)});var s=P(o,2),c=e=>{var t=lL(),n=M(t);T(t),F(()=>B(n,`Showing the latest ${I(i).entries.length+1} of ${I(i).total??``} + requests in this session.`)),z(e,t)};V(s,e=>{I(a)&&e(c)}),T(t),ki(3,t,()=>Ws,()=>({duration:YN(150)})),z(e,t)};V(s,e=>{I(r)&&e(c)}),T(n),z(e,n)};V(s,e=>{I(l)?e(c):e(u,-1)}),z(e,o),D()}var pL=R(`
 
`),mL=R(`
 
`),hL=R(`
`),gL=R(`
`),_L=R(`
`,1),vL=R(`
`);function yL(e,t){E(t,!0);let n=O(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function r(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var i=vL(),a=M(i),o=e=>{var n=pL(),i=M(n),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(i);var l=P(i,2),u=M(l,!0);T(l),T(n),F((e,n)=>{B(o,t.msg.roleLabel),B(c,e),B(u,n)},[()=>r(t.msg),()=>wI(t.msg)]),z(e,n)},s=e=>{var n=_L(),r=N(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(r);var c=P(r,2),l=e=>{var n=mL(),r=M(n,!0);T(n),F(()=>B(r,t.msg.text)),z(e,n)};V(c,e=>{t.msg.text&&e(l)});var u=P(c,2),d=e=>{var n=gL();H(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=hL(),r=M(n),i=M(r,!0);T(r),T(n),F(()=>B(i,I(t).name+`()`)),z(e,n)}),T(n),z(e,n)};V(u,e=>{t.msg.toolCalls&&e(d)}),F(e=>{B(a,t.msg.roleLabel),B(s,e)},[()=>ss.formatTimestamp(t.msg.timestamp)]),z(e,n)};V(a,e=>{I(n)?e(o):e(s,-1)}),T(i),F(()=>{U(i,1,Fi([I(n)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),W(i,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),W(i,`data-entry-id`,t.msg.entryID)}),z(e,i),D()}var bL=R(``),xL=R(`
`),SL=R(`

Loading interactions...

`),CL=R(`

No interaction data available for this entry.

`),wL=R(`
`),TL=R(`

Showing the newest part of this session and the selected log.

`),EL=R(`
`),DL=R(``),OL=R(`
`),kL=R(``),AL=R(`

Interactions

`,1);function jL(e,t){E(t,!0);let n=MI;An(()=>{if(!n.conversationOpen)return;let e=Er(()=>ka.opened()),t=e=>{e.key===`Escape`&&ka.openCount<=1&&n.closeConversation()};return window.addEventListener(`keydown`,t),()=>{ka.closed(e),window.removeEventListener(`keydown`,t)}});var r=AL(),i=N(r),a=e=>{var t=bL();L(`click`,t,()=>n.closeConversation()),z(e,t)};V(i,e=>{n.conversationOpen&&e(a)});var o=P(i,2);let s;var c=M(o);Ts(P(M(c),2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),T(c);var l=P(c,2),u=M(l),d=e=>{var t=xL(),r=M(t,!0);T(t),F(()=>B(r,n.conversationError)),z(e,t)};V(u,e=>{n.conversationError&&e(d)});var f=P(u,2),p=e=>{z(e,SL())};V(f,e=>{n.conversationLoading&&e(p)});var m=P(f,2),h=e=>{z(e,CL())},g=O(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());V(m,e=>{I(g)&&e(h)});var _=P(m,2),v=e=>{var t=wL();H(t,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{yL(e,{get msg(){return I(t)}})}),T(t),ga(t,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),z(e,t)};V(_,e=>{n.conversationMessages.length>0&&e(v)});var y=P(_,2),b=e=>{z(e,TL())};V(y,e=>{n.conversationTruncated&&e(b)});var x=P(y,2),S=e=>{var t=EL(),r=P(M(t),2),i=M(r,!0);T(r),T(t),F(e=>B(i,e),[()=>n.conversationLiveStatusText()]),z(e,t)},C=O(()=>n.conversationLiveWaiting());V(x,e=>{I(C)&&e(S)}),T(l);var w=P(l,2),ee=e=>{var t=kL(),r=M(t),i=e=>{var t=OL(),r=P(M(t),2);ft(r);var i=P(r,2),a=e=>{var t=DL(),r=M(t,!0);T(t),F(()=>B(r,n.followUpError)),z(e,t)};V(i,e=>{n.followUpError&&e(a)});var o=P(i,2),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=M(l,!0);T(l),T(o),T(t),F((e,t,i)=>{r.disabled=e,B(c,t),l.disabled=i,B(u,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),Vr(`submit`,t,e=>{e.preventDefault(),n.sendFollowUp()}),da(r,()=>n.followUpText,e=>n.followUpText=e),z(e,t)},a=O(()=>n.followUpKind());V(r,e=>{I(a)&&e(i)});var o=P(r,2),s=M(o,!0);T(o),T(t),F(()=>B(s,n.conversationFollowLatest?`Following latest interaction`:`Opened from log: `+n.conversationOpenedFromID)),z(e,t)};V(w,e=>{n.conversationAnchorID&&e(ee)}),T(o),ga(o,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),F(()=>{s=U(o,1,`conversation-drawer`,null,s,{open:n.conversationOpen}),W(o,`aria-hidden`,!n.conversationOpen)}),z(e,r),D()}Hr([`click`]);var ML=R(`

.

`),NL=R(`
Audit logging is off. Live entries are temporary and disappear after + refresh. Set LOGGING_ENABLED=true to persist them.
`),PL=R(`

`),FL=R(`
`),IL=R(`
`),LL=R(`
`),RL=R(`
`),zL=R(`
`);function BL(e,t){E(t,!0);let n=O(()=>vs.config&&vs.config.LOGGING_RETENTION_DAYS);An(()=>{if(K.refreshTick,Wo.page===`audit-logs`)return Er(()=>r())});function r(){let e=!1;return(async()=>{try{await vs.ensureLoaded()}finally{await pF.fetchAuditLog(!0),!e&&vs.liveLogsVisible()&&bC.ensureLiveLogs()}})(),()=>{e=!0,bC.stopLiveLogs()}}var i=zL(),a=M(i),o=M(a),s=P(M(o),2),c=e=>{US(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=ML(),r=M(t,!0),i=P(r),a=M(i,!0);T(i),Ue(),T(t),F((e,t)=>{B(r,e),B(a,t)},[()=>lP(I(n)),()=>uP(I(n))]),z(e,t)},$$slots:{title:!0}})},l=O(()=>cP(I(n)));V(s,e=>{I(l)&&e(c)}),T(o),T(a);var u=P(a,2);Zc(M(u),{onchange:()=>pF.fetchAuditLog(!0)}),T(u);var d=P(u,2);jc(d,{});var f=P(d,2),p=e=>{z(e,NL())},m=O(()=>vs.loaded&&!vs.auditVisible()&&!K.needsAuth);V(f,e=>{I(m)&&e(p)});var h=P(f,2),g=M(h);hF(g,{});var _=P(g,2),v=M(_),y=M(v),b=e=>{var t=PL(),n=M(t);T(t),F(e=>B(n,`Showing ${pF.auditLog.offset+1}-${e??``} of ${pF.auditLog.total??``} + ${pF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(pF.auditLog.offset+pF.auditLog.limit,pF.auditLog.total)]),z(e,t)};V(y,e=>{pF.auditLog.total>0&&e(b)});var x=P(y,2),S=M(x);na(S),Ue(2),T(x),T(v),bF(P(v,2),{}),T(_);var C=P(_,2),w=e=>{var t=FL();vS(M(t),{size:18,label:`Loading audit logs`}),T(t),z(e,t)},ee=e=>{var t=LL();H(t,29,()=>pF.auditLog.entries,e=>e.id,(e,t)=>{var n=IL(),r=M(n),i=e=>{fL(e,{get entry(){return I(t)}})},a=e=>{oL(e,{get entry(){return I(t)}})};V(r,e=>{pF.auditGroupSessions?e(i):e(a,-1)}),T(n),Oi(n,()=>GN,()=>({duration:YN(150)})),ki(1,n,()=>XN,()=>({live:I(t)._live})),z(e,n)}),T(t),z(e,t)};V(C,e=>{pF.loading&&pF.auditLog.entries.length===0?e(w):pF.auditLog.entries.length>0&&e(ee,1)});var te=P(C,2),ne=e=>{var t=RL();xS(M(t),{}),T(t),z(e,t)};V(te,e=>{pF.auditLog.entries.length===0&&!pF.loading&&!K.needsAuth&&e(ne)}),Iw(P(te,2),{get total(){return pF.auditLog.total},get offset(){return pF.auditLog.offset},get limit(){return pF.auditLog.limit},onprev:()=>pF.auditLogPrevPage(),onnext:()=>pF.auditLogNextPage()}),T(h),jL(P(h,2),{}),T(i),F(()=>ia(S,pF.auditGroupSessions)),L(`change`,S,()=>pF.toggleAuditGroupSessions()),z(e,i),D()}Hr([`change`]);function VL(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function HL(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function UL(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function WL(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function GL(e,t){let n=String(t||``).trim();return n&&UL(e,n)?n:WL(e)}function KL(e,t){let n=UL(e,t);return!n||!n.defaults?{}:VL(n.defaults)}function qL(e,t,n){return{...KL(e,n),...VL(t)}}function JL(e,t){let n=GL(e,t);return{name:``,type:n,description:``,user_path:``,config:KL(e,n)}}function YL(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function XL(e,t){let n=UL(e,t);return n&&n.label?n.label:t||`Unknown`}function ZL(e,t){let n=UL(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function QL(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?HL(n):n}function $L(e,t,n){if(!t)return e;let r=VL(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=HL(n):r[t.key]=n;return r}function eR(e,t,n){return QL(e,t).includes(String(n||``).trim())}function tR(e,t,n,r){let i=HL(QL(e,t)),a=String(n||``).trim();return a?$L(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function nR(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:VL(e&&e.config)}}var rR=new class{#e=k(j([]));get guardrails(){return I(this.#e)}set guardrails(e){A(this.#e,e,!0)}#t=k(j([]));get types(){return I(this.#t)}set types(e){A(this.#t,e,!0)}#n=k(!0);get available(){return I(this.#n)}set available(e){A(this.#n,e,!0)}#r=k(!1);get loading(){return I(this.#r)}set loading(e){A(this.#r,e,!0)}#i=k(!1);get typesLoading(){return I(this.#i)}set typesLoading(e){A(this.#i,e,!0)}#a=k(``);get error(){return I(this.#a)}set error(e){A(this.#a,e,!0)}#o=k(``);get filter(){return I(this.#o)}set filter(e){A(this.#o,e,!0)}#s=k(!1);get formOpen(){return I(this.#s)}set formOpen(e){A(this.#s,e,!0)}#c=k(!1);get formSubmitting(){return I(this.#c)}set formSubmitting(e){A(this.#c,e,!0)}#l=k(``);get deletingName(){return I(this.#l)}set deletingName(e){A(this.#l,e,!0)}#u=k(`create`);get formMode(){return I(this.#u)}set formMode(e){A(this.#u,e,!0)}#d=k(``);get formOriginalName(){return I(this.#d)}set formOriginalName(e){A(this.#d,e,!0)}#f=k(j({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return I(this.#f)}set form(e){A(this.#f,e,!0)}get filtered(){return YL(this.guardrails,this.filter)}typeLabel(e){return XL(this.types,e)}typeFields(e){return ZL(this.types,e)}fieldValue(e){return QL(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:$L(this.form.config,e,t)}}arrayFieldSelected(e,t){return eR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:tR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=JL(this.types,WL(this.types)),this.formOpen=!0}openEdit(e){let t=GL(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:qL(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=JL(this.types,WL(this.types))}changeType(e){let t=GL(this.types,e);this.form={...this.form,type:t,config:KL(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await aT(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=GL(this.types,this.form.type);this.form={...this.form,type:t,config:qL(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await aT(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=nR(this.form);try{let t=await oT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}q.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await oT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,q.error(e.error);return}if(e.status===`error`){q.error(e.error);return}q.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},iR=R(`
`),aR=R(`

Loading guardrails...

`),oR=R(`
`),sR=R(`
`),cR=R(`
NameTypeUser PathSummaryActions
`),lR=R(`

No guardrails defined yet.

`),uR=R(`

Instances

Each instance has a reusable name, a type, an optional user path for + future UI visibility scoping, and a JSON-backed config payload for + that type.

`);function dR(e,t){E(t,!0);var n=uR(),r=M(n),i=P(M(r),2);G(M(i),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(i),T(r);var a=P(r,2),o=e=>{var t=iR(),n=M(t);sw(M(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return rR.filter},set value(e){rR.filter=e}}),T(n),T(t),z(e,t)};V(a,e=>{rR.available&&e(o)});var s=P(a,2),c=e=>{var t=aR();vS(M(t),{size:16,label:`Loading guardrails`}),Ue(),T(t),z(e,t)};V(s,e=>{rR.loading&&rR.filtered.length===0&&e(c)});var l=P(s,2),u=e=>{var t=cR(),n=M(t),r=P(M(n));H(r,21,()=>rR.filtered,e=>e.name,(e,t)=>{var n=sR(),r=M(n),i=M(r,!0);T(r);var a=P(r),o=M(a),s=M(o,!0);T(o),T(a);var c=P(a),l=M(c,!0);T(c);var u=P(c),d=M(u),f=M(d,!0);T(d);var p=P(d,2),m=e=>{var n=oR(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(p,e=>{I(t).description&&e(m)}),T(u);var h=P(u),g=M(h),_=M(g);{let e=O(()=>`Edit guardrail `+I(t).name);iT(_,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>rR.openEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=P(_,2);{let e=O(()=>(rR.deletingName===I(t).name?`Deleting guardrail `:`Delete guardrail `)+I(t).name),n=O(()=>rR.deletingName===I(t).name);iT(v,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>rR.deleteGuardrail(I(t)),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return Mo},class:`table-icon-svg`})},$$slots:{default:!0}})}T(g),T(h),T(n),F(e=>{B(i,I(t).name),B(s,e),B(l,I(t).user_path||`—`),B(f,I(t).summary||I(t).description||`No summary yet.`)},[()=>rR.typeLabel(I(t).type)]),z(e,n)}),T(r),T(n),T(t),z(e,t)};V(l,e=>{rR.filtered.length>0&&e(u)});var d=P(l,2),f=e=>{z(e,lR())};V(d,e=>{rR.filtered.length===0&&!rR.loading&&rR.available&&!rR.error&&!K.authError&&e(f)}),T(n),F(()=>i.disabled=rR.typesLoading||rR.formSubmitting||!rR.available),L(`click`,i,()=>rR.openCreate()),z(e,n),D()}Hr([`click`]);var fR=R(`

Workflows reference these names directly, so renames are + intentionally avoided after creation.

`),pR=R(``),mR=R(``),hR=R(``),gR=R(``),_R=R(``),vR=R(``),yR=R(``),bR=R(``),xR=R(``),SR=R(`
`),CR=R(``),wR=R(` `),TR=R(`
`),ER=R(`
`);function DR(e,t){E(t,!0);let n=O(()=>rR.formMode===`edit`);{let t=e=>{z(e,fR())},r=O(()=>I(n)?`Edit Guardrail`:`Create Guardrail`);cE(e,{get open(){return rR.formOpen},get title(){return I(r)},ariaLabel:`Guardrail editor`,get error(){return rR.error},get submitting(){return rR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>rR.closeForm(),onsubmit:()=>rR.submitForm(),headerHint:t,children:(e,t)=>{var r=ER(),i=M(r);uE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=pR();na(r),F(()=>{r.disabled=I(n),W(r,`data-modal-autofocus`,!I(n)||void 0)}),da(r,()=>rR.form.name,e=>rR.form.name=e),z(e,r)},$$slots:{default:!0}});var a=P(i,2);uE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=hR();H(r,21,()=>rR.types,e=>e.type,(e,t)=>{var n=mR(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).type)&&(n.value=(n.__value=I(t).type)??``)}),z(e,n)}),T(r);var i;Wi(r),F(()=>{r.disabled=I(n),i!==(i=rR.form.type)&&(r.value=(r.__value=rR.form.type)??``,Ui(r,rR.form.type))}),L(`change`,r,e=>rR.changeType(e.currentTarget.value)),z(e,r)},$$slots:{default:!0}});var o=P(a,2);uE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=gR();na(r),F(()=>W(r,`data-modal-autofocus`,I(n)?!0:void 0)),da(r,()=>rR.form.description,e=>rR.form.description=e),z(e,r)},$$slots:{default:!0}});var s=P(o,2),c=M(s);US(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{z(e,_R())},$$slots:{title:!0}});var l=P(c,2);na(l),T(s),H(P(s,2),17,()=>rR.typeFields(rR.form.type),e=>e.key,(e,t)=>{var n=Qr(),r=N(n),i=e=>{var n=SR(),r=M(n);{let e=e=>{var n=vR(),r=M(n,!0);T(n),F(()=>{W(n,`for`,`guardrail-field-`+I(t).key),B(r,I(t).label)}),z(e,n)},n=O(()=>`guardrail-field-help-`+I(t).key),i=O(()=>I(t).label+` help`),a=O(()=>I(t).help||``);US(r,{get copyId(){return I(n)},get label(){return I(i)},get text(){return I(a)},title:e,$$slots:{title:!0}})}var i=P(r,2),a=e=>{var n=yR();H(n,21,()=>I(t).options||[],e=>e.value,(e,t)=>{var n=mR(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n);var r;Wi(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Ui(n,e))},[()=>rR.fieldValue(I(t))]),L(`change`,n,e=>rR.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},o=e=>{var n=bR();ft(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`placeholder`,I(t).placeholder||``),ra(n,e),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0)},[()=>rR.fieldValue(I(t))]),L(`input`,n,e=>rR.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},s=e=>{var n=xR();na(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`type`,I(t).input||`text`),W(n,`placeholder`,I(t).placeholder||``),ra(n,e),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0)},[()=>rR.fieldValue(I(t))]),L(`input`,n,e=>rR.setFieldValue(I(t),e.currentTarget.value)),z(e,n)};V(i,e=>{I(t).input===`select`?e(a):I(t).input===`textarea`?e(o,1):e(s,-1)}),T(n),z(e,n)},a=e=>{var n=TR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2);H(a,21,()=>I(t).options||[],e=>I(t).key+`-`+e.value,(e,n)=>{var r=CR(),i=M(r);na(i);var a=P(i,2),o=M(a,!0);T(a),T(r),F(e=>{ia(i,e),B(o,I(n).label)},[()=>rR.arrayFieldSelected(I(t),I(n).value)]),L(`change`,i,e=>rR.toggleArrayFieldValue(I(t),I(n).value,e.currentTarget.checked)),z(e,r)}),T(a);var o=P(a,2),s=e=>{var n=wR(),r=M(n,!0);T(n),F(()=>{W(n,`id`,`guardrail-field-help-`+I(t).key),B(r,I(t).help)}),z(e,n)};V(o,e=>{I(t).help&&e(s)}),T(n),F(()=>{W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0),B(i,I(t).label)}),z(e,n)};V(r,e=>{I(t).input===`checkboxes`?e(a,-1):e(i)}),z(e,n)}),T(r),da(l,()=>rR.form.user_path,e=>rR.form.user_path=e),z(e,r)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`change`,`input`]);var OR=R(`

Guardrails

`),kR=R(`
Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage + definitions here.
`),AR=R(`
Guardrails feature is unavailable.
`),jR=R(`
`),MR=R(`

Reusable Policy Objects

Guardrail Library

Store guardrails in the database, keep them hot in memory, and attach + them to workflows by reference.

Instances
Types
`);function NR(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`guardrails`&&(vs.ensureLoaded(),rR.fetchPage())});var n=MR(),r=M(n),i=M(r);US(M(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{z(e,OR())},$$slots:{title:!0}}),T(i),T(r);var a=P(r,2),o=P(M(a),2),s=M(o),c=P(M(s),2),l=M(c,!0);T(c),T(s);var u=P(s,2),d=P(M(u),2),f=M(d,!0);T(d),T(u),T(o),T(a);var p=P(a,2);jc(p,{});var m=P(p,2),h=e=>{z(e,kR())},g=O(()=>!vs.guardrailsVisible());V(m,e=>{I(g)&&e(h)});var _=P(m,2),v=e=>{z(e,AR())};V(_,e=>{!K.authError&&!rR.available&&e(v)});var y=P(_,2),b=e=>{var t=jR(),n=M(t,!0);T(t),F(()=>B(n,rR.error)),z(e,t)};V(y,e=>{!K.authError&&rR.error&&!rR.formOpen&&e(b)});var x=P(y,2);DR(x,{}),dR(P(x,2),{}),T(n),F((e,t)=>{B(l,e),B(f,t)},[()=>nc(rR.guardrails.length),()=>nc(rR.types.length)]),z(e,n),D()}var Q=new class{#e=k(j([]));get servers(){return I(this.#e)}set servers(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get formSubmitting(){return I(this.#o)}set formSubmitting(e){A(this.#o,e,!0)}#s=k(`create`);get formMode(){return I(this.#s)}set formMode(e){A(this.#s,e,!0)}#c=k(!1);get slugEdited(){return I(this.#c)}set slugEdited(e){A(this.#c,e,!0)}#l=k(!1);get advancedOpen(){return I(this.#l)}set advancedOpen(e){A(this.#l,e,!0)}#u=k(j(sx()));get form(){return I(this.#u)}set form(e){A(this.#u,e,!0)}#d=k(``);get deletingName(){return I(this.#d)}set deletingName(e){A(this.#d,e,!0)}#f=k(``);get reconnectingName(){return I(this.#f)}set reconnectingName(e){A(this.#f,e,!0)}#p=k(!1);get catalogOpen(){return I(this.#p)}set catalogOpen(e){A(this.#p,e,!0)}#m=k(!1);get catalogLoading(){return I(this.#m)}set catalogLoading(e){A(this.#m,e,!0)}#h=k(``);get catalogError(){return I(this.#h)}set catalogError(e){A(this.#h,e,!0)}#g=k(j(cx()));get catalog(){return I(this.#g)}set catalog(e){A(this.#g,e,!0)}#_=O(()=>yx(this.servers,this.filter));get filtered(){return I(this.#_)}set filtered(e){A(this.#_,e)}async fetchServers(){if(await vs.ensureLoaded(),!vs.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await aT(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=sx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=bx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=sx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=hx(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=xx(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await oT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}q.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=lx(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await oT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,q.error(e.error);return}if(e.status===`error`){q.error(e.error);return}q.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=lx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await oT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,q.error(e.error);return}if(e.status===`error`){q.error(e.error);return}let r=e.result.data,i=ux(r);i===`connected`?q.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?q.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):q.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>lx(e)===lx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=lx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...cx(),server:n,status:ux(e)};try{let e=await ps(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:cs(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Sx(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=cx()}},PR=R(``),FR=R(`

`),IR=R(`
`),LR=R(`

`),RR=R(`
  • `),zR=R(`

      `),BR=R(`

      No tools listed — the server may still be connecting or degraded.

      `),VR=R(` `,1),HR=R(``);function UR(e,t){E(t,!0);let n=O(()=>wx(Q.catalog));ks(e,{get open(){return Q.catalogOpen},variant:`editor`,onclose:()=>Q.closeCatalog(),children:(e,t)=>{var r=HR(),i=M(r),a=M(i),o=P(M(a),2),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=M(l,!0);T(l),T(o),T(a),Ts(P(a,2),{label:`Close MCP server catalog`,onclick:()=>Q.closeCatalog()}),T(i);var d=P(i,2),f=e=>{nT(e,{label:`Loading catalog...`})},p=e=>{var t=PR(),n=M(t,!0);T(t),F(()=>B(n,Q.catalogError)),z(e,t)},m=e=>{var t=VR(),r=N(t),i=e=>{var t=FR(),n=M(t,!0);T(t),F(()=>B(n,Q.catalog.instructions)),z(e,t)};V(r,e=>{Q.catalog.instructions&&e(i)});var a=P(r,2);H(a,17,()=>I(n),e=>e.key,(e,t)=>{var n=zR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2);H(a,21,()=>I(t).items,e=>e.key,(e,t)=>{var n=RR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=IR(),r=M(n,!0);T(n),F(()=>{W(n,`title`,`Exposed on the aggregated /mcp endpoint as `+I(t).aggregated),B(r,I(t).aggregated)}),z(e,n)};V(a,e=>{I(t).aggregated&&e(o)});var s=P(a,2),c=e=>{var n=LR(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(s,e=>{I(t).description&&e(c)}),T(n),F(()=>{W(r,`title`,I(t).aggregated||I(t).name),B(i,I(t).name)}),z(e,n)}),T(a),T(n),F(()=>B(i,I(t).title)),z(e,n)});var o=P(a,2),s=e=>{z(e,BR())},c=O(()=>Tx(Q.catalog));V(o,e=>{I(c)&&e(s)}),z(e,t)};V(d,e=>{Q.catalogLoading?e(f):Q.catalogError?e(p,1):e(m,-1)});var h=P(d,2),g=M(h);T(h),T(r),F((e,t)=>{B(c,Q.catalog.server),U(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),B(u,t)},[()=>dx(Q.catalog),()=>ux(Q.catalog)]),L(`click`,g,()=>Q.closeCatalog()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var WR=R(`

      The display name can change. The slug is the stable client-facing identity.

      `),GR=R(` Human-readable and Unicode-friendly. You can change it later.`,1),KR=R(`Derived from the name. You may edit it before saving.`),qR=R(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),JR=R(` `,1),YR=R(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),XR=R(``),ZR=R(`
      `),QR=R(`
      Headers
      Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
      Advanced settings Description, access rules, and timeout
      `,1);function $R(e,t){E(t,!0);{let t=e=>{z(e,WR())},n=O(()=>Q.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);cE(e,{get open(){return Q.formOpen},get title(){return I(n)},ariaLabel:`MCP server editor`,get error(){return Q.error},get submitting(){return Q.formSubmitting},onclose:()=>Q.closeForm(),onsubmit:()=>Q.submitForm(),headerHint:t,children:(e,t)=>{var n=QR(),r=N(n);uE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=GR(),r=N(n);na(r),Ue(2),L(`input`,r,()=>Q.syncSlugFromName()),da(r,()=>Q.form.name,e=>Q.form.name=e),z(e,n)},$$slots:{default:!0}});var i=P(r,2);uE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=JR(),r=N(n);na(r);var i=P(r,2),a=e=>{z(e,KR())},o=e=>{z(e,qR())};V(i,e=>{Q.formMode===`create`?e(a):e(o,-1)}),F(()=>r.disabled=Q.formMode===`edit`),L(`input`,r,()=>Q.markSlugEdited()),da(r,()=>Q.form.slug,e=>Q.form.slug=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2);uE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=YR(),r=N(n),i=M(r);i.value=i.__value=`http`;var a=P(i);a.value=a.__value=`sse`,T(r),Ue(2),Gi(r,()=>Q.form.transport,e=>Q.form.transport=e),z(e,n)},$$slots:{default:!0}});var o=P(a,2);uE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=XR();na(n),da(n,()=>Q.form.url,e=>Q.form.url=e),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=P(M(s),2);H(c,21,()=>Q.form.headers,oi,(e,t,n)=>{var r=ZR(),i=M(r);na(i);var a=P(i,2);na(a),iT(P(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeHeader(n),children:(e,t)=>{G(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}}),T(r),da(i,()=>I(t).name,e=>I(t).name=e),da(a,()=>I(t).value,e=>I(t).value=e),z(e,r)}),T(c);var l=P(c,2),u=M(l);G(M(u),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(u),T(l),Ue(2),T(s);var d=P(s,2),f=M(d);cA(M(f),{get enabled(){return Q.form.enabled},label:`MCP server`,onclick:()=>Q.form.enabled=!Q.form.enabled}),T(f),T(d);var p=P(d,2),m=P(M(p),2),h=M(m),g=P(M(h),2);na(g),T(h);var _=P(h,2),v=P(M(_),2);na(v),T(_);var y=P(_,2),b=P(M(y),2);na(b),T(y);var x=P(y,2),S=P(M(x),2);ft(S),W(S,`placeholder`,`/ +/team/alpha`),T(x);var C=P(x,2),w=P(M(C),2);na(w),T(C),T(m),T(p),F(()=>p.open=Q.advancedOpen),L(`click`,u,()=>Q.addHeader()),Vr(`toggle`,p,e=>Q.advancedOpen=e.currentTarget.open),da(g,()=>Q.form.description,e=>Q.form.description=e),da(v,()=>Q.form.allowed_tools,e=>Q.form.allowed_tools=e),da(b,()=>Q.form.disallowed_tools,e=>Q.form.disallowed_tools=e),da(S,()=>Q.form.user_paths,e=>Q.form.user_paths=e),da(w,()=>Q.form.tool_timeout_seconds,e=>Q.form.tool_timeout_seconds=e),z(e,n)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`input`,`click`]);var ez=R(`Config`),tz=R(`
      `),nz=R(`
      `),rz=R(`
      NameTransportEndpointStatusToolsEnabledActions
      `);function iz(e,t){E(t,!0);function n(e){return fx(e,e=>ss.formatTimestamp(e))}var r=rz(),i=M(r),a=P(M(i));H(a,21,()=>Q.filtered,e=>lx(e),(e,t)=>{var r=nz(),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=e=>{z(e,ez())};V(s,e=>{I(t).managed&&e(c)});var l=P(s,2),u=M(l,!0);T(l),T(i);var d=P(i),f=M(d),p=M(f,!0);T(f),T(d);var m=P(d),h=M(m,!0);T(m);var g=P(m),_=M(g),v=M(_,!0);T(_);var y=P(_,2),b=e=>{var n=tz(),r=M(n,!0);T(n),F(()=>B(r,I(t).last_error)),z(e,n)},x=O(()=>ux(I(t))===`degraded`&&I(t).last_error);V(y,e=>{I(x)&&e(b)}),T(g);var S=P(g),C=M(S),w=M(C,!0);T(C);var ee=P(C,2),te=M(ee,!0);T(ee),T(S);var ne=P(S),re=M(ne),ie=M(re,!0);T(re),T(ne);var ae=P(ne),oe=M(ae),se=M(oe),ce=e=>{{let n=O(()=>`Edit MCP server `+I(t).name);iT(e,{get label(){return I(n)},class:`table-icon-btn`,onclick:()=>Q.openEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(se,e=>{I(t).managed||e(ce)});var le=P(se,2);{let e=O(()=>`Inspect catalog of MCP server `+I(t).name);iT(le,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>Q.openCatalog(I(t)),children:(e,t)=>{G(e,{get icon(){return to},class:`form-action-icon`})},$$slots:{default:!0}})}var ue=P(le,2);{let e=O(()=>(Q.reconnectingName===lx(I(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+I(t).name),n=O(()=>Q.reconnectingName===lx(I(t)));iT(ue,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>Q.reconnectServer(I(t)),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return uo},class:`form-action-icon`})},$$slots:{default:!0}})}var de=P(ue,2),fe=e=>{{let n=O(()=>(Q.deletingName===lx(I(t))?`Deleting MCP server `:`Delete MCP server `)+I(t).name),r=O(()=>Q.deletingName===lx(I(t)));iT(e,{get label(){return I(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>Q.deleteServer(I(t)),get disabled(){return I(r)},children:(e,t)=>{G(e,{get icon(){return Mo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(de,e=>{I(t).managed||e(fe)}),T(oe),T(ae),T(r),F((e,n,r,i,a,s,c,l)=>{B(o,I(t).name),B(u,e),B(p,I(t).transport||`http`),W(m,`title`,n),B(h,r),U(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),W(_,`title`,a),B(v,s),B(w,c),B(te,l),U(re,1,Fi([`auth-key-status-badge`,I(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),B(ie,I(t).enabled?`Enabled`:`Disabled`)},[()=>lx(I(t)),()=>px(I(t)),()=>px(I(t)),()=>dx(I(t)),()=>n(I(t)),()=>ux(I(t)),()=>nc(I(t).tool_count||0),()=>mx(I(t))]),z(e,r)}),T(a),T(i),T(r),z(e,r),D()}var az=R(`

      MCP Servers

      `),oz=R(``),sz=R(`
      MCP server management is unavailable.
      `),cz=R(``),lz=R(`
      `),uz=R(`

      No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

      `),dz=R(`

      No MCP servers match your filter.

      `),fz=R(`
      `);function pz(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`mcp-servers`&&Q.fetchServers()});var n=fz(),r=M(n),i=M(r);US(M(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{z(e,az())},$$slots:{title:!0}}),T(i);var a=P(i,2),o=M(a),s=e=>{var t=oz();G(M(t),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=Q.formSubmitting),L(`click`,t,()=>Q.openCreate()),z(e,t)};V(o,e=>{Q.available&&!K.authError&&e(s)}),T(a),T(r);var c=P(r,2),l=e=>{z(e,sz())};V(c,e=>{!Q.available&&!K.authError&&e(l)});var u=P(c,2),d=e=>{var t=cz(),n=M(t,!0);T(t),F(()=>B(n,Q.error)),z(e,t)};V(u,e=>{Q.error&&!K.authError&&!Q.formOpen&&e(d)});var f=P(u,2),p=e=>{nT(e,{label:`Loading MCP servers...`})};V(f,e=>{Q.loading&&!K.authError&&e(p)});var m=P(f,2),h=e=>{var t=lz(),n=M(t);sw(M(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return Q.filter},set value(e){Q.filter=e}}),T(n),T(t),z(e,t)};V(m,e=>{(Q.servers.length>0||Q.filter)&&Q.available&&!K.authError&&e(h)});var g=P(m,2);$R(g,{});var _=P(g,2);UR(_,{});var v=P(_,2),y=e=>{iz(e,{})};V(v,e=>{Q.filtered.length>0&&Q.available&&!K.authError&&e(y)});var b=P(v,2),x=e=>{z(e,uz())};V(b,e=>{Q.servers.length===0&&!Q.filter&&!Q.loading&&!K.authError&&!Q.error&&Q.available&&e(x)});var S=P(b,2),C=e=>{z(e,dz())};V(S,e=>{Q.servers.length>0&&Q.filtered.length===0&&Q.filter&&!Q.loading&&!K.authError&&Q.available&&e(C)}),T(n),z(e,n),D()}Hr([`click`]);var mz=`api_keys`,hz=`session_sticky_keys`,gz=`base_url`,_z=`service_account_json`,vz=`models`,yz={[mz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[hz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[gz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[_z]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[vz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function bz(e){return yz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function xz(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function Sz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function Cz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function wz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function Tz(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(yz).map(e=>({name:e,advanced:e!==mz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...bz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var Ez=new Set([`name`,`type`,`enabled`]);function Dz(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=xz(),i={...e};for(let e of Object.keys(r))!Ez.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function Oz(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function kz(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function Az(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function jz(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function Mz(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function Nz(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:Az(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function Pz(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function Fz(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=Tz(r);for(let t of[...o,...s]){let n=Iz(e,t);n&&(i[t.name]=n)}return i}function Iz(e,t){if(t.name===`api_keys`){let n=jz(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!Pz(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function Lz(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=Tz(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=Rz(e,t.name));for(let t of Object.keys(yz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=Rz(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function Rz(e,t){switch(t){case mz:return jz(e&&e.api_keys);case vz:return ec(e&&e.models);case hz:return!!(e&&e.session_sticky_keys);case _z:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var $=new class{#e=k(j([]));get rows(){return I(this.#e)}set rows(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get formSubmitting(){return I(this.#o)}set formSubmitting(e){A(this.#o,e,!0)}#s=k(`create`);get formMode(){return I(this.#s)}set formMode(e){A(this.#s,e,!0)}#c=k(!1);get advancedOpen(){return I(this.#c)}set advancedOpen(e){A(this.#c,e,!0)}#l=k(j(xz()));get form(){return I(this.#l)}set form(e){A(this.#l,e,!0)}#u=k(j({}));get fieldErrors(){return I(this.#u)}set fieldErrors(e){A(this.#u,e,!0)}#d=k(``);get focusField(){return I(this.#d)}set focusField(e){A(this.#d,e,!0)}#f=k(``);get deletingName(){return I(this.#f)}set deletingName(e){A(this.#f,e,!0)}#p=k(!1);get deleteSubmitting(){return I(this.#p)}set deleteSubmitting(e){A(this.#p,e,!0)}#m=k(j([]));get types(){return I(this.#m)}set types(e){A(this.#m,e,!0)}#h=k(!1);get typesLoaded(){return I(this.#h)}set typesLoaded(e){A(this.#h,e,!0)}#g=null;get filteredRows(){return Sz(this.rows,this.filter)}get schema(){return wz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return Tz(e,e&&e.default_base_url)}async fetchTypes(){let e=await aT(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await aT(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,xz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,Nz(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,xz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=Dz(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=cs(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){kc.fetchModels(),kc.fetchCategories()}async submitForm(){let e=this.schema,t=Fz(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=Lz(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await oT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}q.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await oT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Ps.error=t.error;return}if(t.status===`error`){Ps.error=t.error;return}q.success(`Provider "`+e+`" deleted.`),Ps.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Ps.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:Eo,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},zz=R(`Config`),Bz=R(` `,1),Vz=R(`
      `),Hz=R(`
      NameTypeBase URLAuthModelsEnabledUpdatedActions
      `);function Uz(e,t){E(t,!0);var n=Hz(),r=M(n),i=P(M(r));H(i,21,()=>$.filteredRows,e=>e.name,(e,t)=>{var n=Vz(),r=M(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2),s=e=>{z(e,zz())};V(o,e=>{I(t).managed&&e(s)}),T(r);var c=P(r),l=M(c),u=M(l,!0);T(l),T(c);var d=P(c),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=M(h,!0);T(h);var _=P(h),v=M(_);let y;var b=M(v,!0);T(v),T(_);var x=P(_),S=M(x,!0);T(x);var C=P(x),w=M(C),ee=M(w),te=e=>{var n=Bz(),r=N(n);{let e=O(()=>`Edit provider `+I(t).name);iT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>$.openEdit(I(t)),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=P(r,2);{let e=O(()=>($.deletingName===I(t).name?`Deleting provider `:`Delete provider `)+I(t).name),n=O(()=>$.deletingName===I(t).name);iT(i,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.requestDelete(I(t).name),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return Mo},class:`table-icon-svg`})},$$slots:{default:!0}})}z(e,n)};V(ee,e=>{I(t).managed||e(te)}),T(w),T(C),T(n),F((e,n,r)=>{B(a,I(t).name),B(u,I(t).type),W(d,`title`,I(t).base_url||``),B(f,I(t).base_url||`—`),B(m,e),B(g,n),y=U(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":I(t).enabled,"auth-key-status-inactive":!I(t).enabled}),B(b,I(t).enabled?`Enabled`:`Disabled`),B(S,r)},[()=>Oz(I(t)),()=>kz(I(t)),()=>ss.formatTimestamp(I(t).updated_at)]),z(e,n)}),T(i),T(r),T(n),z(e,n),D()}var Wz=R(``),Gz=R(`
      `),Kz=R(`
      `,1),qz=R(``),Jz=R(``),Yz=R(``),Xz=R(``),Zz=R(``),Qz=R(` `),$z=R(` `),eB=R(`
      `);function tB(e,t){E(t,!0);let n=O(()=>`provider-credential-`+t.field.name),r=O(()=>$.fieldErrors[t.field.name]||``),i=O(()=>I(r)?I(n)+`-error`:t.field.hint?I(n)+`-hint`:void 0),a=O(()=>{let e=String($.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){$.clearFieldError(t.field.name)}var s=eB(),c=M(s),l=M(c),u=P(l),d=e=>{z(e,Wz())};V(u,e=>{t.field.required&&e(d)}),T(c);var f=P(c,2),p=e=>{var t=Kz(),a=N(t);H(a,21,()=>$.form.api_keys,oi,(e,t,a)=>{var s=Gz(),c=M(s);na(c),W(c,`aria-label`,`API key `+(a+1)),iT(P(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeApiKeyRow(a),children:(e,t)=>{G(e,{get icon(){return Eo},class:`table-icon-svg`})},$$slots:{default:!0}}),T(s),F(()=>{W(c,`id`,a===0?I(n):I(n)+`-`+a),W(c,`aria-invalid`,I(r)?`true`:void 0),W(c,`aria-describedby`,a===0?I(i):void 0)}),L(`input`,c,o),da(c,()=>I(t).value,e=>I(t).value=e),z(e,s)}),T(a);var s=P(a,2),c=M(s);G(M(c),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(c),T(s),F(()=>W(c,`id`,$.form.api_keys.length===0?I(n):void 0)),L(`click`,c,()=>$.addApiKeyRow()),z(e,t)},m=e=>{var s=Jz(),c=M(s);c.value=c.__value=``,H(P(c),16,()=>I(a),e=>e,(e,t)=>{var n=qz(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(s),F(()=>{W(s,`id`,I(n)),W(s,`aria-invalid`,I(r)?`true`:void 0),W(s,`aria-describedby`,I(i))}),L(`change`,s,o),Gi(s,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,s)},h=e=>{var a=Yz();na(a),F(()=>{W(a,`id`,I(n)),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`change`,a,o),fa(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)},g=e=>{var a=Xz();ft(a),F(()=>{W(a,`id`,I(n)),W(a,`placeholder`,t.field.placeholder||``),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`input`,a,o),da(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)},_=e=>{var a=Zz();na(a),F(()=>{W(a,`id`,I(n)),W(a,`placeholder`,t.field.placeholder||``),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`input`,a,o),da(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)};V(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=P(f,2),y=e=>{var t=Qz(),i=M(t,!0);T(t),F(()=>{W(t,`id`,I(n)+`-error`),B(i,I(r))}),z(e,t)},b=e=>{var r=$z(),i=M(r,!0);T(r),F(()=>{W(r,`id`,I(n)+`-hint`),B(i,t.field.hint)}),z(e,r)};V(v,e=>{I(r)?e(y):t.field.hint&&e(b,1)}),T(s),F(()=>{W(c,`for`,I(n)),B(l,`${t.field.label??``} `)}),z(e,s),D()}Hr([`input`,`click`,`change`]);var nB=R(`

      The name is the stable identity used for routing and cannot change once created.

      `),rB=R(``),iB=R(` `),aB=R(`Determines which fields the gateway uses to build requests.`),oB=R(` `),sB=R(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),cB=R(`Immutable once created.`),lB=R(`

      Pick a type to configure its credentials — each provider type asks for different settings.

      `),uB=R(`
      Advanced settings
      `),dB=R(`
      `,1);function fB(e,t){E(t,!0);let n=O(()=>Cz($.types,$.form.type)),r=O(()=>$.formFields),i=O(()=>$.fieldErrors.name||``),a=O(()=>$.fieldErrors.type||``);function o(){$.selectType(),$.formMode===`create`&&($.form.name=Mz($.rows,$.form.type))}An(()=>{let e=$.focusField;if(!e)return;$.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{z(e,nB())},s=O(()=>$.formMode===`edit`?`Edit Provider`:`Add Provider`);cE(e,{get open(){return $.formOpen},get title(){return I(s)},ariaLabel:`Provider credential editor`,get error(){return $.error},get submitting(){return $.formSubmitting},novalidate:!0,onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var s=dB(),c=N(s),l=P(M(c),2),u=M(l);u.value=u.__value=``,H(P(u),16,()=>I(n),e=>e,(e,t)=>{var n=rB(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(l);var d=P(l,2),f=e=>{var t=iB(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)},p=e=>{z(e,aB())};V(d,e=>{I(a)?e(f):e(p,-1)}),T(c);var m=P(c,2),h=P(M(m),2);na(h);var g=P(h,2),_=e=>{var t=oB(),n=M(t,!0);T(t),F(()=>B(n,I(i))),z(e,t)},v=e=>{z(e,sB())},y=e=>{z(e,cB())};V(g,e=>{I(i)?e(_):$.formMode===`create`?e(v,1):e(y,-1)}),T(m);var b=P(m,2),x=e=>{z(e,lB())};V(b,e=>{$.form.type||e(x)});var S=P(b,2);H(S,17,()=>I(r).primary,e=>e.name,(e,t)=>{tB(e,{get field(){return I(t)}})});var C=P(S,2),w=M(C);cA(M(w),{get enabled(){return $.form.enabled},label:`provider`,onclick:()=>$.form.enabled=!$.form.enabled}),T(w),T(C);var ee=P(C,2),te=e=>{var t=uB(),n=M(t),i=M(n),a=P(M(i),2),o=M(a,!0);T(a),T(i),T(n);var s=P(n,2);H(s,21,()=>I(r).advanced,e=>e.name,(e,t)=>{tB(e,{get field(){return I(t)}})}),T(s),T(t),F(e=>{t.open=$.advancedOpen,B(o,e)},[()=>I(r).advanced.map(e=>e.label).join(`, `)]),Vr(`toggle`,t,e=>$.advancedOpen=e.currentTarget.open),z(e,t)};V(ee,e=>{I(r).advanced.length>0&&e(te)}),F(()=>{l.disabled=$.formMode===`edit`,W(l,`aria-invalid`,I(a)?`true`:void 0),W(l,`aria-describedby`,I(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=$.formMode===`edit`,W(h,`aria-invalid`,I(i)?`true`:void 0),W(h,`aria-describedby`,I(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),L(`change`,l,o),Gi(l,()=>$.form.type,e=>$.form.type=e),L(`input`,h,()=>$.clearFieldError(`name`)),da(h,()=>$.form.name,e=>$.form.name=e),z(e,s)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`change`,`input`]);var pB=R(`

      Providers

      `),mB=R(``),hB=R(`
      Provider credential management is unavailable.
      `),gB=R(``),_B=R(`
      `),vB=R(`

      No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

      `),yB=R(`

      No providers match your filter.

      `),bB=R(`
      `);function xB(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`providers-config`&&$.fetchPage()});var n=bB(),r=M(n),i=M(r);US(M(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{z(e,pB())},help:e=>{Ue(),z(e,Zr(`Configure LLM provider credentials here instead of setting API keys as + environment variables. Providers declared in config.yaml or env vars + are read-only (Config badge) and cannot be edited or deleted from the + dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),T(i);var a=P(i,2),o=M(a),s=e=>{var t=mB();G(M(t),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=$.formSubmitting),L(`click`,t,()=>$.openCreate()),z(e,t)};V(o,e=>{$.available&&!K.needsAuth&&e(s)}),T(a),T(r);var c=P(r,2),l=e=>{z(e,hB())};V(c,e=>{!$.available&&!K.needsAuth&&e(l)});var u=P(c,2),d=e=>{var t=gB(),n=M(t,!0);T(t),F(()=>B(n,$.error)),z(e,t)};V(u,e=>{$.error&&!K.needsAuth&&!$.formOpen&&e(d)});var f=P(u,2),p=e=>{nT(e,{label:`Loading providers...`})};V(f,e=>{$.loading&&!K.needsAuth&&e(p)});var m=P(f,2),h=e=>{var t=_B(),n=M(t);sw(M(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return $.filter},set value(e){$.filter=e}}),T(n),T(t),z(e,t)};V(m,e=>{($.rows.length>0||$.filter)&&$.available&&!K.needsAuth&&e(h)});var g=P(m,2);fB(g,{});var _=P(g,2),v=e=>{Uz(e,{})};V(_,e=>{$.filteredRows.length>0&&$.available&&!K.needsAuth&&e(v)});var y=P(_,2),b=e=>{z(e,vB())};V(y,e=>{$.rows.length===0&&!$.filter&&!$.loading&&!K.needsAuth&&!$.error&&$.available&&e(b)});var x=P(y,2),S=e=>{z(e,yB())};V(x,e=>{$.rows.length>0&&$.filteredRows.length===0&&$.filter&&!$.loading&&!K.needsAuth&&$.available&&e(S)}),T(n),z(e,n),D()}Hr([`click`]);function SB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function CB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function wB(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function TB(e){if(wB(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function EB(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=wB(t.user_path);if(r)return{error:r};let i=TB(t.user_path),a=CB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function DB(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function OB(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function kB(e,t=Date.now()){return!e||e.active===!1||OB(e)?!1:!DB(e,t)}function AB(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function jB(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!kB(e,i)?!1:!a||AB(e).includes(a))}function MB(e,t){return OB(e)?2:+!kB(e,t)}function NB(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function PB(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function FB(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=MB(e,t),i=MB(n,t);if(r!==i)return r-i;let[a,o]=r===2?[PB(e),PB(n)]:[NB(e),NB(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function IB(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!kB(n,t),0)}function LB(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var RB=new class{#e=k(j([]));get keys(){return I(this.#e)}set keys(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get showInactive(){return I(this.#a)}set showInactive(e){A(this.#a,e,!0)}#o=O(()=>FB(jB(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return I(this.#o)}set visibleKeys(e){A(this.#o,e)}#s=O(()=>IB(this.keys));get inactiveCount(){return I(this.#s)}set inactiveCount(e){A(this.#s,e)}#c=k(!1);get formOpen(){return I(this.#c)}set formOpen(e){A(this.#c,e,!0)}#l=k(!1);get formSubmitting(){return I(this.#l)}set formSubmitting(e){A(this.#l,e,!0)}#u=k(``);get issuedValue(){return I(this.#u)}set issuedValue(e){A(this.#u,e,!0)}#d=k(``);get deactivatingID(){return I(this.#d)}set deactivatingID(e){A(this.#d,e,!0)}#f=k(``);get dashboardAccessID(){return I(this.#f)}set dashboardAccessID(e){A(this.#f,e,!0)}#p=k(j(SB()));get form(){return I(this.#p)}set form(e){A(this.#p,e,!0)}#m=k(j(LB()));get labelsEditor(){return I(this.#m)}set labelsEditor(e){A(this.#m,e,!0)}copyState=aM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await aT(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=SB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=SB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=SB()}async submitForm(){let e=EB(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await oT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=SB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=LB())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:CB(e.value)};try{let n=await oT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}q.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await oT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,q.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),q.error(n.error);return}q.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await oT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,q.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),q.error(t.error);return}q.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},zB=R(``),BB=R(`

      Store this key securely — it won’t be shown again.

      `),VB=R(``),HB=R(``),UB=R(``),WB=R(``),GB=R(`
      `);function KB(e,t){E(t,!0);{let t=O(()=>RB.issuedValue?``:RB.error),n=O(()=>RB.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=O(()=>RB.issuedValue?za:co);cE(e,{get open(){return RB.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return I(t)},get submitting(){return RB.formSubmitting},get submitLabel(){return I(n)},submittingLabel:`Creating...`,get submitIcon(){return I(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>RB.closeForm(),onsubmit:()=>RB.issuedValue?RB.dismissIssuedKey():RB.submitForm(),children:(e,t)=>{var n=Qr(),r=N(n),i=e=>{var t=BB(),n=P(M(t),2),r=M(n),i=M(r,!0);T(r),zI(P(r,2),{get state(){return RB.copyState},onclick:()=>RB.copyIssuedValue()}),T(n);var a=P(n,2),o=e=>{z(e,zB())};V(a,e=>{RB.copyState.error&&e(o)}),T(t),F(()=>B(i,RB.issuedValue)),z(e,t)},a=e=>{var t=GB(),n=M(t),r=M(n),i=P(M(r),2);na(i),T(r);var a=P(r,2),o=P(M(a),2);na(o),T(a),T(n);var s=P(n,2),c=M(s);US(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{z(e,VB())},help:e=>{Ue(),z(e,Zr(`When set, this key overrides the configured user path request + header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=P(c,2);na(l),T(s);var u=P(s,2),d=M(u);US(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{z(e,HB())},help:e=>{Ue(),z(e,Zr(`Every request authenticated with this key gets these labels, in + addition to any labels from tagging headers. Labels show up in + usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=P(d,2);na(f),T(u);var p=P(u,2),m=M(p);US(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{z(e,UB())},help:e=>{Ue(),z(e,Zr(`When off, this key is denied the dashboard and every /admin API + endpoint. Model endpoints and GET /v1/usage stay available to + the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=P(m,2),g=M(h);na(g),Ue(2),T(h),T(p),uE(P(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=WB();ft(n),da(n,()=>RB.form.description,e=>RB.form.description=e),z(e,n)},$$slots:{default:!0}}),T(t),da(i,()=>RB.form.name,e=>RB.form.name=e),da(o,()=>RB.form.expires_at,e=>RB.form.expires_at=e),da(l,()=>RB.form.user_path,e=>RB.form.user_path=e),da(f,()=>RB.form.labels,e=>RB.form.labels=e),fa(g,()=>RB.form.dashboard_access,e=>RB.form.dashboard_access=e),z(e,t)};V(r,e=>{RB.issuedValue?e(i):e(a,-1)}),z(e,n)},$$slots:{default:!0}})}D()}var qB=R(`

      `),JB=R(`

      Applies to new requests made with this key. Leave empty to remove all labels.

      `,1);function YB(e,t){E(t,!0),cE(e,{get open(){return RB.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return RB.labelsEditor.error},get submitting(){return RB.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>RB.closeLabelsEditor(),onsubmit:()=>RB.submitLabelsEditor(),headerHint:e=>{var t=qB(),n=M(t,!0);T(t),F(()=>B(n,RB.labelsEditor.name)),z(e,t)},children:(e,t)=>{uE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=JB(),r=N(n);na(r),Ue(2),da(r,()=>RB.labelsEditor.value,e=>RB.labelsEditor.value=e),z(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),D()}var XB=R(` `),ZB=R(`
      `),QB=R(``),$B=R(`Expired`),eV=R(` `),tV=R(` `,1),nV=R(`Deactivated`),rV=R(`
      `),iV=R(`
      NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
      `);function aV(e,t){E(t,!0);var n=iV(),r=M(n),i=M(r),a=M(i),o=P(M(a),5),s=M(o);G(P(M(s)),{get icon(){return Qa},width:`13`,height:`13`}),T(s),T(o),Ue(3),T(a),T(i);var c=P(i);H(c,21,()=>RB.visibleKeys,e=>e.id,(e,t)=>{var n=rV();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i),s=M(o,!0);T(o);var c=P(o),l=M(c,!0);T(c);var u=P(c),d=M(u),f=e=>{var n=ZB();H(n,20,()=>I(t).labels||[],e=>e,(e,t)=>{var n=XB(),r=M(n,!0);T(n),F(e=>{Hi(n,e),B(r,t)},[()=>zy(t)]),z(e,n)}),T(n),z(e,n)},p=e=>{z(e,QB())};V(d,e=>{(I(t).labels||[]).length>0?e(f):e(p,-1)}),T(u);var m=P(u),h=M(m),g=M(h,!0);T(h),T(m);var _=P(m),v=M(_);let y;var b=M(v,!0);T(v),T(_);var x=P(_),S=M(x),C=e=>{var n=eV(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{z(e,$B())},s=O(()=>DB(I(t)));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>lc(I(t).expires_at)]),z(e,n)},w=e=>{z(e,Zr(`—`))};V(S,e=>{I(t).expires_at?e(C):e(w,-1)}),T(x);var ee=P(x),te=M(ee,!0);T(ee);var ne=P(ee),re=M(ne),ie=M(re),ae=e=>{var n=tV(),r=N(n);{let e=O(()=>(I(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+I(t).name),n=O(()=>!!RB.dashboardAccessID);iT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>RB.toggleDashboardAccess(I(t)),get disabled(){return I(n)},children:(e,n)=>{{let n=O(()=>I(t).dashboard_access?bo:yo);G(e,{get icon(){return I(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=P(r,2);{let e=O(()=>`Edit labels for API key `+I(t).name);iT(i,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>RB.openLabelsEditor(I(t)),children:(e,t)=>{G(e,{get icon(){return oo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=P(i,2);{let e=O(()=>(RB.deactivatingID===I(t).id?`Deactivating API key `:`Deactivate API key `)+I(t).name),n=O(()=>RB.deactivatingID===I(t).id);iT(a,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>RB.deactivateKey(I(t)),get disabled(){return I(n)},children:(e,t)=>{G(e,{get icon(){return lo},class:`table-icon-svg`})},$$slots:{default:!0}})}z(e,n)},oe=e=>{var n=nV();F(e=>W(n,`title`,e),[()=>I(t).deactivated_at?`Deactivated on `+uc(I(t).deactivated_at):`Deactivated`]),z(e,n)},se=O(()=>OB(I(t)));V(ie,e=>{I(t).active?e(ae):I(se)&&e(oe,1)}),T(re),T(ne),T(n),F((e,i,o)=>{r=U(n,1,`svelte-nf0ldb`,null,r,e),B(a,I(t).name),B(s,I(t).description||`—`),B(l,I(t).user_path||`—`),B(g,I(t).redacted_value),y=U(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":I(t).dashboard_access,"auth-key-status-inactive":!I(t).dashboard_access}),B(b,I(t).dashboard_access?`Allowed`:`Denied`),W(x,`title`,i),B(te,o)},[()=>({"auth-key-row-deactivated":OB(I(t))}),()=>I(t).expires_at?uc(I(t).expires_at):``,()=>ss.formatTimestamp(I(t).created_at)]),z(e,n)}),T(c),T(r),T(n),z(e,n),D()}var oV=R(``),sV=R(`
      API key management is unavailable.
      `),cV=R(``),lV=R(`

      Managed API keys authenticate requests to the gateway. Deactivation is + permanent — create a new key if access needs to be restored.

      `),uV=R(`
      `),dV=R(`
      `),fV=R(`

      `),pV=R(`

      No API keys yet. Issue a key to get started.

      `),mV=R(`
      `);function hV(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`auth-keys`&&RB.fetchKeys()});var n=mV(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=oV();G(M(t),{get icon(){return co},class:`table-icon-svg`}),Ue(2),T(t),F(()=>t.disabled=RB.formSubmitting),L(`click`,t,()=>{RB.formSubmitting||RB.openForm()}),z(e,t)};V(a,e=>{RB.available&&!K.authError&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,sV())};V(s,e=>{!RB.available&&!K.authError&&e(c)});var l=P(s,2),u=e=>{var t=cV(),n=M(t,!0);T(t),F(()=>B(n,RB.error)),z(e,t)};V(l,e=>{RB.error&&!K.authError&&!RB.formOpen&&e(u)});var d=P(l,2),f=e=>{z(e,lV())};V(d,e=>{RB.available&&!K.authError&&e(f)});var p=P(d,2);KB(p,{});var m=P(p,2);YB(m,{});var h=P(m,2),g=e=>{var t=uV();vS(M(t),{size:18,label:`Loading API keys`}),T(t),z(e,t)};V(h,e=>{RB.loading&&RB.keys.length===0&&e(g)});var _=P(h,2),v=e=>{var t=dV(),n=M(t);sw(M(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return RB.filter},set value(e){RB.filter=e}}),T(n);var r=P(n,2),i=M(r),a=M(i);na(a);var o=P(a,2),s=P(M(o)),c=e=>{var t=Zr();F(()=>B(t,`(${RB.inactiveCount??``})`)),z(e,t)};V(s,e=>{RB.inactiveCount>0&&e(c)}),T(o),T(i),T(r),T(t),fa(a,()=>RB.showInactive,e=>RB.showInactive=e),z(e,t)};V(_,e=>{RB.keys.length>0&&RB.available&&e(v)});var y=P(_,2),b=e=>{aV(e,{})};V(y,e=>{RB.visibleKeys.length>0&&RB.available&&e(b)});var x=P(y,2),S=e=>{var t=fV(),n=M(t);T(t),F(()=>B(n,`No API keys match the current filter.${RB.inactiveCount>0&&!RB.showInactive?` `+RB.inactiveCount+` inactive `+(RB.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),z(e,t)};V(x,e=>{RB.keys.length>0&&RB.visibleKeys.length===0&&RB.available&&e(S)});var C=P(x,2),w=e=>{z(e,pV())};V(C,e=>{RB.keys.length===0&&!RB.loading&&!K.authError&&!RB.error&&RB.available&&e(w)}),T(n),z(e,n),D()}Hr([`click`]);var gV=R(`

      Timezone

      `),_V=R(``),vV=R(``),yV=R(`
      `,1);function bV(e,t){E(t,!0);function n(){ss.saveOverride(),K.refresh()}function r(){ss.clearOverride(),K.refresh()}var i=yV(),a=N(i);US(M(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{z(e,gV())},$$slots:{title:!0}}),T(a);var o=P(a,2),s=M(o),c=P(M(s),2),l=M(c),u=M(l);T(l),l.value=l.__value=``,H(P(l),17,()=>ss.options,e=>e.value,(e,t)=>{var n=_V(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(c),T(s),T(o);var d=P(o,2),f=M(d),p=e=>{var t=vV();L(`click`,t,r),z(e,t)};V(f,e=>{ss.override&&e(p)}),T(d),F(e=>B(u,`Automatic (${e??``})`),[()=>ss.detectedTimeZoneLabel()]),Vr(`focus`,c,()=>ss.ensureOptions()),L(`change`,c,n),Gi(c,()=>ss.override,e=>ss.override=e),z(e,i),D()}Hr([`change`,`click`]);var xV=R(``),SV=R(`

      Failover

      `,1);function CV(e,t){E(t,!0);let n=O(()=>Z.failoverSaving||Z.failoverGenerating||Z.failoverDraftSaving||!Z.failoverAvailable||!Z.failoverEnabled());var r=SV(),i=N(r),a=P(M(i),2),o=M(a),s=M(o);G(s,{get icon(){return Ao},class:`form-action-icon`});var c=P(s,2),l=M(c,!0);T(c),T(o);var u=P(o,2);G(M(u),{get icon(){return Eo},class:`form-action-icon`}),Ue(2),T(u),T(a),T(i);var d=P(i,2),f=M(d),p=e=>{var t=xV(),n=M(t,!0);T(t),F(()=>B(n,Z.failoverError)),z(e,t)};V(f,e=>{Z.failoverError&&e(p)}),T(d),ej(P(d,2),{}),F(()=>{o.disabled=I(n),B(l,Z.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=I(n)}),L(`click`,o,()=>Z.generateFailoverRules()),L(`click`,u,()=>Z.openFailoverResetDialog()),z(e,r),D()}Hr([`click`]);function wV(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function TV(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function EV(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var DV=R(`

      Budget Resets

      `),OV=R(``),kV=R(`

      If the selected day does not exist in a month, the reset runs on + the last day of that month.

      `),AV=R(``),jV=R(``),MV=R(`
      Monthly
      Weekly
      Daily
      `,1);function NV(e,t){E(t,!0);let n=k(j(wV())),r=k(!1),i=k(!1),a=k(``),o=k(!1),s=O(()=>vs.budgetsVisible());async function c(){if(await vs.ensureLoaded(),!vs.budgetsVisible()){A(a,``);return}A(r,!0),A(a,``);try{let e=await ps(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){A(a,`Unable to load budget settings.`);return}A(n,TV(e.data,I(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),A(a,`Unable to load budget settings.`)}finally{A(r,!1)}}async function l(){if(!I(i)){A(i,!0);try{let e=await ms(`/admin/budgets/settings`,`PUT`,TV(I(n),I(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){q.error(`Unable to save budget settings.`);return}A(n,TV(e.data,I(n)),!0),A(a,``),q.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),q.error(`Unable to save budget settings.`)}finally{A(i,!1)}}}An(()=>{K.refreshTick,c()});var u=Qr(),d=N(u),f=e=>{var t=MV(),s=N(t),c=M(s);US(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{z(e,DV())},$$slots:{title:!0}});var u=P(c,2),d=M(u),f=P(M(d),2),p=M(f);US(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return I(o)},set open(e){A(o,e,!0)},title:e=>{z(e,OV())},$$slots:{title:!0}});var m=P(p,2);na(m),T(f);var h=P(f,2),g=P(M(h),2);na(g),T(h);var _=P(h,2),v=P(M(_),2);na(v),T(_);var y=P(_,2),b=M(y),x=e=>{z(e,kV())};V(b,e=>{I(o)&&e(x)}),T(y),T(d);var S=P(d,2),C=P(M(S),2),w=P(M(C),2);H(w,21,EV,e=>e.value,(e,t)=>{var n=AV(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(w),T(C);var ee=P(C,2),te=P(M(ee),2);na(te),T(ee);var ne=P(ee,2),re=P(M(ne),2);na(re),T(ne),Ue(2),T(S);var ie=P(S,2),ae=P(M(ie),4),oe=P(M(ae),2);na(oe),T(ae);var se=P(ae,2),ce=P(M(se),2);na(ce),T(se),Ue(2),T(ie),T(u);var le=P(u,2),ue=M(le);G(M(ue),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(ue);var de=P(ue,2),fe=e=>{vS(e,{size:16,label:`Loading budget settings`})};V(de,e=>{I(r)&&e(fe)}),T(le),T(s);var pe=P(s,2),me=M(pe),he=e=>{var t=jV(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)};V(me,e=>{I(a)&&e(he)}),T(pe),F(()=>{ue.disabled=I(i)||I(r),W(ue,`aria-busy`,I(i)?`true`:`false`)}),da(m,()=>I(n).monthly_reset_day,e=>I(n).monthly_reset_day=e),da(g,()=>I(n).monthly_reset_hour,e=>I(n).monthly_reset_hour=e),da(v,()=>I(n).monthly_reset_minute,e=>I(n).monthly_reset_minute=e),Gi(w,()=>I(n).weekly_reset_weekday,e=>I(n).weekly_reset_weekday=e),da(te,()=>I(n).weekly_reset_hour,e=>I(n).weekly_reset_hour=e),da(re,()=>I(n).weekly_reset_minute,e=>I(n).weekly_reset_minute=e),da(oe,()=>I(n).daily_reset_hour,e=>I(n).daily_reset_hour=e),da(ce,()=>I(n).daily_reset_minute,e=>I(n).daily_reset_minute=e),L(`click`,ue,l),z(e,t)};V(d,e=>{I(s)&&e(f)}),z(e,u),D()}Hr([`click`]);var PV=R(`

      Reset All Budgets

      Start new budget periods for every configured budget without changing + the limits.

      `);function FV(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=PV(),n=P(M(t),2),r=M(n);G(M(r),{get icon(){return fo},class:`form-action-icon`}),Ue(2),T(r),T(n),T(t),F(()=>r.disabled=Y.resetAllLoading),L(`click`,r,()=>Y.openResetDialog()),z(e,t)},a=O(()=>vs.budgetsVisible());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}Hr([`click`]);function IV(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function LV(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function RV(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function zV(e){return e&&e.error&&e.error.message?e.error.message:``}var BV=R(`

      Tagging based on headers

      `),VV=R(`config`),HV=R(``),UV=R(`
      `),WV=R(`

      No tagging headers configured. Requests are not labelled.

      `),GV=R(``),KV=R(`
      `,1);function qV(e,t){E(t,!0);let n=k(j([])),r=k(!0),i=k(!1),a=k(!1),o=k(``);function s(){I(n).push(IV())}function c(e){let t=I(n)[e];!t||t.managed||I(n).splice(e,1)}async function l(){A(i,!0),A(o,``);try{let e=await ps(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){A(o,`Unable to load tagging settings.`);return}A(n,LV(e.data),!0),A(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),A(o,`Unable to load tagging settings.`)}finally{A(i,!1)}}async function u(){if(!(I(a)||!I(r))){A(a,!0);try{let e=await ms(`/admin/tagging/settings`,`PUT`,RV(I(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){q.error(e.status!==401&&zV(e.data)||`Unable to save tagging settings.`);return}A(n,LV(e.data),!0),A(r,e.data&&e.data.editable!==!1,!0),A(o,``),q.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),q.error(`Unable to save tagging settings.`)}finally{A(a,!1)}}}An(()=>{K.refreshTick,l()});var d=KV(),f=N(d),p=M(f);US(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{z(e,BV())},$$slots:{title:!0}});var m=P(p,2),h=M(m);H(h,17,()=>I(n),oi,(e,t,n)=>{var i=UV(),a=M(i),o=M(a);W(o,`for`,`tagging-header-`+n);var s=P(o,2);na(s),W(s,`id`,`tagging-header-`+n),T(a);var l=P(a,2),u=M(l);W(u,`for`,`tagging-prefix-`+n);var d=P(u,2);na(d),W(d,`id`,`tagging-prefix-`+n),T(l);var f=P(l,2),p=M(f);W(p,`for`,`tagging-delimiter-`+n);var m=P(p,2);na(m),W(m,`id`,`tagging-delimiter-`+n),T(f);var h=P(f,2),g=M(h);na(g),Ue(2),T(h);var _=P(h,2),v=M(_),y=e=>{z(e,VV())},b=e=>{var i=HV();F(()=>{i.disabled=!I(r),W(i,`aria-label`,`Remove tagging header `+(I(t).header||n+1))}),L(`click`,i,()=>c(n)),z(e,i)};V(v,e=>{I(t).managed?e(y):e(b,-1)}),T(_),T(i),F(()=>{s.disabled=I(t).managed||!I(r),d.disabled=I(t).managed||!I(r),m.disabled=I(t).managed||!I(r),g.disabled=I(t).managed||!I(r)}),da(s,()=>I(t).header,e=>I(t).header=e),da(d,()=>I(t).prefix,e=>I(t).prefix=e),da(m,()=>I(t).delimiter,e=>I(t).delimiter=e),fa(g,()=>I(t).do_not_pass,e=>I(t).do_not_pass=e),z(e,i)});var g=P(h,2),_=e=>{vS(e,{size:16,label:`Loading tagging settings`})};V(g,e=>{I(i)&&e(_)});var v=P(g,2),y=e=>{z(e,WV())};V(v,e=>{!I(i)&&I(n).length===0&&e(y)}),T(m);var b=P(m,2),x=M(b);G(M(x),{get icon(){return co},class:`form-action-icon`}),Ue(2),T(x);var S=P(x,2);G(M(S),{get icon(){return po},class:`form-action-icon`}),Ue(2),T(S),T(b),T(f);var C=P(f,2),w=M(C),ee=e=>{var t=GV(),n=M(t,!0);T(t),F(()=>B(n,I(o))),z(e,t)};V(w,e=>{I(o)&&e(ee)}),T(C),F(()=>{x.disabled=!I(r)||I(a)||I(i),S.disabled=!I(r)||I(a)||I(i),W(S,`aria-busy`,I(a)?`true`:`false`)}),L(`click`,x,s),L(`click`,S,u),z(e,d),D()}Hr([`click`]);function JV(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?cc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?cc(r):``}}function YV(e,t,n,r){return{...JV(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function XV(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var ZV=R(`

      Usage Pricing Recalculation

      `),QV=R(`
      `);function $V(e,t){E(t,!0);let n=k(``),r=k(``),i=k(!1),a=O(()=>vs.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!I(a)){q.error(`Usage pricing recalculation is unavailable.`);return}I(i)||Ps.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Pa,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!I(a)){q.error(`Usage pricing recalculation is unavailable.`);return}if(!I(i)){A(i,!0);try{let e=await ms(`/admin/usage/recalculate-pricing`,`POST`,YV({selectedPreset:Oc.selectedPreset,customStartDate:Oc.customStartDate,customEndDate:Oc.customEndDate,today:ss.todayDate()},I(n),I(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Ps.error=`Unable to recalculate pricing.`;return}Ps.close(),q.success(XV(e.data)),Pc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Ps.error=`Unable to recalculate pricing.`}finally{A(i,!1)}}}var c=Qr(),l=N(c),u=e=>{var t=QV(),s=M(t);US(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{z(e,ZV())},$$slots:{title:!0}});var c=P(s,2),l=M(c),u=P(M(l),2);Zc(M(u),{}),T(u),T(l);var d=P(l,2),f=P(M(d),2);na(f),T(d);var p=P(d,2),m=P(M(p),2);na(m),T(p),T(c);var h=P(c,2),g=M(h);G(M(g),{get icon(){return Pa},class:`form-action-icon`}),Ue(2),T(g),T(h),T(t),F(()=>{g.disabled=I(i)||!I(a),W(g,`aria-busy`,I(i)?`true`:`false`)}),da(f,()=>I(n),e=>A(n,e)),da(m,()=>I(r),e=>A(r,e)),L(`click`,g,o),z(e,t)};V(l,e=>{I(a)&&e(u)}),z(e,c),D()}Hr([`click`]);function eH(e){return String(e&&e.status||`ok`).toLowerCase()}function tH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=eH(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function nH(e){return!!e&&eH(e)===`ok`}function rH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function iH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var aH=R(`

      Runtime Refresh

      `),oH=R(`
    • `),sH=R(`
        `),cH=R(`
        `,1);function lH(e,t){E(t,!0);let n=k(!1),r=k(null);async function i(){if(!I(n)){A(n,!0),A(r,null);try{let e=await ms(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){q.error(`Runtime refresh failed.`);return}A(r,e.data&&typeof e.data==`object`?e.data:null,!0),nH(I(r))?q.success(tH(I(r))):q.error(tH(I(r))),K.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),q.error(`Runtime refresh failed.`)}finally{A(n,!1)}}}var a=cH(),o=N(a),s=M(o);US(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{z(e,aH())},$$slots:{title:!0}});var c=P(s,2),l=M(c);let u;G(M(l),{get icon(){return uo},class:`settings-refresh-icon`}),Ue(2),T(l),T(c),T(o);var d=P(o,2),f=M(d),p=e=>{var t=sH();H(t,21,()=>rH(I(r)),e=>e.name,(e,t)=>{var n=oH(),r=M(n,!0);T(n),F(e=>{U(n,1,`runtime-refresh-step is-${I(t).status??``}`,`svelte-yeq2mp`),B(r,e)},[()=>iH(I(t))]),z(e,n)}),T(t),z(e,t)},m=O(()=>rH(I(r)).length>0);V(f,e=>{I(m)&&e(p)}),T(d),F(()=>{u=U(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":I(n)}),l.disabled=I(n),W(l,`aria-busy`,I(n)?`true`:`false`)}),L(`click`,l,i),z(e,a),D()}Hr([`click`]);var uH=R(``),dH=R(`

        `),fH=R(`

        `),pH=R(``),mH=R(`
        `),hH=R(`

        AI Processing

        `);function gH(e,t){E(t,!0);let n=k(j([])),r=k(!1),i=k(``),a=k(``);async function o(){A(r,!0),A(a,``);try{let e=await ps(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){A(a,`Unable to load runtime settings.`);return}A(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),A(a,`Unable to load runtime settings.`)}finally{A(r,!1)}}async function s(e,t,r){if(!(e.locked||I(i))){A(i,e.key,!0);try{let i=await ms(`/admin/runtime/settings/${encodeURIComponent(e.key)}`,`PUT`,{value:t},{label:`save ${e.label}`});if(i.stale){r.value=e.value;return}if(!i.ok){r.value=e.value,q.error(`Unable to save ${e.label}.`);return}A(n,I(n).map(t=>t.key===e.key?i.data:t),!0),q.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),q.error(`Unable to save ${e.label}.`)}finally{A(i,``)}}}An(()=>{K.refreshTick,o()});var c=Qr(),l=N(c),u=e=>{var t=hH(),o=M(t),c=P(M(o),2),l=e=>{var t=uH(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)};V(c,e=>{I(a)&&e(l)}),T(o);var u=P(o,2);H(u,21,()=>I(n),e=>e.key,(e,t)=>{var n=mH(),r=M(n),a=M(r),o=M(a,!0);T(a);var c=P(a,2),l=e=>{var n=dH(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(c,e=>{I(t).description&&e(l)});var u=P(c,2),d=e=>{var n=fH(),r=M(n);T(n),F(()=>B(r,`Managed by ${(I(t).managed_by||`environment`)??``}`)),z(e,n)};V(u,e=>{I(t).locked&&e(d)}),T(r);var f=P(r,2);H(f,21,()=>I(t).options||[],e=>e.value,(e,t)=>{var n=pH(),r=M(n,!0);T(n);var i={};F(()=>{W(n,`title`,I(t).description||``),B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(f);var p;Wi(f),T(n),F(()=>{W(a,`for`,`runtime-setting-${I(t).key}`),B(o,I(t).label),W(f,`id`,`runtime-setting-${I(t).key}`),f.disabled=I(t).locked||I(i)!==``,p!==(p=I(t).value)&&(f.value=(f.__value=I(t).value)??``,Ui(f,I(t).value))}),L(`change`,f,e=>s(I(t),e.currentTarget.value,e.currentTarget)),z(e,n)}),T(u),T(t),F(()=>W(u,`aria-busy`,I(r)?`true`:`false`)),z(e,t)};V(l,e=>{(I(n).length>0||I(a))&&e(u)}),z(e,c),D()}Hr([`change`]);var _H=R(`
        `);function vH(e,t){E(t,!0),An(()=>{K.refreshTick,Wo.page===`settings`&&(ss.ensureOptions(),vs.ensureLoaded())});var n=_H(),r=P(M(n),2),i=M(r);bV(i,{});var a=P(i,2);CV(a,{});var o=P(a,2);NV(o,{});var s=P(o,2);FV(s,{});var c=P(s,2);qV(c,{});var l=P(c,2);gH(l,{});var u=P(l,2);$V(u,{}),lH(P(u,2),{}),T(r);var d=P(r,2),f=M(d,!0);T(d),T(n),F(e=>B(f,e),[()=>zo()]),z(e,n),D()}var yH=R(`
        `);function bH(e,t){E(t,!0);let n={overview:pC,usage:eT,budgets:AE,"rate-limits":VD,models:Cj,workflows:WN,"audit-logs":BL,guardrails:NR,"mcp-servers":pz,"providers-config":xB,"auth-keys":hV,settings:vH};ss.init(),Oc.init(),K.init(),Da.init(),Oa.init(),Wo.init(),An(()=>{K.refreshTick,vs.fetch(),kc.fetchModels(),kc.fetchCategories()}),An(()=>{document.body.classList.toggle(`dashboard-modal-open`,ka.anyOpen)});let r=O(()=>n[Wo.page]||pC);var i=yH(),a=M(i);Cs(a,{});var o=P(a,2),s=M(o);$s(s,{}),_i(P(s,2),()=>I(r),(e,t)=>{t(e,{})}),T(o);var c=P(o,2);Ms(c,{});var l=P(c,2);Rs(l,{}),Zs(P(l,2),{}),T(i),z(e,i),D()}ti(bH,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/assets/index-uqP7q8EU.js b/internal/admin/dashboard/static/dist/assets/index-uqP7q8EU.js deleted file mode 100644 index 74558646d..000000000 --- a/internal/admin/dashboard/static/dist/assets/index-uqP7q8EU.js +++ /dev/null @@ -1,67 +0,0 @@ -(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Array.isArray,t=Array.prototype.indexOf,n=Array.prototype.includes,r=Array.from,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyDescriptors,s=Object.prototype,c=Array.prototype,l=Object.getPrototypeOf,u=Object.isExtensible;function d(e){return typeof e==`function`}var f=()=>{};function p(e){for(var t=0;t{e=n,t=r}),resolve:e,reject:t}}function h(e,t,n=!1){return e===void 0?n?t():t:e}function g(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);let n=[];for(let r of e)if(n.push(r),n.length===t)break;return n}var _=1<<24,v=1024,y=2048,b=4096,x=8192,S=16384,C=32768,w=1<<25,ee=65536,te=1<<19,ne=1<<20,re=1<<25,ie=65536,ae=1<<21,oe=1<<22,se=1<<23,ce=Symbol(`$state`),le=Symbol(`legacy props`),ue=Symbol(``),de=Symbol(`attributes`),fe=Symbol(`class`),pe=Symbol(`style`),me=Symbol(`text`),he=Symbol(`form reset`),ge=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},_e=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function ve(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function ye(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function be(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function xe(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function Se(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function Ce(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function we(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function Te(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Ee(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function De(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function Oe(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var ke={},Ae=Symbol(`uninitialized`),je=`http://www.w3.org/1999/xhtml`,Me=`http://www.w3.org/2000/svg`,Ne=`http://www.w3.org/1998/Math/MathML`;function Pe(){console.warn(`https://svelte.dev/e/derived_inert`)}function Fe(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Ie(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function Le(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var Re=!1;function ze(e){Re=e}var Be;function Ve(e){if(e===null)throw Fe(),ke;return Be=e}function He(){return Ve(bn(Be))}function T(e){if(Re){if(bn(Be)!==null)throw Fe(),ke;Be=e}}function Ue(e=1){if(Re){for(var t=e,n=Be;t--;)n=bn(n);Be=n}}function We(e=!0){for(var t=0,n=Be;;){if(n.nodeType===8){var r=n.data;if(r===`]`){if(t===0)return n;--t}else(r===`[`||r===`[!`||r[0]===`[`&&!isNaN(Number(r.slice(1))))&&(t+=1)}var i=bn(n);e&&n.remove(),n=i}}function Ge(e){if(!e||e.nodeType!==8)throw Fe(),ke;return e.data}function Ke(e){return e===this.v}function qe(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function Je(e){return!qe(e,this.v)}var Ye=null;function Xe(e){Ye=e}function E(e,t=!1,n){Ye={p:Ye,i:!1,c:null,e:null,s:e,x:null,r:ir,l:null}}function D(e){var t=Ye,n=t.e;if(n!==null){t.e=null;for(var r of n)jn(r)}return e!==void 0&&(t.x=e),t.i=!0,Ye=t.p,e??{}}function Ze(){return!0}var Qe=[];function $e(){var e=Qe;Qe=[],p(e)}function et(e){if(Qe.length===0&&!zt){var t=Qe;queueMicrotask(()=>{t===Qe&&$e()})}Qe.push(e)}function tt(){for(;Qe.length>0;)$e()}function nt(e){var t=ir;if(t===null)return tr.f|=se,e;if(!(t.f&32768)&&!(t.f&4))throw e;rt(e,t)}function rt(e,t){if(!(t!==null&&t.f&16384)){for(;t!==null;){if(t.f&128){if(!(t.f&32768))throw e;try{t.b.error(e);return}catch(t){e=t}}t=t.parent}throw e}}var it=~(y|b|v);function at(e,t){e.f=e.f&it|t}function ot(e){e.f&512||e.deps===null?at(e,v):at(e,b)}function st(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=ie,st(t.deps))}function ct(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),st(e.deps),at(e,v)}var lt=!1;function ut(e){var t=lt;try{return lt=!1,[e(),lt]}finally{lt=t}}function dt(e,t){if(t){let t=document.body;e.autofocus=!0,et(()=>{document.activeElement===t&&e.focus()})}}function ft(e){Re&&yn(e)!==null&&xn(e)}var pt=!1;function mt(){pt||(pt=!0,document.addEventListener(`reset`,e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(let t of e.target.elements)t[he]?.()})},{capture:!0}))}function ht(e){var t=tr,n=ir;rr(null),ar(null);try{return e()}finally{rr(t),ar(n)}}function gt(e,t,n,r=n){e.addEventListener(t,()=>ht(n));let i=e[he];i?e[he]=()=>{i(),r(!0)}:e[he]=()=>r(!0),mt()}function _t(e){let t=0,n=an(0),r;return()=>{On()&&(I(n),In(()=>(t===0&&(r=Er(()=>e(()=>ln(n)))),t+=1,()=>{et(()=>{--t,t===0&&(r?.(),r=void 0,ln(n))})})))}}var vt=ee|te;function yt(e,t,n,r){new bt(e,t,n,r)}var bt=class{parent;is_pending=!1;transform_error;#e;#t=Re?Be:null;#n;#r;#i;#a=null;#o=null;#s=null;#c=null;#l=0;#u=0;#d=!1;#f=new Set;#p=new Set;#m=null;#h=_t(()=>(this.#m=an(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=ir;t.b=this,t.f|=128,n(e)},this.parent=ir.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=Ln(()=>{if(Re){let e=this.#t;He();let t=e.data===`[!`;if(e.data.startsWith(`[?`)){let t=JSON.parse(e.data.slice(2));this.#_(t)}else t?this.#v():this.#g()}else this.#y()},vt),Re&&(this.#e=Be)}#g(){try{this.#a=zn(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=zn(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=zn(()=>e(this.#e)),et(()=>{var e=this.#c=document.createDocumentFragment(),t=vn();e.append(t),this.#a=this.#x(()=>zn(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,Kn(this.#o,()=>{this.#o=null}),this.#b(Ft))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=zn(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();Xn(this.#a,e);let t=this.#n.pending;this.#o=zn(()=>t(this.#e))}else this.#b(Ft)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){ct(e,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#n.pending}#x(e){var t=ir,n=tr,r=Ye;ar(this.#i),rr(this.#i),Xe(this.#i.ctx);try{return Gt.ensure(),e()}catch(e){return nt(e),null}finally{ar(t),rr(n),Xe(r)}}#S(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#S(e,t);return}this.#u+=e,this.#u===0&&(this.#b(t),this.#o&&Kn(this.#o,()=>{this.#o=null}),this.#c&&=(this.#e.before(this.#c),null))}update_pending_count(e,t){this.#S(e,t),this.#l+=e,!(!this.#m||this.#d)&&(this.#d=!0,et(()=>{this.#d=!1,this.#m&&sn(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),I(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;Ft?.is_fork?(this.#a&&Ft.skip_effect(this.#a),this.#o&&Ft.skip_effect(this.#o),this.#s&&Ft.skip_effect(this.#s),Ft.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(Un(this.#a),null),this.#o&&=(Un(this.#o),null),this.#s&&=(Un(this.#s),null),Re&&(Ve(this.#t),Ue(),Ve(We()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Le();return}r=!0,i&&Oe(),this.#s!==null&&Kn(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){rt(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return zn(()=>{var t=ir;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return rt(e,this.#i.parent),null}}))};et(()=>{var t;try{t=this.transform_error(e)}catch(e){rt(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>rt(e,this.#i&&this.#i.parent)):o(t)})}};function xt(e,t,n,r){let i=Ze()?Tt:Ot;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=ir,c=St(),l=a.length===1?a[0].promise:a.length>1?Promise.all(a.map(e=>e.promise)):null;function u(e){if(!(s.f&16384)){c();try{r([...o,...e])}catch(e){rt(e,s)}Ct()}}var d=wt();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>Dt(e))).then(u).catch(e=>rt(e,s)).finally(d)}l?l.then(()=>{c(),f(),Ct()}):f()}function St(){var e=ir,t=tr,n=Ye,r=Ft;return function(i=!0){ar(e),rr(t),Xe(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function Ct(e=!0){ar(null),rr(null),Xe(null),e&&Ft?.deactivate()}function wt(){var e=ir,t=e.b,n=Ft,r=!!t?.is_rendered();return t?.update_pending_count(1,n),n.increment(r,e),()=>{t?.update_pending_count(-1,n),n.decrement(r,e)}}function Tt(e){var t=2|y;return ir!==null&&(ir.f|=te),{ctx:Ye,deps:null,effects:null,equals:Ke,f:t,fn:e,reactions:null,rv:0,v:Ae,wv:0,parent:ir,ac:null}}var Et=Symbol(`obsolete`);function Dt(e,t,n){let r=ir;r===null&&ve();var i=void 0,a=an(Ae),o=!tr,s=new Set;return Fn(()=>{var t=ir,n=m();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==ge&&n.reject(e)}).finally(Ct)}catch(e){n.reject(e),Ct()}var c=Ft;if(o){if(t.f&32768)var l=wt();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(Et);else for(let e of s.values())e.reject(Et);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==Et&&(c.activate(),t?(a.f|=se,sn(a,t)):(a.f&8388608&&(a.f^=se),sn(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),kn(()=>{for(let e of s)e.reject(Et)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function O(e){let t=Tt(e);return sr(t),t}function Ot(e){let t=Tt(e);return t.equals=Je,t}function kt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n{t.ac.abort(ge),t.ac=null}),t.fn!==null&&(t.teardown=f),xr(t,0),Vn(t))}function Nt(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&Sr(t)}var Pt=null,Ft=null,It=null,Lt=null,Rt=null,zt=!1,Bt=!1,Vt=null,Ht=null,Ut=0,Wt=1,Gt=class e{id=Wt++;#e=!1;linked=!0;#t=null;#n=null;async_deriveds=new Map;current=new Map;previous=new Map;#r=new Set;#i=new Set;#a=0;#o=new Map;#s=null;#c=[];#l=[];#u=new Set;#d=new Set;#f=new Map;#p=new Set;is_fork=!1;#m=!1;constructor(){Pt===null?Pt=this:(Pt.#n=this,this.#t=Pt),Pt=this}#h(){if(this.is_fork)return!0;for(let n of this.#o.keys()){for(var e=n,t=!1;e.parent!==null;){if(this.#f.has(e)){t=!0;break}e=e.parent}if(!t)return!0}return!1}skip_effect(e){this.#f.has(e)||this.#f.set(e,{d:[],m:[]}),this.#p.delete(e)}unskip_effect(e,t=e=>this.schedule(e)){var n=this.#f.get(e);if(n){this.#f.delete(e);for(var r of n.d)at(r,y),t(r);for(r of n.m)at(r,b),t(r)}this.#p.add(e)}#g(){this.#e=!0,Ut++>1e3&&(this.#x(),qt());for(let e of this.#u)this.#d.delete(e),at(e,y),this.schedule(e);for(let e of this.#d)at(e,b),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Vt=[],r=[],i=Ht=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw en(e),this.#h()||this.discard(),t}if(Ft=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Vt=null,Ht=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)$t(e,t);i.length>0&&Ft.#g();return}let o=this.#v();if(o){this.#b(r),this.#b(n),o.#y(this);return}this.#u.clear(),this.#d.clear();for(let e of this.#r)e(this);this.#r.clear(),It=this,Yt(r),Yt(n),It=null,this.#s?.resolve();var s=Ft;if(this.#a===0&&(this.#c.length===0||s!==null)&&this.#x(),this.#c.length>0)if(s!==null){let e=s;e.#c.push(...this.#c.filter(t=>!e.#c.includes(t)))}else s=this;s!==null&&s.#g()}#_(e,t,n){e.f^=v;for(var r=e.first;r!==null;){var i=r.f,a=(i&96)!=0;if(!(a&&i&1024||i&8192||this.#f.has(r))&&r.fn!==null){a?r.f^=v:i&4?t.push(r):_r(r)&&(i&16&&this.#d.add(r),Sr(r));var o=r.first;if(o!==null){r=o;continue}}for(;r!==null;){var s=r.next;if(s!==null){r=s;break}r=r.parent}}}#v(){for(var e=this.#t;e!==null;){if(!e.is_fork){for(let[t,[,n]]of this.current)if(e.current.has(t)&&!n)return e}e=e.#t}return null}#y(e){for(let[t,n]of e.current)!this.previous.has(t)&&e.previous.has(t)&&this.previous.set(t,e.previous.get(t)),this.current.set(t,n);for(let[t,n]of e.async_deriveds){let e=this.async_deriveds.get(t);e&&n.promise.then(e.resolve).catch(e.reject)}e.async_deriveds.clear(),this.transfer_effects(e.#u,e.#d);let t=e=>{var n=e.reactions;if(n!==null&&!(e.f&2&&!(e.f&6144)))for(let e of n){var r=e.f;if(r&2)t(e);else{var i=e;r&4194320&&!this.async_deriveds.has(i)&&(this.#d.delete(i),at(i,y),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#x(),Ft=this,this.#g()}#b(e){for(var t=0;t{this.#m=!1,this.linked&&this.flush()}))}transfer_effects(e,t){for(let t of e)this.#u.add(t);for(let e of t)this.#d.add(e);e.clear(),t.clear()}oncommit(e){this.#r.add(e)}ondiscard(e){this.#i.add(e)}settled(){return(this.#s??=m()).promise}static ensure(){if(Ft===null){let t=Ft=new e;!Bt&&!zt&&et(()=>{t.#e||t.flush()})}return Ft}apply(){Lt=null}schedule(e){if(Rt=e,e.b?.is_pending&&e.f&16777228&&!(e.f&32768)){e.b.defer_effect(e);return}for(var t=e;t.parent!==null;){t=t.parent;var n=t.f;if(Vt!==null&&t===ir&&(tr===null||!(tr.f&2)))return;if(n&96){if(!(n&1024))return;t.f^=v}}this.#c.push(t)}#x(){if(this.linked){var e=this.#t,t=this.#n;e===null||(e.#n=t),t===null?Pt=e:t.#t=e,this.linked=!1}}};function Kt(e){var t=zt;zt=!0;try{var n;for(e&&(Ft!==null&&!Ft.is_fork&&Ft.flush(),n=e());;){if(tt(),Ft===null)return n;Ft.flush()}}finally{zt=t}}function qt(){try{Ce()}catch(e){rt(e,Rt)}}var Jt=null;function Yt(e){var t=e.length;if(t!==0){for(var n=0;n0)){nn.clear();for(let e of Jt){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)Jt.has(n)&&(Jt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||Sr(n)}}Jt.clear()}}Jt=null}}function Xt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(let i of e.reactions){let e=i.f;e&2?Xt(i,t,n,r):e&4194320&&!(e&2048)&&Zt(i,t,r)&&(at(i,y),Qt(i))}}function Zt(e,t,r){let i=r.get(e);if(i!==void 0)return i;if(e.deps!==null)for(let i of e.deps){if(n.call(t,i))return!0;if(i.f&2&&Zt(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function Qt(e){Ft.schedule(e)}function $t(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),at(e,v);for(var n=e.first;n!==null;)$t(n,t),n=n.next}}function en(e){at(e,v);for(var t=e.first;t!==null;)en(t),t=t.next}var tn=new Set,nn=new Map,rn=!1;function an(e,t){return{f:0,v:e,reactions:null,equals:Ke,rv:0,wv:0}}function k(e,t){let n=an(e,t);return sr(n),n}function on(e,t=!1,n=!0){let r=an(e);return t||(r.equals=Je),r}function A(e,t,n=!1){return tr!==null&&(!nr||tr.f&131072)&&Ze()&&tr.f&4325394&&(or===null||!or.has(e))&&De(),sn(e,n?j(t):t,Ht)}function sn(e,t,n=null){if(!e.equals(t)){nn.set(e,$n?t:e.v);var r=Gt.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&At(t),Lt===null&&ot(t)}e.wv=gr(),un(e,y,n),Ze()&&ir!==null&&ir.f&1024&&!(ir.f&96)&&(ur===null?dr([e]):ur.push(e)),!r.is_fork&&tn.size>0&&!rn&&cn()}return t}function cn(){rn=!1;for(let e of tn){e.f&1024&&at(e,b);let t;try{t=_r(e)}catch{t=!0}t&&Sr(e)}tn.clear()}function ln(e){A(e,e.v+1)}function un(e,t,n){var r=e.reactions;if(r!==null)for(var i=Ze(),a=r.length,o=0;o{if(mr===d)return e();var t=tr,n=mr;rr(null),hr(d);var r=e();return rr(t),hr(n),r};return i&&r.set(`length`,k(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&Te();var i=r.get(t);return i===void 0?f(()=>{var e=k(n.value,u);return r.set(t,e),e}):A(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>k(Ae,u));r.set(t,e),ln(o)}}else A(n,Ae),ln(o);return!0},get(e,n,i){if(n===ce)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>k(j(s?e[n]:Ae),u)),r.set(n,o)),o!==void 0){var c=I(o);return c===Ae?void 0:c}return Reflect.get(e,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&`value`in n){var i=r.get(t);i&&(n.value=I(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==Ae)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===ce)return!0;var n=r.get(t),i=n!==void 0&&n.v!==Ae||Reflect.has(e,t);return(n!==void 0||ir!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>k(i?j(e[t]):Ae,u)),r.set(t,n)),I(n)===Ae)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;dk(Ae,u)),r.set(d+``,p)):A(p,Ae)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>k(void 0,u)),A(c,j(n)),r.set(t,c));else{l=c.v!==Ae;var m=f(()=>j(n));A(c,m)}var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(s,n),!l){if(i&&typeof t==`string`){var g=r.get(`length`),_=Number(t);Number.isInteger(_)&&_>=g.v&&A(g,_+1)}ln(o)}return!0},ownKeys(e){I(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==Ae});for(var[n,i]of r)i.v!==Ae&&!(n in e)&&t.push(n);return t},setPrototypeOf(){Ee()}})}function dn(e){try{if(typeof e==`object`&&e&&ce in e)return e[ce]}catch{}return e}function fn(e,t){return Object.is(dn(e),dn(t))}var pn,mn,hn,gn;function _n(){if(pn===void 0){pn=window,mn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;hn=a(t,`firstChild`).get,gn=a(t,`nextSibling`).get,u(e)&&(e[fe]=void 0,e[de]=null,e[pe]=void 0,e.__e=void 0),u(n)&&(n[me]=void 0)}}function vn(e=``){return document.createTextNode(e)}function yn(e){return hn.call(e)}function bn(e){return gn.call(e)}function M(e,t){if(!Re)return yn(e);var n=yn(Be);if(n===null)n=Be.appendChild(vn());else if(t&&n.nodeType!==3){var r=vn();return n?.before(r),Ve(r),r}return t&&wn(n),Ve(n),n}function N(e,t=!1){if(!Re){var n=yn(e);return n instanceof Comment&&n.data===``?bn(n):n}if(t){if(Be?.nodeType!==3){var r=vn();return Be?.before(r),Ve(r),r}wn(Be)}return Be}function P(e,t=1,n=!1){let r=Re?Be:e;for(var i;t--;)i=r,r=bn(r);if(!Re)return r;if(n){if(r?.nodeType!==3){var a=vn();return r===null?i?.after(a):r.before(a),Ve(a),a}wn(r)}return Ve(r),r}function xn(e){e.textContent=``}function Sn(){return!1}function Cn(e,t,n){return t==null||t===`http://www.w3.org/1999/xhtml`?n?document.createElement(e,{is:n}):document.createElement(e):n?document.createElementNS(t,e,{is:n}):document.createElementNS(t,e)}function wn(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===3;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function Tn(e){ir===null&&(tr===null&&Se(e),xe()),$n&&be(e)}function En(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function Dn(e,t){var n=ir;n!==null&&n.f&8192&&(e|=x);var r={ctx:Ye,deps:null,nodes:null,f:e|y|512,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};Ft?.register_created_effect(r);var i=r;if(e&4)Vt===null?Gt.ensure().schedule(r):Vt.push(r);else if(t!==null){try{Sr(r)}catch(e){throw Un(r),e}i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&!(i.f&524288)&&(i=i.first,e&16&&e&65536&&i!==null&&(i.f|=ee))}if(i!==null&&(i.parent=n,n!==null&&En(i,n),tr!==null&&tr.f&2&&!(e&64))){var a=tr;(a.effects??=[]).push(i)}return r}function On(){return tr!==null&&!nr}function kn(e){let t=Dn(8,null);return at(t,v),t.teardown=e,t}function An(e){Tn(`$effect`);var t=ir.f;if(!tr&&t&32&&Ye!==null&&!Ye.i){var n=Ye;(n.e??=[]).push(e)}else return jn(e)}function jn(e){return Dn(4|ne,e)}function Mn(e){Gt.ensure();let t=Dn(64|te,e);return()=>{Un(t)}}function Nn(e){Gt.ensure();let t=Dn(64|te,e);return(e={})=>new Promise(n=>{e.outro?Kn(t,()=>{Un(t),n(void 0)}):(Un(t),n(void 0))})}function Pn(e){return Dn(4,e)}function Fn(e){return Dn(oe|te,e)}function In(e,t=0){return Dn(8|t,e)}function F(e,t=[],n=[],r=[]){xt(r,t,n,t=>{Dn(8,()=>{e(...t.map(I))})})}function Ln(e,t=0){return Dn(16|t,e)}function Rn(e,t=0){return Dn(_|t,e)}function zn(e){return Dn(32|te,e)}function Bn(e){var t=e.teardown;if(t!==null){let e=$n,n=tr;er(!0),rr(null);try{t.call(null)}finally{er(e),rr(n)}}}function Vn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&ht(()=>{e.abort(ge)});var r=n.next;n.f&64?n.parent=null:Un(n,t),n=r}}function Hn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||Un(t),t=n}}function Un(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Wn(e.nodes.start,e.nodes.end),n=!0),e.f|=w,Vn(e,t&&!n),xr(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();Bn(e),e.f^=w,e.f|=S;var i=e.parent;i!==null&&i.first!==null&&Gn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Wn(e,t){for(;e!==null;){var n=e===t?null:bn(e);e.remove(),e=n}}function Gn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Kn(e,t,n=!0){var r=[];qn(e,r,!0);var i=()=>{n&&Un(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function qn(e,t,n){if(!(e.f&8192)){e.f^=x;var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;i!==null;){var a=i.next;if(!(i.f&64)){var o=(i.f&65536)!=0||(i.f&32)!=0&&(e.f&16)!=0;qn(i,t,o?n:!1)}i=a}}}function Jn(e){Yn(e,!0)}function Yn(e,t){if(e.f&8192){e.f^=x,e.f&1024||(at(e,y),Gt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;Yn(n,i?t:!1),n=r}var a=e.nodes&&e.nodes.t;if(a!==null)for(let e of a)(e.is_global||t)&&e.in()}}function Xn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:bn(n);t.append(n),n=i}}var Zn=null,Qn=!1,$n=!1;function er(e){$n=e}var tr=null,nr=!1;function rr(e){tr=e}var ir=null;function ar(e){ir=e}var or=null;function sr(e){tr!==null&&(or??=new Set).add(e)}var cr=null,lr=0,ur=null;function dr(e){ur=e}var fr=1,pr=0,mr=pr;function hr(e){mr=e}function gr(){return++fr}function _r(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~ie),t&4096){for(var n=e.deps,r=n.length,i=0;ie.wv)return!0}t&512&&Lt===null&&at(e,v)}return!1}function vr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(or!==null&&or.has(e)))for(var i=0;i{e.ac.abort(ge)}),e.ac=null);try{e.f|=ae;var u=e.fn,d=u();e.f|=C;var f=e.deps,p=Ft?.is_fork;if(cr!==null){var m;if(p||xr(e,lr),f!==null&&lr>0)for(f.length=lr+cr.length,m=0;m{s.ac.abort(ge),s.ac=null,at(s,y)}),Mt(s),xr(s,0)}}function xr(e,t){var n=e.deps;if(n!==null)for(var r=t;rn?.call(this,e))}return e.startsWith(`pointer`)||e.startsWith(`touch`)||e===`wheel`?et(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Vr(e,t,n,r,i){var a={capture:r,passive:i},o=Br(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&kn(()=>{t.removeEventListener(e,o,a)})}function L(e,t,n){(t[Lr]??={})[e]=n}function Hr(e){for(var t=0;t{throw e});throw p}}finally{e[Lr]=t,delete e.currentTarget,rr(d),ar(f)}}}var Gr=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function Kr(e){return Gr?.createHTML(e)??e}function qr(e){var t=Cn(`template`);return t.innerHTML=Kr(e.replaceAll(``,``)),t.content}function Jr(e,t){var n=ir;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function R(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(``);return()=>{if(Re)return Jr(Be,null),Be;i===void 0&&(i=qr(a?e:``+e),n||(i=yn(i)));var t=r||mn?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=yn(t),s=t.lastChild;Jr(o,s)}else Jr(t,t);return t}}function Yr(e,t,n=`svg`){var r=!e.startsWith(``),i=(t&1)!=0,a=`<${n}>${r?e:``+e}`,o;return()=>{if(Re)return Jr(Be,null),Be;if(!o){var e=yn(qr(a));if(i)for(o=document.createDocumentFragment();yn(e);)o.appendChild(yn(e));else o=yn(e)}var t=o.cloneNode(!0);if(i){var n=yn(t),r=t.lastChild;Jr(n,r)}else Jr(t,t);return t}}function Xr(e,t){return Yr(e,t,`svg`)}function Zr(e=``){if(!Re){var t=vn(e+``);return Jr(t,t),t}var n=Be;return n.nodeType===3?wn(n):(n.before(n=vn()),Ve(n)),Jr(n,n),n}function Qr(){if(Re)return Jr(Be,null),Be;var e=document.createDocumentFragment(),t=document.createComment(``),n=vn();return e.append(t,n),Jr(t,n),e}function z(e,t){if(Re){var n=ir;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=Be),He();return}e!==null&&e.before(t)}var $r=!0;function ei(e){$r=e}function B(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[me]??=e.nodeValue)&&(e[me]=n,e.nodeValue=`${n}`)}function ti(e,t){return ri(e,t)}var ni=new Map;function ri(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){_n();var l=void 0,u=Nn(()=>{var u=n??t.appendChild(vn());yt(u,{pending:()=>{}},t=>{E({});var n=Ye;if(o&&(n.c=o),a&&(i.$$events=a),Re&&Jr(t,null),$r=s,l=e(t,i)||{},$r=!0,Re&&(ir.nodes.end=Be,Be===null||Be.nodeType!==8||Be.data!==`]`))throw Fe(),ke;D()},c);var d=new Set,f=e=>{for(var n=0;n{for(var e of d)for(let n of[t,document]){var r=ni.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,Wr),r.delete(e),r.size===0&&ni.delete(n)):r.set(e,i)}zr.delete(f),u!==n&&u.parentNode?.removeChild(u)}});return ii.set(l,u),l}var ii=new WeakMap,ai=class{anchor;#e=new Map;#t=new Map;#n=new Map;#r=new Set;#i=!0;constructor(e,t=!0){this.anchor=e,this.#i=t}#a=e=>{if(this.#e.has(e)){var t=this.#e.get(e),n=this.#t.get(t);if(n)Jn(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(Jn(r.effect),this.#t.set(t,r.effect),this.#n.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(let[t,n]of this.#e){if(this.#e.delete(t),t===e)break;let r=this.#n.get(n);r&&(Un(r.effect),this.#n.delete(n))}for(let[e,r]of this.#t){if(e===t||this.#r.has(e))continue;let i=()=>{if(Array.from(this.#e.values()).includes(e)){var t=document.createDocumentFragment();Xn(r,t),t.append(vn()),this.#n.set(e,{effect:r,fragment:t})}else Un(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),Kn(r,i,!1)):i()}}};#o=e=>{this.#e.delete(e);let t=Array.from(this.#e.values());for(let[e,n]of this.#n)t.includes(e)||(Un(n.effect),this.#n.delete(e))};ensure(e,t){var n=Ft,r=Sn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=vn();i.append(a),this.#n.set(e,{effect:zn(()=>t(a)),fragment:i})}else this.#t.set(e,zn(()=>t(this.anchor)));if(this.#e.set(n,e),r){for(let[t,r]of this.#t)t===e?n.unskip_effect(r):n.skip_effect(r);for(let[t,r]of this.#n)t===e?n.unskip_effect(r.effect):n.skip_effect(r.effect);n.oncommit(this.#a),n.ondiscard(this.#o)}else Re&&(this.anchor=Be),this.#a(n)}};function V(e,t,n=!1){var r;Re&&(r=Be,He());var i=new ai(e),a=n?ee:0;function o(e,t){if(Re){var n=Ge(r);if(e!==parseInt(n.substring(1))){var a=We();Ve(a),i.anchor=a,ze(!1),i.ensure(e,t),ze(!0);return}}i.ensure(e,t)}Ln(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}function oi(e,t){return t}function si(e,t,n){for(var i=[],a=t.length,o,s=t.length,c=0;c{if(o){if(o.pending.delete(n),o.done.add(n),o.pending.size===0){var t=e.outrogroups;ci(e,r(o.done)),t.delete(o),t.size===0&&(e.outrogroups=null)}}else--s},!1)}if(s===0){var l=i.length===0&&n!==null;if(l){var u=n,d=u.parentNode;xn(d),d.append(u),e.items.clear()}ci(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function ci(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(let t of e.pending.values())for(let n of t)r.add(e.items.get(n).e)}for(var i=0;i{var t=i();return e(t)?t:t==null?[]:r(t)}),p,m=new Map,h=!0;function g(e){v.effect.f&16384||(v.pending.delete(e),v.fallback=d,di(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=re,pi(d,null,c)):Jn(d):Kn(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:Ln(()=>{p=I(f);var e=p.length;let t=!1;Re&&Ge(c)===`[!`!=(e===0)&&(c=We(),Ve(c),ze(!1),t=!0);for(var r=new Set,u=Ft,v=Sn(),y=0;ys(c)):(d=zn(()=>s(li??=vn())),d.f|=re)),e>r.size&&ye(``,``,``),Re&&e>0&&Ve(We()),!h)if(m.set(u,r),v){for(let[e,t]of l)r.has(e)||u.skip_effect(t.e);u.oncommit(g),u.ondiscard(_)}else g(u);t&&ze(!0),I(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,Re&&(c=Be)}function ui(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function di(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=ui(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v0){var te=i&4&&s===0?n:null;if(o){for(v=0;v{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function fi(e,t,n,r,i,a,o,s){var c=o&1?o&16?an(n):on(n,!1,!1):null,l=o&2?an(i):null;return{v:c,i:l,e:zn(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function pi(e,t,n){if(e.nodes)for(var r=e.nodes.start,i=e.nodes.end,a=t&&!(t.f&33554432)?t.nodes.start:n;r!==null;){var o=bn(r);if(a.before(r),r===i)return;r=o}}function mi(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function hi(e,t,n=!1,r=!1,i=!1,a=!1){var o=e,s=``;if(n){var c=e;Re&&(o=Ve(yn(c)))}F(()=>{var e=ir;if(s===(s=t()??``)){Re&&He();return}if(n&&!Re){e.nodes=null,c.innerHTML=s,s!==``&&Jr(yn(c),c.lastChild);return}if(e.nodes!==null&&(Wn(e.nodes.start,e.nodes.end),e.nodes=null),s!==``){if(Re){for(var a=Be.data,l=He(),u=l;l!==null&&(l.nodeType!==8||l.data!==``);)u=l,l=bn(l);if(l===null)throw Fe(),ke;Jr(Be,u),o=Ve(l);return}var d=Cn(r?`svg`:i?`math`:`template`,r?Me:i?Ne:void 0);d.innerHTML=s;var f=r||i?d:d.content;if(Jr(yn(f),f.lastChild),r||i)for(;yn(f);)o.before(yn(f));else o.before(f)}})}function gi(e,t,...n){var r=new ai(e);Ln(()=>{let e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},ee)}function _i(e,t,n){var r;Re&&(r=Be,He());var i=new ai(e);Ln(()=>{var e=t()??null;if(Re&&Ge(r)===`[`!=(e!==null)){var a=We();Ve(a),i.anchor=a,ze(!1),i.ensure(e,e&&(t=>n(t,e))),ze(!0);return}i.ensure(e,e&&(t=>n(t,e)))},ee)}var vi=()=>performance.now(),yi={tick:e=>requestAnimationFrame(e),now:()=>vi(),tasks:new Set};function bi(){let e=yi.now();yi.tasks.forEach(t=>{t.c(e)||(yi.tasks.delete(t),t.f())}),yi.tasks.size!==0&&yi.tick(bi)}function xi(e){let t;return yi.tasks.size===0&&yi.tick(bi),{promise:new Promise(n=>{yi.tasks.add(t={c:e,f:n})}),abort(){yi.tasks.delete(t)}}}function Si(e,t){ht(()=>{e.dispatchEvent(new CustomEvent(t))})}function Ci(e){if(e===`float`)return`cssFloat`;if(e===`offset`)return`cssOffset`;if(e.startsWith(`--`))return e;let t=e.split(`-`);return t.length===1?t[0]:t[0]+t.slice(1).map(e=>e[0].toUpperCase()+e.slice(1)).join(``)}function wi(e){let t={},n=e.split(`;`);for(let e of n){let[n,r]=e.split(`:`);if(!n||r===void 0)break;let i=Ci(n.trim());t[i]=r.trim()}return t}var Ti=e=>e,Ei=null;function Di(e){Ei=e}function Oi(e,t,n){var r=(Ei??ir).nodes,i,a,o,s=null;r.a??={element:e,measure(){i=this.element.getBoundingClientRect()},apply(){if(o?.abort(),a=this.element.getBoundingClientRect(),i.left!==a.left||i.right!==a.right||i.top!==a.top||i.bottom!==a.bottom){let e=t()(this.element,{from:i,to:a},n?.());o=Ai(this.element,e,void 0,1,()=>{},()=>{o?.abort(),o=void 0})}},fix(){if(!e.getAnimations().length){var{position:t,width:n,height:r}=getComputedStyle(e);if(t!==`absolute`&&t!==`fixed`){var a=e.style;s={position:a.position,width:a.width,height:a.height,transform:a.transform},a.position=`absolute`,a.width=n,a.height=r;var o=e.getBoundingClientRect();if(i.left!==o.left||i.top!==o.top){var c=`translate(${i.left-o.left}px, ${i.top-o.top}px)`;a.transform=a.transform?`${a.transform} ${c}`:c}}}},unfix(){if(s){var t=e.style;t.position=s.position,t.width=s.width,t.height=s.height,t.transform=s.transform}}},r.a.element=e}function ki(e,t,n,r){var i=(e&1)!=0,a=(e&2)!=0,o=i&&a,s=(e&4)!=0,c=o?`both`:i?`in`:`out`,l,u=t.inert,d=t.style.overflow,f,p;function m(){return ht(()=>l??=n()(t,r?.()??{},{direction:c}))}var h={is_global:s,in(){if(t.inert=u,!i){p?.abort(),p?.reset?.();return}a||f?.abort(),f=Ai(t,m(),p,1,()=>{Si(t,`introstart`)},()=>{Si(t,`introend`),f?.abort(),f=l=void 0,t.style.overflow=d})},out(e){if(!a){e?.(),l=void 0;return}t.inert=!0,p=Ai(t,m(),f,0,()=>{Si(t,`outrostart`)},()=>{Si(t,`outroend`),e?.()})},stop:()=>{f?.abort(),p?.abort()}},g=ir;if((g.nodes.t??=[]).push(h),i&&$r){var _=s;if(!_){for(var v=g.parent;v&&v.f&65536;)for(;(v=v.parent)&&!(v.f&16););_=!v||(v.f&32768)!=0}_&&Pn(()=>{Er(()=>h.in())})}}function Ai(e,t,n,r,i,a){var o=r===1;if(d(t)){var s,c=!1;return et(()=>{c||(s=Ai(e,t({direction:o?`in`:`out`}),n,r,i,a))}),{abort:()=>{c=!0,s?.abort()},deactivate:()=>s.deactivate(),reset:()=>s.reset(),t:()=>s.t()}}if(n?.deactivate(),!t?.duration&&!t?.delay)return i(),a(),{abort:f,deactivate:f,reset:f,t:()=>r};let{delay:l=0,css:u,tick:p,easing:m=Ti}=t;var h=[];if(o&&n===void 0&&(p&&p(0,1),u)){var g=wi(u(0,1));h.push(g,g)}var _=()=>1-r,v=e.animate(h,{duration:l,fill:`forwards`});return v.onfinish=()=>{v.cancel(),i();var o=n?.t()??1-r;n?.abort();var s=r-o,c=t.duration*Math.abs(s),l=[];if(c>0){var d=!1;if(u)for(var f=Math.ceil(c/(1e3/60)),h=0;h<=f;h+=1){var g=o+s*m(h/f),y=wi(u(g,1-g));l.push(y),d||=y.overflow===`hidden`}d&&(e.style.overflow=`hidden`),_=()=>{var e=v.currentTime;return o+s*m(e/c)},p&&xi(()=>{if(v.playState!==`running`)return!1;var e=_();return p(e,1-e),!0})}v=e.animate(l,{duration:c,fill:`forwards`}),v.onfinish=()=>{_=()=>r,p?.(r,1-r),a()}},{abort:()=>{v&&(v.cancel(),v.effect=null,v.onfinish=f)},deactivate:()=>{a=f},reset:()=>{r===0&&p?.(1,0)},t:()=>_()}}function ji(e,t,n,r,i,a){let o=Re;Re&&He();var s=null;Re&&Be.nodeType===1&&(s=Be,He());var c=Re?Be:e,l=ir,u=new ai(c,!1);Ln(()=>{let e=t()||null;var a=i?i():n||e===`svg`?Me:void 0;if(e===null){u.ensure(null,null),ei(!0);return}return u.ensure(e,t=>{if(e){if(s=Re?s:Cn(e,a),Jr(s,s),r){var n=null;Re&&Ir(e)&&s.append(n=document.createComment(``));var i=Re?yn(s):s.appendChild(vn());Re&&(i===null?ze(!1):Ve(i)),Di(l),r(s,i),n?.remove(),Di(null)}ir.nodes.end=s,t.before(s)}Re&&Ve(t)}),ei(!0),()=>{e&&ei(!1)}},ee),kn(()=>{ei(!0)}),o&&(ze(!0),Ve(c))}function Mi(e,t){var n=void 0,r;Rn(()=>{n!==(n=t())&&(r&&=(Un(r),null),n&&(r=zn(()=>{Pn(()=>n(e))})))})}function Ni(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`)if(Array.isArray(e)){var i=e.length;for(t=0;t=0;){var s=o+a;(o===0||Ii.includes(r[o-1]))&&(s===r.length||Ii.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Ri(e,t=!1){var n=t?` !important;`:`;`,r=``;for(var i of Object.keys(e)){var a=e[i];a!=null&&a!==``&&(r+=` `+i+`: `+a+n)}return r}function zi(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function Bi(e,t){if(t){var n=``,r,i;if(Array.isArray(t)?(r=t[0],i=t[1]):r=t,e){e=String(e).replaceAll(/\s*\/\*.*?\*\/\s*/g,``).trim();var a=!1,o=0,s=!1,c=[];r&&c.push(...Object.keys(r).map(zi)),i&&c.push(...Object.keys(i).map(zi));var l=0,u=-1;let t=e.length;for(var d=0;d{Ui(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),kn(()=>{t.disconnect()})}function Gi(e,t,n=t){var r=new WeakSet,i=!0;gt(e,`change`,t=>{var i=t?`[selected]`:`:checked`,a;if(e.multiple)a=[].map.call(e.querySelectorAll(i),Ki);else{var o=e.querySelector(i)??e.querySelector(`option:not([disabled])`);a=o&&Ki(o)}n(a),e.__value=a,Ft!==null&&r.add(Ft)}),Pn(()=>{var a=t();if(e===document.activeElement){var o=Ft;if(r.has(o))return}if(Ui(e,a,i),i&&a===void 0){var s=e.querySelector(`:checked`);s!==null&&(a=Ki(s),n(a))}e.__value=a,i=!1}),Wi(e)}function Ki(e){return`__value`in e?e.__value:e.value}var qi=Symbol(`class`),Ji=Symbol(`style`),Yi=Symbol(`is custom element`),Xi=Symbol(`is html`),Zi=_e?`link`:`LINK`,Qi=_e?`input`:`INPUT`,$i=_e?`option`:`OPTION`,ea=_e?`select`:`SELECT`,ta=_e?`progress`:`PROGRESS`;function na(e){if(Re){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;W(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;W(e,`checked`,null),e.checked=r}}};e[he]=n,et(n),mt()}}function ra(e,t){var n=ca(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==ta)||(e.value=t??``)}function ia(e,t){var n=ca(e);n.checked!==(n.checked=t??void 0)&&(e.checked=t)}function aa(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function W(e,t,n,r){var i=ca(e);Re&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Zi)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[ue]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&ua(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function oa(e,t,n,r,i=!1,a=!1){if(Re&&i&&e.nodeName===Qi){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||na(o)}var s=ca(e),c=s[Yi],l=!s[Xi];let u=Re&&c;u&&ze(!1);var d=t||{},f=e.nodeName===$i;for(var p in t)p in n||(n[p]=null);n.class?n.class=Fi(n.class):(r||n[qi])&&(n.class=null),n[Ji]&&(n.style??=null);var m=ua(e);if(e.nodeName===Qi&&`type`in n&&(`value`in n||`__value`in n)){var h=n.type;(h!==d.type||h===void 0&&e.hasAttribute(`type`))&&(d.type=h,W(e,`type`,h,a))}for(let i in n){let o=n[i];if(f&&i===`value`&&o==null){e.value=e.__value=``,d[i]=o;continue}if(i===`class`){U(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[qi],n[qi]),d[i]=o,d[qi]=n[qi];continue}if(i===`style`){Hi(e,o,t?.[Ji],n[Ji]),d[i]=o,d[Ji]=n[Ji];continue}var g=d[i];if(!(o===g&&!(o===void 0&&e.hasAttribute(i)))){d[i]=o;var _=i[0]+i[1];if(_!==`$$`)if(_===`on`){let t={},n=`$$`+i,r=i.slice(2);var v=kr(r);if(Dr(r)&&(r=r.slice(0,-7),t.capture=!0),!v&&g){if(o!=null)continue;e.removeEventListener(r,d[n],t),d[n]=null}if(v)L(r,e,o),Hr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=Br(r,e,a,t)}}else if(i===`style`)W(e,i,o);else if(i===`autofocus`)dt(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))e.value=e.__value=o;else if(i===`selected`&&f)aa(e,o);else{var y=i;l||(y=Mr(y));var b=y===`defaultValue`||y===`defaultChecked`;if(o==null&&!c&&!b)if(s[i]=null,y===`value`||y===`checked`){let n=e,r=t===void 0;if(y===`value`){let e=n.defaultValue;n.removeAttribute(y),n.defaultValue=e,n.value=n.__value=r?e:null}else{let e=n.defaultChecked;n.removeAttribute(y),n.defaultChecked=e,n.checked=r?e:!1}}else e.removeAttribute(i);else b||m.includes(y)&&(c||typeof o!=`string`)?(e[y]=o,y in s&&(s[y]=Ae)):typeof o!=`function`&&W(e,y,o,a)}}}return u&&ze(!0),d}function sa(e,t,n=[],r=[],i=[],a,o=!1,s=!1){xt(i,n,r,n=>{var r=void 0,i={},c=e.nodeName===ea,l=!1;if(Rn(()=>{var u=t(...n.map(I)),d=oa(e,r,u,a,o,s);l&&c&&`value`in u&&Ui(e,u.value);for(let e of Object.getOwnPropertySymbols(i))u[e]||Un(i[e]);for(let t of Object.getOwnPropertySymbols(u)){var f=u[t];t.description===`@attach`&&(!r||f!==r[t])&&(i[t]&&Un(i[t]),i[t]=zn(()=>Mi(e,()=>f))),d[t]=f}r=d}),c){var u=e;Pn(()=>{Ui(u,r.value,!0),Wi(u)})}l=!0})}function ca(e){return e[de]??={[Yi]:e.nodeName.includes(`-`),[Xi]:e.namespaceURI===je}}var la=new Map;function ua(e){var t=e.getAttribute(`is`)||e.nodeName,n=la.get(t);if(n)return n;la.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var s in r=o(i),r)r[s].set&&s!==`innerHTML`&&s!==`textContent`&&s!==`innerText`&&n.push(s);i=l(i)}return n}function da(e,t,n=t){var r=new WeakSet;gt(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=pa(e)?ma(a):a,n(a),Ft!==null&&r.add(Ft),await Cr(),a!==(a=t())){var o=e.selectionStart,s=e.selectionEnd,c=e.value.length;if(e.value=a??``,s!==null){var l=e.value.length;o===s&&s===c&&l>c?(e.selectionStart=l,e.selectionEnd=l):(e.selectionStart=o,e.selectionEnd=Math.min(s,l))}}}),(Re&&e.defaultValue!==e.value||Er(t)==null&&e.value)&&(n(pa(e)?ma(e.value):e.value),Ft!==null&&r.add(Ft)),In(()=>{var n=t();if(e===document.activeElement){var i=Ft;if(r.has(i))return}pa(e)&&n===ma(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function fa(e,t,n=t){gt(e,`change`,t=>{n(t?e.defaultChecked:e.checked)}),(Re&&e.defaultChecked!==e.checked||Er(t)==null)&&n(e.checked),In(()=>{e.checked=!!t()})}function pa(e){var t=e.type;return t===`number`||t===`range`}function ma(e){return e===``?null:+e}function ha(e,t){return e===t||e?.[ce]===t}function ga(e={},t,n,r){var i=Ye.r,a=ir;return Pn(()=>{var o,s;return In(()=>{o=s,s=r?.()||[],Er(()=>{ha(n(...s),e)||(t(e,...s),o&&ha(n(...o),e)&&t(null,...o))})}),()=>{let r=a;for(;r!==i&&r.parent!==null&&r.parent.f&33554432;)r=r.parent;let o=()=>{s&&ha(n(...s),e)&&t(null,...s)},c=r.teardown;r.teardown=()=>{o(),c?.()}}}),e}var _a={get(e,t){if(!e.exclude.has(t))return e.props[t]},set(e,t){return!1},getOwnPropertyDescriptor(e,t){if(!e.exclude.has(t)&&t in e.props)return{enumerable:!0,configurable:!0,value:e.props[t]}},has(e,t){return!e.exclude.has(t)&&t in e.props},ownKeys(e){return Reflect.ownKeys(e.props).filter(t=>!e.exclude.has(t))}};function va(e,t,n){return new Proxy({props:e,exclude:t},_a)}function G(e,t,n,r){var i=!0,o=(n&8)!=0,s=(n&16)!=0,c=r,l=!0,u=void 0,d=()=>s&&i?(u??=Tt(r),I(u)):(l&&(l=!1,c=s?Er(r):r),c);let f;if(o){var p=ce in e||le in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=ut(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&we(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?Tt:Ot)(()=>(v=!1,g()));o&&I(y);var b=ir;return(function(e,t){if(arguments.length>0){let n=t?I(y):i&&o?j(e):e;return A(y,n),v=!0,c!==void 0&&(c=n),e}return $n&&v||b.f&16384?y.v:I(y)})}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var ya=new Set([`$$slots`,`$$events`,`$$legacy`,`icon`,`class`]),ba=Xr(``);function K(e,t){let n=G(t,`icon`,19,()=>[]),r=G(t,`class`,3,``),i=va(t,ya);var a=ba();sa(a,()=>({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`,class:r(),"aria-hidden":`true`,focusable:`false`,...i}));{let e=(t,n=f)=>{var r=Qr();H(N(r),17,n,oi,(t,n)=>{var r=O(()=>g(I(n),3));let i=()=>I(r)[0],a=()=>I(r)[1],o=()=>I(r)[2];var s=Qr();ji(N(s),i,!0,(t,n)=>{sa(t,()=>({xmlns:`http://www.w3.org/2000/svg`,...a()}));var r=Qr(),i=N(r),s=t=>{e(t,o)},c=O(()=>Array.isArray(o()));V(i,e=>{I(c)&&e(s)}),z(n,r)}),z(t,s)}),z(t,r)};e(M(a),n),T(a)}z(e,a)}var xa=Xr(``);function Sa(e){z(e,xa())}function Ca(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function wa(e,t=null){let n=Ca();if(!n)return t;try{return n.getItem(e)??t}catch{return t}}function Ta(e,t){let n=Ca();if(n)try{n.setItem(e,String(t))}catch{}}var Ea=new class{#e=k(`system`);get theme(){return I(this.#e)}set theme(e){A(this.#e,e,!0)}#t=k(0);get tick(){return I(this.#t)}set tick(e){A(this.#t,e,!0)}init(){this.theme=wa(`gomodel_theme`,`system`),this.apply(),window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{this.theme===`system`&&this.tick++})}set(e){this.theme=e,Ta(`gomodel_theme`,e),this.apply(),this.tick++}toggle(){let e=[`light`,`system`,`dark`];this.set(e[(e.indexOf(this.theme)+1)%e.length])}apply(){let e=document.documentElement;this.theme===`system`?e.removeAttribute(`data-theme`):e.setAttribute(`data-theme`,this.theme)}},Da=new class{#e=k(!1);get collapsed(){return I(this.#e)}set collapsed(e){A(this.#e,e,!0)}init(){this.collapsed=wa(`gomodel_sidebar_collapsed`)===`true`}toggle(){this.collapsed=!this.collapsed,Ta(`gomodel_sidebar_collapsed`,this.collapsed)}},Oa=new class{#e=k(j([]));get stack(){return I(this.#e)}set stack(e){A(this.#e,e,!0)}#t=1;opened(){let e=this.#t++;return this.stack=[...this.stack,e],e}closed(e){this.stack=this.stack.filter(t=>t!==e)}isTop(e){return this.stack.length>0&&this.stack[this.stack.length-1]===e}get openCount(){return this.stack.length}get anyOpen(){return this.stack.length>0}},ka=[[`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`}]],Aa=[[`path`,{d:`m12 19-7-7 7-7`}],[`path`,{d:`M19 12H5`}]],ja=[[`path`,{d:`M5 12h14`}],[`path`,{d:`m12 5 7 7-7 7`}]],Ma=[[`path`,{d:`M21 8a2 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.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`}],[`path`,{d:`M12 22V12`}]],Na=[[`rect`,{width:`16`,height:`20`,x:`4`,y:`2`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`6`,y2:`6`}],[`line`,{x1:`16`,x2:`16`,y1:`14`,y2:`18`}],[`path`,{d:`M16 10h.01`}],[`path`,{d:`M12 10h.01`}],[`path`,{d:`M8 10h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M8 18h.01`}]],Pa=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}],[`path`,{d:`M8 14h.01`}],[`path`,{d:`M12 14h.01`}],[`path`,{d:`M16 14h.01`}],[`path`,{d:`M8 18h.01`}],[`path`,{d:`M12 18h.01`}],[`path`,{d:`M16 18h.01`}]],Fa=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}]],Ia=[[`path`,{d:`M13 17V9`}],[`path`,{d:`M18 17V5`}],[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M8 17v-3`}]],La=[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M18 17V9`}],[`path`,{d:`M13 17V5`}],[`path`,{d:`M8 17v-3`}]],Ra=[[`path`,{d:`M20 6 9 17l-5-5`}]],za=[[`path`,{d:`m6 9 6 6 6-6`}]],Ba=[[`path`,{d:`m9 18 6-6-6-6`}]],Va=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`}],[`path`,{d:`m9 11 3 3L22 4`}]],Ha=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m9 12 2 2 4-4`}]],Ua=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`}],[`path`,{d:`M12 18V6`}]],Wa=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 6v6l4 2`}]],Ga=[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`}]],Ka=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 15 21.84`}],[`path`,{d:`M21 5V8`}],[`path`,{d:`M21 12L18 17H22L19 22`}],[`path`,{d:`M3 12A9 3 0 0 0 14.59 14.87`}]],qa=[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`}]],Ja=[[`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`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`}],[`path`,{d:`M10 9H8`}],[`path`,{d:`M16 13H8`}],[`path`,{d:`M16 17H8`}]],Ya=[[`path`,{d:`m12 14 4-4`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`}]],Xa=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}],[`path`,{d:`M12 7v5l4 2`}]],Za=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 16v-4`}],[`path`,{d:`M12 8h.01`}]],Qa=[[`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`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],$a=[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`}]],eo=[[`path`,{d:`M3 5h.01`}],[`path`,{d:`M3 12h.01`}],[`path`,{d:`M3 19h.01`}],[`path`,{d:`M8 5h13`}],[`path`,{d:`M8 12h13`}],[`path`,{d:`M8 19h13`}]],to=[[`circle`,{cx:`12`,cy:`16`,r:`1`}],[`rect`,{x:`3`,y:`10`,width:`18`,height:`12`,rx:`2`}],[`path`,{d:`M7 10V7a5 5 0 0 1 10 0v3`}]],no=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`m21 3-7 7`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M9 21H3v-6`}]],ro=[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`}]],io=[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`}]],ao=[[`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`}],[`path`,{d:`m15 5 4 4`}]],oo=[[`path`,{d:`M12 22v-5`}],[`path`,{d:`M15 8V2`}],[`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`}],[`path`,{d:`M9 8V2`}]],so=[[`path`,{d:`M5 12h14`}],[`path`,{d:`M12 5v14`}]],co=[[`path`,{d:`M12 2v10`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`}]],lo=[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`}],[`path`,{d:`M21 3v5h-5`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`}],[`path`,{d:`M8 16H3v5`}]],uo=[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}],[`path`,{d:`M3 3v5h5`}]],fo=[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`}]],po=[[`path`,{d:`m21 21-4.34-4.34`}],[`circle`,{cx:`11`,cy:`11`,r:`8`}]],mo=[[`path`,{d:`m10.852 14.772-.383.923`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`}],[`path`,{d:`m13.148 9.228.383-.923`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`}],[`path`,{d:`m14.772 10.852.923-.383`}],[`path`,{d:`m14.772 13.148.923.383`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`}],[`path`,{d:`M6 18h.01`}],[`path`,{d:`M6 6h.01`}],[`path`,{d:`m9.228 10.852-.923-.383`}],[`path`,{d:`m9.228 13.148-.923.383`}]],ho=[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`}]],go=[[`path`,{d:`M14 17H5`}],[`path`,{d:`M19 7h-9`}],[`circle`,{cx:`17`,cy:`17`,r:`3`}],[`circle`,{cx:`7`,cy:`7`,r:`3`}]],_o=[[`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`}],[`circle`,{cx:`12`,cy:`12`,r:`3`}]],vo=[[`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`}],[`path`,{d:`m9 12 2 2 4-4`}]],yo=[[`path`,{d:`m2 2 20 20`}],[`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`}],[`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`}]],bo=[[`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`}]],xo=[[`path`,{d:`m18 14 4 4-4 4`}],[`path`,{d:`m18 2 4 4-4 4`}],[`path`,{d:`M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22`}],[`path`,{d:`M2 6h1.972a4 4 0 0 1 3.6 2.2`}],[`path`,{d:`M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45`}]],So=[[`circle`,{cx:`12`,cy:`12`,r:`4`}],[`path`,{d:`M12 2v2`}],[`path`,{d:`M12 20v2`}],[`path`,{d:`m4.93 4.93 1.41 1.41`}],[`path`,{d:`m17.66 17.66 1.41 1.41`}],[`path`,{d:`M2 12h2`}],[`path`,{d:`M20 12h2`}],[`path`,{d:`m6.34 17.66-1.41 1.41`}],[`path`,{d:`m19.07 4.93-1.41 1.41`}]],Co=[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`}]],wo=[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`}],[`circle`,{cx:`12`,cy:`14`,r:`8`}]],To=[[`path`,{d:`M10 11v6`}],[`path`,{d:`M14 11v6`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}],[`path`,{d:`M3 6h18`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}]],Eo=[[`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`}],[`path`,{d:`M12 9v4`}],[`path`,{d:`M12 17h.01`}]],Do=[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`}],[`circle`,{cx:`12`,cy:`7`,r:`4`}]],Oo=[[`path`,{d:`M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1`}],[`path`,{d:`M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4`}]],ko=[[`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`}],[`path`,{d:`m14 7 3 3`}],[`path`,{d:`M5 6v4`}],[`path`,{d:`M19 14v4`}],[`path`,{d:`M10 2v2`}],[`path`,{d:`M7 8H3`}],[`path`,{d:`M21 16h-4`}],[`path`,{d:`M11 3H9`}]],Ao=[[`rect`,{width:`8`,height:`8`,x:`3`,y:`3`,rx:`2`}],[`path`,{d:`M7 11v4a2 2 0 0 0 2 2h4`}],[`rect`,{width:`8`,height:`8`,x:`13`,y:`13`,rx:`2`}]],jo=[[`path`,{d:`M18 6 6 18`}],[`path`,{d:`m6 6 12 12`}]],Mo=R(``),No=R(`
        `,1);function Po(e,t){E(t,!0);let n=G(t,`compact`,3,!1),r=[{value:`light`,icon:So,label:`Light theme`},{value:`system`,icon:ro,label:`System theme`},{value:`dark`,icon:io,label:`Dark theme`}],i=O(()=>r.find(e=>e.value===Ea.theme)||r[1]),a=O(()=>`Change theme (currently `+I(i).label+`)`);var o=No(),s=N(o);let c;H(s,21,()=>r,e=>e.value,(e,t)=>{var n=Mo();let r;K(M(n),{get icon(){return I(t).icon},class:`theme-icon`}),T(n),F(()=>{r=U(n,1,`theme-btn svelte-1keql7b`,null,r,{active:Ea.theme===I(t).value}),W(n,`aria-pressed`,Ea.theme===I(t).value),W(n,`title`,I(t).label),W(n,`aria-label`,I(t).label)}),L(`click`,n,()=>Ea.set(I(t).value)),z(e,n)}),T(s);var l=P(s,2);let u;K(M(l),{get icon(){return I(i).icon},class:`theme-icon`}),T(l),F(()=>{c=U(s,1,`theme-toggle svelte-1keql7b`,null,c,{"is-compact":n()}),u=U(l,1,`theme-toggle-mobile svelte-1keql7b`,null,u,{"is-compact":n()}),W(l,`title`,I(a)),W(l,`aria-label`,I(a))}),L(`click`,l,()=>Ea.toggle()),z(e,o),D()}Hr([`click`]);function Fo(){return typeof window>`u`?`/`:window.GOMODEL_BASE_PATH||`/`}function Io(e){let t=Fo();return!e||e.charAt(0)!==`/`||e.indexOf(`//`)===0||t===`/`||e===t||e.indexOf(t+`/`)===0?e:t+e}function Lo(e){let t=Fo();return t===`/`||!e?e:e===t?`/`:e.indexOf(t+`/`)===0?e.slice(t.length)||`/`:e}function Ro(){return typeof window>`u`?``:window.GOMODEL_VERSION||``}function zo(){return typeof window>`u`?!1:window.GOMODEL_DEMO_MODE===!0}var Bo=[`overview`,`usage`,`budgets`,`rate-limits`,`models`,`workflows`,`audit-logs`,`guardrails`,`mcp-servers`,`providers-config`,`auth-keys`,`settings`];function Vo(e){return e.startsWith(`/admin/static/`)?`/`+e.slice(14).replace(/^\/+/,``):e}function Ho(e){let t=Vo(Lo(e)).replace(/\/$/,``).replace(`/admin/dashboard`,``).replace(/^\//,``).split(`/`),n=t[0];n===`audit`&&(n=`audit-logs`);let r=t[1]||null;return n===`settings`&&r===`guardrails`?{page:`guardrails`,sub:null}:(n=Bo.includes(n)?n:`overview`,{page:n,sub:r})}var Uo=new class{#e=k(`overview`);get page(){return I(this.#e)}set page(e){A(this.#e,e,!0)}#t=k(null);get sub(){return I(this.#t)}set sub(e){A(this.#t,e,!0)}init(){let{page:e,sub:t}=Ho(window.location.pathname);this.page=e,this.sub=t,window.addEventListener(`popstate`,()=>{let{page:e,sub:t}=Ho(window.location.pathname);this.page=e,this.sub=t})}navigate(e,t=null){let n=t?`/`+t:``;history.pushState(null,``,Io(`/admin/dashboard/`+e+n)),this.page=e,this.sub=t}},Wo=`gomodel_api_key`;function Go(e){let t=String(e||``).trim();if(/^Bearer\s*$/i.test(t))return``;let n=t.match(/^Bearer\s+(.+)$/i);return n?n[1].trim():t}var q=new class{#e=k(``);get apiKey(){return I(this.#e)}set apiKey(e){A(this.#e,e,!0)}#t=k(!1);get needsAuth(){return I(this.#t)}set needsAuth(e){A(this.#t,e,!0)}#n=k(!1);get authError(){return I(this.#n)}set authError(e){A(this.#n,e,!0)}#r=k(``);get authErrorMessage(){return I(this.#r)}set authErrorMessage(e){A(this.#r,e,!0)}#i=k(!1);get dialogOpen(){return I(this.#i)}set dialogOpen(e){A(this.#i,e,!0)}#a=k(0);get generation(){return I(this.#a)}set generation(e){A(this.#a,e,!0)}#o=k(0);get refreshTick(){return I(this.#o)}set refreshTick(e){A(this.#o,e,!0)}init(){try{this.apiKey=Go(localStorage.getItem(Wo)||``)}catch{this.apiKey=``}}hasApiKey(){return Go(this.apiKey)!==``}save(){this.apiKey=Go(this.apiKey);try{localStorage.setItem(Wo,this.apiKey)}catch{}}openDialog(){this.dialogOpen=!0}closeDialog(){this.dialogOpen=!1}submit(){let e=Go(this.apiKey);return e?(this.apiKey=e,this.save(),this.generation++,this.authError=!1,this.authErrorMessage=``,this.needsAuth=!1,this.closeDialog(),this.refresh(),!0):(this.apiKey=``,this.authError=!0,this.authErrorMessage=``,this.needsAuth=!0,this.openDialog(),!1)}refresh(){this.refreshTick++}handleUnauthorized(e,t=``){return typeof e==`number`&&e{r[e.type]=e.value}),r.year+`-`+r.month+`-`+r.day}formatTimestampInTimeZone(e,t){if(e==null)return`-`;let n=new Date(e);if(Number.isNaN(n.getTime()))return`-`;let r=ns(`en-CA`,{timeZone:rs(t)?t:Qo,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`}).formatToParts(n),i={};return r.forEach(e=>{i[e.type]=e.value}),i.year+`-`+i.month+`-`+i.day+` `+i.hour+`:`+i.minute+`:`+i.second}formatTimestamp(e){return this.formatTimestampInTimeZone(e,this.effectiveTimezone())}currentDateKey(e){return this.dateKeyInTimeZone(e||new Date,this.effectiveTimezone())}dateKeyToDate(e){return qo(e)}dateToDateKey(e){return Jo(e)}addDaysToDateKey(e,t){return Yo(e,t)}todayDate(){return this.dateKeyToDate(this.currentDateKey())}startOfMonthDate(e){let t=e instanceof Date?e:this.todayDate();return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),1))}timeZoneOffsetLabel(e,t){let n=rs(e)?e:Qo;try{let e=ns(`en-US`,{timeZone:n,hour:`2-digit`,minute:`2-digit`,hourCycle:`h23`,timeZoneName:`longOffset`}).formatToParts(t||new Date).find(e=>e.type===`timeZoneName`);if(!e||!e.value)return`UTC+00:00`;let r=e.value.replace(`GMT`,`UTC`);return r===`UTC`?`UTC+00:00`:r}catch{return`UTC+00:00`}}timeZoneOffsetMinutes(e,t){let n=/^UTC([+-])(\d{2}):(\d{2})$/.exec(this.timeZoneOffsetLabel(e,t));if(!n)return 0;let r=Number(n[2])*60+Number(n[3]);return n[1]===`-`?-r:r}timeZoneOptionLabel(e,t){return e+` (`+this.timeZoneOffsetLabel(e,t)+`)`}detectedTimeZoneLabel(){return this.timeZoneOptionLabel(this.detectedTimezone)}effectiveTimeZoneLabel(){return this.timeZoneOptionLabel(this.effectiveTimezone())}ensureOptions(){if(this.optionsLoaded)return;let e=new Date,t=[];try{typeof Intl.supportedValuesOf==`function`&&(t=Intl.supportedValuesOf(`timeZone`))}catch{t=[]}[Qo,this.detectedTimezone,this.override].forEach(e=>{e&&t.indexOf(e)===-1&&rs(e)&&t.push(e)}),t=t.filter(e=>rs(e)),t.sort((t,n)=>{let r=this.timeZoneOffsetMinutes(t,e)-this.timeZoneOffsetMinutes(n,e);return r===0?t.localeCompare(n):r}),this.options=t.map(t=>({value:t,label:this.timeZoneOptionLabel(t,e)})),this.optionsLoaded=!0}saveOverride(){let e=Ca();if(e)if(this.override&&rs(this.override))try{e.setItem($o,this.override)}catch{}else{try{e.removeItem($o)}catch{}this.override=``}this.optionsLoaded=!1,this.ensureOptions()}clearOverride(){let e=Ca();if(e)try{e.removeItem($o)}catch{}this.override=``}calendarTimeZoneText(){let e=this.override?`manual override`:`auto-detected`;return`Activity grouped by `+this.effectiveTimeZoneLabel()+` (`+e+`)`}};function ss(e,t){let n=e&&typeof e==`object`&&e.error&&e.error.message;return(typeof n==`string`?n.trim():``)||t}function cs(e,t){let n=e&&e.data;if(n&&typeof n==`object`){let e=[n.message,n.error,n.error&&typeof n.error==`object`?n.error.message:null];for(let t of e)if(typeof t==`string`&&t.trim())return t.trim()}return t}function ls(){let e={"Content-Type":`application/json`},t=Go(q.apiKey);return t&&(e.Authorization=`Bearer `+t),e[`X-GoModel-Timezone`]=os.effectiveTimezone(),e}function us(e,t={}){return fetch(Io(e),{...t,headers:{...ls(),...t.headers||{}}})}async function ds(e,t,{label:n=e,parse:r=!0}={}){let i=q.generation,a=await us(e,t);if(a.status===401)return q.handleUnauthorized(i),{ok:!1,stale:ie.trim()).filter(Boolean);return e.length>0?e:gs}cacheVisible(){if(this.flag(`CACHE_ENABLED`)!==``)return this.booleanFlag(`CACHE_ENABLED`,!1);let e=this.flag(`REDIS_URL`),t=this.flag(`SEMANTIC_CACHE_ENABLED`);return e===``&&t===``||this.booleanFlag(`REDIS_URL`,!1)||this.booleanFlag(`SEMANTIC_CACHE_ENABLED`,!1)}auditVisible(){return this.booleanFlag(`LOGGING_ENABLED`,!0)}usageVisible(){return this.booleanFlag(`USAGE_ENABLED`,!0)}budgetsVisible(){return this.booleanFlag(`BUDGETS_ENABLED`,!0)}rateLimitsVisible(){return this.booleanFlag(`RATE_LIMITS_ENABLED`,!0)}guardrailsVisible(){return this.booleanFlag(`GUARDRAILS_ENABLED`,!0)}mcpVisible(){return this.booleanFlag(`MCP_ENABLED`,!0)}liveLogsVisible(){return this.booleanFlag(`DASHBOARD_LIVE_LOGS_ENABLED`,!0)}fetch(){return this.#n||=this.#r().finally(()=>{this.#n=null}),this.#n}async ensureLoaded(){if(this.#n){await this.#n;return}this.loaded||await this.fetch()}async#r(){let e=typeof AbortController==`function`?new AbortController:null,t=e?setTimeout(()=>e.abort(),1e4):null;try{let t=await fs(`/admin/runtime/config`,{label:`dashboard config`,signal:e?e.signal:void 0});if(t.stale)return;if(!t.ok){this.config={},this.loaded=!1;return}let n=t.data,r={};for(let e of hs)n&&typeof n==`object`&&!Array.isArray(n)&&n[e]!==void 0&&n[e]!==null&&(r[e]=String(n[e]).trim());this.config=r,this.loaded=!0}catch(e){console.error(`Failed to fetch dashboard config:`,e),this.config={},this.loaded=!1}finally{t!==null&&clearTimeout(t)}}},vs=[{page:`overview`,label:`Overview`,icon:$a},{page:`providers-config`,label:`Providers`,icon:mo},{page:`models`,label:`Models`,icon:Ma},{page:`audit-logs`,label:`Audit Logs`,icon:Xa},{page:`usage`,label:`Usage`,icon:La},{page:`budgets`,label:`Budgets`,icon:Oo,visible:()=>_s.budgetsVisible()},{page:`rate-limits`,label:`Rate Limits`,icon:Ya,visible:()=>_s.rateLimitsVisible()},{page:`auth-keys`,label:`API Keys`,icon:Qa},{page:`workflows`,label:`Workflows`,icon:Ao},{page:`guardrails`,label:`Guardrails (experimental)`,icon:vo,visible:()=>_s.guardrailsVisible()},{page:`mcp-servers`,label:`MCP Servers`,icon:oo,visible:()=>_s.mcpVisible()},{page:`settings`,label:`Settings`,icon:_o}],ys=R(` `),bs=R(`
        `),xs=R(` `,1);function Ss(e,t){E(t,!0);let n=O(()=>vs.filter(e=>!e.visible||e.visible()));var r=xs(),i=N(r);let a;var o=M(i),s=M(o);Sa(M(s),{}),T(s),Ue(4),T(o);var c=P(o,2);H(c,21,()=>I(n),e=>e.page,(e,t)=>{var n=ys();let r;var i=M(n);K(i,{get icon(){return I(t).icon},class:`nav-icon`});var a=P(i,2),o=M(a,!0);T(a),T(n),F(e=>{W(n,`href`,e),r=U(n,1,`nav-item svelte-1nwtzae`,null,r,{active:Uo.page===I(t).page}),W(n,`title`,I(t).label),B(o,I(t).label)},[()=>Io(`/admin/dashboard/`+I(t).page)]),L(`click`,n,e=>{e.preventDefault(),Uo.navigate(I(t).page)}),z(e,n)}),T(c);var l=P(c,2),u=M(l);Po(u,{get compact(){return Da.collapsed}});var d=P(u,2),f=e=>{var t=bs(),n=M(t),r=M(n);K(r,{get icon(){return to},class:`api-key-open-icon`});var i=P(r,2),a=M(i,!0);T(i),T(n),T(t),F(()=>{W(n,`aria-label`,q.needsAuth?`Enter API key`:`Change API key`),B(a,q.needsAuth?`Enter API key`:`Change API key`)}),L(`click`,n,()=>q.openDialog()),z(e,t)},p=O(()=>q.needsAuth||q.hasApiKey());V(d,e=>{I(p)&&e(f)}),T(l),T(i);var m=P(i,2);let h;F(()=>{a=U(i,1,`sidebar svelte-1nwtzae`,null,a,{"sidebar-collapsed":Da.collapsed}),h=U(m,1,`sidebar-toggle svelte-1nwtzae`,null,h,{collapsed:Da.collapsed}),W(m,`title`,Da.collapsed?`Expand sidebar`:`Collapse sidebar`),W(m,`aria-label`,Da.collapsed?`Expand sidebar`:`Collapse sidebar`),W(m,`aria-expanded`,!Da.collapsed)}),L(`click`,m,()=>Da.toggle()),z(e,r),D()}Hr([`click`]);var Cs=R(``);function ws(e,t){E(t,!0);let n=G(t,`label`,3,`Close`),r=G(t,`class`,3,``),i=G(t,`iconClass`,3,`table-icon-svg`),a=G(t,`disabled`,3,!1),o=G(t,`el`,15,null);var s=Cs();K(M(s),{get icon(){return jo},get class(){return i()}}),T(s),ga(s,e=>o(e),()=>o()),F(()=>{U(s,1,Fi([`dialog-close-btn`,r()]),`svelte-11l1bb5`),W(s,`aria-label`,n()),s.disabled=a()}),L(`click`,s,function(...e){t.onclick?.apply(this,e)}),z(e,s),D()}Hr([`click`]);function Ts(e){return t=>{let n=n=>{t.contains(n.target)||e()},r=t=>{t.key===`Escape`&&e()};return document.addEventListener(`click`,n,!0),window.addEventListener(`keydown`,r),()=>{document.removeEventListener(`click`,n,!0),window.removeEventListener(`keydown`,r)}}}function Es(e=`[data-modal-autofocus]`){return t=>{let n=t.querySelector(e);n&&typeof n.focus==`function`&&n.focus()}}var Ds=R(`
        `,1);function Os(e,t){E(t,!0);let n=G(t,`open`,3,!1),r=G(t,`variant`,3,`editor`),i=G(t,`closeOnBackdrop`,3,!0),a=O(()=>r()===`auth`?`auth-dialog-backdrop`:`editor-modal-backdrop`),o=O(()=>r()===`auth`?`auth-dialog-shell`:`editor-modal-shell`);An(()=>{if(!n())return;let e=Er(()=>Oa.opened()),r=n=>{n.key===`Escape`&&Oa.isTop(e)&&t.onclose?.()};return window.addEventListener(`keydown`,r),()=>{Oa.closed(e),window.removeEventListener(`keydown`,r)}});function s(e){i()&&e.target===e.currentTarget&&t.onclose?.()}var c=Qr(),l=N(c),u=e=>{var n=Ds(),r=N(n),i=P(r,2);gi(M(i),()=>t.children??f),T(i),Mi(i,Es),F(()=>{U(r,1,Fi(I(a)),`svelte-17e0w4c`),U(i,1,Fi(I(o)),`svelte-17e0w4c`)}),L(`click`,i,s),z(e,n)};V(l,e=>{n()&&e(u)}),z(e,c),D()}Hr([`click`]);var ks=R(``),As=R(``);function js(e,t){E(t,!0),Os(e,{get open(){return q.dialogOpen},variant:`auth`,onclose:()=>q.closeDialog(),children:(e,t)=>{var n=As(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a),T(i),ws(P(i,2),{label:`Close authentication dialog`,onclick:()=>q.closeDialog(),class:`auth-dialog-close`,iconClass:``}),T(r);var s=P(r,2),c=M(s),l=M(c);K(l,{get icon(){return to},class:`auth-dialog-input-icon`});var u=P(l,2);na(u),T(c);var d=P(c,2),f=e=>{var t=ks(),n=M(t,!0);T(t),F(()=>B(n,q.authErrorMessage||`Enter a valid API key to continue.`)),z(e,t)};V(d,e=>{q.authError&&e(f)});var p=P(d,4),m=M(p),h=M(m);K(h,{get icon(){return Ra},class:`auth-dialog-submit-icon`});var g=P(h,2),_=M(g,!0);T(g),T(m),T(p),T(s),T(n),F(()=>{B(o,q.needsAuth?`Dashboard locked`:`Change API key`),B(_,q.needsAuth?`Unlock dashboard`:`Save API key`)}),Vr(`submit`,s,e=>{e.preventDefault(),q.submit()}),da(u,()=>q.apiKey,e=>q.apiKey=e),z(e,n)},$$slots:{default:!0}}),D()}function Ms(){return{open:!1,title:``,titleId:`typedConfirmationDialogTitle`,inputId:`typed-confirmation-input`,message:``,requiredText:``,value:``,confirmLabel:`Confirm`,icon:Eo,dialogClass:``,loading:!1,onConfirm:null,onClose:null}}var Ns=new class{#e=k(j(Ms()));get state(){return I(this.#e)}set state(e){A(this.#e,e,!0)}#t=k(``);get error(){return I(this.#t)}set error(e){A(this.#t,e,!0)}open(e){this.error=``,this.state={...Ms(),open:!0,...e||{}}}close(){let e=this.state;typeof e.onClose==`function`&&e.onClose(),this.state=Ms(),this.error=``}ready(){return String(this.state.value||``).trim().toLowerCase()===String(this.state.requiredText||``).trim().toLowerCase()}inputLabel(){return`Type `+String(this.state.requiredText||``).trim()+` to confirm`}async submit(){if(!this.ready()){this.error=this.inputLabel()+`.`;return}if(typeof this.state.onConfirm==`function`){this.state.loading=!0;try{await this.state.onConfirm()}finally{this.state.loading=!1}}}},Ps=R(`

        `),Fs=R(``),Is=R(`

        `);function Ls(e,t){E(t,!0);let n=O(()=>Ns.state);Os(e,{get open(){return I(n).open},variant:`auth`,onclose:()=>Ns.close(),children:(e,t)=>{var r=Is(),i=M(r),a=M(i),o=M(a,!0);T(a),ws(P(a,2),{label:`Close confirmation dialog`,onclick:()=>Ns.close(),class:`auth-dialog-close`,iconClass:``}),T(i);var s=P(i,2),c=M(s),l=e=>{var t=Ps(),r=M(t,!0);T(t),F(()=>B(r,I(n).message)),z(e,t)};V(c,e=>{I(n).message&&e(l)});var u=P(c,2),d=M(u),f=M(d,!0);T(d);var p=P(d,2);na(p),T(u);var m=P(u,2),h=e=>{var t=Fs(),n=M(t,!0);T(t),F(()=>B(n,Ns.error)),z(e,t)};V(m,e=>{Ns.error&&e(h)});var g=P(m,2),_=M(g),v=P(_,2),y=M(v);K(y,{get icon(){return I(n).icon},class:`form-action-icon`});var b=P(y,2),x=M(b,!0);T(b),T(v),T(g),T(s),T(r),F((e,t)=>{U(r,1,`auth-dialog ${I(n).dialogClass??``}`),W(r,`aria-labelledby`,I(n).titleId),W(a,`id`,I(n).titleId),B(o,I(n).title),W(d,`for`,I(n).inputId),B(f,e),W(p,`id`,I(n).inputId),v.disabled=t,B(x,I(n).confirmLabel)},[()=>Ns.inputLabel(),()=>I(n).loading||!Ns.ready()]),Vr(`submit`,s,e=>{e.preventDefault(),Ns.submit()}),da(p,()=>Ns.state.value,e=>Ns.state.value=e),L(`click`,_,()=>Ns.close()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var Rs=e=>e;function zs(e){let t=e-1;return t*t*t+1}function Bs(e){let t=typeof e==`string`&&e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return t?[parseFloat(t[1]),t[2]||`px`]:[e,`px`]}function Vs(e,{delay:t=0,duration:n=400,easing:r=Rs}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function Hs(e,{delay:t=0,duration:n=400,easing:r=zs,x:i=0,y:a=0,opacity:o=0}={}){let s=getComputedStyle(e),c=+s.opacity,l=s.transform===`none`?``:s.transform,u=c*(1-o),[d,f]=Bs(i),[p,m]=Bs(a);return{delay:t,duration:n,easing:r,css:(e,t)=>` - transform: ${l} translate(${(1-e)*d}${f}, ${(1-e)*p}${m}); - opacity: ${c-u*t}`}}function Us(e,{delay:t=0,duration:n=400,easing:r=zs,axis:i=`y`}={}){let a=getComputedStyle(e),o=+a.opacity,s=i===`y`?`height`:`width`,c=parseFloat(a[s]),l=i===`y`?[`top`,`bottom`]:[`left`,`right`],u=l.map(e=>`${e[0].toUpperCase()}${e.slice(1)}`),d=parseFloat(a[`padding${u[0]}`]),f=parseFloat(a[`padding${u[1]}`]),p=parseFloat(a[`margin${u[0]}`]),m=parseFloat(a[`margin${u[1]}`]),h=parseFloat(a[`border${u[0]}Width`]),g=parseFloat(a[`border${u[1]}Width`]);return{delay:t,duration:n,easing:r,css:e=>`overflow: hidden;opacity: ${Math.min(e*20,1)*o};${s}: ${e*c}px;padding-${l[0]}: ${e*d}px;padding-${l[1]}: ${e*f}px;margin-${l[0]}: ${e*p}px;margin-${l[1]}: ${e*m}px;border-${l[0]}-width: ${e*h}px;border-${l[1]}-width: ${e*g}px;min-${s}: 0`}}function Ws(e){return--e*e*(2.70158*e+1.70158)+1}function Gs(e){let t=e-1;return t*t*t+1}var Ks=5e3,qs=8e3,Js=new class{#e=k(j([]));get toasts(){return I(this.#e)}set toasts(e){A(this.#e,e,!0)}#t=0;#n=new Map;success(e){this.#r(`success`,e,Ks)}error(e){this.#r(`error`,e,qs)}dismiss(e){let t=this.#n.get(e);t&&(clearTimeout(t),this.#n.delete(e)),this.toasts=this.toasts.filter(t=>t.id!==e)}#r(e,t,n){let r=String(t||``).trim();if(!r)return;let i=this.toasts.find(t=>t.kind===e&&t.text===r);i&&this.dismiss(i.id);let a=++this.#t;this.toasts=[...this.toasts,{id:a,kind:e,text:r}],this.#n.set(a,setTimeout(()=>this.dismiss(a),n))}},Ys=R(`
        `),Xs=R(`
        `);function Zs(e,t){E(t,!0);var n=Xs();H(n,21,()=>Js.toasts,e=>e.id,(e,t)=>{var n=Ys();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2);T(n),F(()=>{r=U(n,1,`flash-toast svelte-1i257xg`,null,r,{"flash-toast-success":I(t).kind===`success`,"flash-toast-error":I(t).kind===`error`}),W(n,`role`,I(t).kind===`error`?`alert`:`status`),W(n,`aria-live`,I(t).kind===`error`?`assertive`:`polite`),B(a,I(t).text)}),L(`click`,o,()=>Js.dismiss(I(t).id)),ki(1,n,()=>Hs,()=>({y:-24,duration:360,easing:Ws})),ki(2,n,()=>Vs,()=>({duration:150})),z(e,n)}),T(n),z(e,n),D()}Hr([`click`]);var Qs=R(``);function $s(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{z(e,Qs())},a=O(()=>zo());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}function ec(e){return String(e||``).split(`,`).map(e=>e.trim()).filter(e=>e)}function tc(e){if(e==null||e===``)return`Not captured`;if(typeof e==`string`){let t=e.trim();if(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`))try{return JSON.stringify(JSON.parse(t),null,2)}catch{return e}return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function nc(e){return e==null||e===void 0?`-`:e.toLocaleString()}function rc(e){if(e==null)return`---`;let t=Number(e);return Number.isFinite(t)?t>0&&t<1e-4?`<$0.0001`:`$`+t.toFixed(4).replace(/(\.\d{2}\d*?)0+$/,`$1`):`---`}function ic(e){return e==null||e===void 0?`—`:`$`+e.toFixed(2)}function ac(e){return e==null||e===void 0?`—`:e<.01?`$`+e.toFixed(6):`$`+e.toFixed(4)}function oc(e){if(e==null||e===``)return`-`;let t=Number(e);if(!Number.isFinite(t))return`-`;let n=Math.abs(t),r=[{threshold:1e9,suffix:`B`},{threshold:1e6,suffix:`M`},{threshold:1e3,suffix:`K`}];for(let e=0;e=i.threshold){let n=t/i.threshold;return Math.abs(Number(n.toFixed(1)))>=1e3&&e>0&&(i=r[e-1],n=t/i.threshold),n.toFixed(1).replace(/\.0$/,``)+i.suffix}}return String(t)}function sc(e,t){let n=t==null||t===``?NaN:Number(t),r=Number.isFinite(n)?nc(n):`-`;return String(e||`Tokens`)+`: `+r}function cc(e){return e?typeof e==`string`?e:e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`):``}function lc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)}function uc(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.getUTCFullYear()+`-`+String(t.getUTCMonth()+1).padStart(2,`0`)+`-`+String(t.getUTCDate()).padStart(2,`0`)+` `+String(t.getUTCHours()).padStart(2,`0`)+`:`+String(t.getUTCMinutes()).padStart(2,`0`)+`:`+String(t.getUTCSeconds()).padStart(2,`0`)+` UTC`}function dc(e){return String(e&&e.provider||``).trim()}function fc(e){return String(e&&e.provider_name||``).trim()||dc(e)}function pc(e,t){let n=String(t||``).trim();if(!n)return`-`;let r=fc(e);return!r||n===r||n.startsWith(r+`/`)?n:r+`/`+n}function mc(e){return pc(e,e&&e.model)}function hc(e){return pc(e,e&&e.resolved_model)}function gc(e){let t=String(e&&(e.requested_model||e.model)||``).trim();if(!e)return t;let n=String(e.data&&e.data.failover&&e.data.failover.target_model||``).trim();if(n&&n!==t)return t+` ⮕ `+n;if(e.alias_used&&e.resolved_model){let n=hc(e);if(n&&n!==`-`&&n!==t)return t+` ⮕ `+n}return t}var _c=`gomodel_date_range`,vc=1;function yc(e){return/^[1-9]\d*$/.test(String(e??``))}var bc=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function xc({selectedPreset:e,startKey:t,endKey:n,followsToday:r}){return e&&yc(e)?{v:vc,mode:`preset`,days:String(e)}:e?null:Xo(t)&&Xo(n)?{v:vc,mode:`custom`,start:t,end:n,follow:r===!0}:null}function Sc(e){let t=e;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return null}return!t||typeof t!=`object`?null:t.mode===`preset`?yc(t.days)?{mode:`preset`,days:String(t.days)}:null:t.mode===`custom`&&Xo(t.start)&&Xo(t.end)&&t.start<=t.end?{mode:`custom`,start:t.start,end:t.end,follow:t.follow===!0}:null}function Cc(e,t,n){let r=Zo(e,t);return r<1||!Xo(n)?{start:e,end:t}:{start:Yo(n,-(r-1)),end:n}}function wc(e,t){if(e===t)return`Today`;let[n,r,i]=e.split(`-`);return bc[Number(r)-1]+` `+Number(i)+`, `+n}function Tc({selectedPreset:e,startKey:t,endKey:n,followsToday:r,todayKey:i}){if(e)return`Last `+e+` days`;if(!Xo(t)||!Xo(n))return``;let a=Zo(t,n);return r||n===i?a===1?`Today`:`Last `+a+` days`:a===1?`1 day`:a+` days`}function Ec({selectedPreset:e,startKey:t,endKey:n,todayKey:r}){if(e)return`Last `+e+` days`;let i=e=>wc(e,r);return Xo(t)&&Xo(n)?t===n?i(t):i(t)+` – `+i(n):Xo(t)?i(t)+` – ...`:`Last 30 days`}var Dc=6e4,Oc=new class{#e=k(j(`30`));get days(){return I(this.#e)}set days(e){A(this.#e,e,!0)}#t=k(j(`30`));get selectedPreset(){return I(this.#t)}set selectedPreset(e){A(this.#t,e,!0)}#n=k(null);get customStartDate(){return I(this.#n)}set customStartDate(e){A(this.#n,e,!0)}#r=k(null);get customEndDate(){return I(this.#r)}set customEndDate(e){A(this.#r,e,!0)}#i=k(!1);get followsToday(){return I(this.#i)}set followsToday(e){A(this.#i,e,!0)}#a=k(`daily`);get interval(){return I(this.#a)}set interval(e){A(this.#a,e,!0)}#o=k(0);get syncTick(){return I(this.#o)}set syncTick(e){A(this.#o,e,!0)}init(){this.restore(),this.syncToToday(),typeof setInterval==`function`&&setInterval(()=>this.syncToToday(),Dc)}queryStr(){return this.customStartDate&&this.customEndDate?`start_date=`+cc(this.customStartDate)+`&end_date=`+cc(this.customEndDate):`days=`+this.days}selectPreset(e){this.selectedPreset=e,this.customStartDate=null,this.customEndDate=null,this.followsToday=!1,this.days=e,this.persist()}selectStart(e){this.selectedPreset=null,this.customStartDate=e,this.customEndDate&&this.customEndDatet.category===e);return t?t.count:0}get filteredModels(){if(!this.filter)return this.models;let e=this.filter.toLowerCase();return this.models.filter(t=>(t.model?.id??``).toLowerCase().includes(e)||(t.provider_name??``).toLowerCase().includes(e)||(t.provider_type??``).toLowerCase().includes(e)||(t.selector??``).toLowerCase().includes(e)||(t.model?.owned_by??``).toLowerCase().includes(e)||(t.model?.metadata?.modes??[]).join(`,`).toLowerCase().includes(e)||(t.model?.metadata?.categories??[]).join(`,`).toLowerCase().includes(e))}},Ac=R(``);function jc(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=Ac(),n=P(M(t),2);T(t),L(`click`,n,()=>q.openDialog()),z(e,t)};V(r,e=>{q.authError&&e(i)}),z(e,n),D()}Hr([`click`]);function Mc(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null}}function Nc(){return{summary:{total_hits:0,exact_hits:0,semantic_hits:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,total_saved_cost:null},daily:[]}}var Pc=new class{#e=k(j(Mc()));get summary(){return I(this.#e)}set summary(e){A(this.#e,e,!0)}#t=k(j([]));get daily(){return I(this.#t)}set daily(e){A(this.#t,e,!0)}#n=k(j(Nc()));get cacheOverview(){return I(this.#n)}set cacheOverview(e){A(this.#n,e,!0)}#r=k(!1);get loading(){return I(this.#r)}set loading(e){A(this.#r,e,!0)}#i=null;#a=null;cacheAnalyticsEnabled(){return _s.cacheVisible()}async fetchUsage(){this.#i&&this.#i.abort();let e=new AbortController;this.#i=e,this.loading=!0;try{let t=Oc.queryStr()+`&interval=`+Oc.interval,[n,r]=await Promise.all([fs(`/admin/usage/summary?`+t,{label:`usage summary`,signal:e.signal}),fs(`/admin/usage/daily?`+t,{label:`usage daily`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.summary=Mc(),this.daily=[],this.cacheOverview=Nc();return}this.summary=n.data||Mc(),this.daily=Array.isArray(r.data)?r.data:[]}catch(e){if(ms(e))return;console.error(`Failed to fetch usage:`,e),this.summary=Mc(),this.daily=[]}finally{this.#i===e&&(this.#i=null,this.loading=!1)}}async fetchCacheOverview(e=``){if(await _s.ensureLoaded(),!this.cacheAnalyticsEnabled()){this.cacheOverview=Nc();return}this.#a&&this.#a.abort();let t=new AbortController;this.#a=t;try{let n=await fs(`/admin/cache/overview?`+(Oc.queryStr()+`&interval=`+Oc.interval+e),{label:`cache overview`,signal:t.signal});if(n.stale||t.signal.aborted)return;if(!n.ok){this.cacheOverview=Nc();return}let r=n.data&&typeof n.data==`object`?n.data:Nc();r.summary||=Nc().summary,Array.isArray(r.daily)||(r.daily=[]),this.cacheOverview=r}catch(e){if(ms(e))return;console.error(`Failed to fetch cache overview:`,e),this.cacheOverview=Nc()}finally{this.#a===t&&(this.#a=null)}}},Fc=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`];function Ic(e,t){let n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return Fc[n.getUTCMonth()]+` `+n.getUTCFullYear()}function Lc(e,t,n){let r=e.getUTCFullYear(),i=e.getUTCMonth()+t,a=new Date(Date.UTC(r,i,1)),o=new Date(Date.UTC(r,i+1,0)),s=(a.getUTCDay()+6)%7,c=[],l=new Date(Date.UTC(r,i,0));for(let e=s-1;e>=0;e--){let t=l.getUTCDate()-e,a=new Date(Date.UTC(r,i-1,t));c.push({day:t,date:a,current:!1,key:`p-`+n(a)})}for(let e=1;e<=o.getUTCDate();e++){let t=new Date(Date.UTC(r,i,e));c.push({day:e,date:t,current:!0,key:`c-`+n(t)})}let u=42-c.length;for(let e=1;e<=u;e++){let t=new Date(Date.UTC(r,i+1,e));c.push({day:e,date:t,current:!1,key:`n-`+n(t)})}return c}function Rc(e,t,n){let r=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return n&&r.getTime()>n.getTime()?e:r}function zc(e,t){return e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()}var Bc=R(``),Vc=R(``),Hc=R(``),Uc=R(`
        MoTuWeThFrSaSu
        `);function Wc(e,t){E(t,!0);let n=G(t,`offset`,3,0),r=O(()=>Lc(t.calendarMonth,n(),e=>os.dateToDateKey(e))),i=O(()=>zc(t.calendarMonth,os.todayDate())),a=e=>os.dateToDateKey(e.date),o=e=>a(e)>os.currentDateKey(),s=e=>e.current&&a(e)===os.currentDateKey();function c(e,t){let n=t===`start`?Oc.rangeStart():Oc.rangeEnd();return e.current&&!!n&&a(e)===os.dateToDateKey(n)}function l(e){let t=Oc.rangeStart(),n=Oc.rangeEnd();return!e.current||!t||!n?!1:a(e)>=os.dateToDateKey(t)&&a(e)<=os.dateToDateKey(n)}var u=Uc(),d=M(u),f=M(d);let p;var m=P(f,2),h=M(m,!0);T(m);var g=P(m,2),_=e=>{z(e,Bc())},v=e=>{var n=Vc();F(()=>n.disabled=I(i)),L(`click`,n,function(...e){t.onnext?.apply(this,e)}),z(e,n)};V(g,e=>{n()===-1?e(_):e(v,-1)}),T(d);var y=P(d,4);H(y,21,()=>I(r),e=>e.key,(e,n)=>{var r=Hc(),i=M(r,!0);T(r),F((e,t)=>{U(r,1,e,`svelte-g7ga4u`),r.disabled=t,B(i,I(n).day)},[()=>Fi([`dp-day`,{"other-month":!I(n).current,today:s(I(n)),"range-start":c(I(n),`start`),"range-end":c(I(n),`end`),"in-range":l(I(n)),disabled:o(I(n))}]),()=>o(I(n))||!I(n).current]),L(`click`,r,()=>t.onselect?.(I(n))),z(e,r)}),T(y),T(u),F(e=>{p=U(f,1,`dp-nav-btn svelte-g7ga4u`,null,p,{"dp-nav-prev-mobile":n()!==-1}),B(h,e)},[()=>Ic(t.calendarMonth,n())]),L(`click`,f,function(...e){t.onprev?.apply(this,e)}),z(e,u),D()}Hr([`click`]);var Gc=R(``),Kc=R(`
        `),qc=Xr(``),Jc=Xr(``),Yc=R(`
        `),Xc=R(`
        `);function Zc(e,t){E(t,!0);let n=[`3`,`7`,`14`,`30`,`90`],r=k(!1),i=k(`start`),a=k(j(new Date)),o=k(j({show:!1,x:0,y:0}));function s(){A(r,!I(r)),I(r)&&(Oc.syncToToday(),A(a,os.startOfMonthDate(Oc.customEndDate||os.todayDate()),!0),A(i,`start`))}function c(){A(r,!1),A(o,{show:!1,x:0,y:0},!0)}let l=Oc.syncTick;An(()=>{let e=Oc.syncTick;e!==l&&(l=e,t.onchange?.())});function u(e){Oc.selectPreset(e),A(i,`start`),t.onchange?.(),c()}let d=()=>A(a,Rc(I(a),-1),!0),f=()=>A(a,Rc(I(a),1,os.startOfMonthDate(os.todayDate())),!0);function p(e){let n=new Date(e.date);if(I(i)===`start`){Oc.selectStart(n),A(i,`end`),t.onchange?.();return}Oc.selectEnd(n),A(i,`start`),t.onchange?.(),c()}var m=Xc(),h=M(m),g=P(M(h),2),_=M(g,!0);T(g);var v=P(g,2);let y;T(h);var b=P(h,2),x=e=>{var t=Kc(),r=M(t);H(r,20,()=>n,e=>e,(e,t)=>{var n=Gc();let r;var i=M(n);T(n),F(()=>{r=U(n,1,`preset-btn svelte-ax7ma4`,null,r,{active:Oc.selectedPreset===t}),B(i,`Last ${t??``} days`)}),L(`click`,n,()=>u(t)),z(e,n)}),T(r);var i=P(r,2);H(i,20,()=>[-1,0],e=>e,(e,t)=>{Wc(e,{get calendarMonth(){return I(a)},get offset(){return t},onprev:d,onnext:f,onselect:p})}),T(i),T(t),L(`mousemove`,i,e=>A(o,{show:!0,x:e.clientX,y:e.clientY},!0)),Vr(`mouseleave`,i,()=>A(o,{show:!1,x:0,y:0},!0)),z(e,t)};V(b,e=>{I(r)&&e(x)});var S=P(b,2),C=e=>{var t=Yc(),n=M(t),r=e=>{z(e,qc())},a=e=>{z(e,Jc())};V(n,e=>{I(i)===`start`?e(r):e(a,-1)});var s=P(n,2),c=M(s,!0);T(s),T(t),F(()=>{Hi(t,`left:${I(o).x??``}px;top:${I(o).y??``}px`),B(c,I(i)===`end`?`Select end date`:`Select start date`)}),z(e,t)};V(S,e=>{I(o).show&&e(C)}),T(m),Mi(m,()=>I(r)?Ts(c):void 0),F((e,t)=>{W(h,`title`,e),B(_,t),y=U(v,0,`date-picker-chevron svelte-ax7ma4`,null,y,{open:I(r)})},[()=>Oc.dateRangeSpanLabel(),()=>Oc.dateRangeLabel()]),L(`click`,h,s),z(e,m),D()}Hr([`click`,`mousemove`]);function Qc(e){return e+.5|0}var $c=(e,t,n)=>Math.max(Math.min(e,n),t);function el(e){return $c(Qc(e*2.55),0,255)}function tl(e){return $c(Qc(e*255),0,255)}function nl(e){return $c(Qc(e/2.55)/100,0,1)}function rl(e){return $c(Qc(e*100),0,100)}var il={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},al=[...`0123456789ABCDEF`],ol=e=>al[e&15],sl=e=>al[(e&240)>>4]+al[e&15],cl=e=>(e&240)>>4==(e&15),ll=e=>cl(e.r)&&cl(e.g)&&cl(e.b)&&cl(e.a);function ul(e){var t=e.length,n;return e[0]===`#`&&(t===4||t===5?n={r:255&il[e[1]]*17,g:255&il[e[2]]*17,b:255&il[e[3]]*17,a:t===5?il[e[4]]*17:255}:(t===7||t===9)&&(n={r:il[e[1]]<<4|il[e[2]],g:il[e[3]]<<4|il[e[4]],b:il[e[5]]<<4|il[e[6]],a:t===9?il[e[7]]<<4|il[e[8]]:255})),n}var dl=(e,t)=>e<255?t(e):``;function fl(e){var t=ll(e)?ol:sl;return e?`#`+t(e.r)+t(e.g)+t(e.b)+dl(e.a,t):void 0}var pl=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function ml(e,t,n){let r=t*Math.min(n,1-n),i=(t,i=(t+e/30)%12)=>n-r*Math.max(Math.min(i-3,9-i,1),-1);return[i(0),i(8),i(4)]}function hl(e,t,n){let r=(r,i=(r+e/60)%6)=>n-n*t*Math.max(Math.min(i,4-i,1),0);return[r(5),r(3),r(1)]}function gl(e,t,n){let r=ml(e,1,.5),i;for(t+n>1&&(i=1/(t+n),t*=i,n*=i),i=0;i<3;i++)r[i]*=1-t-n,r[i]+=t;return r}function _l(e,t,n,r,i){return e===i?(t-n)/r+(t.5?l/(2-i-a):l/(i+a),s=_l(t,n,r,l,i),s=s*60+.5),[s|0,c||0,o]}function yl(e,t,n,r){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,n,r)).map(tl)}function bl(e,t,n){return yl(ml,e,t,n)}function xl(e,t,n){return yl(gl,e,t,n)}function Sl(e,t,n){return yl(hl,e,t,n)}function Cl(e){return(e%360+360)%360}function wl(e){let t=pl.exec(e),n=255,r;if(!t)return;t[5]!==r&&(n=t[6]?el(+t[5]):tl(+t[5]));let i=Cl(+t[2]),a=t[3]/100,o=t[4]/100;return r=t[1]===`hwb`?xl(i,a,o):t[1]===`hsv`?Sl(i,a,o):bl(i,a,o),{r:r[0],g:r[1],b:r[2],a:n}}function Tl(e,t){var n=vl(e);n[0]=Cl(n[0]+t),n=bl(n),e.r=n[0],e.g=n[1],e.b=n[2]}function El(e){if(!e)return;let t=vl(e),n=t[0],r=rl(t[1]),i=rl(t[2]);return e.a<255?`hsla(${n}, ${r}%, ${i}%, ${nl(e.a)})`:`hsl(${n}, ${r}%, ${i}%)`}var Dl={x:`dark`,Z:`light`,Y:`re`,X:`blu`,W:`gr`,V:`medium`,U:`slate`,A:`ee`,T:`ol`,S:`or`,B:`ra`,C:`lateg`,D:`ights`,R:`in`,Q:`turquois`,E:`hi`,P:`ro`,O:`al`,N:`le`,M:`de`,L:`yello`,F:`en`,K:`ch`,G:`arks`,H:`ea`,I:`ightg`,J:`wh`},Ol={OiceXe:`f0f8ff`,antiquewEte:`faebd7`,aqua:`ffff`,aquamarRe:`7fffd4`,azuY:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`0`,blanKedOmond:`ffebcd`,Xe:`ff`,XeviTet:`8a2be2`,bPwn:`a52a2a`,burlywood:`deb887`,caMtXe:`5f9ea0`,KartYuse:`7fff00`,KocTate:`d2691e`,cSO:`ff7f50`,cSnflowerXe:`6495ed`,cSnsilk:`fff8dc`,crimson:`dc143c`,cyan:`ffff`,xXe:`8b`,xcyan:`8b8b`,xgTMnPd:`b8860b`,xWay:`a9a9a9`,xgYF:`6400`,xgYy:`a9a9a9`,xkhaki:`bdb76b`,xmagFta:`8b008b`,xTivegYF:`556b2f`,xSange:`ff8c00`,xScEd:`9932cc`,xYd:`8b0000`,xsOmon:`e9967a`,xsHgYF:`8fbc8f`,xUXe:`483d8b`,xUWay:`2f4f4f`,xUgYy:`2f4f4f`,xQe:`ced1`,xviTet:`9400d3`,dAppRk:`ff1493`,dApskyXe:`bfff`,dimWay:`696969`,dimgYy:`696969`,dodgerXe:`1e90ff`,fiYbrick:`b22222`,flSOwEte:`fffaf0`,foYstWAn:`228b22`,fuKsia:`ff00ff`,gaRsbSo:`dcdcdc`,ghostwEte:`f8f8ff`,gTd:`ffd700`,gTMnPd:`daa520`,Way:`808080`,gYF:`8000`,gYFLw:`adff2f`,gYy:`808080`,honeyMw:`f0fff0`,hotpRk:`ff69b4`,RdianYd:`cd5c5c`,Rdigo:`4b0082`,ivSy:`fffff0`,khaki:`f0e68c`,lavFMr:`e6e6fa`,lavFMrXsh:`fff0f5`,lawngYF:`7cfc00`,NmoncEffon:`fffacd`,ZXe:`add8e6`,ZcSO:`f08080`,Zcyan:`e0ffff`,ZgTMnPdLw:`fafad2`,ZWay:`d3d3d3`,ZgYF:`90ee90`,ZgYy:`d3d3d3`,ZpRk:`ffb6c1`,ZsOmon:`ffa07a`,ZsHgYF:`20b2aa`,ZskyXe:`87cefa`,ZUWay:`778899`,ZUgYy:`778899`,ZstAlXe:`b0c4de`,ZLw:`ffffe0`,lime:`ff00`,limegYF:`32cd32`,lRF:`faf0e6`,magFta:`ff00ff`,maPon:`800000`,VaquamarRe:`66cdaa`,VXe:`cd`,VScEd:`ba55d3`,VpurpN:`9370db`,VsHgYF:`3cb371`,VUXe:`7b68ee`,VsprRggYF:`fa9a`,VQe:`48d1cc`,VviTetYd:`c71585`,midnightXe:`191970`,mRtcYam:`f5fffa`,mistyPse:`ffe4e1`,moccasR:`ffe4b5`,navajowEte:`ffdead`,navy:`80`,Tdlace:`fdf5e6`,Tive:`808000`,TivedBb:`6b8e23`,Sange:`ffa500`,SangeYd:`ff4500`,ScEd:`da70d6`,pOegTMnPd:`eee8aa`,pOegYF:`98fb98`,pOeQe:`afeeee`,pOeviTetYd:`db7093`,papayawEp:`ffefd5`,pHKpuff:`ffdab9`,peru:`cd853f`,pRk:`ffc0cb`,plum:`dda0dd`,powMrXe:`b0e0e6`,purpN:`800080`,YbeccapurpN:`663399`,Yd:`ff0000`,Psybrown:`bc8f8f`,PyOXe:`4169e1`,saddNbPwn:`8b4513`,sOmon:`fa8072`,sandybPwn:`f4a460`,sHgYF:`2e8b57`,sHshell:`fff5ee`,siFna:`a0522d`,silver:`c0c0c0`,skyXe:`87ceeb`,UXe:`6a5acd`,UWay:`708090`,UgYy:`708090`,snow:`fffafa`,sprRggYF:`ff7f`,stAlXe:`4682b4`,tan:`d2b48c`,teO:`8080`,tEstN:`d8bfd8`,tomato:`ff6347`,Qe:`40e0d0`,viTet:`ee82ee`,JHt:`f5deb3`,wEte:`ffffff`,wEtesmoke:`f5f5f5`,Lw:`ffff00`,LwgYF:`9acd32`};function kl(){let e={},t=Object.keys(Ol),n=Object.keys(Dl),r,i,a,o,s;for(r=0;r>16&255,a>>8&255,a&255]}return e}var Al;function jl(e){Al||(Al=kl(),Al.transparent=[0,0,0,0]);let t=Al[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Ml=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Nl(e){let t=Ml.exec(e),n=255,r,i,a;if(t){if(t[7]!==r){let e=+t[7];n=t[8]?el(e):$c(e*255,0,255)}return r=+t[1],i=+t[3],a=+t[5],r=255&(t[2]?el(r):$c(r,0,255)),i=255&(t[4]?el(i):$c(i,0,255)),a=255&(t[6]?el(a):$c(a,0,255)),{r,g:i,b:a,a:n}}}function Pl(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${nl(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`)}var Fl=e=>e<=.0031308?e*12.92:e**(1/2.4)*1.055-.055,Il=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Ll(e,t,n){let r=Il(nl(e.r)),i=Il(nl(e.g)),a=Il(nl(e.b));return{r:tl(Fl(r+n*(Il(nl(t.r))-r))),g:tl(Fl(i+n*(Il(nl(t.g))-i))),b:tl(Fl(a+n*(Il(nl(t.b))-a))),a:e.a+n*(t.a-e.a)}}function Rl(e,t,n){if(e){let r=vl(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*n,t===0?360:1)),r=bl(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function zl(e,t){return e&&Object.assign(t||{},e)}function Bl(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(t={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(t.a=tl(e[3]))):(t=zl(e,{r:0,g:0,b:0,a:1}),t.a=tl(t.a)),t}function Vl(e){return e.charAt(0)===`r`?Nl(e):wl(e)}var Hl=class e{constructor(t){if(t instanceof e)return t;let n=typeof t,r;n===`object`?r=Bl(t):n===`string`&&(r=ul(t)||jl(t)||Vl(t)),this._rgb=r,this._valid=!!r}get valid(){return this._valid}get rgb(){var e=zl(this._rgb);return e&&(e.a=nl(e.a)),e}set rgb(e){this._rgb=Bl(e)}rgbString(){return this._valid?Pl(this._rgb):void 0}hexString(){return this._valid?fl(this._rgb):void 0}hslString(){return this._valid?El(this._rgb):void 0}mix(e,t){if(e){let n=this.rgb,r=e.rgb,i,a=t===i?.5:t,o=2*a-1,s=n.a-r.a,c=((o*s===-1?o:(o+s)/(1+o*s))+1)/2;i=1-c,n.r=255&c*n.r+i*r.r+.5,n.g=255&c*n.g+i*r.g+.5,n.b=255&c*n.b+i*r.b+.5,n.a=a*n.a+(1-a)*r.a,this.rgb=n}return this}interpolate(e,t){return e&&(this._rgb=Ll(this._rgb,e._rgb,t)),this}clone(){return new e(this.rgb)}alpha(e){return this._rgb.a=tl(e),this}clearer(e){let t=this._rgb;return t.a*=1-e,this}greyscale(){let e=this._rgb;return e.r=e.g=e.b=Qc(e.r*.3+e.g*.59+e.b*.11),this}opaquer(e){let t=this._rgb;return t.a*=1+e,this}negate(){let e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Rl(this._rgb,2,e),this}darken(e){return Rl(this._rgb,2,-e),this}saturate(e){return Rl(this._rgb,1,e),this}desaturate(e){return Rl(this._rgb,1,-e),this}rotate(e){return Tl(this._rgb,e),this}};function Ul(){}var Wl=(()=>{let e=0;return()=>e++})();function Gl(e){return e==null}function Kl(e){if(Array.isArray&&Array.isArray(e))return!0;let t=Object.prototype.toString.call(e);return t.slice(0,7)===`[object`&&t.slice(-6)===`Array]`}function ql(e){return e!==null&&Object.prototype.toString.call(e)===`[object Object]`}function Jl(e){return(typeof e==`number`||e instanceof Number)&&isFinite(+e)}function Yl(e,t){return Jl(e)?e:t}function Xl(e,t){return e===void 0?t:e}var Zl=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100:+e/t,Ql=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100*t:+e;function $l(e,t,n){if(e&&typeof e.call==`function`)return e.apply(n,t)}function eu(e,t,n,r){let i,a,o;if(Kl(e))if(a=e.length,r)for(i=a-1;i>=0;i--)t.call(n,e[i],i);else for(i=0;ie,x:e=>e.x,y:e=>e.y};function lu(e){let t=e.split(`.`),n=[],r=``;for(let e of t)r+=e,r.endsWith(`\\`)?r=r.slice(0,-1)+`.`:(n.push(r),r=``);return n}function uu(e){let t=lu(e);return e=>{for(let n of t){if(n===``)break;e&&=e[n]}return e}}function du(e,t){return(cu[t]||(cu[t]=uu(t)))(e)}function fu(e){return e.charAt(0).toUpperCase()+e.slice(1)}var pu=e=>e!==void 0,mu=e=>typeof e==`function`,hu=(e,t)=>{if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0};function gu(e){return e.type===`mouseup`||e.type===`click`||e.type===`contextmenu`}var _u=Math.PI,vu=2*_u,yu=vu+_u,bu=1/0,xu=_u/180,Su=_u/2,Cu=_u/4,wu=_u*2/3,Tu=Math.log10,Eu=Math.sign;function Du(e,t,n){return Math.abs(e-t)e-t).pop(),t}function Au(e){return typeof e==`symbol`||typeof e==`object`&&!!e&&!(Symbol.toPrimitive in e||`toString`in e||`valueOf`in e)}function ju(e){return!Au(e)&&!isNaN(parseFloat(e))&&isFinite(e)}function Mu(e,t){let n=Math.round(e);return n-t<=e&&n+t>=e}function Nu(e,t,n){let r,i,a;for(r=0,i=e.length;rc&&l=Math.min(t,n)-r&&e<=Math.max(t,n)+r}function Gu(e,t,n){n||=(n=>e[n]1;)a=i+r>>1,n(a)?i=a:r=a;return{lo:i,hi:r}}var Ku=(e,t,n,r)=>Gu(e,n,r?r=>{let i=e[r][t];return ie[r][t]Gu(e,n,r=>e[r][t]>=n);function Ju(e,t,n){let r=0,i=e.length;for(;rr&&e[i-1]>n;)i--;return r>0||i{let n=`_onData`+fu(t),r=e[t];Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value(...t){let i=r.apply(this,t);return e._chartjs.listeners.forEach(e=>{typeof e[n]==`function`&&e[n](...t)}),i}})})}function Zu(e,t){let n=e._chartjs;if(!n)return;let r=n.listeners,i=r.indexOf(t);i!==-1&&r.splice(i,1),!(r.length>0)&&(Yu.forEach(t=>{delete e[t]}),delete e._chartjs)}function Qu(e){let t=new Set(e);return t.size===e.length?e:Array.from(t)}var $u=function(){return typeof window>`u`?function(e){return e()}:window.requestAnimationFrame}();function ed(e,t){let n=[],r=!1;return function(...i){n=i,r||(r=!0,$u.call(window,()=>{r=!1,e.apply(t,n)}))}}function td(e,t){let n;return function(...r){return t?(clearTimeout(n),n=setTimeout(e,t,r)):e.apply(this,r),t}}var nd=e=>e===`start`?`left`:e===`end`?`right`:`center`,rd=(e,t,n)=>e===`start`?t:e===`end`?n:(t+n)/2,id=(e,t,n,r)=>e===(r?`left`:`right`)?n:e===`center`?(t+n)/2:t;function ad(e,t,n){let r=t.length,i=0,a=r;if(e._sorted){let{iScale:o,vScale:s,_parsed:c}=e,l=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null,u=o.axis,{min:d,max:f,minDefined:p,maxDefined:m}=o.getUserBounds();if(p){if(i=Math.min(Ku(c,u,d).lo,n?r:Ku(t,u,o.getPixelForValue(d)).lo),l){let e=c.slice(0,i+1).reverse().findIndex(e=>!Gl(e[s.axis]));i-=Math.max(0,e)}i=Hu(i,0,r-1)}if(m){let e=Math.max(Ku(c,o.axis,f,!0).hi+1,n?0:Ku(t,u,o.getPixelForValue(f),!0).hi+1);if(l){let t=c.slice(e-1).findIndex(e=>!Gl(e[s.axis]));e+=Math.max(0,t)}a=Hu(e,i,r)-i}else a=r-i}return{start:i,count:a}}function od(e){let{xScale:t,yScale:n,_scaleRanges:r}=e,i={xmin:t.min,xmax:t.max,ymin:n.min,ymax:n.max};if(!r)return e._scaleRanges=i,!0;let a=r.xmin!==t.min||r.xmax!==t.max||r.ymin!==n.min||r.ymax!==n.max;return Object.assign(r,i),a}var sd=e=>e===0||e===1,cd=(e,t,n)=>-(2**(10*--e)*Math.sin((e-t)*vu/n)),ld=(e,t,n)=>2**(-10*e)*Math.sin((e-t)*vu/n)+1,ud={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>-e*(e-2),easeInOutQuad:e=>(e/=.5)<1?.5*e*e:-.5*(--e*(e-2)-1),easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2),easeInQuart:e=>e*e*e*e,easeOutQuart:e=>-(--e*e*e*e-1),easeInOutQuart:e=>(e/=.5)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2),easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>--e*e*e*e*e+1,easeInOutQuint:e=>(e/=.5)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2),easeInSine:e=>-Math.cos(e*Su)+1,easeOutSine:e=>Math.sin(e*Su),easeInOutSine:e=>-.5*(Math.cos(_u*e)-1),easeInExpo:e=>e===0?0:2**(10*(e-1)),easeOutExpo:e=>e===1?1:-(2**(-10*e))+1,easeInOutExpo:e=>sd(e)?e:e<.5?.5*2**(10*(e*2-1)):.5*(-(2**(-10*(e*2-1)))+2),easeInCirc:e=>e>=1?e:-(Math.sqrt(1-e*e)-1),easeOutCirc:e=>Math.sqrt(1- --e*e),easeInOutCirc:e=>(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1),easeInElastic:e=>sd(e)?e:cd(e,.075,.3),easeOutElastic:e=>sd(e)?e:ld(e,.075,.3),easeInOutElastic(e){let t=.1125,n=.45;return sd(e)?e:e<.5?.5*cd(e*2,t,n):.5+.5*ld(e*2-1,t,n)},easeInBack(e){return e*e*(2.70158*e-1.70158)},easeOutBack(e){return--e*e*(2.70158*e+1.70158)+1},easeInOutBack(e){let t=1.70158;return(e/=.5)<1?.5*(e*e*(((t*=1.525)+1)*e-t)):.5*((e-=2)*e*(((t*=1.525)+1)*e+t)+2)},easeInBounce:e=>1-ud.easeOutBounce(1-e),easeOutBounce(e){let t=7.5625,n=2.75;return e<1/n?t*e*e:e<2/n?t*(e-=1.5/n)*e+.75:e<2.5/n?t*(e-=2.25/n)*e+.9375:t*(e-=2.625/n)*e+.984375},easeInOutBounce:e=>e<.5?ud.easeInBounce(e*2)*.5:ud.easeOutBounce(e*2-1)*.5+.5};function dd(e){if(e&&typeof e==`object`){let t=e.toString();return t===`[object CanvasPattern]`||t===`[object CanvasGradient]`}return!1}function fd(e){return dd(e)?e:new Hl(e)}function pd(e){return dd(e)?e:new Hl(e).saturate(.5).darken(.1).hexString()}var md=[`x`,`y`,`borderWidth`,`radius`,`tension`],hd=[`color`,`borderColor`,`backgroundColor`];function gd(e){e.set(`animation`,{delay:void 0,duration:1e3,easing:`easeOutQuart`,fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),e.describe(`animation`,{_fallback:!1,_indexable:!1,_scriptable:e=>e!==`onProgress`&&e!==`onComplete`&&e!==`fn`}),e.set(`animations`,{colors:{type:`color`,properties:hd},numbers:{type:`number`,properties:md}}),e.describe(`animations`,{_fallback:`animation`}),e.set(`transitions`,{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:`transparent`},visible:{type:`boolean`,duration:0}}},hide:{animations:{colors:{to:`transparent`},visible:{type:`boolean`,easing:`linear`,fn:e=>e|0}}}})}function _d(e){e.set(`layout`,{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var vd=new Map;function yd(e,t){t||={};let n=e+JSON.stringify(t),r=vd.get(n);return r||(r=new Intl.NumberFormat(e,t),vd.set(n,r)),r}function bd(e,t,n){return yd(t,n).format(e)}var xd={values(e){return Kl(e)?e:``+e},numeric(e,t,n){if(e===0)return`0`;let r=this.chart.options.locale,i,a=e;if(n.length>1){let t=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(t<1e-4||t>0x38d7ea4c68000)&&(i=`scientific`),a=Sd(e,n)}let o=Tu(Math.abs(a)),s=isNaN(o)?1:Math.max(Math.min(-1*Math.floor(o),20),0),c={notation:i,minimumFractionDigits:s,maximumFractionDigits:s};return Object.assign(c,this.options.ticks.format),bd(e,r,c)},logarithmic(e,t,n){if(e===0)return`0`;let r=n[t].significand||e/10**Math.floor(Tu(e));return[1,2,3,5,10,15].includes(r)||t>.8*n.length?xd.numeric.call(this,e,t,n):``}};function Sd(e,t){let n=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(n)>=1&&e!==Math.floor(e)&&(n=e-Math.floor(e)),n}var Cd={formatters:xd};function wd(e){e.set(`scale`,{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:`ticks`,clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,t)=>t.lineWidth,tickColor:(e,t)=>t.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:``,padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:``,padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Cd.formatters.values,minor:{},major:{},align:`center`,crossAlign:`near`,showLabelBackdrop:!1,backdropColor:`rgba(255, 255, 255, 0.75)`,backdropPadding:2}}),e.route(`scale.ticks`,`color`,``,`color`),e.route(`scale.grid`,`color`,``,`borderColor`),e.route(`scale.border`,`color`,``,`borderColor`),e.route(`scale.title`,`color`,``,`color`),e.describe(`scale`,{_fallback:!1,_scriptable:e=>!e.startsWith(`before`)&&!e.startsWith(`after`)&&e!==`callback`&&e!==`parser`,_indexable:e=>e!==`borderDash`&&e!==`tickBorderDash`&&e!==`dash`}),e.describe(`scales`,{_fallback:`scale`}),e.describe(`scale.ticks`,{_scriptable:e=>e!==`backdropPadding`&&e!==`callback`,_indexable:e=>e!==`backdropPadding`})}var Td=Object.create(null),Ed=Object.create(null);function Dd(e,t){if(!t)return e;let n=t.split(`.`);for(let t=0,r=n.length;te.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[`mousemove`,`mouseout`,`click`,`touchstart`,`touchmove`],this.font={family:`'Helvetica Neue', 'Helvetica', 'Arial', sans-serif`,size:12,style:`normal`,lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,t)=>pd(t.backgroundColor),this.hoverBorderColor=(e,t)=>pd(t.borderColor),this.hoverColor=(e,t)=>pd(t.color),this.indexAxis=`x`,this.interaction={mode:`nearest`,intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e),this.apply(t)}set(e,t){return Od(this,e,t)}get(e){return Dd(this,e)}describe(e,t){return Od(Ed,e,t)}override(e,t){return Od(Td,e,t)}route(e,t,n,r){let i=Dd(this,e),a=Dd(this,n),o=`_`+t;Object.defineProperties(i,{[o]:{value:i[t],writable:!0},[t]:{enumerable:!0,get(){let e=this[o],t=a[r];return ql(e)?Object.assign({},t,e):Xl(e,t)},set(e){this[o]=e}}})}apply(e){e.forEach(e=>e(this))}}({_scriptable:e=>!e.startsWith(`on`),_indexable:e=>e!==`events`,hover:{_fallback:`interaction`},interaction:{_scriptable:!1,_indexable:!1}},[gd,_d,wd]);function Ad(e){return!e||Gl(e.size)||Gl(e.family)?null:(e.style?e.style+` `:``)+(e.weight?e.weight+` `:``)+e.size+`px `+e.family}function jd(e,t,n,r,i){let a=t[i];return a||(a=t[i]=e.measureText(i).width,n.push(i)),a>r&&(r=a),r}function Md(e,t,n,r){r||={};let i=r.data=r.data||{},a=r.garbageCollect=r.garbageCollect||[];r.font!==t&&(i=r.data={},a=r.garbageCollect=[],r.font=t),e.save(),e.font=t;let o=0,s=n.length,c,l,u,d,f;for(c=0;cn.length){for(c=0;c0&&e.stroke()}}function Ld(e,t,n){return n||=.5,!t||e&&e.x>t.left-n&&e.xt.top-n&&e.y0&&a.strokeColor!==``,c,l;for(e.save(),e.font=i.string,Hd(e,a),c=0;c+e||0;function Zd(e,t){let n={},r=ql(t),i=r?Object.keys(t):t,a=ql(e)?r?n=>Xl(e[n],e[t[n]]):t=>e[t]:()=>e;for(let e of i)n[e]=Xd(a(e));return n}function Qd(e){return Zd(e,{top:`y`,right:`x`,bottom:`y`,left:`x`})}function $d(e){return Zd(e,[`topLeft`,`topRight`,`bottomLeft`,`bottomRight`])}function ef(e){let t=Qd(e);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function tf(e,t){e||={},t||=kd.font;let n=Xl(e.size,t.size);typeof n==`string`&&(n=parseInt(n,10));let r=Xl(e.style,t.style);r&&!(``+r).match(Jd)&&(console.warn(`Invalid font style specified: "`+r+`"`),r=void 0);let i={family:Xl(e.family,t.family),lineHeight:Yd(Xl(e.lineHeight,t.lineHeight),n),size:n,style:r,weight:Xl(e.weight,t.weight),string:``};return i.string=Ad(i),i}function nf(e,t,n,r){let i=!0,a,o,s;for(a=0,o=e.length;an&&e===0?0:e+t;return{min:o(r,-Math.abs(a)),max:o(i,a)}}function af(e,t){return Object.assign(Object.create(e),t)}function of(e,t=[``],n,r,i=()=>e[0]){let a=n||e;return r===void 0&&(r=Sf(`_fallback`,e)),new Proxy({[Symbol.toStringTag]:`Object`,_cacheable:!0,_scopes:e,_rootScopes:a,_fallback:r,_getTarget:i,override:n=>of([n,...e],t,a,r)},{deleteProperty(t,n){return delete t[n],delete t._keys,delete e[0][n],!0},get(n,r){return df(n,r,()=>xf(r,t,e,n))},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e._scopes[0],t)},getPrototypeOf(){return Reflect.getPrototypeOf(e[0])},has(e,t){return Cf(e).includes(t)},ownKeys(e){return Cf(e)},set(e,t,n){let r=e._storage||=i();return e[t]=r[t]=n,delete e._keys,!0}})}function sf(e,t,n,r){let i={_cacheable:!1,_proxy:e,_context:t,_subProxy:n,_stack:new Set,_descriptors:cf(e,r),setContext:t=>sf(e,t,n,r),override:i=>sf(e.override(i),t,n,r)};return new Proxy(i,{deleteProperty(t,n){return delete t[n],delete e[n],!0},get(e,t,n){return df(e,t,()=>ff(e,t,n))},getOwnPropertyDescriptor(t,n){return t._descriptors.allKeys?Reflect.has(e,n)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(e,n)},getPrototypeOf(){return Reflect.getPrototypeOf(e)},has(t,n){return Reflect.has(e,n)},ownKeys(){return Reflect.ownKeys(e)},set(t,n,r){return e[n]=r,delete t[n],!0}})}function cf(e,t={scriptable:!0,indexable:!0}){let{_scriptable:n=t.scriptable,_indexable:r=t.indexable,_allKeys:i=t.allKeys}=e;return{allKeys:i,scriptable:n,indexable:r,isScriptable:mu(n)?n:()=>n,isIndexable:mu(r)?r:()=>r}}var lf=(e,t)=>e?e+fu(t):t,uf=(e,t)=>ql(t)&&e!==`adapters`&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function df(e,t,n){if(Object.prototype.hasOwnProperty.call(e,t)||t===`constructor`)return e[t];let r=n();return e[t]=r,r}function ff(e,t,n){let{_proxy:r,_context:i,_subProxy:a,_descriptors:o}=e,s=r[t];return mu(s)&&o.isScriptable(t)&&(s=pf(t,s,e,n)),Kl(s)&&s.length&&(s=mf(t,s,e,o.isIndexable)),uf(t,s)&&(s=sf(s,i,a&&a[t],o)),s}function pf(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_stack:s}=n;if(s.has(e))throw Error(`Recursion detected: `+Array.from(s).join(`->`)+`->`+e);s.add(e);let c=t(a,o||r);return s.delete(e),uf(e,c)&&(c=vf(i._scopes,i,e,c)),c}function mf(e,t,n,r){let{_proxy:i,_context:a,_subProxy:o,_descriptors:s}=n;if(a.index!==void 0&&r(e))return t[a.index%t.length];if(ql(t[0])){let n=t,r=i._scopes.filter(e=>e!==n);t=[];for(let c of n){let n=vf(r,i,e,c);t.push(sf(n,a,o&&o[e],s))}}return t}function hf(e,t,n){return mu(e)?e(t,n):e}var gf=(e,t)=>e===!0?t:typeof e==`string`?du(t,e):void 0;function _f(e,t,n,r,i){for(let a of t){let t=gf(n,a);if(t){e.add(t);let a=hf(t._fallback,n,i);if(a!==void 0&&a!==n&&a!==r)return a}else if(t===!1&&r!==void 0&&n!==r)return null}return!1}function vf(e,t,n,r){let i=t._rootScopes,a=hf(t._fallback,n,r),o=[...e,...i],s=new Set;s.add(r);let c=yf(s,o,n,a||n,r);return c===null||a!==void 0&&a!==n&&(c=yf(s,o,a,c,r),c===null)?!1:of(Array.from(s),[``],i,a,()=>bf(t,n,r))}function yf(e,t,n,r,i){for(;n;)n=_f(e,t,n,r,i);return n}function bf(e,t,n){let r=e._getTarget();t in r||(r[t]={});let i=r[t];return Kl(i)&&ql(n)?n:i||{}}function xf(e,t,n,r){let i;for(let a of t)if(i=Sf(lf(a,e),n),i!==void 0)return uf(e,i)?vf(n,r,e,i):i}function Sf(e,t){for(let n of t){if(!n)continue;let t=n[e];if(t!==void 0)return t}}function Cf(e){let t=e._keys;return t||=e._keys=wf(e._scopes),t}function wf(e){let t=new Set;for(let n of e)for(let e of Object.keys(n).filter(e=>!e.startsWith(`_`)))t.add(e);return Array.from(t)}function Tf(e,t,n,r){let{iScale:i}=e,{key:a=`r`}=this._parsing,o=Array(r),s,c,l,u;for(s=0,c=r;ste===`x`?`y`:`x`;function kf(e,t,n,r){let i=e.skip?t:e,a=t,o=n.skip?t:n,s=Ru(a,i),c=Ru(o,a),l=s/(s+c),u=c/(s+c);l=isNaN(l)?0:l,u=isNaN(u)?0:u;let d=r*l,f=r*u;return{previous:{x:a.x-d*(o.x-i.x),y:a.y-d*(o.y-i.y)},next:{x:a.x+f*(o.x-i.x),y:a.y+f*(o.y-i.y)}}}function Af(e,t,n){let r=e.length,i,a,o,s,c,l=Df(e,0);for(let u=0;u!e.skip)),t.cubicInterpolationMode===`monotone`)Mf(e,i);else{let n=r?e[e.length-1]:e[0];for(a=0,o=e.length;ae.ownerDocument.defaultView.getComputedStyle(e,null);function Bf(e,t){return zf(e).getPropertyValue(t)}var Vf=[`top`,`right`,`bottom`,`left`];function Hf(e,t,n){let r={};n=n?`-`+n:``;for(let i=0;i<4;i++){let a=Vf[i];r[a]=parseFloat(e[t+`-`+a+n])||0}return r.width=r.left+r.right,r.height=r.top+r.bottom,r}var Uf=(e,t,n)=>(e>0||t>0)&&(!n||!n.shadowRoot);function Wf(e,t){let n=e.touches,r=n&&n.length?n[0]:e,{offsetX:i,offsetY:a}=r,o=!1,s,c;if(Uf(i,a,e.target))s=i,c=a;else{let e=t.getBoundingClientRect();s=r.clientX-e.left,c=r.clientY-e.top,o=!0}return{x:s,y:c,box:o}}function Gf(e,t){if(`native`in e)return e;let{canvas:n,currentDevicePixelRatio:r}=t,i=zf(n),a=i.boxSizing===`border-box`,o=Hf(i,`padding`),s=Hf(i,`border`,`width`),{x:c,y:l,box:u}=Wf(e,n),d=o.left+(u&&s.left),f=o.top+(u&&s.top),{width:p,height:m}=t;return a&&(p-=o.width+s.width,m-=o.height+s.height),{x:Math.round((c-d)/p*n.width/r),y:Math.round((l-f)/m*n.height/r)}}function Kf(e,t,n){let r,i;if(t===void 0||n===void 0){let a=e&&Lf(e);if(!a)t=e.clientWidth,n=e.clientHeight;else{let e=a.getBoundingClientRect(),o=zf(a),s=Hf(o,`border`,`width`),c=Hf(o,`padding`);t=e.width-c.width-s.width,n=e.height-c.height-s.height,r=Rf(o.maxWidth,a,`clientWidth`),i=Rf(o.maxHeight,a,`clientHeight`)}}return{width:t,height:n,maxWidth:r||bu,maxHeight:i||bu}}var qf=e=>Math.round(e*10)/10;function Jf(e,t,n,r){let i=zf(e),a=Hf(i,`margin`),o=Rf(i.maxWidth,e,`clientWidth`)||bu,s=Rf(i.maxHeight,e,`clientHeight`)||bu,c=Kf(e,t,n),{width:l,height:u}=c;if(i.boxSizing===`content-box`){let e=Hf(i,`border`,`width`),t=Hf(i,`padding`);l-=t.width+e.width,u-=t.height+e.height}return l=Math.max(0,l-a.width),u=Math.max(0,r?l/r:u-a.height),l=qf(Math.min(l,o,c.maxWidth)),u=qf(Math.min(u,s,c.maxHeight)),l&&!u&&(u=qf(l/2)),(t!==void 0||n!==void 0)&&r&&c.height&&u>c.height&&(u=c.height,l=qf(Math.floor(u*r))),{width:l,height:u}}function Yf(e,t,n){let r=t||1,i=qf(e.height*r),a=qf(e.width*r);e.height=qf(e.height),e.width=qf(e.width);let o=e.canvas;return o.style&&(n||!o.style.height&&!o.style.width)&&(o.style.height=`${e.height}px`,o.style.width=`${e.width}px`),e.currentDevicePixelRatio!==r||o.height!==i||o.width!==a?(e.currentDevicePixelRatio=r,o.height=i,o.width=a,e.ctx.setTransform(r,0,0,r,0,0),!0):!1}var Xf=function(){let e=!1;try{let t={get passive(){return e=!0,!1}};If()&&(window.addEventListener(`test`,null,t),window.removeEventListener(`test`,null,t))}catch{}return e}();function Zf(e,t){let n=Bf(e,t),r=n&&n.match(/^(\d+)(\.\d+)?px$/);return r?+r[1]:void 0}function Qf(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}}function $f(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:r===`middle`?n<.5?e.y:t.y:r===`after`?n<1?e.y:t.y:n>0?t.y:e.y}}function ep(e,t,n,r){let i={x:e.cp2x,y:e.cp2y},a={x:t.cp1x,y:t.cp1y},o=Qf(e,i,n),s=Qf(i,a,n),c=Qf(a,t,n);return Qf(Qf(o,s,n),Qf(s,c,n),n)}var tp=function(e,t){return{x(n){return e+e+t-n},setWidth(e){t=e},textAlign(e){return e===`center`?e:e===`right`?`left`:`right`},xPlus(e,t){return e-t},leftForLtr(e,t){return e-t}}},np=function(){return{x(e){return e},setWidth(e){},textAlign(e){return e},xPlus(e,t){return e+t},leftForLtr(e,t){return e}}};function rp(e,t,n){return e?tp(t,n):np()}function ip(e,t){let n,r;(t===`ltr`||t===`rtl`)&&(n=e.canvas.style,r=[n.getPropertyValue(`direction`),n.getPropertyPriority(`direction`)],n.setProperty(`direction`,t,`important`),e.prevTextDirection=r)}function ap(e,t){t!==void 0&&(delete e.prevTextDirection,e.canvas.style.setProperty(`direction`,t[0],t[1]))}function op(e){return e===`angle`?{between:Vu,compare:zu,normalize:Bu}:{between:Wu,compare:(e,t)=>e-t,normalize:e=>e}}function sp({start:e,end:t,count:n,loop:r,style:i}){return{start:e%n,end:t%n,loop:r&&(t-e+1)%n===0,style:i}}function cp(e,t,n){let{property:r,start:i,end:a}=n,{between:o,normalize:s}=op(r),c=t.length,{start:l,end:u,loop:d}=e,f,p;if(d){for(l+=c,u+=c,f=0,p=c;fc(i,y,_)&&s(i,y)!==0,x=()=>s(a,_)===0||c(a,y,_),S=()=>h||b(),C=()=>!h||x();for(let e=u,n=u;e<=d;++e)v=t[e%o],!v.skip&&(_=l(v[r]),_!==y&&(h=c(_,i,a),g===null&&S()&&(g=s(_,i)===0?e:n),g!==null&&C()&&(m.push(sp({start:g,end:e,loop:f,count:o,style:p})),g=null),n=e,y=_));return g!==null&&m.push(sp({start:g,end:d,loop:f,count:o,style:p})),m}function up(e,t){let n=[],r=e.segments;for(let i=0;ii&&e[a%t].skip;)a--;return a%=t,{start:i,end:a}}function fp(e,t,n,r){let i=e.length,a=[],o=t,s=e[t],c;for(c=t+1;c<=n;++c){let n=e[c%i];n.skip||n.stop?s.skip||(r=!1,a.push({start:t%i,end:(c-1)%i,loop:r}),t=o=n.stop?c:null):(o=c,s.skip&&(t=c)),s=n}return o!==null&&a.push({start:t%i,end:o%i,loop:r}),a}function pp(e,t){let n=e.points,r=e.options.spanGaps,i=n.length;if(!i)return[];let a=!!e._loop,{start:o,end:s}=dp(n,i,a,r);return r===!0?mp(e,[{start:o,end:s,loop:a}],n,t):mp(e,fp(n,o,sr({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(n-t.start,a)}))}_refresh(){this._request||=(this._running=!0,$u.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let t=0;this._charts.forEach((n,r)=>{if(!n.running||!n.items.length)return;let i=n.items,a=i.length-1,o=!1,s;for(;a>=0;--a)s=i[a],s._active?(s._total>n.duration&&(n.duration=s._total),s.tick(e),o=!0):(i[a]=i[i.length-1],i.pop());o&&(r.draw(),this._notify(r,n,e,`progress`)),i.length||(n.running=!1,this._notify(r,n,e,`complete`),n.initial=!1),t+=i.length}),this._lastDate=e,t===0&&(this._running=!1)}_getAnims(e){let t=this._charts,n=t.get(e);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,n)),n}listen(e,t,n){this._getAnims(e).listeners[t].push(n)}add(e,t){!t||!t.length||this._getAnims(e).items.push(...t)}has(e){return this._getAnims(e).items.length>0}start(e){let t=this._charts.get(e);t&&(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((e,t)=>Math.max(e,t._duration),0),this._refresh())}running(e){if(!this._running)return!1;let t=this._charts.get(e);return!(!t||!t.running||!t.items.length)}stop(e){let t=this._charts.get(e);if(!t||!t.items.length)return;let n=t.items,r=n.length-1;for(;r>=0;--r)n[r].cancel();t.items=[],this._notify(e,t,Date.now(),`complete`)}remove(e){return this._charts.delete(e)}},Sp=`transparent`,Cp={boolean(e,t,n){return n>.5?t:e},color(e,t,n){let r=fd(e||Sp),i=r.valid&&fd(t||Sp);return i&&i.valid?i.mix(r,n).hexString():t},number(e,t,n){return e+(t-e)*n}},wp=class{constructor(e,t,n,r){let i=t[n];r=nf([e.to,r,i,e.from]);let a=nf([e.from,i,r]);this._active=!0,this._fn=e.fn||Cp[e.type||typeof a],this._easing=ud[e.easing]||ud.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=t,this._prop=n,this._from=a,this._to=r,this._promises=void 0}active(){return this._active}update(e,t,n){if(this._active){this._notify(!1);let r=this._target[this._prop],i=n-this._start,a=this._duration-i;this._start=n,this._duration=Math.floor(Math.max(a,e.duration)),this._total+=i,this._loop=!!e.loop,this._to=nf([e.to,t,r,e.from]),this._from=nf([e.from,r,t])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){let t=e-this._start,n=this._duration,r=this._prop,i=this._from,a=this._loop,o=this._to,s;if(this._active=i!==o&&(a||t1?2-s:s,s=this._easing(Math.min(1,Math.max(0,s))),this._target[r]=this._fn(i,o,s)}wait(){let e=this._promises||=[];return new Promise((t,n)=>{e.push({res:t,rej:n})})}_notify(e){let t=e?`res`:`rej`,n=this._promises||[];for(let e=0;e{let i=e[r];if(!ql(i))return;let a={};for(let e of t)a[e]=i[e];(Kl(i.properties)&&i.properties||[r]).forEach(e=>{(e===r||!n.has(e))&&n.set(e,a)})})}_animateOptions(e,t){let n=t.options,r=Dp(e,n);if(!r)return[];let i=this._createAnimations(r,n);return n.$shared&&Ep(e.options.$animations,n).then(()=>{e.options=n},()=>{}),i}_createAnimations(e,t){let n=this._properties,r=[],i=e.$animations||={},a=Object.keys(t),o=Date.now(),s;for(s=a.length-1;s>=0;--s){let c=a[s];if(c.charAt(0)===`$`)continue;if(c===`options`){r.push(...this._animateOptions(e,t));continue}let l=t[c],u=i[c],d=n.get(c);if(u)if(d&&u.active()){u.update(d,l,o);continue}else u.cancel();if(!d||!d.duration){e[c]=l;continue}i[c]=u=new wp(d,e,c,l),r.push(u)}return r}update(e,t){if(this._properties.size===0){Object.assign(e,t);return}let n=this._createAnimations(e,t);if(n.length)return xp.add(this._chart,n),!0}};function Ep(e,t){let n=[],r=Object.keys(t);for(let t=0;t0||!n&&t<0)return i.index}return null}function zp(e,t){let{chart:n,_cachedMeta:r}=e,i=n._stacks||={},{iScale:a,vScale:o,index:s}=r,c=a.axis,l=o.axis,u=Fp(a,o,r),d=t.length,f;for(let e=0;en[e].axis===t).shift()}function Vp(e,t){return af(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:`default`,type:`dataset`})}function Hp(e,t,n){return af(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:n,index:t,mode:`default`,type:`data`})}function Up(e,t){let n=e.controller.index,r=e.vScale&&e.vScale.axis;if(r){t||=e._parsed;for(let e of t){let t=e._stacks;if(!t||t[r]===void 0||t[r][n]===void 0)return;delete t[r][n],t[r]._visualValues!==void 0&&t[r]._visualValues[n]!==void 0&&delete t[r]._visualValues[n]}}}var Wp=e=>e===`reset`||e===`none`,Gp=(e,t)=>t?e:Object.assign({},e),Kp=(e,t,n)=>e&&!t.hidden&&t._stacked&&{keys:jp(n,!0),values:null},qp=class{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(e,t){this.chart=e,this._ctx=e.ctx,this.index=t,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=Pp(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled(`filler`)&&console.warn(`Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options`)}updateIndex(e){this.index!==e&&Up(this._cachedMeta),this.index=e}linkScales(){let e=this.chart,t=this._cachedMeta,n=this.getDataset(),r=(e,t,n,r)=>e===`x`?t:e===`r`?r:n,i=t.xAxisID=Xl(n.xAxisID,Bp(e,`x`)),a=t.yAxisID=Xl(n.yAxisID,Bp(e,`y`)),o=t.rAxisID=Xl(n.rAxisID,Bp(e,`r`)),s=t.indexAxis,c=t.iAxisID=r(s,i,a,o),l=t.vAxisID=r(s,a,i,o);t.xScale=this.getScaleForId(i),t.yScale=this.getScaleForId(a),t.rScale=this.getScaleForId(o),t.iScale=this.getScaleForId(c),t.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){let t=this._cachedMeta;return e===t.iScale?t.vScale:t.iScale}reset(){this._update(`reset`)}_destroy(){let e=this._cachedMeta;this._data&&Zu(this._data,this),e._stacked&&Up(e)}_dataCheck(){let e=this.getDataset(),t=e.data||=[],n=this._data;if(ql(t)){let e=this._cachedMeta;this._data=Np(t,e)}else if(n!==t){if(n){Zu(n,this);let e=this._cachedMeta;Up(e),e._parsed=[]}t&&Object.isExtensible(t)&&Xu(t,this),this._syncList=[],this._data=t}}addElements(){let e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){let t=this._cachedMeta,n=this.getDataset(),r=!1;this._dataCheck();let i=t._stacked;t._stacked=Pp(t.vScale,t),t.stack!==n.stack&&(r=!0,Up(t),t.stack=n.stack),this._resyncElements(e),(r||i!==t._stacked)&&(zp(this,t._parsed),t._stacked=Pp(t.vScale,t))}configure(){let e=this.chart.config,t=e.datasetScopeKeys(this._type),n=e.getOptionScopes(this.getDataset(),t,!0);this.options=e.createResolver(n,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,t){let{_cachedMeta:n,_data:r}=this,{iScale:i,_stacked:a}=n,o=i.axis,s=e===0&&t===r.length||n._sorted,c=e>0&&n._parsed[e-1],l,u,d;if(this._parsing===!1)n._parsed=r,n._sorted=!0,d=r;else{d=Kl(r[e])?this.parseArrayData(n,r,e,t):ql(r[e])?this.parseObjectData(n,r,e,t):this.parsePrimitiveData(n,r,e,t);let i=()=>u[o]===null||c&&u[o]t||u=0;--d)if(!p()){this.updateRangeFromParsed(c,e,f,s);break}}return c}getAllParsedValues(e){let t=this._cachedMeta._parsed,n=[],r,i,a;for(r=0,i=t.length;r=0&&ethis.getContext(n,r,t),u);return p.$shared&&(p.$shared=s,i[a]=Object.freeze(Gp(p,s))),p}_resolveAnimations(e,t,n){let r=this.chart,i=this._cachedDataOpts,a=`animation-${t}`,o=i[a];if(o)return o;let s;if(r.options.animation!==!1){let r=this.chart.config,i=r.datasetAnimationScopeKeys(this._type,t),a=r.getOptionScopes(this.getDataset(),i);s=r.createResolver(a,this.getContext(e,n,t))}let c=new Tp(r,s&&s.animations);return s&&s._cacheable&&(i[a]=Object.freeze(c)),c}getSharedOptions(e){if(e.$shared)return this._sharedOptions||=Object.assign({},e)}includeOptions(e,t){return!t||Wp(e)||this.chart._animationsDisabled}_getSharedOptions(e,t){let n=this.resolveDataElementOptions(e,t),r=this._sharedOptions,i=this.getSharedOptions(n),a=this.includeOptions(t,i)||i!==r;return this.updateSharedOptions(i,t,n),{sharedOptions:i,includeOptions:a}}updateElement(e,t,n,r){Wp(r)?Object.assign(e,n):this._resolveAnimations(t,r).update(e,n)}updateSharedOptions(e,t,n){e&&!Wp(t)&&this._resolveAnimations(void 0,t).update(e,n)}_setStyle(e,t,n,r){e.active=r;let i=this.getStyle(t,r);this._resolveAnimations(t,n,r).update(e,{options:!r&&this.getSharedOptions(i)||i})}removeHoverStyle(e,t,n){this._setStyle(e,n,`active`,!1)}setHoverStyle(e,t,n){this._setStyle(e,n,`active`,!0)}_removeDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!1)}_setDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,`active`,!0)}_resyncElements(e){let t=this._data,n=this._cachedMeta.data;for(let[e,t,n]of this._syncList)this[e](t,n);this._syncList=[];let r=n.length,i=t.length,a=Math.min(i,r);a&&this.parse(0,a),i>r?this._insertElements(r,i-r,e):i{for(e.length+=t,o=e.length-1;o>=a;o--)e[o]=e[o-t]};for(s(i),o=e;oe-t))}return e._cache.$bar}function Yp(e){let t=e.iScale,n=Jp(t,e.type),r=t._length,i,a,o,s,c=()=>{o===32767||o===-32768||(pu(s)&&(r=Math.min(r,Math.abs(o-s)||r)),s=o)};for(i=0,a=n.length;i0?i[e-1]:null,s=eMath.abs(s)&&(c=s,l=o),t[n.axis]=l,t._custom={barStart:c,barEnd:l,start:i,end:a,min:o,max:s}}function $p(e,t,n,r){return Kl(e)?Qp(e,t,n,r):t[n.axis]=n.parse(e,r),t}function em(e,t,n,r){let i=e.iScale,a=e.vScale,o=i.getLabels(),s=i===a,c=[],l,u,d,f;for(l=n,u=n+r;l=n?1:-1):Eu(e)}function rm(e){let t,n,r,i,a;return e.horizontal?(t=e.base>e.x,n=`left`,r=`right`):(t=e.basee.controller.options.grouped),i=n.options.stacked,a=[],o=this._cachedMeta.controller.getParsed(t),s=o&&o[n.axis],c=e=>{let t=e._parsed.find(e=>e[n.axis]===s),r=t&&t[e.vScale.axis];if(Gl(r)||isNaN(r))return!0};for(let n of r)if(!(t!==void 0&&c(n))&&((i===!1||a.indexOf(n.stack)===-1||i===void 0&&n.stack===void 0)&&a.push(n.stack),n.index===e))break;return a.length||a.push(void 0),a}_getStackCount(e){return this._getStacks(void 0,e).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let e=this.chart.scales,t=this.chart.options.indexAxis;return Object.keys(e).filter(n=>e[n].axis===t).shift()}_getAxis(){let e={},t=this.getFirstScaleIdForIndexAxis();for(let n of this.chart.data.datasets)e[Xl(this.chart.options.indexAxis===`x`?n.xAxisID:n.yAxisID,t)]=!0;return Object.keys(e)}_getStackIndex(e,t,n){let r=this._getStacks(e,n),i=t===void 0?-1:r.indexOf(t);return i===-1?r.length-1:i}_getRuler(){let e=this.options,t=this._cachedMeta,n=t.iScale,r=[],i,a;for(i=0,a=t.data.length;i=0;--n)t=Math.max(t,e[n].size(this.resolveDataElementOptions(n))/2);return t>0&&t}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart.data.labels||[],{xScale:r,yScale:i}=t,a=this.getParsed(e),o=r.getLabelForValue(a.x),s=i.getLabelForValue(a.y),c=a._custom;return{label:n[e]||``,value:`(`+o+`, `+s+(c?`, `+c:``)+`)`}}update(e){let t=this._cachedMeta.data;this.updateElements(t,0,t.length,e)}updateElements(e,t,n,r){let i=r===`reset`,{iScale:a,vScale:o}=this._cachedMeta,{sharedOptions:s,includeOptions:c}=this._getSharedOptions(t,r),l=a.axis,u=o.axis;for(let d=t;dVu(e,s,c,!0)?1:Math.max(t,t*n,r,r*n),m=(e,t,r)=>Vu(e,s,c,!0)?-1:Math.min(t,t*n,r,r*n),h=p(0,l,d),g=p(Su,u,f),_=m(_u,l,d),v=m(_u+Su,u,f);r=(h-_)/2,i=(g-v)/2,a=-(h+_)/2,o=-(g+v)/2}return{ratioX:r,ratioY:i,offsetX:a,offsetY:o}}var fm=class extends qp{static id=`doughnut`;static defaults={datasetElementType:!1,dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:`number`,properties:[`circumference`,`endAngle`,`innerRadius`,`outerRadius`,`startAngle`,`x`,`y`,`offset`,`borderWidth`,`spacing`]}},cutout:`50%`,rotation:0,circumference:360,radius:`100%`,spacing:0,indexAxis:`r`};static descriptors={_scriptable:e=>e!==`spacing`,_indexable:e=>e!==`spacing`&&!e.startsWith(`borderDash`)&&!e.startsWith(`hoverBorderDash`)};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data,{labels:{pointStyle:n,textAlign:r,color:i,useBorderRadius:a,borderRadius:o}}=e.legend.options;return t.labels.length&&t.datasets.length?t.labels.map((t,s)=>{let c=e.getDatasetMeta(0).controller.getStyle(s);return{text:t,fillStyle:c.backgroundColor,fontColor:i,hidden:!e.getDataVisibility(s),lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:c.borderWidth,strokeStyle:c.borderColor,textAlign:r,pointStyle:n,borderRadius:a&&(o||c.borderRadius),index:s}}):[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}}};constructor(e,t){super(e,t),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,t){let n=this.getDataset().data,r=this._cachedMeta;if(this._parsing===!1)r._parsed=n;else{let i=e=>+n[e];if(ql(n[e])){let{key:e=`value`}=this._parsing;i=t=>+du(n[t],e)}let a,o;for(a=e,o=e+t;a0&&!isNaN(e)?Math.abs(e)/t*vu:0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=bd(t._parsed[e],n.options.locale);return{label:r[e]||``,value:i}}getMaxBorderWidth(e){let t=0,n=this.chart,r,i,a,o,s;if(!e){for(r=0,i=n.data.datasets.length;r0&&this.getParsed(t-1);for(let n=0;n=_){v.skip=!0;continue}let b=this.getParsed(n),x=Gl(b[f]),S=v[d]=a.getPixelForValue(b[d],n),C=v[f]=i||x?o.getBasePixel():o.getPixelForValue(s?this.applyStack(o,b,s):b[f],n);v.skip=isNaN(S)||isNaN(C)||x,v.stop=n>0&&Math.abs(b[d]-y[d])>h,m&&(v.parsed=b,v.raw=c.data[n]),u&&(v.options=l||this.resolveDataElementOptions(n,p.active?`active`:r)),g||this.updateElement(p,n,v,r),y=b}}getMaxOverflow(){let e=this._cachedMeta,t=e.dataset,n=t.options&&t.options.borderWidth||0,r=e.data||[];if(!r.length)return n;let i=r[0].size(this.resolveDataElementOptions(0)),a=r[r.length-1].size(this.resolveDataElementOptions(r.length-1));return Math.max(n,i,a)/2}draw(){let e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}},mm=class extends qp{static id=`polarArea`;static defaults={dataElementType:`arc`,animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:`number`,properties:[`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`]}},indexAxis:`r`,startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let t=e.data;if(t.labels.length&&t.datasets.length){let{labels:{pointStyle:n,color:r}}=e.legend.options;return t.labels.map((t,i)=>{let a=e.getDatasetMeta(0).controller.getStyle(i);return{text:t,fillStyle:a.backgroundColor,strokeStyle:a.borderColor,fontColor:r,lineWidth:a.borderWidth,pointStyle:n,hidden:!e.getDataVisibility(i),index:i}})}return[]}},onClick(e,t,n){n.chart.toggleDataVisibility(t.index),n.chart.update()}}},scales:{r:{type:`radialLinear`,angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(e,t){super(e,t),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=bd(t._parsed[e].r,n.options.locale);return{label:r[e]||``,value:i}}parseObjectData(e,t,n,r){return Tf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta.data;this._updateRadius(),this.updateElements(t,0,t.length,e)}getMinMax(){let e=this._cachedMeta,t={min:1/0,max:-1/0};return e.data.forEach((e,n)=>{let r=this.getParsed(n).r;!isNaN(r)&&this.chart.getDataVisibility(n)&&(rt.max&&(t.max=r))}),t}_updateRadius(){let e=this.chart,t=e.chartArea,n=e.options,r=Math.min(t.right-t.left,t.bottom-t.top),i=Math.max(r/2,0),a=(i-Math.max(n.cutoutPercentage?i/100*n.cutoutPercentage:1,0))/e.getVisibleDatasetCount();this.outerRadius=i-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(e,t,n,r){let i=r===`reset`,a=this.chart,o=a.options.animation,s=this._cachedMeta.rScale,c=s.xCenter,l=s.yCenter,u=s.getIndexAngle(0)-.5*_u,d=u,f,p=360/this.countVisibleElements();for(f=0;f{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&t++}),t}_computeAngle(e,t,n){return this.chart.getDataVisibility(e)?Pu(this.resolveDataElementOptions(e,t).angle||n):0}},hm=Object.freeze({__proto__:null,BarController:lm,BubbleController:um,DoughnutController:fm,LineController:pm,PieController:class extends fm{static id=`pie`;static defaults={cutout:0,rotation:0,circumference:360,radius:`100%`}},PolarAreaController:mm,RadarController:class extends qp{static id=`radar`;static defaults={datasetElementType:`line`,dataElementType:`point`,indexAxis:`r`,showLine:!0,elements:{line:{fill:`start`}}};static overrides={aspectRatio:1,scales:{r:{type:`radialLinear`}}};getLabelAndValue(e){let t=this._cachedMeta.vScale,n=this.getParsed(e);return{label:t.getLabels()[e],value:``+t.getLabelForValue(n[t.axis])}}parseObjectData(e,t,n,r){return Tf.bind(this)(e,t,n,r)}update(e){let t=this._cachedMeta,n=t.dataset,r=t.data||[],i=t.iScale.getLabels();if(n.points=r,e!==`resize`){let t=this.resolveDatasetElementOptions(e);this.options.showLine||(t.borderWidth=0);let a={_loop:!0,_fullLoop:i.length===r.length,options:t};this.updateElement(n,void 0,a,e)}this.updateElements(r,0,r.length,e)}updateElements(e,t,n,r){let i=this._cachedMeta.rScale,a=r===`reset`;for(let o=t;o0&&this.getParsed(t-1);for(let l=t;l0&&Math.abs(n[f]-v[f])>g,h&&(m.parsed=n,m.raw=c.data[l]),d&&(m.options=u||this.resolveDataElementOptions(l,t.active?`active`:r)),_||this.updateElement(t,l,m,r),v=n}this.updateSharedOptions(u,r,l)}getMaxOverflow(){let e=this._cachedMeta,t=e.data||[];if(!this.options.showLine){let e=0;for(let n=t.length-1;n>=0;--n)e=Math.max(e,t[n].size(this.resolveDataElementOptions(n))/2);return e>0&&e}let n=e.dataset,r=n.options&&n.options.borderWidth||0;if(!t.length)return r;let i=t[0].size(this.resolveDataElementOptions(0)),a=t[t.length-1].size(this.resolveDataElementOptions(t.length-1));return Math.max(r,i,a)/2}}});function gm(){throw Error(`This method is not implemented: Check that a complete date adapter is provided.`)}var _m={_date:class e{static override(t){Object.assign(e.prototype,t)}options;constructor(e){this.options=e||{}}init(){}formats(){return gm()}parse(){return gm()}format(){return gm()}add(){return gm()}diff(){return gm()}startOf(){return gm()}endOf(){return gm()}}};function vm(e,t,n,r){let{controller:i,data:a,_sorted:o}=e,s=i._cachedMeta.iScale,c=e.dataset&&e.dataset.options?e.dataset.options.spanGaps:null;if(s&&t===s.axis&&t!==`r`&&o&&a.length){let o=s._reversePixels?qu:Ku;if(!r){let r=o(a,t,n);if(c){let{vScale:t}=i._cachedMeta,{_parsed:n}=e,a=n.slice(0,r.lo+1).reverse().findIndex(e=>!Gl(e[t.axis]));r.lo-=Math.max(0,a);let o=n.slice(r.hi).findIndex(e=>!Gl(e[t.axis]));r.hi+=Math.max(0,o)}return r}else if(i._sharedOptions){let e=a[0],r=typeof e.getRange==`function`&&e.getRange(t);if(r){let e=o(a,t,n-r),i=o(a,t,n+r);return{lo:e.lo,hi:i.hi}}}}return{lo:0,hi:a.length-1}}function ym(e,t,n,r,i){let a=e.getSortedVisibleDatasetMetas(),o=n[t];for(let e=0,n=a.length;e{e[o]&&e[o](t[n],i)&&(a.push({element:e,datasetIndex:r,index:c}),s||=e.inRange(t.x,t.y,i))}),r&&!s?[]:a}var Em={evaluateInteractionItems:ym,modes:{index(e,t,n,r){let i=Gf(t,e),a=n.axis||`x`,o=n.includeInvisible||!1,s=n.intersect?xm(e,i,a,r,o):wm(e,i,a,!1,r,o),c=[];return s.length?(e.getSortedVisibleDatasetMetas().forEach(e=>{let t=s[0].index,n=e.data[t];n&&!n.skip&&c.push({element:n,datasetIndex:e.index,index:t})}),c):[]},dataset(e,t,n,r){let i=Gf(t,e),a=n.axis||`xy`,o=n.includeInvisible||!1,s=n.intersect?xm(e,i,a,r,o):wm(e,i,a,!1,r,o);if(s.length>0){let t=s[0].datasetIndex,n=e.getDatasetMeta(t).data;s=[];for(let e=0;ee.pos===t)}function km(e,t){return e.filter(e=>Dm.indexOf(e.pos)===-1&&e.box.axis===t)}function Am(e,t){return e.sort((e,n)=>{let r=t?n:e,i=t?e:n;return r.weight===i.weight?r.index-i.index:r.weight-i.weight})}function jm(e){let t=[],n,r,i,a,o,s;for(n=0,r=(e||[]).length;ne.box.fullSize),!0),r=Am(Om(t,`left`),!0),i=Am(Om(t,`right`)),a=Am(Om(t,`top`),!0),o=Am(Om(t,`bottom`)),s=km(t,`x`),c=km(t,`y`);return{fullSize:n,leftAndTop:r.concat(a),rightAndBottom:i.concat(c).concat(o).concat(s),chartArea:Om(t,`chartArea`),vertical:r.concat(i).concat(c),horizontal:a.concat(o).concat(s)}}function Fm(e,t,n,r){return Math.max(e[n],t[n])+Math.max(e[r],t[r])}function Im(e,t){e.top=Math.max(e.top,t.top),e.left=Math.max(e.left,t.left),e.bottom=Math.max(e.bottom,t.bottom),e.right=Math.max(e.right,t.right)}function Lm(e,t,n,r){let{pos:i,box:a}=n,o=e.maxPadding;if(!ql(i)){n.size&&(e[i]-=n.size);let t=r[n.stack]||{size:0,count:1};t.size=Math.max(t.size,n.horizontal?a.height:a.width),n.size=t.size/t.count,e[i]+=n.size}a.getPadding&&Im(o,a.getPadding());let s=Math.max(0,t.outerWidth-Fm(o,e,`left`,`right`)),c=Math.max(0,t.outerHeight-Fm(o,e,`top`,`bottom`)),l=s!==e.w,u=c!==e.h;return e.w=s,e.h=c,n.horizontal?{same:l,other:u}:{same:u,other:l}}function Rm(e){let t=e.maxPadding;function n(n){let r=Math.max(t[n]-e[n],0);return e[n]+=r,r}e.y+=n(`top`),e.x+=n(`left`),n(`right`),n(`bottom`)}function zm(e,t){let n=t.maxPadding;function r(e){let r={left:0,top:0,right:0,bottom:0};return e.forEach(e=>{r[e]=Math.max(t[e],n[e])}),r}return r(e?[`left`,`right`]:[`top`,`bottom`])}function Bm(e,t,n,r){let i=[],a,o,s,c,l,u;for(a=0,o=e.length,l=0;a{typeof e.beforeLayout==`function`&&e.beforeLayout()});let u=c.reduce((e,t)=>t.box.options&&t.box.options.display===!1?e:e+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:n,padding:i,availableWidth:a,availableHeight:o,vBoxMaxWidth:a/2/u,hBoxMaxHeight:o/2}),f=Object.assign({},i);Im(f,ef(r));let p=Object.assign({maxPadding:f,w:a,h:o,x:i.left,y:i.top},i),m=Nm(c.concat(l),d);Bm(s.fullSize,p,d,m),Bm(c,p,d,m),Bm(l,p,d,m)&&Bm(c,p,d,m),Rm(p),Hm(s.leftAndTop,p,d,m),p.x+=p.w,p.y+=p.h,Hm(s.rightAndBottom,p,d,m),e.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},eu(s.chartArea,t=>{let n=t.box;Object.assign(n,e.chartArea),n.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}},Wm=class{acquireContext(e,t){}releaseContext(e){return!1}addEventListener(e,t,n){}removeEventListener(e,t,n){}getDevicePixelRatio(){return 1}getMaximumSize(e,t,n,r){return t=Math.max(0,t||e.width),n||=e.height,{width:t,height:Math.max(0,r?Math.floor(t/r):n)}}isAttached(e){return!0}updateConfig(e){}},Gm=class extends Wm{acquireContext(e){return e&&e.getContext&&e.getContext(`2d`)||null}updateConfig(e){e.options.animation=!1}},Km=`$chartjs`,qm={touchstart:`mousedown`,touchmove:`mousemove`,touchend:`mouseup`,pointerenter:`mouseenter`,pointerdown:`mousedown`,pointermove:`mousemove`,pointerup:`mouseup`,pointerleave:`mouseout`,pointerout:`mouseout`},Jm=e=>e===null||e===``;function Ym(e,t){let n=e.style,r=e.getAttribute(`height`),i=e.getAttribute(`width`);if(e[Km]={initial:{height:r,width:i,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||`block`,n.boxSizing=n.boxSizing||`border-box`,Jm(i)){let t=Zf(e,`width`);t!==void 0&&(e.width=t)}if(Jm(r))if(e.style.height===``)e.height=e.width/(t||2);else{let t=Zf(e,`height`);t!==void 0&&(e.height=t)}return e}var Xm=Xf?{passive:!0}:!1;function Zm(e,t,n){e&&e.addEventListener(t,n,Xm)}function Qm(e,t,n){e&&e.canvas&&e.canvas.removeEventListener(t,n,Xm)}function $m(e,t){let n=qm[e.type]||e.type,{x:r,y:i}=Gf(e,t);return{type:n,chart:t,native:e,x:r===void 0?null:r,y:i===void 0?null:i}}function eh(e,t){for(let n of e)if(n===t||n.contains(t))return!0}function th(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=eh(n.addedNodes,r),t&&=!eh(n.removedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}function nh(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=eh(n.removedNodes,r),t&&=!eh(n.addedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}var rh=new Map,ih=0;function ah(){let e=window.devicePixelRatio;e!==ih&&(ih=e,rh.forEach((t,n)=>{n.currentDevicePixelRatio!==e&&t()}))}function oh(e,t){rh.size||window.addEventListener(`resize`,ah),rh.set(e,t)}function sh(e){rh.delete(e),rh.size||window.removeEventListener(`resize`,ah)}function ch(e,t,n){let r=e.canvas,i=r&&Lf(r);if(!i)return;let a=ed((e,t)=>{let r=i.clientWidth;n(e,t),r{let t=e[0],n=t.contentRect.width,r=t.contentRect.height;n===0&&r===0||a(n,r)});return o.observe(i),oh(e,a),o}function lh(e,t,n){n&&n.disconnect(),t===`resize`&&sh(e)}function uh(e,t,n){let r=e.canvas,i=ed(t=>{e.ctx!==null&&n($m(t,e))},e);return Zm(r,t,i),i}var dh=class extends Wm{acquireContext(e,t){let n=e&&e.getContext&&e.getContext(`2d`);return n&&n.canvas===e?(Ym(e,t),n):null}releaseContext(e){let t=e.canvas;if(!t[Km])return!1;let n=t[Km].initial;[`height`,`width`].forEach(e=>{let r=n[e];Gl(r)?t.removeAttribute(e):t.setAttribute(e,r)});let r=n.style||{};return Object.keys(r).forEach(e=>{t.style[e]=r[e]}),t.width=t.width,delete t[Km],!0}addEventListener(e,t,n){this.removeEventListener(e,t);let r=e.$proxies||={};r[t]=({attach:th,detach:nh,resize:ch}[t]||uh)(e,t,n)}removeEventListener(e,t){let n=e.$proxies||={},r=n[t];r&&(({attach:lh,detach:lh,resize:lh}[t]||Qm)(e,t,r),n[t]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,n,r){return Jf(e,t,n,r)}isAttached(e){let t=e&&Lf(e);return!!(t&&t.isConnected)}};function fh(e){return!If()||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas?Gm:dh}var ph=class{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(e){let{x:t,y:n}=this.getProps([`x`,`y`],e);return{x:t,y:n}}hasValue(){return ju(this.x)&&ju(this.y)}getProps(e,t){let n=this.$animations;if(!t||!n)return this;let r={};return e.forEach(e=>{r[e]=n[e]&&n[e].active()?n[e]._to:this[e]}),r}};function mh(e,t){let n=e.options.ticks,r=hh(e),i=Math.min(n.maxTicksLimit||r,r),a=n.major.enabled?_h(t):[],o=a.length,s=a[0],c=a[o-1],l=[];if(o>i)return vh(t,l,a,o/i),l;let u=gh(a,t,i);if(o>0){let e,n,r=o>1?Math.round((c-s)/(o-1)):null;for(yh(t,l,u,Gl(r)?0:s-r,s),e=0,n=o-1;ei)return t}return Math.max(i,1)}function _h(e){let t=[],n,r;for(n=0,r=e.length;ne===`left`?`right`:e===`right`?`left`:e,Sh=(e,t,n)=>t===`top`||t===`left`?e[t]+n:e[t]-n,Ch=(e,t)=>Math.min(t||e,e);function wh(e,t){let n=[],r=e.length/t,i=e.length,a=0;for(;ao+s)))return c}function Eh(e,t){eu(e,e=>{let n=e.gc,r=n.length/2,i;if(r>t){for(i=0;in?n:t,n=r&&t>n?t:n,{min:Yl(t,Yl(n,t)),max:Yl(n,Yl(t,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){return this._labelItems||=this._computeLabelItems(e)}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){$l(this.options.beforeUpdate,[this])}update(e,t,n){let{beginAtZero:r,grace:i,ticks:a}=this.options,o=a.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=t,this._margins=n=Object.assign({left:0,right:0,top:0,bottom:0},n),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+n.left+n.right:this.height+n.top+n.bottom,this._dataLimitsCached||=(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=rf(this,i,r),!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let s=o=i||n<=1||!this.isHorizontal()){this.labelRotation=r;return}let l=this._getLabelSizes(),u=l.widest.width,d=l.highest.height,f=Hu(this.chart.width-u,0,this.maxWidth);o=e.offset?this.maxWidth/n:f/(n-1),u+6>o&&(o=f/(n-(e.offset?.5:1)),s=this.maxHeight-Dh(e.grid)-t.padding-Oh(e.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),a=Fu(Math.min(Math.asin(Hu((l.highest.height+6)/o,-1,1)),Math.asin(Hu(s/c,-1,1))-Math.asin(Hu(d/c,-1,1)))),a=Math.max(r,Math.min(i,a))),this.labelRotation=a}afterCalculateLabelRotation(){$l(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){$l(this.options.beforeFit,[this])}fit(){let e={width:0,height:0},{chart:t,options:{ticks:n,title:r,grid:i}}=this,a=this._isVisible(),o=this.isHorizontal();if(a){let a=Oh(r,t.options.font);if(o?(e.width=this.maxWidth,e.height=Dh(i)+a):(e.height=this.maxHeight,e.width=Dh(i)+a),n.display&&this.ticks.length){let{first:t,last:r,widest:i,highest:a}=this._getLabelSizes(),s=n.padding*2,c=Pu(this.labelRotation),l=Math.cos(c),u=Math.sin(c);if(o){let t=n.mirror?0:u*i.width+l*a.height;e.height=Math.min(this.maxHeight,e.height+t+s)}else{let t=n.mirror?0:l*i.width+u*a.height;e.width=Math.min(this.maxWidth,e.width+t+s)}this._calculatePadding(t,r,u,l)}}this._handleMargins(),o?(this.width=this._length=t.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=t.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,t,n,r){let{ticks:{align:i,padding:a},position:o}=this.options,s=this.labelRotation!==0,c=o!==`top`&&this.axis===`x`;if(this.isHorizontal()){let o=this.getPixelForTick(0)-this.left,l=this.right-this.getPixelForTick(this.ticks.length-1),u=0,d=0;s?c?(u=r*e.width,d=n*t.height):(u=n*e.height,d=r*t.width):i===`start`?d=t.width:i===`end`?u=e.width:i!==`inner`&&(u=e.width/2,d=t.width/2),this.paddingLeft=Math.max((u-o+a)*this.width/(this.width-o),0),this.paddingRight=Math.max((d-l+a)*this.width/(this.width-l),0)}else{let n=t.height/2,r=e.height/2;i===`start`?(n=0,r=e.height):i===`end`&&(n=t.height,r=0),this.paddingTop=n+a,this.paddingBottom=r+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){$l(this.options.afterFit,[this])}isHorizontal(){let{axis:e,position:t}=this.options;return t===`top`||t===`bottom`||e===`x`}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){this.beforeTickToLabelConversion(),this.generateTickLabels(e);let t,n;for(t=0,n=e.length;t({width:a[e]||0,height:o[e]||0});return{first:C(0),last:C(t-1),widest:C(x),highest:C(S),widths:a,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,t){return NaN}getValueForPixel(e){}getPixelForTick(e){let t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);let t=this._startPixel+e*this._length;return Uu(this._alignToPixels?Nd(this.chart,t,0):t)}getDecimalForPixel(e){let t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:e,max:t}=this;return e<0&&t<0?t:e>0&&t>0?e:0}getContext(e){let t=this.ticks||[];if(e>=0&&eo*r?o/n:s/r:s*r0:!!e}_computeGridLineItems(e){let t=this.axis,n=this.chart,r=this.options,{grid:i,position:a,border:o}=r,s=i.offset,c=this.isHorizontal(),l=this.ticks.length+ +!!s,u=Dh(i),d=[],f=o.setContext(this.getContext()),p=f.display?f.width:0,m=p/2,h=function(e){return Nd(n,e,p)},g,_,v,y,b,x,S,C,w,ee,te,ne;if(a===`top`)g=h(this.bottom),x=this.bottom-u,C=g-m,ee=h(e.top)+m,ne=e.bottom;else if(a===`bottom`)g=h(this.top),ee=e.top,ne=h(e.bottom)-m,x=g+m,C=this.top+u;else if(a===`left`)g=h(this.right),b=this.right-u,S=g-m,w=h(e.left)+m,te=e.right;else if(a===`right`)g=h(this.left),w=e.left,te=h(e.right)-m,b=g+m,S=this.left+u;else if(t===`x`){if(a===`center`)g=h((e.top+e.bottom)/2+.5);else if(ql(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}ee=e.top,ne=e.bottom,x=g+m,C=x+u}else if(t===`y`){if(a===`center`)g=h((e.left+e.right)/2);else if(ql(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}b=g-m,S=b-u,w=e.left,te=e.right}let re=Xl(r.ticks.maxTicksLimit,l),ie=Math.max(1,Math.ceil(l/re));for(_=0;_0&&(a-=r/2);break}f={left:a,top:i,width:r+t.width,height:n+t.height,color:e.backdropColor}}h.push({label:y,font:w,textOffset:ne,options:{rotation:m,color:n,strokeColor:s,strokeWidth:l,textAlign:d,textBaseline:re,translation:[b,x],backdrop:f}})}return h}_getXAxisLabelAlignment(){let{position:e,ticks:t}=this.options;if(-Pu(this.labelRotation))return e===`top`?`left`:`right`;let n=`center`;return t.align===`start`?n=`left`:t.align===`end`?n=`right`:t.align===`inner`&&(n=`inner`),n}_getYAxisLabelAlignment(e){let{position:t,ticks:{crossAlign:n,mirror:r,padding:i}}=this.options,a=this._getLabelSizes(),o=e+i,s=a.widest.width,c,l;return t===`left`?r?(l=this.right+i,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l+=s)):(l=this.right-o,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l=this.left)):t===`right`?r?(l=this.left+i,n===`near`?c=`right`:n===`center`?(c=`center`,l-=s/2):(c=`left`,l-=s)):(l=this.left+o,n===`near`?c=`left`:n===`center`?(c=`center`,l+=s/2):(c=`right`,l=this.right)):c=`right`,{textAlign:c,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;let e=this.chart,t=this.options.position;if(t===`left`||t===`right`)return{top:0,left:this.left,bottom:e.height,right:this.right};if(t===`top`||t===`bottom`)return{top:this.top,left:0,bottom:this.bottom,right:e.width}}drawBackground(){let{ctx:e,options:{backgroundColor:t},left:n,top:r,width:i,height:a}=this;t&&(e.save(),e.fillStyle=t,e.fillRect(n,r,i,a),e.restore())}getLineWidthForValue(e){let t=this.options.grid;if(!this._isVisible()||!t.display)return 0;let n=this.ticks.findIndex(t=>t.value===e);return n>=0?t.setContext(this.getContext(n)).lineWidth:0}drawGrid(e){let t=this.options.grid,n=this.ctx,r=this._gridLineItems||=this._computeGridLineItems(e),i,a,o=(e,t,r)=>{!r.width||!r.color||(n.save(),n.lineWidth=r.width,n.strokeStyle=r.color,n.setLineDash(r.borderDash||[]),n.lineDashOffset=r.borderDashOffset,n.beginPath(),n.moveTo(e.x,e.y),n.lineTo(t.x,t.y),n.stroke(),n.restore())};if(t.display)for(i=0,a=r.length;i{this.draw(e)}}]:[{z:r,draw:e=>{this.drawBackground(),this.drawGrid(e),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:n,draw:e=>{this.drawLabels(e)}}]}getMatchingVisibleMetas(e){let t=this.chart.getSortedVisibleDatasetMetas(),n=this.axis+`AxisID`,r=[],i,a;for(i=0,a=t.length;i{let r=n.split(`.`),i=r.pop(),a=[e].concat(r).join(`.`),o=t[n].split(`.`),s=o.pop(),c=o.join(`.`);kd.route(a,i,c,s)})}function Lh(e){return`id`in e&&`defaults`in e}var Rh=new class{constructor(){this.controllers=new Ph(qp,`datasets`,!0),this.elements=new Ph(ph,`elements`),this.plugins=new Ph(Object,`plugins`),this.scales=new Ph(Nh,`scales`),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each(`register`,e)}remove(...e){this._each(`unregister`,e)}addControllers(...e){this._each(`register`,e,this.controllers)}addElements(...e){this._each(`register`,e,this.elements)}addPlugins(...e){this._each(`register`,e,this.plugins)}addScales(...e){this._each(`register`,e,this.scales)}getController(e){return this._get(e,this.controllers,`controller`)}getElement(e){return this._get(e,this.elements,`element`)}getPlugin(e){return this._get(e,this.plugins,`plugin`)}getScale(e){return this._get(e,this.scales,`scale`)}removeControllers(...e){this._each(`unregister`,e,this.controllers)}removeElements(...e){this._each(`unregister`,e,this.elements)}removePlugins(...e){this._each(`unregister`,e,this.plugins)}removeScales(...e){this._each(`unregister`,e,this.scales)}_each(e,t,n){[...t].forEach(t=>{let r=n||this._getRegistryForType(t);n||r.isForType(t)||r===this.plugins&&t.id?this._exec(e,r,t):eu(t,t=>{let r=n||this._getRegistryForType(t);this._exec(e,r,t)})})}_exec(e,t,n){let r=fu(e);$l(n[`before`+r],[],n),t[e](n),$l(n[`after`+r],[],n)}_getRegistryForType(e){for(let t=0;te.filter(e=>!t.some(t=>e.plugin.id===t.plugin.id));this._notify(r(t,n),e,`stop`),this._notify(r(n,t),e,`start`)}};function Bh(e){let t={},n=[],r=Object.keys(Rh.plugins.items);for(let e=0;e1&&qh(e[0].toLowerCase());if(t)return t}throw Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function Xh(e,t,n){if(n[t+`AxisID`]===e)return{axis:t}}function Zh(e,t){if(t.data&&t.data.datasets){let n=t.data.datasets.filter(t=>t.xAxisID===e||t.yAxisID===e);if(n.length)return Xh(e,`x`,n[0])||Xh(e,`y`,n[0])}return{}}function Qh(e,t){let n=Td[e.type]||{scales:{}},r=t.scales||{},i=Wh(e.type,t),a=Object.create(null);return Object.keys(r).forEach(t=>{let o=r[t];if(!ql(o))return console.error(`Invalid scale configuration for scale: ${t}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);let s=Yh(t,o,Zh(t,e),kd.scales[o.type]),c=Kh(s,i),l=n.scales||{};a[t]=ou(Object.create(null),[{axis:s},o,l[s],l[c]])}),e.data.datasets.forEach(n=>{let i=n.type||e.type,o=n.indexAxis||Wh(i,t),s=(Td[i]||{}).scales||{};Object.keys(s).forEach(e=>{let t=Gh(e,o),i=n[t+`AxisID`]||t;a[i]=a[i]||Object.create(null),ou(a[i],[{axis:t},r[i],s[e]])})}),Object.keys(a).forEach(e=>{let t=a[e];ou(t,[kd.scales[t.type],kd.scale])}),a}function $h(e){let t=e.options||={};t.plugins=Xl(t.plugins,{}),t.scales=Qh(e,t)}function eg(e){return e||={},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function tg(e){return e||={},e.data=eg(e.data),$h(e),e}var ng=new Map,rg=new Set;function ig(e,t){let n=ng.get(e);return n||(n=t(),ng.set(e,n),rg.add(n)),n}var ag=(e,t,n)=>{let r=du(t,n);r!==void 0&&e.add(r)},og=class{constructor(e){this._config=tg(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=eg(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){let e=this._config;this.clearCache(),$h(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return ig(e,()=>[[`datasets.${e}`,``]])}datasetAnimationScopeKeys(e,t){return ig(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,``]])}datasetElementScopeKeys(e,t){return ig(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,``]])}pluginScopeKeys(e){let t=e.id,n=this.type;return ig(`${n}-plugin-${t}`,()=>[[`plugins.${t}`,...e.additionalOptionScopes||[]]])}_cachedScopes(e,t){let n=this._scopeCache,r=n.get(e);return(!r||t)&&(r=new Map,n.set(e,r)),r}getOptionScopes(e,t,n){let{options:r,type:i}=this,a=this._cachedScopes(e,n),o=a.get(t);if(o)return o;let s=new Set;t.forEach(t=>{e&&(s.add(e),t.forEach(t=>ag(s,e,t))),t.forEach(e=>ag(s,r,e)),t.forEach(e=>ag(s,Td[i]||{},e)),t.forEach(e=>ag(s,kd,e)),t.forEach(e=>ag(s,Ed,e))});let c=Array.from(s);return c.length===0&&c.push(Object.create(null)),rg.has(t)&&a.set(t,c),c}chartOptionScopes(){let{options:e,type:t}=this;return[e,Td[t]||{},kd.datasets[t]||{},{type:t},kd,Ed]}resolveNamedOptions(e,t,n,r=[``]){let i={$shared:!0},{resolver:a,subPrefixes:o}=sg(this._resolverCache,e,r),s=a;if(lg(a,t)){i.$shared=!1,n=mu(n)?n():n;let t=this.createResolver(e,n,o);s=sf(a,n,t)}for(let e of t)i[e]=s[e];return i}createResolver(e,t,n=[``],r){let{resolver:i}=sg(this._resolverCache,e,n);return ql(t)?sf(i,t,void 0,r):i}};function sg(e,t,n){let r=e.get(t);r||(r=new Map,e.set(t,r));let i=n.join(),a=r.get(i);return a||(a={resolver:of(t,n),subPrefixes:n.filter(e=>!e.toLowerCase().includes(`hover`))},r.set(i,a)),a}var cg=e=>ql(e)&&Object.getOwnPropertyNames(e).some(t=>mu(e[t]));function lg(e,t){let{isScriptable:n,isIndexable:r}=cf(e);for(let i of t){let t=n(i),a=r(i),o=(a||t)&&e[i];if(t&&(mu(o)||cg(o))||a&&Kl(o))return!0}return!1}var ug=`4.5.1`,dg=[`top`,`bottom`,`left`,`right`,`chartArea`];function fg(e,t){return e===`top`||e===`bottom`||dg.indexOf(e)===-1&&t===`x`}function pg(e,t){return function(n,r){return n[e]===r[e]?n[t]-r[t]:n[e]-r[e]}}function mg(e){let t=e.chart,n=t.options.animation;t.notifyPlugins(`afterRender`),$l(n&&n.onComplete,[e],t)}function hg(e){let t=e.chart,n=t.options.animation;$l(n&&n.onProgress,[e],t)}function gg(e){return If()&&typeof e==`string`?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}var _g={},vg=e=>{let t=gg(e);return Object.values(_g).filter(e=>e.canvas===t).pop()};function yg(e,t,n){let r=Object.keys(e);for(let i of r){let r=+i;if(r>=t){let a=e[i];delete e[i],(n>0||r>t)&&(e[r+n]=a)}}}function bg(e,t,n,r){return!n||e.type===`mouseout`?null:r?t:e}var xg=class{static defaults=kd;static instances=_g;static overrides=Td;static registry=Rh;static version=ug;static getChart=vg;static register(...e){Rh.add(...e),Sg()}static unregister(...e){Rh.remove(...e),Sg()}constructor(e,t){let n=this.config=new og(t),r=gg(e),i=vg(r);if(i)throw Error(`Canvas is already in use. Chart with ID '`+i.id+`' must be destroyed before the canvas with ID '`+i.canvas.id+`' can be reused.`);let a=n.createResolver(n.chartOptionScopes(),this.getContext());this.platform=new(n.platform||(fh(r))),this.platform.updateConfig(n);let o=this.platform.acquireContext(r,a.aspectRatio),s=o&&o.canvas,c=s&&s.height,l=s&&s.width;if(this.id=Wl(),this.ctx=o,this.canvas=s,this.width=l,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new zh,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=td(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],_g[this.id]=this,!o||!s){console.error(`Failed to create chart: can't acquire context from the given item`);return}xp.listen(this,`complete`,mg),xp.listen(this,`progress`,hg),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:e,maintainAspectRatio:t},width:n,height:r,_aspectRatio:i}=this;return Gl(e)?t&&i?i:r?n/r:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return Rh}_initialize(){return this.notifyPlugins(`beforeInit`),this.options.responsive?this.resize():Yf(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(`afterInit`),this}clear(){return Pd(this.canvas,this.ctx),this}stop(){return xp.stop(this),this}resize(e,t){xp.running(this)?this._resizeBeforeDraw={width:e,height:t}:this._resize(e,t)}_resize(e,t){let n=this.options,r=this.canvas,i=n.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(r,e,t,i),o=n.devicePixelRatio||this.platform.getDevicePixelRatio(),s=this.width?`resize`:`attach`;this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,Yf(this,o,!0)&&(this.notifyPlugins(`resize`,{size:a}),$l(n.onResize,[this,a],this),this.attached&&this._doResize(s)&&this.render())}ensureScalesHaveIDs(){eu(this.options.scales||{},(e,t)=>{e.id=t})}buildOrUpdateScales(){let e=this.options,t=e.scales,n=this.scales,r=Object.keys(n).reduce((e,t)=>(e[t]=!1,e),{}),i=[];t&&(i=i.concat(Object.keys(t).map(e=>{let n=t[e],r=Yh(e,n),i=r===`r`,a=r===`x`;return{options:n,dposition:i?`chartArea`:a?`bottom`:`left`,dtype:i?`radialLinear`:a?`category`:`linear`}}))),eu(i,t=>{let i=t.options,a=i.id,o=Yh(a,i),s=Xl(i.type,t.dtype);(i.position===void 0||fg(i.position,o)!==fg(t.dposition))&&(i.position=t.dposition),r[a]=!0;let c=null;a in n&&n[a].type===s?c=n[a]:(c=new(Rh.getScale(s))({id:a,type:s,ctx:this.ctx,chart:this}),n[c.id]=c),c.init(i,e)}),eu(r,(e,t)=>{e||delete n[t]}),eu(n,e=>{Um.configure(this,e,e.options),Um.addBox(this,e)})}_updateMetasets(){let e=this._metasets,t=this.data.datasets.length,n=e.length;if(e.sort((e,t)=>e.index-t.index),n>t){for(let e=t;et.length&&delete this._stacks,e.forEach((e,n)=>{t.filter(t=>t===e._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let e=[],t=this.data.datasets,n,r;for(this._removeUnreferencedMetasets(),n=0,r=t.length;n{this.getDatasetMeta(t).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins(`reset`)}update(e){let t=this.config;t.update();let n=this._options=t.createResolver(t.chartOptionScopes(),this.getContext()),r=this._animationsDisabled=!n.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins(`beforeUpdate`,{mode:e,cancelable:!0})===!1)return;let i=this.buildOrUpdateControllers();this.notifyPlugins(`beforeElementsUpdate`);let a=0;for(let e=0,t=this.data.datasets.length;e{e.reset()}),this._updateDatasets(e),this.notifyPlugins(`afterUpdate`,{mode:e}),this._layers.sort(pg(`z`,`_idx`));let{_active:o,_lastEvent:s}=this;s?this._eventHandler(s,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){eu(this.scales,e=>{Um.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let e=this.options;(!hu(new Set(Object.keys(this._listeners)),new Set(e.events))||!!this._responsiveListeners!==e.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:e}=this,t=this._getUniformDataChanges()||[];for(let{method:n,start:r,count:i}of t)yg(e,r,n===`_removeElements`?-i:i)}_getUniformDataChanges(){let e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];let t=this.data.datasets.length,n=t=>new Set(e.filter(e=>e[0]===t).map((e,t)=>t+`,`+e.splice(1).join(`,`))),r=n(0);for(let e=1;ee.split(`,`)).map(e=>({method:e[1],start:+e[2],count:+e[3]}))}_updateLayout(e){if(this.notifyPlugins(`beforeLayout`,{cancelable:!0})===!1)return;Um.update(this,this.width,this.height,e);let t=this.chartArea,n=t.width<=0||t.height<=0;this._layers=[],eu(this.boxes,e=>{n&&e.position===`chartArea`||(e.configure&&e.configure(),this._layers.push(...e._layers()))},this),this._layers.forEach((e,t)=>{e._idx=t}),this.notifyPlugins(`afterLayout`)}_updateDatasets(e){if(this.notifyPlugins(`beforeDatasetsUpdate`,{mode:e,cancelable:!0})!==!1){for(let e=0,t=this.data.datasets.length;e=0;--t)this._drawDataset(e[t]);this.notifyPlugins(`afterDatasetsDraw`)}_drawDataset(e){let t=this.ctx,n={meta:e,index:e.index,cancelable:!0},r=bp(this,e);this.notifyPlugins(`beforeDatasetDraw`,n)!==!1&&(r&&Rd(t,r),e.controller.draw(),r&&zd(t),n.cancelable=!1,this.notifyPlugins(`afterDatasetDraw`,n))}isPointInArea(e){return Ld(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,n,r){let i=Em.modes[t];return typeof i==`function`?i(this,e,n,r):[]}getDatasetMeta(e){let t=this.data.datasets[e],n=this._metasets,r=n.filter(e=>e&&e._dataset===t).pop();return r||(r={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t&&t.order||0,index:e,_dataset:t,_parsed:[],_sorted:!1},n.push(r)),r}getContext(){return this.$context||=af(null,{chart:this,type:`chart`})}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){let t=this.data.datasets[e];if(!t)return!1;let n=this.getDatasetMeta(e);return typeof n.hidden==`boolean`?!n.hidden:!t.hidden}setDatasetVisibility(e,t){let n=this.getDatasetMeta(e);n.hidden=!t}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,t,n){let r=n?`show`:`hide`,i=this.getDatasetMeta(e),a=i.controller._resolveAnimations(void 0,r);pu(t)?(i.data[t].hidden=!n,this.update()):(this.setDatasetVisibility(e,n),a.update(i,{visible:n}),this.update(t=>t.datasetIndex===e?r:void 0))}hide(e,t){this._updateVisibility(e,t,!1)}show(e,t){this._updateVisibility(e,t,!0)}_destroyDatasetMeta(e){let t=this._metasets[e];t&&t.controller&&t.controller._destroy(),delete this._metasets[e]}_stop(){let e,t;for(this.stop(),xp.remove(this),e=0,t=this.data.datasets.length;e{t.addEventListener(this,n,r),e[n]=r},r=(e,t,n)=>{e.offsetX=t,e.offsetY=n,this._eventHandler(e)};eu(this.options.events,e=>n(e,r))}bindResponsiveEvents(){this._responsiveListeners||={};let e=this._responsiveListeners,t=this.platform,n=(n,r)=>{t.addEventListener(this,n,r),e[n]=r},r=(n,r)=>{e[n]&&(t.removeEventListener(this,n,r),delete e[n])},i=(e,t)=>{this.canvas&&this.resize(e,t)},a,o=()=>{r(`attach`,o),this.attached=!0,this.resize(),n(`resize`,i),n(`detach`,a)};a=()=>{this.attached=!1,r(`resize`,i),this._stop(),this._resize(0,0),n(`attach`,o)},t.isAttached(this.canvas)?o():a()}unbindEvents(){eu(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},eu(this._responsiveListeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,t,n){let r=n?`set`:`remove`,i,a,o,s;for(t===`dataset`&&(i=this.getDatasetMeta(e[0].datasetIndex),i.controller[`_`+r+`DatasetHoverStyle`]()),o=0,s=e.length;o{let n=this.getDatasetMeta(e);if(!n)throw Error(`No dataset found at index `+e);return{datasetIndex:e,element:n.data[t],index:t}});tu(n,t)||(this._active=n,this._lastEvent=null,this._updateHoverStyles(n,t))}notifyPlugins(e,t,n){return this._plugins.notify(this,e,t,n)}isPluginEnabled(e){return this._plugins._cache.filter(t=>t.plugin.id===e).length===1}_updateHoverStyles(e,t,n){let r=this.options.hover,i=(e,t)=>e.filter(e=>!t.some(t=>e.datasetIndex===t.datasetIndex&&e.index===t.index)),a=i(t,e),o=n?e:i(e,t);a.length&&this.updateHoverStyle(a,r.mode,!1),o.length&&r.mode&&this.updateHoverStyle(o,r.mode,!0)}_eventHandler(e,t){let n={event:e,replay:t,cancelable:!0,inChartArea:this.isPointInArea(e)},r=t=>(t.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins(`beforeEvent`,n,r)===!1)return;let i=this._handleEvent(e,t,n.inChartArea);return n.cancelable=!1,this.notifyPlugins(`afterEvent`,n,r),(i||n.changed)&&this.render(),this}_handleEvent(e,t,n){let{_active:r=[],options:i}=this,a=t,o=this._getActiveElements(e,r,n,a),s=gu(e),c=bg(e,this._lastEvent,n,s);n&&(this._lastEvent=null,$l(i.onHover,[e,o,this],this),s&&$l(i.onClick,[e,o,this],this));let l=!tu(o,r);return(l||t)&&(this._active=o,this._updateHoverStyles(o,r,t)),this._lastEvent=c,l}_getActiveElements(e,t,n,r){if(e.type===`mouseout`)return[];if(!n)return t;let i=this.options.hover;return this.getElementsAtEventForMode(e,i.mode,i,r)}};function Sg(){return eu(xg.instances,e=>e._plugins.invalidate())}function Cg(e,t,n){let{startAngle:r,x:i,y:a,outerRadius:o,innerRadius:s,options:c}=t,{borderWidth:l,borderJoinStyle:u}=c,d=Math.min(l/o,Bu(r-n));if(e.beginPath(),e.arc(i,a,o-l/2,r+d/2,n-d/2),s>0){let t=Math.min(l/s,Bu(r-n));e.arc(i,a,s+l/2,n-t/2,r+t/2,!0)}else{let t=Math.min(l/2,o*Bu(r-n));if(u===`round`)e.arc(i,a,t,n-_u/2,r+_u/2,!0);else if(u===`bevel`){let o=2*t*t,s=-o*Math.cos(n+_u/2)+i,c=-o*Math.sin(n+_u/2)+a,l=o*Math.cos(r+_u/2)+i,u=o*Math.sin(r+_u/2)+a;e.lineTo(s,c),e.lineTo(l,u)}}e.closePath(),e.moveTo(0,0),e.rect(0,0,e.canvas.width,e.canvas.height),e.clip(`evenodd`)}function wg(e,t,n){let{startAngle:r,pixelMargin:i,x:a,y:o,outerRadius:s,innerRadius:c}=t,l=i/s;e.beginPath(),e.arc(a,o,s,r-l,n+l),c>i?(l=i/c,e.arc(a,o,c,n+l,r-l,!0)):e.arc(a,o,i,n+Su,r-Su),e.closePath(),e.clip()}function Tg(e){return Zd(e,[`outerStart`,`outerEnd`,`innerStart`,`innerEnd`])}function Eg(e,t,n,r){let i=Tg(e.options.borderRadius),a=(n-t)/2,o=Math.min(a,r*t/2),s=e=>{let t=(n-Math.min(a,e))*r/2;return Hu(e,0,Math.min(a,t))};return{outerStart:s(i.outerStart),outerEnd:s(i.outerEnd),innerStart:Hu(i.innerStart,0,o),innerEnd:Hu(i.innerEnd,0,o)}}function Dg(e,t,n,r){return{x:n+e*Math.cos(t),y:r+e*Math.sin(t)}}function Og(e,t,n,r,i,a){let{x:o,y:s,startAngle:c,pixelMargin:l,innerRadius:u}=t,d=Math.max(t.outerRadius+r+n-l,0),f=u>0?u+r+n+l:0,p=0,m=i-c;if(r){let e=((u>0?u-r:0)+(d>0?d-r:0))/2;p=(m-(e===0?m:m*e/(e+r)))/2}let h=(m-Math.max(.001,m*d-n/_u)/d)/2,g=c+h+p,_=i-h-p,{outerStart:v,outerEnd:y,innerStart:b,innerEnd:x}=Eg(t,f,d,_-g),S=d-v,C=d-y,w=g+v/S,ee=_-y/C,te=f+b,ne=f+x,re=g+b/te,ie=_-x/ne;if(e.beginPath(),a){let t=(w+ee)/2;if(e.arc(o,s,d,w,t),e.arc(o,s,d,t,ee),y>0){let t=Dg(C,ee,o,s);e.arc(t.x,t.y,y,ee,_+Su)}let n=Dg(ne,_,o,s);if(e.lineTo(n.x,n.y),x>0){let t=Dg(ne,ie,o,s);e.arc(t.x,t.y,x,_+Su,ie+Math.PI)}let r=(_-x/f+(g+b/f))/2;if(e.arc(o,s,f,_-x/f,r,!0),e.arc(o,s,f,r,g+b/f,!0),b>0){let t=Dg(te,re,o,s);e.arc(t.x,t.y,b,re+Math.PI,g-Su)}let i=Dg(S,g,o,s);if(e.lineTo(i.x,i.y),v>0){let t=Dg(S,w,o,s);e.arc(t.x,t.y,v,g-Su,w)}}else{e.moveTo(o,s);let t=Math.cos(w)*d+o,n=Math.sin(w)*d+s;e.lineTo(t,n);let r=Math.cos(ee)*d+o,i=Math.sin(ee)*d+s;e.lineTo(r,i)}e.closePath()}function kg(e,t,n,r,i){let{fullCircles:a,startAngle:o,circumference:s}=t,c=t.endAngle;if(a){Og(e,t,n,r,c,i);for(let t=0;t=_u&&p===0&&u!==`miter`&&Cg(e,t,h),a||(Og(e,t,n,r,h,i),e.stroke())}var jg=class extends ph{static id=`arc`;static defaults={borderAlign:`center`,borderColor:`#fff`,borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:`backgroundColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(e){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,t,n){let{angle:r,distance:i}=Lu(this.getProps([`x`,`y`],n),{x:e,y:t}),{startAngle:a,endAngle:o,innerRadius:s,outerRadius:c,circumference:l}=this.getProps([`startAngle`,`endAngle`,`innerRadius`,`outerRadius`,`circumference`],n),u=(this.options.spacing+this.options.borderWidth)/2,d=Xl(l,o-a),f=Vu(r,a,o)&&a!==o,p=d>=vu||f,m=Wu(i,s+u,c+u);return p&&m}getCenterPoint(e){let{x:t,y:n,startAngle:r,endAngle:i,innerRadius:a,outerRadius:o}=this.getProps([`x`,`y`,`startAngle`,`endAngle`,`innerRadius`,`outerRadius`],e),{offset:s,spacing:c}=this.options,l=(r+i)/2,u=(a+o+c+s)/2;return{x:t+Math.cos(l)*u,y:n+Math.sin(l)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){let{options:t,circumference:n}=this,r=(t.offset||0)/4,i=(t.spacing||0)/2,a=t.circular;if(this.pixelMargin=t.borderAlign===`inner`?.33:0,this.fullCircles=n>vu?Math.floor(n/vu):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();let o=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(o)*r,Math.sin(o)*r);let s=r*(1-Math.sin(Math.min(_u,n||0)));e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,kg(e,this,s,i,a),Ag(e,this,s,i,a),e.restore()}};function Mg(e,t,n=t){e.lineCap=Xl(n.borderCapStyle,t.borderCapStyle),e.setLineDash(Xl(n.borderDash,t.borderDash)),e.lineDashOffset=Xl(n.borderDashOffset,t.borderDashOffset),e.lineJoin=Xl(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=Xl(n.borderWidth,t.borderWidth),e.strokeStyle=Xl(n.borderColor,t.borderColor)}function Ng(e,t,n){e.lineTo(n.x,n.y)}function Pg(e){return e.stepped?Bd:e.tension||e.cubicInterpolationMode===`monotone`?Vd:Ng}function Fg(e,t,n={}){let r=e.length,{start:i=0,end:a=r-1}=n,{start:o,end:s}=t,c=Math.max(i,o),l=Math.min(a,s),u=is&&a>s;return{count:r,start:c,loop:t.loop,ilen:l(o+(l?s-e:e))%a,y=()=>{h!==g&&(e.lineTo(u,g),e.lineTo(u,h),e.lineTo(u,_))};for(c&&(p=i[v(0)],e.moveTo(p.x,p.y)),f=0;f<=s;++f){if(p=i[v(f)],p.skip)continue;let t=p.x,n=p.y,r=t|0;r===m?(ng&&(g=n),u=(d*u+t)/++d):(y(),e.lineTo(t,n),m=r,d=0,h=g=n),_=n}y()}function Rg(e){let t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&t.cubicInterpolationMode!==`monotone`&&!t.stepped&&!n?Lg:Ig}function zg(e){return e.stepped?$f:e.tension||e.cubicInterpolationMode===`monotone`?ep:Qf}function Bg(e,t,n,r){let i=t._path;i||(i=t._path=new Path2D,t.path(i,n,r)&&i.closePath()),Mg(e,t.options),e.stroke(i)}function Vg(e,t,n,r){let{segments:i,options:a}=t,o=Rg(t);for(let s of i)Mg(e,a,s.style),e.beginPath(),o(e,t,s,{start:n,end:n+r-1})&&e.closePath(),e.stroke()}var Hg=typeof Path2D==`function`;function Ug(e,t,n,r){Hg&&!t.options.segment?Bg(e,t,n,r):Vg(e,t,n,r)}var Wg=class extends ph{static id=`line`;static defaults={borderCapStyle:`butt`,borderDash:[],borderDashOffset:0,borderJoinStyle:`miter`,borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:`default`,fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:`backgroundColor`,borderColor:`borderColor`};static descriptors={_scriptable:!0,_indexable:e=>e!==`borderDash`&&e!==`fill`};constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,t){let n=this.options;if((n.tension||n.cubicInterpolationMode===`monotone`)&&!n.stepped&&!this._pointsUpdated){let r=n.spanGaps?this._loop:this._fullLoop;Ff(this._points,n,e,r,t),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||=pp(this,this.options.segment)}first(){let e=this.segments,t=this.points;return e.length&&t[e[0].start]}last(){let e=this.segments,t=this.points,n=e.length;return n&&t[e[n-1].end]}interpolate(e,t){let n=this.options,r=e[t],i=this.points,a=up(this,{property:t,start:r,end:r});if(!a.length)return;let o=[],s=zg(n),c,l;for(c=0,l=a.length;ce.replace(`rgb(`,`rgba(`).replace(`)`,`, 0.5)`));function a_(e){return r_[e%r_.length]}function o_(e){return i_[e%i_.length]}function s_(e,t){return e.borderColor=a_(t),e.backgroundColor=o_(t),++t}function c_(e,t){return e.backgroundColor=e.data.map(()=>a_(t++)),t}function l_(e,t){return e.backgroundColor=e.data.map(()=>o_(t++)),t}function u_(e){let t=0;return(n,r)=>{let i=e.getDatasetMeta(r).controller;i instanceof fm?t=c_(n,t):i instanceof mm?t=l_(n,t):i&&(t=s_(n,t))}}function d_(e){let t;for(t in e)if(e[t].borderColor||e[t].backgroundColor)return!0;return!1}function f_(e){return e&&(e.borderColor||e.backgroundColor)}function p_(){return kd.borderColor!==`rgba(0,0,0,0.1)`||kd.backgroundColor!==`rgba(0,0,0,0.1)`}var m_={id:`colors`,defaults:{enabled:!0,forceOverride:!1},beforeLayout(e,t,n){if(!n.enabled)return;let{data:{datasets:r},options:i}=e.config,{elements:a}=i,o=d_(r)||f_(i)||a&&d_(a)||p_();if(!n.forceOverride&&o)return;let s=u_(e);r.forEach(s)}};function h_(e,t,n,r,i){let a=i.samples||r;if(a>=n)return e.slice(t,t+n);let o=[],s=(n-2)/(a-2),c=0,l=t+n-1,u=t,d,f,p,m,h;for(o[c++]=e[u],d=0;dp&&(p=m,f=e[a],h=a);o[c++]=f,u=h}return o[c++]=e[l],o}function g_(e,t,n,r){let i=0,a=0,o,s,c,l,u,d,f,p,m,h,g=[],_=t+n-1,v=e[t].x,y=e[_].x-v;for(o=t;oh&&(h=l,f=o),i=(a*i+s.x)/++a;else{let n=o-1;if(!Gl(d)&&!Gl(f)){let t=Math.min(d,f),r=Math.max(d,f);t!==p&&t!==n&&g.push({...e[t],x:i}),r!==p&&r!==n&&g.push({...e[r],x:i})}o>0&&n!==p&&g.push(e[n]),g.push(s),u=t,a=0,m=h=l,d=f=p=o}}return g}function __(e){if(e._decimated){let t=e._data;delete e._decimated,delete e._data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function v_(e){e.data.datasets.forEach(e=>{__(e)})}function y_(e,t){let n=t.length,r=0,i,{iScale:a}=e,{min:o,max:s,minDefined:c,maxDefined:l}=a.getUserBounds();return c&&(r=Hu(Ku(t,a.axis,o).lo,0,n-1)),i=l?Hu(Ku(t,a.axis,s).hi+1,r,n)-r:n-r,{start:r,count:i}}var b_={id:`decimation`,defaults:{algorithm:`min-max`,enabled:!1},beforeElementsUpdate:(e,t,n)=>{if(!n.enabled){v_(e);return}let r=e.width;e.data.datasets.forEach((t,i)=>{let{_data:a,indexAxis:o}=t,s=e.getDatasetMeta(i),c=a||t.data;if(nf([o,e.options.indexAxis])===`y`||!s.controller.supportsDecimation)return;let l=e.scales[s.xAxisID];if(l.type!==`linear`&&l.type!==`time`||e.options.parsing)return;let{start:u,count:d}=y_(s,c);if(d<=(n.threshold||4*r)){__(t);return}Gl(a)&&(t._data=c,delete t.data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(e){this._data=e}}));let f;switch(n.algorithm){case`lttb`:f=h_(c,u,d,r,n);break;case`min-max`:f=g_(c,u,d,r);break;default:throw Error(`Unsupported decimation algorithm '${n.algorithm}'`)}t._decimated=f})},destroy(e){v_(e)}};function x_(e,t,n){let r=e.segments,i=e.points,a=t.points,o=[];for(let e of r){let{start:r,end:s}=e;s=w_(r,s,i);let c=S_(n,i[r],i[s],e.loop);if(!t.segments){o.push({source:e,target:c,start:i[r],end:i[s]});continue}let l=up(t,c);for(let t of l){let r=S_(n,a[t.start],a[t.end],t.loop),s=lp(e,i,r);for(let e of s)o.push({source:e,target:t,start:{[n]:T_(c,r,`start`,Math.max)},end:{[n]:T_(c,r,`end`,Math.min)}})}}return o}function S_(e,t,n,r){if(r)return;let i=t[e],a=n[e];return e===`angle`&&(i=Bu(i),a=Bu(a)),{property:e,start:i,end:a}}function C_(e,t){let{x:n=null,y:r=null}=e||{},i=t.points,a=[];return t.segments.forEach(({start:e,end:t})=>{t=w_(e,t,i);let o=i[e],s=i[t];r===null?n!==null&&(a.push({x:n,y:o.y}),a.push({x:n,y:s.y})):(a.push({x:o.x,y:r}),a.push({x:s.x,y:r}))}),a}function w_(e,t,n){for(;t>e;t--){let e=n[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function T_(e,t,n,r){return e&&t?r(e[n],t[n]):e?e[n]:t?t[n]:0}function E_(e,t){let n=[],r=!1;return Kl(e)?(r=!0,n=e):n=C_(e,t),n.length?new Wg({points:n,options:{tension:0},_loop:r,_fullLoop:r}):null}function D_(e){return e&&e.fill!==!1}function O_(e,t,n){let r=e[t].fill,i=[t],a;if(!n)return r;for(;r!==!1&&i.indexOf(r)===-1;){if(!Jl(r))return r;if(a=e[r],!a)return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function k_(e,t,n){let r=N_(e);if(ql(r))return!isNaN(r.value)&&r;let i=parseFloat(r);return Jl(i)&&Math.floor(i)===i?A_(r[0],t,i,n):[`origin`,`start`,`end`,`stack`,`shape`].indexOf(r)>=0&&r}function A_(e,t,n,r){return(e===`-`||e===`+`)&&(n=t+n),n===t||n<0||n>=r?!1:n}function j_(e,t){let n=null;return e===`start`?n=t.bottom:e===`end`?n=t.top:ql(e)?n=t.getPixelForValue(e.value):t.getBasePixel&&(n=t.getBasePixel()),n}function M_(e,t,n){let r;return r=e===`start`?n:e===`end`?t.options.reverse?t.min:t.max:ql(e)?e.value:t.getBaseValue(),r}function N_(e){let t=e.options,n=t.fill,r=Xl(n&&n.target,n);return r===void 0&&(r=!!t.backgroundColor),r===!1||r===null?!1:r===!0?`origin`:r}function P_(e){let{scale:t,index:n,line:r}=e,i=[],a=r.segments,o=r.points,s=F_(t,n);s.push(E_({x:null,y:t.bottom},r));for(let e=0;e=0;--t){let n=i[t].$filler;n&&(n.line.updateControlPoints(a,n.axis),r&&n.fill&&W_(e.ctx,n,a))}},beforeDatasetsDraw(e,t,n){if(n.drawTime!==`beforeDatasetsDraw`)return;let r=e.getSortedVisibleDatasetMetas();for(let t=r.length-1;t>=0;--t){let n=r[t].$filler;D_(n)&&W_(e.ctx,n,e.chartArea)}},beforeDatasetDraw(e,t,n){let r=t.meta.$filler;!D_(r)||n.drawTime!==`beforeDatasetDraw`||W_(e.ctx,r,e.chartArea)},defaults:{propagate:!0,drawTime:`beforeDatasetDraw`}},Q_=(e,t)=>{let{boxHeight:n=t,boxWidth:r=t}=e;return e.usePointStyle&&(n=Math.min(n,t),r=e.pointStyleWidth||Math.min(r,t)),{boxWidth:r,boxHeight:n,itemHeight:Math.max(t,n)}},$_=(e,t)=>e!==null&&t!==null&&e.datasetIndex===t.datasetIndex&&e.index===t.index,ev=class extends ph{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t,n){this.maxWidth=e,this.maxHeight=t,this._margins=n,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let e=this.options.labels||{},t=$l(e.generateLabels,[this.chart],this)||[];e.filter&&(t=t.filter(t=>e.filter(t,this.chart.data))),e.sort&&(t=t.sort((t,n)=>e.sort(t,n,this.chart.data))),this.options.reverse&&t.reverse(),this.legendItems=t}fit(){let{options:e,ctx:t}=this;if(!e.display){this.width=this.height=0;return}let n=e.labels,r=tf(n.font),i=r.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:s}=Q_(n,i),c,l;t.font=r.string,this.isHorizontal()?(c=this.maxWidth,l=this._fitRows(a,i,o,s)+10):(l=this.maxHeight,c=this._fitCols(a,r,o,s)+10),this.width=Math.min(c,e.maxWidth||this.maxWidth),this.height=Math.min(l,e.maxHeight||this.maxHeight)}_fitRows(e,t,n,r){let{ctx:i,maxWidth:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.lineWidths=[0],l=r+o,u=e;i.textAlign=`left`,i.textBaseline=`middle`;let d=-1,f=-l;return this.legendItems.forEach((e,p)=>{let m=n+t/2+i.measureText(e.text).width;(p===0||c[c.length-1]+m+2*o>a)&&(u+=l,c[c.length-(p>0?0:1)]=0,f+=l,d++),s[p]={left:0,top:f,row:d,width:m,height:r},c[c.length-1]+=m+o}),u}_fitCols(e,t,n,r){let{ctx:i,maxHeight:a,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],c=this.columnSizes=[],l=a-e,u=o,d=0,f=0,p=0,m=0;return this.legendItems.forEach((e,a)=>{let{itemWidth:h,itemHeight:g}=tv(n,t,i,e,r);a>0&&f+g+2*o>l&&(u+=d+o,c.push({width:d,height:f}),p+=d+o,m++,d=f=0),s[a]={left:p,top:f,col:m,width:h,height:g},d=Math.max(d,h),f+=g+o}),u+=d,c.push({width:d,height:f}),u}adjustHitBoxes(){if(!this.options.display)return;let e=this._computeTitleHeight(),{legendHitBoxes:t,options:{align:n,labels:{padding:r},rtl:i}}=this,a=rp(i,this.left,this.width);if(this.isHorizontal()){let i=0,o=rd(n,this.left+r,this.right-this.lineWidths[i]);for(let s of t)i!==s.row&&(i=s.row,o=rd(n,this.left+r,this.right-this.lineWidths[i])),s.top+=this.top+e+r,s.left=a.leftForLtr(a.x(o),s.width),o+=s.width+r}else{let i=0,o=rd(n,this.top+e+r,this.bottom-this.columnSizes[i].height);for(let s of t)s.col!==i&&(i=s.col,o=rd(n,this.top+e+r,this.bottom-this.columnSizes[i].height)),s.top=o,s.left+=this.left+r,s.left=a.leftForLtr(a.x(s.left),s.width),o+=s.height+r}}isHorizontal(){return this.options.position===`top`||this.options.position===`bottom`}draw(){if(this.options.display){let e=this.ctx;Rd(e,this),this._draw(),zd(e)}}_draw(){let{options:e,columnSizes:t,lineWidths:n,ctx:r}=this,{align:i,labels:a}=e,o=kd.color,s=rp(e.rtl,this.left,this.width),c=tf(a.font),{padding:l}=a,u=c.size,d=u/2,f;this.drawTitle(),r.textAlign=s.textAlign(`left`),r.textBaseline=`middle`,r.lineWidth=.5,r.font=c.string;let{boxWidth:p,boxHeight:m,itemHeight:h}=Q_(a,u),g=function(e,t,n){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;r.save();let i=Xl(n.lineWidth,1);if(r.fillStyle=Xl(n.fillStyle,o),r.lineCap=Xl(n.lineCap,`butt`),r.lineDashOffset=Xl(n.lineDashOffset,0),r.lineJoin=Xl(n.lineJoin,`miter`),r.lineWidth=i,r.strokeStyle=Xl(n.strokeStyle,o),r.setLineDash(Xl(n.lineDash,[])),a.usePointStyle){let o={radius:m*Math.SQRT2/2,pointStyle:n.pointStyle,rotation:n.rotation,borderWidth:i},c=s.xPlus(e,p/2),l=t+d;Id(r,o,c,l,a.pointStyleWidth&&p)}else{let a=t+Math.max((u-m)/2,0),o=s.leftForLtr(e,p),c=$d(n.borderRadius);r.beginPath(),Object.values(c).some(e=>e!==0)?Kd(r,{x:o,y:a,w:p,h:m,radius:c}):r.rect(o,a,p,m),r.fill(),i!==0&&r.stroke()}r.restore()},_=function(e,t,n){Gd(r,n.text,e,t+h/2,c,{strikethrough:n.hidden,textAlign:s.textAlign(n.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();f=v?{x:rd(i,this.left+l,this.right-n[0]),y:this.top+l+y,line:0}:{x:this.left+l,y:rd(i,this.top+y+l,this.bottom-t[0].height),line:0},ip(this.ctx,e.textDirection);let b=h+l;this.legendItems.forEach((o,u)=>{r.strokeStyle=o.fontColor,r.fillStyle=o.fontColor;let m=r.measureText(o.text).width,h=s.textAlign(o.textAlign||=a.textAlign),x=p+d+m,S=f.x,C=f.y;s.setWidth(this.width),v?u>0&&S+x+l>this.right&&(C=f.y+=b,f.line++,S=f.x=rd(i,this.left+l,this.right-n[f.line])):u>0&&C+b>this.bottom&&(S=f.x=S+t[f.line].width+l,f.line++,C=f.y=rd(i,this.top+y+l,this.bottom-t[f.line].height));let w=s.x(S);if(g(w,C,o),S=id(h,S+p+d,v?S+x:this.right,e.rtl),_(s.x(S),C,o),v)f.x+=x+l;else if(typeof o.text!=`string`){let e=c.lineHeight;f.y+=iv(o,e)+l}else f.y+=b}),ap(this.ctx,e.textDirection)}drawTitle(){let e=this.options,t=e.title,n=tf(t.font),r=ef(t.padding);if(!t.display)return;let i=rp(e.rtl,this.left,this.width),a=this.ctx,o=t.position,s=n.size/2,c=r.top+s,l,u=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),l=this.top+c,u=rd(e.align,u,this.right-d);else{let t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);l=c+rd(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}let f=rd(o,u,u+d);a.textAlign=i.textAlign(nd(o)),a.textBaseline=`middle`,a.strokeStyle=t.color,a.fillStyle=t.color,a.font=n.string,Gd(a,t.text,f,l,n)}_computeTitleHeight(){let e=this.options.title,t=tf(e.font),n=ef(e.padding);return e.display?t.lineHeight+n.height:0}_getLegendItemAt(e,t){let n,r,i;if(Wu(e,this.left,this.right)&&Wu(t,this.top,this.bottom)){for(i=this.legendHitBoxes,n=0;ne.length>t.length?e:t)),t+n.size/2+r.measureText(i).width}function rv(e,t,n){let r=e;return typeof t.text!=`string`&&(r=iv(t,n)),r}function iv(e,t){return t*(e.text?e.text.length:0)}function av(e,t){return!!((e===`mousemove`||e===`mouseout`)&&(t.onHover||t.onLeave)||t.onClick&&(e===`click`||e===`mouseup`))}var ov={id:`legend`,_element:ev,start(e,t,n){let r=e.legend=new ev({ctx:e.ctx,options:n,chart:e});Um.configure(e,r,n),Um.addBox(e,r)},stop(e){Um.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,n){let r=e.legend;Um.configure(e,r,n),r.options=n},afterUpdate(e){let t=e.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(e,t){t.replay||e.legend.handleEvent(t.event)},defaults:{display:!0,position:`top`,align:`center`,fullSize:!0,reverse:!1,weight:1e3,onClick(e,t,n){let r=t.datasetIndex,i=n.chart;i.isDatasetVisible(r)?(i.hide(r),t.hidden=!0):(i.show(r),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){let t=e.data.datasets,{labels:{usePointStyle:n,pointStyle:r,textAlign:i,color:a,useBorderRadius:o,borderRadius:s}}=e.legend.options;return e._getSortedDatasetMetas().map(e=>{let c=e.controller.getStyle(n?0:void 0),l=ef(c.borderWidth);return{text:t[e.index].label,fillStyle:c.backgroundColor,fontColor:a,hidden:!e.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:c.borderColor,pointStyle:r||c.pointStyle,rotation:c.rotation,textAlign:i||c.textAlign,borderRadius:o&&(s||c.borderRadius),datasetIndex:e.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:`center`,text:``}},descriptors:{_scriptable:e=>!e.startsWith(`on`),labels:{_scriptable:e=>![`generateLabels`,`filter`,`sort`].includes(e)}}},sv=class extends ph{constructor(e){super(),this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,t){let n=this.options;if(this.left=0,this.top=0,!n.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=e,this.height=this.bottom=t;let r=Kl(n.text)?n.text.length:1;this._padding=ef(n.padding);let i=r*tf(n.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=i:this.width=i}isHorizontal(){let e=this.options.position;return e===`top`||e===`bottom`}_drawArgs(e){let{top:t,left:n,bottom:r,right:i,options:a}=this,o=a.align,s=0,c,l,u;return this.isHorizontal()?(l=rd(o,n,i),u=t+e,c=i-n):(a.position===`left`?(l=n+e,u=rd(o,r,t),s=_u*-.5):(l=i-e,u=rd(o,t,r),s=_u*.5),c=r-t),{titleX:l,titleY:u,maxWidth:c,rotation:s}}draw(){let e=this.ctx,t=this.options;if(!t.display)return;let n=tf(t.font),r=n.lineHeight/2+this._padding.top,{titleX:i,titleY:a,maxWidth:o,rotation:s}=this._drawArgs(r);Gd(e,t.text,0,0,n,{color:t.color,maxWidth:o,rotation:s,textAlign:nd(t.align),textBaseline:`middle`,translation:[i,a]})}};function cv(e,t){let n=new sv({ctx:e.ctx,options:t,chart:e});Um.configure(e,n,t),Um.addBox(e,n),e.titleBlock=n}var lv={id:`title`,_element:sv,start(e,t,n){cv(e,n)},stop(e){let t=e.titleBlock;Um.removeBox(e,t),delete e.titleBlock},beforeUpdate(e,t,n){let r=e.titleBlock;Um.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`bold`},fullSize:!0,padding:10,position:`top`,text:``,weight:2e3},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},uv=new WeakMap,dv={id:`subtitle`,start(e,t,n){let r=new sv({ctx:e.ctx,options:n,chart:e});Um.configure(e,r,n),Um.addBox(e,r),uv.set(e,r)},stop(e){Um.removeBox(e,uv.get(e)),uv.delete(e)},beforeUpdate(e,t,n){let r=uv.get(e);Um.configure(e,r,n),r.options=n},defaults:{align:`center`,display:!1,font:{weight:`normal`},fullSize:!0,padding:0,position:`top`,text:``,weight:1500},defaultRoutes:{color:`color`},descriptors:{_scriptable:!0,_indexable:!1}},fv={average(e){if(!e.length)return!1;let t,n,r=new Set,i=0,a=0;for(t=0,n=e.length;te+t)/r.size,y:i/a}},nearest(e,t){if(!e.length)return!1;let n=t.x,r=t.y,i=1/0,a,o,s;for(a=0,o=e.length;a-1?e.split(` -`):e}function hv(e,t){let{element:n,datasetIndex:r,index:i}=t,a=e.getDatasetMeta(r).controller,{label:o,value:s}=a.getLabelAndValue(i);return{chart:e,label:o,parsed:a.getParsed(i),raw:e.data.datasets[r].data[i],formattedValue:s,dataset:a.getDataset(),dataIndex:i,datasetIndex:r,element:n}}function gv(e,t){let n=e.chart.ctx,{body:r,footer:i,title:a}=e,{boxWidth:o,boxHeight:s}=t,c=tf(t.bodyFont),l=tf(t.titleFont),u=tf(t.footerFont),d=a.length,f=i.length,p=r.length,m=ef(t.padding),h=m.height,g=0,_=r.reduce((e,t)=>e+t.before.length+t.lines.length+t.after.length,0);if(_+=e.beforeBody.length+e.afterBody.length,d&&(h+=d*l.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),_){let e=t.displayColors?Math.max(s,c.lineHeight):c.lineHeight;h+=p*e+(_-p)*c.lineHeight+(_-1)*t.bodySpacing}f&&(h+=t.footerMarginTop+f*u.lineHeight+(f-1)*t.footerSpacing);let v=0,y=function(e){g=Math.max(g,n.measureText(e).width+v)};return n.save(),n.font=l.string,eu(e.title,y),n.font=c.string,eu(e.beforeBody.concat(e.afterBody),y),v=t.displayColors?o+2+t.boxPadding:0,eu(r,e=>{eu(e.before,y),eu(e.lines,y),eu(e.after,y)}),v=0,n.font=u.string,eu(e.footer,y),n.restore(),g+=m.width,{width:g,height:h}}function _v(e,t){let{y:n,height:r}=t;return ne.height-r/2?`bottom`:`center`}function vv(e,t,n,r){let{x:i,width:a}=r,o=n.caretSize+n.caretPadding;if(e===`left`&&i+a+o>t.width||e===`right`&&i-a-o<0)return!0}function yv(e,t,n,r){let{x:i,width:a}=n,{width:o,chartArea:{left:s,right:c}}=e,l=`center`;return r===`center`?l=i<=(s+c)/2?`left`:`right`:i<=a/2?l=`left`:i>=o-a/2&&(l=`right`),vv(l,e,t,n)&&(l=`center`),l}function bv(e,t,n){let r=n.yAlign||t.yAlign||_v(e,n);return{xAlign:n.xAlign||t.xAlign||yv(e,t,n,r),yAlign:r}}function xv(e,t){let{x:n,width:r}=e;return t===`right`?n-=r:t===`center`&&(n-=r/2),n}function Sv(e,t,n){let{y:r,height:i}=e;return t===`top`?r+=n:t===`bottom`?r-=i+n:r-=i/2,r}function Cv(e,t,n,r){let{caretSize:i,caretPadding:a,cornerRadius:o}=e,{xAlign:s,yAlign:c}=n,l=i+a,{topLeft:u,topRight:d,bottomLeft:f,bottomRight:p}=$d(o),m=xv(t,s),h=Sv(t,c,l);return c===`center`?s===`left`?m+=l:s===`right`&&(m-=l):s===`left`?m-=Math.max(u,f)+i:s===`right`&&(m+=Math.max(d,p)+i),{x:Hu(m,0,r.width-t.width),y:Hu(h,0,r.height-t.height)}}function wv(e,t,n){let r=ef(n.padding);return t===`center`?e.x+e.width/2:t===`right`?e.x+e.width-r.right:e.x+r.left}function Tv(e){return pv([],mv(e))}function Ev(e,t,n){return af(e,{tooltip:t,tooltipItems:n,type:`tooltip`})}function Dv(e,t){let n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}var Ov={beforeTitle:Ul,title(e){if(e.length>0){let t=e[0],n=t.chart.data.labels,r=n?n.length:0;if(this&&this.options&&this.options.mode===`dataset`)return t.dataset.label||``;if(t.label)return t.label;if(r>0&&t.dataIndex{let t={before:[],lines:[],after:[]},i=Dv(n,e);pv(t.before,mv(kv(i,`beforeLabel`,this,e))),pv(t.lines,kv(i,`label`,this,e)),pv(t.after,mv(kv(i,`afterLabel`,this,e))),r.push(t)}),r}getAfterBody(e,t){return Tv(kv(t.callbacks,`afterBody`,this,e))}getFooter(e,t){let{callbacks:n}=t,r=kv(n,`beforeFooter`,this,e),i=kv(n,`footer`,this,e),a=kv(n,`afterFooter`,this,e),o=[];return o=pv(o,mv(r)),o=pv(o,mv(i)),o=pv(o,mv(a)),o}_createItems(e){let t=this._active,n=this.chart.data,r=[],i=[],a=[],o=[],s,c;for(s=0,c=t.length;se.filter(t,r,i,n))),e.itemSort&&(o=o.sort((t,r)=>e.itemSort(t,r,n))),eu(o,t=>{let n=Dv(e.callbacks,t);r.push(kv(n,`labelColor`,this,t)),i.push(kv(n,`labelPointStyle`,this,t)),a.push(kv(n,`labelTextColor`,this,t))}),this.labelColors=r,this.labelPointStyles=i,this.labelTextColors=a,this.dataPoints=o,o}update(e,t){let n=this.options.setContext(this.getContext()),r=this._active,i,a=[];if(!r.length)this.opacity!==0&&(i={opacity:0});else{let e=fv[n.position].call(this,r,this._eventPosition);a=this._createItems(n),this.title=this.getTitle(a,n),this.beforeBody=this.getBeforeBody(a,n),this.body=this.getBody(a,n),this.afterBody=this.getAfterBody(a,n),this.footer=this.getFooter(a,n);let t=this._size=gv(this,n),o=Object.assign({},e,t),s=bv(this.chart,n,o),c=Cv(n,o,s,this.chart);this.xAlign=s.xAlign,this.yAlign=s.yAlign,i={opacity:1,x:c.x,y:c.y,width:t.width,height:t.height,caretX:e.x,caretY:e.y}}this._tooltipItems=a,this.$context=void 0,i&&this._resolveAnimations().update(this,i),e&&n.external&&n.external.call(this,{chart:this.chart,tooltip:this,replay:t})}drawCaret(e,t,n,r){let i=this.getCaretPosition(e,n,r);t.lineTo(i.x1,i.y1),t.lineTo(i.x2,i.y2),t.lineTo(i.x3,i.y3)}getCaretPosition(e,t,n){let{xAlign:r,yAlign:i}=this,{caretSize:a,cornerRadius:o}=n,{topLeft:s,topRight:c,bottomLeft:l,bottomRight:u}=$d(o),{x:d,y:f}=e,{width:p,height:m}=t,h,g,_,v,y,b;return i===`center`?(y=f+m/2,r===`left`?(h=d,g=h-a,v=y+a,b=y-a):(h=d+p,g=h+a,v=y-a,b=y+a),_=h):(g=r===`left`?d+Math.max(s,l)+a:r===`right`?d+p-Math.max(c,u)-a:this.caretX,i===`top`?(v=f,y=v-a,h=g-a,_=g+a):(v=f+m,y=v+a,h=g+a,_=g-a),b=v),{x1:h,x2:g,x3:_,y1:v,y2:y,y3:b}}drawTitle(e,t,n){let r=this.title,i=r.length,a,o,s;if(i){let c=rp(n.rtl,this.x,this.width);for(e.x=wv(this,n.titleAlign,n),t.textAlign=c.textAlign(n.titleAlign),t.textBaseline=`middle`,a=tf(n.titleFont),o=n.titleSpacing,t.fillStyle=n.titleColor,t.font=a.string,s=0;se!==0)?(e.beginPath(),e.fillStyle=i.multiKeyBackground,Kd(e,{x:t,y:p,w:c,h:s,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),Kd(e,{x:n,y:p+1,w:c-2,h:s-2,radius:o}),e.fill()):(e.fillStyle=i.multiKeyBackground,e.fillRect(t,p,c,s),e.strokeRect(t,p,c,s),e.fillStyle=a.backgroundColor,e.fillRect(n,p+1,c-2,s-2))}e.fillStyle=this.labelTextColors[n]}drawBody(e,t,n){let{body:r}=this,{bodySpacing:i,bodyAlign:a,displayColors:o,boxHeight:s,boxWidth:c,boxPadding:l}=n,u=tf(n.bodyFont),d=u.lineHeight,f=0,p=rp(n.rtl,this.x,this.width),m=function(n){t.fillText(n,p.x(e.x+f),e.y+d/2),e.y+=d+i},h=p.textAlign(a),g,_,v,y,b,x,S;for(t.textAlign=a,t.textBaseline=`middle`,t.font=u.string,e.x=wv(this,h,n),t.fillStyle=n.bodyColor,eu(this.beforeBody,m),f=o&&h!==`right`?a===`center`?c/2+l:c+2+l:0,y=0,x=r.length;y0&&t.stroke()}_updateAnimationTarget(e){let t=this.chart,n=this.$animations,r=n&&n.x,i=n&&n.y;if(r||i){let n=fv[e.position].call(this,this._active,this._eventPosition);if(!n)return;let a=this._size=gv(this,e),o=Object.assign({},n,this._size),s=bv(t,e,o),c=Cv(e,o,s,t);(r._to!==c.x||i._to!==c.y)&&(this.xAlign=s.xAlign,this.yAlign=s.yAlign,this.width=a.width,this.height=a.height,this.caretX=n.x,this.caretY=n.y,this._resolveAnimations().update(this,c))}}_willRender(){return!!this.opacity}draw(e){let t=this.options.setContext(this.getContext()),n=this.opacity;if(!n)return;this._updateAnimationTarget(t);let r={width:this.width,height:this.height},i={x:this.x,y:this.y};n=Math.abs(n)<.001?0:n;let a=ef(t.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;t.enabled&&o&&(e.save(),e.globalAlpha=n,this.drawBackground(i,e,r,t),ip(e,t.textDirection),i.y+=a.top,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),ap(e,t.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,t){let n=this._active,r=e.map(({datasetIndex:e,index:t})=>{let n=this.chart.getDatasetMeta(e);if(!n)throw Error(`Cannot find a dataset at index `+e);return{datasetIndex:e,element:n.data[t],index:t}}),i=!tu(n,r),a=this._positionChanged(r,t);(i||a)&&(this._active=r,this._eventPosition=t,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,t,n=!0){if(t&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let r=this.options,i=this._active||[],a=this._getActiveElements(e,i,t,n),o=this._positionChanged(a,e),s=t||!tu(a,i)||o;return s&&(this._active=a,(r.enabled||r.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,t))),s}_getActiveElements(e,t,n,r){let i=this.options;if(e.type===`mouseout`)return[];if(!r)return t.filter(e=>this.chart.data.datasets[e.datasetIndex]&&this.chart.getDatasetMeta(e.datasetIndex).controller.getParsed(e.index)!==void 0);let a=this.chart.getElementsAtEventForMode(e,i.mode,i,n);return i.reverse&&a.reverse(),a}_positionChanged(e,t){let{caretX:n,caretY:r,options:i}=this,a=fv[i.position].call(this,e,t);return a!==!1&&(n!==a.x||r!==a.y)}},jv=Object.freeze({__proto__:null,Colors:m_,Decimation:b_,Filler:Z_,Legend:ov,SubTitle:dv,Title:lv,Tooltip:{id:`tooltip`,_element:Av,positioners:fv,afterInit(e,t,n){n&&(e.tooltip=new Av({chart:e,options:n}))},beforeUpdate(e,t,n){e.tooltip&&e.tooltip.initialize(n)},reset(e,t,n){e.tooltip&&e.tooltip.initialize(n)},afterDraw(e){let t=e.tooltip;if(t&&t._willRender()){let n={tooltip:t};if(e.notifyPlugins(`beforeTooltipDraw`,{...n,cancelable:!0})===!1)return;t.draw(e.ctx),e.notifyPlugins(`afterTooltipDraw`,n)}},afterEvent(e,t){if(e.tooltip){let n=t.replay;e.tooltip.handleEvent(t.event,n,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:`average`,backgroundColor:`rgba(0,0,0,0.8)`,titleColor:`#fff`,titleFont:{weight:`bold`},titleSpacing:2,titleMarginBottom:6,titleAlign:`left`,bodyColor:`#fff`,bodySpacing:2,bodyFont:{},bodyAlign:`left`,footerColor:`#fff`,footerSpacing:2,footerMarginTop:6,footerFont:{weight:`bold`},footerAlign:`left`,padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,t)=>t.bodyFont.size,boxWidth:(e,t)=>t.bodyFont.size,multiKeyBackground:`#fff`,displayColors:!0,boxPadding:0,borderColor:`rgba(0,0,0,0)`,borderWidth:0,animation:{duration:400,easing:`easeOutQuart`},animations:{numbers:{type:`number`,properties:[`x`,`y`,`width`,`height`,`caretX`,`caretY`]},opacity:{easing:`linear`,duration:200}},callbacks:Ov},defaultRoutes:{bodyFont:`font`,footerFont:`font`,titleFont:`font`},descriptors:{_scriptable:e=>e!==`filter`&&e!==`itemSort`&&e!==`external`,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:`animation`}},additionalOptionScopes:[`interaction`]}}),Mv=(e,t,n,r)=>(typeof t==`string`?(n=e.push(t)-1,r.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function Nv(e,t,n,r){let i=e.indexOf(t);return i===-1?Mv(e,t,n,r):i===e.lastIndexOf(t)?i:n}var Pv=(e,t)=>e===null?null:Hu(Math.round(e),0,t);function Fv(e){let t=this.getLabels();return e>=0&&et.length-1?null:this.getPixelForValue(t[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}};function Lv(e,t){let n=[],{bounds:r,step:i,min:a,max:o,precision:s,count:c,maxTicks:l,maxDigits:u,includeBounds:d}=e,f=i||1,p=l-1,{min:m,max:h}=t,g=!Gl(a),_=!Gl(o),v=!Gl(c),y=(h-m)/(u+1),b=Ou((h-m)/p/f)*f,x,S,C,w;if(b<1e-14&&!g&&!_)return[{value:m},{value:h}];w=Math.ceil(h/b)-Math.floor(m/b),w>p&&(b=Ou(w*b/p/f)*f),Gl(s)||(x=10**s,b=Math.ceil(b*x)/x),r===`ticks`?(S=Math.floor(m/b)*b,C=Math.ceil(h/b)*b):(S=m,C=h),g&&_&&i&&Mu((o-a)/i,b/1e3)?(w=Math.round(Math.min((o-a)/b,l)),b=(o-a)/w,S=a,C=o):v?(S=g?a:S,C=_?o:C,w=c-1,b=(C-S)/w):(w=(C-S)/b,w=Du(w,Math.round(w),b/1e3)?Math.round(w):Math.ceil(w));let ee=Math.max(Iu(b),Iu(S));x=10**(Gl(s)?ee:s),S=Math.round(S*x)/x,C=Math.round(C*x)/x;let te=0;for(g&&(d&&S!==a?(n.push({value:a}),So)break;n.push({value:e})}return _&&d&&C!==o?n.length&&Du(n[n.length-1].value,o,Rv(o,y,e))?n[n.length-1].value=o:n.push({value:o}):(!_||C===o)&&n.push({value:C}),n}function Rv(e,t,{horizontal:n,minRotation:r}){let i=Pu(r),a=(n?Math.sin(i):Math.cos(i))||.001,o=.75*t*(``+e).length;return Math.min(t/a,o)}var zv=class extends Nh{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,t){return Gl(e)||(typeof e==`number`||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){let{beginAtZero:e}=this.options,{minDefined:t,maxDefined:n}=this.getUserBounds(),{min:r,max:i}=this,a=e=>r=t?r:e,o=e=>i=n?i:e;if(e){let e=Eu(r),t=Eu(i);e<0&&t<0?o(0):e>0&&t>0&&a(0)}if(r===i){let t=i===0?1:Math.abs(i*.05);o(i+t),e||a(r-t)}this.min=r,this.max=i}getTickLimit(){let{maxTicksLimit:e,stepSize:t}=this.options.ticks,n;return t?(n=Math.ceil(this.max/t)-Math.floor(this.min/t)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${t} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e||=11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return 1/0}buildTicks(){let e=this.options,t=e.ticks,n=this.getTickLimit();n=Math.max(2,n);let r=Lv({maxTicks:n,bounds:e.bounds,min:e.min,max:e.max,precision:t.precision,step:t.stepSize,count:t.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:t.minRotation||0,includeBounds:t.includeBounds!==!1},this._range||this);return e.bounds===`ticks`&&Nu(r,this,`value`),e.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){let e=this.ticks,t=this.min,n=this.max;if(super.configure(),this.options.offset&&e.length){let r=(n-t)/Math.max(e.length-1,1)/2;t-=r,n+=r}this._startValue=t,this._endValue=n,this._valueRange=n-t}getLabelForValue(e){return bd(e,this.chart.options.locale,this.options.ticks.format)}},Bv=class extends zv{static id=`linear`;static defaults={ticks:{callback:Cd.formatters.numeric}};determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=Jl(e)?e:0,this.max=Jl(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){let e=this.isHorizontal(),t=e?this.width:this.height,n=Pu(this.options.ticks.minRotation),r=(e?Math.sin(n):Math.cos(n))||.001,i=this._resolveTickFontOptions(0);return Math.ceil(t/Math.min(40,i.lineHeight/r))}getPixelForValue(e){return e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}},Vv=e=>Math.floor(Tu(e)),Hv=(e,t)=>10**(Vv(e)+t);function Uv(e){return e/10**Vv(e)==1}function Wv(e,t,n){let r=10**n,i=Math.floor(e/r);return Math.ceil(t/r)-i}function Gv(e,t){let n=Vv(t-e);for(;Wv(e,t,n)>10;)n++;for(;Wv(e,t,n)<10;)n--;return Math.min(n,Vv(e))}function Kv(e,{min:t,max:n}){t=Yl(e.min,t);let r=[],i=Vv(t),a=Gv(t,n),o=a<0?10**Math.abs(a):1,s=10**a,c=i>a?10**i:0,l=Math.round((t-c)*o)/o,u=Math.floor((t-c)/s/10)*s*10,d=Math.floor((l-u)/10**a),f=Yl(e.min,Math.round((c+u+d*10**a)*o)/o);for(;f=10?d=d<15?15:20:d++,d>=20&&(a++,d=2,o=a>=0?1:o),f=Math.round((c+u+d*10**a)*o)/o;let p=Yl(e.max,f);return r.push({value:p,major:Uv(p),significand:d}),r}var qv=class extends Nh{static id=`logarithmic`;static defaults={ticks:{callback:Cd.formatters.logarithmic,major:{enabled:!0}}};constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,t){let n=zv.prototype.parse.apply(this,[e,t]);if(n===0){this._zero=!0;return}return Jl(n)&&n>0?n:null}determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=Jl(e)?Math.max(0,e):null,this.max=Jl(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Jl(this._userMin)&&(this.min=e===Hv(this.min,0)?Hv(this.min,-1):Hv(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:e,maxDefined:t}=this.getUserBounds(),n=this.min,r=this.max,i=t=>n=e?n:t,a=e=>r=t?r:e;n===r&&(n<=0?(i(1),a(10)):(i(Hv(n,-1)),a(Hv(r,1)))),n<=0&&i(Hv(r,-1)),r<=0&&a(Hv(n,1)),this.min=n,this.max=r}buildTicks(){let e=this.options,t=Kv({min:this._userMin,max:this._userMax},this);return e.bounds===`ticks`&&Nu(t,this,`value`),e.reverse?(t.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),t}getLabelForValue(e){return e===void 0?`0`:bd(e,this.chart.options.locale,this.options.ticks.format)}configure(){let e=this.min;super.configure(),this._startValue=Tu(e),this._valueRange=Tu(this.max)-Tu(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(Tu(e)-this._startValue)/this._valueRange)}getValueForPixel(e){let t=this.getDecimalForPixel(e);return 10**(this._startValue+t*this._valueRange)}};function Jv(e){let t=e.ticks;if(t.display&&e.display){let e=ef(t.backdropPadding);return Xl(t.font&&t.font.size,kd.font.size)+e.height}return 0}function Yv(e,t,n){return n=Kl(n)?n:[n],{w:Md(e,t.string,n),h:n.length*t.lineHeight}}function Xv(e,t,n,r,i){return e===r||e===i?{start:t-n/2,end:t+n/2}:ei?{start:t-n,end:t}:{start:t,end:t+n}}function Zv(e){let t={l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom},n=Object.assign({},t),r=[],i=[],a=e._pointLabels.length,o=e.options.pointLabels,s=o.centerPointLabels?_u/a:0;for(let c=0;ct.r&&(s=(r.end-t.r)/a,e.r=Math.max(e.r,t.r+s)),i.startt.b&&(c=(i.end-t.b)/o,e.b=Math.max(e.b,t.b+c))}function $v(e,t,n){let r=e.drawingArea,{extra:i,additionalAngle:a,padding:o,size:s}=n,c=e.getPointPosition(t,r+i+o,a),l=Math.round(Fu(Bu(c.angle+Su))),u=iy(c.y,s.h,l),d=ny(l),f=ry(c.x,s.w,d);return{visible:!0,x:c.x,y:u,textAlign:d,left:f,top:u,right:f+s.w,bottom:u+s.h}}function ey(e,t){if(!t)return!0;let{left:n,top:r,right:i,bottom:a}=e;return!(Ld({x:n,y:r},t)||Ld({x:n,y:a},t)||Ld({x:i,y:r},t)||Ld({x:i,y:a},t))}function ty(e,t,n){let r=[],i=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:s}=a.pointLabels,c={extra:Jv(a)/2,additionalAngle:o?_u/i:0},l;for(let a=0;a270||n<90)&&(e-=t),e}function ay(e,t,n){let{left:r,top:i,right:a,bottom:o}=n,{backdropColor:s}=t;if(!Gl(s)){let n=$d(t.borderRadius),c=ef(t.backdropPadding);e.fillStyle=s;let l=r-c.left,u=i-c.top,d=a-r+c.width,f=o-i+c.height;Object.values(n).some(e=>e!==0)?(e.beginPath(),Kd(e,{x:l,y:u,w:d,h:f,radius:n}),e.fill()):e.fillRect(l,u,d,f)}}function oy(e,t){let{ctx:n,options:{pointLabels:r}}=e;for(let i=t-1;i>=0;i--){let t=e._pointLabelItems[i];if(!t.visible)continue;let a=r.setContext(e.getPointLabelContext(i));ay(n,a,t);let o=tf(a.font),{x:s,y:c,textAlign:l}=t;Gd(n,e._pointLabels[i],s,c+o.lineHeight/2,o,{color:a.color,textAlign:l,textBaseline:`middle`})}}function sy(e,t,n,r){let{ctx:i}=e;if(n)i.arc(e.xCenter,e.yCenter,t,0,vu);else{let n=e.getPointPosition(0,t);i.moveTo(n.x,n.y);for(let a=1;a{let n=$l(this.options.pointLabels.callback,[e,t],this);return n||n===0?n:``}).filter((e,t)=>this.chart.getDataVisibility(t))}fit(){let e=this.options;e.display&&e.pointLabels.display?Zv(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,t,n,r){this.xCenter+=Math.floor((e-t)/2),this.yCenter+=Math.floor((n-r)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,t,n,r))}getIndexAngle(e){let t=vu/(this._pointLabels.length||1),n=this.options.startAngle||0;return Bu(e*t+Pu(n))}getDistanceFromCenterForValue(e){if(Gl(e))return NaN;let t=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*t:(e-this.min)*t}getValueForDistanceFromCenter(e){if(Gl(e))return NaN;let t=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-t:this.min+t}getPointLabelContext(e){let t=this._pointLabels||[];if(e>=0&&e{if(t!==0||t===0&&this.min<0){s=this.getDistanceFromCenterForValue(e.value);let n=this.getContext(t),o=r.setContext(n),c=i.setContext(n);cy(this,o,s,a,c)}}),n.display){for(e.save(),o=a-1;o>=0;o--){let r=n.setContext(this.getPointLabelContext(o)),{color:i,lineWidth:a}=r;!a||!i||(e.lineWidth=a,e.strokeStyle=i,e.setLineDash(r.borderDash),e.lineDashOffset=r.borderDashOffset,s=this.getDistanceFromCenterForValue(t.reverse?this.min:this.max),c=this.getPointPosition(o,s),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(c.x,c.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){let e=this.ctx,t=this.options,n=t.ticks;if(!n.display)return;let r=this.getIndexAngle(0),i,a;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(r),e.textAlign=`center`,e.textBaseline=`middle`,this.ticks.forEach((r,o)=>{if(o===0&&this.min>=0&&!t.reverse)return;let s=n.setContext(this.getContext(o)),c=tf(s.font);if(i=this.getDistanceFromCenterForValue(this.ticks[o].value),s.showLabelBackdrop){e.font=c.string,a=e.measureText(r.label).width,e.fillStyle=s.backdropColor;let t=ef(s.backdropPadding);e.fillRect(-a/2-t.left,-i-c.size/2-t.top,a+t.width,c.size+t.height)}Gd(e,r.label,0,-i,c,{color:s.color,strokeColor:s.textStrokeColor,strokeWidth:s.textStrokeWidth})}),e.restore()}drawTitle(){}},dy={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},fy=Object.keys(dy);function py(e,t){return e-t}function my(e,t){if(Gl(t))return null;let n=e._adapter,{parser:r,round:i,isoWeekday:a}=e._parseOpts,o=t;return typeof r==`function`&&(o=r(o)),Jl(o)||(o=typeof r==`string`?n.parse(o,r):n.parse(o)),o===null?null:(i&&(o=i===`week`&&(ju(a)||a===!0)?n.startOf(o,`isoWeek`,a):n.startOf(o,i)),+o)}function hy(e,t,n,r){let i=fy.length;for(let a=fy.indexOf(e);a=fy.indexOf(n);a--){let n=fy[a];if(dy[n].common&&e._adapter.diff(i,r,n)>=t-1)return n}return fy[n?fy.indexOf(n):0]}function _y(e){for(let t=fy.indexOf(e)+1,n=fy.length;t=t?n[r]:n[i];e[a]=!0}}function yy(e,t,n,r){let i=e._adapter,a=+i.startOf(t[0].value,r),o=t[t.length-1].value,s,c;for(s=a;s<=o;s=+i.add(s,1,r))c=n[s],c>=0&&(t[c].major=!0);return t}function by(e,t,n){let r=[],i={},a=t.length,o,s;for(o=0;o+e.value))}initOffsets(e=[]){let t=0,n=0,r,i;this.options.offset&&e.length&&(r=this.getDecimalForValue(e[0]),t=e.length===1?1-r:(this.getDecimalForValue(e[1])-r)/2,i=this.getDecimalForValue(e[e.length-1]),n=e.length===1?i:(i-this.getDecimalForValue(e[e.length-2]))/2);let a=e.length<3?.5:.25;t=Hu(t,0,a),n=Hu(n,0,a),this._offsets={start:t,end:n,factor:1/(t+1+n)}}_generate(){let e=this._adapter,t=this.min,n=this.max,r=this.options,i=r.time,a=i.unit||hy(i.minUnit,t,n,this._getLabelCapacity(t)),o=Xl(r.ticks.stepSize,1),s=a===`week`&&i.isoWeekday,c=ju(s)||s===!0,l={},u=t,d,f;if(c&&(u=+e.startOf(u,`isoWeek`,s)),u=+e.startOf(u,c?`day`:a),e.diff(n,t,a)>1e5*o)throw Error(t+` and `+n+` are too far apart with stepSize of `+o+` `+a);let p=r.ticks.source===`data`&&this.getDataTimestamps();for(d=u,f=0;d+e)}getLabelForValue(e){let t=this._adapter,n=this.options.time;return n.tooltipFormat?t.format(e,n.tooltipFormat):t.format(e,n.displayFormats.datetime)}format(e,t){let n=this.options.time.displayFormats,r=this._unit,i=t||n[r];return this._adapter.format(e,i)}_tickFormatFunction(e,t,n,r){let i=this.options,a=i.ticks.callback;if(a)return $l(a,[e,t,n],this);let o=i.time.displayFormats,s=this._unit,c=this._majorUnit,l=s&&o[s],u=c&&o[c],d=n[t],f=c&&u&&d&&d.major;return this._adapter.format(e,r||(f?u:l))}generateTickLabels(e){let t,n,r;for(t=0,n=e.length;t0?o:1}getDataTimestamps(){let e=this._cache.data||[],t,n;if(e.length)return e;let r=this.getMatchingVisibleMetas();if(this._normalized&&r.length)return this._cache.data=r[0].controller.getAllParsedValues(this);for(t=0,n=r.length;t=e[r].pos&&t<=e[i].pos&&({lo:r,hi:i}=Ku(e,`pos`,t)),{pos:a,time:s}=e[r],{pos:o,time:c}=e[i]):(t>=e[r].time&&t<=e[i].time&&({lo:r,hi:i}=Ku(e,`time`,t)),{time:a,pos:s}=e[r],{time:o,pos:c}=e[i]);let l=o-a;return l?s+(c-s)*(t-a)/l:s}var Cy=class extends xy{static id=`timeseries`;static defaults=xy.defaults;constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let e=this._getTimestampsForTable(),t=this._table=this.buildLookupTable(e);this._minPos=Sy(t,this.min),this._tableRange=Sy(t,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){let{min:t,max:n}=this,r=[],i=[],a,o,s,c,l;for(a=0,o=e.length;a=t&&c<=n&&r.push(c);if(r.length<2)return[{time:t,pos:0},{time:n,pos:1}];for(a=0,o=r.length;ae-t)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;let t=this.getDataTimestamps(),n=this.getLabelTimestamps();return e=t.length&&n.length?this.normalize(t.concat(n)):t.length?t:n,e=this._cache.all=e,e}getDecimalForValue(e){return(Sy(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){let t=this._offsets,n=this.getDecimalForPixel(e)/t.factor-t.end;return Sy(this._table,n*this._tableRange+this._minPos,!0)}},wy=[hm,n_,jv,Object.freeze({__proto__:null,CategoryScale:Iv,LinearScale:Bv,LogarithmicScale:qv,RadialLinearScale:uy,TimeScale:xy,TimeSeriesScale:Cy})];xg.register(...wy);var Ty=xg,Ey=R(``);function Dy(e,t){E(t,!0);let n=G(t,`class`,3,``),r=G(t,`ariaLabel`,3,``);function i(e){if(Ea.tick,typeof t.build!=`function`)return;let n=t.build();if(!n)return;let r=new Ty(e.getContext(`2d`),n);return()=>r.destroy()}var a=Ey();Mi(a,()=>i),F(()=>{U(a,1,Fi(n())),W(a,`aria-label`,r())}),z(e,a),D()}var Oy=R(``),ky=R(`
        `);function Ay(e,t){E(t,!0);let n=G(t,`options`,19,()=>[]),r=G(t,`ariaLabel`,3,``),i=G(t,`class`,3,``);var a=ky();H(a,21,n,e=>e.value,(e,n)=>{var r=Oy();let i;var a=M(r,!0);T(r),F(()=>{i=U(r,1,`segmented-btn svelte-92fh5i`,null,i,{active:t.value===I(n).value}),W(r,`aria-pressed`,t.value===I(n).value),B(a,I(n).label)}),L(`click`,r,()=>t.onchange?.(I(n).value)),z(e,r)}),T(a),F(()=>{U(a,1,Fi([`segmented-control`,i()]),`svelte-92fh5i`),W(a,`aria-label`,r())}),z(e,a),D()}Hr([`click`]);function jy(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function My(){return{grid:jy(`--chart-grid`),text:jy(`--chart-text`),dayMarker:jy(`--chart-day-marker`),tooltipBg:jy(`--chart-tooltip-bg`),tooltipBorder:jy(`--chart-tooltip-border`),tooltipText:jy(`--chart-tooltip-text`)}}function Ny(){return{size:11,family:`'SF Mono', Menlo, Consolas, monospace`}}function Py(e,t){return{backgroundColor:e.tooltipBg,borderColor:e.tooltipBorder,borderWidth:1,titleColor:e.tooltipText,bodyColor:e.tooltipText,callbacks:t}}function Fy(e){if(typeof document>`u`||!document.body)return e;let t=document.createElement(`span`);t.style.display=`none`,t.style.color=e,document.body.appendChild(t);let n=getComputedStyle(t).color;return document.body.removeChild(t),n||e}var Iy=[`#c2845a`,`#7a9e7e`,`#d4a574`,`#b8a98e`,`#8b9e6b`,`#7d8a97`,`#c47a5a`,`#6b8e6b`,`#a09486`,`#9b7ea4`,`#c49a6c`];function Ly(){return[...Iy]}function Ry(e){let t=5381,n=String(e||``);for(let e=0;eoc(e)}}var Wy={seconds:{apiName:`second`,windowLabel:`Last 60 seconds`,refreshMs:2e3},minutes:{apiName:`minute`,windowLabel:`Last 60 minutes`,refreshMs:5e3},hours:{apiName:`hour`,windowLabel:`Last 24 hours`,refreshMs:2e4},days:{apiName:`day`,windowLabel:`Last 30 days`,refreshMs:6e4}},Gy=[{value:`seconds`,label:`Seconds`},{value:`minutes`,label:`Minutes`},{value:`hours`,label:`Hours`},{value:`days`,label:`Days`}];function Ky(){return{input:0,output:0,prompt:0,local:0}}function qy(e){return String(e).padStart(2,`0`)}function Jy(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function Yy(e,t){if(!Number.isFinite(t))return``;let n=new Date(t);switch(e){case`seconds`:return qy(n.getHours())+`:`+qy(n.getMinutes())+`:`+qy(n.getSeconds());case`minutes`:return qy(n.getHours())+`:`+qy(n.getMinutes());case`hours`:return qy(n.getHours())+`:00`;default:return qy(n.getMonth()+1)+`-`+qy(n.getDate())}}function Xy(e,t){let n=[],r=[],i={input:[],output:[],prompt:[],local:[]},a=Ky();for(let o of e||[]){let e=Date.parse(o&&o.start),s=Jy(o&&o.input_tokens),c=Jy(o&&o.output_tokens),l=Jy(o&&o.prompt_cached_tokens),u=Jy(o&&o.locally_cached_tokens);n.push(Yy(t,e)),r.push(Number.isFinite(e)?e:null),i.input.push(s),i.output.push(c),i.prompt.push(l),i.local.push(u),a.input+=s,a.output+=c,a.prompt+=l,a.local+=u}return{labels:n,stamps:r,cols:i,totals:a}}function Zy(e){let t=e||Ky();return t.input+t.output+t.prompt+t.local>0}function Qy(e,t){return oc(Math.max(0,Math.round(e&&e[t]||0)))}function $y(e){return(Wy[e]||Wy.minutes).windowLabel}function eb(e,t){return`Live token throughput, `+$y(t).toLowerCase()+`. Input `+Qy(e,`input`)+`, output `+Qy(e,`output`)+`, prompt cached `+Qy(e,`prompt`)+`, locally cached `+Qy(e,`local`)+` tokens.`}function tb(e,t,n,r){let i=e=>oc(Math.max(0,Math.round(e))),a=n.stamps,o=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderWidth:0,borderRadius:0,categoryPercentage:1,barPercentage:1,stack:`tokens`});return{type:`bar`,plugins:[{id:`liveTokensDayMarks`,afterDatasetsDraw:t=>{if(r===`days`)return;let n=t.getDatasetMeta(0),i=t.chartArea;if(!n||!n.data||!i)return;let o=t.ctx;o.save(),o.font=`10px 'SF Mono', Menlo, Consolas, monospace`;let s=null;for(let t=0;t{if(!e.length)return``;let t=a[e[0].dataIndex];if(!t)return e[0].label;let n=new Date(t);return r===`days`?n.toLocaleDateString():n.toLocaleString()},label:e=>e.dataset.label+`: `+i(e.parsed.y),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+i(t)}})}}}}var nb=900,rb=new class{#e=k(`minutes`);get granularity(){return I(this.#e)}set granularity(e){A(this.#e,e,!0)}#t=k(j([]));get buckets(){return I(this.#t)}set buckets(e){A(this.#t,e,!0)}#n=k(!1);get active(){return I(this.#n)}set active(e){A(this.#n,e,!0)}#r=null;#i=null;#a=null;#o=0;#s=null;#c=!1;start(){this.stop(),this.active=!0,this.fetch(),this.#l(),this.#u()}stop(){this.active=!1,this.#r&&=(clearInterval(this.#r),null),this.#i&&=(clearTimeout(this.#i),null),this.#a&&=(clearTimeout(this.#a),null),this.#o=0,this.#s&&=(this.#s.abort(),null),this.buckets=[]}setGranularity(e){!Wy[e]||e===this.granularity||(this.granularity=e,this.buckets=[],this.#l(),this.fetch())}#l(){this.#r&&=(clearInterval(this.#r),null);let e=Wy[this.granularity]||Wy.minutes;this.#r=setInterval(()=>{this.active&&this.fetch()},e.refreshMs)}noteUsageEvent(e){!this.active||e!==`usage.flushed`||(this.#i||=setTimeout(()=>{this.#i=null,this.fetch()},nb))}async fetch(){if(!this.active||this.#c)return;this.#c=!0;let e=this.granularity;try{let t=await fs(`/admin/usage/throughput?granularity=`+(Wy[e]||Wy.minutes).apiName,{label:`token throughput`});if(t.stale||!t.ok||this.granularity!==e)return;this.buckets=t.data&&Array.isArray(t.data.buckets)?t.data.buckets:[]}catch(e){if(ms(e))return;console.error(`Failed to fetch token throughput:`,e)}finally{this.#c=!1,this.active&&this.granularity!==e&&this.fetch()}}async#u(){await _s.ensureLoaded(),this.active&&_s.liveLogsVisible()&&(typeof ReadableStream>`u`||(this.#s&&this.#s.abort(),this.#s=new AbortController,this.#d(this.#s)))}async#d(e){try{let t=await us(`/admin/live/logs?types=usage`,{signal:e.signal});if(!t.ok||!t.body||typeof t.body.getReader!=`function`){this.#p();return}this.#o=0,await By(t.body.getReader(),e=>this.#f(e)),this.#p()}catch(e){if(ms(e))return;console.error(`Live usage stream failed:`,e),this.#p()}}#f(e){if(!e||typeof e!=`object`)return;let t=String(e.type||``).trim();t.indexOf(`usage.`)===0&&this.noteUsageEvent(t)}#p(){if(!this.active||this.#a)return;let{attempt:e,delay:t}=Hy(this.#o);this.#o=e,this.#a=setTimeout(()=>{this.#a=null,this.#u()},t)}},ib=R(`
        `),ab=R(`
        Waiting for live requests…
        `),ob=R(`

        Live Token Throughput

        `);function sb(e,t){E(t,!0);let n=O(()=>Xy(rb.buckets,rb.granularity)),r=O(()=>I(n).totals);function i(){return{input:Fy(`var(--token-input)`),output:Fy(`var(--token-output)`),prompt:Fy(`var(--token-prompt)`),local:Fy(`var(--token-local)`)}}let a=[{metric:`input`,label:`Input Tokens`,colorVar:`--token-input`},{metric:`output`,label:`Output Tokens`,colorVar:`--token-output`},{metric:`prompt`,label:`Prompt (Input) Cached`,colorVar:`--token-prompt`},{metric:`local`,label:`Locally Cached`,colorVar:`--token-local`}];var o=ob(),s=M(o),c=M(s),l=P(M(c),2),u=M(l);let d;var f=P(u,2),p=M(f,!0);T(f),T(l),T(c),Ay(P(c,2),{ariaLabel:`Live token throughput granularity`,get options(){return Gy},get value(){return rb.granularity},onchange:e=>rb.setGranularity(e)}),T(s);var m=P(s,2);H(m,21,()=>a,e=>e.metric,(e,t)=>{var n=ib(),i=M(n),a=P(i,2),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(n),F(e=>{Hi(i,`background: var(${I(t).colorVar??``})`),B(o,I(t).label),B(c,e)},[()=>Qy(I(r),I(t).metric)]),z(e,n)}),T(m);var h=P(m,2),g=M(h);{let e=O(()=>eb(I(r),rb.granularity));Dy(g,{get ariaLabel(){return I(e)},build:()=>tb(My(),i(),I(n),rb.granularity)})}var _=P(g,2),v=e=>{z(e,ab())},y=O(()=>!Zy(I(r)));V(_,e=>{I(y)&&e(v)}),T(h),T(o),F(e=>{d=U(u,1,`live-dot`,null,d,{"is-streaming":rb.active}),B(p,e)},[()=>$y(rb.granularity)]),z(e,o),D()}function cb(e){let t=e||{};if(t.total_tokens!==null&&t.total_tokens!==void 0){let e=Number(t.total_tokens);if(Number.isFinite(e))return e}let n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function lb(e,t){if(!t)return 0;let n=e&&e.summary?e.summary:{},r=Number(n.total_hits||0);return Number.isFinite(r)&&r>0?r:0}function ub(e,t,n){let r=Number(e&&e.total_requests||0);return(Number.isFinite(r)?r:0)+lb(t,n)}function db(e,t,n){let r=lb(t,n);return r<=0?``:nc(ub(e,t,n)-r)+` to providers + `+nc(r)+` from cache`}function fb(e){let t=e&&e.summary?e.summary:{},n=Number(t.total_input_tokens||0),r=Number(t.total_output_tokens||0);return(Number.isFinite(n)?n:0)+(Number.isFinite(r)?r:0)}function pb(e,t,n){let r=e=>{let t=Number(e||0);return Number.isFinite(t)&&t>0?t:0},i=e||{},a=r(i.uncached_input_tokens),o=r(i.cached_input_tokens),s=r(i.cache_write_input_tokens),c=t&&t.summary?t.summary:{},l=n?r(c.total_input_tokens):0;return[{key:`uncached`,label:`Regular`,tokens:a+s,colorVar:`--cache-meter-uncached`,note:s>0?`Includes `+nc(s)+` cache-write tokens`:``},{key:`prompt`,label:`Prompt cached`,tokens:o,colorVar:`--cache-meter-prompt`,note:`Provider prompt-cache reads`},{key:`local`,label:`Locally cached`,tokens:l,colorVar:`--cache-meter-local`,note:`Served from GoModel response cache`}]}function mb(e,t,n){return pb(e,t,n).reduce((e,t)=>e+t.tokens,0)}function hb(e,t,n){return mb(e,t,n)>0}function gb(e,t,n){let r=pb(e,t,n),i=r.reduce((e,t)=>e+t.tokens,0);if(i<=0)return r.map(e=>Object.assign({},e,{pct:0}));let a=r.map(e=>{let t=e.tokens/i*100,n=Math.floor(t);return Object.assign({},e,{pct:n,remainder:t-n})}),o=100-a.reduce((e,t)=>e+t.pct,0);return a.map((e,t)=>({index:t,remainder:e.remainder,tokens:e.tokens})).filter(e=>e.tokens>0).sort((e,t)=>t.remainder-e.remainder).forEach(e=>{o>0&&(a[e.index].pct+=1,--o)}),a}function _b(e,t,n){return gb(e,t,n).filter(e=>e.tokens>0)}function vb(e){let t=[e.label+`: `+nc(e.tokens)+` input tokens (`+e.pct+`%)`];return e.note&&t.push(e.note),t.join(` -`)}function yb(e){let t=(e||[]).map(e=>e.label+` `+e.pct+`%`);return`Cache breakdown of input tokens — `+(t.length?t.join(`, `):`no data`)}function bb(e){return e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`)}function xb(e,t,n,r){if(t!==`daily`||!n||!r)return e;let i={};(e||[]).forEach(e=>{i[e.date]=e});let a=[];for(let e=new Date(n);e<=r;e.setUTCDate(e.getUTCDate()+1)){let t=bb(e);a.push(i[t]||{date:t,input_tokens:0,output_tokens:0,total_tokens:0,requests:0,input_cost:null,output_cost:null,total_cost:null})}return a}function Sb(e,t){let n=e=>Number(e)||0,r=e.map(e=>e.date),i=e.map(e=>n(e.uncached_input_tokens)+n(e.cache_write_input_tokens)+n(e.cached_input_tokens)>0?n(e.uncached_input_tokens)+n(e.cache_write_input_tokens):n(e.input_tokens)),a=e.map(e=>n(e.output_tokens)),o=e.map(e=>n(e.cached_input_tokens)),s={};return(t||[]).forEach(e=>{s[e.date]=e}),{labels:r,inputPaid:i,output:a,prompt:o,local:r.map(e=>{let t=s[e];return t?n(t.input_tokens)+n(t.output_tokens):0})}}function Cb(e){let t=e||{},n=Math.max(0,Number(t.uncached_input_tokens)||0),r=Math.max(0,Number(t.cached_input_tokens)||0),i=Math.max(0,Number(t.cache_write_input_tokens)||0),a=n+r+i;return a>0?r/a*100:0}function wb(e){let t=e||{};return(Number(t.uncached_input_tokens)||0)+(Number(t.cached_input_tokens)||0)+(Number(t.cache_write_input_tokens)||0)>0}function Tb(e){return wb(e)?Math.round(Cb(e))+`%`:`—`}function Eb(e,t,n={}){let r=!!n.cacheEnabled,i=n.resolve||(e=>e),a=(e,t)=>i(`color-mix(in srgb, `+e+` `+t+`%, transparent)`),o=(e,t,n,r)=>Object.assign({label:e,data:t,borderColor:n,backgroundColor:n,fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4},r||{}),s=[o(`Input Tokens`,t.inputPaid,i(`var(--token-input)`),{fill:`origin`}),o(`Output Tokens`,t.output,i(`var(--token-output)`),{fill:`-1`}),o(`Prompt (Input) Cached`,t.prompt,i(`var(--token-prompt)`),{fill:`-1`,borderDash:[6,4]})];return r&&s.push(o(`Locally Cached`,t.local,a(`var(--info)`,35),{fill:`-1`,borderDash:[2,3]})),{type:`line`,data:{labels:t.labels,datasets:s},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),maxRotation:0,autoSkip:!0,maxTicksLimit:10}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:Uy(e)}}}}}function Db(e,t,n){let r=Math.max(0,Math.min(100,e));return{type:`doughnut`,data:{datasets:[{data:[r,100-r],backgroundColor:[t,n],borderWidth:0,spacing:0}]},options:{rotation:-90,circumference:180,cutout:`84%`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:1},events:[],plugins:{legend:{display:!1},tooltip:{enabled:!1}}}}}var Ob=`gomodel_provider_status_details_expanded`,kb=`gomodel_provider_card_expanded_overrides`,Ab=3e3,jb=`https://gomodel.enterpilot.io/docs/providers/`,Mb={anthropic:`anthropic`,azure:`azure`,bailian:`bailian`,bedrock:`bedrock`,"bedrock-mantle":`bedrock-mantle`,cohere:`cohere`,deepseek:`deepseek`,gemini:`gemini`,opencode_go:`opencode-go`,oracle:`oracle`,vertex:`vertex`,vllm:`vllm`,xiaomi:`xiaomi`};function Nb(){return{summary:{total:0,healthy:0,degraded:0,unhealthy:0,overall_status:`degraded`},providers:[]}}function Pb(e){let t={detailsExpanded:!1,cardOverrides:{}};try{if(e){let n=e.getItem(Ob);n===`true`||n===`false`?t.detailsExpanded=n===`true`:e.setItem(Ob,`false`);let r=JSON.parse(e.getItem(kb)||`{}`);r&&typeof r==`object`&&!Array.isArray(r)&&(t.cardOverrides=r)}}catch{}return t}function Fb(e,t){if(e)try{e.setItem(Ob,t?`true`:`false`)}catch{}}function Ib(e,t){if(e)try{e.setItem(kb,JSON.stringify(t))}catch{}}function Lb(e,t,n){let r=n&&n.name?String(n.name):``;return r&&Object.prototype.hasOwnProperty.call(e,r)?e[r]===!0:t}function Rb(e){return`is-`+(String(e&&e.overall_status||`degraded`).trim()||`degraded`)}function zb(e){return`is-`+(String(e||`degraded`).trim()||`degraded`)}function Bb(e){let t=e||{};return String(t.healthy||0)+`/`+String(t.total||0)}function Vb(e){let t=e||{},n=Number(t.total||0),r=Number(t.healthy||0);return n>0&&rString(e&&e.status_label||``).trim().toLowerCase()===`starting`)}function Wb(e){if(!e||!e.runtime)return``;let t=e.runtime.last_model_fetch_at||``,n=e.runtime.last_availability_check_at||``;return t?n&&Date.parse(n)>Date.parse(t)?n:t:n}function Gb(e,t){let n=Wb(e);if(!n||typeof t!=`function`)return`-`;let r=t(n);if(!r||r===`-`)return`-`;let i=String(r).split(` `);return i.length>1?i.slice(1).join(` `):r}function Kb(e,t){let n=Wb(e);return n?typeof t==`function`?t(n):String(n):``}function qb(e){if(!e)return``;let t=String(e.name||``).trim(),n=String(e.type||e.config&&e.config.type||``).trim();return!n||n===t?``:n}function Jb(e){let t=String(e&&(e.type||e.config&&e.config.type)||``).trim().toLowerCase(),n=t?Mb[t]:``;return n?jb+n+`?utm_source=gomodel_dashboard`:``}function Yb(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.retry:null;return t?String(t.max_retries)+` retries, `+t.initial_backoff+` initial, `+t.max_backoff+` max, factor `+t.backoff_factor+`, jitter `+t.jitter_factor:`-`}function Xb(e){let t=e&&e.config&&e.config.resilience?e.config.resilience.circuit_breaker:null;return t?String(t.failure_threshold)+` fail, `+String(t.success_threshold)+` success, `+t.timeout+` timeout`:`-`}function Zb(e){let t=e&&e.config&&Array.isArray(e.config.models)?e.config.models.filter(Boolean):[];return t.length===0?`Automatic`:t.join(`, `)}function Qb(e){if(!e)return``;let t=[];return e.status_reason&&t.push(String(e.status_reason)),e.last_error&&t.push(`Last error: `+String(e.last_error)),t.join(` - -`)}function $b(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function ex(e){let t=$b(e);return t?String(t.circuit_state||``).trim():``}function tx(e){let t=ex(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function nx(e){let t=ex(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function rx(e){let t=$b(e);if(!t)return``;let n=Number(t.requests||0),r=Number(t.errors||0),i=Math.round(Number(t.window_seconds||0)/60),a=i>0?`last `+i+` min`:`recent`;return String(n)+` request`+(n===1?``:`s`)+` · `+String(r)+` error`+(r===1?``:`s`)+` (`+a+`)`}function ix(e){let t=$b(e);return t&&Array.isArray(t.models)?t.models:[]}function ax(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function ox(e){let t=e&&e.last_error;return!t||!t.message?``:(t.status_code?`HTTP `+String(t.status_code)+`: `:``)+t.message}function sx(){return{name:``,slug:``,url:``,transport:`http`,description:``,enabled:!0,headers:[],allowed_tools:``,disallowed_tools:``,user_paths:``,tool_timeout_seconds:``}}function cx(){return{server:``,status:``,instructions:``,tools:[],prompts:[],resources:[],templates:[]}}function lx(e){return String(e&&(e.slug||e.name)||``).trim()}function ux(e){return String(e&&e.status||``).trim()||`connecting`}function dx(e){switch(ux(e)){case`connected`:return`status-success`;case`degraded`:return String(e&&e.last_error||``).trim()?`status-error`:`status-warning`;case`connecting`:return`status-neutral`;default:return`status-unknown`}}function fx(e,t){let n=ux(e),r=String(e&&e.last_error||``).trim();return r&&n!==`connected`?r:n===`connected`&&e&&e.connected_at?`Connected since `+(typeof t==`function`?t:String)(e.connected_at):``}function px(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function mx(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function hx(e){let t=String(e||``).normalize(`NFKD`).toLowerCase(),n=t.replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64).replace(/-+$/g,``);if(n)return n;let r=2166136261;for(let e of t)r=Math.imul((r^e.codePointAt(0))>>>0,16777619)>>>0;return`mcp-`+r.toString(16).padStart(8,`0`)}function gx(e){return String(e||``).split(` -`).map(e=>e.trim()).filter(e=>e)}function _x(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function vx(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=String(e&&e.name||``).trim();n&&(t[n]=String(e&&e.value||``))}),t}function yx(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.slug,e.url,e.transport,e.description,e.status].some(e=>String(e||``).toLowerCase().includes(r)))}function bx(e){return{name:String(e.name||``).trim(),slug:lx(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:_x(e.headers),allowed_tools:(Array.isArray(e.allowed_tools)?e.allowed_tools:[]).join(`, `),disallowed_tools:(Array.isArray(e.disallowed_tools)?e.disallowed_tools:[]).join(`, `),user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` -`),tool_timeout_seconds:e.tool_timeout_seconds?String(e.tool_timeout_seconds):``}}function xx(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||hx(r)).trim().toLowerCase(),a=String(e.url||``).trim(),o=e.transport===`sse`?`sse`:`http`;if(!r)return{error:`Name is required.`};if(!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(i))return{error:`Slug must use 1–64 lowercase ASCII letters, numbers, hyphens, or underscores.`};if(t===`create`&&(n||[]).some(e=>lx(e)===i))return{error:`Slug "`+i+`" is already in use.`};if(!a)return{error:`URL is required.`};let s,c=String(e.tool_timeout_seconds||``).trim();if(c!==``){let e=Number(c);if(!Number.isSafeInteger(e)||e<0)return{error:`Tool timeout must be a non-negative whole number of seconds.`};s=e}return{payload:{name:r,slug:i,url:a,transport:o,headers:vx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:ec(e.allowed_tools),disallowed_tools:ec(e.disallowed_tools),user_paths:gx(e.user_paths),tool_timeout_seconds:s}}}function Sx(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=e=>(Array.isArray(e)?e:[]).filter(e=>e&&typeof e==`object`);return{server:String(n.server||e||``).trim(),status:String(n.status||``).trim(),instructions:String(n.instructions||``).trim(),tools:r(n.tools),prompts:r(n.prompts),resources:r(n.resources),templates:r(n.templates)}}function Cx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function wx(e){let t=e||cx(),n=(e,t)=>{let n=String(e||``).trim(),r=String(t||``).trim();return n&&r?n+` — `+r:r||n},r=e=>n=>({key:e+`:`+String(n.name||``),name:String(n.name||``),aggregated:Cx(t,n.name),description:String(n.description||``).trim()});return[{key:`tools`,title:`Tools`,items:(t.tools||[]).map(r(`tool`))},{key:`prompts`,title:`Prompts`,items:(t.prompts||[]).map(r(`prompt`))},{key:`resources`,title:`Resources`,items:(t.resources||[]).map(e=>({key:`resource:`+String(e.uri||``),name:String(e.uri||``),aggregated:``,description:n(e.name,e.description)}))},{key:`templates`,title:`Resource templates`,items:(t.templates||[]).map(e=>({key:`template:`+String(e.uri_template||``),name:String(e.uri_template||``),aggregated:``,description:n(e.name,e.description)}))}].filter(e=>e.items.length>0)}function Tx(e){return wx(e).length===0}function Ex(e){return(e||[]).length}function Dx(e){return(e||[]).filter(e=>ux(e)===`connected`).length}function Ox(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&ux(e)===`degraded`).length}function kx(e,t){return!!e&&Ex(t)>0}function Ax(e){return String(Dx(e))+`/`+String(Ex(e))}function jx(e){return Ox(e)>0?`is-degraded`:`is-healthy`}function Mx(e){let t=Ox(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Ex(e),r=Dx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Nx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Px(e){let t=e&&typeof e==`object`?e:{};return{interval:t.interval===`hour`?`hour`:`day`,buckets:Array.isArray(t.buckets)?t.buckets:[],summary:t.summary&&typeof t.summary==`object`?t.summary:{requests:0},provider_latency:Array.isArray(t.provider_latency)?t.provider_latency:[]}}function Fx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Ix(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Lx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function Rx(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function zx(e){let t=Number(e);return Number.isFinite(t)?t>=6e4?(t/6e4).toFixed(1)+` min`:t>=1e3?(t/1e3).toFixed(2)+` s`:Math.round(t)+` ms`:`-`}function Bx(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:zx(Number(t))}function Vx(e,t){try{let n={};return new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,hourCycle:`h23`}).formatToParts(e).forEach(e=>{n[e.type]=e.value}),{year:n.year,month:n.month,day:n.day,hour:Number(n.hour)}}catch{return{year:String(e.getFullYear()),month:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][e.getMonth()],day:String(e.getDate()),hour:e.getHours()}}}function Hx(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=Vx(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function Ux(e,t,n,r){let i=new Date(e.start);if(Number.isNaN(i.getTime()))return String(e.start||``);if(t===`hour`)return r(e.start);let a=Vx(i,n);return a.month+` `+a.day+`, `+a.year}function Wx(e){return{ok:e(`var(--success)`),clientError:e(`var(--warning)`),serverError:e(`var(--danger)`),other:e(`color-mix(in srgb, var(--text-muted) 55%, transparent)`)}}function Gx(e,t,n={}){let r=n.interval===`hour`?`hour`:`day`,i=n.zone,a=n.resolve||(e=>e),o=n.formatTimestamp||(e=>String(e)),s=t.map(e=>Hx(e,r,i)),c=Wx(a),l=a(`var(--bg-surface)`),u=e=>Number(e)||0,d=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:l,borderWidth:1,borderSkipped:!1,borderRadius:2,maxBarThickness:28}),f=[d(`2xx`,t.map(e=>u(e.status_2xx)),c.ok),d(`4xx`,t.map(e=>u(e.status_4xx)),c.clientError),d(`5xx`,t.map(e=>u(e.status_5xx)),c.serverError)];return t.some(e=>u(e.status_other)>0)&&f.push(d(`Other`,t.map(e=>u(e.status_other)),c.other)),{type:`bar`,data:{labels:s,datasets:f},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{title:e=>e.length?Ux(t[e[0].dataIndex],r,i,o):``,label:e=>e.dataset.label+`: `+e.parsed.y.toLocaleString(),footer:e=>{let t=0;return e.forEach(e=>{t+=Number(e.parsed.y)||0}),`Total: `+t.toLocaleString()}})},scales:{x:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Ny(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),precision:0,callback:e=>oc(e)}}}}}}function Kx(e=Ly()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function qx(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||Kx();return{type:`line`,data:{labels:t.map(e=>Hx(e,i,a)),datasets:n.map(e=>({label:e.provider,data:(e.avg_duration_ms||[]).map(e=>e==null?null:Number(e)),borderColor:s(e.provider),backgroundColor:s(e.provider),fill:!1,tension:.3,borderWidth:2,pointRadius:0,pointHoverRadius:4,spanGaps:i===`hour`&&2}))},options:{responsive:!0,maintainAspectRatio:!1,animation:{duration:0},interaction:{mode:`index`,intersect:!1},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{title:e=>e.length?Ux(t[e[0].dataIndex],i,a,o):``,label:e=>{let t=(n[e.datasetIndex]&&n[e.datasetIndex].requests||[])[e.dataIndex],r=Number(t)||0;return e.dataset.label+`: `+zx(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),callback:e=>zx(e)}}}}}}var Jx=class{#e=k(j(Nb()));get status(){return I(this.#e)}set status(e){A(this.#e,e,!0)}#t=k(!1);get loading(){return I(this.#t)}set loading(e){A(this.#t,e,!0)}#n=k(!1);get loadedOnce(){return I(this.#n)}set loadedOnce(e){A(this.#n,e,!0)}#r=k(!1);get detailsExpanded(){return I(this.#r)}set detailsExpanded(e){A(this.#r,e,!0)}#i=k(j({}));get cardOverrides(){return I(this.#i)}set cardOverrides(e){A(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Pb(Ca());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Lb(this.cardOverrides,this.detailsExpanded,e)}toggleCard(e){let t=e&&e.name?String(e.name):``;if(!t)return;let n={...this.cardOverrides};n[t]=!this.cardExpanded(e),this.cardOverrides=n,Ib(Ca(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Fb(Ca(),this.detailsExpanded),Ib(Ca(),this.cardOverrides)}detailsToggleLabel(){return this.detailsExpanded?`Show Details`:`Hide Details`}async fetch(){this.initPreferences(),this.#a&&this.#a.abort();let e=new AbortController;this.#a=e,this.loading=!0;try{let t=await fs(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Nb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Nb();n.summary||=Nb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(ms(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Nb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),Ub(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Ab))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},Yx=class{#e=k(j(Nx()));get stats(){return I(this.#e)}set stats(e){A(this.#e,e,!0)}#t=k(!1);get loading(){return I(this.#t)}set loading(e){A(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await fs(`/admin/audit/stats?`+Oc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Nx();return}this.stats=Px(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Nx()}finally{e===this.#n&&(this.loading=!1)}}},Xx=class{#e=k(j([]));get servers(){return I(this.#e)}set servers(e){A(this.#e,e,!0)}#t=k(!1);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}async fetch(){if(await _s.ensureLoaded(),!_s.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await fs(`/admin/mcp-servers`,{label:`mcp servers`});if(e.stale)return;if(e.status===503||e.status===404){this.available=!1,this.servers=[];return}if(this.available=!0,!e.ok){this.servers=[];return}this.servers=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch MCP servers:`,e),this.servers=[]}finally{this.loading=!1}}},Zx=class{#e=k(j([]));get data(){return I(this.#e)}set data(e){A(this.#e,e,!0)}#t=k(`tokens`);get mode(){return I(this.#t)}set mode(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=null;async fetch(){this.#r&&this.#r.abort();let e=new AbortController;this.#r=e,this.loading=!0;try{let t=await fs(`/admin/usage/daily?days=365&interval=daily`,{label:`calendar`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.data=[];return}this.data=Array.isArray(t.data)?t.data:[]}catch(e){if(ms(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},Qx=new Jx,$x=new Yx,eS=new Xx,tS=new Zx,nS=(e,t=f,n=f,r=f,i=f)=>{var a=iS(),o=M(a),s=M(o,!0);T(o);var c=P(o,2),l=M(c),u=M(l),d=M(u,!0);T(u),Ue(),T(l);var p=P(l,4),m=M(p),h=M(m,!0);T(m),Ue(),T(p);var g=P(p,4),_=M(g,!0);T(g),T(c),T(a),F((e,n,r,i,a,o)=>{B(s,t()),W(l,`title`,e),B(d,n),W(p,`title`,r),B(h,i),W(g,`title`,a),B(_,o)},[()=>sc(`Input tokens`,n()),()=>oc(n()),()=>sc(`Output tokens`,r()),()=>oc(r()),()=>sc(`Total tokens`,i()),()=>oc(i())]),z(e,a)},rS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=sS(),c=M(s),l=M(c,!0);T(c);var u=P(c,2),d=M(u,!0);T(u);var p=P(u,2),m=e=>{var t=aS(),n=M(t,!0);T(t),F(()=>{W(t,`aria-label`,o().title),W(t,`title`,o().title),B(n,a())}),L(`click`,t,function(...e){o().onclick?.apply(this,e)}),z(e,t)},h=e=>{var t=oS(),n=M(t,!0);T(t),F(()=>B(n,a())),z(e,t)};V(p,e=>{o()?e(m):e(h,-1)}),T(s),F(()=>{U(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),B(l,r()),B(d,i())}),z(e,s)},iS=R(`
        i + o =
        `),aS=R(``),oS=R(` `),sS=R(`
        `),cS=R(`
        Cache Hits
        `),lS=R(`
        Total Requests
        Estimated Cost
        Prompt Cache Rate
        `);function uS(e,t){E(t,!0);let n=O(()=>Pc.summary),r=O(()=>Pc.cacheOverview),i=O(()=>Pc.cacheAnalyticsEnabled()),a=O(()=>Qx.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=lS(),c=M(s);{let e=O(()=>cb(I(n)));nS(c,()=>`Tokens`,()=>I(n).total_input_tokens,()=>I(n).total_output_tokens,()=>I(e))}var l=P(c,2),u=P(M(l),2),d=M(u,!0);T(u),T(l);var f=P(l,2),p=e=>{var t=cS(),n=P(M(t),2),i=M(n,!0);T(n),T(t),F(e=>B(i,e),[()=>nc(I(r).summary.total_hits)]),z(e,t)};V(f,e=>{I(i)&&e(p)});var m=P(f,2),h=P(M(m),2),g=M(h,!0);T(h),T(m);var _=P(m,2),v=e=>{{let t=O(()=>fb(I(r)));nS(e,()=>`Local Cache`,()=>I(r).summary.total_input_tokens,()=>I(r).summary.total_output_tokens,()=>I(t))}};V(_,e=>{I(i)&&e(v)});var y=P(_,2),b=P(M(y),2),x=M(b);Dy(x,{build:()=>Db(Cb(I(n)),Fy(`var(--token-prompt)`),Fy(`var(--bg-surface-hover)`))});var S=P(x,2),C=M(S,!0);T(S),T(b),T(y);var w=P(y,2),ee=e=>{{let t=O(()=>Rb(I(a))),n=O(()=>Bb(I(a))),r=O(()=>Hb(I(a))),i=O(()=>Vb(I(a))?{title:`View providers overview`,onclick:o}:null);rS(e,()=>`provider-status-overview-card`,()=>I(t),()=>`Provider Status`,()=>I(n),()=>I(r),()=>I(i))}};V(w,e=>{I(a).total>0&&e(ee)});var te=P(w,2),ne=e=>{{let t=O(()=>jx(eS.servers)),n=O(()=>Ax(eS.servers)),r=O(()=>Mx(eS.servers));rS(e,()=>`mcp-servers-flag`,()=>I(t),()=>`MCP Servers`,()=>I(n),()=>I(r),()=>({title:`View MCP servers`,onclick:()=>Uo.navigate(`mcp-servers`)}))}},re=O(()=>kx(eS.available,eS.servers));V(te,e=>{I(re)&&e(ne)}),T(s),F((e,t,n,r,i)=>{W(u,`title`,e),B(d,t),B(g,n),W(b,`aria-label`,r),B(C,i)},[()=>db(I(n),I(r),I(i)),()=>nc(ub(I(n),I(r),I(i))),()=>rc(I(n).total_cost),()=>`Prompt cache rate `+Tb(I(n)),()=>Tb(I(n))]),z(e,s),D()}Hr([`click`]);var dS=R(` `),fS=R(`
        `),pS=R(`No usage in the selected period yet`),mS=R(`
        `),hS=R(`

        Tokens

        Share of input tokens over the selected period
        `);function gS(e,t){E(t,!0);let n=O(()=>Pc.cacheAnalyticsEnabled()),r=O(()=>gb(Pc.summary,Pc.cacheOverview,I(n))),i=O(()=>_b(Pc.summary,Pc.cacheOverview,I(n))),a=O(()=>hb(Pc.summary,Pc.cacheOverview,I(n)));var o=hS(),s=P(M(o),2);let c;var l=M(s);H(l,17,()=>I(i),e=>e.key,(e,t)=>{var n=fS(),r=M(n),i=e=>{var n=dS(),r=M(n);T(n),F(()=>B(r,`${I(t).pct??``}%`)),z(e,n)};V(r,e=>{I(t).pct>=8&&e(i)}),T(n),F(e=>{Hi(n,`width: ${I(t).pct??``}%; background: var(${I(t).colorVar??``})`),W(n,`title`,e)},[()=>vb(I(t))]),z(e,n)});var u=P(l,2),d=e=>{z(e,pS())};V(u,e=>{I(a)||e(d)}),T(s);var f=P(s,2);H(f,21,()=>I(r),e=>e.key,(e,t)=>{var n=mS(),r=M(n),i=P(r,2),a=M(i,!0);T(i);var o=P(i,2),s=M(o);T(o);var c=P(o,2),l=M(c,!0);T(c),T(n),F((e,i)=>{W(n,`title`,e),Hi(r,`background: var(${I(t).colorVar??``})`),B(a,I(t).label),B(s,`${I(t).pct??``}%`),B(l,i)},[()=>vb(I(t)),()=>nc(I(t).tokens)]),z(e,n)}),T(f),T(o),F(e=>{c=U(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!I(a)}),W(s,`aria-label`,e)},[()=>yb(I(i))]),z(e,o),D()}var _S=R(``);function vS(e,t){let n=G(t,`size`,3,16),r=G(t,`label`,3,`Loading`),i=G(t,`class`,3,``);var a=_S();F(()=>{U(a,1,Fi([`spinner`,i()]),`svelte-b54l9o`),Hi(a,`--spinner-size: ${n()??``}px`),W(a,`aria-label`,r())}),z(e,a)}var yS=Xr(` `),bS=Xr(``);function xS(e,t){let n=G(t,`label`,3,`No data`);var r=bS(),i=P(M(r),9),a=e=>{var t=yS(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)};V(i,e=>{n()&&e(a)}),T(r),F(()=>{W(r,`role`,n()?`img`:void 0),W(r,`aria-label`,n()||void 0),W(r,`aria-hidden`,n()?void 0:`true`)}),z(e,r)}var SS=R(`
        `),CS=R(`

        `);function wS(e,t){E(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Oc.interval=e,t.onintervalchange?.()}function i(){let e=Pc.daily;if(e.length===0)return null;let t=Oc.rangeStart(),n=Oc.rangeEnd(),r=Sb(xb(e,Oc.interval,t,n),xb(Array.isArray(Pc.cacheOverview.daily)?Pc.cacheOverview.daily:[],Oc.interval,t,n));return Eb(My(),r,{cacheEnabled:Pc.cacheAnalyticsEnabled(),resolve:Fy})}var a=CS(),o=M(a),s=M(o),c=M(s,!0);T(s);var l=P(s,2);{let e=O(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Ay(l,{ariaLabel:`Usage chart interval`,get options(){return I(e)},get value(){return Oc.interval},onchange:r})}T(o);var u=P(o,2),d=M(u);Dy(d,{build:i});var f=P(d,2),p=e=>{var t=SS();vS(M(t),{size:24,label:`Loading usage`}),T(t),z(e,t)},m=e=>{var t=SS();xS(M(t),{}),T(t),z(e,t)};V(f,e=>{Pc.daily.length===0&&Pc.loading?e(p):Pc.daily.length===0&&!q.authError&&e(m,1)}),T(u),T(a),F(e=>B(c,e),[()=>Oc.chartTitle()]),z(e,a),D()}var TS=10,ES=.7;function DS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+ES,r=Math.ceil(n*TS);return r<1?1:r>TS?TS:r}function OS(){let e=[];for(let t=0;t<=TS;t++)e.push(t);return e}function kS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=qo(Yo(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);Jo(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=Jo(e),i=r[n],a=0;i&&(a=t===`costs`?i.total_cost==null?0:i.total_cost:i.total_tokens||0),o.push({dateStr:n,value:a,level:0,empty:!1})}let s=0;for(let e=0;es&&(s=o[e].value);for(let e=0;e0){for(;l.length<7;)l.push({dateStr:``,value:0,level:0,empty:!0});c.push(l)}return c}function AS(e){let t=qo(Yo(e,-364)),n=t.getUTCDay();t.setUTCDate(t.getUTCDate()-n);let r=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],i=[],a={},o=0;for(let n=new Date(t);Jo(n)<=e;n.setUTCDate(n.getUTCDate()+7),o++){let t=null;if(o===0)t=new Date(n);else for(let r=0;r<7;r++){let i=new Date(n);if(i.setUTCDate(n.getUTCDate()+r),Jo(i)>e)break;if(i.getUTCDate()===1){t=i;break}}if(!t)continue;let s=t.getUTCFullYear()+`-`+t.getUTCMonth();a[s]||(i.push({label:r[t.getUTCMonth()],col:o,key:s}),a[s]=!0)}for(let e=0;e `),PS=R(`
        `),FS=R(`
        `),IS=R(`
        `),LS=R(`
        `),RS=R(`

        Activity

        Mon Wed Fri
        `,1);function zS(e,t){E(t,!0);let n=k(j({show:!1,x:0,y:0,text:``})),r=O(()=>os.currentDateKey()),i=O(()=>kS(tS.data,tS.mode,I(r))),a=O(()=>AS(I(r)));function o(e,t){t.empty||A(n,{show:!0,x:e.clientX,y:e.clientY,text:MS(t,tS.mode)},!0)}function s(){A(n,{show:!1,x:0,y:0,text:``},!0)}var c=RS(),l=N(c),u=M(l),d=P(M(u),2),f=e=>{vS(e,{size:14,label:`Loading activity`})};V(d,e=>{tS.loading&&tS.data.length===0&&e(f)}),Ay(P(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return tS.mode},onchange:e=>tS.mode=e}),T(u);var p=P(u,2),m=P(M(p),2),h=M(m);H(h,21,()=>I(a),e=>e.key,(e,t)=>{var n=NS(),r=M(n,!0);T(n),F(()=>{Hi(n,`grid-column: ${I(t).col+1} / span ${I(t).span??``}`),B(r,I(t).label)}),z(e,n)}),T(h);var g=P(h,2);H(g,21,()=>I(i),oi,(e,t,n)=>{var r=FS();H(r,23,()=>I(t),(e,t)=>n+`-`+t,(e,t)=>{var n=PS();F(()=>U(n,1,Fi([`contribution-calendar-cell`,I(t).empty?`empty`:`level-${I(t).level}`]),`svelte-3hfxuq`)),Vr(`mouseenter`,n,e=>o(e,I(t))),Vr(`mouseleave`,n,s),z(e,n)}),T(r),z(e,r)}),T(g),T(m),T(p);var _=P(p,2),v=M(_),y=M(v),b=M(y,!0);T(y),T(v);var x=P(v,2);H(P(M(x),2),16,OS,e=>e,(e,t)=>{var n=IS();F(()=>U(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),z(e,n)}),Ue(2),T(x),T(_),T(l);var S=P(l,2),C=e=>{var t=LS(),r=M(t,!0);T(t),F(()=>{Hi(t,`left: ${I(n).x??``}px; top: ${I(n).y-40}px`),B(r,I(n).text)}),z(e,t)};V(S,e=>{I(n).show&&e(C)}),F(e=>B(b,e),[()=>jS(tS.data,tS.mode)]),z(e,c),D()}var BS=R(``),VS=R(`

        `),HS=R(`
        `);function US(e,t){E(t,!0);let n=G(t,`label`,3,`help`),r=G(t,`text`,3,``),i=G(t,`open`,15,!1),a=G(t,`external`,3,!1),o=O(()=>!!r()||!!t.help||a());var s=HS(),c=M(s),l=M(c);gi(l,()=>t.title??f);var u=P(l,2),d=e=>{var r=BS();let a;F(()=>{a=U(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),W(r,`aria-label`,(i()?`Hide `:`Show `)+n()),W(r,`aria-expanded`,i()),W(r,`aria-controls`,t.copyId)}),L(`click`,r,()=>i(!i())),z(e,r)};V(u,e=>{I(o)&&e(d)}),gi(P(u,2),()=>t.extra??f),T(c);var p=P(c,2),m=e=>{var n=VS(),i=M(n),a=e=>{var n=Qr();gi(N(n),()=>t.help),z(e,n)},o=e=>{var t=Zr();F(()=>B(t,r())),z(e,t)};V(i,e=>{t.help?e(a):e(o,-1)}),T(n),F(()=>W(n,`id`,t.copyId)),z(e,n)};V(p,e=>{i()&&I(o)&&!a()&&e(m)}),T(s),z(e,s),D()}Hr([`click`]);var WS=R(`

        Provider Latency

        `),GS=R(`
        Avg
        `),KS=R(`

        Requests by Status

        Success 2xx 4xx 5xx
        `,1);function qS(e,t){E(t,!0);let n=Kx(),r=O(()=>$x.stats);function i(){return{interval:I(r).interval,zone:os.effectiveTimezone(),resolve:Fy,formatTimestamp:e=>os.formatTimestamp(e)}}var a=Qr(),o=N(a),s=e=>{var t=KS(),a=N(t),o=M(a),s=P(M(o),2),c=M(s),l=P(M(c),2),u=M(l,!0);T(l),T(c);var d=P(c,2),f=P(M(d),4),p=M(f,!0);T(f),T(d);var m=P(d,2),h=P(M(m),4),g=M(h,!0);T(h),T(m);var _=P(m,2),v=P(M(_),4),y=M(v,!0);T(v),T(_),T(s),T(o);var b=P(o,2);Dy(M(b),{build:()=>Gx(My(),I(r).buckets,i())}),T(b),T(a);var x=P(a,2),S=e=>{var t=GS(),a=M(t),o=M(a);US(o,{copyId:`audit-latency-help-copy`,label:`provider latency help`,text:`Average duration of successful requests as measured at the gateway, per provider. Local cache hits and failed requests are excluded; streamed responses count until the stream completes.`,title:e=>{z(e,WS())},$$slots:{title:!0}});var s=P(o,2),c=M(s),l=P(M(c),2),u=M(l,!0);T(l),T(c),T(s),T(a);var d=P(a,2);Dy(M(d),{build:()=>qx(My(),I(r).buckets,I(r).provider_latency,{...i(),providerColor:n})}),T(d),T(t),F(e=>B(u,e),[()=>Bx(I(r))]),z(e,t)},C=O(()=>Ix(I(r)));V(x,e=>{I(C)&&e(S)}),F((e,t,n,r)=>{B(u,e),B(p,t),B(g,n),B(y,r)},[()=>Lx(I(r)),()=>nc(Rx(I(r),`status_2xx`)),()=>nc(Rx(I(r),`status_4xx`)),()=>nc(Rx(I(r),`status_5xx`))]),z(e,t)},c=O(()=>Fx(I(r)));V(o,e=>{I(c)&&e(s)}),z(e,a),D()}var JS=(e,t=f,n=f,r)=>{let i=Ot(()=>h(r?.(),!1));var a=ZS(),o=M(a),s=M(o,!0);T(o);var c=P(o,2),l=e=>{var t=YS(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)},u=e=>{var t=XS(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)};V(c,e=>{I(i)?e(l):e(u,-1)}),T(a),F(()=>B(s,t())),z(e,a)},YS=R(` `),XS=R(` `),ZS=R(`
        `),QS=R(`

        `),$S=R(`
        Breaker State
        `),eC=R(`
        `),tC=R(`
        Models (Recent Traffic)
        `),nC=R(`
        `),rC=R(`

        `);function iC(e,t){E(t,!0);let n=O(()=>nx(t.provider)),r=O(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=rC();let a;var o=M(i),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=e=>{var n=QS(),r=M(n,!0);T(n),F(()=>B(r,t.provider.last_error)),z(e,n)};V(l,e=>{t.provider.last_error&&e(u)});var d=P(l,2),f=e=>{var r=nC(),i=M(r);{let e=O(()=>rx(t.provider));JS(i,()=>`Recent Requests`,()=>I(e))}var a=P(i,2),o=e=>{var r=$S(),i=P(M(r),2),a=M(i),o=M(a,!0);T(a),T(i),T(r),F(e=>{U(a,1,Fi([`provider-status-health-state`,I(n)]),`svelte-6y9wjv`),B(o,e)},[()=>tx(t.provider)]),z(e,r)},s=O(()=>ex(t.provider));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{var n=tC(),r=P(M(n),2);H(r,21,()=>ix(t.provider),e=>e.model,(e,t)=>{var n=eC();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(n),F((e,i)=>{r=U(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":I(t).flagged}),W(n,`title`,e),B(a,I(t).model),B(s,i)},[()=>ox(I(t)),()=>ax(I(t))]),z(e,n)}),T(r),T(n),z(e,n)},u=O(()=>ix(t.provider).length>0);V(c,e=>{I(u)&&e(l)}),T(r),z(e,r)},p=O(()=>$b(t.provider));V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=M(m);H(h,17,()=>I(r),([e,t])=>e,(e,t)=>{var n=O(()=>g(I(t),2));JS(e,()=>I(n)[0],()=>I(n)[1],()=>!0)});var _=P(h,2);{let e=O(()=>Zb(t.provider));JS(_,()=>`Configured Models`,()=>I(e))}var v=P(_,2);{let e=O(()=>Yb(t.provider));JS(v,()=>`Retry`,()=>I(e))}var y=P(v,2);{let e=O(()=>Xb(t.provider));JS(y,()=>`Circuit Breaker`,()=>I(e))}T(m),T(o),T(i),F(()=>{a=U(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),W(i,`aria-hidden`,!t.expanded),B(c,t.provider.status_reason)}),z(e,i),D()}var aC=R(` `),oC=R(``),sC=R(`

        Models Available
        Last Checked
        `);function cC(e,t){E(t,!0);let n=O(()=>Qx.cardExpanded(t.provider)),r=e=>os.formatTimestamp(e);var i=sC(),a=M(i),o=M(a),s=M(o),c=M(s),l=M(c,!0);T(c);var u=P(c,2),d=e=>{var n=aC(),r=M(n);T(n),F(e=>B(r,`(${e??``})`),[()=>qb(t.provider)]),z(e,n)},f=O(()=>qb(t.provider));V(u,e=>{I(f)&&e(d)});var p=P(u,2),m=e=>{var n=oC();F((e,t,r)=>{W(n,`href`,e),W(n,`aria-label`,t),W(n,`title`,r)},[()=>Jb(t.provider),()=>`View `+(qb(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(qb(t.provider)||t.provider.name)+` provider docs`]),z(e,n)},h=O(()=>Jb(t.provider));V(p,e=>{I(h)&&e(m)}),T(s),T(o);var g=P(o,2),_=M(g,!0);T(g),T(a);var v=P(a,2),y=M(v),b=P(M(y),2),x=M(b,!0);T(b),T(y);var S=P(y,2),C=P(M(S),2),w=M(C,!0);T(C),T(S),T(v);var ee=P(v,2);iC(ee,{get provider(){return t.provider},get expanded(){return I(n)}});var te=P(ee,2);let ne;K(M(te),{get icon(){return za},class:`provider-status-card-toggle-icon`}),T(te),T(i),F((e,r,i,a,o)=>{B(l,t.provider.name),U(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),W(g,`title`,r),B(_,t.provider.status_label),B(x,i),W(C,`title`,a),B(w,o),ne=U(te,1,`provider-status-card-toggle svelte-nopjmh`,null,ne,{"is-expanded":I(n)}),W(te,`aria-expanded`,I(n)),W(te,`aria-label`,(I(n)?`Collapse `:`Expand `)+t.provider.name+` details`),W(te,`title`,I(n)?`Collapse details`:`Expand details`)},[()=>zb(t.provider.status),()=>Qb(t.provider),()=>nc(t.provider.runtime?.discovered_model_count),()=>Kb(t.provider,r),()=>Gb(t.provider,r)]),L(`click`,te,()=>Qx.toggleCard(t.provider)),z(e,i),D()}Hr([`click`]);var lC=R(`

        Providers Overview

        `),uC=R(`
        `);function dC(e,t){E(t,!0);let n=O(()=>Qx.status.providers);var r=Qr(),i=N(r),a=e=>{var t=lC(),r=M(t),i=P(M(r),2),a=M(i),o=M(a,!0);T(a);var s=P(a,2);let c;T(i),T(r);var l=P(r,2);H(l,21,()=>I(n),e=>e.name,(e,t)=>{cC(e,{get provider(){return I(t)}})}),T(l),T(t),F((e,t)=>{W(i,`aria-checked`,Qx.detailsExpanded),W(i,`title`,e),B(o,t),c=U(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":Qx.detailsExpanded})},[()=>Qx.detailsToggleLabel(),()=>Qx.detailsToggleLabel()]),L(`click`,i,()=>Qx.toggleDetails()),z(e,t)},o=e=>{var t=uC();vS(M(t),{size:18,label:`Loading provider status`}),T(t),z(e,t)};V(i,e=>{I(n).length>0?e(a):Qx.loading&&!Qx.loadedOnce&&e(o,1)}),z(e,r),D()}Hr([`click`]);var fC=R(`
        `);function pC(e,t){E(t,!0);function n(){Pc.fetchUsage(),Pc.fetchCacheOverview(``),$x.fetch(),Qx.fetch(),eS.fetch(),tS.fetch()}function r(){Pc.fetchUsage(),Pc.fetchCacheOverview(``),$x.fetch()}function i(){r(),tS.fetch()}An(()=>{if(q.refreshTick,Uo.page===`overview`)return Er(()=>{n(),rb.start()}),()=>{rb.stop(),Qx.stopPolling()}});var a=fC(),o=M(a);sb(o,{});var s=P(o,4);Zc(M(s),{onchange:i}),T(s);var c=P(s,2);jc(c,{});var l=P(c,2);uS(l,{});var u=P(l,2);gS(u,{});var d=P(u,2);wS(d,{onintervalchange:r});var f=P(d,2);zS(f,{});var p=P(f,2);qS(p,{}),dC(P(p,2),{}),T(a),z(e,a),D()}var mC=`/admin/live/logs?types=audit,usage`;function hC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function gC(e){switch(e){case`date_range`:return`Live paused — the selected date range does not include today. Set it to today to resume.`;case`filters`:return`Live paused while filters are active. Clear them to resume.`;case`pagination`:return`Live paused on later pages. Go to the first page to resume.`;default:return``}}function _C(e){let t=mC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function vC(){return{async consumeLiveLogsBody(e){await By(e,e=>this.applyLiveLogEvent(e))},applyLiveLogEvent(e){if(!e||typeof e!=`object`)return;let t=Number(e.seq||0);Number.isFinite(t)&&t>this.liveLogsLastSeq&&(this.liveLogsLastSeq=t);let n=String(e.type||``).trim();if(n!==`heartbeat`){if(n===`reset`){this.reloadLiveLogSources();return}if(n===`audit.removed`){this.removeLiveAuditEntry(e.data);return}if(n.indexOf(`audit.`)===0){this.mergeLiveAuditEntry(e.data||{},n);return}n.indexOf(`usage.`)===0&&(this.mergeLiveUsageEntry(e.data||{},n),typeof this.noteLiveTokenUsage==`function`&&this.noteLiveTokenUsage(n))}},reloadLiveLogSources(){typeof this.fetchUsage==`function`&&this.fetchUsage(),this.page===`audit-logs`&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},auditLivePauseReason(){return!this.auditLog||this.auditLog.offset!==0?`pagination`:this.auditSearch||this.auditMethod||this.auditStatusCode||this.auditStream?`filters`:!this.followsToday&&(this.customStartDate||this.customEndDate)?`date_range`:null},auditLiveInsertAllowed(){return!this.auditLivePauseReason()},usageLiveInsertAllowed(){return this.usageLog&&this.usageLog.offset===0&&!this.usageLogSearch&&!this.usageFilterModel&&!this.usageFilterProvider&&!this.usageFilterLabel&&!this.usageFilterUserPath},mergeLiveAuditEntry(e,t){if(!e||typeof e!=`object`)return;let n=String(e.id||e.request_id||``).trim();if(!n)return;let r=String(e.request_id||``).trim(),i=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],a=i.findIndex(e=>hC(e,n,r)),o=a>=0&&i[a]||{},s=t===`audit.detail`,c=s?{...e,_detail_loaded:!0,_response_partial:!1,bodies_omitted:!1}:this.liveAuditPatch(o,e,t);if(a>=0){let e=this.mergeLiveAuditPatch(o,c);return i.splice(a,1,e),this.auditLog.entries=[...i],this.regroupLiveAuditHead(e),s||this.fetchExpandedAuditDetailIfReady(e),this.notifyLiveConversation(e),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.notifyLiveConversation(l),l;if(!this.auditLiveInsertAllowed())return;if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.notifyLiveConversation(e),e}this.auditLog.entries=[this.mergeLiveAuditUsagePatch(c),...i].slice(0,this.auditLog.limit||25),this.auditLog.total=Number(this.auditLog.total||0)+1;let u=this.auditLog.entries[0];return s||this.fetchExpandedAuditDetailIfReady(u),this.notifyLiveConversation(u),u},liveAuditPatch(e,t,n){let r=this.liveAuditStateAfter(e._live_state,n),i=this.liveAuditEventFlushed(e._live_state)||this.liveAuditEventFlushed(r),a={...t,_live:!0,_live_state:r,_audit_flushed:i,_live_pending:!i};return n===`audit.stream`?a._response_partial=!0:this.liveAuditStateSettled(n)&&(a._response_partial=!1),a},mergeLiveAuditChild(e,t){let n=this.auditThreadChildren;if(!n||typeof n!=`object`)return null;let r=String(e.id||``).trim(),i=String(e.request_id||``).trim(),a=Object.keys(n);for(let e=0;ehC(e,r,i));if(c<0)continue;let l=this.mergeLiveAuditPatch(s[c]||{},t),u=[...s];return u.splice(c,1,l),this.auditThreadChildren={...n,[a[e]]:{...o,entries:u}},l}return null},regroupLiveAuditHead(e){if(!this.auditGroupSessions)return null;let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=String(e.id||``).trim(),i=n.findIndex(e=>String(e.id||``).trim()===r);if(i<0)return null;let a=n.findIndex((e,n)=>n!==i&&String(e.session_id||``).trim()===t);if(a<0)return null;let o=n[a],s=Date.parse(o&&o.timestamp),c=Date.parse(e&&e.timestamp),l=Number.isFinite(s)&&Number.isFinite(c)&&s>c,u=l?o:e,d=l?e:o,f={...u,session_count:Math.max(1,Number(o.session_count||1))+Math.max(1,Number(e.session_count||1))},p=n.filter((e,t)=>t!==i&&t!==a);return p.unshift(f),this.auditLog.entries=p,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-1),this.prependLiveAuditThreadChild(t,d),f},foldLiveAuditIntoThread(e){let t=String(e&&e.session_id||``).trim();if(!t)return null;let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(e=>String(e.session_id||``).trim()===t);if(r<0)return null;let i=n[r],a=Number(i.session_count),o=this.mergeLiveAuditUsagePatch({...e,session_count:(Number.isFinite(a)&&a>0?a:1)+1}),s=[...n];return s.splice(r,1),s.unshift(o),this.auditLog.entries=s,this.prependLiveAuditThreadChild(t,i),o},prependLiveAuditThreadChild(e,t){let n=this.auditThreadChildren||{},r=n[e],i={...t};delete i.session_count;let a=r&&Array.isArray(r.entries)?{...r,entries:[i,...r.entries],total:Number(r.total||r.entries.length)+1}:{loading:!1,loaded:!1,entries:[i],total:1};this.auditThreadChildren={...n,[e]:a}},removeLiveAuditThreadChild(e,t){let n=this.auditThreadChildren;!n||typeof n!=`object`||Object.keys(n).forEach(r=>{let i=n[r],a=i&&Array.isArray(i.entries)?i.entries:[],o=a.filter(n=>!hC(n,e,t)),s=a.length-o.length;s!==0&&(this.auditThreadChildren={...this.auditThreadChildren,[r]:{...i,entries:o,total:Math.max(0,Number(i.total||a.length)-s)}},this.decrementLiveAuditThreadCount(r,s))})},decrementLiveAuditThreadCount(e,t){let n=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],r=n.findIndex(t=>String(t.session_id||``).trim()===e);if(r<0)return;let i=n[r],a=[...n];a.splice(r,1,{...i,session_count:Math.max(1,Number(i.session_count||1)-t)}),this.auditLog.entries=a},mergeLiveAuditPatch(e,t){let n={...e,...t};return t.data===void 0&&e.data!==void 0?n.data=e.data:e.data&&t.data&&typeof e.data==`object`&&typeof t.data==`object`&&!Array.isArray(e.data)&&!Array.isArray(t.data)&&(n.data={...e.data,...t.data}),this.mergeLiveAuditUsagePatch(n)},mergeLiveAuditUsagePatch(e){let t=this.liveUsageEntryForAudit(e);if(!t)return e;let n=this.auditEntryWithLiveUsage(e,t);return this.removeSkippedLiveUsage(t),n},liveUsageEntryForAudit(e){let t=String(e&&e.request_id||``).trim();return t&&((this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[]).find(e=>String(e&&e.request_id||``).trim()===t)||this.skippedLiveUsageByRequestId&&this.skippedLiveUsageByRequestId[t])||null},notifyLiveConversation(e){e&&typeof this.refreshLiveConversation==`function`&&this.refreshLiveConversation(e)},fetchExpandedAuditDetailIfReady(e){!e||!this.isAuditEntryExpanded||!this.isAuditEntryExpanded(e)||String(e._live_state||``).trim()!==`audit.flushed`&&!e._audit_flushed||typeof this.fetchAuditEntryDetail==`function`&&this.fetchAuditEntryDetail(e)},liveAuditStateRank(e){switch(String(e||``).trim()){case`audit.started`:return 10;case`audit.updated`:case`audit.stream`:return 20;case`audit.completed`:return 30;case`audit.failed`:case`audit.flushed`:case`audit.detail`:return 40;default:return 0}},liveAuditStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveAuditStateRank(n)>this.liveAuditStateRank(r)?n:r},liveAuditStateSettled(e){return this.liveAuditStateRank(e)>=this.liveAuditStateRank(`audit.completed`)},liveAuditEventFlushed(e){let t=String(e||``).trim();return t===`audit.failed`||t===`audit.flushed`||t===`audit.detail`},removeLiveAuditEntry(e){if(!e||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim();if(!t&&!n)return;let r=this.auditLog.entries,i=[],a=0,o=0,s=!1;r.forEach(e=>{if(!hC(e,t,n)){i.push(e);return}a++;let r=String(e.session_id||``).trim(),c=Math.max(1,Number(e.session_count||1));if(!this.auditGroupSessions||!r||c<=1)return;o++;let l=this.auditThreadChildren&&this.auditThreadChildren[r],u=l&&Array.isArray(l.entries)?l.entries.filter(e=>!hC(e,t,n)):[];if(u.length===0){s=!0;return}let d={...u[0],session_id:r,session_count:c-1};i.push(d),this.auditThreadChildren={...this.auditThreadChildren,[r]:{...l,entries:u.slice(1),total:Math.max(0,Number(l.total||c)-1)}}}),a>0&&(this.auditLog.entries=i,this.auditLog.total=Math.max(0,Number(this.auditLog.total||0)-a+o)),this.removeLiveAuditThreadChild(t,n),s&&typeof this.fetchAuditLog==`function`&&this.fetchAuditLog(!0)},mergeLiveUsageEntry(e,t){if(!e||typeof e!=`object`)return;e={...e,_live_state:t||e._live_state||`usage.completed`};let n=String(e.id||``).trim();if(!n)return;let r=this.usageLog&&Array.isArray(this.usageLog.entries)?this.usageLog.entries:[],i=r.findIndex(e=>String(e.id||``).trim()===n);if(i>=0){let t=r[i]||{},n=this.mergeLiveUsagePatch(t,e);if(this.applyLiveUsageToAudit(n),this.liveUsageShouldSkip(n)){r.splice(i,1),this.usageLog.entries=[...r],this.usageLog.total=Math.max(0,Number(this.usageLog.total||0)-1),this.storeSkippedLiveUsage(n);return}r.splice(i,1,n),this.usageLog.entries=[...r],this.removeSkippedLiveUsage(n);return}let a=this.mergeLiveUsagePatch(this.liveUsageSeedForEntry(e),e);if(this.applyLiveUsageToAudit(a),this.liveUsageShouldSkip(a)){this.storeSkippedLiveUsage(a);return}this.removeSkippedLiveUsage(a),this.usageLog.entries=[a,...r].slice(0,this.usageLog.limit||50),this.usageLog.total=Number(this.usageLog.total||0)+1},mergeLiveUsagePatch(e,t){e=e&&typeof e==`object`?e:{};let n=this.liveUsageStateAfter(e._live_state,t&&t._live_state),r=this.liveUsageEventFlushed(e)||this.liveUsageEventFlushed({...t,_live_state:n});return{...e,...t,_live:!0,_live_state:n||`usage.completed`,_live_pending:!r,_usage_flushed:r}},liveUsageShouldSkip(e){return!!(this.usageLogHideCached&&this.liveUsageEntryCached(e))||!this.usageLiveInsertAllowed()},liveUsageSeedForEntry(e){return this.skippedLiveUsageForEntry(e)||this.auditLiveUsageForEntry(e)},skippedLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();return t&&this.skippedLiveUsageByRequestId?this.skippedLiveUsageByRequestId[t]:null},auditLiveUsageForEntry(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return null;let n=this.auditLog.entries.find(e=>String(e&&e.request_id||``).trim()===t),r=n&&n.usage&&typeof n.usage==`object`&&!Array.isArray(n.usage)?n.usage:null;return r?{id:e&&e.id,request_id:t,entries:r.entries,input_tokens:r.input_tokens,uncached_input_tokens:r.uncached_input_tokens,cached_input_tokens:r.cached_input_tokens,cache_write_input_tokens:r.cache_write_input_tokens,output_tokens:r.output_tokens,total_tokens:r.total_tokens,cached_input_ratio:r.cached_input_ratio,estimated_cached_characters:r.estimated_cached_characters,_live_state:n._usage_live_state,_live_pending:n._usage_live_pending,_usage_flushed:n._usage_flushed}:null},storeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&((!this.skippedLiveUsageByRequestId||typeof this.skippedLiveUsageByRequestId!=`object`||Array.isArray(this.skippedLiveUsageByRequestId))&&(this.skippedLiveUsageByRequestId={}),this.skippedLiveUsageByRequestId[t]=e)},removeSkippedLiveUsage(e){let t=String(e&&e.request_id||``).trim();t&&this.skippedLiveUsageByRequestId&&delete this.skippedLiveUsageByRequestId[t]},liveUsageEntryCached(e){let t=String(e&&e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`||!!(e&&e.cache_hit)},liveUsageEventFlushed(e){let t=String(e&&e._live_state||``).trim();return!!(e&&e._usage_flushed)||t===`usage.failed`||t===`usage.flushed`},liveUsageStateRank(e){switch(String(e||``).trim()){case`usage.completed`:return 10;case`usage.failed`:case`usage.flushed`:return 20;default:return 0}},liveUsageStateAfter(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return this.liveUsageStateRank(n)>this.liveUsageStateRank(r)?n:r},applyLiveUsageToAudit(e){let t=String(e&&e.request_id||``).trim();if(!t||!this.auditLog||!Array.isArray(this.auditLog.entries))return;let n=this.auditLog.entries.findIndex(e=>String(e.request_id||``).trim()===t);if(n>=0){let t=this.auditLog.entries[n];this.auditLog.entries.splice(n,1,this.auditEntryWithLiveUsage(t,e)),this.auditLog.entries=[...this.auditLog.entries]}let r=this.auditThreadChildren;if(!r||typeof r!=`object`)return;let i=r,a=!1;Object.keys(r).forEach(n=>{let r=i[n],o=r&&Array.isArray(r.entries)?r.entries:[],s=o.findIndex(e=>String(e.request_id||``).trim()===t);if(s<0)return;let c=[...o];c.splice(s,1,this.auditEntryWithLiveUsage(o[s],e)),i={...i,[n]:{...r,entries:c}},a=!0}),a&&(this.auditThreadChildren=i)},auditEntryWithLiveUsage(e,t){let n=this.liveUsageStateAfter(e._usage_live_state,t._live_state||`usage.completed`),r=this.liveUsageEventFlushed({_live_state:n,_usage_flushed:e._usage_flushed||t._usage_flushed});return{...e,usage:this.liveUsageSummary(t,e.usage),_usage_live_state:n||`usage.completed`,_usage_live_pending:!r,_usage_flushed:r}},liveUsageSummary(e,t){let n=t&&typeof t==`object`&&!Array.isArray(t)?t:{},r=this.liveNumber(e.input_tokens,this.liveNumber(n.input_tokens,0)),i=this.liveNumber(e.output_tokens,this.liveNumber(n.output_tokens,0)),a=this.liveNumber(e.uncached_input_tokens,this.liveNumber(n.uncached_input_tokens,0)),o=this.liveNumber(e.cached_input_tokens,this.liveNumber(n.cached_input_tokens,0)),s=this.liveNumber(e.cache_write_input_tokens,this.liveNumber(n.cache_write_input_tokens,0));r>0&&a+o+s===0&&(a=r);let c=a+o+s||r,l=c+i||this.liveNumber(e.total_tokens,this.liveNumber(n.total_tokens,0)),u=this.liveNumber(e.cached_input_ratio,this.liveNumber(n.cached_input_ratio,c>0?o/c:0));return{entries:Math.max(1,this.liveNumber(e.entries,this.liveNumber(n.entries,1))),input_tokens:c,uncached_input_tokens:a,cached_input_tokens:o,cache_write_input_tokens:s,output_tokens:i,total_tokens:l,cached_input_ratio:u,estimated_cached_characters:this.liveNumber(e.estimated_cached_characters,this.liveNumber(n.estimated_cached_characters,o*4))}},liveNumber(e,t){let n=Number(e);return Number.isFinite(n)?n:t},auditEntryShouldFetchDetail(e){return!e||e._detail_loading||e._detail_loaded||this.auditEntryLiveDetailPending(e)?!1:this.auditEntryNeedsPersistedLiveDetail(e)||e.bodies_omitted?!0:!this.auditEntryHasDetailData(e)},auditEntryLiveDetailPending(e){if(!e||!e._live)return!1;let t=String(e._live_state||``).trim();return t===`audit.failed`||!e._audit_flushed&&t!==`audit.flushed`&&t!==`audit.detail`},auditEntryNeedsPersistedLiveDetail(e){return!!(e&&e._live&&!e._detail_loaded)},auditEntryHasDetailData(e){let t=e&&e.data;return!t||typeof t!=`object`?!1:t.request_headers!==void 0||t.response_headers!==void 0||t.request_body!==void 0||t.response_body!==void 0||t.request_body_too_big_to_handle!==void 0||t.response_body_too_big_to_handle!==void 0||t.user_agent!==void 0||t.api_key_hash!==void 0||t.temperature!==void 0||t.max_tokens!==void 0||t.error_message!==void 0||t.error_code!==void 0},clearAuditDetailLoading(e){if(!e)return;let t=String(e.id||``).trim(),n=String(e.request_id||``).trim(),r=this.auditLog&&Array.isArray(this.auditLog.entries)?this.auditLog.entries:[],i=r.find(e=>t&&String(e.id||``).trim()===t?!0:!!(n&&String(e.request_id||``).trim()===n)),a=i||e;a._detail_loading=!1,i&&(this.auditLog.entries=[...r])}}}var yC=class{#e=k(j({entries:[],total:0,limit:25,offset:0}));get auditLog(){return I(this.#e)}set auditLog(e){A(this.#e,e,!0)}#t=k(j({entries:[],total:0,limit:50,offset:0}));get usageLog(){return I(this.#t)}set usageLog(e){A(this.#t,e,!0)}#n=k(``);get auditSearch(){return I(this.#n)}set auditSearch(e){A(this.#n,e,!0)}#r=k(``);get auditMethod(){return I(this.#r)}set auditMethod(e){A(this.#r,e,!0)}#i=k(``);get auditStatusCode(){return I(this.#i)}set auditStatusCode(e){A(this.#i,e,!0)}#a=k(``);get auditStream(){return I(this.#a)}set auditStream(e){A(this.#a,e,!0)}#o=k(wa(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return I(this.#o)}set auditGroupSessions(e){A(this.#o,e,!0)}#s=k(j({}));get auditThreadChildren(){return I(this.#s)}set auditThreadChildren(e){A(this.#s,e,!0)}#c=k(``);get usageLogSearch(){return I(this.#c)}set usageLogSearch(e){A(this.#c,e,!0)}#l=k(``);get usageFilterModel(){return I(this.#l)}set usageFilterModel(e){A(this.#l,e,!0)}#u=k(``);get usageFilterProvider(){return I(this.#u)}set usageFilterProvider(e){A(this.#u,e,!0)}#d=k(``);get usageFilterLabel(){return I(this.#d)}set usageFilterLabel(e){A(this.#d,e,!0)}#f=k(``);get usageFilterUserPath(){return I(this.#f)}set usageFilterUserPath(e){A(this.#f,e,!0)}#p=k(!1);get usageLogHideCached(){return I(this.#p)}set usageLogHideCached(e){A(this.#p,e,!0)}#m=k(!1);get liveLogsStreaming(){return I(this.#m)}set liveLogsStreaming(e){A(this.#m,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;refreshLiveConversation=null;noteLiveTokenUsage=null;get page(){return Uo.page}get customStartDate(){return Oc.customStartDate}get customEndDate(){return Oc.customEndDate}get followsToday(){return Oc.followsToday}liveLogsEnabled(){return _s.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await _s.ensureLoaded(),this.liveLogsEnabled()&&(this.stopLiveLogs(),this.liveLogsController=typeof AbortController==`function`?new AbortController:null,this.readLiveLogsStream(this.liveLogsController)))}stopLiveLogs(){this.liveLogsStreaming=!1,this.liveLogsReconnectTimer&&=(clearTimeout(this.liveLogsReconnectTimer),null),this.liveLogsController&&typeof this.liveLogsController.abort==`function`&&this.liveLogsController.abort(),this.liveLogsController=null}ensureLiveLogs(){this.liveLogsController||this.liveLogsReconnectTimer||this.startLiveLogs()}async readLiveLogsStream(e){let t={};e&&(t.signal=e.signal);let n=_C(this.liveLogsLastSeq),r=q.generation;try{let i=await us(n,t);if(i.status===401){if(q.handleUnauthorized(r),r{this.liveLogsReconnectTimer=null,this.startLiveLogs()},t)}async fetchAuditEntryDetail(e){if(!this.auditEntryShouldFetchDetail(e))return;let t=String(e.id||``).trim();if(!t)return;e._detail_loading=!0;let n=e;try{let e=await fs(`/admin/audit/detail?log_id=`+encodeURIComponent(t),{label:`audit detail`});if(e.stale||!e.ok)return;n=this.mergeLiveAuditEntry(e.data,`audit.detail`)||n}catch(e){console.error(`Failed to fetch audit detail:`,e)}finally{this.clearAuditDetailLoading(n)}}};Object.assign(yC.prototype,vC());var bC=new yC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!bC.liveLogsController,bC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&bC.ensureLiveLogs()})}var xC=null;Mn(()=>{An(()=>{let e=q.refreshTick;if(xC===null){xC=e;return}e!==xC&&(xC=e,Er(()=>{bC.stopLiveLogs(),bC.startLiveLogs()}))})});function SC(){return{total_requests:0,total_input_tokens:0,total_output_tokens:0,total_tokens:0,uncached_input_tokens:0,cached_input_tokens:0,cache_write_input_tokens:0,total_input_cost:null,total_output_cost:null,total_cost:null,rewrite_tokens_saved:0,rewrite_cost_saved:null}}function CC(){return{entries:[],total:0,limit:50,offset:0}}function wC(e,t){let n=[[`model`,e&&e.model],[`provider`,e&&e.provider],[`label`,e&&e.label],[`user_path`,e&&e.user_path]],r=``;for(let[e,i]of n)!i||e===t||(r+=`&`+e+`=`+encodeURIComponent(i));return r}function TC({limit:e,offset:t,hideCached:n,search:r}){let i=`&limit=`+e+`&offset=`+t;return i+=`&cache_mode=`+(n?`uncached`:`all`),r&&(i+=`&search=`+encodeURIComponent(r)),i}function EC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function DC(e,t){let n=Number(t&&t.total_requests||0)-Number(e&&e.total_requests||0);return Number.isFinite(n)&&n>0?n:0}function OC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function kC(e,t,n){let r=DC(e,t);return r<=0?``:n?nc(r)+` cached requests hidden`:nc(Number(e&&e.total_requests||0))+` to providers + `+nc(r)+` from cache`}function AC(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:rc(t.total_input_cost)+` input + `+rc(t.total_output_cost)+` output`}function jC(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function MC(e){return jC(e)>0}function NC(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function PC(){return`Estimated at 4 net characters removed per token`}function FC(e,t){return t===`costs`?rc(NC(e)):oc(jC(e))}function IC(e,t){let n=t===`costs`,r=n?Number(NC(e)):jC(e);if(!Number.isFinite(r)||r<=0)return null;let i=e&&(n?e.total_cost:e.total_input_tokens);if(i==null)return null;let a=Number(i);return!Number.isFinite(a)||a<0?null:r/(a+r)*100}function LC(e,t){let n=IC(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function RC(e,t){let n=jC(e);if(n<=0)return``;let r=[nc(n)+` estimated prompt token-transmissions removed across provider requests`,PC(),`Savings are summed per provider request; resent conversation history is counted again`],i=NC(e);i!=null&&(r.push(rc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=LC(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` -`)}function zC(e){return String(e&&e.cost_source||``).trim()}function BC(e){let t=zC(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function VC(e){switch(zC(e)){case`openrouter_credits`:return`Costs from OpenRouter USD-based credits.`;case`xai_cost_in_usd_ticks`:return`Costs from xAI usage.cost_in_usd_ticks.`;default:return``}}function HC(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function UC(e){let t=HC(e);return t===`exact`||t===`semantic`}function WC(e){let t=HC(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function GC(e,t){let n=t?String(t):``;return UC(e)?n?`Saved by cache — not charged -`+n:`Saved by cache — not charged`:n}function KC(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function qC(e){return Number(e&&e.cached_input_tokens||0)>0}function JC(e){return qC(e)?(KC(e)*100).toFixed(1)+`%`:``}function YC(e){if(!qC(e))return``;let t=Number(e.cached_input_tokens||0),n=Number(e.uncached_input_tokens||0),r=Number(e.cache_write_input_tokens||0),i=t+n+r,a=[nc(t)+` cached / `+nc(i)+` input tokens`];return r>0&&a.push(nc(r)+` cache write`),a.join(` -`)}function XC(e){let t=[];if(VC(e)&&(t.push(VC(e)),t.push(``)),t.push(`Input: `+rc(e.input_cost)),t.push(`Output: `+rc(e.output_cost)),e.raw_data){t.push(``);for(let[n,r]of Object.entries(e.raw_data)){let e=n.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase()),i=r&&typeof r==`object`?JSON.stringify(r):nc(r);t.push(e+`: `+i)}}return t.join(` -`)}function ZC(e){return Array.isArray(e&&e.labels)?e.labels:[]}function QC(e,t,n){return(e||[]).length>0||t?!0:(n||[]).some(e=>ZC(e).length>0)}function $C(e){return e&&typeof e.total_tokens==`number`?e.total_tokens:(e&&e.input_tokens||0)+(e&&e.output_tokens||0)}function ew(e,t){return t?e.total_cost||0:$C(e)}function tw(e,t){return[...e||[]].sort((e,n)=>t?(n.total_cost||0)-(e.total_cost||0):ew(n,t)-ew(e,t))}function nw(e){let t=Array.isArray(e)?e:[];if(t.length===0)return!1;if(t.length!==1)return!0;let n=String(t[0]&&t[0].user_path||``).trim();return n!==``&&n!==`/`}function rw(e){return(e||`chart`)===`chart`||e===`stacked`}function iw(e,t,n){let r=tw(e,n),i=e=>Number(e)||0,a=e=>n?Math.min(i(e.cached_input_cost),i(e.input_cost)):i(e.cached_input_tokens),o=e=>n?i(e.input_cost)-a(e):i(e.uncached_input_tokens)+i(e.cached_input_tokens)+i(e.cache_write_input_tokens)>0?i(e.uncached_input_tokens)+i(e.cache_write_input_tokens):i(e.input_tokens),s=e=>i(n?e.output_cost:e.output_tokens),c=e=>n?0:i(e.local_cached_input_tokens),l=e=>n?0:i(e.local_cached_output_tokens),u=r.slice(0,10),d=r.slice(10),f=u.map(t),p=u.map(o),m=u.map(s),h=u.map(a),g=u.map(c),_=u.map(l);if(d.length>0){f.push(`Other`);let e=e=>d.reduce((t,n)=>t+e(n),0);p.push(e(o)),m.push(e(s)),h.push(e(a)),g.push(e(c)),_.push(e(l))}return{labels:f,inputs:p,outputs:m,prompts:h,localIns:g,localOuts:_}}function aw(e){return Math.max(200,e*32+72)}var J=new class{#e=k(`tokens`);get usageMode(){return I(this.#e)}set usageMode(e){A(this.#e,e,!0)}get usageFilterModel(){return bC.usageFilterModel}set usageFilterModel(e){bC.usageFilterModel=e}get usageFilterProvider(){return bC.usageFilterProvider}set usageFilterProvider(e){bC.usageFilterProvider=e}get usageFilterLabel(){return bC.usageFilterLabel}set usageFilterLabel(e){bC.usageFilterLabel=e}get usageFilterUserPath(){return bC.usageFilterUserPath}set usageFilterUserPath(e){bC.usageFilterUserPath=e}#t=k(j({models:[],providers:[],labels:[]}));get usageFacetOptions(){return I(this.#t)}set usageFacetOptions(e){A(this.#t,e,!0)}#n=k(j(SC()));get usageSummary(){return I(this.#n)}set usageSummary(e){A(this.#n,e,!0)}#r=k(j(SC()));get usageSummaryAll(){return I(this.#r)}set usageSummaryAll(e){A(this.#r,e,!0)}#i=k(j([]));get modelUsage(){return I(this.#i)}set modelUsage(e){A(this.#i,e,!0)}#a=k(j([]));get userPathUsage(){return I(this.#a)}set userPathUsage(e){A(this.#a,e,!0)}#o=k(j([]));get labelUsage(){return I(this.#o)}set labelUsage(e){A(this.#o,e,!0)}get usageLog(){return bC.usageLog}set usageLog(e){bC.usageLog=e}get usageLogSearch(){return bC.usageLogSearch}set usageLogSearch(e){bC.usageLogSearch=e}get usageLogHideCached(){return bC.usageLogHideCached}set usageLogHideCached(e){bC.usageLogHideCached=e}#s=k(`chart`);get modelUsageView(){return I(this.#s)}set modelUsageView(e){A(this.#s,e,!0)}#c=k(`chart`);get userPathUsageView(){return I(this.#c)}set userPathUsageView(e){A(this.#c,e,!0)}#l=k(`chart`);get labelUsageView(){return I(this.#l)}set labelUsageView(e){A(this.#l,e,!0)}#u=k(!1);get summaryLoading(){return I(this.#u)}set summaryLoading(e){A(this.#u,e,!0)}#d=k(!1);get modelUsageLoading(){return I(this.#d)}set modelUsageLoading(e){A(this.#d,e,!0)}#f=k(!1);get userPathUsageLoading(){return I(this.#f)}set userPathUsageLoading(e){A(this.#f,e,!0)}#p=k(!1);get labelUsageLoading(){return I(this.#p)}set labelUsageLoading(e){A(this.#p,e,!0)}#m=k(!1);get usageLogLoading(){return I(this.#m)}set usageLogLoading(e){A(this.#m,e,!0)}#h={};#g(e){this.#h[e]&&this.#h[e].abort();let t=new AbortController;return this.#h[e]=t,t}#_(e,t){this.#h[e]===t&&(this.#h[e]=null)}filterQueryStr(e){return wC({model:this.usageFilterModel,provider:this.usageFilterProvider,label:this.usageFilterLabel,user_path:this.usageFilterUserPath},e)}onUsageFilterChanged(){this.fetchUsagePage()}toggleUsageLabelFilter(e){this.usageFilterLabel=this.usageFilterLabel===e?``:e,this.onUsageFilterChanged()}usageLabelChipTitle(e){return this.usageFilterLabel===e?`Clear label filter`:`Filter usage by "`+e+`"`}toggleUsageMode(e){this.usageMode=e,Uo.navigate(`usage`,e===`costs`?`costs`:null)}toggleUsageChartView(e,t){e===`model`&&(this.modelUsageView=t),e===`userPath`&&(this.userPathUsageView=t),e===`label`&&(this.labelUsageView=t)}usageFilterModelOptions(){return EC(this.usageFacetOptions.models,this.usageFilterModel)}usageFilterProviderOptions(){return EC(this.usageFacetOptions.providers,this.usageFilterProvider)}usageFilterLabelOptions(){return EC(this.usageFacetOptions.labels,this.usageFilterLabel)}async fetchUsagePage(){await _s.ensureLoaded();let e=[this.fetchUsagePageSummary(),this.fetchUsageFacetOptions(),this.fetchModelUsage(),this.fetchUserPathUsage(),this.fetchLabelUsage(),this.fetchUsageLog(!0)];Pc.cacheAnalyticsEnabled()&&e.push(Pc.fetchCacheOverview(this.filterQueryStr())),await Promise.all(e)}async fetchUsagePageSummary(){let e=this.#g(`summary`);this.summaryLoading=!0;try{let t=Oc.queryStr()+this.filterQueryStr(),[n,r]=await Promise.all([fs(`/admin/usage/summary?`+t+`&cache_mode=uncached`,{label:`usage page summary`,signal:e.signal}),fs(`/admin/usage/summary?`+t+`&cache_mode=all`,{label:`usage page summary (all)`,signal:e.signal})]);if(n.stale||r.stale||e.signal.aborted)return;if(!n.ok||!r.ok){this.usageSummary=SC(),this.usageSummaryAll=SC();return}this.usageSummary=n.data&&typeof n.data==`object`?n.data:SC(),this.usageSummaryAll=r.data&&typeof r.data==`object`?r.data:SC()}catch(e){if(ms(e))return;console.error(`Failed to fetch usage page summary:`,e),this.usageSummary=SC(),this.usageSummaryAll=SC()}finally{this.#_(`summary`,e),this.#h.summary===null&&(this.summaryLoading=!1)}}async fetchUsageFacetOptions(){let e=this.#g(`facets`);try{let t=async(t,n)=>{let r=await fs(t+`?`+Oc.queryStr()+this.filterQueryStr(n),{label:`usage facet options`,signal:e.signal});return r.stale?null:r.ok&&Array.isArray(r.data)?r.data:[]},n=t(`/admin/usage/models`,`model`),r=!this.usageFilterModel&&!this.usageFilterProvider,[i,a,o]=await Promise.all([n,r?n:t(`/admin/usage/models`,`provider`),t(`/admin/usage/labels`,`label`)]);if(e.signal.aborted||i===null||a===null||o===null)return;this.usageFacetOptions={models:i.map(e=>e&&e.model).filter(Boolean),providers:a.map(e=>fc(e)).filter(Boolean),labels:o.map(e=>e&&e.label).filter(Boolean)}}catch(e){if(ms(e))return;console.error(`Failed to fetch usage facet options:`,e),this.usageFacetOptions={models:[],providers:[],labels:[]}}finally{this.#_(`facets`,e)}}async#v(e,t,n,r,i){let a=this.#g(e);i(!0);try{let e=await fs(t+`?`+Oc.queryStr()+this.filterQueryStr(),{label:n,signal:a.signal});if(e.stale||a.signal.aborted)return;if(!e.ok){r([]);return}r(Array.isArray(e.data)?e.data:[])}catch(e){if(ms(e))return;console.error(`Failed to fetch `+n+`:`,e),r([])}finally{this.#_(e,a),this.#h[e]===null&&i(!1)}}fetchModelUsage(){return this.#v(`modelUsage`,`/admin/usage/models`,`usage models`,e=>this.modelUsage=e,e=>this.modelUsageLoading=e)}fetchUserPathUsage(){return this.#v(`userPathUsage`,`/admin/usage/user-paths`,`usage user paths`,e=>this.userPathUsage=e,e=>this.userPathUsageLoading=e)}fetchLabelUsage(){return this.#v(`labelUsage`,`/admin/usage/labels`,`usage labels`,e=>this.labelUsage=e,e=>this.labelUsageLoading=e)}async fetchUsageLog(e){let t=this.#g(`usageLog`);this.usageLogLoading=!0;try{e&&(this.usageLog.offset=0);let n=Oc.queryStr()+this.filterQueryStr();n+=TC({limit:this.usageLog.limit,offset:this.usageLog.offset,hideCached:this.usageLogHideCached,search:this.usageLogSearch});let r=await fs(`/admin/usage/log?`+n,{label:`usage log`,signal:t.signal});if(r.stale||t.signal.aborted)return;if(!r.ok){this.usageLog=CC();return}let i=r.data&&typeof r.data==`object`?r.data:CC();i.entries||=[],this.usageLog=i}catch(e){if(ms(e))return;console.error(`Failed to fetch usage log:`,e),this.usageLog=CC()}finally{this.#_(`usageLog`,t),this.#h.usageLog===null&&(this.usageLogLoading=!1)}}usageLogNextPage(){this.usageLog.offset+this.usageLog.limit0&&(this.usageLog.offset=Math.max(0,this.usageLog.offset-this.usageLog.limit),this.fetchUsageLog(!1))}};bC.fetchUsage=()=>{Uo.page===`usage`&&J.fetchUsagePage()};var ow=R(`
        `);function sw(e,t){E(t,!0);let n=G(t,`value`,15,``),r=G(t,`placeholder`,3,``),i=G(t,`label`,3,``),a=G(t,`id`,3,void 0),o=G(t,`oninput`,3,void 0),s=G(t,`class`,3,``);var c=ow(),l=M(c);K(l,{get icon(){return po},class:`filter-input-icon`});var u=P(l,2);na(u),T(c),F(()=>{U(c,1,Fi([`filter-input-wrap`,s()]),`svelte-30xz1k`),W(u,`id`,a()),W(u,`placeholder`,r()),W(u,`aria-label`,i())}),L(`input`,u,function(...e){o()?.apply(this,e)}),da(u,n),z(e,c),D()}Hr([`input`]);function cw(e,t=300){let n=null,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>{n=null,e(...r)},t)};return r.cancel=()=>{clearTimeout(n),n=null},r}var lw=R(``),uw=R(``),dw=R(`
        `);function fw(e,t){E(t,!0);let n=cw(()=>J.onUsageFilterChanged());An(()=>n.cancel);var r=dw(),i=M(r),a=M(i);a.value=a.__value=``,H(P(a),16,()=>J.usageFilterModelOptions(),e=>e,(e,t)=>{var n=lw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(i);var o=P(i,2),s=M(o);s.value=s.__value=``,H(P(s),16,()=>J.usageFilterProviderOptions(),e=>e,(e,t)=>{var n=lw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(o);var c=P(o,2),l=e=>{var t=uw(),n=M(t);n.value=n.__value=``,H(P(n),16,()=>J.usageFilterLabelOptions(),e=>e,(e,t)=>{var n=lw(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(t),L(`change`,t,()=>J.onUsageFilterChanged()),Gi(t,()=>J.usageFilterLabel,e=>J.usageFilterLabel=e),z(e,t)},u=O(()=>J.usageFilterLabelOptions().length>0);V(c,e=>{I(u)&&e(l)}),sw(P(c,2),{class:`usage-page-filters-user-path`,placeholder:`User path /team/alpha`,label:`Filter by user path`,get oninput(){return n},get value(){return J.usageFilterUserPath},set value(e){J.usageFilterUserPath=e}}),T(r),L(`change`,i,()=>J.onUsageFilterChanged()),Gi(i,()=>J.usageFilterModel,e=>J.usageFilterModel=e),L(`change`,o,()=>J.onUsageFilterChanged()),Gi(o,()=>J.usageFilterProvider,e=>J.usageFilterProvider=e),z(e,r),D()}Hr([`change`]);var pw=R(`
        Cache Saved
        Cache Hits
        `,1);function mw(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=pw(),n=N(t),r=P(M(n),2),i=M(r,!0);T(r),T(n);var a=P(n,2),o=P(M(a),2),s=M(o,!0);T(o),T(a),F((e,t)=>{B(i,e),B(s,t)},[()=>rc(Pc.cacheOverview.summary.total_saved_cost),()=>nc(Pc.cacheOverview.summary.total_hits)]),z(e,t)},a=O(()=>Pc.cacheAnalyticsEnabled());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}var hw=R(` `),gw=R(`
        Pro Saved
        `),_w=R(`
        Total Requests
        Estimated Cost
        `);function vw(e,t){E(t,!0);let n=O(()=>MC(J.usageSummary)),r=O(()=>FC(J.usageSummary,J.usageMode)),i=O(()=>LC(J.usageSummary,J.usageMode));var a=_w(),o=M(a),s=P(M(o),2),c=M(s),l=e=>{vS(e,{size:18,label:`Loading usage summary`})},u=e=>{var t=Zr();F(e=>B(t,e),[()=>nc(OC(J.usageSummary,J.usageSummaryAll,J.usageLogHideCached))]),z(e,t)};V(c,e=>{J.summaryLoading?e(l):e(u,-1)}),T(s),T(o);var d=P(o,2),f=P(M(d),2),p=M(f),m=e=>{vS(e,{size:18,label:`Loading usage summary`})},h=e=>{var t=Zr();F(e=>B(t,e),[()=>rc(J.usageSummary.total_cost)]),z(e,t)};V(p,e=>{J.summaryLoading?e(m):e(h,-1)}),T(f),T(d);var g=P(d,2),_=e=>{var t=gw(),n=P(M(t),2),a=M(n),o=M(a,!0);T(a);var s=P(a,2),c=e=>{var t=hw(),n=M(t,!0);T(t),F(()=>B(n,I(i))),z(e,t)};V(s,e=>{I(i)&&e(c)}),T(n),T(t),F(e=>{W(n,`title`,e),B(o,I(r))},[()=>RC(J.usageSummary,J.usageMode)]),z(e,t)};V(g,e=>{I(n)&&e(_)}),mw(P(g,2),{}),T(a),F((e,t)=>{W(s,`title`,e),W(f,`title`,t)},[()=>kC(J.usageSummary,J.usageSummaryAll,J.usageLogHideCached),()=>AC(J.usageSummary)]),z(e,a),D()}function yw(e,t,n,r){let{stacked:i=!1,costs:a=!1,resolve:o=e=>e}=r||{},s=e=>a?`$`+Math.abs(e).toFixed(2):oc(Math.abs(e)),c=e=>a?`$`+Math.abs(e).toFixed(4):Math.abs(e).toLocaleString(),l=e=>e.map(e=>i?Math.abs(e):-Math.abs(e)),u=(e,t,n)=>({label:e,data:t,backgroundColor:n,borderColor:`transparent`,borderWidth:0,borderRadius:4,maxBarThickness:22}),d=e=>(e||[]).some(e=>Math.abs(e)>0),f=[u(a?`Input Cost`:`Input Tokens`,l(n.inputs),o(`var(--token-input)`)),u(a?`Output Cost`:`Output Tokens`,n.outputs,o(`var(--token-output)`))];return d(n.prompts)&&f.push(u(a?`Prompt Cached Cost`:`Prompt Cached`,l(n.prompts),o(`var(--token-prompt)`))),!a&&d(n.localIns)&&f.push(u(`Locally Cached (Input)`,l(n.localIns),o(`var(--token-local)`))),!a&&d(n.localOuts)&&f.push(u(`Locally Cached (Output)`,n.localOuts,o(`var(--token-local)`))),{type:`bar`,data:{labels:t,datasets:f},options:{indexAxis:`y`,responsive:!0,maintainAspectRatio:!1,animation:{duration:0},layout:{padding:{top:8}},scales:{x:{stacked:!0,beginAtZero:!0,grid:i?{color:e.grid}:{color:t=>t.tick&&t.tick.value===0?e.text:e.grid},border:{display:!1},ticks:{color:e.text,font:Ny(),callback:e=>s(e)}},y:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Ny(),autoSkip:!1}}},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Py(e,{label:e=>e.dataset.label+`: `+c(e.parsed.x),footer:e=>{let t=0;return e.forEach(e=>{t+=Math.abs(Number(e.parsed.x))||0}),`Total: `+c(t)}})}}}}var bw=R(`
        `),xw=R(`

        `),Sw=R(`

        `,1),Cw=R(`
        `),ww=R(`Model Provider`,1),Tw=R(`User Path`),Ew=R(`Label Requests`,1),Dw=R(` `,1),Ow=R(` `),kw=R(` `,1),Aw=R(` `),jw=R(`
        Input TokensOutput TokensPrompt CachedLocal CachedTotal TokensInput CostOutput CostTotal Cost
        `),Mw=R(`
        `),Nw=R(`
        `);function Pw(e,t){E(t,!0);let n=e=>{var n=bw(),r=M(n);let a;var o=P(r,2);let s;var l=P(o,2);let u;T(n),F(()=>{W(n,`aria-label`,I(i).group),a=U(r,1,`chart-view-btn svelte-1kee4g8`,null,a,{active:I(c)===`chart`}),W(r,`aria-pressed`,I(c)===`chart`),W(r,`aria-label`,`Show ${I(i).noun??``} chart`),s=U(o,1,`chart-view-btn svelte-1kee4g8`,null,s,{active:I(c)===`stacked`}),W(o,`aria-pressed`,I(c)===`stacked`),W(o,`aria-label`,`Show ${I(i).noun??``} stacked chart`),u=U(l,1,`chart-view-btn svelte-1kee4g8`,null,u,{active:I(c)===`table`}),W(l,`aria-pressed`,I(c)===`table`),W(l,`aria-label`,`Show ${I(i).noun??``} table`)}),L(`click`,r,()=>J.toggleUsageChartView(t.kind,`chart`)),L(`click`,o,()=>J.toggleUsageChartView(t.kind,`stacked`)),L(`click`,l,()=>J.toggleUsageChartView(t.kind,`table`)),z(e,n)},r={model:{group:`Model usage view`,noun:`model usage`,tokensTitle:`Token Usage by Model`,costsTitle:`Cost by Model`},userPath:{group:`User path usage view`,noun:`user path usage`,tokensTitle:`Usage by User Path`,costsTitle:`Cost by User Path`},label:{group:`Label usage view`,noun:`label usage`,tokensTitle:`Usage by Label`,costsTitle:`Cost by Label`}},i=O(()=>r[t.kind]),a=O(()=>t.kind===`model`?e=>mc(e):t.kind===`userPath`?e=>e.user_path||`/`:e=>e.label);function o(e){return t.kind===`model`?(e.provider_name||e.provider||`-`)+`/`+e.model:t.kind===`userPath`?e.user_path||`/`:e.label}let s=O(()=>t.kind===`model`?J.modelUsage:t.kind===`userPath`?J.userPathUsage:J.labelUsage),c=O(()=>t.kind===`model`?J.modelUsageView:t.kind===`userPath`?J.userPathUsageView:J.labelUsageView),l=O(()=>t.kind===`model`?J.modelUsageLoading:t.kind===`userPath`?J.userPathUsageLoading:J.labelUsageLoading),u=O(()=>J.usageMode===`costs`),d=O(()=>t.kind===`userPath`?nw(I(s)):I(s).length>0),f=O(()=>I(u)?I(i).costsTitle:I(i).tokensTitle),p=O(()=>iw(I(s),I(a),I(u))),m=O(()=>tw(I(s),I(u)));function h(){return rw(I(c))?yw(My(),I(p).labels,I(p),{stacked:I(c)===`stacked`,costs:I(u),resolve:Fy}):null}var g=Qr(),_=N(g),v=e=>{var r=Mw(),a=M(r),s=M(a),u=e=>{US(e,{copyId:`label-usage-help-copy`,label:`label usage help`,text:`One request can have multiple labels. Such a request counts once under each of its labels, so label rows can overlap and add up to more than the period totals.`,title:e=>{var t=xw(),n=M(t,!0);T(t),F(()=>B(n,I(f))),z(e,t)},extra:e=>{var t=Qr(),n=N(t),r=e=>{vS(e,{size:14,get label(){return`Loading ${I(i).noun??``}`}})};V(n,e=>{I(l)&&e(r)}),z(e,t)},$$slots:{title:!0,extra:!0}})},d=e=>{var t=Sw(),n=N(t),r=M(n,!0);T(n);var a=P(n,2),o=e=>{vS(e,{size:14,get label(){return`Loading ${I(i).noun??``}`}})};V(a,e=>{I(l)&&e(o)}),F(()=>B(r,I(f))),z(e,t)};V(s,e=>{t.kind===`label`?e(u):e(d,-1)});var g=P(s,2);n(g),T(a);var _=P(a,2),v=e=>{var t=Cw();let n;Dy(M(t),{build:h}),T(t),F(e=>n=Hi(t,``,n,e),[()=>({height:`${aw(I(p).labels.length)??``}px`})]),z(e,t)},y=O(()=>rw(I(c))),b=e=>{var n=jw(),r=M(n),i=M(r),a=M(i),s=M(a),c=e=>{var t=ww();Ue(2),z(e,t)},l=e=>{z(e,Tw())},u=e=>{var t=Ew();Ue(2),z(e,t)};V(s,e=>{t.kind===`model`?e(c):t.kind===`userPath`?e(l,1):e(u,-1)}),Ue(8),T(a),T(i);var d=P(i);H(d,21,()=>I(m),e=>o(e),(e,n)=>{var r=Aw(),i=M(r),a=e=>{var t=Dw(),r=N(t),i=M(r,!0);T(r);var a=P(r,2),o=M(a),s=M(o,!0);T(o),T(a),F(e=>{B(i,I(n).model||`-`),B(s,e)},[()=>fc(I(n))||`-`]),z(e,t)},o=e=>{var t=Ow(),r=M(t,!0);T(t),F(()=>B(r,I(n).user_path||`/`)),z(e,t)},s=e=>{var t=kw(),r=N(t),i=M(r);let a;var o=M(i,!0);T(i),T(r);var s=P(r,2),c=M(s,!0);T(s),F((e,t,r)=>{a=U(i,1,`usage-label-chip`,null,a,{active:J.usageFilterLabel===I(n).label}),Hi(i,`--label-color: ${e??``}`),W(i,`title`,t),B(o,I(n).label),B(c,r)},[()=>Ry(I(n).label),()=>J.usageLabelChipTitle(I(n).label),()=>nc(I(n).requests)]),L(`click`,i,()=>J.toggleUsageLabelFilter(I(n).label)),z(e,t)};V(i,e=>{t.kind===`model`?e(a):t.kind===`userPath`?e(o,1):e(s,-1)});var c=P(i),l=M(c,!0);T(c);var u=P(c),d=M(u,!0);T(u);var f=P(u),p=M(f,!0);T(f);var m=P(f),h=M(m,!0);T(m);var g=P(m),_=M(g,!0);T(g);var v=P(g),y=M(v,!0);T(v);var b=P(v),x=M(b,!0);T(b);var S=P(b),C=M(S,!0);T(S),T(r),F((e,t,n,r,i,a,o,s,c,u,g)=>{B(l,e),B(d,t),W(f,`title`,n),B(p,r),W(m,`title`,`${i??``} input + ${a??``} output`),B(h,o),B(_,s),B(y,c),B(x,u),B(C,g)},[()=>nc(I(n).input_tokens),()=>nc(I(n).output_tokens),()=>I(n).cached_input_cost==null?``:`~`+rc(I(n).cached_input_cost)+` at current cached-input pricing`,()=>nc(I(n).cached_input_tokens||0),()=>nc(I(n).local_cached_input_tokens||0),()=>nc(I(n).local_cached_output_tokens||0),()=>nc((I(n).local_cached_input_tokens||0)+(I(n).local_cached_output_tokens||0)),()=>nc($C(I(n))),()=>rc(I(n).input_cost),()=>rc(I(n).output_cost),()=>rc(I(n).total_cost)]),z(e,r)}),T(d),T(r),T(n),z(e,n)};V(_,e=>{I(y)?e(v):e(b,-1)}),T(r),z(e,r)},y=e=>{var t=Nw();vS(M(t),{size:20,get label(){return`Loading ${I(i).noun??``}`}}),T(t),z(e,t)};V(_,e=>{I(d)?e(v):I(l)&&e(y,1)}),z(e,g),D()}Hr([`click`]);var Fw=R(``);function Iw(e,t){E(t,!0);let n=G(t,`total`,3,0),r=G(t,`offset`,3,0),i=G(t,`limit`,3,25);var a=Qr(),o=N(a),s=e=>{var a=Fw(),o=M(a),s=M(o);T(o);var c=P(o,2),l=M(c),u=P(l,2);T(c),T(a),F(e=>{B(s,`Showing ${r()+1}-${e??``} of ${n()??``}`),l.disabled=r()===0,u.disabled=r()+i()>=n()},[()=>Math.min(r()+i(),n())]),L(`click`,l,()=>t.onprev?.()),L(`click`,u,()=>t.onnext?.()),z(e,a)};V(o,e=>{n()>0&&e(s)}),z(e,a),D()}Hr([`click`]);var Lw=(e,t=f)=>{var n=Qr(),r=N(n),i=e=>{var n=zw();H(n,20,()=>ZC(t()),e=>e,(e,t)=>{var n=Rw();let r;var i=M(n,!0);T(n),F((e,a)=>{r=U(n,1,`usage-label-chip`,null,r,{active:J.usageFilterLabel===t}),Hi(n,`--label-color: ${e??``}`),W(n,`title`,a),B(i,t)},[()=>Ry(t),()=>J.usageLabelChipTitle(t)]),L(`click`,n,()=>J.toggleUsageLabelFilter(t)),z(e,n)}),T(n),z(e,n)},a=O(()=>ZC(t()).length>0),o=e=>{z(e,Bw())};V(r,e=>{I(a)?e(i):e(o,-1)}),z(e,n)},Rw=R(``),zw=R(`
        `),Bw=R(`-`),Vw=R(`Labels`),Hw=R(`Cost`),Uw=R(``),Ww=R(` `),Gw=R(``),Kw=R(` `),qw=R(` `),Jw=R(`
        TimestampProviderModelUser PathCacheProvider Cache
        `),Yw=R(`
        `),Xw=R(`
        `),Zw=R(`

        Request Log

        `);function Qw(e,t){E(t,!0);let n=O(()=>J.usageMode===`costs`),r=O(()=>QC(J.labelUsage,J.usageFilterLabel,J.usageLog.entries)),i=cw(()=>J.fetchUsageLog(!0));An(()=>i.cancel);var a=Zw(),o=P(M(a),2),s=M(o);sw(M(s),{placeholder:`Search by request ID, model, provider...`,label:`Search by request ID, model, provider`,get oninput(){return i},get value(){return J.usageLogSearch},set value(e){J.usageLogSearch=e}}),T(s);var c=P(s,2),l=M(c),u=M(l);na(u),Ue(2),T(l),T(c),T(o);var d=P(o,2),f=e=>{var t=Jw(),i=M(t),a=M(i),o=M(a),s=P(M(o),4),c=e=>{z(e,Vw())};V(s,e=>{I(r)&&e(c)});var l=P(s,3),u=M(l,!0);T(l);var d=P(l),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=e=>{z(e,Hw())};V(h,e=>{I(n)||e(g)}),T(o),T(a);var _=P(a);H(_,21,()=>J.usageLog.entries,e=>e.id,(e,t)=>{var i=qw();let a;var o=M(i),s=M(o,!0);T(o);var c=P(o),l=M(c),u=M(l,!0);T(l),T(c);var d=P(c),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=e=>{var n=Uw();Lw(M(n),()=>I(t)),T(n),z(e,n)};V(h,e=>{I(r)&&e(g)});var _=P(h),v=M(_,!0);T(_);var y=P(_),b=M(y),x=e=>{var n=Ww(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>JC(I(t))]),z(e,n)},S=O(()=>qC(I(t))),C=e=>{z(e,Bw())};V(b,e=>{I(S)?e(x):e(C,-1)}),T(y);var w=P(y),ee=M(w,!0);T(w);var te=P(w),ne=M(te,!0);T(te);var re=P(te),ie=M(re),ae=M(ie,!0);T(ie);var oe=P(ie,2),se=e=>{{let n=O(()=>VC(I(t)));K(e,{get icon(){return Ua},class:`cost-source-icon`,get title(){return I(n)}})}},ce=O(()=>I(n)&&BC(I(t)));V(oe,e=>{I(ce)&&e(se)});var le=P(oe,2),ue=e=>{K(e,{get icon(){return Ka},class:`cache-savings-icon`})},de=O(()=>I(n)&&UC(I(t)));V(le,e=>{I(de)&&e(ue)});var fe=P(le,2),pe=e=>{var n=Gw();F(()=>W(n,`title`,I(t).costs_calculation_caveat)),z(e,n)};V(fe,e=>{I(n)&&I(t).costs_calculation_caveat&&e(pe)}),T(re);var me=P(re),he=e=>{var n=Kw(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{{let n=O(()=>VC(I(t)));K(e,{get icon(){return Ua},class:`cost-source-icon`,get title(){return I(n)}})}},s=O(()=>BC(I(t)));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{K(e,{get icon(){return Ka},class:`cache-savings-icon`})},u=O(()=>UC(I(t)));V(c,e=>{I(u)&&e(l)});var d=P(c,2),f=e=>{var n=Gw();F(()=>W(n,`title`,I(t).costs_calculation_caveat)),z(e,n)};V(d,e=>{I(t).costs_calculation_caveat&&e(f)}),T(n),F((e,t)=>{W(n,`title`,e),B(i,t)},[()=>GC(I(t),XC(I(t))),()=>rc(I(t).total_cost)]),z(e,n)};V(me,e=>{I(n)||e(he)}),T(i),F((e,n,r,c,l,d,p,h,g,_,b,x,S)=>{a=U(i,1,`svelte-hg4ill`,null,a,e),W(o,`title`,n),B(s,r),B(u,c),B(f,I(t).model),B(m,I(t).user_path||`-`),B(v,l),W(y,`title`,d),W(w,`title`,p),B(ee,h),W(te,`title`,g),B(ne,_),W(re,`title`,b),W(ie,`title`,x),B(ae,S)},[()=>({"usage-log-row-cached":UC(I(t))}),()=>uc(I(t).timestamp),()=>os.formatTimestamp(I(t).timestamp),()=>fc(I(t))||`-`,()=>WC(I(t)),()=>YC(I(t)),()=>I(n)?nc(I(t).input_tokens)+` tokens`:``,()=>I(n)?rc(I(t).input_cost):nc(I(t).input_tokens),()=>I(n)?nc(I(t).output_tokens)+` tokens`:``,()=>I(n)?rc(I(t).output_cost):nc(I(t).output_tokens),()=>I(n)?GC(I(t),``):``,()=>I(n)?GC(I(t),nc(I(t).total_tokens)+` tokens -`+XC(I(t))):``,()=>I(n)?rc(I(t).total_cost):nc(I(t).total_tokens)]),z(e,i)}),T(_),T(i),T(t),F(()=>{B(u,I(n)?`Input Cost`:`Input`),B(f,I(n)?`Output Cost`:`Output`),B(m,I(n)?`Total Cost`:`Total`)}),z(e,t)},p=e=>{var t=Yw();vS(M(t),{size:20,label:`Loading request log`}),T(t),z(e,t)},m=e=>{var t=Xw();xS(M(t),{}),T(t),z(e,t)};V(d,e=>{J.usageLog.entries.length>0?e(f):J.usageLogLoading?e(p,1):e(m,-1)}),Iw(P(d,2),{get total(){return J.usageLog.total},get offset(){return J.usageLog.offset},get limit(){return J.usageLog.limit},onprev:()=>J.usageLogPrevPage(),onnext:()=>J.usageLogNextPage()}),T(a),L(`change`,u,()=>J.fetchUsageLog(!0)),fa(u,()=>J.usageLogHideCached,e=>J.usageLogHideCached=e),z(e,a),D()}Hr([`click`,`change`]);var $w=R(`
        `);function eT(e,t){E(t,!0);let n=`usage`;An(()=>{q.refreshTick,Uo.page===n&&(J.fetchUsagePage(),bC.ensureLiveLogs())}),An(()=>{Uo.page===n&&(J.usageMode=Uo.sub===`costs`?`costs`:`tokens`)});var r=$w(),i=P(M(r),2),a=M(i);Ay(a,{ariaLabel:`Usage mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return J.usageMode},onchange:e=>J.toggleUsageMode(e)}),Zc(P(a,2),{onchange:()=>J.fetchUsagePage()}),T(i);var o=P(i,2);fw(o,{});var s=P(o,2);vw(s,{});var c=P(s,2),l=M(c);Pw(l,{kind:`model`});var u=P(l,2);Pw(u,{kind:`userPath`}),Pw(P(u,2),{kind:`label`}),T(c),Qw(P(c,2),{}),T(r),z(e,r),D()}var tT=R(`
        `);function nT(e,t){let n=G(t,`label`,3,`Loading...`),r=G(t,`class`,3,``);var i=tT(),a=P(M(i),2),o=M(a,!0);T(a),T(i),F(()=>{U(i,1,Fi([`loading-state`,r()]),`svelte-hzxv1d`),B(o,n())}),z(e,i)}var rT=R(``);function iT(e,t){let n=G(t,`label`,3,``),r=G(t,`class`,3,``),i=G(t,`disabled`,3,!1);var a=rT();gi(M(a),()=>t.children??f),T(a),F(()=>{U(a,1,Fi([`table-action-btn`,r()])),W(a,`aria-label`,n()),W(a,`title`,n()),a.disabled=i()}),L(`click`,a,function(...e){t.onclick?.apply(this,e)}),z(e,a)}Hr([`click`]);async function aT(e,{label:t,errorFallback:n=`Unable to load ${t}.`,unavailableStatuses:r=[503],normalize:i=e=>Array.isArray(e)?e:[],options:a}){let o;try{o=await fs(e,{...a||{},label:t})}catch(e){return ms(e)||console.error(`Failed to fetch ${t}:`,e),{status:`error`,items:[],error:n,result:null}}return o.stale?{status:`stale`,items:[],error:``,result:o}:r.includes(o.status)?{status:`unavailable`,items:[],error:``,result:o}:o.ok?{status:`ok`,items:i(o.data),error:``,result:o}:{status:`error`,items:[],error:o.status===401?``:ss(o.data,n),result:o}}async function oT(e,t,n,{label:r,errorFallback:i=`Unable to ${r}.`,unavailableStatuses:a=[503],unavailableMessage:o=`This feature is unavailable on the gateway.`,options:s}){let c;try{c=await ps(e,t,n,{...s||{},label:r})}catch(e){return ms(e)||console.error(`Failed to ${r}:`,e),{status:`error`,error:i,result:null}}return c.stale?{status:`stale`,error:``,result:c}:a.includes(c.status)?{status:`unavailable`,error:o,result:c}:c.ok?{status:`ok`,error:``,result:c}:{status:`error`,error:c.status===401?`Authentication required.`:ss(c.data,i),result:c}}function sT(){return{scope:`user_path`,subject:`/`,period:`daily`,period_seconds:86400,amount:``,source:`manual`}}function cT(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},label:{label:`Label`,chip:`label`,fieldLabel:`Label`,placeholder:`Mobile-App-iOS`}};return t[e]||t.user_path}function lT(){return[`user_path`,`label`].map(e=>({value:e,label:cT(e).label}))}function uT(e){return String(e&&e.scope||``).trim()||`user_path`}function dT(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function fT(e){return cT(uT(e)).chip}function pT(e){return uT(e)===`label`?`budget-label`:`budget-user-path`}function mT(e){return cT(String(e&&e.scope||``)).fieldLabel}function hT(e){return cT(String(e&&e.scope||``)).placeholder}function gT(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function _T(){return[{value:`hourly`,label:`Hourly`},{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`},{value:`custom`,label:`Custom seconds`}]}function vT(e){switch(String(e||``).trim().toLowerCase()){case`hourly`:return 3600;case`daily`:return 86400;case`weekly`:return 604800;case`monthly`:return 2592e3;default:return 0}}function yT(e){switch(Number(e||0)){case 3600:return`hourly`;case 86400:return`daily`;case 604800:return`weekly`;case 2592e3:return`monthly`;default:return`custom`}}function bT(e){return uT(e)+`:`+dT(e)+`:`+String(e&&e.period_seconds||``)}function xT(e,t){if(!t||!Array.isArray(e))return null;let n=bT(t);return e.find(e=>bT(e)===n)||null}function ST(e){let t=String(e||``).trim();if(!t)return`User path is required.`;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function CT(e){if(ST(e))return``;let t=String(e||``).trim(),n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function wT(e){return`/`+String(e||``).trimStart().replace(/^\/+/,``)}function TT(e){return Array.isArray(e)?e:e&&Array.isArray(e.budgets)?e.budgets:[]}function ET(e){let t=Number(e&&e.period_seconds||0);return[dT(e),fT(e),UT(e),yT(t),t?String(t)+`s`:``,t?String(t)+` seconds`:``].join(` `).toLowerCase()}var DT={user_path:0,label:1};function OT(e,t){let n=Array.isArray(e)?e.slice():[],r=String(t||`subject`);return n.sort((e,t)=>{let n=(DT[uT(e)]||0)-(DT[uT(t)]||0),i=dT(e).localeCompare(dT(t)),a=Number(t&&t.period_seconds||0)-Number(e&&e.period_seconds||0);return r===`period`?a||n||i:n||i||a}),n}function kT(e,t,n){let r=Array.isArray(e)?e:[],i=String(t||``).trim().toLowerCase();return OT(i?r.filter(e=>ET(e).includes(i)):r.slice(),n)}function AT(e){let t=e||{},n=uT(t),r=String(t.subject||``).trim();if(n===`user_path`){let e=ST(r);if(e)return{payload:null,error:e}}else if(!r)return{payload:null,error:`Label is required.`};let i=Number(t.amount);if(!Number.isFinite(i)||i<=0)return{payload:null,error:`Amount must be greater than 0.`};let a=String(t.period||``).trim(),o=vT(a);return a===`custom`&&(o=Number(t.period_seconds)),!Number.isFinite(o)||o<=0?{payload:null,error:`Period seconds must be greater than 0.`}:{payload:{scope:n,subject:n===`user_path`?CT(r):r,period_seconds:Math.trunc(o),amount:i,source:String(t.source||`manual`).trim()||`manual`},error:``}}function jT(e){return{scope:uT(e),subject:dT(e),budget_key:{period_seconds:e.period_seconds},amount:e.amount}}function MT(e){return{scope:uT(e),subject:dT(e),budget_key:{period_seconds:e.period_seconds}}}function NT(e){return{scope:uT(e),subject:dT(e),period_seconds:e.period_seconds}}function PT(e){return rc(e)}function FT(e,t){let n=e||{},r=t||{};return`A budget for "`+((dT(n)||dT(r))+` `+UT({period_seconds:n.period_seconds||r.period_seconds,period_label:r.period_label}))+`" already exists. Saving will override the current `+PT(r.amount)+` limit with `+PT(n.amount)+`.`}function IT(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:t}function LT(e,t){let n=IT(e);return Math.round((t?Math.min(n,1):n)*1e3)/10}function RT(e){return IT(e&&e.usage_ratio)}function zT(e){return LT(RT(e),!0)}function BT(e){return LT(e&&e.period_ratio,!0)}function VT(e){return LT(RT(e),!1).toFixed(1).replace(/\.0$/,``)+`%`}function HT(e){return BT(e).toFixed(1).replace(/\.0$/,``)+`%`}function UT(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`Hourly`;case 86400:return`Daily`;case 604800:return`Weekly`;case 2592e3:return`Monthly`;default:{let n=String(e&&e.period_label||``).trim();return n?`Custom `+n:`Custom `+String(t||``)+`s`}}}function WT(e){switch(Number(e&&e.period_seconds||0)){case 3600:return`budget-period-label-hourly`;case 86400:return`budget-period-label-daily`;case 604800:return`budget-period-label-weekly`;case 2592e3:return`budget-period-label-monthly`;default:return`budget-period-label-custom`}}function GT(e){return WT(e).replace(`budget-period-label-`,`budget-bar-fill-period-`)}function KT(e){return WT(e).replace(`budget-period-label-`,`budget-bar-track-period-`)}function qT(e){switch(Number(e&&e.period_seconds||0)){case 3600:return Wa;case 86400:return So;case 604800:return Pa;case 2592e3:return Fa;default:return go}}function JT(e){let t=Math.max(0,Math.trunc(Number(e||0)));return t+` `+(t===1?`second`:`seconds`)}function YT(e){let t=Number(e&&e.period_seconds||0);switch(t){case 3600:return`1 hour`;case 86400:return`1 day`;case 604800:return`1 week`;case 2592e3:return`1 month`;default:return JT(t)}}function XT(e){return String(e&&e.source||``).trim()||`manual`}function ZT(e){let t=XT(e).toLowerCase();return t===`manual`?`Created from the dashboard.`:t===`config`?`Loaded from configuration.`:`Budget source: `+t}function QT(e){let t=Number(e&&e.remaining);return Number.isFinite(t)?t<0?rc(Math.abs(t))+` over`:rc(t)+` remaining`:``}var Y=new class{#e=k(j([]));get budgets(){return I(this.#e)}set budgets(e){A(this.#e,e,!0)}#t=k(!0);get budgetsAvailable(){return I(this.#t)}set budgetsAvailable(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get filter(){return I(this.#r)}set filter(e){A(this.#r,e,!0)}#i=k(`subject`);get sortBy(){return I(this.#i)}set sortBy(e){A(this.#i,e,!0)}#a=k(``);get error(){return I(this.#a)}set error(e){A(this.#a,e,!0)}#o=k(!1);get formOpen(){return I(this.#o)}set formOpen(e){A(this.#o,e,!0)}#s=k(!1);get formSubmitting(){return I(this.#s)}set formSubmitting(e){A(this.#s,e,!0)}#c=k(``);get formError(){return I(this.#c)}set formError(e){A(this.#c,e,!0)}#l=k(!1);get editing(){return I(this.#l)}set editing(e){A(this.#l,e,!0)}#u=k(j(sT()));get form(){return I(this.#u)}set form(e){A(this.#u,e,!0)}#d=k(!1);get overrideDialogOpen(){return I(this.#d)}set overrideDialogOpen(e){A(this.#d,e,!0)}#f=k(null);get overridePendingPayload(){return I(this.#f)}set overridePendingPayload(e){A(this.#f,e,!0)}#p=k(null);get overrideExistingBudget(){return I(this.#p)}set overrideExistingBudget(e){A(this.#p,e,!0)}#m=k(``);get resettingKey(){return I(this.#m)}set resettingKey(e){A(this.#m,e,!0)}#h=k(``);get deletingKey(){return I(this.#h)}set deletingKey(e){A(this.#h,e,!0)}#g=k(!1);get resetAllLoading(){return I(this.#g)}set resetAllLoading(e){A(this.#g,e,!0)}#_=null;managementEnabled(){return _s.budgetsVisible()}filteredBudgets(){return kT(this.budgets,this.filter,this.sortBy)}async fetchBudgetsPage(){if(await _s.ensureLoaded(),!this.managementEnabled()){this.budgets=[],this.budgetsAvailable=!1,this.error=``;return}return this.#_||=this.fetchBudgets().finally(()=>{this.#_=null}),this.#_}async fetchBudgets(){this.loading=!0,this.error=``;let e=await aT(`/admin/budgets`,{label:`budgets`,errorFallback:`Unable to load budgets.`,normalize:TT});if(this.loading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.budgetsAvailable=!1,this.budgets=[];return}if(!e.result){this.budgets=[],this.error=e.error;return}if(this.budgetsAvailable=!0,e.status===`error`){this.error=e.error;return}this.budgets=e.items}}openForm(e){if(this.editing=!!e,this.formError=``,e){let t=Number(e.period_seconds||0);this.form={scope:uT(e),subject:dT(e),period:yT(t),period_seconds:t,amount:String(e.amount||``),source:String(e.source||`manual`)}}else this.form=sT();this.formOpen=!0}syncPeriodSeconds(){let e=vT(String(this.form.period||``).trim());e>0&&(this.form.period_seconds=e)}setFormSubject(e){this.form.subject=this.form.scope===`label`?String(e??``):wT(e)}syncScope(){gT(this.form)}closeForm(){this.closeOverrideDialog(),this.formOpen=!1,this.formSubmitting=!1,this.formError=``,this.editing=!1,this.form=sT()}async submitForm(){if(this.formSubmitting)return;let{payload:e,error:t}=AT(this.form);if(!e){this.formError=t;return}if(!this.editing){let t=xT(this.budgets,e);if(t){this.openOverrideDialog(t,e);return}}await this.saveBudgetPayload(e)}async saveBudgetPayload(e){if(this.formSubmitting||!e)return;this.formSubmitting=!0,this.formError=``;let t=await oT(`/admin/budgets`,`PUT`,jT(e),{label:`save budget`,errorFallback:`Unable to save budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.formSubmitting=!1,t.status!==`stale`){if(t.status===`unavailable`){this.budgetsAvailable=!1,this.formError=t.error;return}if(t.status===`error`){this.formError=t.error;return}this.closeForm(),Js.success(`Budget saved.`),this.fetchBudgets()}}openOverrideDialog(e,t){this.overrideExistingBudget=e||null,this.overridePendingPayload=t||null,this.overrideDialogOpen=!0}closeOverrideDialog(){this.overrideDialogOpen=!1,this.overridePendingPayload=null,this.overrideExistingBudget=null}async confirmOverride(){if(!this.overridePendingPayload){this.closeOverrideDialog();return}let e=this.overridePendingPayload;this.closeOverrideDialog(),await this.saveBudgetPayload(e)}async resetBudget(e){if(!e)return;let t=bT(e);if(this.resettingKey===t)return;let n=dT(e)+` `+UT(e);if(!confirm(`Reset budget "`+n+`"?`))return;this.resettingKey=t;let r=await oT(`/admin/budgets/reset-one`,`POST`,NT(e),{label:`reset budget`,errorFallback:`Unable to reset budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.resettingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,Js.error(r.error);return}if(r.status===`error`){Js.error(r.error);return}Js.success(`Budget reset.`),this.fetchBudgets()}}async deleteBudget(e){if(!e)return;let t=bT(e);if(this.deletingKey===t)return;let n=dT(e)+` `+UT(e);if(!confirm(`Delete budget "`+n+`"? This cannot be undone.`))return;this.deletingKey=t;let r=await oT(`/admin/budgets`,`DELETE`,MT(e),{label:`delete budget`,errorFallback:`Unable to delete budget.`,unavailableMessage:`Budget management is unavailable.`});if(this.deletingKey=``,r.status!==`stale`){if(r.status===`unavailable`){this.budgetsAvailable=!1,Js.error(r.error);return}if(r.status===`error`){Js.error(r.error);return}this.budgets=TT(r.result.data),Js.success(`Budget deleted.`)}}openResetDialog(){Ns.open({title:`Reset Budgets`,titleId:`budgetResetDialogTitle`,inputId:`budget-reset-confirmation`,requiredText:`reset`,confirmLabel:`Reset All Budgets`,icon:uo,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.resetAllBudgets()})}async resetAllBudgets(){if(this.resetAllLoading)return;this.resetAllLoading=!0;let e=await oT(`/admin/budgets/reset`,`POST`,{confirmation:`reset`},{label:`reset budgets`,errorFallback:`Unable to reset budgets.`,unavailableStatuses:[]});if(this.resetAllLoading=!1,e.status!==`stale`){if(e.status!==`ok`){Ns.error=e.error;return}Ns.close(),Js.success(`Budgets reset.`),Uo.page===`budgets`&&this.fetchBudgets()}}},$T=R(` Edit`,1),eE=R(` `,1),tE=R(`
        Usage
        Period
        `),nE=R(`
        `);function rE(e,t){E(t,!0);let n=G(t,`budgets`,19,()=>[]);function r(e){if(!e)return``;let t=os.formatTimestamp(e);return!t||t===`-`?``:t+` `+os.effectiveTimeZoneLabel()}var i=nE();H(i,21,n,e=>bT(e),(e,t)=>{var n=tE(),i=M(n),a=M(i),o=M(a),s=M(o),c=e=>{K(e,{get icon(){return Co},class:`budget-scope-icon`})},l=O(()=>uT(I(t))===`label`);V(s,e=>{I(l)&&e(c)});var u=P(s);T(o);var d=P(o,2),f=M(d),p=M(f);{let e=O(()=>qT(I(t)));K(p,{get icon(){return I(e)},class:`budget-period-icon`})}var m=P(p,2),h=M(m,!0);T(m),T(f),T(d);var g=P(d,2),_=M(g),v=M(_),y=M(v,!0);T(v),T(_);var b=P(_,2),x=M(b);iT(x,{label:`Edit budget`,class:`budget-action-btn`,onclick:()=>Y.openForm(I(t)),children:(e,t)=>{var n=$T();K(N(n),{get icon(){return ao},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}});var S=P(x,2);{let e=O(()=>Y.resettingKey===bT(I(t))?`Resetting budget`:`Reset budget`),n=O(()=>Y.resettingKey===bT(I(t)));iT(S,{get label(){return I(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>Y.resetBudget(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=eE(),i=N(r);K(i,{get icon(){return uo},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.resettingKey===bT(I(t))?`Resetting`:`Reset`]),z(e,r)},$$slots:{default:!0}})}var C=P(S,2);{let e=O(()=>Y.deletingKey===bT(I(t))?`Deleting budget`:`Delete budget`),n=O(()=>Y.deletingKey===bT(I(t)));iT(C,{get label(){return I(e)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>Y.deleteBudget(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=eE(),i=N(r);K(i,{get icon(){return To},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.deletingKey===bT(I(t))?`Deleting`:`Delete`]),z(e,r)},$$slots:{default:!0}})}T(b),T(g),T(a);var w=P(a,2),ee=M(w),te=M(ee),ne=P(M(te),2),re=M(ne,!0);T(ne),T(te);var ie=P(te,2),ae=M(ie);let oe;var se=P(ae,2),ce=M(se),le=M(ce,!0);T(ce);var ue=P(ce,2),de=M(ue,!0);T(ue),T(se);var fe=P(se,2),pe=M(fe),me=M(pe,!0);T(pe);var he=P(pe,2),ge=M(he,!0);T(he),T(fe),T(ie),T(ee);var _e=P(ee,2),ve=M(_e),ye=P(M(ve),2),be=M(ye,!0);T(ye),T(ve);var xe=P(ve,2),Se=M(xe),Ce=P(Se,2),we=M(Ce),Te=M(we,!0);T(we);var Ee=P(we,2),De=M(Ee,!0);T(Ee);var Oe=P(Ee,2),ke=M(Oe,!0);T(Oe),T(Ce);var Ae=P(Ce,2),je=M(Ae),Me=M(je,!0);T(je);var Ne=P(je,2),Pe=M(Ne,!0);T(Ne);var Fe=P(Ne,2),Ie=M(Fe,!0);T(Fe),T(Ae),T(xe),T(_e),T(w),T(i),T(n),F((e,t,n,r,i,a,s,c,l,d,p,m,g,_,b,x,S,C,w,ee,te,ne,se,ce,ue,fe,pe,he,_e,ve)=>{U(o,1,`budget-scope-value ${e??``}`,`svelte-1jm56wo`),Hi(o,t),W(o,`title`,n),B(u,` ${r??``}`),U(f,1,`budget-period-label ${i??``}`,`svelte-1jm56wo`),B(h,a),W(v,`title`,s),B(y,c),B(re,l),W(ie,`aria-valuenow`,d),W(ie,`aria-label`,p),Hi(ie,`--budget-progress: ${m??``}%`),oe=U(ae,1,`budget-bar-fill budget-bar-fill-usage`,null,oe,g),B(le,_),B(de,b),B(me,x),B(ge,S),B(be,C),U(xe,1,`budget-bar-track ${w??``}`,`svelte-1jm56wo`),W(xe,`aria-valuenow`,ee),Hi(xe,`--budget-progress: ${te??``}%`),U(Se,1,`budget-bar-fill budget-bar-fill-period ${ne??``}`,`svelte-1jm56wo`),W(we,`title`,se),B(Te,ce),B(De,ue),W(Oe,`title`,fe),B(ke,pe),B(Me,he),B(Pe,_e),B(Ie,ve)},[()=>pT(I(t)),()=>uT(I(t))===`label`?`--label-color: `+Ry(dT(I(t))):void 0,()=>fT(I(t))+`: `+dT(I(t)),()=>dT(I(t)),()=>WT(I(t)),()=>UT(I(t)),()=>ZT(I(t)),()=>XT(I(t)),()=>VT(I(t)),()=>zT(I(t)),()=>`Budget usage: `+rc(I(t).spent)+` of `+rc(I(t).amount)+`, `+QT(I(t)),()=>zT(I(t)),()=>({"budget-bar-fill-danger":RT(I(t))>=1}),()=>rc(I(t).spent)+` of `+rc(I(t).amount),()=>QT(I(t)),()=>rc(I(t).spent)+` of `+rc(I(t).amount),()=>QT(I(t)),()=>HT(I(t)),()=>KT(I(t)),()=>BT(I(t)),()=>BT(I(t)),()=>GT(I(t)),()=>r(I(t).period_start),()=>os.formatTimestamp(I(t).period_start),()=>YT(I(t)),()=>r(I(t).period_end),()=>os.formatTimestamp(I(t).period_end),()=>os.formatTimestamp(I(t).period_start),()=>YT(I(t)),()=>os.formatTimestamp(I(t).period_end)]),z(e,n)}),T(i),z(e,i),D()}var iE=R(`

        `,1),aE=R(``),oE=R(``),sE=R(`
        `);function cE(e,t){E(t,!0);let n=G(t,`open`,3,!1),r=G(t,`title`,3,``),i=G(t,`ariaLabel`,3,``),a=G(t,`error`,3,``),o=G(t,`submitting`,3,!1),s=G(t,`submitDisabled`,3,!1),c=G(t,`submitLabel`,3,`Save`),l=G(t,`submittingLabel`,3,`Saving...`),u=G(t,`submitIcon`,3,fo),d=G(t,`cancel`,3,!0),p=G(t,`dialogClass`,3,``),m=G(t,`novalidate`,3,!1),h=G(t,`canClose`,3,()=>!0);function g(){q.dialogOpen||h()()&&t.onclose?.()}Os(e,{get open(){return n()},variant:`editor`,onclose:g,children:(e,n)=>{var h=sE(),g=M(h),_=M(g),v=M(_),y=M(v),b=e=>{var n=Qr();gi(N(n),()=>t.header),z(e,n)},x=e=>{var n=iE(),i=N(n),a=M(i,!0);T(i);var o=P(i,2),s=e=>{var n=Qr();gi(N(n),()=>t.headerHint),z(e,n)};V(o,e=>{t.headerHint&&e(s)}),F(()=>B(a,r())),z(e,n)};V(y,e=>{t.header?e(b):e(x,-1)}),T(v);var S=P(v,2);{let e=O(()=>`Close `+(i()||r()).toLowerCase());ws(S,{get label(){return I(e)},onclick:()=>t.onclose?.()})}T(_);var C=P(_,2);gi(C,()=>t.children??f);var w=P(C,2),ee=e=>{var t=aE(),n=M(t,!0);T(t),F(()=>B(n,a())),z(e,t)};V(w,e=>{a()&&e(ee)});var te=P(w,2),ne=M(te),re=e=>{var n=oE();L(`click`,n,()=>t.onclose?.()),z(e,n)};V(ne,e=>{d()&&e(re)});var ie=P(ne,2),ae=e=>{var n=Qr();gi(N(n),()=>t.extraActions),z(e,n)};V(ie,e=>{t.extraActions&&e(ae)});var oe=P(ie,2),se=M(oe);K(se,{get icon(){return u()},class:`form-action-icon`});var ce=P(se,2),le=M(ce,!0);T(ce),T(oe),T(te),T(g),T(h),F(()=>{U(h,1,Fi([`model-editor`,p()])),W(h,`aria-label`,i()||r()),g.noValidate=m(),oe.disabled=o()||s(),B(le,o()?l():c())}),Vr(`submit`,g,e=>{e.preventDefault(),t.onsubmit?.()}),z(e,h)},$$slots:{default:!0}}),D()}Hr([`click`]);var lE=R(`
        `);function uE(e,t){let n=G(t,`label`,3,``);var r=lE(),i=M(r),a=M(i,!0);T(i),gi(P(i,2),()=>t.children??f),T(r),F(()=>{W(i,`for`,t.id),B(a,n())}),z(e,r)}var dE=R(``),fE=R(``),pE=R(``),mE=R(``),hE=R(``),gE=R(``),_E=R(`

        Editing a budget updates its limit only. Use Reset to start a new - budget period.

        `),vE=R(`
        `,1),yE=R(``),bE=R(` `,1);function xE(e,t){E(t,!0);function n(e){Y.setFormSubject(e.target.value),e.target.value=Y.form.subject}var r=bE(),i=N(r);{let e=O(()=>Y.editing?`Edit Budget`:`Create Budget`);cE(i,{get open(){return Y.formOpen},get title(){return I(e)},ariaLabel:`Budget editor`,get error(){return Y.formError},get submitting(){return Y.formSubmitting},submitLabel:`Save Budget`,dialogClass:`budget-editor`,canClose:()=>!Y.overrideDialogOpen,onclose:()=>Y.closeForm(),onsubmit:()=>Y.submitForm(),children:(e,t)=>{var r=vE(),i=N(r),a=M(i);uE(a,{id:`budget-scope`,label:`Scope`,children:(e,t)=>{var n=fE();H(n,21,lT,e=>e.value,(e,t)=>{var n=dE(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),F(()=>n.disabled=Y.editing),L(`change`,n,()=>Y.syncScope()),Gi(n,()=>Y.form.scope,e=>Y.form.scope=e),z(e,n)},$$slots:{default:!0}});var o=P(a,2);{let e=O(()=>mT(Y.form));uE(o,{id:`budget-subject`,get label(){return I(e)},children:(e,t)=>{var r=pE();na(r),F(e=>{W(r,`placeholder`,e),ra(r,Y.form.subject),r.disabled=Y.editing,W(r,`data-modal-autofocus`,!Y.editing||void 0)},[()=>hT(Y.form)]),L(`input`,r,n),z(e,r)},$$slots:{default:!0}})}var s=P(o,2);uE(s,{id:`budget-period`,label:`Period`,children:(e,t)=>{var n=mE();H(n,21,_T,e=>e.value,(e,t)=>{var n=dE(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),F(()=>n.disabled=Y.editing),L(`change`,n,()=>Y.syncPeriodSeconds()),Gi(n,()=>Y.form.period,e=>Y.form.period=e),z(e,n)},$$slots:{default:!0}});var c=P(s,2),l=e=>{uE(e,{id:`budget-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=hE();na(n),F(()=>n.disabled=Y.editing),da(n,()=>Y.form.period_seconds,e=>Y.form.period_seconds=e),z(e,n)},$$slots:{default:!0}})};V(c,e=>{Y.form.period===`custom`&&e(l)}),uE(P(c,2),{id:`budget-amount`,label:`Amount`,children:(e,t)=>{var n=gE();na(n),F(()=>W(n,`data-modal-autofocus`,Y.editing||void 0)),da(n,()=>Y.form.amount,e=>Y.form.amount=e),z(e,n)},$$slots:{default:!0}}),T(i);var u=P(i,2),d=e=>{z(e,_E())};V(u,e=>{Y.editing&&e(d)}),z(e,r)},$$slots:{default:!0}})}Os(P(i,2),{get open(){return Y.overrideDialogOpen},variant:`auth`,onclose:()=>Y.closeOverrideDialog(),children:(e,t)=>{var n=yE(),r=M(n);ws(P(M(r),2),{label:`Close budget override dialog`,onclick:()=>Y.closeOverrideDialog(),class:`auth-dialog-close`,iconClass:``}),T(r);var i=P(r,2),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=P(c,2),u=M(l);K(u,{get icon(){return fo},class:`form-action-icon`});var d=P(u,2),f=M(d,!0);T(d),T(l),T(s),T(i),T(n),F(e=>{B(o,e),l.disabled=Y.formSubmitting,B(f,Y.formSubmitting?`Saving...`:`Override Budget`)},[()=>FT(Y.overridePendingPayload,Y.overrideExistingBudget)]),Vr(`submit`,i,e=>{e.preventDefault(),Y.confirmOverride()}),L(`click`,c,()=>Y.closeOverrideDialog()),z(e,n)},$$slots:{default:!0}}),z(e,r),D()}Hr([`change`,`input`,`click`]);var SE=R(`

        Budgets

        `),CE=R(``),wE=R(`
        Budget management is unavailable.
        `),TE=R(``),EE=R(`
        `),DE=R(`

        No budgets configured yet.

        `),OE=R(`

        No budgets match your filter.

        `),kE=R(`
        `);function AE(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`budgets`&&Y.fetchBudgetsPage()});let n=O(()=>Y.filteredBudgets());var r=kE(),i=M(r),a=M(i);US(M(a),{copyId:`budgets-help-copy`,label:`budgets help`,title:e=>{z(e,SE())},help:e=>{Ue(),z(e,Zr(`Budgets are evaluated from tracked usage cost records for each user - path subtree. Enforcement runs only when Budget is enabled for the - active workflow.`))},$$slots:{title:!0,help:!0}}),T(a);var o=P(a,2),s=M(o),c=e=>{var t=CE();K(M(t),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=Y.formSubmitting),L(`click`,t,()=>Y.openForm()),z(e,t)},l=O(()=>Y.managementEnabled()&&Y.budgetsAvailable&&!q.authError);V(s,e=>{I(l)&&e(c)}),T(o),T(i);var u=P(i,2);jc(u,{});var d=P(u,2),f=e=>{z(e,wE())},p=O(()=>(!Y.managementEnabled()||!Y.budgetsAvailable)&&!q.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=TE(),n=M(t,!0);T(t),F(()=>B(n,Y.error)),z(e,t)};V(m,e=>{Y.error&&!q.authError&&e(h)});var g=P(m,2),_=e=>{nT(e,{label:`Loading budgets...`})};V(g,e=>{Y.loading&&!q.authError&&e(_)});var v=P(g,2),y=e=>{var t=EE(),n=M(t);sw(M(n),{id:`budget-filter`,placeholder:`Filter by user path, label, or period...`,label:`Filter budgets by user path or period`,get value(){return Y.filter},set value(e){Y.filter=e}}),T(n);var r=P(n,2),i=P(M(r),2),a=M(i);a.value=a.__value=`subject`;var o=P(a);o.value=o.__value=`period`,T(i),T(r),T(t),Gi(i,()=>Y.sortBy,e=>Y.sortBy=e),z(e,t)};V(v,e=>{(Y.budgets.length>0||Y.filter)&&Y.budgetsAvailable&&!q.authError&&!Y.formOpen&&e(y)});var b=P(v,2);xE(b,{});var x=P(b,2),S=e=>{rE(e,{get budgets(){return I(n)}})};V(x,e=>{I(n).length>0&&Y.budgetsAvailable&&!q.authError&&e(S)});var C=P(x,2),w=e=>{z(e,DE())},ee=O(()=>Y.budgets.length===0&&!Y.filter&&!Y.loading&&!q.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{z(e,OE())},re=O(()=>Y.budgets.length>0&&I(n).length===0&&Y.filter&&!Y.loading&&!q.authError&&!Y.error&&Y.budgetsAvailable&&Y.managementEnabled());V(te,e=>{I(re)&&e(ne)}),T(r),z(e,r),D()}Hr([`click`]);function jE(){return{scope:`user_path`,subject:`/`,period:`minute`,period_seconds:60,max_requests:``,max_tokens:``,source:`manual`}}function ME(e){let t={user_path:{label:`User path`,chip:`user path`,fieldLabel:`User Path`,placeholder:`/team/alpha`},provider:{label:`Provider`,chip:`provider`,fieldLabel:`Provider Name`,placeholder:`openai`},model:{label:`Model`,chip:`model`,fieldLabel:`Model`,placeholder:`openai/gpt-4o`}};return t[e]||t.user_path}function NE(){return[`user_path`,`provider`,`model`].map(e=>({value:e,label:ME(e).label}))}function PE(e){return String(e&&e.scope||``).trim()||`user_path`}function FE(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function IE(e){return ME(PE(e)).chip}function LE(e){return ME(String(e&&e.scope||``)).fieldLabel}function RE(e){return ME(String(e&&e.scope||``)).placeholder}function zE(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function BE(){return[{value:`minute`,label:`Per minute`},{value:`hour`,label:`Per hour`},{value:`day`,label:`Per day`},{value:`concurrent`,label:`Concurrent (in-flight)`},{value:`custom`,label:`Custom seconds`}]}function VE(e){switch(String(e||``).trim().toLowerCase()){case`minute`:return 60;case`hour`:return 3600;case`day`:return 86400;case`concurrent`:return 0;default:return-1}}function HE(e){switch(Number(e||0)){case 60:return`minute`;case 3600:return`hour`;case 86400:return`day`;case 0:return`concurrent`;default:return`custom`}}function UE(e){let t=String(e&&e.period||``).trim(),n=VE(t);n>=0&&(e.period_seconds=n),t===`concurrent`&&(e.max_tokens=``)}function WE(e){return PE(e)+`:`+FE(e)+`:`+String(e&&e.period_seconds||`0`)}function GE(e){return Number(e&&e.period_seconds||0)===0}function KE(e){return String(e&&e.period_label||``).trim()||HE(Number(e&&e.period_seconds||0))}function qE(e){return String(e&&e.source||``)===`config`?`config`:`manual`}function JE(e){return String(e&&e.source||``)===`config`}function YE(e){let t=Number(e);return Number.isFinite(t)?t.toLocaleString():`0`}function XE(e,t){let n=Number(e),r=Number(t);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0)return 0;let i=Math.round(n/r*100);return Math.min(Math.max(i,0),100)}function ZE(e,t){let n=String(t||``).trim().toLowerCase(),r=Array.isArray(e)?e.slice():[],i={user_path:0,provider:1,model:2};return r.sort((e,t)=>{let n=(i[PE(e)]||0)-(i[PE(t)]||0);if(n!==0)return n;let r=FE(e).localeCompare(FE(t));return r===0?Number(e.period_seconds||0)-Number(t.period_seconds||0):r}),n?r.filter(e=>{let t=FE(e).toLowerCase(),r=IE(e).toLowerCase(),i=KE(e).toLowerCase();return t.includes(n)||r.includes(n)||i.includes(n)}):r}function QE(e){return!e||!Array.isArray(e.rate_limits)?[]:e.rate_limits}function $E(e,t,n){let r=String(t||``).trim();return r=e===`provider`||e===`model`?r.toLowerCase():`/`+r.split(`/`).map(e=>e.trim()).filter(Boolean).join(`/`),e+`:`+r+`:`+Number(n||0)}function eD(e,t){return e?$E(t.scope,t.subject,t.limit_key.period_seconds)!==$E(e.scope,e.subject,e.period_seconds):!1}function tD(e){let t=e||{},n=String(t.scope||`user_path`),r=String(t.subject||``).trim();if(n!==`user_path`&&!r)return{error:LE(t)+` is required.`};let i=String(t.period||``)===`concurrent`,a=t.period_seconds;if(a===``||a==null)return{error:`Period seconds is required.`};let o=Number(a);if(!Number.isInteger(o)||o<0||o===0&&!i)return{error:`Period seconds must be a positive integer (0 only for the concurrent period).`};let s=String(t.max_requests===void 0||t.max_requests===null?``:t.max_requests).trim(),c=String(t.max_tokens===void 0||t.max_tokens===null?``:t.max_tokens).trim();if(!s&&!c)return{error:`Set max requests, max tokens, or both.`};if(i&&c)return{error:`Token limits are not valid for the concurrent period.`};let l={scope:n,subject:r||`/`,limit_key:{period_seconds:o}};if(s){let e=Number(s);if(!Number.isInteger(e)||e<=0)return{error:`Max requests must be a positive integer.`};l.max_requests=e}if(c){let e=Number(c);if(!Number.isInteger(e)||e<=0)return{error:`Max tokens must be a positive integer.`};l.max_tokens=e}return{payload:l}}function nD(e,t,n){if(PE(e)!==`model`)return!1;let r=String(FE(e)).toLowerCase(),i=String(n||``).trim().toLowerCase();if(!i)return!1;if(r===i)return!0;let a=String(t||``).trim().toLowerCase();return a?r===a+`/`+i||i.startsWith(a+`/`)&&r===i.slice(a.length+1):!1}function rD(e,t){return PE(e)===`provider`&&String(FE(e)).toLowerCase()===String(t||``).trim().toLowerCase()}function iD(e){let t=e||{},n=String(t.model||``),r=String(t.provider||``);return!r||n.toLowerCase().startsWith(r+`/`)?n:r+`/`+n}function aD(e,t){let n=e||{},r=Array.isArray(t)?t:[],i=[];return n.kind===`model`&&i.push({key:`model`,title:`Model limits`,scope:`model`,subject:iD(n),hint:``,items:r.filter(e=>nD(e,n.provider,n.model))}),i.push({key:`provider`,title:`Provider limits (`+n.provider+`)`,scope:`provider`,subject:n.provider,hint:n.kind===`model`?`Shared by every model routed to this provider.`:``,items:r.filter(e=>rD(e,n.provider))}),i.push({key:`global`,title:`Global limits`,scope:`user_path`,subject:`/`,hint:`Root user-path rules throttle all traffic. Narrower user-path rules also apply, per consumer.`,items:r.filter(e=>PE(e)===`user_path`&&FE(e)===`/`)}),i}function oD(e){return GE(e)?XE(e.in_flight,e.max_requests):Math.max(XE(e.requests_used,e.max_requests),XE(e.tokens_used,e.max_tokens))}function sD(e){return`--rate-limit-pressure: `+oD(e)+`%`}function cD(e){let t=oD(e);return t>=100?`rate-limit-pressure-row rate-limit-pressure-full`:t>=75?`rate-limit-pressure-row rate-limit-pressure-high`:`rate-limit-pressure-row`}function lD(e){return(Array.isArray(e)?e:[]).some(e=>PE(e)===`user_path`&&FE(e)===`/`)}function uD(e,t,n){let r=Array.isArray(e)?e:[];return r.some(e=>nD(e,t,n))?`table-action-btn-active`:r.some(e=>rD(e,t))||lD(r)?`rate-limit-gauge-inherited`:``}function dD(e,t){let n=Array.isArray(e)?e:[];return n.some(e=>rD(e,t))?`table-action-btn-active`:lD(n)?`rate-limit-gauge-inherited`:``}function fD(e,t){let n=`Rate limits for `+e;return t===`table-action-btn-active`?n+` (direct limits configured)`:t?n+` (inherited limits apply)`:n}function pD(e){if(GE(e))return YE(e.in_flight)+` of `+YE(e.max_requests)+` in flight`;let t=[];return e.max_requests!==null&&e.max_requests!==void 0&&t.push(YE(e.requests_used)+`/`+YE(e.max_requests)+` req`),e.max_tokens!==null&&e.max_tokens!==void 0&&t.push(YE(e.tokens_used)+`/`+YE(e.max_tokens)+` tok`),t.join(` · `)}var X=new class{#e=k(j([]));get rateLimits(){return I(this.#e)}set rateLimits(e){A(this.#e,e,!0)}#t=k(!0);get rateLimitsAvailable(){return I(this.#t)}set rateLimitsAvailable(e){A(this.#t,e,!0)}#n=k(!1);get rateLimitsLoading(){return I(this.#n)}set rateLimitsLoading(e){A(this.#n,e,!0)}rateLimitFetchPromise=null;#r=k(``);get rateLimitFilter(){return I(this.#r)}set rateLimitFilter(e){A(this.#r,e,!0)}#i=k(``);get rateLimitError(){return I(this.#i)}set rateLimitError(e){A(this.#i,e,!0)}#a=k(!1);get rateLimitFormOpen(){return I(this.#a)}set rateLimitFormOpen(e){A(this.#a,e,!0)}#o=k(!1);get rateLimitFormSubmitting(){return I(this.#o)}set rateLimitFormSubmitting(e){A(this.#o,e,!0)}#s=k(``);get rateLimitFormError(){return I(this.#s)}set rateLimitFormError(e){A(this.#s,e,!0)}#c=k(!1);get rateLimitEditing(){return I(this.#c)}set rateLimitEditing(e){A(this.#c,e,!0)}rateLimitEditingOriginal=null;rateLimitFormReturnToInspector=!1;#l=k(``);get rateLimitResettingKey(){return I(this.#l)}set rateLimitResettingKey(e){A(this.#l,e,!0)}#u=k(``);get rateLimitDeletingKey(){return I(this.#u)}set rateLimitDeletingKey(e){A(this.#u,e,!0)}#d=k(!1);get rateLimitInspectorOpen(){return I(this.#d)}set rateLimitInspectorOpen(e){A(this.#d,e,!0)}#f=k(j({kind:``,provider:``,model:``,title:``}));get rateLimitInspector(){return I(this.#f)}set rateLimitInspector(e){A(this.#f,e,!0)}#p=k(j(jE()));get rateLimitForm(){return I(this.#p)}set rateLimitForm(e){A(this.#p,e,!0)}rateLimitsEnabled(){return _s.rateLimitsVisible()}defaultRateLimitForm(){return jE()}rateLimitScopeMeta(e){return ME(e)}rateLimitScopeOptions(){return NE()}rateLimitScope(e){return PE(e)}rateLimitSubject(e){return FE(e)}rateLimitScopeLabel(e){return IE(e)}rateLimitSubjectFieldLabel(){return LE(this.rateLimitForm)}rateLimitSubjectPlaceholder(){return RE(this.rateLimitForm)}syncRateLimitScope(){zE(this.rateLimitForm)}rateLimitPeriodOptions(){return BE()}rateLimitPeriodSeconds(e){return VE(e)}rateLimitPeriodFromSeconds(e){return HE(e)}syncRateLimitPeriodSeconds(){UE(this.rateLimitForm)}rateLimitKey(e){return WE(e)}rateLimitIsConcurrent(e){return GE(e)}rateLimitPeriodLabel(e){return KE(e)}rateLimitSourceLabel(e){return qE(e)}rateLimitIsReadOnly(e){return JE(e)}formatRateLimitNumber(e){return YE(e)}rateLimitUsagePercent(e,t){return XE(e,t)}filteredRateLimits(){return ZE(this.rateLimits,this.rateLimitFilter)}normalizeRateLimitListPayload(e){return QE(e)}async fetchRateLimitsPage(){if(await _s.ensureLoaded(),!this.rateLimitsEnabled()){this.rateLimits=[],this.rateLimitsAvailable=!1,this.rateLimitError=``;return}return this.rateLimitFetchPromise||=this.fetchRateLimits().finally(()=>{this.rateLimitFetchPromise=null}),this.rateLimitFetchPromise}async fetchRateLimits(){this.rateLimitsLoading=!0,this.rateLimitError=``;let e=await aT(`/admin/rate-limits`,{label:`rate limits`,errorFallback:`Unable to load rate limits.`,normalize:QE});if(this.rateLimitsLoading=!1,e.status!==`stale`){if(e.status===`unavailable`){this.rateLimitsAvailable=!1,this.rateLimits=[];return}if(!e.result){this.rateLimits=[],this.rateLimitError=e.error;return}if(this.rateLimitsAvailable=!0,e.status===`error`){this.rateLimitError=e.error;return}this.rateLimits=e.items}}openRateLimitForm(e){if(this.rateLimitEditing=!!e,this.rateLimitFormError=``,e){let t=Number(e.period_seconds||0);this.rateLimitEditingOriginal={scope:PE(e),subject:FE(e),period_seconds:t},this.rateLimitForm={scope:PE(e),subject:FE(e),period:HE(t),period_seconds:t,max_requests:e.max_requests===null||e.max_requests===void 0?``:String(e.max_requests),max_tokens:e.max_tokens===null||e.max_tokens===void 0?``:String(e.max_tokens),source:String(e.source||`manual`)}}else this.rateLimitEditingOriginal=null,this.rateLimitForm=jE();this.rateLimitFormOpen=!0}closeRateLimitForm(){this.rateLimitFormOpen=!1,this.rateLimitFormSubmitting=!1,this.rateLimitFormError=``,this.rateLimitEditing=!1,this.rateLimitEditingOriginal=null,this.rateLimitForm=jE(),this.rateLimitFormReturnToInspector&&(this.rateLimitFormReturnToInspector=!1,this.rateLimitInspectorOpen=!0)}rateLimitNormalizedIdentity(e,t,n){return $E(e,t,n)}rateLimitIdentityMoved(e){return eD(this.rateLimitEditingOriginal,e)}setRateLimitFormSubject(e){this.rateLimitForm.subject=String(e||``)}rateLimitFormPayload(){return tD(this.rateLimitForm)}async submitRateLimitForm(){if(this.rateLimitFormSubmitting)return;let{payload:e,error:t}=this.rateLimitFormPayload();if(t){this.rateLimitFormError=t;return}let n=this.rateLimitIdentityMoved(e),r=this.rateLimitEditingOriginal;this.rateLimitFormSubmitting=!0,this.rateLimitFormError=``;try{let t=await oT(`/admin/rate-limits`,`PUT`,e,{label:`save rate limit`,errorFallback:`Unable to save rate limit.`,unavailableStatuses:[]});if(t.status===`stale`)return;if(t.status!==`ok`){this.rateLimitFormError=t.error;return}if(this.rateLimits=QE(t.result.data),n&&!await this.deleteMovedRateLimitOriginal(r))return;this.closeRateLimitForm(),Js.success(n?`Rate limit moved; live counters restarted.`:`Rate limit saved.`)}finally{this.rateLimitFormSubmitting=!1}}async deleteMovedRateLimitOriginal(e){let t=await oT(`/admin/rate-limits`,`DELETE`,{scope:e.scope,subject:e.subject,limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`remove the moved rate limit`,errorFallback:`The new rule was saved, but the previous one could not be removed. Delete it manually.`,unavailableStatuses:[]});return t.status===`stale`?!1:t.status===`ok`?(this.rateLimits=QE(t.result.data),!0):(this.rateLimitFormError=t.error,!1)}async deleteRateLimit(e){let t=WE(e);if(this.rateLimitDeletingKey===t)return;this.rateLimitDeletingKey=t;let n=await oT(`/admin/rate-limits`,`DELETE`,{scope:PE(e),subject:FE(e),limit_key:{period_seconds:Number(e.period_seconds||0)}},{label:`delete rate limit`,errorFallback:`Unable to delete rate limit.`,unavailableStatuses:[]});if(this.rateLimitDeletingKey=``,n.status!==`stale`){if(n.status!==`ok`){Js.error(n.error);return}this.rateLimits=QE(n.result.data),Js.success(`Rate limit deleted.`)}}async resetRateLimit(e){let t=WE(e);if(this.rateLimitResettingKey===t)return;this.rateLimitResettingKey=t;let n=await oT(`/admin/rate-limits/reset-one`,`POST`,{scope:PE(e),subject:FE(e),period_seconds:Number(e.period_seconds||0)},{label:`reset rate limit`,errorFallback:`Unable to reset rate limit.`,unavailableStatuses:[]});if(this.rateLimitResettingKey=``,n.status!==`stale`){if(n.status!==`ok`){Js.error(n.error);return}this.rateLimits=QE(n.result.data),Js.success(`Rate limit counters reset.`)}}rateLimitInspectorModelID(e){return String(e&&e.model&&e.model.id||``).trim()}openRateLimitInspectorForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`model`,provider:n,model:t,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}openRateLimitInspectorForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase();this.rateLimitInspector={kind:`provider`,provider:t,model:``,title:String(e&&e.display_name||t)},this.showRateLimitInspector()}showRateLimitInspector(){this.rateLimitInspectorOpen=!0,this.fetchRateLimitsPage()}closeRateLimitInspector(){this.rateLimitInspectorOpen=!1}rateLimitRuleMatchesModel(e,t,n){return nD(e,t,n)}rateLimitRuleMatchesProvider(e,t){return rD(e,t)}rateLimitInspectorQualifiedModel(){return iD(this.rateLimitInspector)}rateLimitInspectorSections(){return aD(this.rateLimitInspector,this.rateLimits)}rateLimitPressurePercent(e){return oD(e)}rateLimitPressureStyle(e){return sD(e)}rateLimitPressureClass(e){return cD(e)}rateLimitGaugeCache={rules:null,states:{}};rateLimitGaugeMemo(e,t){this.rateLimitGaugeCache.rules!==this.rateLimits&&(this.rateLimitGaugeCache={rules:this.rateLimits,states:{}});let n=this.rateLimitGaugeCache.states;return e in n||(n[e]=t()),n[e]}rateLimitGaugeClassForModel(e){let t=this.rateLimitInspectorModelID(e),n=String(e&&e.provider_name||``).trim().toLowerCase(),r=this.rateLimits;return this.rateLimitGaugeMemo(`model:`+n+`/`+t,()=>uD(r,n,t))}rateLimitGaugeClassForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase(),n=this.rateLimits;return this.rateLimitGaugeMemo(`provider:`+t,()=>dD(n,t))}hasGlobalRateLimits(){let e=this.rateLimits;return this.rateLimitGaugeMemo(`global`,()=>lD(e))}rateLimitGaugeTitle(e,t){return fD(e,t)}rateLimitInspectorSummary(e){return pD(e)}openRateLimitFormFromInspector(e,t,n){this.rateLimitInspectorOpen=!1,this.rateLimitFormReturnToInspector=!0,this.openRateLimitForm(n||void 0),n||(this.rateLimitForm.scope=e,this.rateLimitForm.subject=t)}},mD=R(``),hD=R(``),gD=R(``),_D=R(``),vD=R(``),yD=R(``),bD=R(``),xD=R(`

        Scope, subject, and period identify the rule: changing any of them - moves the rule to a new key and restarts its live counters.

        `),SD=R(`

        A user path rule limits the whole subtree; provider and model rules cap - all traffic routed there and make load balancing skip the target while - it is saturated. One shared counter per rule. Leave a field empty to - skip that limit. Token limits require usage tracking.

        `,1);function CD(e,t){E(t,!0);{let t=O(()=>X.rateLimitEditing?`Edit Rate Limit`:`Create Rate Limit`);cE(e,{get open(){return X.rateLimitFormOpen},get title(){return I(t)},ariaLabel:`Rate limit editor`,get error(){return X.rateLimitFormError},get submitting(){return X.rateLimitFormSubmitting},submitLabel:`Save Rate Limit`,dialogClass:`budget-editor`,novalidate:!0,onclose:()=>X.closeRateLimitForm(),onsubmit:()=>X.submitRateLimitForm(),children:(e,t)=>{var n=SD(),r=N(n),i=M(r);uE(i,{id:`rate-limit-scope`,label:`Scope`,children:(e,t)=>{var n=hD();H(n,21,()=>X.rateLimitScopeOptions(),e=>e.value,(e,t)=>{var n=mD(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),L(`change`,n,()=>X.syncRateLimitScope()),Gi(n,()=>X.rateLimitForm.scope,e=>X.rateLimitForm.scope=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2);{let e=O(()=>X.rateLimitSubjectFieldLabel());uE(a,{id:`rate-limit-subject`,get label(){return I(e)},children:(e,t)=>{var n=gD();na(n),F(e=>{W(n,`placeholder`,e),W(n,`data-modal-autofocus`,!X.rateLimitEditing||void 0),ra(n,X.rateLimitForm.subject)},[()=>X.rateLimitSubjectPlaceholder()]),L(`input`,n,e=>X.setRateLimitFormSubject(e.currentTarget.value)),z(e,n)},$$slots:{default:!0}})}var o=P(a,2);uE(o,{id:`rate-limit-period`,label:`Period`,children:(e,t)=>{var n=_D();H(n,21,()=>X.rateLimitPeriodOptions(),e=>e.value,(e,t)=>{var n=mD(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n),L(`change`,n,()=>X.syncRateLimitPeriodSeconds()),Gi(n,()=>X.rateLimitForm.period,e=>X.rateLimitForm.period=e),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=e=>{uE(e,{id:`rate-limit-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=vD();na(n),da(n,()=>X.rateLimitForm.period_seconds,e=>X.rateLimitForm.period_seconds=e),z(e,n)},$$slots:{default:!0}})};V(s,e=>{X.rateLimitForm.period===`custom`&&e(c)});var l=P(s,2);{let e=O(()=>X.rateLimitForm.period===`concurrent`?`Max In-Flight Requests`:`Max Requests`);uE(l,{id:`rate-limit-max-requests`,get label(){return I(e)},children:(e,t)=>{var n=yD();na(n),F(()=>W(n,`data-modal-autofocus`,X.rateLimitEditing?!0:void 0)),da(n,()=>X.rateLimitForm.max_requests,e=>X.rateLimitForm.max_requests=e),z(e,n)},$$slots:{default:!0}})}var u=P(l,2),d=e=>{uE(e,{id:`rate-limit-max-tokens`,label:`Max Tokens`,children:(e,t)=>{var n=bD();na(n),da(n,()=>X.rateLimitForm.max_tokens,e=>X.rateLimitForm.max_tokens=e),z(e,n)},$$slots:{default:!0}})};V(u,e=>{X.rateLimitForm.period!==`concurrent`&&e(d)}),T(r);var f=P(r,4),p=e=>{z(e,xD())};V(f,e=>{X.rateLimitEditing&&e(p)}),z(e,n)},$$slots:{default:!0}})}D()}Hr([`change`,`input`]);var wD=R(` `),TD=R(` Edit`,1),ED=R(` `,1),DD=R(`
        In-flight
        `),OD=R(`
        Requests
        `),kD=R(`
        Tokens
        `),AD=R(`
        `),jD=R(`
        `);function MD(e,t){E(t,!0);var n=jD();H(n,21,()=>t.rules,e=>X.rateLimitKey(e),(e,t)=>{var n=AD(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=e=>{var n=wD(),r=M(n);{let e=O(()=>X.rateLimitScope(I(t))===`provider`?ho:Ma);K(r,{get icon(){return I(e)},class:`budget-period-icon`})}var i=P(r,2),a=M(i,!0);T(i),T(n),F((e,t)=>{W(n,`title`,e),B(a,t)},[()=>`Rule scope: `+X.rateLimitScopeLabel(I(t)),()=>X.rateLimitScopeLabel(I(t))]),z(e,n)},u=O(()=>X.rateLimitScope(I(t))!==`user_path`);V(c,e=>{I(u)&&e(l)});var d=P(c,2),f=M(d);{let e=O(()=>X.rateLimitIsConcurrent(I(t))?ka:wo);K(f,{get icon(){return I(e)},class:`budget-period-icon`})}var p=P(f,2),m=M(p,!0);T(p),T(d),T(s);var h=P(s,2),g=M(h),_=M(g),v=M(_,!0);T(_),T(g);var y=P(g,2),b=M(y),x=e=>{iT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitForm(I(t)),children:(e,t)=>{var n=TD();K(N(n),{get icon(){return ao},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}})},S=O(()=>!X.rateLimitIsReadOnly(I(t)));V(b,e=>{I(S)&&e(x)});var C=P(b,2);{let e=O(()=>X.rateLimitResettingKey===X.rateLimitKey(I(t))?`Resetting counters`:`Reset counters`),n=O(()=>X.rateLimitResettingKey===X.rateLimitKey(I(t)));iT(C,{get label(){return I(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>X.resetRateLimit(I(t)),get disabled(){return I(n)},children:(e,n)=>{var r=ED(),i=N(r);K(i,{get icon(){return uo},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>X.rateLimitResettingKey===X.rateLimitKey(I(t))?`Resetting`:`Reset`]),z(e,r)},$$slots:{default:!0}})}var w=P(C,2),ee=e=>{{let n=O(()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t))?`Deleting rate limit`:`Delete rate limit`),r=O(()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t)));iT(e,{get label(){return I(n)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>X.deleteRateLimit(I(t)),get disabled(){return I(r)},children:(e,n)=>{var r=ED(),i=N(r);K(i,{get icon(){return To},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>X.rateLimitDeletingKey===X.rateLimitKey(I(t))?`Deleting`:`Delete`]),z(e,r)},$$slots:{default:!0}})}},te=O(()=>!X.rateLimitIsReadOnly(I(t)));V(w,e=>{I(te)&&e(ee)}),T(y),T(h),T(i);var ne=P(i,2),re=M(ne),ie=e=>{var n=DD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u),T(l),T(o),T(n),F((e,t,n,r,i,l)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l)},[()=>X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests),()=>`In-flight requests: `+X.formatRateLimitNumber(I(t).in_flight)+` of `+X.formatRateLimitNumber(I(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).in_flight,I(t).max_requests)>=100}),()=>X.formatRateLimitNumber(I(t).in_flight)+` of `+X.formatRateLimitNumber(I(t).max_requests)+` in flight`]),z(e,n)},ae=O(()=>X.rateLimitIsConcurrent(I(t)));V(re,e=>{I(ae)&&e(ie)});var oe=P(re,2),se=e=>{var n=OD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=M(f,!0);T(f),T(l),T(o),T(n),F((e,t,n,r,i,l,u)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l),B(p,u)},[()=>X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)+`%`,()=>X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests),()=>`Requests used: `+X.formatRateLimitNumber(I(t).requests_used)+` of `+X.formatRateLimitNumber(I(t).max_requests),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).requests_used,I(t).max_requests)>=100}),()=>X.formatRateLimitNumber(I(t).requests_used)+` of `+X.formatRateLimitNumber(I(t).max_requests)+` requests`,()=>X.formatRateLimitNumber(I(t).requests_remaining)+` left`]),z(e,n)},ce=O(()=>!X.rateLimitIsConcurrent(I(t))&&I(t).max_requests);V(oe,e=>{I(ce)&&e(se)});var le=P(oe,2),ue=e=>{var n=kD(),r=M(n),i=P(M(r),2),a=M(i,!0);T(i),T(r);var o=P(r,2),s=M(o);let c;var l=P(s,2),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=M(f,!0);T(f),T(l),T(o),T(n),F((e,t,n,r,i,l,u)=>{B(a,e),W(o,`aria-valuenow`,t),W(o,`aria-label`,n),Hi(o,r),c=U(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),B(d,l),B(p,u)},[()=>X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)+`%`,()=>X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens),()=>`Tokens used: `+X.formatRateLimitNumber(I(t).tokens_used)+` of `+X.formatRateLimitNumber(I(t).max_tokens),()=>`--budget-progress: `+X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)+`%`,()=>({"budget-bar-fill-danger":X.rateLimitUsagePercent(I(t).tokens_used,I(t).max_tokens)>=100}),()=>X.formatRateLimitNumber(I(t).tokens_used)+` of `+X.formatRateLimitNumber(I(t).max_tokens)+` tokens`,()=>X.formatRateLimitNumber(I(t).tokens_remaining)+` left`]),z(e,n)},de=O(()=>!X.rateLimitIsConcurrent(I(t))&&I(t).max_tokens);V(le,e=>{I(de)&&e(ue)}),T(ne),T(r),T(n),F((e,t,n,r,i)=>{W(a,`title`,e),B(o,t),B(m,n),W(_,`title`,r),B(v,i)},[()=>X.rateLimitScopeLabel(I(t))+`: `+X.rateLimitSubject(I(t)),()=>X.rateLimitSubject(I(t)),()=>X.rateLimitPeriodLabel(I(t)),()=>X.rateLimitIsReadOnly(I(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(I(t))]),z(e,n)}),T(n),z(e,n),D()}var ND=R(`

        Rate Limits

        `),PD=R(``),FD=R(`
        Rate limit management is unavailable.
        `),ID=R(``),LD=R(`
        `),RD=R(`

        No rate limits configured yet.

        `),zD=R(`

        No rate limits match your filter.

        `),BD=R(`
        `);function VD(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`rate-limits`&&X.fetchRateLimitsPage()});let n=O(()=>X.filteredRateLimits());var r=BD(),i=M(r),a=M(i);US(M(a),{copyId:`rate-limits-help-copy`,label:`rate limits help`,text:`Rate limits cap requests, tokens, and in-flight concurrency for a user path subtree, a provider, or a model. Consumer (user path) breaches return 429 with Retry-After and x-ratelimit-* headers; saturated providers and models are skipped by load balancing and failover while capacity exists elsewhere. Counters are per gateway instance and reset on restart; token limits need usage tracking.`,title:e=>{z(e,ND())},$$slots:{title:!0}}),T(a);var o=P(a,2),s=M(o),c=e=>{var t=PD();K(M(t),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=X.rateLimitFormSubmitting),L(`click`,t,()=>X.openRateLimitForm()),z(e,t)},l=O(()=>X.rateLimitsEnabled()&&X.rateLimitsAvailable&&!q.authError);V(s,e=>{I(l)&&e(c)}),T(o),T(i);var u=P(i,2);jc(u,{});var d=P(u,2),f=e=>{z(e,FD())},p=O(()=>(!X.rateLimitsEnabled()||!X.rateLimitsAvailable)&&!q.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=ID(),n=M(t,!0);T(t),F(()=>B(n,X.rateLimitError)),z(e,t)};V(m,e=>{X.rateLimitError&&!q.authError&&e(h)});var g=P(m,2),_=e=>{nT(e,{label:`Loading rate limits...`})};V(g,e=>{X.rateLimitsLoading&&!q.authError&&e(_)});var v=P(g,2),y=e=>{var t=LD(),n=M(t);sw(M(n),{id:`rate-limit-filter`,placeholder:`Filter by subject, scope, or period...`,label:`Filter rate limits by subject, scope, or period`,get value(){return X.rateLimitFilter},set value(e){X.rateLimitFilter=e}}),T(n),T(t),z(e,t)};V(v,e=>{(X.rateLimits.length>0||X.rateLimitFilter)&&X.rateLimitsAvailable&&!q.authError&&!X.rateLimitFormOpen&&e(y)});var b=P(v,2);CD(b,{});var x=P(b,2),S=e=>{MD(e,{get rules(){return I(n)}})};V(x,e=>{I(n).length>0&&X.rateLimitsAvailable&&!q.authError&&e(S)});var C=P(x,2),w=e=>{z(e,RD())},ee=O(()=>X.rateLimits.length===0&&!X.rateLimitFilter&&!X.rateLimitsLoading&&!q.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{z(e,zD())},re=O(()=>X.rateLimits.length>0&&I(n).length===0&&X.rateLimitFilter&&!X.rateLimitsLoading&&!q.authError&&!X.rateLimitError&&X.rateLimitsAvailable&&X.rateLimitsEnabled());V(te,e=>{I(re)&&e(ne)}),T(r),z(e,r),D()}Hr([`click`]);function HD(e){return String(e||``).trim().toLowerCase()}function UD(e){if(!e)return``;let t=String(e.selector||``).trim();if(t)return t;if(!e.model||!e.model.id)return``;let n=String(e.model.id||``).trim(),r=String(e.provider_name||``).trim();if(r)return r+`/`+n;let i=String(e.provider_type||``).trim();return!i||n.includes(`/`)?n:i+`/`+n}function WD(e,t,n,r){let i=new Set,a=String(e||``).trim().toLowerCase(),o=String(t||``).trim().toLowerCase(),s=String(n||``).trim().toLowerCase(),c=String(r||``).trim().toLowerCase();if(c&&i.add(c),!a)return i;i.add(a),s&&i.add(s+`/`+a),o&&!a.includes(`/`)&&i.add(o+`/`+a);let l=a.split(`/`);return l.length===2&&l[1]&&i.add(l[1]),i}function GD(e){return WD(e&&e.model?e.model.id:``,e?e.provider_type:``,e?e.provider_name:``,e?e.selector:``)}function KD(e){let t=new Set,n=String(e.resolved_model||``).trim().toLowerCase(),r=String(e.target_model||``).trim().toLowerCase(),i=String(e.target_provider||``).trim().toLowerCase();if(n){t.add(n);let e=n.split(`/`);e.length===2&&e[1]&&t.add(e[1])}if(r){t.add(r);let e=r.split(`/`);e.length===2&&e[1]&&t.add(e[1])}return r&&i&&t.add(i+`/`+r),t}function qD(e){if(!e)return``;let t=String(e.provider||``).trim(),n=String(e.model||``).trim();return!t||!n||n===t||n.startsWith(t+`/`)?n:t+`/`+n}function JD(e){if(e===``||e==null)return null;let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function YD(e,t){let n={model:e},r=JD(t);return r!==null&&(n.weight=r),n}function XD(e){let t=Array.isArray(e)?e:[],n=[];for(let e of t){let t=String(e&&e.model||``).trim();t&&n.push(YD(t,e&&e.weight))}return n}function ZD(e){switch(String(e||``).toLowerCase()){case`cost`:return`lowest cost`;case`round_robin`:case``:return`round robin`;default:return e}}var QD={round_robin:`Round-robin (rotate across targets; honors weights)`,cost:`Lowest cost (cheapest target per request)`,adaptive:`Adaptive (target chosen by the registered routing extension)`};function $D(e,t){let n=Array.isArray(e)?[...e]:[],r=String(t||``).trim().toLowerCase();return r&&!n.includes(r)&&n.push(r),n.map(e=>({value:e,label:QD[e]||e}))}function eO(e){let t=Array.isArray(e.targets)?e.targets:[],n=t.length>0?t[0]:{},r=t.map(e=>{let t={provider:e.provider||``,model:e.model||``};return e.weight&&(t.weight=e.weight),t});return{name:e.source,target_provider:n.provider||``,target_model:n.model||``,targets:r,strategy:e.strategy||``,session_affinity:e.session_affinity!==!1,description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,valid:!!e.valid,resolved_model:e.resolved_model||``,provider_type:e.provider_type||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[]}}function tO(e){let t=Array.isArray(e)?e:[],n=[],r=[];for(let e of t)!e||typeof e!=`object`||(e.kind===`redirect`?n.push(eO(e)):e.kind===`policy`&&r.push({selector:e.source,provider_name:e.provider_name||``,model:e.model||``,user_paths:Array.isArray(e.user_paths)?e.user_paths:[],description:e.description||``,enabled:e.enabled!==!1,managed:!!e.managed,scope_kind:e.scope_kind||``}));return{aliases:n,policies:r}}function nO(e){if(!e)return`—`;let t=Array.isArray(e.targets)?e.targets:[];return t.length>1?t.length+` targets · `+ZD(e.strategy):e.resolved_model?e.resolved_model:e.target_provider?e.target_provider+`/`+e.target_model:e.target_model||`—`}function rO(e){return e?e.enabled===!1?`is-disabled`:e.valid?`is-valid`:`is-invalid`:`is-invalid`}function iO(e){return e?e.enabled===!1?`Disabled`:e.valid?`Active`:`Invalid`:`Invalid`}function aO(e){return Array.isArray(e)&&e.length>0&&e.indexOf(`/`)===-1}function oO(e,t){return!t||!e?``:e.effective_enabled===!1?`is-disabled`:aO(e.user_paths)?`is-restricted`:`is-enabled`}function sO(e){if(!e)return``;let t=[];e.effective_enabled===!1&&t.push(e.default_enabled===!1?`Disabled by default`:`Disabled`);let n=Array.isArray(e.user_paths)?e.user_paths:[];return n.length>0&&t.push(`Allowed for `+n.join(`, `)),t.join(` · `)}function cO({models:e,aliases:t,virtualModelsAvailable:n,activeCategory:r}){let i=Array.isArray(e)?e:[],a=Array.isArray(t)?t:[],o=new Map;if(n)for(let e of a){let t=HD(e&&e.name);!t||e.enabled===!1||!e.valid||o.set(t,e)}let s=new Map,c=i.map(e=>{let t=UD(e),n=null;for(let t of GD(e))s.has(t)||s.set(t,e),!n&&o.has(t)&&(n=o.get(t));let r=e&&e.access?e.access:null;return{key:`model:`+t,display_name:t,secondary_name:``,provider_name:e.provider_name||``,provider_type:e.provider_type||``,model:e.model,selector:e.selector||``,is_alias:!1,alias:null,access:r,masking_alias:n,has_virtual_model:!!(n||r&&r.override),alias_state_class:``,alias_state_text:``}});if(!n)return c;for(let e of a){let t=s.get(HD(e&&e.name));if(e&&e.enabled!==!1&&e.valid&&t)continue;let n=null;for(let t of KD(e))if(n=s.get(t)||null,n)break;!n&&r&&r!==`all`||c.push({key:`alias:`+e.name,display_name:e.name,secondary_name:nO(e),provider_name:n&&n.provider_name||``,provider_type:n?n.provider_type||e.provider_type||``:e.provider_type||``,model:n?n.model:{id:e.name,object:`model`},selector:``,is_alias:!0,alias:e,access:null,masking_alias:null,source_model_exists:!!t,has_virtual_model:!0,alias_state_class:rO(e),alias_state_text:iO(e)})}return c.sort((e,t)=>e.is_alias===t.is_alias?String(e.display_name||``).localeCompare(String(t.display_name||``)):e.is_alias?-1:1)}function lO(e,t){if(!t)return e;let n=String(t).toLowerCase();return e.filter(e=>[e.display_name,e.secondary_name,e.provider_name,e.provider_type,e.model&&e.model.owned_by,e.alias&&e.alias.description,e.alias&&e.alias_state_text,e.model&&e.model.metadata&&e.model.metadata.modes?e.model.metadata.modes.join(`,`):``,e.model&&e.model.metadata&&e.model.metadata.categories?e.model.metadata.categories.join(`,`):``].some(e=>String(e||``).toLowerCase().includes(n)))}function uO(e,t){return String(e||``).trim()||String(t||``).trim()||`Unassigned`}function dO(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return!r||r===n?``:r}function fO(e){let t=String(e||``).trim();return t?t+`/`:``}function pO(e){let t=Array.isArray(e)?e:[],n=t.filter(e=>e&&!e.is_alias).length,r=t.filter(e=>e&&e.is_alias).length,i=[];return n>0&&i.push(n+(n===1?` model`:` models`)),r>0&&i.push(r+(r===1?` alias`:` aliases`)),i.join(` · `)}function mO(e,t,n){let r=String(t||``).trim(),i=String(n||``).trim();for(let t of Array.isArray(e)?e:[]){let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim();if(!(r&&e!==r)&&!(!r&&i&&n!==i)&&t&&t.access)return t.access.default_enabled!==!1}return!0}function hO(e){for(let t of Array.isArray(e)?e:[])if(t&&t.access)return t.access.default_enabled!==!1;return!0}function gO(e,t){let n=String(t||``).trim();if(!n)return null;for(let t of Array.isArray(e)?e:[])if(String(t&&t.selector||``).trim()===n)return t;return null}function _O(e,t,n,r){let i=fO(t),a=r&&r.get(`/`)||null,o=i&&r&&r.get(i)||null,s=mO(e,t,n),c=o||a,l=c&&Array.isArray(c.user_paths)?Array.from(new Set(c.user_paths)).sort():[];return{selector:i,default_enabled:s,effective_enabled:c?c.enabled!==!1:s,user_paths:l,override:o}}function vO(e,t,n){if(!Array.isArray(e)||e.length===0)return[];let r=new Map;for(let e of Array.isArray(n)?n:[]){let t=String(e&&e.selector||``).trim();t&&r.set(t,e)}let i=[],a=new Map;for(let t of e){if(t&&t.is_alias){i.push(t);continue}let e=String(t&&t.provider_name||``).trim(),n=String(t&&t.provider_type||``).trim(),r=`provider-group:`+(e||n||`unassigned`);a.has(r)||a.set(r,{key:r,provider_name:e,provider_type:n,display_name:uO(e,n),type_label:dO(e,n),rows:[]});let o=a.get(r);!o.provider_name&&e&&(o.provider_name=e),!o.provider_type&&n&&(o.provider_type=n),o.display_name=uO(o.provider_name,o.provider_type),o.type_label=dO(o.provider_name,o.provider_type),o.rows.push(t)}let o=Array.from(a.values()).map(e=>{let n=_O(t,e.provider_name,e.provider_type,r);return{...e,access:n,access_summary:sO(n),item_count_label:pO(e.rows)}}).sort((e,t)=>String(e.display_name||``).localeCompare(String(t.display_name||``)));return i.length>0&&o.unshift({key:`virtual-model-group`,is_virtual_models:!0,provider_name:``,provider_type:``,display_name:`Virtual models`,type_label:``,rows:i,access:{selector:``},access_summary:``,item_count_label:pO(i)}),o}function yO(e,t){let n=gO(t,`/`),r=hO(e),i=n&&Array.isArray(n.user_paths)?n.user_paths:[];return{key:`scope-global`,is_alias:!1,display_name:`all providers and models`,access:{selector:`/`,default_enabled:r,effective_enabled:n?n.enabled!==!1:r,user_paths:i,override:n}}}function bO(e){return e?String(e.access&&e.access.selector||``).trim()||String(e.override_selector||``).trim()||UD(e):``}function xO(e){if(!e)return[];let t=[];return e.is_alias?t.push(`alias-row`,rO(e.alias)):e.has_virtual_model&&t.push(`alias-row`,`is-valid`),!e.is_alias&&e.masking_alias&&t.push(`masked-model-row`),!e.is_alias&&e.access&&e.access.effective_enabled===!1&&t.push(`model-access-disabled-row`),t}function SO(e){return!!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)}function CO(e){return!!(e&&!e.is_alias&&e.masking_alias&&e.masking_alias.name&&!e.masking_alias.managed)}function wO(e){return e&&e.is_alias&&e.alias&&e.alias.name?`alias-row-`+String(e.alias.name).replace(/[^a-zA-Z0-9_-]+/g,`-`):``}function TO(e){return e?e.is_alias?!!(e.alias&&e.alias.managed):!!(e.access&&e.access.override&&e.access.override.managed||e.masking_alias&&e.masking_alias.managed):!1}function EO(e){return!!(e&&e.override)}function DO(e){return e?`table-action-btn-active`:``}function OO(e,t){let n=`Edit `+String(e||`model access`);return t?n+` (virtual model exists)`:n}function kO(){return{source:``,target_model:``,target_weight:1,targets:[],strategy:`round_robin`,session_affinity:!0,user_paths:``,description:``,enabled:!0}}function AO(e){return String(e&&e.target_model||``).trim()!==``}function jO(e){return String(e&&e.target_model||``).trim()?!0:XD(e&&e.targets).length>0}function MO(e){return!!e&&Array.isArray(e.targets)&&e.targets.length>0}function NO(e){return MO(e)&&String(e&&e.strategy||``).toLowerCase()!==`cost`}function PO(e){let t=Array.isArray(e.targets)?e.targets:[];if(t.length>0){let n=t.shift();e.target_model=n.model||``,e.target_weight=n.weight||1;return}e.target_model=``,e.target_weight=1}function FO(e){let t=Array.isArray(e&&e.targets)?e.targets:[];return t.length>0?{primaryModel:qD(t[0]),primaryWeight:t[0].weight||1,extraTargets:t.slice(1).map(e=>({model:qD(e),weight:e.weight||1}))}:{primaryModel:e&&e.target_provider?e.target_provider+`/`+e.target_model:e&&e.target_model||``,primaryWeight:1,extraTargets:[]}}function IO(e){return String(e||``).split(/\r?\n|,/).map(e=>String(e||``).trim()).filter(Boolean)}function LO(e,t,n){let r=String(e&&e.source||``).trim(),i=String(e&&e.target_model||``).trim(),a=XD(e&&e.targets),o=jO(e),s=String(t||``).trim(),c=n===`edit`&&!!s&&r!==s,l={source:r,user_paths:IO(e&&e.user_paths),description:String(e&&e.description||``).trim(),enabled:!!(e&&e.enabled)};if(c&&(l.old_source=s),o){let t=[];if(i&&t.push(YD(i,e.target_weight)),t.push(...a),t.length>1){let n=e.strategy||`round_robin`;l.targets=n===`cost`?t.map(e=>({model:e.model})):t,l.strategy=n,e&&e.session_affinity===!1&&(l.session_affinity=!1)}else l.target_model=t[0].model}return{payload:l,source:r,isRedirect:o,isRename:c}}function RO(e){let t={source:e.name,description:String(e.description||``).trim(),user_paths:Array.isArray(e.user_paths)?e.user_paths:[],enabled:e.enabled===!1},n=Array.isArray(e.targets)?e.targets:[];return n.length>1?(t.strategy=e.strategy||`round_robin`,e.session_affinity===!1&&(t.session_affinity=!1),t.targets=t.strategy===`cost`?n.map(e=>({model:qD(e)})):n.map(e=>YD(qD(e),e.weight))):n.length===1?t.target_model=qD(n[0]):t.target_model=e.target_provider?e.target_provider+`/`+e.target_model:e.target_model,t}function zO(e,t,n){let r=n||{},i=r.effective_enabled===!1,a=t&&Array.isArray(t.user_paths)?t.user_paths:[],o=`PUT`,s;return i===!1?s={source:e,enabled:!1,user_paths:a}:t&&a.length===0&&r.default_enabled!==!1?(o=`DELETE`,s={source:e}):s={source:e,enabled:!0,user_paths:a},{method:o,payload:s,desired:i}}function BO(e,t,n){let r=Math.max(1,Number(t||75)),i=Math.min(n,e+r);return{limit:i,rendering:icO({models:kc.models,aliases:this.aliases,virtualModelsAvailable:this.virtualModelsAvailable,activeCategory:kc.activeCategory}));get displayModels(){return I(this.#T)}set displayModels(e){A(this.#T,e)}#E=O(()=>vO(this.displayModels,kc.models,this.modelOverrideViews));get displayModelGroups(){return I(this.#E)}set displayModelGroups(e){A(this.#E,e)}#D=O(()=>lO(this.displayModels,kc.filter));get filteredDisplayModels(){return I(this.#D)}set filteredDisplayModels(e){A(this.#D,e)}#O=O(()=>{let e=this.filteredDisplayModels,t=Math.max(0,Math.min(Number(this.modelRenderLimit||0),e.length));return!kc.filter&&t>=this.displayModels.length?this.displayModelGroups:vO(e.slice(0,t),kc.models,this.modelOverrideViews)});get filteredDisplayModelGroups(){return I(this.#O)}set filteredDisplayModelGroups(e){A(this.#O,e)}#k=O(()=>yO(kc.models,this.modelOverrideViews));get globalScopeRow(){return I(this.#k)}set globalScopeRow(e){A(this.#k,e)}modelsBusy(){return!!(kc.loading||this.modelsRendering)}modelLoadingText(){if(kc.loading)return this.displayModels.length>0?`Refreshing models...`:`Loading models...`;let e=this.filteredDisplayModels.length;return`Rendering models... `+Math.min(Number(this.modelRenderLimit||0),e)+` / `+e}restartModelRendering(e){let t=++this.#a,n=VO(this.modelRenderBatchSize,e);this.modelRenderLimit=n.limit,this.modelsRendering=n.rendering,n.rendering&&this.#A(t)}stopModelRendering(){this.#a++,this.modelsRendering=!1}#A(e){let t=()=>{if(e!==this.#a)return;let t=BO(this.modelRenderLimit,this.modelRenderBatchSize,this.filteredDisplayModels.length);this.modelRenderLimit=t.limit,this.modelsRendering=t.rendering,t.rendering&&this.#A(e)};typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>setTimeout(t,0)):setTimeout(t,0)}async fetchVirtualModels(){this.aliasLoading=!0,this.aliasError=``;try{let e=await fs(`/admin/virtual-models`,{label:`virtual models`});if(e.status===503){this.virtualModelsAvailable=!1,this.aliases=[],this.modelOverrideViews=[];return}if(e.stale)return;if(this.virtualModelsAvailable=!0,!e.ok){this.aliases=[],this.modelOverrideViews=[];return}let{aliases:t,policies:n}=tO(e.data);this.aliases=t,this.modelOverrideViews=n}catch(e){console.error(`Failed to fetch virtual models:`,e),this.aliases=[],this.modelOverrideViews=[],this.aliasError=`Unable to load virtual models.`}finally{this.aliasLoading=!1}}qualifiedModelName(e){return UD(e)}findModelOverrideView(e){return gO(this.modelOverrideViews,e)}hasGlobalModelOverride(){return!!this.findModelOverrideView(`/`)}findExistingAliasByName(e){let t=HD(e);if(!t)return null;for(let e of this.aliases)if(HD(e&&e.name)===t)return e;return null}findConcreteModelByName(e){let t=HD(e);if(!t)return null;for(let e of kc.models)if(GD(e).has(t))return e;return null}rowToggleEnabled(e){return e?e.is_alias?e.alias&&e.alias.enabled!==!1:!!(e.access&&e.access.effective_enabled!==!1):!1}rowToggleLabel(e){return this.rowTogglingKey&&this.rowTogglingKey===e.key?`Updating...`:this.rowToggleRestricted(e)?`Restricted`:this.rowToggleEnabled(e)?`Enabled`:`Disabled`}rowToggleRestricted(e){return!!e&&!e.is_alias&&oO(e.access,this.virtualModelsAvailable)===`is-restricted`}rowToggleAriaLabel(e){if(!e)return``;let t=this.rowToggleEnabled(e)?`Disable `:`Enable `,n;return n=e.is_alias?`alias `+String(e.alias&&e.alias.name||``):String(e.display_name||e.access&&e.access.selector||`model`),t+n.trim()}async toggleRowEnabled(e){if(this.virtualModelsAvailable&&!(!e||this.rowTogglingKey===e.key)){if(TO(e)){Js.success(`This virtual model is managed by configuration and is read-only.`);return}if(e.is_alias){await this.toggleAliasRow(e);return}await this.toggleModelRow(e)}}async toggleAliasRow(e){let t=e.alias;if(!t||!t.name)return;this.rowTogglingKey=e.key;let n=RO(t);try{let e=await ps(`/admin/virtual-models`,`PUT`,n,{label:`alias state`});if(e.status===503){this.virtualModelsAvailable=!1,Js.error(`Virtual models feature is unavailable.`);return}if(e.stale)return;if(!e.ok){Js.error(e.status===401?`Authentication required.`:cs(e,`Failed to update alias state.`));return}Js.success(n.enabled?`Alias enabled.`:`Alias disabled.`),this.fetchVirtualModels()}catch(e){console.error(`Failed to toggle alias state:`,e),Js.error(`Failed to update alias state.`)}finally{this.rowTogglingKey=``}}async toggleModelRow(e){let t=bO(e);if(!t)return;let{method:n,payload:r,desired:i}=zO(t,this.findModelOverrideView(t),e.access||{});this.rowTogglingKey=e.key;try{let e=await ps(`/admin/virtual-models`,n,r,{label:`model access`});if(e.status===503){this.virtualModelsAvailable=!1,Js.error(`Virtual models feature is unavailable.`);return}if(!(n===`DELETE`&&e.status===404)){if(e.stale)return;if(!e.ok){Js.error(e.status===401?`Authentication required.`:cs(e,`Failed to update model access.`));return}}Js.success(i?`Model enabled.`:`Model disabled.`),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to toggle model access:`,e),Js.error(`Failed to update model access.`)}finally{this.rowTogglingKey=``}}async removeAliasRow(e){if(!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)||this.rowDeletingKey)return;let t=String(e.alias.name||``).trim();t&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the virtual model alias "`+t+`"?`,method:`DELETE`,payload:{source:t},operation:`virtual model`,failureMessage:`Failed to remove virtual model.`,notice:`Virtual model removed.`,ignoreNotFound:!0})}async removeRedirectRow(e){let t=e&&e.masking_alias;if(!(e&&!e.is_alias&&t&&t.name&&!t.managed)||this.rowDeletingKey)return;let n=String(t.name||``).trim();n&&await this.mutateVirtualModelRow({rowKey:e.key,confirmMessage:`Remove the redirect for "`+n+`"? Other virtual model settings will be preserved.`,method:`PUT`,payload:{source:n,user_paths:Array.isArray(t.user_paths)?t.user_paths:[],description:String(t.description||``).trim(),enabled:t.enabled!==!1},operation:`virtual model redirect`,failureMessage:`Failed to remove redirect.`,notice:`Redirect removed. Other virtual model settings were preserved.`})}async mutateVirtualModelRow(e){if(!this.rowDeletingKey&&window.confirm(e.confirmMessage)){this.rowDeletingKey=e.rowKey;try{let t=await ps(`/admin/virtual-models`,e.method,e.payload,{label:e.operation});if(t.status===503){this.virtualModelsAvailable=!1,Js.error(`Virtual models feature is unavailable.`);return}if(!(e.ignoreNotFound&&t.status===404)){if(t.stale)return;if(!t.ok){Js.error(t.status===401?`Authentication required.`:cs(t,e.failureMessage));return}}this.virtualModelsAvailable=!0,Js.success(e.notice),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(t){console.error(e.failureMessage,t),Js.error(e.failureMessage)}finally{this.rowDeletingKey=``}}}addVmTarget(){Array.isArray(this.vmForm.targets)||(this.vmForm.targets=[]),this.vmForm.targets.push({model:``,weight:1})}removeVmTarget(e){Array.isArray(this.vmForm.targets)&&this.vmForm.targets.splice(e,1)}removePrimaryTarget(){PO(this.vmForm)}vmFormHasPrimaryTarget(){return AO(this.vmForm)}vmFormShowStrategy(){return MO(this.vmForm)}vmStrategyOptions(){return $D(_s.virtualModelStrategies(),this.vmForm.strategy)}vmFormShowWeights(){return NO(this.vmForm)}vmFormToggleRestricted(){return!!(this.vmForm&&this.vmForm.enabled)&&aO(IO(this.vmForm.user_paths))}vmFormToggleLabel(){return!this.vmForm||!this.vmForm.enabled?`Disabled`:this.vmFormToggleRestricted()?`Restricted`:`Enabled`}resetVirtualModelForm(){this.vmFormError=``,this.vmFormHelpOpen=!1,this.vmFormUserPathsHelpOpen=!1,this.vmSubmitting=!1,this.vmDeleting=!1,this.vmFormHasExisting=!1,this.vmFormDefaultEnabled=!0,this.vmFormEffectiveEnabled=!0,this.vmFormDisplayName=``,this.vmFormSourceLocked=!1,this.vmFormOriginalSource=``,this.vmFormManaged=!1,this.vmForm=kO()}closeVirtualModelForm(){this.vmFormOpen=!1,this.resetVirtualModelForm()}openVirtualModelCreate(e){this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`create`,this.vmFormSourceLocked=!1,this.vmFormDisplayName=`New virtual model`,e&&e.model&&e.model.id&&(this.vmForm.target_model=UD(e))}openVirtualModelEditAlias(e){if(!e)return;this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!1,this.vmFormHasExisting=!0,this.vmFormManaged=!!e.managed,this.vmFormOriginalSource=e.name||``,this.vmFormDisplayName=e.name||``,this.vmFormDefaultEnabled=hO(kc.models),this.vmFormEffectiveEnabled=e.enabled!==!1;let{primaryModel:t,primaryWeight:n,extraTargets:r}=FO(e);this.vmForm={source:e.name||``,target_model:t,target_weight:n,targets:r,strategy:e.strategy||`round_robin`,session_affinity:e.session_affinity!==!1,user_paths:(Array.isArray(e.user_paths)?e.user_paths:[]).join(` -`),description:e.description||``,enabled:e.enabled!==!1}}openVirtualModelEditModel(e){if(!e||e.is_alias)return;let t=e.access||{},n=t.override||null,r=n&&Array.isArray(n.user_paths)?n.user_paths:Array.isArray(t.user_paths)?t.user_paths:[],i=bO(e);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!n,this.vmFormOriginalSource=i;let a=n?n.enabled!==!1:t.effective_enabled!==!1;this.vmFormDefaultEnabled=t.default_enabled!==!1,this.vmFormEffectiveEnabled=a,this.vmFormManaged=!!(n&&n.managed),this.vmFormDisplayName=e.access_display_name||e.display_name||i||``,this.vmForm={source:i,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:r.join(` -`),description:n&&n.description?n.description:``,enabled:a}}openGlobalModelOverrideEdit(){let e=this.findModelOverrideView(`/`),t=e&&Array.isArray(e.user_paths)?e.user_paths:[],n=hO(kc.models);this.resetVirtualModelForm(),this.vmFormOpen=!0,this.vmFormMode=`edit`,this.vmFormSourceLocked=!0,this.vmFormHasExisting=!!e,this.vmFormOriginalSource=`/`,this.vmFormDefaultEnabled=n,this.vmFormEffectiveEnabled=e?e.enabled!==!1:n,this.vmFormManaged=!!(e&&e.managed),this.vmFormDisplayName=`All providers and models`,this.vmForm={source:`/`,target_model:``,target_weight:``,targets:[],strategy:`round_robin`,user_paths:t.join(` -`),description:e&&e.description?e.description:``,enabled:e?e.enabled!==!1:n}}openProviderOverrideEdit(e){!e||!e.access||!e.access.selector||this.openVirtualModelEditModel({display_name:e.display_name,access_display_name:`All models in `+e.display_name,provider_name:e.provider_name,provider_type:e.provider_type,access:e.access,override_selector:e.access.selector,is_alias:!1})}async submitVirtualModelForm(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be edited here.`;return}let{payload:e,source:t,isRedirect:n,isRename:r}=LO(this.vmForm,this.vmFormOriginalSource,this.vmFormMode);if(!t){this.vmFormError=`Source is required.`;return}if(this.vmFormError=``,this.vmFormMode!==`edit`){let e=this.findExistingAliasByName(t),r=e?null:this.findModelOverrideView(t);if(e||r){let n=e?`A virtual model named "`+e.name+`" already exists. Saving will update that virtual model. Continue?`:`An access policy for "`+t+`" already exists. Saving will update that virtual model. Continue?`;if(!window.confirm(n)){this.vmFormError=`Choose a different source or edit the existing virtual model.`;return}}else if(n){let e=this.findConcreteModelByName(t);if(e){let t=UD(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Creating this alias will mask that model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}else if(r){let e=(this.aliases||[]).find(e=>e&&e.name===t)||null,r=e?null:this.findModelOverrideView(t);if(e||r){this.vmFormError=`A virtual model for "`+t+`" already exists. Choose a different source.`;return}if(n){let e=this.findConcreteModelByName(t);if(e){let t=UD(e)||String(e.model&&e.model.id||``).trim();if(!window.confirm(`A model named "`+t+`" already exists. Renaming to that name will mask the model in the list. Continue?`)){this.vmFormError=`Choose a different source to avoid masking an existing model.`;return}}}}this.vmSubmitting=!0;try{let t=await ps(`/admin/virtual-models`,`PUT`,e,{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:cs(t,`Failed to save virtual model.`);return}let r=!n&&t.status===204;this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),Js.success(n?`Alias saved.`:r?`Model access reset to inherited/default.`:`Model access saved.`),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to save virtual model:`,e),this.vmFormError=`Failed to save virtual model.`}finally{this.vmSubmitting=!1}}async deleteVirtualModel(){if(this.vmFormManaged){this.vmFormError=`This virtual model is managed by configuration and cannot be removed here.`;return}let e=String(this.vmForm.source||this.vmFormOriginalSource||``).trim();if(!(!e||!this.vmFormHasExisting)&&window.confirm(`Remove the virtual model for "`+e+`"? This reverts to inherited/default behavior.`)){this.vmDeleting=!0,this.vmFormError=``;try{let t=await ps(`/admin/virtual-models`,`DELETE`,{source:e},{label:`virtual model`});if(t.status===503){this.virtualModelsAvailable=!1,this.vmFormError=`Virtual models feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.vmFormError=t.status===401?`Authentication required.`:cs(t,`Failed to remove virtual model.`);return}}this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),Js.success(`Virtual model removed.`),Promise.all([kc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to delete virtual model:`,e),this.vmFormError=`Failed to remove virtual model.`}finally{this.vmDeleting=!1}}}},UO=[{value:`input_per_mtok`,label:`Input $/MTok`,group:`Tokens`},{value:`output_per_mtok`,label:`Output $/MTok`,group:`Tokens`},{value:`cached_input_per_mtok`,label:`Cached input $/MTok`,group:`Tokens`},{value:`cache_write_per_mtok`,label:`Cache write $/MTok`,group:`Tokens`},{value:`reasoning_output_per_mtok`,label:`Reasoning output $/MTok`,group:`Tokens`},{value:`batch_input_per_mtok`,label:`Batch input $/MTok`,group:`Batch`},{value:`batch_output_per_mtok`,label:`Batch output $/MTok`,group:`Batch`},{value:`audio_input_per_mtok`,label:`Audio input $/MTok`,group:`Audio`},{value:`audio_output_per_mtok`,label:`Audio output $/MTok`,group:`Audio`},{value:`per_image`,label:`$/Image`,group:`Image`},{value:`input_per_image`,label:`Input $/Image`,group:`Image`},{value:`per_second_input`,label:`Input $/Second`,group:`Audio/Video`},{value:`per_second_output`,label:`Output $/Second`,group:`Video`},{value:`per_character_input`,label:`$/Character`,group:`Audio`},{value:`per_page`,label:`$/Page`,group:`Utility`},{value:`per_request`,label:`$/Request`,group:`Utility`}];function WO(e){let t=UO.find(t=>t.value===e);return t?t.label:String(e||``).replace(/_/g,` `)}function GO(e){return e&&typeof e==`object`?JSON.parse(JSON.stringify(e)):{}}function KO(e,t){let n=GO(e),r=t&&t.pricing?t.pricing:t;if(!r||typeof r!=`object`)return n;for(let e of UO)r[e.value]!==null&&r[e.value]!==void 0&&(n[e.value]=Number(r[e.value]));return Array.isArray(r.tiers)&&r.tiers.length>0&&(n.tiers=GO(r.tiers)),n}function qO(e){switch(String(e||``).trim()){case`config_yaml`:return`config.yaml`;case`model_registry`:return`Model registry`;default:return e?String(e):`Unknown`}}function JO(e){let t=e&&e.pricing?e.pricing:{},n=e&&e.pricing_sources&&typeof e.pricing_sources==`object`?e.pricing_sources:{},r={};for(let e of UO)t[e.value]!==null&&t[e.value]!==void 0&&(r[e.value]=qO(n[e.value]||`model_registry`));return r}function YO(e){let t=String(e&&e.selector||``).trim();return t?`Dashboard/API override (`+t+`)`:`Dashboard/API override`}function XO(e){let t=String(e||``).trim();return t?t+`/`:``}function ZO(e){return String(e&&e.model&&e.model.id||``).trim()}function QO(e){let t=String(e&&e.provider_name||``).trim(),n=ZO(e);return t&&n?t+`/`+n:n}function $O(e){return ZO(e)}function ek(e){let t=new Map;for(let n of Array.isArray(e)?e:[]){let e=String(n&&n.selector||``).trim();e&&t.set(e,n)}return t}function tk(e,t){let n=String(t||``).trim();return n&&ek(e).get(n)||null}function nk(e,t,n){let r=ek(e),i=QO(t),a=$O(t),o=XO(t&&t.provider_name),s=String(n||``).trim();for(let e of[i,a,o,`/`]){if(!e||e===s)continue;let t=r.get(e);if(t)return t}return null}function rk(e,t,n){let r=e&&e.model&&e.model.metadata?e.model.metadata:null,i=GO(r&&r.pricing),a=JO(r),o=nk(t,e,n),s=o&&o.pricing?o.pricing:null;if(s){let e=YO(o);for(let t of UO)s[t.value]!==null&&s[t.value]!==void 0&&(i[t.value]=Number(s[t.value]),a[t.value]=e);Array.isArray(s.tiers)&&s.tiers.length>0&&(i.tiers=GO(s.tiers),a.tiers=e)}return{pricing:i,sources:a}}function ik(e,t){let n=e&&e.pricing?e.pricing:{},r=[];for(let e of UO)n[e.value]!==null&&n[e.value]!==void 0&&r.push({id:t(),field:e.value,value:String(n[e.value])});return r}function ak(e,t){let n=new Set;for(let r of Array.isArray(e)?e:[]){if(t&&r.id===t)continue;let e=String(r.field||``).trim();e&&n.add(e)}return n}function ok(e,t){let n=ak(e,t&&t.id);return UO.filter(e=>e.value===(t&&t.field)||!n.has(e.value))}function sk(e,t){let n={},r=new Set;for(let t of Array.isArray(e)?e:[]){let e=String(t.field||``).trim();if(!e)return{error:`Choose a price type for every row.`};if(r.has(e))return{error:`Each price type can only be used once.`};r.add(e);let i=String(t.value||``).trim();if(i===``)return{error:`Enter a value for `+WO(e)+`.`};let a=Number(i);if(!Number.isFinite(a)||a<0)return{error:`Pricing values must be numbers greater than or equal to 0.`};n[e]=a}let i=Array.isArray(t)?t:[];return i.length>0&&(n.tiers=GO(i)),Object.keys(n).length===0?{error:`Add at least one pricing field before saving.`}:{pricing:n}}function ck(e,t,n){let r=e||{},i=t||{},a=n||{},o=KO(r,a);return UO.map(e=>{let t=a[e.value]!==null&&a[e.value]!==void 0,n=r[e.value]!==null&&r[e.value]!==void 0;return{field:e.value,label:e.label,value:o[e.value],source:t?`Form/API value`:n?i[e.value]||`Model registry`:`Unset`}}).filter(e=>e.source!==`Unset`||e.value!==void 0)}var lk=new class{#e=k(!0);get modelPricingOverridesAvailable(){return I(this.#e)}set modelPricingOverridesAvailable(e){A(this.#e,e,!0)}#t=k(j([]));get modelPricingOverrideViews(){return I(this.#t)}set modelPricingOverrideViews(e){A(this.#t,e,!0)}#n=k(``);get modelPricingOverrideError(){return I(this.#n)}set modelPricingOverrideError(e){A(this.#n,e,!0)}#r=k(!1);get modelPricingOverrideFormOpen(){return I(this.#r)}set modelPricingOverrideFormOpen(e){A(this.#r,e,!0)}#i=k(!1);get modelPricingOverrideSubmitting(){return I(this.#i)}set modelPricingOverrideSubmitting(e){A(this.#i,e,!0)}#a=k(!1);get modelPricingOverrideFormHasExistingOverride(){return I(this.#a)}set modelPricingOverrideFormHasExistingOverride(e){A(this.#a,e,!0)}#o=k(``);get modelPricingOverrideFormDisplayName(){return I(this.#o)}set modelPricingOverrideFormDisplayName(e){A(this.#o,e,!0)}#s=k(``);get modelPricingOverrideFormScope(){return I(this.#s)}set modelPricingOverrideFormScope(e){A(this.#s,e,!0)}#c=k(j([]));get modelPricingOverrideFormScopeOptions(){return I(this.#c)}set modelPricingOverrideFormScopeOptions(e){A(this.#c,e,!0)}#l=k(null);get modelPricingOverrideFormRow(){return I(this.#l)}set modelPricingOverrideFormRow(e){A(this.#l,e,!0)}#u=k(null);get modelPricingOverrideFormBasePricing(){return I(this.#u)}set modelPricingOverrideFormBasePricing(e){A(this.#u,e,!0)}#d=k(null);get modelPricingOverrideFormBasePricingSources(){return I(this.#d)}set modelPricingOverrideFormBasePricingSources(e){A(this.#d,e,!0)}#f=k(j([]));get modelPricingOverrideFormPreservedTiers(){return I(this.#f)}set modelPricingOverrideFormPreservedTiers(e){A(this.#f,e,!0)}#p=k(j([]));get modelPricingOverrideRows(){return I(this.#p)}set modelPricingOverrideRows(e){A(this.#p,e,!0)}#m=k(j({selector:``}));get modelPricingOverrideForm(){return I(this.#m)}set modelPricingOverrideForm(e){A(this.#m,e,!0)}_modelPricingOverrideRowID=0;pricingFieldOptions(){return UO}pricingFieldLabel(e){return WO(e)}async fetchModelPricingOverrides(){this.modelPricingOverrideError=``;try{let e=await fs(`/admin/model-pricing-overrides`,{label:`model pricing overrides`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideViews=[];return}if(e.stale)return;if(this.modelPricingOverridesAvailable=!0,!e.ok){this.modelPricingOverrideViews=[];return}this.modelPricingOverrideViews=Array.isArray(e.data)?e.data:[]}catch(e){console.error(`Failed to fetch model pricing overrides:`,e),this.modelPricingOverrideViews=[],this.modelPricingOverrideError=`Unable to load model pricing overrides.`}}findModelPricingOverrideView(e){return tk(this.modelPricingOverrideViews,e)}hasGlobalPricingOverride(){return!!this.findModelPricingOverrideView(`/`)}hasProviderPricingOverride(e){return!!this.findModelPricingOverrideView(XO(e&&e.provider_name))}hasModelPricingOverride(e){return!!this.findModelPricingOverrideView(QO(e))}modelPricingButtonClass(e){return e?`table-action-btn-active`:``}modelPricingButtonLabel(e,t){let n=`Edit `+String(e||`model pricing`);return t?n+` (override exists)`:n}modelRowPricing(e){return rk(e,this.modelPricingOverrideViews).pricing}openGlobalPricingOverrideEdit(){this.openModelPricingOverrideForm({displayName:`All providers and models`,selector:`/`,scope:`global`,scopeOptions:[{value:`global`,label:`All providers and models`,selector:`/`}],row:null})}openProviderPricingOverrideEdit(e){let t=XO(e&&e.provider_name);t&&this.openModelPricingOverrideForm({displayName:`All models in `+(e.display_name||e.provider_name||t),selector:t,scope:`provider`,scopeOptions:[{value:`provider`,label:`Provider`,selector:t}],row:null})}openModelPricingOverrideEdit(e){if(!e||e.is_alias)return;let t=QO(e),n=$O(e),r=[{value:`exact`,label:`This provider and model`,selector:t}];n&&n!==t&&r.push({value:`model`,label:`This model across providers`,selector:n}),this.openModelPricingOverrideForm({displayName:e.display_name||t,selector:t,scope:`exact`,scopeOptions:r,row:e})}openModelPricingOverrideForm(e){let t=e||{};this.modelPricingOverrideFormOpen=!0,this.modelPricingOverrideError=``,this.modelPricingOverrideFormDisplayName=t.displayName||t.selector||`Pricing`,this.modelPricingOverrideFormScope=t.scope||``,this.modelPricingOverrideFormScopeOptions=Array.isArray(t.scopeOptions)?t.scopeOptions:[],this.modelPricingOverrideFormRow=t.row||null,this.modelPricingOverrideForm={selector:t.selector||``},this.loadModelPricingOverrideFormSelector(t.selector||``)}loadModelPricingOverrideFormSelector(e){e=String(e||``).trim();let t=this.findModelPricingOverrideView(e);this.modelPricingOverrideFormHasExistingOverride=!!t,this.modelPricingOverrideRows=ik(t,()=>this.nextModelPricingOverrideRowID()),this.modelPricingOverrideFormPreservedTiers=t&&t.pricing&&Array.isArray(t.pricing.tiers)?GO(t.pricing.tiers):[],this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow();let n=this.modelPricingOverrideFormRow,r=n?rk(n,this.modelPricingOverrideViews,e):{pricing:{},sources:{}};this.modelPricingOverrideFormBasePricing=r.pricing,this.modelPricingOverrideFormBasePricingSources=r.sources}setModelPricingOverrideScope(e){this.modelPricingOverrideFormScope=e;let t=this.modelPricingOverrideFormScopeOptions.find(t=>t.value===e);t&&(this.modelPricingOverrideForm.selector=t.selector,this.loadModelPricingOverrideFormSelector(t.selector))}nextModelPricingOverrideRowID(){return this._modelPricingOverrideRowID=(this._modelPricingOverrideRowID||0)+1,`pricing-row-`+this._modelPricingOverrideRowID}availablePricingFieldOptions(e){return ok(this.modelPricingOverrideRows,e)}addModelPricingOverrideRow(){let e=ak(this.modelPricingOverrideRows),t=UO.find(t=>!e.has(t.value))||UO[0];t&&this.modelPricingOverrideRows.push({id:this.nextModelPricingOverrideRowID(),field:t.value,value:``})}removeModelPricingOverrideRow(e){this.modelPricingOverrideRows=this.modelPricingOverrideRows.filter(t=>t.id!==e.id),this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow()}modelPricingOverridePayload(){return sk(this.modelPricingOverrideRows,this.modelPricingOverrideFormPreservedTiers)}modelPricingOverrideDraftPricing(){let e=this.modelPricingOverridePayload();return e&&e.pricing?e.pricing:{}}modelPricingEffectivePreviewRows(){return ck(this.modelPricingOverrideFormBasePricing,this.modelPricingOverrideFormBasePricingSources,this.modelPricingOverrideDraftPricing())}closeModelPricingOverrideForm(){this.modelPricingOverrideFormOpen=!1,this.modelPricingOverrideSubmitting=!1,this.modelPricingOverrideError=``,this.modelPricingOverrideFormHasExistingOverride=!1,this.modelPricingOverrideFormDisplayName=``,this.modelPricingOverrideFormScope=``,this.modelPricingOverrideFormScopeOptions=[],this.modelPricingOverrideFormRow=null,this.modelPricingOverrideFormBasePricing=null,this.modelPricingOverrideFormBasePricingSources=null,this.modelPricingOverrideFormPreservedTiers=[],this.modelPricingOverrideRows=[],this.modelPricingOverrideForm={selector:``}}async submitModelPricingOverrideForm(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!e){this.modelPricingOverrideError=`Model pricing selector is required.`;return}let t=this.modelPricingOverridePayload();if(t.error){this.modelPricingOverrideError=t.error;return}let n={selector:e,...t};this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let e=await ps(`/admin/model-pricing-overrides`,`PUT`,n,{label:`model pricing override`});if(e.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(e.stale)return;if(!e.ok){this.modelPricingOverrideError=e.status===401?`Authentication required.`:cs(e,`Failed to save model pricing.`);return}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),Js.success(`Model pricing saved.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to save model pricing override:`,e),this.modelPricingOverrideError=`Failed to save model pricing.`}finally{this.modelPricingOverrideSubmitting=!1}}async deleteModelPricingOverride(){let e=String(this.modelPricingOverrideForm.selector||``).trim();if(!(!e||!this.modelPricingOverrideFormHasExistingOverride)&&window.confirm(`Remove the model pricing override for "`+e+`"?`)){this.modelPricingOverrideSubmitting=!0,this.modelPricingOverrideError=``;try{let t=await ps(`/admin/model-pricing-overrides`,`DELETE`,{selector:e},{label:`model pricing override`});if(t.status===503){this.modelPricingOverridesAvailable=!1,this.modelPricingOverrideError=`Model pricing overrides feature is unavailable.`;return}if(t.status!==404){if(t.stale)return;if(!t.ok){this.modelPricingOverrideError=t.status===401?`Authentication required.`:cs(t,`Failed to remove model pricing override.`);return}}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),Js.success(`Model pricing override removed.`),this.fetchModelPricingOverrides()}catch(e){console.error(`Failed to delete model pricing override:`,e),this.modelPricingOverrideError=`Failed to remove model pricing override.`}finally{this.modelPricingOverrideSubmitting=!1}}}},uk=R(``);function dk(e,t){E(t,!0);var n=uk();let r;var i=P(M(n),2),a=M(i,!0);T(i),T(n),F((e,i,o)=>{r=U(n,1,`alias-toggle`,null,r,e),n.disabled=HO.rowTogglingKey===t.row.key||!HO.virtualModelsAvailable,W(n,`aria-label`,i),B(a,o)},[()=>({enabled:HO.rowToggleEnabled(t.row),restricted:HO.rowToggleRestricted(t.row)}),()=>HO.rowToggleAriaLabel(t.row),()=>HO.rowToggleLabel(t.row)]),L(`click`,n,()=>HO.toggleRowEnabled(t.row)),z(e,n),D()}Hr([`click`]);var fk=R(`
        `);function pk(e,t){E(t,!0);var n=fk(),r=M(n),i=e=>{dk(e,{get row(){return HO.globalScopeRow}})};V(r,e=>{HO.virtualModelsAvailable&&e(i)});var a=P(r,2),o=e=>{{let t=O(()=>lk.modelPricingButtonLabel(`global model pricing`,lk.hasGlobalPricingOverride())),n=O(()=>lk.modelPricingButtonClass(lk.hasGlobalPricingOverride()));iT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>lk.openGlobalPricingOverrideEdit(),children:(e,t)=>{K(e,{get icon(){return Ua},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(a,e=>{lk.modelPricingOverridesAvailable&&e(o)});var s=P(a,2),c=e=>{{let t=O(()=>OO(`global model access`,HO.hasGlobalModelOverride())),n=O(()=>DO(HO.hasGlobalModelOverride()));iT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>HO.openGlobalModelOverrideEdit(),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{HO.virtualModelsAvailable&&e(c)}),T(n),z(e,n),D()}function mk(e){return String(e&&(e.primary_model||e.source)||``).trim()}function hk(e){return Array.isArray(e&&e.fallback_models)?e.fallback_models:Array.isArray(e&&e.targets)?e.targets:[]}function gk(e){return Array.isArray(e)?e.map(e=>({...e,source:mk(e),targets:hk(e)})):[]}function _k(e){let t=hk(e);return t.length===0?`-`:t.join(`, `)}function vk(e){return e&&e.enabled===!1?`Off`:e&&e.managed?`Config`:`On`}function yk(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>mk(e)===n)||null}function bk(e,t){if(!t||t.is_alias)return!1;let n=yk(e,UD(t));return!!(n&&n.enabled!==!1&&hk(n).length>0)}function xk(e,t){return bk(e,t)?`table-action-btn-failover-active`:``}function Sk(e,t){let n=`Edit failover for `+(t&&t.display_name?t.display_name:`model`);return bk(e,t)?n+` (active)`:n}function Ck(e){let t=[e&&e.target_model];return(Array.isArray(e&&e.targets)?e.targets:[]).forEach(e=>t.push(e&&e.model)),t.map(e=>String(e||``).trim()).filter(Boolean)}function wk(e){let t=Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(Boolean):[];return{target_model:t[0]||``,targets:t.slice(1).map(e=>({model:e}))}}function Tk(e){return{primary_model:String(e&&e.source||``).trim(),fallback_models:Ck(e),enabled:!(e&&e.enabled===!1)}}function Ek(e){return mk(e)}function Dk(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=Ek(e);n&&(t[n]=!0)}),t}function Ok(e,t){let n=Ek(t);return!!(n&&e&&e[n])}function kk(e,t){return(Array.isArray(e)?e:[]).filter(e=>Ok(t,e))}function Ak(e,t){let n=Array.isArray(e)?e:[];return n.length>0&&kk(n,t).length===n.length}function jk(e){return[mk(e),hk(e).join(` `)].join(` `).toLowerCase()}function Mk(e,t){let n=Array.isArray(e)?e:[],r=String(t||``).trim().toLowerCase();return r?n.filter(e=>jk(e).includes(r)):n}function Nk(e){return{primary_model:mk(e),fallback_models:hk(e).map(e=>String(e||``).trim()).filter(Boolean),enabled:!!(e&&e.enabled!==!1)}}function Pk(){return{source:``,target_model:``,targets:[],enabled:!0}}var Z=new class{#e=k(!0);get failoverAvailable(){return I(this.#e)}set failoverAvailable(e){A(this.#e,e,!0)}#t=k(j([]));get failoverRules(){return I(this.#t)}set failoverRules(e){A(this.#t,e,!0)}#n=k(!1);get failoverLoading(){return I(this.#n)}set failoverLoading(e){A(this.#n,e,!0)}#r=k(!1);get failoverSaving(){return I(this.#r)}set failoverSaving(e){A(this.#r,e,!0)}#i=k(!1);get failoverGenerating(){return I(this.#i)}set failoverGenerating(e){A(this.#i,e,!0)}#a=k(``);get failoverError(){return I(this.#a)}set failoverError(e){A(this.#a,e,!0)}#o=k(j([]));get failoverGeneratedRules(){return I(this.#o)}set failoverGeneratedRules(e){A(this.#o,e,!0)}#s=k(!1);get failoverDraftsOpen(){return I(this.#s)}set failoverDraftsOpen(e){A(this.#s,e,!0)}#c=k(j({}));get failoverDraftSelections(){return I(this.#c)}set failoverDraftSelections(e){A(this.#c,e,!0)}#l=k(``);get failoverDraftFilter(){return I(this.#l)}set failoverDraftFilter(e){A(this.#l,e,!0)}#u=k(!1);get failoverDraftSaving(){return I(this.#u)}set failoverDraftSaving(e){A(this.#u,e,!0)}#d=k(!1);get failoverFormOpen(){return I(this.#d)}set failoverFormOpen(e){A(this.#d,e,!0)}#f=k(`create`);get failoverFormMode(){return I(this.#f)}set failoverFormMode(e){A(this.#f,e,!0)}#p=k(!1);get failoverFormManaged(){return I(this.#p)}set failoverFormManaged(e){A(this.#p,e,!0)}#m=k(j(Pk()));get failoverForm(){return I(this.#m)}set failoverForm(e){A(this.#m,e,!0)}failoverEnabled(){return _s.booleanFlag(`FAILOVER_ENABLED`,!0)}async fetchFailoverRules(){if(!this.failoverEnabled()){this.failoverAvailable=!1,this.failoverRules=[],this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,this.failoverError=``,this.failoverLoading=!1;return}this.failoverLoading=!0,this.failoverError=``;try{let e=await fs(`/admin/failover`,{label:`failover mappings`});if(e.status===503){this.failoverAvailable=!1,this.failoverRules=[];return}if(e.stale)return;if(this.failoverAvailable=!0,!e.ok){this.failoverRules=[];return}this.failoverRules=gk(e.data)}catch(e){console.error(`Failed to fetch failover mappings:`,e),this.failoverRules=[],this.failoverError=`Unable to load failover mappings.`}finally{this.failoverLoading=!1}}resetFailoverForm(){this.failoverFormMode=`create`,this.failoverFormManaged=!1,this.failoverForm=Pk()}openFailoverCreate(){this.resetFailoverForm(),this.failoverFormOpen=!0,this.focusFailoverEditor()}openFailoverEdit(e){if(!e)return;this.resetFailoverForm(),this.failoverFormMode=`edit`,this.failoverFormOpen=!0,this.failoverFormManaged=!!e.managed;let t=this.failoverPrimaryModel(e),n=this.failoverTargets(e);this.failoverForm={source:t,target_model:n[0]||``,targets:n.slice(1).map(e=>({model:e})),enabled:e.enabled!==!1},this.focusFailoverEditor()}openFailoverForModel(e){if(!e||e.is_alias)return;let t=this.qualifiedModelName(e),n=this.failoverRules.find(e=>this.failoverPrimaryModel(e)===t);if(n){this.openFailoverEdit(n);return}this.resetFailoverForm(),this.failoverFormMode=`create`,this.failoverFormOpen=!0,this.failoverForm.source=t,this.focusFailoverEditor()}closeFailoverForm(){this.failoverFormOpen=!1}closeFailoverDraftsModal(){this.failoverDraftSaving||(this.failoverDraftsOpen=!1)}failoverFormTargets(){return Ck(this.failoverForm)}setFailoverFormTargets(e){let t=wk(e);this.failoverForm.target_model=t.target_model,this.failoverForm.targets=t.targets}addFailoverTarget(){Array.isArray(this.failoverForm.targets)||(this.failoverForm.targets=[]),this.failoverForm.targets.push({model:``}),this.focusFailoverEditor()}removeFailoverTarget(e){if(!Array.isArray(this.failoverForm.targets)){this.failoverForm.targets=[];return}this.failoverForm.targets.splice(e,1)}removePrimaryFailoverTarget(){let e=Array.isArray(this.failoverForm.targets)?this.failoverForm.targets:[];if(e.length>0){let t=e.shift();this.failoverForm.target_model=t&&t.model?t.model:``,this.failoverForm.targets=e;return}this.failoverForm.target_model=``}failoverRulePayload(){return Tk(this.failoverForm)}async submitFailoverForm(){if(this.failoverSaving||this.failoverGenerating||this.failoverFormManaged)return;let e=this.failoverRulePayload();if(!e.primary_model){this.failoverError=`Primary model is required.`;return}if(e.enabled&&e.fallback_models.length===0){this.failoverError=`Add at least one failover target.`;return}this.failoverSaving=!0,this.failoverError=``;try{let t=await ps(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to save failover mapping.`;return}Js.success(`Failover mapping saved.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to save failover mapping:`,e),this.failoverError=`Failed to save failover mapping.`}finally{this.failoverSaving=!1}}async deleteFailoverRule(e){let t=String(e&&this.failoverPrimaryModel(e)||this.failoverForm.source||``).trim();if(!(!t||this.failoverSaving||this.failoverGenerating)&&confirm(`Remove failover mapping for "`+t+`"?`)){this.failoverSaving=!0,this.failoverError=``;try{let e=await ps(`/admin/failover`,`DELETE`,{primary_model:t},{label:`failover mapping`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mapping.`;return}Js.success(`Failover mapping removed.`),this.closeFailoverForm(),this.fetchFailoverRules()}catch(e){console.error(`Failed to remove failover mapping:`,e),this.failoverError=`Failed to remove failover mapping.`}finally{this.failoverSaving=!1}}}async generateFailoverForForm(){if(this.failoverGenerating||this.failoverSaving||this.failoverFormManaged)return;let e=String(this.failoverForm.source||``).trim();if(!e){this.failoverError=`Primary model is required.`;return}this.failoverGenerating=!0,this.failoverError=``;try{let t=await ps(`/admin/failover/generate`,`POST`,{primary_model:e},{label:`failover generation`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to generate failover mapping.`;return}let n=gk(t.data),r=n.find(t=>this.failoverPrimaryModel(t)===e)||n[0]||null,i=this.failoverTargets(r);if(i.length===0){this.failoverError=`No failover suggestions were generated for this model.`;return}this.setFailoverFormTargets(i),Js.success(`Generated `+i.length+` fallback model`+(i.length===1?`.`:`s.`)),this.focusFailoverEditor()}catch(e){console.error(`Failed to generate failover mapping:`,e),this.failoverError=`Failed to generate failover mapping.`}finally{this.failoverGenerating=!1}}openFailoverResetDialog(){Ns.open({title:`Remove failover models`,titleId:`failoverResetDialogTitle`,inputId:`failover-reset-confirmation`,message:`Remove every dashboard-managed failover mapping. Configuration-managed mappings remain active.`,requiredText:`remove`,confirmLabel:`Remove Failover`,icon:To,dialogClass:`budget-reset-dialog`,onConfirm:async()=>{await this.resetFailoverRules(),this.failoverError&&(Ns.error=this.failoverError)}})}async resetFailoverRules(){if(!this.failoverSaving){this.failoverSaving=!0,this.failoverError=``;try{let e=await ps(`/admin/failover/reset`,`POST`,void 0,{label:`failover removal`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mappings.`;return}this.failoverRules=gk(e.data),this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,Js.success(`Dashboard-managed failover mappings removed.`),Ns.close()}catch(e){console.error(`Failed to remove failover mappings:`,e),this.failoverError=`Failed to remove failover mappings.`}finally{this.failoverSaving=!1}}}async generateFailoverRules(){if(!(this.failoverGenerating||this.failoverDraftSaving)){this.failoverGenerating=!0,this.failoverError=``,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!0;try{let e=await ps(`/admin/failover/generate`,`POST`,void 0,{label:`failover generation`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to generate failover mappings.`;return}this.failoverGeneratedRules=gk(e.data),this.selectAllFailoverDrafts(this.failoverGeneratedRules)}catch(e){console.error(`Failed to generate failover mappings:`,e),this.failoverError=`Failed to generate failover mappings.`}finally{this.failoverGenerating=!1}}}failoverDraftKey(e){return Ek(e)}selectAllFailoverDrafts(e){this.failoverDraftSelections=Dk(e)}failoverDraftSelected(e){return Ok(this.failoverDraftSelections,e)}setFailoverDraftSelected(e,t){let n=this.failoverDraftKey(e);n&&(this.failoverDraftSelections={...this.failoverDraftSelections,[n]:!!t})}selectedFailoverDrafts(){return kk(this.failoverGeneratedRules,this.failoverDraftSelections)}selectedFailoverDraftCount(){return this.selectedFailoverDrafts().length}failoverDraftCountLabel(){return this.selectedFailoverDraftCount()+` / `+this.failoverGeneratedRules.length+` selected`}allFailoverDraftsSelected(){return Ak(this.failoverGeneratedRules,this.failoverDraftSelections)}toggleAllFailoverDrafts(){if(!(this.failoverDraftSaving||this.failoverGenerating||this.failoverGeneratedRules.length===0)){if(this.allFailoverDraftsSelected()){this.failoverDraftSelections={};return}this.selectAllFailoverDrafts(this.failoverGeneratedRules)}}failoverDraftSearchText(e){return jk(e)}filteredFailoverDrafts(){return Mk(this.failoverGeneratedRules,this.failoverDraftFilter)}failoverDraftPayload(e){return Nk(e)}async saveSelectedFailoverDrafts(){if(this.failoverDraftSaving||this.failoverGenerating)return;let e=this.selectedFailoverDrafts();if(e.length===0){this.failoverError=`Select at least one failover draft.`;return}this.failoverDraftSaving=!0,this.failoverError=``;try{for(let t of e){let e=this.failoverDraftPayload(t);if(!e.primary_model||e.fallback_models.length===0){this.failoverError=`Generated failover draft is missing model data.`;return}let n=await ps(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(n.stale)return;if(!n.ok){this.failoverError=`Failed to save failover mapping.`;return}}Js.success(`Saved `+e.length+` failover mapping`+(e.length===1?`.`:`s.`)),this.failoverDraftsOpen=!1,this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.fetchFailoverRules()}catch(e){console.error(`Failed to save generated failover mappings:`,e),this.failoverError=`Failed to save failover mappings.`}finally{this.failoverDraftSaving=!1}}focusFailoverEditor(){setTimeout(()=>{let e=document.querySelector(`[data-failover-editor]`),t=e&&e.querySelector?e.querySelector(`[data-modal-autofocus], input:not([disabled]), textarea:not([disabled]), button:not([disabled])`):null;t&&typeof t.focus==`function`&&t.focus({preventScroll:!0})},0)}failoverTargetLabel(e){return _k(e)}failoverPrimaryModel(e){return mk(e)}failoverTargets(e){return hk(e)}findFailoverMapping(e){return yk(this.failoverRules,e)}hasActiveFailoverMapping(e){return bk(this.failoverRules,e)}failoverButtonClass(e){return xk(this.failoverRules,e)}failoverButtonLabel(e){return Sk(this.failoverRules,e)}normalizeFailoverRules(e){return gk(e)}failoverRuleStatus(e){return vk(e)}qualifiedModelName(e){return UD(e)}},Fk=R(``),Ik=R(``),Lk=R(`Config`),Rk=R(`
        Targets
        `),zk=R(``),Bk=R(`
        Redirects to
        `),Vk=R(` `),Hk=R(`
        `),Uk=R(`
        `),Wk=R(`
        `);function Gk(e,t){E(t,!0);let n=O(()=>lk.modelRowPricing(t.row));var r=Wk(),i=M(r),a=M(i),o=M(a),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=e=>{z(e,Fk())};V(l,e=>{t.row.is_alias&&e(u)});var d=P(l,2),f=e=>{z(e,Ik())};V(d,e=>{!t.row.is_alias&&t.row.masking_alias&&e(f)});var p=P(d,2),m=e=>{z(e,Lk())},h=O(()=>TO(t.row));V(p,e=>{I(h)&&e(m)}),T(o);var g=P(o,2),_=e=>{var n=Rk(),r=P(M(n)),i=M(r,!0);T(r),T(n),F(()=>B(i,t.row.secondary_name)),z(e,n)};V(g,e=>{t.row.is_alias&&e(_)});var v=P(g,2),y=e=>{var n=Bk(),r=P(M(n)),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=zk();F(e=>{W(n,`aria-label`,HO.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),W(n,`title`,HO.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),n.disabled=e},[()=>!!HO.rowDeletingKey]),L(`click`,n,()=>HO.removeRedirectRow(t.row)),z(e,n)},s=O(()=>HO.virtualModelsAvailable&&CO(t.row));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>nO(t.row.masking_alias)]),z(e,n)};V(v,e=>{!t.row.is_alias&&t.row.masking_alias&&e(y)}),T(a),T(i);var b=P(i);H(b,17,()=>t.columns,oi,(e,r)=>{var i=Vk(),a=M(i,!0);T(i),F(e=>{U(i,1,Fi(I(r).class),`svelte-1iynym`),B(a,e)},[()=>I(r).value(t.row,I(n))]),z(e,i)});var x=P(b),S=M(x),C=e=>{var n=Hk(),r=M(n);dk(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>HO.rowDeletingKey===t.row.key?`Removing alias `+t.row.alias.name:`Remove alias `+t.row.alias.name),r=O(()=>!!HO.rowDeletingKey);iT(e,{get label(){return I(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>HO.removeAliasRow(t.row),get disabled(){return I(r)},children:(e,t)=>{K(e,{get icon(){return To},class:`table-icon-svg`})},$$slots:{default:!0}})}},o=O(()=>HO.virtualModelsAvailable&&SO(t.row));V(i,e=>{I(o)&&e(a)});var s=P(i,2),c=e=>{{let n=O(()=>`Edit alias `+t.row.alias.name);iT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>HO.openVirtualModelEditAlias(t.row.alias),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{HO.virtualModelsAvailable&&e(c)}),T(n),z(e,n)},w=e=>{var n=Uk(),r=M(n);dk(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>lk.modelPricingButtonLabel(`model pricing for `+t.row.display_name,lk.hasModelPricingOverride(t.row))),r=O(()=>lk.modelPricingButtonClass(lk.hasModelPricingOverride(t.row)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>lk.openModelPricingOverrideEdit(t.row),children:(e,t)=>{K(e,{get icon(){return Ua},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(i,e=>{lk.modelPricingOverridesAvailable&&e(a)});var o=P(i,2),s=e=>{{let n=O(()=>Z.failoverButtonLabel(t.row)),r=O(()=>Z.failoverButtonClass(t.row));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>Z.openFailoverForModel(t.row),children:(e,t)=>{K(e,{get icon(){return xo},class:`table-icon-svg`})},$$slots:{default:!0}})}},c=O(()=>Z.failoverAvailable&&Z.failoverEnabled());V(o,e=>{I(c)&&e(s)});var l=P(o,2),u=e=>{{let n=O(()=>X.rateLimitGaugeTitle(t.row.display_name,X.rateLimitGaugeClassForModel(t.row))),r=O(()=>X.rateLimitGaugeClassForModel(t.row));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>X.openRateLimitInspectorForModel(t.row),children:(e,t)=>{K(e,{get icon(){return Ya},class:`table-icon-svg`})},$$slots:{default:!0}})}},d=O(()=>X.rateLimitsEnabled()&&X.rateLimitInspectorModelID(t.row));V(l,e=>{I(d)&&e(u)});var f=P(l,2),p=e=>{{let n=O(()=>`Edit redirect for `+t.row.display_name);iT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>HO.openVirtualModelEditAlias(t.row.masking_alias),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(f,e=>{HO.virtualModelsAvailable&&t.row.masking_alias&&t.row.masking_alias.name&&e(p)});var m=P(f,2),h=e=>{{let n=O(()=>OO(`model access for `+t.row.display_name,EO(t.row.access))),r=O(()=>DO(EO(t.row.access)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>HO.openVirtualModelEditModel(t.row),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(m,e=>{HO.virtualModelsAvailable&&!t.row.masking_alias&&e(h)}),T(n),z(e,n)};V(S,e=>{t.row.is_alias?e(C):e(w,-1)}),T(x),T(r),F((e,n)=>{W(r,`id`,e),U(r,1,n,`svelte-1iynym`),B(c,t.row.display_name)},[()=>wO(t.row)||void 0,()=>Fi(xO(t.row))]),z(e,r),D()}Hr([`click`]);var Kk={headerLines:[`Modes`],value:e=>(e.model?.metadata?.modes??[]).join(`, `)||`-`};function qk(e,t){return{headerLines:e,class:`col-price`,value:t}}var Jk=qk([`Input / Output ($/MTok)`],(e,t)=>ic(t?.input_per_mtok)+` / `+ic(t?.output_per_mtok)),Yk={all:[Kk,Jk],text_generation:[Kk,Jk,qk([`Cached $/MTok`],(e,t)=>ic(t?.cached_input_per_mtok))],embedding:[qk([`Input`,`$/MTok`],(e,t)=>ic(t?.input_per_mtok))],image:[qk([`$/Image`],(e,t)=>ac(t?.per_image))],audio:[qk([`$/Second`],(e,t)=>ac(t?.per_second_input)),qk([`$/Character`],(e,t)=>ac(t?.per_character_input))],video:[qk([`$/Second (In)`],(e,t)=>ac(t?.per_second_input)),qk([`$/Second (Out)`],(e,t)=>ac(t?.per_second_output))],utility:[qk([`$/Page`],(e,t)=>ac(t?.per_page)),qk([`$/Request`],(e,t)=>ac(t?.per_request))]};function Xk(e){return Yk[e]||Yk.all}function Zk(e){return Xk(e).length+2}var Qk=R(`
        `),$k=R(` `,1),eA=R(``),tA=R(` `),nA=R(` `),rA=R(`
        `),iA=R(`
        `),aA=R(`
        Model
        `);function oA(e,t){E(t,!0);let n=O(()=>kc.activeCategory||`all`),r=O(()=>Xk(I(n))),i=O(()=>Zk(I(n)));var a=aA(),o=M(a),s=M(o),c=M(s),l=P(M(c));H(l,17,()=>I(r),oi,(e,t)=>{var n=eA();H(n,21,()=>I(t).headerLines,oi,(e,t,n)=>{var r=$k(),i=N(r),a=e=>{z(e,Qk())};V(i,e=>{n>0&&e(a)});var o=P(i,1,!0);F(()=>B(o,I(t))),z(e,r)}),T(n),F(()=>U(n,1,Fi(I(t).class),`svelte-1911hy6`)),z(e,n)});var u=P(l);pk(M(u),{}),T(u),T(c),T(s),H(P(s),17,()=>HO.filteredDisplayModelGroups,e=>e.key,(e,t)=>{var n=iA(),a=M(n),o=M(a),s=M(o),c=M(s),l=M(c),u=M(l),d=M(u,!0);T(u);var f=P(u,2),p=e=>{var n=tA(),r=M(n,!0);T(n),F(()=>B(r,`(`+I(t).type_label+`)`)),z(e,n)};V(f,e=>{I(t).type_label&&e(p)});var m=P(f,2),h=e=>{var n=nA(),r=M(n,!0);T(n),F(()=>B(r,I(t).item_count_label)),z(e,n)};V(m,e=>{I(t).item_count_label&&e(h)}),T(l);var g=P(l,2),_=e=>{var n=rA(),r=M(n,!0);T(n),F(()=>B(r,I(t).access_summary)),z(e,n)};V(g,e=>{I(t).access_summary&&e(_)}),T(c);var v=P(c,2),y=M(v),b=e=>{dk(e,{get row(){return I(t)}})};V(y,e=>{I(t).access.selector&&e(b)});var x=P(y,2),S=e=>{{let n=O(()=>lk.modelPricingButtonLabel(`provider pricing for `+I(t).display_name,lk.hasProviderPricingOverride(I(t)))),r=O(()=>lk.modelPricingButtonClass(lk.hasProviderPricingOverride(I(t))));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>lk.openProviderPricingOverrideEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return Ua},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(x,e=>{lk.modelPricingOverridesAvailable&&I(t).provider_name&&e(S)});var C=P(x,2),w=e=>{{let n=O(()=>X.rateLimitGaugeTitle(`provider `+I(t).display_name,X.rateLimitGaugeClassForProvider(I(t)))),r=O(()=>X.rateLimitGaugeClassForProvider(I(t)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>X.openRateLimitInspectorForProvider(I(t)),children:(e,t)=>{K(e,{get icon(){return Ya},class:`table-icon-svg`})},$$slots:{default:!0}})}},ee=O(()=>X.rateLimitsEnabled()&&I(t).provider_name);V(C,e=>{I(ee)&&e(w)});var te=P(C,2),ne=e=>{{let n=O(()=>OO(`provider access for `+I(t).display_name,EO(I(t).access))),r=O(()=>DO(EO(I(t).access)));iT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>HO.openProviderOverrideEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(te,e=>{HO.virtualModelsAvailable&&I(t).access.selector&&e(ne)}),T(v),T(s),T(o),T(a),H(P(a),17,()=>I(t).rows,e=>e.key,(e,t)=>{Gk(e,{get row(){return I(t)},get columns(){return I(r)}})}),T(n),F(()=>{W(o,`colspan`,I(i)),B(d,I(t).display_name)}),z(e,n)}),T(o),T(a),z(e,a),D()}var sA=R(``);function cA(e,t){let n=G(t,`enabled`,3,!1),r=G(t,`label`,3,``),i=G(t,`disabled`,3,!1),a=G(t,`restricted`,3,!1);var o=sA();let s;var c=P(M(o),2),l=M(c,!0);T(c),T(o),F(()=>{s=U(o,1,`alias-toggle`,null,s,{enabled:n(),restricted:a()}),o.disabled=i(),W(o,`aria-label`,(n()?`Disable `:`Enable `)+r()),B(l,t.text??(n()?`Enabled`:`Disabled`))}),L(`click`,o,function(...e){t.onclick?.apply(this,e)}),z(e,o)}Hr([`click`]);var lA=R(``),uA=R(`
        `);function dA(e,t){E(t,!0);let n=G(t,`model`,15,``),r=G(t,`weight`,15),i=G(t,`id`,3,void 0),a=G(t,`placeholder`,3,`openai/gpt-4o`),o=G(t,`showRemove`,3,!0);var s=uA(),c=M(s);na(c);var l=P(c,2),u=e=>{var t=lA();na(t),F(()=>t.disabled=HO.vmFormManaged),da(t,r),z(e,t)},d=O(()=>HO.vmFormShowWeights());V(l,e=>{I(d)&&e(u)});var f=P(l,2),p=e=>{iT(e,{label:`Remove target`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,get onclick(){return t.onremove},get disabled(){return HO.vmFormManaged},children:(e,t)=>{K(e,{get icon(){return To},class:`table-icon-svg`})},$$slots:{default:!0}})};V(f,e=>{o()&&e(p)}),T(s),F(()=>{W(c,`id`,i()),W(c,`placeholder`,a()),c.disabled=HO.vmFormManaged}),da(c,n),z(e,s),D()}var fA=R(`

        `),pA=R(`adaptive lets the registered routing extension pick the target per - request.`,1),mA=R(`Add one target to make this a redirect/alias, or two or more to load - balance across them, then pick a strategy: round_robin rotates across targets - (weight biases the share) and cost always routes to the cheapest available - target. Leave Targets empty to make it only an access policy on the Source selector. The selector uses / for all providers and - models, for one provider, or for one model. user_paths is - matched against the effective request user_path: the managed API key user_path when present, otherwise the configured user path request header.`,1),hA=R(``),gA=R(`

        This virtual model is defined in configuration (config.yaml / VIRTUAL_MODELS) and is read-only here. Edit your configuration to change it.

        `),_A=R(``),vA=R(``),yA=R(``),bA=R(`
        `,1),xA=R(``),SA=R(`Use / to allow every user path. Use a team path to restrict to that - subtree, or an unused path to make the selector unavailable.`,1),CA=R(``),wA=R(` `),TA=R(`
        Targets
        `,1);function EA(e,t){E(t,!0);let n=HO;An(()=>{n.vmFormOpen&&_s.ensureLoaded()});{let t=e=>{US(e,{copyId:`virtual-model-help-copy`,label:`virtual model help`,get open(){return n.vmFormHelpOpen},set open(e){n.vmFormHelpOpen=e},title:e=>{var t=fA(),r=M(t,!0);T(t),F(()=>B(r,n.vmFormDisplayName||n.vmForm.source||`Virtual model`)),z(e,t)},help:e=>{Ue();var t=mA(),n=P(N(t),7),r=e=>{var t=pA();Ue(),z(e,t)},i=O(()=>_s.virtualModelStrategies().includes(`adaptive`));V(n,e=>{I(i)&&e(r)});var a=P(n,8);a.textContent=`{provider_name}/`;var o=P(a,2);o.textContent=`{provider_name}/{model}`,Ue(7),z(e,t)},$$slots:{title:!0,help:!0}})},r=e=>{var t=Qr(),r=N(t),i=e=>{var t=hA();F(()=>t.disabled=n.vmDeleting||n.vmSubmitting),L(`click`,t,()=>n.deleteVirtualModel()),z(e,t)};V(r,e=>{n.vmFormHasExisting&&!n.vmFormManaged&&e(i)}),z(e,t)},i=O(()=>n.vmDeleting||n.vmFormManaged),a=O(()=>n.vmFormMode===`edit`?`Save`:`Create`),o=O(()=>n.vmFormMode===`edit`?fo:so);cE(e,{get open(){return n.vmFormOpen},ariaLabel:`Virtual model editor`,get error(){return n.vmFormError},get submitting(){return n.vmSubmitting},get submitDisabled(){return I(i)},get submitLabel(){return I(a)},get submitIcon(){return I(o)},onclose:()=>n.closeVirtualModelForm(),onsubmit:()=>n.submitVirtualModelForm(),header:t,extraActions:r,children:(e,t)=>{var r=TA(),i=N(r),a=e=>{z(e,gA())};V(i,e=>{n.vmFormManaged&&e(a)});var o=P(i,2);uE(o,{id:`virtual-model-source`,label:`Source`,children:(e,t)=>{var r=_A();na(r),F(()=>r.disabled=n.vmFormSourceLocked||n.vmFormManaged),da(r,()=>n.vmForm.source,e=>n.vmForm.source=e),z(e,r)},$$slots:{default:!0}});var s=P(o,2);H(s,21,()=>kc.models,e=>UD(e),(e,t)=>{var n=vA(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>UD(I(t)),()=>UD(I(t))]),z(e,n)}),T(s);var c=P(s,2),l=P(M(c),2);{let e=O(()=>n.vmFormHasPrimaryTarget());dA(l,{id:`virtual-model-target`,get showRemove(){return I(e)},onremove:()=>n.removePrimaryTarget(),get model(){return n.vmForm.target_model},set model(e){n.vmForm.target_model=e},get weight(){return n.vmForm.target_weight},set weight(e){n.vmForm.target_weight=e}})}var u=P(l,2);H(u,17,()=>n.vmForm.targets,oi,(e,t,r)=>{dA(e,{placeholder:`groq/llama`,onremove:()=>n.removeVmTarget(r),get model(){return I(t).model},set model(e){I(t).model=e},get weight(){return I(t).weight},set weight(e){I(t).weight=e}})});var d=P(u,2),f=M(d);K(M(f),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(f),T(d),T(c);var p=P(c,2),m=e=>{var t=bA(),r=N(t);uE(r,{id:`virtual-model-strategy`,label:`Load-balancing strategy`,children:(e,t)=>{var r=yA();H(r,21,()=>n.vmStrategyOptions(),e=>e.value,(e,t)=>{var n=vA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(r),F(()=>r.disabled=n.vmFormManaged),Gi(r,()=>n.vmForm.strategy,e=>n.vmForm.strategy=e),z(e,r)},$$slots:{default:!0}});var i=P(r,2),a=M(i),o=M(a);na(o),Ue(2),T(a),T(i),F(()=>o.disabled=n.vmFormManaged),fa(o,()=>n.vmForm.session_affinity,e=>n.vmForm.session_affinity=e),z(e,t)},h=O(()=>n.vmFormShowStrategy());V(p,e=>{I(h)&&e(m)});var g=P(p,2),_=M(g);US(_,{copyId:`virtual-model-user-paths-help`,label:`user paths help`,get open(){return n.vmFormUserPathsHelpOpen},set open(e){n.vmFormUserPathsHelpOpen=e},title:e=>{z(e,xA())},help:e=>{Ue();var t=SA();Ue(2),z(e,t)},$$slots:{title:!0,help:!0}});var v=P(_,2);ft(v),W(v,`placeholder`,`/ -/team/alpha -/non-existing`),T(g);var y=P(g,2);uE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=CA();ft(r),F(()=>r.disabled=n.vmFormManaged),da(r,()=>n.vmForm.description,e=>n.vmForm.description=e),z(e,r)},$$slots:{default:!0}});var b=P(y,2),x=M(b),S=e=>{var t=wA(),r=M(t,!0);T(t),F(()=>B(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),z(e,t)};V(x,e=>{n.vmFormMode===`edit`&&e(S)});var C=P(x,2),w=M(C);{let e=O(()=>n.vmFormToggleRestricted()),t=O(()=>n.vmFormToggleLabel());cA(w,{get enabled(){return n.vmForm.enabled},get restricted(){return I(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return I(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}T(C),T(b),F(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),L(`click`,f,()=>n.addVmTarget()),da(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),z(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}D()}Hr([`click`]);var DA=R(`

        Pricing override

        `,1),OA=R(``),kA=R(``),AA=R(``),jA=R(``),MA=R(`
        `),NA=R(`
        Tiered pricing exists for this override and will be preserved. Tier editing can be added - without a database migration.
        `),PA=R(`
        No pricing fields set.
        `),FA=R(`
        `),IA=R(`

        Currency is USD. Saved fields override model registry and config.yaml pricing for this - selector; unset fields continue to inherit.

        Price Type USD Source
        `,1);function LA(e,t){E(t,!0);let n=lk;cE(e,{get open(){return n.modelPricingOverrideFormOpen},ariaLabel:`Model pricing editor`,dialogClass:`model-pricing-editor`,get error(){return n.modelPricingOverrideError},get submitting(){return n.modelPricingOverrideSubmitting},submitLabel:`Save Pricing`,onclose:()=>n.closeModelPricingOverrideForm(),onsubmit:()=>n.submitModelPricingOverrideForm(),header:e=>{var t=DA(),r=P(N(t),2),i=M(r,!0);T(r),F(()=>B(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),z(e,t)},extraActions:e=>{var t=Qr(),r=N(t),i=e=>{var t=OA();F(()=>t.disabled=n.modelPricingOverrideSubmitting),L(`click`,t,()=>n.deleteModelPricingOverride()),z(e,t)};V(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),z(e,t)},children:(e,t)=>{var r=IA(),i=N(r),a=M(i);uE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=kA();na(r),da(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),z(e,r)},$$slots:{default:!0}});var o=P(a,2),s=e=>{uE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=jA();H(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=AA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(r),L(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Gi(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),z(e,r)},$$slots:{default:!0}})};V(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),T(i);var c=P(i,4);H(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=MA(),a=M(i),o=M(a),s=P(o,2);H(s,21,()=>n.availablePricingFieldOptions(I(t)),e=>e.value,(e,t)=>{var n=AA(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).group+` - `+I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(s),T(a);var c=P(a,2),l=M(c),u=P(l,2);na(u),T(c);var d=P(c,2);{let e=O(()=>`Remove `+n.pricingFieldLabel(I(t).field));iT(d,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(I(t)),children:(e,t)=>{K(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})}T(i),F(()=>{W(o,`for`,`pricing-type-`+I(t).id),W(s,`id`,`pricing-type-`+I(t).id),W(l,`for`,`pricing-value-`+I(t).id),W(u,`id`,`pricing-value-`+I(t).id)}),Gi(s,()=>I(t).field,e=>I(t).field=e),da(u,()=>I(t).value,e=>I(t).value=e),z(e,i)}),T(c);var l=P(c,2),u=M(l);K(M(u),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(u),T(l);var d=P(l,2),f=e=>{z(e,NA())};V(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=P(d,2),m=P(M(p),2),h=e=>{z(e,PA())},g=O(()=>n.modelPricingEffectivePreviewRows().length===0);V(m,e=>{I(g)&&e(h)}),H(P(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=FA(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(n),F(e=>{B(i,I(t).label),B(o,e),B(c,I(t).source)},[()=>I(t).value===null||I(t).value===void 0?`-`:ac(Number(I(t).value))]),z(e,n)}),T(p),L(`click`,u,()=>n.addModelPricingOverrideRow()),z(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),D()}Hr([`click`,`change`]);var RA=R(`

        Failover mapping

        `,1),zA=R(``),BA=R(`

        This failover mapping is defined in configuration and is read-only here.

        `),VA=R(``),HA=R(`
        `),UA=R(`
        `,1),WA=R(`
        `);function GA(e,t){E(t,!0);{let t=e=>{var t=RA(),n=P(N(t),2),r=M(n,!0);T(n),F(()=>B(r,Z.failoverForm.source||`Failover`)),z(e,t)},n=e=>{var t=Qr(),n=N(t),r=e=>{var t=zA();F(()=>t.disabled=Z.failoverSaving||Z.failoverGenerating),L(`click`,t,()=>Z.deleteFailoverRule()),z(e,t)};V(n,e=>{Z.failoverFormMode===`edit`&&!Z.failoverFormManaged&&e(r)}),z(e,t)},r=O(()=>Z.failoverGenerating||Z.failoverFormManaged);cE(e,{get open(){return Z.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Z.failoverError},get submitting(){return Z.failoverSaving},get submitDisabled(){return I(r)},submitLabel:`Save`,onclose:()=>Z.closeFailoverForm(),onsubmit:()=>Z.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=WA(),r=M(n),i=e=>{z(e,BA())};V(r,e=>{Z.failoverFormManaged&&e(i)});var a=P(r,2);H(a,21,()=>kc.models,oi,(e,t)=>{var n=VA(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>UD(I(t)),()=>UD(I(t))]),z(e,n)}),T(a);var o=P(a,2);uE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=UA(),r=N(n),i=M(r),a=M(i);na(a);var o=P(a,2),s=e=>{iT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removePrimaryFailoverTarget(),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{K(e,{get icon(){return To},class:`table-icon-svg`})},$$slots:{default:!0}})};V(o,e=>{Z.failoverForm.target_model&&e(s)}),T(i),H(P(i,2),17,()=>Z.failoverForm.targets,oi,(e,t,n)=>{var r=HA(),i=M(r);na(i),iT(P(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Z.removeFailoverTarget(n),get disabled(){return Z.failoverFormManaged},children:(e,t)=>{K(e,{get icon(){return To},class:`table-icon-svg`})},$$slots:{default:!0}}),T(r),F(()=>i.disabled=Z.failoverFormManaged),da(i,()=>I(t).model,e=>I(t).model=e),z(e,r)}),T(r);var c=P(r,2),l=M(c);K(M(l),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(l);var u=P(l,2),d=M(u);K(d,{get icon(){return ko},class:`form-action-icon`});var f=P(d,2),p=M(f,!0);T(f),T(u),T(c),F(e=>{a.disabled=Z.failoverFormManaged,l.disabled=Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving,u.disabled=e,B(p,Z.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Z.failoverFormManaged||Z.failoverGenerating||Z.failoverSaving||!Z.failoverEnabled()]),da(a,()=>Z.failoverForm.target_model,e=>Z.failoverForm.target_model=e),L(`click`,l,()=>Z.addFailoverTarget()),L(`click`,u,()=>Z.generateFailoverForForm()),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=M(s);cA(M(c),{get enabled(){return Z.failoverForm.enabled},label:`failover mapping`,get disabled(){return Z.failoverFormManaged},onclick:()=>{Z.failoverFormManaged||(Z.failoverForm.enabled=!Z.failoverForm.enabled)}}),T(c),T(s),T(n),z(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}D()}Hr([`click`]);var KA=R(` `),qA=R(`
        `),JA=R(``),YA=R(`
        `),XA=R(`

        No failover suggestions were generated.

        `),ZA=R(`

        No failover drafts match the filter.

        `),QA=R(``),$A=R(``);function ej(e,t){E(t,!0),Os(e,{get open(){return Z.failoverDraftsOpen},variant:`editor`,onclose:()=>Z.closeFailoverDraftsModal(),children:(e,t)=>{var n=$A(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=KA(),n=M(t,!0);T(t),F(e=>B(n,e),[()=>Z.failoverDraftCountLabel()]),z(e,t)};V(a,e=>{Z.failoverGeneratedRules.length>0&&e(o)}),ws(P(a,2),{label:`Close failover drafts`,onclick:()=>Z.closeFailoverDraftsModal(),get disabled(){return Z.failoverDraftSaving}}),T(i),T(r);var s=P(r,2),c=e=>{nT(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};V(s,e=>{Z.failoverGenerating&&e(c)});var l=P(s,2),u=e=>{var t=qA(),n=M(t);sw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Z.failoverDraftFilter},set value(e){Z.failoverDraftFilter=e}});var r=P(n,2),i=M(r);K(i,{get icon(){return Ra},class:`form-action-icon`});var a=P(i,2),o=M(a,!0);T(a),T(r),T(t),F(e=>{r.disabled=Z.failoverDraftSaving,B(o,e)},[()=>Z.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),L(`click`,r,()=>Z.toggleAllFailoverDrafts()),z(e,t)};V(l,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&e(u)});var d=P(l,2),f=e=>{var t=YA();H(t,21,()=>Z.filteredFailoverDrafts(),e=>`failover-draft:`+Z.failoverPrimaryModel(e),(e,t)=>{var n=JA(),r=M(n);na(r);var i=P(r,2),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(i),T(n),F((e,t,n,i)=>{ia(r,e),r.disabled=Z.failoverDraftSaving,W(r,`aria-label`,t),B(o,n),B(c,i)},[()=>Z.failoverDraftSelected(I(t)),()=>`Select failover draft for `+Z.failoverPrimaryModel(I(t)),()=>Z.failoverPrimaryModel(I(t)),()=>Z.failoverTargetLabel(I(t))]),L(`change`,r,e=>Z.setFailoverDraftSelected(I(t),e.currentTarget.checked)),z(e,n)}),T(t),z(e,t)},p=O(()=>!Z.failoverGenerating&&Z.filteredFailoverDrafts().length>0);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{z(e,XA())};V(m,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length===0&&!Z.failoverError&&e(h)});var g=P(m,2),_=e=>{z(e,ZA())},v=O(()=>!Z.failoverGenerating&&Z.failoverGeneratedRules.length>0&&Z.filteredFailoverDrafts().length===0);V(g,e=>{I(v)&&e(_)});var y=P(g,2),b=e=>{var t=QA(),n=M(t,!0);T(t),F(()=>B(n,Z.failoverError)),z(e,t)};V(y,e=>{Z.failoverError&&e(b)});var x=P(y,2),S=M(x),C=P(S,2),w=M(C);K(w,{get icon(){return fo},class:`form-action-icon`});var ee=P(w,2),te=M(ee,!0);T(ee),T(C),T(x),T(n),F(e=>{S.disabled=Z.failoverDraftSaving,C.disabled=e,B(te,Z.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Z.failoverGenerating||Z.failoverDraftSaving||Z.selectedFailoverDraftCount()===0]),L(`click`,S,()=>Z.closeFailoverDraftsModal()),L(`click`,C,()=>Z.saveSelectedFailoverDrafts()),z(e,n)},$$slots:{default:!0}}),D()}Hr([`click`,`change`]);var tj=R(`
        Rate limit management is unavailable.
        `),nj=R(` Add`,1),rj=R(`

        `),ij=R(`

        No rules.

        `),aj=R(` Edit`,1),oj=R(`
        `),sj=R(`
        `),cj=R(`

        `),lj=R(``),uj=R(``);function dj(e,t){E(t,!0);function n(){q.dialogOpen||X.closeRateLimitInspector()}Os(e,{get open(){return X.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=uj(),r=M(n),i=M(r),a=P(M(i),2),o=M(a),s=M(o,!0);T(o),T(a),T(i),ws(P(i,2),{label:`Close rate limits inspector`,onclick:()=>X.closeRateLimitInspector()}),T(r);var c=P(r,2),l=e=>{nT(e,{label:`Loading rate limits...`})},u=e=>{z(e,tj())},d=e=>{var t=Qr();H(N(t),17,()=>X.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=cj(),r=M(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2);{let e=O(()=>`Add `+I(t).title.toLowerCase());iT(o,{get label(){return I(e)},class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(I(t).scope,I(t).subject),children:(e,t)=>{var n=nj();K(N(n),{get icon(){return so},class:`table-icon-svg`}),Ue(2),z(e,n)},$$slots:{default:!0}})}T(r);var s=P(r,2),c=e=>{var n=rj(),r=M(n,!0);T(n),F(()=>B(r,I(t).hint)),z(e,n)};V(s,e=>{I(t).hint&&e(c)});var l=P(s,2),u=e=>{z(e,ij())},d=e=>{var n=sj();H(n,21,()=>I(t).items,e=>X.rateLimitKey(e),(e,t)=>{var n=oj(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s),l=M(c);{let e=O(()=>X.rateLimitIsConcurrent(I(t))?ka:wo);K(l,{get icon(){return I(e)},class:`budget-period-icon`})}var u=P(l,2),d=M(u,!0);T(u),T(c),T(s);var f=P(s,2),p=M(f),m=M(p),h=M(m,!0);T(m);var g=P(m,2),_=M(g,!0);T(g),T(p);var v=P(p,2),y=M(v),b=e=>{iT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(null,null,I(t)),children:(e,t)=>{var n=aj();K(N(n),{get icon(){return ao},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}})},x=O(()=>!X.rateLimitIsReadOnly(I(t)));V(y,e=>{I(x)&&e(b)}),T(v),T(f),T(i),T(r),T(n),F((e,t,r,i,a,s,c,l)=>{U(n,1,`budget-row ${e??``}`),Hi(n,t),W(n,`title`,r),B(o,i),B(d,a),B(h,s),W(g,`title`,c),B(_,l)},[()=>X.rateLimitPressureClass(I(t)),()=>X.rateLimitPressureStyle(I(t)),()=>X.rateLimitPressurePercent(I(t))+`% of the most constrained cap used`,()=>X.rateLimitSubject(I(t)),()=>X.rateLimitPeriodLabel(I(t)),()=>X.rateLimitInspectorSummary(I(t)),()=>X.rateLimitIsReadOnly(I(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>X.rateLimitSourceLabel(I(t))]),z(e,n)}),T(n),z(e,n)};V(l,e=>{I(t).items.length===0?e(u):e(d,-1)}),T(n),F(()=>B(a,I(t).title)),z(e,n)}),z(e,t)};V(c,e=>{X.rateLimitsLoading?e(l):X.rateLimitsAvailable?e(d,-1):e(u,1)});var f=P(c,2),p=M(f),m=P(p,2),h=e=>{var t=lj();L(`click`,t,()=>{X.closeRateLimitInspector(),Uo.navigate(`rate-limits`)}),z(e,t)},g=O(()=>X.rateLimitsEnabled());V(m,e=>{I(g)&&e(h)}),T(f),T(n),F(()=>B(s,X.rateLimitInspector.title)),L(`click`,p,()=>X.closeRateLimitInspector()),z(e,n)},$$slots:{default:!0}}),D()}Hr([`click`]);var fj=R(`
        models
        `),pj=R(`
        Virtual models feature is unavailable.
        `),mj=R(`
        `),hj=R(``),gj=R(`
        `),_j=R(``),vj=R(`
        `),yj=R(`

        No models registered.

        `),bj=R(`

        No models in this category.

        `),xj=R(`

        No models match your filter.

        `),Sj=R(`
        `);function Cj(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`models`&&(HO.fetchVirtualModels(),lk.fetchModelPricingOverrides(),Z.fetchFailoverRules(),X.fetchRateLimitsPage())}),An(()=>{let e=HO.filteredDisplayModels.length;return Er(()=>HO.restartModelRendering(e)),()=>HO.stopModelRendering()});let n=O(()=>q.needsAuth);var r=Sj(),i=M(r),a=P(M(i),2),o=e=>{var t=fj(),n=M(t),r=M(n,!0);T(n),Ue(),T(t),F(()=>B(r,kc.filter?HO.filteredDisplayModels.length+` / `+HO.displayModels.length:HO.displayModels.length)),z(e,t)};V(a,e=>{HO.displayModels.length>0&&e(o)}),T(i);var s=P(i,2);jc(s,{});var c=P(s,2),l=e=>{z(e,pj())};V(c,e=>{!HO.virtualModelsAvailable&&!I(n)&&e(l)});var u=P(c,2),d=e=>{var t=mj(),n=M(t,!0);T(t),F(()=>B(n,HO.aliasError)),z(e,t)};V(u,e=>{HO.aliasError&&!I(n)&&e(d)});var f=P(u,2),p=e=>{var t=mj(),n=M(t,!0);T(t),F(()=>B(n,lk.modelPricingOverrideError)),z(e,t)};V(f,e=>{lk.modelPricingOverrideError&&!I(n)&&!lk.modelPricingOverrideFormOpen&&e(p)});var m=P(f,2),h=e=>{var t=gj();H(t,21,()=>kc.categories,e=>e.category,(e,t)=>{var n=hj();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(n),F(()=>{r=U(n,1,`category-tab svelte-scpjps`,null,r,{active:kc.activeCategory===I(t).category}),B(a,I(t).display_name),B(s,I(t).count)}),L(`click`,n,()=>kc.selectCategory(I(t).category)),z(e,n)}),T(t),z(e,t)};V(m,e=>{kc.categories.length>0&&e(h)});var g=P(m,2),_=e=>{var t=vj(),n=M(t);sw(M(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return kc.filter},set value(e){kc.filter=e}}),T(n);var r=P(n,2),i=M(r),a=e=>{var t=_j();K(M(t),{get icon(){return so},class:`alias-create-icon`}),Ue(2),T(t),L(`click`,t,()=>HO.openVirtualModelCreate()),z(e,t)};V(i,e=>{HO.virtualModelsAvailable&&e(a)}),T(r),T(t),z(e,t)};V(g,e=>{(HO.displayModels.length>0||kc.filter||HO.virtualModelsAvailable)&&e(_)});var v=P(g,2),y=e=>{{let t=O(()=>HO.modelLoadingText());nT(e,{get label(){return I(t)},class:`models-loading-state`})}},b=O(()=>HO.modelsBusy()&&!I(n));V(v,e=>{I(b)&&e(y)});var x=P(v,2);EA(x,{});var S=P(x,2);LA(S,{});var C=P(S,2),w=e=>{oA(e,{})};V(C,e=>{(HO.displayModels.length>0||kc.filter)&&e(w)});var ee=P(C,2),te=e=>{z(e,yj())};V(ee,e=>{HO.displayModels.length===0&&!kc.loading&&!I(n)&&!kc.filter&&(kc.activeCategory===`all`||!kc.activeCategory)&&e(te)});var ne=P(ee,2),re=e=>{z(e,bj())};V(ne,e=>{HO.displayModels.length===0&&!kc.loading&&!I(n)&&!kc.filter&&kc.activeCategory&&kc.activeCategory!==`all`&&e(re)});var ie=P(ne,2),ae=e=>{z(e,xj())};V(ie,e=>{HO.displayModels.length>0&&HO.filteredDisplayModels.length===0&&kc.filter&&e(ae)});var oe=P(ie,2);dj(oe,{});var se=P(oe,2);CD(se,{});var ce=P(se,2);GA(ce,{}),ej(P(ce,2),{}),T(r),z(e,r),D()}Hr([`click`]);var wj=`draft-workflow-preview`;function Tj(){return{scope_provider:``,scope_model:``,scope_user_path:``,name:``,description:``,features:{cache:!0,audit:!0,usage:!0,budget:!0,guardrails:!1,failover:!0},guardrails:[]}}function Ej(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function Dj(e){return{ref:``,step:Number.isFinite(e)?e:10}}function Oj(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function kj(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return n;let r=t.charAt(0).toUpperCase()+t.slice(1);for(let n of[t,r])if(Object.prototype.hasOwnProperty.call(e,n)&&e[n]!==null&&e[n]!==void 0)return e[n];return n}function Aj(e,t){return!e||typeof e!=`object`||Array.isArray(e)?!1:[t,t.charAt(0).toUpperCase()+t.slice(1)].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==null&&e[t]!==void 0)}function jj(e){return{cache:!!kj(e,`cache`,!1),audit:!!kj(e,`audit`,!1),usage:!!kj(e,`usage`,!1),budget:kj(e,`budget`,!0)!==!1,guardrails:!!kj(e,`guardrails`,!1),failover:kj(e,`failover`,!0)!==!1}}function Mj(e,t){let n=jj(e),r=t||{},i=n.usage&&!!r.usage;return{cache:n.cache&&!!r.cache,audit:n.audit&&!!r.audit,usage:i,budget:i&&n.budget&&!!r.budget,guardrails:n.guardrails&&!!r.guardrails,failover:n.failover&&!!r.failover}}function Nj(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...Mj((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:jj(n).failover}}function Pj(e,t){return Nj(e,t).failover?`On`:`Off`}function Fj(e){return(Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:Array.isArray(e&&e.guardrails)?e.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Oj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function Ij(e,t){return Nj(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function Lj(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function Rj(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function zj(e,t){let n=new Set,r=String(t&&t.scope_provider||``).trim();return r&&n.add(r),(Array.isArray(e)?e:[]).forEach(e=>{let t=Rj(e);t&&n.add(t)}),[...n].sort()}function Bj(e,t,n){let r=String(t||``).trim(),i=new Set,a=String(n&&n.scope_provider||``).trim(),o=String(n&&n.scope_model||``).trim();return r&&r===a&&o&&i.add(o),(Array.isArray(e)?e:[]).forEach(e=>{if(r&&Rj(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function Vj(e){let t=String(e&&e.scope_type||``).trim();return t===`provider_model`?`Provider Name + Model`:t===`provider_model_path`?`Provider Name + Model + Path`:t===`provider_path`?`Provider Name + Path`:t===`path`?`Path`:t===`provider`?`Provider Name`:`Global`}function Hj(e){return String(e&&e.scope_display||`global`).trim()||`global`}function Uj(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=Hj(e);return n===`global`?`All models`:n}function Wj(e){let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`);for(let e of n){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function Gj(e){if(Wj(e))return``;let t=String(e||``).trim();if(!t)return``;let n=(t.startsWith(`/`)?t:`/`+t).split(`/`),r=[];for(let e of n){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function Kj(e){let t=e||Tj(),n=String(t.scope_provider||``).trim(),r=Gj(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function qj(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=Gj(e&&e.scope_user_path);return!t&&!r?`global`:!t&&r?`path`:!n&&!r?`provider`:!n&&r?`provider_path`:r?`provider_model_path`:`provider_model`}function Jj(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=Gj(e&&e.scope_user_path),i=qj({scope_provider:t,scope_model:n,scope_user_path:r});return i===`global`?`global`:i===`path`?r:i===`provider`?t:i===`provider_path`?t+` @ `+r:i===`provider_model_path`?t+`/`+n+` @ `+r:t+`/`+n}function Yj(e,t){let n=t||Ej(),r=Lj(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=Gj(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===Gj(n.scope_user_path)}function Xj(e,t,n){let r=Kj(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>Yj(e,r))||null}function Zj(e){return String(e&&e.scope_type||``).trim()!==`global`}function Qj(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function $j(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.description,e.scope_display,e.scope_type,Lj(e&&e.scope),e.scope&&e.scope.scope_model,e.scope&&e.scope.scope_user_path,e.workflow_hash,...Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>e.ref):[]].some(e=>String(e||``).toLowerCase().includes(r)))}function eM(e,t){let n=e||Tj(),r=Kj(n),i=jj(n.features||{}),a=Mj(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?Fj(n):[];return{id:wj,scope_type:qj(r),scope_display:Jj(r),scope:{scope_provider_name:r.scope_provider,scope_model:r.scope_model,...r.scope_user_path?{scope_user_path:r.scope_user_path}:{}},name:String(n.name||``).trim(),description:String(n.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!a.cache,audit:!!a.audit,usage:!!a.usage,budget:!!a.budget,guardrails:o,failover:!!a.failover},guardrails:s}}}function tM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||Tj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=Gj(a.scope_user_path),l=jj(a.features||{}),u=Mj(l,t),d=Xj(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=Aj(f,`failover`),m=p?kj(f,`failover`,!0)!==!1:null,h=i||Ej(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&Gj(h.scope_user_path)===Gj(c),_=!!(t&&t.failover),v=_||!!r&&g&&Object.prototype.hasOwnProperty.call(l,`failover`)||!r&&!!d&&p,y=u.guardrails?(Array.isArray(a.guardrails)?a.guardrails:[]).map(e=>({ref:String(e&&e.ref||``).trim(),step:Oj(e&&e.step)})):[],b={scope_provider_name:o,scope_model:s,...c?{scope_user_path:c}:{},name:String(a.name||``).trim(),description:String(a.description||``).trim(),workflow_payload:{schema_version:1,features:{cache:!!u.cache,audit:!!u.audit,usage:!!u.usage,budget:!!u.budget,guardrails:!!u.guardrails},guardrails:y}};return v&&(b.workflow_payload.features.failover=!_&&!r&&d&&p?m:!!l.failover),b}function nM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||Ej(),i=String(r.scope_provider||``).trim(),a=String(r.scope_model||``).trim(),o=String(e&&(e.scope_provider_name||e.scope_provider)||``).trim(),s=String(e&&e.scope_model||``).trim();if(o&&!zj(t,r).includes(o)&&o!==i)return`Choose a registered provider name.`;if(s&&!o)return`Model selection requires a provider name.`;if(s){let e=Bj(t,o,r),n=o===i&&s===a;if(!e.includes(s)&&!n)return`Choose a registered model for the selected provider name.`}let c=Wj(e.scope_user_path);if(c)return c;let l=e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:{},u=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[];if(!l.guardrails)return``;let d=new Set;for(let e of u){if(!e.ref)return`Each guardrail step needs a guardrail ref.`;if(!Number.isInteger(e.step)||e.step<0)return`Each guardrail step must use a non-negative integer step number.`;if(d.has(e.ref))return`Each guardrail ref may appear only once in a workflow.`;d.add(e.ref)}return``}var rM=new class{#e=k(j([]));get workflows(){return I(this.#e)}set workflows(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get submitting(){return I(this.#o)}set submitting(e){A(this.#o,e,!0)}#s=k(``);get deactivatingID(){return I(this.#s)}set deactivatingID(e){A(this.#s,e,!0)}#c=k(``);get formError(){return I(this.#c)}set formError(e){A(this.#c,e,!0)}#l=k(!1);get formHydrated(){return I(this.#l)}set formHydrated(e){A(this.#l,e,!0)}#u=k(j(Ej()));get hydratedScope(){return I(this.#u)}set hydratedScope(e){A(this.#u,e,!0)}#d=k(j([]));get guardrailRefs(){return I(this.#d)}set guardrailRefs(e){A(this.#d,e,!0)}#f=k(j(Tj()));get form(){return I(this.#f)}set form(e){A(this.#f,e,!0)}#p=null;failoverVisible(){return _s.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:_s.cacheVisible(),audit:_s.auditVisible(),usage:_s.usageVisible(),budget:_s.budgetsVisible(),guardrails:_s.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return $j(this.workflows,this.filter)}providerOptions(){return zj(kc.models,this.hydratedScope)}modelOptions(e){return Bj(kc.models,e,this.hydratedScope)}activeScopeMatch(){return Xj(this.workflows,this.form,this.formHydrated)}submitMode(){return this.activeScopeMatch()?`save`:`create`}submitLabel(){return this.submitMode()===`save`?`Save`:`Create`}submittingLabel(){return this.submitMode()===`save`?`Saving...`:`Creating...`}preview(){return eM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=Ej(),this.form=Tj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:Lj(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``).trim(),scope_user_path:String(e.scope&&e.scope.scope_user_path||``).trim()};let t=e.workflow_payload&&e.workflow_payload.features?jj(e.workflow_payload.features):Nj(e,this.featureCaps()),n=Array.isArray(e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails.map(e=>({ref:String(e&&e.ref||``).trim(),step:Oj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):Fj(e);this.form={scope_provider:Lj(e.scope),scope_model:String(e.scope&&e.scope.scope_model||``),scope_user_path:String(e.scope&&e.scope.scope_user_path||``),name:String(e.name||``),description:String(e.description||``),features:{cache:!!t.cache,audit:!!t.audit,usage:!!t.usage,budget:!!t.budget,guardrails:!!t.guardrails,failover:!!t.failover},guardrails:n.map(e=>({ref:String(e&&e.ref||``),step:Number.isFinite(e&&e.step)?e.step:10}))}}closeForm(){this.formOpen=!1,this.submitting=!1,this.formError=``,this.formHydrated=!1,this.hydratedScope=Ej(),this.form=Tj()}setProvider(e){if(this.form.scope_provider=String(e||``).trim(),!this.form.scope_provider){this.form.scope_model=``;return}this.modelOptions(this.form.scope_provider).includes(String(this.form.scope_model||``).trim())||(this.form.scope_model=``)}addGuardrailStep(){let e=(Array.isArray(this.form.guardrails)?this.form.guardrails:[]).reduce((e,t)=>{let n=Number(t&&t.step);return Number.isFinite(n)?Math.max(e,n):e},0)+10;this.form.guardrails.push(Dj(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return tM({form:this.form,caps:this.featureCaps(),workflows:this.workflows,formHydrated:this.formHydrated,hydratedScope:this.hydratedScope})}async fetchWorkflows(){this.#p&&this.#p.abort();let e=new AbortController;this.#p=e,this.loading=!0,this.error=``;let t=setTimeout(()=>e.abort(),1e4),n=await aT(`/admin/workflows`,{label:`workflows`,options:{signal:e.signal}});if(clearTimeout(t),this.#p===e&&(this.#p=null,this.loading=!1,n.status!==`stale`)){if(n.status===`unavailable`){this.available=!1,this.workflows=[];return}if(n.result&&(this.available=!0),n.status===`error`){this.workflows=[],this.error=e.signal.aborted?`Loading workflows timed out.`:n.error;return}this.workflows=n.items}}async fetchGuardrailRefs(){let e=await aT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([_s.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=nM(e,{models:kc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await oT(`/admin/workflows`,`POST`,e,{label:`create workflow`,unavailableStatuses:[]});if(t.status===`stale`||t.result&&t.result.status===401)return;if(t.status===`error`){this.formError=t.error;return}Js.success(`Workflow created and activated.`),this.closeForm(),this.fetchPage()}finally{this.submitting=!1}}async deactivate(e){let t=String(e&&e.id||``).trim();if(!t||this.deactivatingID||!Zj(e))return;let n=Uj(e);if(confirm(`Deactivate workflow "`+n+`"? Requests will fall back to the next active workflow for this scope.`)){this.deactivatingID=t;try{let e=await oT(`/admin/workflows/`+encodeURIComponent(t)+`/deactivate`,`POST`,void 0,{label:`deactivate workflow`,unavailableStatuses:[]});if(e.status===`stale`||e.result&&e.result.status===401)return;if(e.status===`error`){Js.error(e.error);return}Js.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function iM(e){let t=String(e??``),n=typeof navigator<`u`?navigator.clipboard:null;if(n&&typeof n.writeText==`function`)return n.writeText(t);let r=typeof document<`u`?document:null;if(!r||!r.body||typeof r.execCommand!=`function`)return Promise.reject(Error(`Clipboard API unavailable`));let i=r.createElement(`textarea`);i.value=t,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.opacity=`0`;try{if(r.body.appendChild(i),i.focus(),i.select(),i.setSelectionRange(0,i.value.length),!r.execCommand(`copy`))throw Error(`execCommand copy returned false`)}finally{i.parentNode&&i.parentNode.removeChild(i)}return Promise.resolve()}function aM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=j({copied:!1,error:!1}),r=null;function i(){r!==null&&clearTimeout(r),r=null}function a(){i(),r=setTimeout(()=>{n.copied=!1,n.error=!1,r=null},e)}return{get copied(){return n.copied},get error(){return n.error},reset(){i(),n.copied=!1,n.error=!1},async copy(e,r){if(!(e==null||e===``)){i(),n.copied=!1,n.error=!1;try{await iM(typeof r==`function`?r(e):String(e)),n.copied=!0,n.error=!1}catch(e){console.error(t||`Failed to copy text:`,e),n.copied=!1,n.error=!0}a()}}}}var oM=R(``);function sM(e,t){E(t,!0);let n=G(t,`workflowID`,3,``),r=aM({logPrefix:`Failed to copy workflow ID:`});An(()=>{n(),r.reset()});let i=O(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=O(()=>n()?I(i)+` `+n():I(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=oM();let c;var l=P(M(s),4),u=M(l,!0);T(l);var d=P(l,2);K(M(d),{get icon(){return Ga}}),T(d),T(s),F(()=>{c=U(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),W(s,`title`,I(i)),W(s,`aria-label`,I(a)),B(u,n())}),L(`click`,s,o),z(e,s),D()}Hr([`click`]);var cM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Ot(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=fM(),l=M(c),u=e=>{var t=lM();let r;K(M(t),{get icon(){return n()}}),T(t),F(()=>r=U(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":I(i)===`workflow-node-endpoint`})),z(e,t)};V(l,e=>{n()&&e(u)});var d=P(l,2),f=M(d,!0);T(d);var p=P(d,2),m=e=>{var t=uM(),n=M(t,!0);T(t),F(()=>B(n,s())),z(e,t)};V(p,e=>{s()&&e(m)});var g=P(p,2),_=e=>{var t=dM(),n=M(t,!0);T(t),F(()=>B(n,o())),z(e,t)};V(g,e=>{o()&&e(_)}),T(c),F(()=>{U(c,1,Fi([`workflow-node`,I(i),a()]),`svelte-nbptrg`),B(f,r())}),z(e,c)},lM=R(`
        `),uM=R(` `),dM=R(` `),fM=R(`
        `),pM=R(`
        `,1),mM=R(`
        `,1),hM=R(`
        `),gM=R(`
        Async
        `),_M=R(`
        `);function vM(e,t){E(t,!0);let n=G(t,`chart`,19,()=>({}));var r=_M();let i;var a=M(r),o=e=>{sM(e,{get workflowID(){return n().workflowID}})};V(a,e=>{n().workflowID&&e(o)});var s=P(a,2),c=M(s);cM(c,()=>({icon:Do,label:`Client`,variant:`workflow-node-endpoint`}));var l=P(c,4);cM(l,()=>({icon:qa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=P(l,2),d=e=>{var t=pM(),r=N(t);cM(P(r,2),()=>({icon:qa,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),F(()=>U(r,1,Fi([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),z(e,t)};V(u,e=>{n().showCache&&e(d)});var f=P(u,2),p=e=>{var t=mM();cM(P(N(t),2),()=>({icon:Oo,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),z(e,t)};V(f,e=>{n().showBudget&&e(p)});var m=P(f,2),h=e=>{var t=mM();cM(P(N(t),2),()=>({icon:bo,label:`Guardrails`,sub:n().guardrailLabel})),z(e,t)};V(m,e=>{n().showGuardrails&&e(h)});var g=P(m,2),_=P(g,2);cM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=P(_,2),y=e=>{var t=pM(),r=N(t);cM(P(r,2),()=>({icon:no,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),F(()=>U(r,1,Fi([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),z(e,t)};V(v,e=>{n().showFailover&&e(y)});var b=P(v,2);cM(P(b,2),()=>({icon:Va,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),T(s);var x=P(s,2),S=e=>{var t=gM(),r=M(t),i=M(r),a=e=>{cM(e,()=>({icon:Ia,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};V(i,e=>{n().showUsage&&e(a)});var o=P(i,2),s=e=>{z(e,hM())};V(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=P(o,2),l=e=>{cM(e,()=>({icon:Ja,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};V(c,e=>{n().showAudit&&e(l)}),T(r),Ue(4),T(t),z(e,t)};V(x,e=>{n().showAsync&&e(S)}),T(r),F(()=>{i=U(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),U(g,1,Fi([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),U(b,1,Fi([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),z(e,r),D()}function yM(e){let t=Fj(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function bM(e,t){return t&&t.provider?t.provider:Lj(e&&e.scope)||`AI`}function xM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function SM(e,t){let n=String(e&&e.id||``).trim();if(n&&n!==`draft-workflow-preview`)return n;let r=String(t&&t.workflow_version_id||``).trim();return r&&r!==`draft-workflow-preview`?r:null}function CM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:jj(t)}function wM(e){let t=e&&e.data&&e.data.failover;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=String(t.target_model||t.targetModel||``).trim()||null;return n?{targetModel:n}:null}function TM(e,t=0){if(t>4||e==null)return``;if(typeof e==`string`){let n=e.trim();if(!n||n[0]!==`{`&&n[0]!==`[`)return``;try{return TM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=TM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:TM(e.error,t+1)):``}function EM(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||TM(t.response_body)}function DM(e){let t=String(e||``).trim();if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{provider:t.slice(0,n),model:t.slice(n+1)}}function OM(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=wM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=DM(n);if(i)return i;let a=Lj(t&&t.scope),o=a?String(t&&t.scope&&t.scope.scope_model||``).trim():``;return a||o?{provider:a||null,model:o||n||null}:{provider:null,model:n||null}}function kM(e,t){if(!e)return null;let n=(()=>{let t=String(e.cache_type||``).trim().toLowerCase();return t===`exact`||t===`semantic`?t:null})(),r=(()=>{if(e.status_code===void 0||e.status_code===null)return null;let t=String(e.status_code).trim();if(!t)return null;let n=Number(t);return Number.isFinite(n)?n:null})(),i=n?!0:e.cache_hit!==void 0&&e.cache_hit!==null&&!!e.cache_hit,a=wM(e),o=OM(e,t),s=Number.isFinite(r)&&r>=200&&r<300,c=String(e.error_type||``).trim().toLowerCase()===`authentication_error`,l=String(e.auth_method||``).trim().toLowerCase()||null,u=EM(e).toLowerCase()===`budget_exceeded`;return{cacheHit:i,cacheType:n||null,failoverTarget:a&&a.targetModel?a.targetModel:null,provider:o.provider,model:o.model,statusCode:r,responseSuccess:s,aiSuccess:s&&!i,authError:c,authMethod:l,budgetExceeded:u}}function AM(e){return!!(e&&e.cacheHit)}function jM(e){return!!(e&&e.failoverTarget)}function MM(e){return!!(e&&e.budgetExceeded)}function NM(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function PM(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function FM(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function IM(e,t,n,r){return e?MM(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function LM(e){return MM(e)?`Exceeded`:null}function RM(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function zM(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function BM(e){return e&&e.failoverTarget?`Redirected`:null}function VM(e){return e&&e.failoverTarget?e.failoverTarget:null}function HM(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function UM(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function WM(e,t){if(!e)return``;let n=e.statusCode;return!Number.isFinite(n)&&t?`workflow-node-current`:Number.isFinite(n)?n>=500?`workflow-node-error`:n>=400?`workflow-node-warning`:n>=300?`workflow-node-neutral`:n>=200?`workflow-node-success`:``:``}function GM(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function KM(e,t){return e?e.authError?`workflow-node-error`:t?`workflow-node-current`:e.authMethod===`api_key`||e.authMethod===`master_key`?`workflow-node-success`:``:``}function qM(e){return!e||!e.authMethod?null:e.authMethod}function JM(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function YM(e,t){if(!e||!e._live)return!!t;let n=String(e._live_state||``).trim();return!!e._audit_flushed||n===`audit.flushed`||n===`audit.detail`}function XM(e,t){if(!e)return!!t;let n=e.usage||{},r=Number(n.entries||0)>0;if(!e._live)return r;let i=String(e._usage_live_state||``).trim();return e._usage_flushed||i===`usage.flushed`?!0:!e._usage_live_pending&&r&&!e._live_pending}function ZM(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function QM(e,t){return!e||!e._live||YM(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function $M(e,t,n){return!e||!e._live?``:ZM(e)?`usage`:QM(e,t)?`audit`:YM(e,!1)&&!e._live_pending?``:t&&t.cacheHit?`cache`:t&&(t.provider||t.model)?`ai`:n&&n.budget&&(e.workflow_version_id||e.requested_model)?`budget`:t&&t.authMethod?``:`auth`}function eN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?jj(i.features):Nj(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||MM(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||jM(t),m=SM(e,i.entry),h=$M(i.entry,t,a),g=ZM(i.entry),_=QM(i.entry,t),v=YM(i.entry,s),y=XM(i.entry,s);return{showBudget:c,budgetNodeClass:IM(c,t,s,h===`budget`),budgetStatusLabel:LM(t),showGuardrails:l,guardrailLabel:l?yM(e):``,showCache:!!i.forceCache||!!a.cache||AM(t),cacheNodeClass:NM(t,h===`cache`),cacheConnClass:PM(t),cacheStatusLabel:FM(t),showFailover:p,failoverNodeClass:p?RM(t):``,failoverConnClass:p?zM(t):``,failoverStatusLabel:p?BM(t):null,failoverTargetLabel:p?VM(t):null,aiLabel:bM(e,t),aiSublabel:xM(e,t),aiConnClass:HM(t),aiNodeClass:UM(t,h===`ai`),responseConnClass:HM(t),responseNodeClass:WM(t,h===`response`),responseNodeSublabel:GM(t),authNodeClass:KM(t,h===`auth`),authNodeSublabel:qM(t),usageNodeClass:JM(u,y,g),auditNodeClass:JM(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function tN(e,t){return eN(e,null,{forceCache:!1},t)}function nN(e,t,n){return eN(t,kM(e,t),{entry:e,features:CM(e)||(t?Nj(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var rN=R(`

        `),iN=R(`

        `),aN=R(`
        `),oN=R(`
        `),sN=R(`

        No guardrails configured for this workflow.

        `),cN=R(`

        Guardrails

        `),lN=R(``),uN=R(`

        `);function dN(e,t){E(t,!0);let n=G(t,`preview`,3,!1),r=O(()=>rM.featureCaps()),i=O(()=>Uj(t.workflow)),a=O(()=>Ij(t.workflow,I(r))),o=O(()=>tN(t.workflow,I(r))),s=O(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=uN();let l;var u=M(c),d=M(u),f=M(d),p=M(f,!0);T(f);var m=P(f,2),h=M(m,!0);T(m),T(d);var g=P(d,2),_=M(g),v=M(_,!0);T(_),T(g),T(u);var y=P(u,2),b=e=>{var n=rN(),r=M(n,!0);T(n),F(()=>B(r,t.workflow.description)),z(e,n)};V(y,e=>{t.workflow.description&&e(b)});var x=P(y,2),S=e=>{var n=iN(),i=M(n);T(n),F(e=>B(i,`Failover: ${e??``}`),[()=>Pj(t.workflow,I(r))]),z(e,n)},C=O(()=>rM.failoverVisible());V(x,e=>{I(C)&&e(S)});var w=P(x,2);vM(w,{get chart(){return I(o)}});var ee=P(w,2),te=e=>{var t=cN(),n=M(t),r=P(M(n),2),i=M(r,!0);T(r),T(n);var o=P(n,2),c=e=>{var t=oN();H(t,23,()=>I(a),(e,t)=>I(s)+t,(e,t)=>{var n=aN(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=M(a);T(a),T(n),F(()=>{B(i,I(t).ref),B(o,`step ${I(t).step??``}`)}),z(e,n)}),T(t),z(e,t)},l=e=>{z(e,sN())};V(o,e=>{I(a).length>0?e(c):e(l,-1)}),T(t),F(()=>B(i,I(a).length?I(a).length+` steps`:`None`)),z(e,t)},ne=O(()=>_s.guardrailsVisible());V(ee,e=>{I(ne)&&e(te)});var re=P(ee,2),ie=e=>{var n=lN(),r=M(n),a=M(r),o=M(a,!0);T(a);var s=P(a,2);{let e=O(()=>`Edit workflow `+I(i));iT(s,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>rM.openCreate(t.workflow),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}T(r);var c=P(r,2),l=M(c),u=M(l);T(l);var d=P(l,2),f=M(d);T(d);var p=P(d,2),m=M(p);T(p),T(c),T(n),F((e,n,r,s)=>{a.disabled=e,W(a,`aria-label`,`Deactivate workflow `+I(i)),W(a,`title`,n),B(o,rM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),B(u,`version: v${t.workflow.version??``}`),B(f,`created: ${r??``}`),B(m,`hash: ${s??``}`)},[()=>rM.deactivatingID===t.workflow.id||!Zj(t.workflow),()=>Zj(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>os.formatTimestamp(t.workflow.created_at),()=>Qj(t.workflow.workflow_hash)]),L(`click`,a,()=>rM.deactivate(t.workflow)),z(e,n)};V(re,e=>{n()||e(ie)}),T(c),F((e,t)=>{l=U(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),B(p,e),B(h,I(i)),B(v,t)},[()=>Vj(t.workflow),()=>Hj(t.workflow)]),z(e,c),D()}Hr([`click`]);var fN=R(`

        `),pN=R(``),mN=R(``),hN=R(``),gN=R(``),_N=R(``),vN=R(``),yN=R(``),bN=R(``),xN=R(``),SN=R(``),CN=R(``),wN=R(``),TN=R(`
        No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
        `),EN=R(`
        `),DN=R(`
        `),ON=R(`

        No guardrail steps configured yet.

        `),kN=R(`

        Guardrail Steps

        Guardrails in the same numeric step run together. Later steps wait for earlier ones to finish.

        `),AN=R(`

        Leave provider name empty to target all providers and models. Select a provider name without a model to target all models for that configured provider.

        Add a path to scope the workflow to that subtree. Leading slashes are optional and will be normalized; you can enter "team/alpha" or "/team/alpha". Matching checks the deepest user path first, then falls back toward the root.

        If you leave the name empty, the workflow will display as the matched provider/model scope or “All models”.

        Preview

        Live
        `,1);function jN(e,t){E(t,!0);{let t=e=>{US(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=fN(),n=M(t,!0);T(t),F(e=>B(n,e),[()=>rM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),z(e,t)},$$slots:{title:!0}})},n=O(()=>rM.submitLabel()),r=O(()=>rM.submittingLabel()),i=O(()=>rM.submitMode()===`create`?so:fo);cE(e,{get open(){return rM.formOpen},ariaLabel:`Workflow editor`,get error(){return rM.formError},get submitting(){return rM.submitting},get submitLabel(){return I(n)},get submittingLabel(){return I(r)},get submitIcon(){return I(i)},dialogClass:`workflow-editor`,onclose:()=>rM.closeForm(),onsubmit:()=>rM.submitForm(),header:t,children:(e,t)=>{var n=AN(),r=N(n),i=M(r);uE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=mN(),r=M(n);r.value=r.__value=``,H(P(r),16,()=>rM.providerOptions(),e=>e,(e,t)=>{var n=pN(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(n),L(`change`,n,e=>rM.setProvider(e.currentTarget.value)),Gi(n,()=>rM.form.scope_provider,e=>rM.form.scope_provider=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2),o=e=>{uE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=hN(),r=M(n);r.value=r.__value=``,H(P(r),17,()=>rM.modelOptions(rM.form.scope_provider),e=>rM.form.scope_provider+`-`+e,(e,t)=>{var n=pN(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t)),i!==(i=I(t))&&(n.value=(n.__value=I(t))??``)}),z(e,n)}),T(n),Gi(n,()=>rM.form.scope_model,e=>rM.form.scope_model=e),z(e,n)},$$slots:{default:!0}})};V(a,e=>{rM.form.scope_provider&&e(o)});var s=P(a,2);uE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=gN();na(n),da(n,()=>rM.form.name,e=>rM.form.name=e),z(e,n)},$$slots:{default:!0}}),uE(P(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=_N();na(n),da(n,()=>rM.form.scope_user_path,e=>rM.form.scope_user_path=e),z(e,n)},$$slots:{default:!0}}),T(r);var c=P(r,8);uE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=vN();ft(n),da(n,()=>rM.form.description,e=>rM.form.description=e),z(e,n)},$$slots:{default:!0}});var l=P(c,2),u=M(l),d=e=>{var t=yN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.cache,e=>rM.form.features.cache=e),z(e,t)},f=O(()=>_s.cacheVisible());V(u,e=>{I(f)&&e(d)});var p=P(u,2),m=e=>{var t=bN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.audit,e=>rM.form.features.audit=e),z(e,t)},h=O(()=>_s.auditVisible());V(p,e=>{I(h)&&e(m)});var g=P(p,2),_=e=>{var t=xN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.usage,e=>rM.form.features.usage=e),z(e,t)},v=O(()=>_s.usageVisible());V(g,e=>{I(v)&&e(_)});var y=P(g,2),b=e=>{var t=SN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.budget,e=>rM.form.features.budget=e),z(e,t)},x=O(()=>_s.budgetsVisible());V(y,e=>{I(x)&&e(b)});var S=P(y,2),C=e=>{var t=CN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.guardrails,e=>rM.form.features.guardrails=e),z(e,t)},w=O(()=>_s.guardrailsVisible());V(S,e=>{I(w)&&e(C)});var ee=P(S,2),te=e=>{var t=wN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>rM.form.features.failover,e=>rM.form.features.failover=e),z(e,t)},ne=O(()=>rM.failoverVisible());V(ee,e=>{I(ne)&&e(te)}),T(l);var re=P(l,2),ie=P(M(re),2);{let e=O(()=>rM.preview());dN(ie,{get workflow(){return I(e)},preview:!0})}T(re);var ae=P(re,2),oe=e=>{var t=kN(),n=M(t),r=P(M(n),2);T(n);var i=P(n,2),a=e=>{var t=TN(),n=P(M(t),2);T(t),L(`click`,n,()=>Uo.navigate(`guardrails`)),z(e,t)};V(i,e=>{rM.guardrailRefs.length===0&&e(a)});var o=P(i,2),s=e=>{var t=DN();H(t,21,()=>rM.form.guardrails,oi,(e,t,n)=>{var r=EN(),i=M(r),a=M(i);W(a,`for`,`workflow-guardrail-ref-`+n);var o=P(a,2);na(o),W(o,`id`,`workflow-guardrail-ref-`+n),W(o,`aria-label`,`Guardrail reference `+(n+1)),T(i);var s=P(i,2),c=M(s);W(c,`for`,`workflow-guardrail-step-`+n);var l=P(c,2);na(l),W(l,`id`,`workflow-guardrail-step-`+n),W(l,`aria-label`,`Guardrail step `+(n+1)),T(s);var u=P(s,2);T(r),da(o,()=>I(t).ref,e=>I(t).ref=e),da(l,()=>I(t).step,e=>I(t).step=e),L(`click`,u,()=>rM.removeGuardrailStep(n)),z(e,r)}),T(t),z(e,t)},c=e=>{z(e,ON())};V(o,e=>{rM.form.guardrails.length>0?e(s):e(c,-1)}),T(t),L(`click`,r,()=>rM.addGuardrailStep()),z(e,t)},se=O(()=>rM.form.features.guardrails&&_s.guardrailsVisible());V(ae,e=>{I(se)&&e(oe)}),z(e,n)},$$slots:{header:!0,default:!0}})}D()}Hr([`change`,`click`]);var MN=R(`

        Loading workflows...

        `),NN=R(`
        `),PN=R(`

        No active workflows found.

        `),FN=R(`

        No workflows match your filter.

        `),IN=R(`
        `);function LN(e,t){E(t,!0);var n=IN(),r=M(n),i=e=>{var t=MN();vS(M(t),{size:16,label:`Loading workflows`}),Ue(),T(t),z(e,t)};V(r,e=>{rM.loading&&!q.authError&&e(i)});var a=P(r,2),o=e=>{var t=NN();H(t,21,()=>rM.filteredWorkflows,e=>e.id,(e,t)=>{dN(e,{get workflow(){return I(t)}})}),T(t),z(e,t)};V(a,e=>{rM.filteredWorkflows.length>0&&e(o)});var s=P(a,2),c=e=>{z(e,PN())};V(s,e=>{rM.workflows.length===0&&!rM.loading&&!q.authError&&rM.available&&e(c)});var l=P(s,2),u=e=>{z(e,FN())};V(l,e=>{rM.workflows.length>0&&rM.filteredWorkflows.length===0&&!rM.loading&&e(u)}),T(n),z(e,n),D()}var RN=R(``),zN=R(`
        Workflows feature is unavailable.
        `),BN=R(`
        `),VN=R(`
        `),HN=R(``),UN=R(`
        `);function WN(e,t){E(t,!0),An(()=>{q.refreshTick,rM.fetchPage()});var n=UN(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=RN();K(M(t),{get icon(){return so},class:`form-action-icon`,"aria-hidden":`true`}),Ue(2),T(t),L(`click`,t,()=>rM.openCreate()),z(e,t)};V(a,e=>{rM.available&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,zN())};V(s,e=>{!rM.available&&!q.authError&&e(c)});var l=P(s,2),u=e=>{var t=BN(),n=M(t,!0);T(t),F(()=>B(n,rM.error)),z(e,t)};V(l,e=>{rM.error&&!q.authError&&e(u)});var d=P(l,2),f=e=>{var t=VN(),n=M(t);sw(M(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return rM.filter},set value(e){rM.filter=e}}),T(n);var r=P(n,2),i=M(r),a=M(i,!0);T(i),T(r),T(t),F(()=>B(a,rM.filteredWorkflows.length+` active scopes`)),z(e,t)};V(d,e=>{rM.available&&e(f)});var p=P(d,2);jN(p,{});var m=P(p,2);LN(m,{});var h=P(m,2);H(h,20,()=>rM.guardrailRefs,e=>e,(e,t)=>{var n=HN(),r={};F(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(h),T(n),z(e,n),D()}Hr([`click`]);function GN(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=Gs}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=KN(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function KN(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var qN=null;function JN(){return qN===null&&(qN=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(qN&&qN.matches)}function YN(e){return JN()?0:e}function XN(e,t){return!t||!t.live?{duration:0}:Us(e,{duration:YN(150)})}var ZN=new class{#e=k(j({}));get workflowVersionsByID(){return I(this.#e)}set workflowVersionsByID(e){A(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:_s.cacheVisible(),audit:_s.auditVisible(),usage:_s.usageVisible(),budget:_s.budgetsVisible(),guardrails:_s.guardrailsVisible(),failover:_s.booleanFlag(`FAILOVER_ENABLED`,!0)}}cacheWorkflowVersion(e){let t=String(e&&e.id||``).trim();return t?(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:e},e):null}cacheMissingWorkflowVersion(e){let t=String(e||``).trim();t&&(this.workflowVersionsByID={...this.workflowVersionsByID||{},[t]:null})}workflowVersionCacheHas(e){return Object.prototype.hasOwnProperty.call(this.workflowVersionsByID||{},String(e||``).trim())}workflowVersionByID(e){let t=String(e||``).trim();return t&&this.workflowVersionCacheHas(t)?this.workflowVersionsByID[t]:null}async fetchWorkflowVersion(e){let t=String(e||``).trim();if(!t)return null;if(this.workflowVersionCacheHas(t))return this.workflowVersionsByID[t];if(this.workflowVersionRequests[t])return this.workflowVersionRequests[t];let n=(async()=>{let e=typeof AbortController==`function`?new AbortController:null,n=e?setTimeout(()=>e.abort(),1e4):null;try{let n=await fs(`/admin/workflows/`+encodeURIComponent(t),{label:`workflow`,signal:e?e.signal:void 0});if(n.stale)return null;if(n.status===404)return this.cacheMissingWorkflowVersion(t),null;if(!n.ok)return null;let r=n.data;return!r||typeof r!=`object`||Array.isArray(r)?(this.cacheMissingWorkflowVersion(t),null):this.cacheWorkflowVersion(r)}catch(e){return e&&e.name===`AbortError`||console.error(`Failed to fetch workflow version:`,e),null}finally{n!==null&&clearTimeout(n),delete this.workflowVersionRequests[t]}})();return this.workflowVersionRequests[t]=n,n}async prefetchAuditWorkflows(e){let t=[...new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.workflow_version_id||``).trim()).filter(Boolean))];t.length!==0&&await Promise.all(t.map(e=>this.fetchWorkflowVersion(e)))}auditEntryWorkflow(e){let t=String(e&&e.workflow_version_id||``).trim();return t?this.workflowVersionByID(t):null}},QN=6;function $N(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function eP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>QN)return r;let i=$N(r);return i==null?r:tP(i,t+1,n)||n&&n(i)||r}function tP(e,t=0,n=null,r=null){if(e==null||t>QN)return``;if(typeof e==`string`){let i=$N(e.trim());return i==null?``:tP(i,t+1,n,r)}if(typeof e!=`object`)return``;let i=r||new Set;if(i.has(e))return``;if(i.add(e),Array.isArray(e)){for(let r=0;r=400||iP(t&&t.response_body)}function oP(e){let t=e&&e.data?e.data:null;return t?nP(t.error_message)||(aP(e,t)?tP(t.response_body,0):``):``}function sP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function cP(e){let t=sP(e);return t===null?``:t===0?`Audit logs are retained indefinitely.`:t===1?`Audit logs are retained for 1 day.`:`Audit logs are retained for `+t+` days.`}function lP(e){let t=sP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function uP(e){let t=sP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function dP({dateQuery:e,limit:t,offset:n,search:r,method:i,statusCode:a,stream:o}){let s=e;return s+=`&limit=`+t+`&offset=`+n,r&&(s+=`&search=`+encodeURIComponent(r)),i&&(s+=`&method=`+encodeURIComponent(i)),a&&(s+=`&status_code=`+encodeURIComponent(a)),o&&(s+=`&stream=`+encodeURIComponent(o)),s}function fP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function pP(e){return String(e&&e.session_id||``).trim()}function mP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function hP(e){return!!pP(e)&&mP(e)>1}function gP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_id:pP(e.latest)||String(e.session_id||``).trim(),session_count:Number(e.count||1)})),total:Number(e&&e.total||0),limit:Number(e&&e.limit||25),offset:Number(e&&e.offset||0)}}function _P(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>xP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!xP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>xP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!xP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function vP(e,t){let n=e||{};if(!t)return n;if(n[t]){let e={...n};return delete e[t],e}return{...n,[t]:!0}}function yP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>pP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=n[e];return}a=!0}),a?i:n}function bP(e){return String(e&&e.id||``).trim()}function xP(e){if(!e)return[];let t=[],n=String(e.id||``).trim(),r=String(e.request_id||``).trim();return n&&t.push(`id:`+n),r&&t.push(`request:`+r),t}function SP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function CP(e){let t=e&&e.customStartDate,n=e&&e.customEndDate;if(!t&&!n)return!0;let r=new Date;if(t){let e=new Date(t);if(e.setHours(0,0,0,0),Number.isFinite(e.getTime())&&re)return!1}return!0}function wP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&CP(t)}function TP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!wP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>SP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>xP(e))),s=[];return a.forEach(e=>{let t=xP(e);t.length!==0&&(t.some(e=>o.has(e))||(t.forEach(e=>o.add(e)),s.push(e)))}),s.length===0?r:(r.entries=[...s,...i].slice(0,r.limit||25),r.total=Number(r.total||0)+s.length,r)}function EP(e,t,n){let r=e&&typeof e==`object`?{...e}:{entries:[],total:0,limit:25,offset:0},i=Array.isArray(r.entries)?r.entries:[];if(r.entries=i,!wP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>SP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>xP(e))),s=new Map;i.forEach((e,t)=>{let n=pP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=xP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=pP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(mP(l[r]),mP(e))},t.forEach(e=>o.add(e));return}t.forEach(e=>o.add(e)),c.push(e)}),r.entries=[...c,...l].slice(0,r.limit||25),r.total=Number(r.total||0)+c.length,r}function DP(e,t){let n=bP(t),r=e||{};if(!n)return r;if(r[n]){let e={...r};return delete e[n],e}return{...r,[n]:!0}}function OP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>bP(e)).filter(Boolean)),i={},a=!1;return Object.keys(n).forEach(e=>{if(r.has(e)){i[e]=!0;return}a=!0}),a?i:n}function kP(e){if(e==null)return`-`;let t=Number(e);return Number.isFinite(t)?t<=0?`pending`:t<1e6?Math.round(t/1e3)+` µs`:t<1e9?(t/1e6).toFixed(2)+` ms`:(t/1e9).toFixed(2)+` s`:`-`}function AP(e){if(e==null||e===``)return`status-unknown`;let t=Number(e);return Number.isFinite(t)?t>=500?`status-error`:t>=400?`status-warning`:t>=300?`status-neutral`:`status-success`:`status-unknown`}function jP(e){if(!e||!e._live||!e._live_pending)return!1;let t=String(e._live_state||``).trim();if(t===`audit.completed`||t===`audit.flushed`||t===`audit.detail`)return!1;if(e._response_partial)return!0;if(e.status_code!==null&&e.status_code!==void 0&&e.status_code!==``||Number(e.duration_ns||0)>0||e.error_type||e.error_message)return!1;let n=e.data||{};return!(n.response_headers||n.response_body||n.error_message)}function MP(e){let t=e&&e.data&&e.data.failover;return!t||typeof t!=`object`||Array.isArray(t)?null:String(t.target_model||t.targetModel||``).trim()||null}function NP(e){return(e&&e.data&&Array.isArray(e.data.attempts)?e.data.attempts:[]).map((e,t)=>({...e,seq:Number(e&&e.seq||t+1)})).sort((e,t)=>e.seq-t.seq)}function PP(e){let t=NP(e);return t.length>1||t.some(e=>!(e&&e.success))}function FP(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function IP(e){return String(e&&e.kind||``).trim()||`attempt`}function LP(e){if(!e)return`-`;let t=String(e.provider_name||``).trim(),n=String(e.provider_type||e.provider||``).trim();return t&&n&&t!==n?t+` (`+n+`)`:t||n||`-`}function RP(e){return String(e&&e.model||``).trim()||`-`}function zP(e){let t=NP(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function BP(e){return NP(e).length+`×`}function VP(e){let t=NP(e),n=t.filter(e=>!(e&&e.success)).length,r=t.length===1?`attempt`:`attempts`,i=t.length+` provider `+r;return n>0?i+` · `+n+` failed`:i}function HP(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=IP(e);n&&n!==`attempt`&&t.push(n),t.push(FP(e));let r=LP(e);r&&r!==`-`&&t.push(r);let i=RP(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function UP(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t&&t.response_body!=null?t.response_body:null}return t.response_body!=null&&t.response_body!==``?t.response_body:null}function WP(e){if(!e||e.success)return``;let t=String(e.error_message||``).trim(),n=String(e.error_code||``).trim(),r=String(e.error_type||``).trim();return t&&n?n+`: `+t:t||n||r||`Provider attempt failed`}function GP(e,t){if(!t)return null;if(t.success){let t=e&&e.data?e.data:null;return t?t.response_headers:null}return t.response_headers||null}function KP(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function qP(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=UP(e,t),a=GP(e,t),o=WP(t),s=i!=null&&i!==``,c=IP(t),l=NP(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:KP(t),layout:`split`,entry:e,copyHeaders:a,copyBody:i,showErrorMessage:!!o,errorMessage:o,showHeaders:!!a,headers:a,showBody:s,body:i,showEmpty:!o&&!s&&!a,emptyMessage:`No response was captured for this attempt.`,showTooLarge:!!(n&&r&&r.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function JP(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function YP(e){return JP(e).filter(e=>!(e&&e.no_change))}function XP(e){return JP(e).filter(e=>e&&e.no_change).map(e=>{let t=String(e.rewriter||`rewriter`);return{id:`step-`+Number(e.seq||0),rewriter:t,label:t+`: no change`,title:t+` ran and forwarded the request unchanged`}})}function ZP(e){let t=Number(e&&e.bytes_before),n=Number(e&&e.bytes_after);if(!Number.isFinite(t)||!Number.isFinite(n)||t<=0||n>=t)return``;let r=(1-n/t)*100;return`-`+(r>=10?String(Math.round(r)):r.toFixed(1))+`%`}function QP(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=YP(e).length<=1,a={rewriter:t&&t.rewriter||``,bytes:Number(t&&t.bytes_before||0)+` → `+Number(t&&t.bytes_after||0)};return t&&t.detail!=null&&(a.detail=t.detail),{title:`Rewritten`,direction:`request`,seq:i?0:Number(t&&t.seq||0),kind:t&&t.rewriter?String(t.rewriter):``,savingsLabel:ZP(t),layout:`split`,entry:e,copyHeaders:a,copyBody:n,showErrorMessage:!1,errorMessage:null,showHeaders:!0,headers:a,headersTitle:`What changed`,showBody:r,body:n,showEmpty:!1,emptyMessage:``,showTooLarge:!r,tooLargeMessage:`Rewritten body not captured (body logging disabled or body too large).`}}function $P(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function eF(e){let t=$P(e);return Number(t&&t.cached_input_tokens||0)>0}function tF(e){let t=$P(e),n=Number(t&&t.input_tokens||0),r=Number(t&&t.cached_input_tokens||0);return!Number.isFinite(n)||n<=0||!Number.isFinite(r)||r<=0?0:Math.max(0,Math.min(100,r/n*100))}function nF(e){let t=$P(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?nc(r)+` cached`:tF(e).toFixed(1)+`% cached`}function rF(e){return eF(e)?nF(e):``}function iF(e,t){let n=$P(e);if(!n||!e||!e.data||!e.data.request_body)return null;let r=Number(n.estimated_cached_characters||0);if(!Number.isFinite(r)||r<=0||typeof t!=`function`)return null;let i=t(e.data.request_body);return!Array.isArray(i)||i.length===0?null:{characters:r,segments:i}}function aF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&jP(e);return{title:`Request`,direction:`request`,layout:`split`,entry:e,copyHeaders:n&&n.request_headers,copyBody:n&&n.request_body,showErrorMessage:!1,errorMessage:null,showHeaders:!!(n&&n.request_headers),headers:n&&n.request_headers,showBody:!!(n&&n.request_body),body:n&&n.request_body,bodyCacheRatioLabel:rF(e),promptCacheHighlight:iF(e,t),noChangeSteps:XP(e),showEmpty:r&&!i,emptyMessage:`Request details were not captured.`,showPending:i,pendingMessage:`Waiting for request data…`,showTooLarge:!!(n&&n.request_body_too_big_to_handle),tooLargeMessage:`Request body was too large to capture.`}}function oF(e){let t=e&&e.data?e.data:null,n=oP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&jP(e);return{title:`Response`,direction:`response`,layout:`split`,entry:e,copyHeaders:t&&t.response_headers,copyBody:t&&t.response_body,showErrorMessage:!!n,errorMessage:n,showHeaders:!!(t&&t.response_headers),headers:t&&t.response_headers,showBody:!!(t&&t.response_body),body:t&&t.response_body,streaming:!!(e&&e._response_partial&&t&&t.response_body)&&jP(e),showEmpty:r&&!i,emptyMessage:`Response details were not captured.`,showPending:i,pendingMessage:`Response in progress…`,showTooLarge:!!(t&&t.response_body_too_big_to_handle),tooLargeMessage:`Response body was too large to capture.`}}function sF(e,t){let n=[{id:`request`,pane:aF(e,t)}];return YP(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:QP(e,t)})}),PP(e)?NP(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:qP(e,t)})}):n.push({id:`response`,pane:oF(e)}),n}function cF(e){if(!PP(e))return`response`;let t=NP(e),n=null;return t.forEach(e=>{e&&e.success&&(n=e)}),n||=t[t.length-1],n?`response-`+Number(n.seq||0):`request`}function lF(e,t,n){return e&&(Array.isArray(n)?n:sF(t)).some(t=>t.id===e)?e:cF(t)}function uF(e,t,n){if(!t||!t.length)return null;let r=t.indexOf(n);r<0&&(r=0);let i;switch(e){case`ArrowRight`:case`ArrowDown`:i=(r+1)%t.length;break;case`ArrowLeft`:case`ArrowUp`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return null}return t[i]}var dF=100;function fF(){return{entries:[],total:0,limit:25,offset:0}}var pF=new class{#e=k(j({}));get auditExpandedEntries(){return I(this.#e)}set auditExpandedEntries(e){A(this.#e,e,!0)}#t=k(j({}));get auditExpandedThreads(){return I(this.#t)}set auditExpandedThreads(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return bC.auditLog}set auditLog(e){bC.auditLog=e}get auditSearch(){return bC.auditSearch}set auditSearch(e){bC.auditSearch=e}get auditMethod(){return bC.auditMethod}set auditMethod(e){bC.auditMethod=e}get auditStatusCode(){return bC.auditStatusCode}set auditStatusCode(e){bC.auditStatusCode=e}get auditStream(){return bC.auditStream}set auditStream(e){bC.auditStream=e}get auditGroupSessions(){return bC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Oc.customStartDate,customEndDate:Oc.customEndDate}}toggleAuditGroupSessions(){bC.auditGroupSessions=!bC.auditGroupSessions,Ta(`gomodel_audit_group_sessions`,bC.auditGroupSessions),this.auditExpandedThreads={},bC.auditThreadChildren={},this.fetchAuditLog(!0)}async fetchAuditLog(e){let t=++this.auditFetchToken;this.loading=!0;try{e&&(this.auditLog.offset=0);let n=this.auditGroupSessions,r=dP({dateQuery:Oc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await fs((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=fF();return}let a=n?gP(i.data):i.data,o=(n?EP:TP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),this.auditLog=o,this.auditExpandedThreads=yP(this.auditExpandedThreads,o.entries),bC.auditThreadChildren=yP(bC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=OP(this.auditExpandedEntries,s);try{await ZN.prefetchAuditWorkflows(s)}catch(e){console.error(`Failed to prefetch audit workflows:`,e)}}catch(e){if(console.error(`Failed to fetch audit log:`,e),t!==this.auditFetchToken)return;this.auditLog=fF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=bC.auditThreadChildren||{};return Object.keys(e).flatMap(t=>Array.isArray(e[t]&&e[t].entries)?e[t].entries:[])}isThreadExpanded(e){return!!(e&&this.auditExpandedThreads[e])}threadChildren(e){return e&&bC.auditThreadChildren[e]||null}async toggleThread(e){let t=pP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=vP(this.auditExpandedThreads,t);let r=bC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=pP(e);if(!t)return;let n=bC.auditThreadChildren[t];bC.auditThreadChildren={...bC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...bC.auditThreadChildren},n=e[t],r=n&&Array.isArray(n.entries)?n.entries:[];r.length>0?e[t]={loading:!1,loaded:!1,entries:r,total:r.length}:(delete e[t],this.auditExpandedThreads[t]&&(this.auditExpandedThreads=vP(this.auditExpandedThreads,t))),bC.auditThreadChildren=e};try{let n=await fs(`/admin/audit/log?`+fP({sessionId:t,limit:dF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=bC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>pP(e)===t),o=_P(i,n.data.entries,a?[a]:[e]);bC.auditThreadChildren={...bC.auditThreadChildren,[t]:{loading:!1,loaded:!0,entries:o.entries,total:Number(n.data.total||0)+o.preservedCount}}}catch(e){console.error(`Failed to fetch audit session entries:`,e),r()}}clearAuditFilters(){this.auditSearch=``,this.auditMethod=``,this.auditStatusCode=``,this.auditStream=``,this.fetchAuditLog(!0)}auditLogNextPage(){this.auditLog.offset+this.auditLog.limit0&&(this.auditLog.offset=Math.max(0,this.auditLog.offset-this.auditLog.limit),this.fetchAuditLog(!1))}isAuditEntryExpanded(e){let t=bP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=DP(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof bC.fetchAuditEntryDetail==`function`&&bC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};bC.fetchAuditLog=e=>pF.fetchAuditLog(e),bC.isAuditEntryExpanded=e=>pF.isAuditEntryExpanded(e);var mF=R(`
        `);function hF(e,t){E(t,!0);let n=cw(()=>pF.fetchAuditLog(!0));An(()=>n.cancel);var r=mF(),i=M(r);sw(M(i),{id:`audit-filter-search`,placeholder:`Search by request ID, model, provider, path, user path, or error...`,label:`Search by request ID, model, provider, path, user path, or error`,get oninput(){return n},get value(){return pF.auditSearch},set value(e){pF.auditSearch=e}}),T(i);var a=P(i,2),o=M(a),s=M(o);s.value=s.__value=``;var c=P(s);c.value=c.__value=`GET`;var l=P(c);l.value=l.__value=`POST`;var u=P(l);u.value=u.__value=`PUT`;var d=P(u);d.value=d.__value=`PATCH`;var f=P(d);f.value=f.__value=`DELETE`,T(o);var p=P(o,2),m=M(p);m.value=m.__value=``;var h=P(m);h.value=h.__value=`200`;var g=P(h);g.value=g.__value=`201`;var _=P(g);_.value=_.__value=`400`;var v=P(_);v.value=v.__value=`401`;var y=P(v);y.value=y.__value=`403`;var b=P(y);b.value=b.__value=`404`;var x=P(b);x.value=x.__value=`429`;var S=P(x);S.value=S.__value=`500`;var C=P(S);C.value=C.__value=`502`;var w=P(C);w.value=w.__value=`503`;var ee=P(w);ee.value=ee.__value=`504`,T(p);var te=P(p,2),ne=M(te);ne.value=ne.__value=``;var re=P(ne);re.value=re.__value=`true`;var ie=P(re);ie.value=ie.__value=`false`,T(te);var ae=P(te,2);K(M(ae),{get icon(){return jo},class:`table-icon-svg`}),Ue(2),T(ae),T(a),T(r),L(`change`,o,()=>pF.fetchAuditLog(!0)),Gi(o,()=>pF.auditMethod,e=>pF.auditMethod=e),L(`change`,p,()=>pF.fetchAuditLog(!0)),Gi(p,()=>pF.auditStatusCode,e=>pF.auditStatusCode=e),L(`change`,te,()=>pF.fetchAuditLog(!0)),Gi(te,()=>pF.auditStream,e=>pF.auditStream=e),L(`click`,ae,()=>pF.clearAuditFilters()),z(e,r),D()}Hr([`change`,`click`]);var gF=R(`Live stream connecting…`),_F=R(` `),vF=R(`Live`),yF=R(` `);function bF(e,t){E(t,!0);let n=O(()=>bC.auditLivePauseReason()),r=O(()=>bC.liveLogsStreaming&&!I(n));var i=Qr(),a=N(i),o=e=>{var t=yF(),i=M(t);let a;var o=P(i,2),s=e=>{z(e,gF())},c=e=>{var t=_F(),r=M(t,!0);T(t),F(e=>B(r,e),[()=>gC(I(n))]),z(e,t)},l=e=>{z(e,vF())};V(o,e=>{bC.liveLogsStreaming?I(n)?e(c,1):e(l,-1):e(s)}),T(t),F(()=>a=U(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":I(r)})),z(e,t)},s=O(()=>_s.liveLogsVisible());V(a,e=>{I(s)&&e(o)}),z(e,i),D()}var xF=R(` `),SF=R(``);function CF(e,t){E(t,!0);let n=O(()=>[{key:`provider`,text:fc(t.entry)||`-`},{key:`model`,text:t.entry.requested_model||t.entry.model||`-`,mono:!0},{key:`user_path`,text:t.entry.user_path,mono:!0},{key:`request_id`,text:`request_id: `+(t.entry.request_id||`-`),mono:!0},{key:`ip`,text:t.entry.client_ip&&`ip: `+t.entry.client_ip,mono:!0},{key:`auth_key_id`,text:t.entry.auth_key_id&&`auth_key_id: `+t.entry.auth_key_id,mono:!0},{key:`alias`,text:t.entry.alias_used&&`alias`,class:`audit-alias-badge`},{key:`resolved`,text:t.entry.alias_used&&t.entry.resolved_model&&`resolved: `+hc(t.entry),mono:!0},{key:`failover`,text:MP(t.entry)&&`failover: `+MP(t.entry),mono:!0},{key:`stream`,text:t.entry.stream&&`stream`},{key:`error_type`,text:t.entry.error_type}].filter(e=>!!e.text));var r=SF(),i=P(M(r),2);H(i,21,()=>I(n),e=>e.key,(e,t)=>{var n=xF(),r=M(n,!0);T(n),F(()=>{U(n,1,Fi([`provider-badge`,I(t).class,{mono:I(t).mono}]),`svelte-hyopt0`),B(r,I(t).text)}),z(e,n)}),T(i),T(r),z(e,r),D()}var wF=R(``),TF=R(` `);function EF(e,t){E(t,!0);let n=O(()=>zP(t.entry)),r=O(()=>I(n).length>0?VP(t.entry):``),i=O(()=>I(n).length>0?BP(t.entry):``);var a=Qr(),o=N(a),s=e=>{var a=TF(),o=M(a);H(o,21,()=>I(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=wF();let r;F(e=>{r=U(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(I(t)&&I(t).success),"audit-attempt-error":!(I(t)&&I(t).success)}),W(n,`title`,e)},[()=>HP(I(t))]),z(e,n)}),T(o);var s=P(o,2),c=M(s,!0);T(s),T(a),F(()=>{W(a,`title`,I(r)),W(a,`aria-label`,I(r)),B(c,I(i))}),z(e,a)};V(o,e=>{I(n).length>0&&e(s)}),z(e,a),D()}var DF=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function OF(e){if(e==null)return``;if(typeof e==`string`)return e.trim();if(Array.isArray(e))return e.map(e=>typeof e==`string`?e:!e||typeof e!=`object`?``:typeof e.text==`string`?e.text:typeof e.output_text==`string`?e.output_text:``).filter(Boolean).join(` -`).trim();if(typeof e==`object`){if(typeof e.text==`string`)return e.text.trim();try{return JSON.stringify(e,null,2)}catch{return``}}return String(e).trim()}function kF(e){if(e==null)return[];if(typeof e==`string`)return e?[e]:[];if(Array.isArray(e))return e.flatMap(e=>typeof e==`string`?e?[e]:[]:!e||typeof e!=`object`?[]:typeof e.text==`string`?e.text?[e.text]:[]:typeof e.output_text==`string`&&e.output_text?[e.output_text]:[]);if(typeof e==`object`)return typeof e.text==`string`&&e.text?[e.text]:[];let t=String(e);return t?[t]:[]}function AF(e){if(e==null)return[];if(typeof e==`string`){let t=e.trim();return t?[{role:`user`,text:t}]:[]}if(!Array.isArray(e)){let t=OF(e);return t?[{role:`user`,text:t}]:[]}return e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.role||`user`).toLowerCase(),n=OF(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function jF(e){return!e||typeof e!=`object`?``:Array.isArray(e.content)?e.content.map(e=>e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(` -`).trim():OF(e.content)}function MF(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...kF(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||t.push(...kF(e.content))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{!e||typeof e!=`object`||(t.push(...kF(e.content)),typeof e.text==`string`&&t.push(e.text))}):e.input&&typeof e.input==`object`&&(t.push(...kF(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var NF=e=>OF(e);function PF(e){if(!e||!e.data)return``;let t=tP(e.data.response_body,0,NF);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?tP($N(e),0,NF)||e:``}return tP(n,0,NF)||OF(n)}function FF(e){return Array.isArray(e)?e.some(e=>!e||typeof e!=`object`?!1:e.type===`message`||e.role===`assistant`||e.role===`user`||e.role===`system`?!0:Array.isArray(e.content)?e.content.some(e=>!e||typeof e!=`object`?!1:typeof e.text==`string`||e.type===`output_text`||e.type===`input_text`):!1):!1}function IF(e){if(!e)return!1;let t=String(e).toLowerCase();return t===`/v1/embeddings`||t===`/v1/embeddings/`||t.startsWith(`/v1/embeddings?`)||t.startsWith(`/v1/embeddings/`)}function LF(e){return e?!!zF(e):!1}function RF(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function zF(e){switch(RF(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function BF(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function VF(e,t){if(!t||typeof t!=`object`)return;let n=e[e.length-1];try{if(n&&JSON.stringify(n)===JSON.stringify(t))return}catch{}e.push(t)}function HF(e){let t=zF(e&&e.path),n=e&&e.data&&e.data.request_body;return!t||!n||typeof n!=`object`?!1:t!==`responses`||(e.data&&e.data.response_body&&typeof e.data.response_body.id==`string`?e.data.response_body.id.trim():``)!==``||xI(n)!==``}function UF(e,t){let n=String(t||``).trim(),r=zF(e&&e.path),i=BF(e&&e.data&&e.data.request_body);if(!n||!r||!i)return null;let a=e&&e.data?e.data.response_body:null;if(r===`responses`){let e=a&&typeof a.id==`string`?a.id.trim():``,t=xI(i);return!e&&!t?null:(i.input=n,e&&!t?i.previous_response_id=e:delete i.previous_response_id,i)}let o=Array.isArray(i.messages)?i.messages:[];if(r===`chat`){let e=a&&Array.isArray(a.choices)?a.choices[0]:null;e&&e.message&&VF(o,BF(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&VF(o,{role:String(a.role||`assistant`),content:BF(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var WF=new Set(`authorization.proxy-authorization.cookie.content-type.content-length.host.accept.connection.accept-encoding.content-encoding.transfer-encoding.user-agent.date.expect.upgrade.via.te.trailer.keep-alive.origin.referer.forwarded.x-real-ip.traceparent.tracestate.x-request-id.idempotency-key.x-idempotency-key.x-gomodel-timezone.x-gomodel-interaction-parent`.split(`.`));function GF(e,t,n=``){let r=e&&e.data&&e.data.request_headers,i={};return r&&typeof r==`object`&&Object.keys(r).forEach(e=>{let t=String(e).toLowerCase(),n=String(r[e]==null?``:r[e]);!e||!n||n===`[REDACTED]`||WF.has(t)||t.startsWith(`sec-`)||t.startsWith(`cf-`)||t.startsWith(`x-forwarded-`)||(i[e]=n)}),i[`X-GoModel-Interaction-Parent`]=String(t||e&&e.id||``).trim(),String(n||``).trim()&&(i[`X-Request-ID`]=String(n).trim()),i}function KF(e,t){let n=String(t||``).trim();return!n||!Array.isArray(e)?null:e.find(e=>String(e&&e.request_id||``).trim()===n)||null}function qF(e,t,n,r,i){let a=Array.isArray(e)?e:[],o=String(i&&i.id||``).trim(),s=String(i&&i.request_id||``).trim(),c=String(i&&i.session_id||``).trim(),l=String(r||``).trim(),u=JF(i),d=a.some(e=>o&&String(e&&e.id||``).trim()===o||s&&String(e&&e.request_id||``).trim()===s),f=!!l&&s===l,p=!!n&&c===String(n).trim(),m=!!u&&(u===String(t||``).trim()||a.some(e=>String(e&&e.id||``).trim()===u)),h=d||f||!l&&(p||m);return{accepted:h,submittedChild:f,followUpRequestID:h&&f&&o?``:l}}function JF(e){let t=e&&e.data&&e.data.request_headers;if(!t||typeof t!=`object`)return``;let n=Object.keys(t).find(e=>e.toLowerCase()===`x-gomodel-interaction-parent`);return n?String(t[n]||``).trim():``}function YF(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function XF(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?SI(t,e)>=0?t:e:t,null)}function ZF(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return XF((Array.isArray(e)?e:[]).filter(e=>{let t=String(e&&e.id||``);return n.has(t)&&e&&e.data&&e.data.request_body!=null}))}function QF(e,t){let n=XF(e);return!!n&&String(n.id||``)===String(t||``)}function $F(e){if(e&&e.conversation_payload)return!0;let t=e&&e.data?e.data.request_body:null,n=e&&e.data?e.data.response_body:null,r=t&&(Array.isArray(t.messages)||t.input!==void 0||typeof t.instructions==`string`||typeof t.previous_response_id==`string`),i=n&&(Array.isArray(n.choices)||FF(n.output));return!!(r||i)}function eI(e){return!e||IF(e.path)?!1:LF(e.path)||$F(e)}function tI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function aI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function oI(e){let t=Number(e||0);if(!Number.isFinite(t)||t<=0)return`0 B`;let n=[`B`,`KB`,`MB`,`GB`],r=0,i=t;for(;i>=1024&&r`
        `+iI(t)+``+iI(cI(e[t]))+`
        `);return t.length?``:``}function uI(e){let t=sI(e.content_type),n=iI(t+` · `+oI(e.bytes)),r=lI(e.meta);if(e.stored&&e.encoding===`base64`&&e.data){let i=String(e.data).replace(/[^A-Za-z0-9+/=]/g,``);return`
        `+n+`
        `+r+`
        `}let i=e.too_large?`Audio too large to store.`:`Audio not logged. Set LOGGING_LOG_AUDIO_BODIES=true to capture playable audio.`;return`
        `+n+`
        `+iI(i)+`
        `+r+`
        `}function dI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function fI(e){if(!e||typeof e!=`object`)return null;let t=Number(e.characters||0);if(!Number.isFinite(t)||t<=0)return null;let n=Array.isArray(e.segments)?e.segments.map(e=>String(e||``)).filter(Boolean):[];return n.length===0?null:{remaining:Math.floor(t),segments:n,segmentIndex:0}}function pI(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return iI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+iI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+iI(e.slice(r)):iI(e)}function mI(e,t,n){let r=n&&typeof n.formatJSON==`function`?n.formatJSON:e=>String(e),i=n&&typeof n.canShowConversation==`function`?n.canShowConversation:()=>!1,a=fI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return iI(o);if(!i(e))return o.split(` -`).map(e=>pI(e,a)).join(` -`);let s=o.split(` -`),c=[],l=0;for(;lpI(e,a)).join(` -`);c.push(``+o+``),l=r+1;continue}c.push(pI(e,a)),l++}return c.join(` -`)}function hI(e){let t=String(e||``).toLowerCase();return t===`system`||t===`developer`?{role:`system`,label:`System Prompt`,className:`role-system`}:t===`assistant`?{role:`assistant`,label:`Agent`,className:`role-assistant`}:t===`error`?{role:`error`,label:`Error`,className:`role-error`}:t===`function_call`?{role:`function_call`,label:`Function Call`,className:`role-function-call`}:t===`function_result`?{role:`function_result`,label:`Function Result`,className:`role-function-result`}:{role:`user`,label:`User`,className:`role-user`}}function gI(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c}){let l=hI(e);return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:l.role,roleLabel:l.label,roleClass:l.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``}}function _I(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e;return{name:t.name||e.name||``,arguments:t.arguments||e.arguments||``}}).filter(Boolean):[]}function vI(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{!t||!Array.isArray(t.tool_calls)||t.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{if(!t||typeof t!=`object`||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)}),n&&Array.isArray(n.choices)){let t=n.choices[0];t&&t.message&&Array.isArray(t.message.tool_calls)&&t.message.tool_calls.forEach(t=>{if(!t)return;let n=t.id||``,r=(t.function||t).name||t.name||``;n&&r&&(e[n]=r)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{if(!t||t.type!==`function_call`)return;let n=t.id||t.call_id||``,r=t.name||``;n&&r&&(e[n]=r)})}function yI(e){return Array.isArray(e)?`[`+e.map(yI).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+yI(e[t])).join(`,`)+`}`:JSON.stringify(e)}function bI(e){if(!e||typeof e!=`object`)return null;let t=[];if(e.system!==void 0&&t.push({system:e.system}),e.instructions!==void 0&&t.push({instructions:e.instructions}),Array.isArray(e.messages))t.push(...e.messages);else if(Array.isArray(e.input)&&e.previous_response_id==null&&e.conversation==null)t.push(...e.input);else return null;return t.map(yI)}function xI(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function SI(e,t){let n=new Date(e&&e.timestamp).getTime(),r=new Date(t&&t.timestamp).getTime();if(Number.isFinite(n)&&Number.isFinite(r)&&n!==r)return n-r;let i=String(e&&e.timestamp||``).localeCompare(String(t&&t.timestamp||``));if(i!==0)return i;let a=String(e&&e.id||``),o=String(t&&t.id||``);return ao)}function CI(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(SI),r={};n.forEach(e=>{let t=e.data&&e.data.request_body?e.data.request_body:null,n=e.data&&e.data.response_body?e.data.response_body:null;vI(r,t,n)});let i=[],a=new Set,o=new Set,s=new Set,c=[],l=null,u=0,d=n.findIndex(e=>e.id===t),f=e=>JSON.stringify({role:e.role,text:e.text,toolCalls:e.toolCalls,functionName:e.functionName});return n.forEach((e,n)=>{let p=e.id===t,m=d>=0&&n>d,h=e.timestamp,g=e.data&&e.data.request_body?e.data.request_body:null,_=e.data&&e.data.response_body?e.data.response_body:null,v=i.length,y=(t,n,{toolCalls:r,functionName:i}={})=>gI(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i});if(g&&g.system!==void 0){let e=OF(g.system);e&&i.push(y(`system`,e))}if(g&&g.instructions!==void 0){let e=OF(g.instructions);e&&i.push(y(`system`,e))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=OF(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(y(`function_result`,t,{functionName:n}));return}if(t===`assistant`){let n=OF(e.content),r=_I(e.tool_calls);(n||r.length>0)&&i.push(y(t,n,{toolCalls:r}));return}let n=OF(e.content);n&&i.push(y(t,n))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`){let t=typeof e.output==`string`?e.output:OF(e.output);t&&i.push(y(`function_result`,t,{functionName:r[e.call_id]||``}))}else if(e.type===`function_call`)i.push(y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]}));else if(e.role){let t=String(e.role).toLowerCase(),n=OF(e.content);n&&i.push(y(t,n))}}}):AF(g.input).forEach(e=>{e.text&&i.push(y(e.role,e.text))}));let b=i.splice(v),x=b.map(f),S=bI(g),C=S!==null,w=JF(e),ee=!!w&&a.has(w),te=String(g&&g.previous_response_id||``).trim(),ne=xI(g),re=ee||!!te&&o.has(te)||!!ne&&s.has(ne);if(m){let e=C&&l&&l.length>0&&l.every((e,t)=>S[t]===e);if(C&&!e&&!ee||!C&&!re)return}p&&C&&(l=[...S]);let ie=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ie&&(p||m)&&a.add(ie),ne&&s.add(ne);let ae=0;for(;ae0;){let t=c.slice(-e),n=x.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...b.slice(e)),c.push(...x.slice(e))}if(_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=OF(e.message.content),r=_I(e.message.tool_calls);if(n||r.length>0){let e=y(t,n,{toolCalls:r});i.push(e),c.push(f(e))}}}if(_&&Array.isArray(_.output)&&_.output.forEach(e=>{if(!e)return;if(e.type===`function_call`){let t=y(`function_call`,``,{toolCalls:[{name:e.name||``,arguments:e.arguments||``}]});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=jF(e);if(n){let e=y(t,n);i.push(e),c.push(f(e))}}),_&&_.content!==void 0&&!Array.isArray(_.choices)&&!Array.isArray(_.output)){let e=String(_.role||`assistant`).toLowerCase(),t=OF(_.content);if(t){let n=y(e,t);i.push(n),c.push(f(n))}}let oe=PF(e);oe&&i.push(y(`error`,oe));let se=String(_&&_.id||``).trim();se&&o.add(se)}),{messages:i,entryIDs:[...a]}}function wI(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){let t=e.arguments||``;try{t=JSON.stringify(JSON.parse(t),null,2)}catch{}return e.name+`(`+t+`)`}).join(` - -`):e.text||``}var TI=600*1e3,EI=15*1e3,DI=250,OI=class{#e=k(!1);get conversationOpen(){return I(this.#e)}set conversationOpen(e){A(this.#e,e,!0)}#t=k(!1);get conversationLoading(){return I(this.#t)}set conversationLoading(e){A(this.#t,e,!0)}#n=k(``);get conversationError(){return I(this.#n)}set conversationError(e){A(this.#n,e,!0)}#r=k(``);get conversationAnchorID(){return I(this.#r)}set conversationAnchorID(e){A(this.#r,e,!0)}#i=k(j([]));get conversationEntries(){return I(this.#i)}set conversationEntries(e){A(this.#i,e,!0)}#a=k(j([]));get conversationMessages(){return I(this.#a)}set conversationMessages(e){A(this.#a,e,!0)}#o=k(j([]));get conversationBranchEntryIDs(){return I(this.#o)}set conversationBranchEntryIDs(e){A(this.#o,e,!0)}#s=k(``);get conversationSessionID(){return I(this.#s)}set conversationSessionID(e){A(this.#s,e,!0)}#c=k(!1);get conversationTruncated(){return I(this.#c)}set conversationTruncated(e){A(this.#c,e,!0)}#l=k(!1);get conversationFollowLatest(){return I(this.#l)}set conversationFollowLatest(e){A(this.#l,e,!0)}#u=k(``);get conversationOpenedFromID(){return I(this.#u)}set conversationOpenedFromID(e){A(this.#u,e,!0)}#d=k(``);get followUpText(){return I(this.#d)}set followUpText(e){A(this.#d,e,!0)}#f=k(!1);get followUpSending(){return I(this.#f)}set followUpSending(e){A(this.#f,e,!0)}#p=k(``);get followUpError(){return I(this.#p)}set followUpError(e){A(this.#p,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#m=k(null);get conversationDialogEl(){return I(this.#m)}set conversationDialogEl(e){A(this.#m,e,!0)}#h=k(null);get conversationCloseBtnEl(){return I(this.#h)}set conversationCloseBtnEl(e){A(this.#h,e,!0)}#g=k(null);get conversationThreadEl(){return I(this.#g)}set conversationThreadEl(e){A(this.#g,e,!0)}canShowConversation(e){return eI(e)}startBodyInteraction(e){this.bodyPointerStart={x:e.clientX,y:e.clientY}}_isBodyDrag(e){if(!this.bodyPointerStart)return!1;let t=Math.abs(e.clientX-this.bodyPointerStart.x),n=Math.abs(e.clientY-this.bodyPointerStart.y);return t>4||n>4}_hasActiveSelection(){let e=window.getSelection?window.getSelection():null;return!e||e.isCollapsed?!1:String(e.toString()||``).trim().length>0}handleBodyConversationClick(e,t){let n=this._isBodyDrag(e);if(this.bodyPointerStart=null,n||this._hasActiveSelection()||!this.canShowConversation(t))return;let r=e.target&&e.target.closest?e.target.closest(`[data-conversation-trigger="1"]`):null;r&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,r))}handleErrorConversationClick(e,t){let n=this._isBodyDrag(e);this.bodyPointerStart=null,!n&&(this._hasActiveSelection()||this.canShowConversation(t)&&(e.preventDefault(),e.stopPropagation(),this.openConversation(t,e.currentTarget)))}formatJSON(e){return tc(e)}renderBodyWithConversationHighlights(e,t,n){return mI(e,t,{formatJSON:e=>this.formatJSON(e),canShowConversation:e=>this.canShowConversation(e),promptCacheHighlight:n&&n.promptCacheHighlight})}async openConversation(e,t){if(!e||!e.id||!this.canShowConversation(e))return;let n=document.activeElement instanceof HTMLElement?document.activeElement:null;t instanceof HTMLElement?this.conversationReturnFocusEl=t:n&&n!==document.body&&(this.conversationReturnFocusEl=n);let r=++this.conversationRequestToken;if(this.conversationOpen=!0,this.conversationError=``,this.conversationAnchorID=e.id,this.conversationOpenedFromID=e.id,this.conversationSessionID=String(e.session_id||``).trim(),this.conversationEntries=[],this.conversationMessages=[],this.conversationBranchEntryIDs=[],this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,document.body.classList.add(`conversation-drawer-open`),requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this.applyLiveConversationEntry(e),this._scheduleLatestScroll();return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof bC.auditEntryLiveDetailPending==`function`&&bC.auditEntryLiveDetailPending(e)}applyLiveConversationEntry(e){let t=[...this.conversationEntries||[]],n=String(e.id||``).trim(),r=String(e.request_id||``).trim(),i=t.findIndex(e=>n&&String(e.id||``).trim()===n||r&&String(e.request_id||``).trim()===r);i>=0?t.splice(i,1,{...t[i],...e}):t.push(e),this.conversationEntries=t,!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(t),this.conversationFollowLatest&&this._scheduleLatestScroll()}_applyConversationView(e){let t=CI(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=ZF(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id),t=CI(e,this.conversationAnchorID))}this.conversationBranchEntryIDs=t.entryIDs,this.conversationMessages=t.messages}refreshLiveConversation(e){if(!this.conversationOpen||!e)return;let t=String(e.id||``).trim(),n=qF(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(!n.accepted)return;this.followUpRequestID=n.followUpRequestID,t&&n.submittedChild&&(this.conversationAnchorID=t,this.conversationFollowLatest=!0);let r=String(e._live_state||``).trim();if(r===`audit.flushed`||r===`audit.detail`){this.applyLiveConversationEntry(e),this.conversationMessages.length===0&&(this.conversationLoading=!0);let n=++this.conversationRequestToken;this.fetchConversation(this.conversationAnchorID||t,n,!1);return}this.applyLiveConversationEntry(e)}conversationLiveWaiting(){if(!this.conversationOpen)return!1;let e=new Set(this.conversationBranchEntryIDs||[]);return(this.conversationEntries||[]).some(t=>e.has(String(t&&t.id||``))&&t._live&&(typeof bC.liveAuditStateSettled!=`function`||!bC.liveAuditStateSettled(t._live_state)))}conversationLiveStatusText(){return(this.conversationMessages||[]).length>0?`Model is responding…`:`Waiting for request data…`}closeConversation(){this.followUpAbort&&this.followUpAbort.abort(),this.conversationOpen=!1,this.conversationRequestToken++,this.conversationSessionID=``,this.conversationBranchEntryIDs=[],this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1,document.body.classList.remove(`conversation-drawer-open`);let e=this.conversationReturnFocusEl;this.conversationReturnFocusEl=null,e&&typeof e.focus==`function`&&document.contains(e)&&requestAnimationFrame(()=>e.focus())}_focusConversationDrawer(){if(!this.conversationOpen)return;let e=this.conversationCloseBtnEl;if(e&&typeof e.focus==`function`){e.focus();return}let t=this.conversationDialogEl;t&&typeof t.focus==`function`&&t.focus()}async fetchConversation(e,t,n=!0,r=!1){try{let i=await fs(`/admin/audit/conversation?`+(`log_id=`+encodeURIComponent(e)+`&limit=120`),{label:`audit conversation`});if(t!==this.conversationRequestToken||i.stale)return;if(!i.ok){this.conversationError=`Unable to load interactions.`,this.conversationEntries=[],this.conversationMessages=[],this.conversationBranchEntryIDs=[];return}let a=i.data||{},o=a.anchor_id||e;this.conversationEntries=Array.isArray(a.entries)?a.entries:[],r&&(this.conversationFollowLatest=QF(this.conversationEntries,o)),this.conversationAnchorID=o;let s=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);s&&s.session_id&&(this.conversationSessionID=String(s.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(this.conversationEntries),this.conversationFollowLatest?this._scheduleLatestScroll():n&&this._scheduleAnchorScroll()}catch(e){if(t!==this.conversationRequestToken)return;console.error(`Failed to fetch audit conversation:`,e),this.conversationError=`Failed to load interactions.`,this.conversationEntries=[],this.conversationMessages=[],this.conversationBranchEntryIDs=[]}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return YF(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return HF(e)?zF(e.path):``}canSendFollowUp(){return!!this.followUpKind()&&!!String(this.followUpText||``).trim()&&!this.followUpSending&&!this.conversationLiveWaiting()}async sendFollowUp(){if(!this.canSendFollowUp())return;let e=this.selectedConversationEntry(),t=UF(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=AI(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},TI);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=GF(e,n,r),o=await us(e.path,{method:`POST`,headers:a,body:JSON.stringify(t),signal:i.signal}),s=String(o.headers.get(`X-Request-ID`)||``).trim();if(s&&this.followUpRequestID&&(this.followUpRequestID=s),!o.ok){let e=`Unable to send message.`;try{let t=await o.json();e=t&&t.error&&t.error.message||e}catch{}this.followUpError=e,(this.followUpRequestID===r||this.followUpRequestID===s)&&(this.followUpRequestID=``);return}if(this.followUpText=``,await kI(o),!bC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){ms(e)||i.signal.aborted?a&&this.conversationOpen&&(this.followUpError=`The request timed out.`):(console.error(`Failed to send interaction follow-up:`,e),this.followUpError=`Failed to send message.`)}finally{clearTimeout(o),this.followUpAbort===i&&(this.followUpAbort=null,this.followUpSending=!1)}}async _selectPersistedFollowUp(e,t,n,r){let i=Date.now()+EI;for(;this.conversationOpen&&n===this.conversationRequestToken&&Date.now(){let e=this.conversationThreadEl;if(!e)return;let t=e.querySelectorAll(`[data-conversation-anchor="true"]`),n=t[t.length-1];n&&typeof n.scrollIntoView==`function`&&n.scrollIntoView({block:`center`})})}_scheduleLatestScroll(){requestAnimationFrame(()=>{let e=this.conversationThreadEl;if(!e)return;let t=e.lastElementChild;t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`end`})})}};async function kI(e){let t=e&&e.body&&typeof e.body.getReader==`function`?e.body.getReader():null;if(!t){await e.text();return}for(;!(await t.read()).done;);}function AI(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function jI(e,t){return new Promise((n,r)=>{let i,a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};if(i=setTimeout(()=>{t&&t.removeEventListener(`abort`,a),n()},e),t){if(t.aborted){a();return}t.addEventListener(`abort`,a,{once:!0})}})}var MI=new OI;bC.refreshLiveConversation=e=>MI.refreshLiveConversation(e);var NI=R(``),PI=R(` `),FI=R(``),II=R(`
        `);function LI(e,t){E(t,!0);let n=G(t,`thread`,3,null),r=G(t,`expanded`,3,!1),i=G(t,`onactivate`,3,null);function a(e){e.preventDefault(),i()&&i()()}function o(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function s(e){e.stopPropagation(),e.preventDefault(),pF.expandAuditEntry(t.entry),MI.openConversation(t.entry,e.currentTarget)}var c=II();let l;var u=M(c),d=M(u),f=e=>{var t=NI(),r=M(t);{let e=O(()=>n().expanded?za:Ba);K(r,{get icon(){return I(e)},class:`audit-thread-expander-svg`})}var i=P(r,2),a=M(i,!0);T(i),T(t),F(()=>{W(t,`aria-expanded`,n().expanded),W(t,`title`,`Session with `+n().count+` requests`),W(t,`aria-label`,`Session with `+n().count+` requests, `+(n().expanded?`collapse`:`expand`)),B(a,n().count)}),L(`click`,t,o),z(e,t)};V(d,e=>{n()&&e(f)});var p=P(d,2),m=M(p,!0);T(p);var h=P(p,2),g=M(h,!0);T(h);var _=P(h,2),v=e=>{var n=PI(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>gc(t.entry)]),z(e,n)};V(_,e=>{(t.entry.requested_model||t.entry.model)&&e(v)});var y=P(_,2),b=M(y,!0);T(y),T(u);var x=P(u,2),S=M(x);EF(S,{get entry(){return t.entry}});var C=P(S,2),w=M(C,!0);T(C);var ee=P(C,2),te=M(ee,!0);T(ee);var ne=P(ee,2),re=e=>{var t=FI();K(M(t),{get icon(){return Ba},class:`audit-conversation-trigger-svg`}),T(t),L(`click`,t,s),z(e,t)},ie=O(()=>MI.canShowConversation(t.entry));V(ne,e=>{I(ie)&&e(re)}),T(x),T(c),F((e,n,i,a,o)=>{l=U(c,1,`audit-entry-summary svelte-17mysgz`,null,l,e),W(c,`aria-expanded`,r()),U(p,1,`audit-status-badge ${n??``}`,`svelte-17mysgz`),B(m,t.entry.status_code||`-`),B(g,t.entry.method||`-`),B(b,t.entry.path||`-`),W(C,`title`,i),B(w,a),B(te,o)},[()=>({"audit-entry-summary-live-in-progress":jP(t.entry)}),()=>AP(t.entry.status_code),()=>uc(t.entry.timestamp),()=>os.formatTimestamp(t.entry.timestamp),()=>kP(t.entry.duration_ns)]),L(`click`,c,a),z(e,c),D()}Hr([`click`]);var RI=R(``);function zI(e,t){E(t,!0);let n=G(t,`label`,3,`Copy`),r=G(t,`copiedLabel`,3,`Copied`),i=G(t,`errorLabel`,3,``),a=G(t,`class`,3,`btn`),o=O(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=RI();let c;var l=M(s),u=e=>{K(e,{get icon(){return Ha},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{K(e,{get icon(){return Ga},width:`14`,height:`14`})};V(l,e=>{t.state.copied?e(u):e(d,-1)});var f=P(l,2),p=M(f,!0);T(f),T(s),F(()=>{c=U(s,1,Fi([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),B(p,I(o))}),L(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),z(e,s),D()}Hr([`click`]);var BI=R(`
        Error Message
         
        `),VI=R(`
         
        `),HI=R(` `),UI=R(` streaming`),WI=R(`
        Body
        `),GI=R(`

        `),KI=R(`

        `),qI=R(`

        `),JI=R(`
        `);function YI(e,t){E(t,!0);let n=aM({logPrefix:`Failed to copy audit payload:`}),r=aM({logPrefix:`Failed to copy audit payload:`}),i=O(()=>t.pane&&t.pane.showHeaders?tc(t.pane.headers):``),a=O(()=>!t.pane||!t.pane.showBody?``:aI(t.pane.body)?uI(t.pane.body):MI.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=O(()=>!!(t.pane&&MI.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),MI.handleErrorConversationClick(e,t.pane.entry))}var c=JI();let l;var u=M(c),d=e=>{var n=BI(),r=P(M(n),2);let i;var a=M(r,!0);T(r),T(n),F(()=>{i=U(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":I(o)}),W(r,`role`,I(o)?`button`:null),W(r,`tabindex`,I(o)?0:null),B(a,t.pane.errorMessage)}),L(`mousedown`,r,e=>MI.startBodyInteraction(e)),L(`keydown`,r,s),L(`click`,r,e=>MI.handleErrorConversationClick(e,t.pane.entry)),z(e,n)};V(u,e=>{t.pane.showErrorMessage&&e(d)});var f=P(u,2),p=e=>{var n=VI(),a=M(n),o=M(a),s=M(o,!0);T(o),zI(P(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,tc)}),T(a);var c=P(a,2),l=M(c,!0);T(c),T(n),F(()=>{B(s,t.pane.headersTitle||`Headers`),B(l,I(i))}),z(e,n)};V(f,e=>{t.pane.showHeaders&&e(p)});var m=P(f,2),h=e=>{var r=WI(),i=M(r),o=M(i),s=P(M(o),2),c=e=>{var n=HI(),r=M(n,!0);T(n),F(()=>B(r,t.pane.bodyCacheRatioLabel)),z(e,n)};V(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=P(s,2),u=e=>{z(e,UI())};V(l,e=>{t.pane.streaming&&e(u)}),T(o),zI(P(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,tc)}),T(i);var d=P(i,2);hi(d,()=>I(a),!0),T(d),T(r),L(`mousedown`,d,e=>MI.startBodyInteraction(e)),L(`click`,d,e=>MI.handleBodyConversationClick(e,t.pane.entry)),z(e,r)};V(m,e=>{t.pane.showBody&&e(h)});var g=P(m,2),_=e=>{var n=GI(),r=M(n,!0);T(n),F(()=>B(r,t.pane.emptyMessage)),z(e,n)};V(g,e=>{t.pane.showEmpty&&e(_)});var v=P(g,2),y=e=>{var n=KI(),r=P(M(n),2),i=M(r,!0);T(r),T(n),F(()=>B(i,t.pane.pendingMessage)),z(e,n)};V(v,e=>{t.pane.showPending&&e(y)});var b=P(v,2),x=e=>{var n=qI(),r=M(n,!0);T(n),F(()=>B(r,t.pane.tooLargeMessage)),z(e,n)};V(b,e=>{t.pane.showTooLarge&&e(x)}),T(c),F(()=>l=U(c,1,`audit-pane svelte-1h5puht`,null,l,{"audit-pane-split":t.pane&&t.pane.layout===`split`,"audit-pane-split-single":t.pane&&t.pane.layout===`split`&&!(t.pane.showHeaders&&t.pane.showBody)})),z(e,c),D()}Hr([`mousedown`,`keydown`,`click`]);var XI=R(` `),ZI=R(` `),QI=R(` `),$I=R(` `),eL=R(``),tL=R(`
        `),nL=R(`
        `);function rL(e,t){E(t,!0);let n=G(t,`panes`,19,()=>[]),r=k(null),i=O(()=>lF(I(r),t.entry,n())),a=e=>`audit-tab-`+t.entry.id+`-`+e,o=e=>`audit-tabpanel-`+t.entry.id+`-`+e;function s(e,t){let i=n().map(e=>e.id),a=uF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),A(r,a,!0))}var c=nL(),l=M(c);H(l,21,n,e=>e.id,(e,t)=>{var n=eL();let c;var l=M(n),u=M(l),d=e=>{K(e,{get icon(){return ja}})},f=e=>{K(e,{get icon(){return Aa}})};V(u,e=>{I(t).pane.direction===`request`?e(d):I(t).pane.direction===`response`&&e(f,1)}),T(l);var p=P(l,2),m=M(p,!0);T(p);var h=P(p,2),g=e=>{var n=XI(),r=M(n);T(n),F(()=>B(r,`#${I(t).pane.seq??``}`)),z(e,n)};V(h,e=>{I(t).pane.seq&&e(g)});var _=P(h,2),v=e=>{var n=ZI(),r=M(n,!0);T(n),F(()=>{U(n,1,`provider-badge audit-pane-kind audit-pane-kind-${I(t).pane.kind??``}`,`svelte-1bc5vi5`),B(r,I(t).pane.kind)}),z(e,n)};V(_,e=>{I(t).pane.kind&&e(v)});var y=P(_,2);H(y,17,()=>I(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=QI(),r=M(n,!0);T(n),F(()=>{W(n,`title`,I(t).title),B(r,I(t).label)}),z(e,n)});var b=P(y,2),x=e=>{var n=$I(),r=M(n,!0);T(n),F(()=>B(r,I(t).pane.savingsLabel)),z(e,n)};V(b,e=>{I(t).pane.savingsLabel&&e(x)});var S=P(b,2),C=e=>{var n=ZI(),r=M(n,!0);T(n),F(e=>{U(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),B(r,I(t).pane.statusCode)},[()=>AP(I(t).pane.statusCode)]),z(e,n)};V(S,e=>{I(t).pane.statusCode&&e(C)}),T(n),F((e,r)=>{c=U(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":I(i)===I(t).id}),W(n,`aria-selected`,I(i)===I(t).id),W(n,`id`,e),W(n,`aria-controls`,r),W(n,`tabindex`,I(i)===I(t).id?0:-1),U(l,1,Fi([`audit-pane-icon`,I(t).pane.direction&&`audit-pane-icon-${I(t).pane.direction}`]),`svelte-1bc5vi5`),B(m,I(t).pane.title)},[()=>a(I(t).id),()=>o(I(t).id)]),L(`keydown`,n,e=>s(e,I(t).id)),L(`click`,n,()=>A(r,I(t).id,!0)),z(e,n)}),T(l),H(P(l,2),17,n,e=>e.id,(e,t)=>{var n=tL();let r;YI(M(n),{get pane(){return I(t).pane}}),T(n),F((e,a)=>{W(n,`id`,e),W(n,`aria-labelledby`,a),r=Hi(n,``,r,{display:I(i)===I(t).id?null:`none`})},[()=>o(I(t).id),()=>a(I(t).id)]),z(e,n)}),T(c),z(e,c),D()}Hr([`keydown`,`click`]);var iL=R(`
        `),aL=R(`
        `);function oL(e,t){E(t,!0);let n=G(t,`thread`,3,null),r=O(()=>pF.isAuditEntryExpanded(t.entry)),i=O(()=>MI.conversationOpen&&String(MI.conversationAnchorID||``)===String(t.entry.id||``)),a=O(()=>I(r)?sF(t.entry,MF):[]),o=O(()=>I(r)?nN(t.entry,ZN.auditEntryWorkflow(t.entry),ZN.workflowFeatureCaps()):null);function s(){pF.toggleAuditEntryExpanded(t.entry)}var c=aL();let l;var u=M(c);LI(u,{get entry(){return t.entry},get thread(){return n()},get expanded(){return I(r)},onactivate:s});var d=P(u,2),f=e=>{var n=iL(),r=M(n),i=e=>{vM(e,{get chart(){return I(o)}})};V(r,e=>{I(o)&&e(i)});var s=P(r,2);rL(s,{get entry(){return t.entry},get panes(){return I(a)}}),CF(P(s,2),{get entry(){return t.entry}}),T(n),ki(3,n,()=>Hs,()=>({y:-6,duration:YN(150)})),z(e,n)};V(d,e=>{I(r)&&e(f)}),T(c),F(()=>l=U(c,1,`audit-entry svelte-cmjgwr`,null,l,{"audit-entry-interactions-open":I(i)})),z(e,c),D()}var sL=R(`
        `),cL=R(`
        `),lL=R(`

        `),uL=R(`
        `),dL=R(`
        `);function fL(e,t){E(t,!0);let n=O(()=>pP(t.entry)),r=O(()=>pF.isThreadExpanded(I(n))),i=O(()=>pF.threadChildren(I(n))),a=O(()=>I(i)&&!I(i).loading&&Number(I(i).total||0)>I(i).entries.length+1);var o=Qr(),s=N(o),c=e=>{oL(e,{get entry(){return t.entry}})},l=O(()=>!hP(t.entry)),u=e=>{var n=dL(),o=M(n);{let e=O(()=>({count:mP(t.entry),expanded:I(r),ontoggle:()=>pF.toggleThread(t.entry)}));oL(o,{get entry(){return t.entry},get thread(){return I(e)}})}var s=P(o,2),c=e=>{var t=uL(),n=M(t),r=e=>{var t=sL();vS(M(t),{size:14,label:`Loading session requests`}),T(t),z(e,t)};V(n,e=>{I(i)&&I(i).loading&&e(r)});var o=P(n,2);H(o,17,()=>I(i)&&I(i).entries||[],e=>e.id,(e,t)=>{var n=cL();oL(M(n),{get entry(){return I(t)}}),T(n),z(e,n)});var s=P(o,2),c=e=>{var t=lL(),n=M(t);T(t),F(()=>B(n,`Showing the latest ${I(i).entries.length+1} of ${I(i).total??``} - requests in this session.`)),z(e,t)};V(s,e=>{I(a)&&e(c)}),T(t),ki(3,t,()=>Us,()=>({duration:YN(150)})),z(e,t)};V(s,e=>{I(r)&&e(c)}),T(n),z(e,n)};V(s,e=>{I(l)?e(c):e(u,-1)}),z(e,o),D()}var pL=R(`
         
        `),mL=R(`
         
        `),hL=R(`
        `),gL=R(`
        `),_L=R(`
        `,1),vL=R(`
        `);function yL(e,t){E(t,!0);let n=O(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function r(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var i=vL(),a=M(i),o=e=>{var n=pL(),i=M(n),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=M(s,!0);T(s),T(i);var l=P(i,2),u=M(l,!0);T(l),T(n),F((e,n)=>{B(o,t.msg.roleLabel),B(c,e),B(u,n)},[()=>r(t.msg),()=>wI(t.msg)]),z(e,n)},s=e=>{var n=_L(),r=N(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2),s=M(o,!0);T(o),T(r);var c=P(r,2),l=e=>{var n=mL(),r=M(n,!0);T(n),F(()=>B(r,t.msg.text)),z(e,n)};V(c,e=>{t.msg.text&&e(l)});var u=P(c,2),d=e=>{var n=gL();H(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=hL(),r=M(n),i=M(r,!0);T(r),T(n),F(()=>B(i,I(t).name+`()`)),z(e,n)}),T(n),z(e,n)};V(u,e=>{t.msg.toolCalls&&e(d)}),F(e=>{B(a,t.msg.roleLabel),B(s,e)},[()=>os.formatTimestamp(t.msg.timestamp)]),z(e,n)};V(a,e=>{I(n)?e(o):e(s,-1)}),T(i),F(()=>{U(i,1,Fi([I(n)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),W(i,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),W(i,`data-entry-id`,t.msg.entryID)}),z(e,i),D()}var bL=R(``),xL=R(`
        `),SL=R(`

        Loading interactions...

        `),CL=R(`

        No interaction data available for this entry.

        `),wL=R(`
        `),TL=R(`

        Showing the newest part of this session and the selected log.

        `),EL=R(`
        `),DL=R(``),OL=R(`
        `),kL=R(``),AL=R(`

        Interactions

        `,1);function jL(e,t){E(t,!0);let n=MI;An(()=>{if(!n.conversationOpen)return;let e=Er(()=>Oa.opened()),t=e=>{e.key===`Escape`&&Oa.openCount<=1&&n.closeConversation()};return window.addEventListener(`keydown`,t),()=>{Oa.closed(e),window.removeEventListener(`keydown`,t)}});var r=AL(),i=N(r),a=e=>{var t=bL();L(`click`,t,()=>n.closeConversation()),z(e,t)};V(i,e=>{n.conversationOpen&&e(a)});var o=P(i,2);let s;var c=M(o);ws(P(M(c),2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),T(c);var l=P(c,2),u=M(l),d=e=>{var t=xL(),r=M(t,!0);T(t),F(()=>B(r,n.conversationError)),z(e,t)};V(u,e=>{n.conversationError&&e(d)});var f=P(u,2),p=e=>{z(e,SL())};V(f,e=>{n.conversationLoading&&e(p)});var m=P(f,2),h=e=>{z(e,CL())},g=O(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());V(m,e=>{I(g)&&e(h)});var _=P(m,2),v=e=>{var t=wL();H(t,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{yL(e,{get msg(){return I(t)}})}),T(t),ga(t,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),z(e,t)};V(_,e=>{n.conversationMessages.length>0&&e(v)});var y=P(_,2),b=e=>{z(e,TL())};V(y,e=>{n.conversationTruncated&&e(b)});var x=P(y,2),S=e=>{var t=EL(),r=P(M(t),2),i=M(r,!0);T(r),T(t),F(e=>B(i,e),[()=>n.conversationLiveStatusText()]),z(e,t)},C=O(()=>n.conversationLiveWaiting());V(x,e=>{I(C)&&e(S)}),T(l);var w=P(l,2),ee=e=>{var t=kL(),r=M(t),i=e=>{var t=OL(),r=P(M(t),2);ft(r);var i=P(r,2),a=e=>{var t=DL(),r=M(t,!0);T(t),F(()=>B(r,n.followUpError)),z(e,t)};V(i,e=>{n.followUpError&&e(a)});var o=P(i,2),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=M(l,!0);T(l),T(o),T(t),F((e,t,i)=>{r.disabled=e,B(c,t),l.disabled=i,B(u,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),Vr(`submit`,t,e=>{e.preventDefault(),n.sendFollowUp()}),da(r,()=>n.followUpText,e=>n.followUpText=e),z(e,t)},a=O(()=>n.followUpKind());V(r,e=>{I(a)&&e(i)});var o=P(r,2),s=M(o,!0);T(o),T(t),F(()=>B(s,n.conversationFollowLatest?`Following latest interaction`:`Opened from log: `+n.conversationOpenedFromID)),z(e,t)};V(w,e=>{n.conversationAnchorID&&e(ee)}),T(o),ga(o,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),F(()=>{s=U(o,1,`conversation-drawer`,null,s,{open:n.conversationOpen}),W(o,`aria-hidden`,!n.conversationOpen)}),z(e,r),D()}Hr([`click`]);var ML=R(`

        .

        `),NL=R(`
        Audit logging is off. Live entries are temporary and disappear after - refresh. Set LOGGING_ENABLED=true to persist them.
        `),PL=R(`

        `),FL=R(`
        `),IL=R(`
        `),LL=R(`
        `),RL=R(`
        `),zL=R(`
        `);function BL(e,t){E(t,!0);let n=O(()=>_s.config&&_s.config.LOGGING_RETENTION_DAYS);An(()=>{if(q.refreshTick,Uo.page===`audit-logs`)return Er(()=>r())});function r(){let e=!1;return(async()=>{try{await _s.ensureLoaded()}finally{await pF.fetchAuditLog(!0),!e&&_s.liveLogsVisible()&&bC.ensureLiveLogs()}})(),()=>{e=!0,bC.stopLiveLogs()}}var i=zL(),a=M(i),o=M(a),s=P(M(o),2),c=e=>{US(e,{copyId:`audit-retention-help-copy`,label:`retention help`,text:`If you want to change the retention period, set LOGGING_RETENTION_DAYS (env var) or logging.retention_days (config.yaml) and restart the gateway. Default is 30 days; 0 keeps audit logs forever.`,title:e=>{var t=ML(),r=M(t,!0),i=P(r),a=M(i,!0);T(i),Ue(),T(t),F((e,t)=>{B(r,e),B(a,t)},[()=>lP(I(n)),()=>uP(I(n))]),z(e,t)},$$slots:{title:!0}})},l=O(()=>cP(I(n)));V(s,e=>{I(l)&&e(c)}),T(o),T(a);var u=P(a,2);Zc(M(u),{onchange:()=>pF.fetchAuditLog(!0)}),T(u);var d=P(u,2);jc(d,{});var f=P(d,2),p=e=>{z(e,NL())},m=O(()=>_s.loaded&&!_s.auditVisible()&&!q.needsAuth);V(f,e=>{I(m)&&e(p)});var h=P(f,2),g=M(h);hF(g,{});var _=P(g,2),v=M(_),y=M(v),b=e=>{var t=PL(),n=M(t);T(t),F(e=>B(n,`Showing ${pF.auditLog.offset+1}-${e??``} of ${pF.auditLog.total??``} - ${pF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(pF.auditLog.offset+pF.auditLog.limit,pF.auditLog.total)]),z(e,t)};V(y,e=>{pF.auditLog.total>0&&e(b)});var x=P(y,2),S=M(x);na(S),Ue(2),T(x),T(v),bF(P(v,2),{}),T(_);var C=P(_,2),w=e=>{var t=FL();vS(M(t),{size:18,label:`Loading audit logs`}),T(t),z(e,t)},ee=e=>{var t=LL();H(t,29,()=>pF.auditLog.entries,e=>e.id,(e,t)=>{var n=IL(),r=M(n),i=e=>{fL(e,{get entry(){return I(t)}})},a=e=>{oL(e,{get entry(){return I(t)}})};V(r,e=>{pF.auditGroupSessions?e(i):e(a,-1)}),T(n),Oi(n,()=>GN,()=>({duration:YN(150)})),ki(1,n,()=>XN,()=>({live:I(t)._live})),z(e,n)}),T(t),z(e,t)};V(C,e=>{pF.loading&&pF.auditLog.entries.length===0?e(w):pF.auditLog.entries.length>0&&e(ee,1)});var te=P(C,2),ne=e=>{var t=RL();xS(M(t),{}),T(t),z(e,t)};V(te,e=>{pF.auditLog.entries.length===0&&!pF.loading&&!q.needsAuth&&e(ne)}),Iw(P(te,2),{get total(){return pF.auditLog.total},get offset(){return pF.auditLog.offset},get limit(){return pF.auditLog.limit},onprev:()=>pF.auditLogPrevPage(),onnext:()=>pF.auditLogNextPage()}),T(h),jL(P(h,2),{}),T(i),F(()=>ia(S,pF.auditGroupSessions)),L(`change`,S,()=>pF.toggleAuditGroupSessions()),z(e,i),D()}Hr([`change`]);function VL(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function HL(e){return Array.isArray(e)?e.map(e=>String(e||``).trim()).filter(e=>e):e==null?[]:String(e).split(`,`).map(e=>e.trim()).filter(e=>e)}function UL(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function WL(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function GL(e,t){let n=String(t||``).trim();return n&&UL(e,n)?n:WL(e)}function KL(e,t){let n=UL(e,t);return!n||!n.defaults?{}:VL(n.defaults)}function qL(e,t,n){return{...KL(e,n),...VL(t)}}function JL(e,t){let n=GL(e,t);return{name:``,type:n,description:``,user_path:``,config:KL(e,n)}}function YL(e,t){if(!t)return e||[];let n=String(t).toLowerCase();return(e||[]).filter(e=>[e.name,e.type,e.user_path,e.description,e.summary].some(e=>String(e||``).toLowerCase().includes(n)))}function XL(e,t){let n=UL(e,t);return n&&n.label?n.label:t||`Unknown`}function ZL(e,t){let n=UL(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function QL(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?HL(n):n}function $L(e,t,n){if(!t)return e;let r=VL(e);if(t.input===`number`){let e=String(n||``).trim();if(e===``)delete r[t.key];else{let n=Number(e);r[t.key]=Number.isFinite(n)?n:e}}else t.input===`checkboxes`?r[t.key]=HL(n):r[t.key]=n;return r}function eR(e,t,n){return QL(e,t).includes(String(n||``).trim())}function tR(e,t,n,r){let i=HL(QL(e,t)),a=String(n||``).trim();return a?$L(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function nR(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),description:String(e&&e.description||``).trim()||void 0,user_path:String(e&&e.user_path||``).trim()||void 0,config:VL(e&&e.config)}}var rR=new class{#e=k(j([]));get guardrails(){return I(this.#e)}set guardrails(e){A(this.#e,e,!0)}#t=k(j([]));get types(){return I(this.#t)}set types(e){A(this.#t,e,!0)}#n=k(!0);get available(){return I(this.#n)}set available(e){A(this.#n,e,!0)}#r=k(!1);get loading(){return I(this.#r)}set loading(e){A(this.#r,e,!0)}#i=k(!1);get typesLoading(){return I(this.#i)}set typesLoading(e){A(this.#i,e,!0)}#a=k(``);get error(){return I(this.#a)}set error(e){A(this.#a,e,!0)}#o=k(``);get filter(){return I(this.#o)}set filter(e){A(this.#o,e,!0)}#s=k(!1);get formOpen(){return I(this.#s)}set formOpen(e){A(this.#s,e,!0)}#c=k(!1);get formSubmitting(){return I(this.#c)}set formSubmitting(e){A(this.#c,e,!0)}#l=k(``);get deletingName(){return I(this.#l)}set deletingName(e){A(this.#l,e,!0)}#u=k(`create`);get formMode(){return I(this.#u)}set formMode(e){A(this.#u,e,!0)}#d=k(``);get formOriginalName(){return I(this.#d)}set formOriginalName(e){A(this.#d,e,!0)}#f=k(j({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return I(this.#f)}set form(e){A(this.#f,e,!0)}get filtered(){return YL(this.guardrails,this.filter)}typeLabel(e){return XL(this.types,e)}typeFields(e){return ZL(this.types,e)}fieldValue(e){return QL(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:$L(this.form.config,e,t)}}arrayFieldSelected(e,t){return eR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:tR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=JL(this.types,WL(this.types)),this.formOpen=!0}openEdit(e){let t=GL(this.types,e&&e.type);this.formMode=`edit`,this.formOriginalName=String(e&&e.name||``).trim(),this.error=``,this.form={name:this.formOriginalName,type:t,description:String(e&&e.description||``).trim(),user_path:String(e&&e.user_path||``).trim(),config:qL(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=JL(this.types,WL(this.types))}changeType(e){let t=GL(this.types,e);this.form={...this.form,type:t,config:KL(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await aT(`/admin/guardrails/types`,{label:`guardrail types`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.types=[];return}if(e.result&&(this.available=!0),this.types=e.items,e.status===`error`){this.error=e.error;return}let t=GL(this.types,this.form.type);this.form={...this.form,type:t,config:qL(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await aT(`/admin/guardrails`,{label:`guardrails`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.guardrails=[];return}e.result&&(this.available=!0),this.guardrails=e.items,this.error=e.error}finally{this.loading=!1}}async fetchPage(){await Promise.all([this.fetchTypes(),this.fetchGuardrails()])}async submitForm(){let e=String(this.form.name||``).trim(),t=String(this.form.type||``).trim();if(!e){this.error=`Name is required.`;return}if(!t){this.error=`Type is required.`;return}this.error=``,this.formSubmitting=!0;let n=nR(this.form);try{let t=await oT(`/admin/guardrails`,`PUT`,n,{label:`save guardrail`,errorFallback:`Failed to save guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}Js.success(`Guardrail "`+e+`" saved.`),this.closeForm(),this.fetchGuardrails()}finally{this.formSubmitting=!1}}async deleteGuardrail(e){let t=String(e&&e.name||``).trim();if(!(!t||this.deletingName)&&window.confirm(`Delete guardrail "`+t+`"? Workflows that still reference it must be updated first.`)){this.deletingName=t;try{let e=await oT(`/admin/guardrails`,`DELETE`,{name:t},{label:`delete guardrail`,errorFallback:`Failed to delete guardrail.`,unavailableMessage:`Guardrails feature is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,Js.error(e.error);return}if(e.status===`error`){Js.error(e.error);return}Js.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},iR=R(`
        `),aR=R(`

        Loading guardrails...

        `),oR=R(`
        `),sR=R(`
        `),cR=R(`
        NameTypeUser PathSummaryActions
        `),lR=R(`

        No guardrails defined yet.

        `),uR=R(`

        Instances

        Each instance has a reusable name, a type, an optional user path for - future UI visibility scoping, and a JSON-backed config payload for - that type.

        `);function dR(e,t){E(t,!0);var n=uR(),r=M(n),i=P(M(r),2);K(M(i),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(i),T(r);var a=P(r,2),o=e=>{var t=iR(),n=M(t);sw(M(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return rR.filter},set value(e){rR.filter=e}}),T(n),T(t),z(e,t)};V(a,e=>{rR.available&&e(o)});var s=P(a,2),c=e=>{var t=aR();vS(M(t),{size:16,label:`Loading guardrails`}),Ue(),T(t),z(e,t)};V(s,e=>{rR.loading&&rR.filtered.length===0&&e(c)});var l=P(s,2),u=e=>{var t=cR(),n=M(t),r=P(M(n));H(r,21,()=>rR.filtered,e=>e.name,(e,t)=>{var n=sR(),r=M(n),i=M(r,!0);T(r);var a=P(r),o=M(a),s=M(o,!0);T(o),T(a);var c=P(a),l=M(c,!0);T(c);var u=P(c),d=M(u),f=M(d,!0);T(d);var p=P(d,2),m=e=>{var n=oR(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(p,e=>{I(t).description&&e(m)}),T(u);var h=P(u),g=M(h),_=M(g);{let e=O(()=>`Edit guardrail `+I(t).name);iT(_,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>rR.openEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=P(_,2);{let e=O(()=>(rR.deletingName===I(t).name?`Deleting guardrail `:`Delete guardrail `)+I(t).name),n=O(()=>rR.deletingName===I(t).name);iT(v,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>rR.deleteGuardrail(I(t)),get disabled(){return I(n)},children:(e,t)=>{K(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})}T(g),T(h),T(n),F(e=>{B(i,I(t).name),B(s,e),B(l,I(t).user_path||`—`),B(f,I(t).summary||I(t).description||`No summary yet.`)},[()=>rR.typeLabel(I(t).type)]),z(e,n)}),T(r),T(n),T(t),z(e,t)};V(l,e=>{rR.filtered.length>0&&e(u)});var d=P(l,2),f=e=>{z(e,lR())};V(d,e=>{rR.filtered.length===0&&!rR.loading&&rR.available&&!rR.error&&!q.authError&&e(f)}),T(n),F(()=>i.disabled=rR.typesLoading||rR.formSubmitting||!rR.available),L(`click`,i,()=>rR.openCreate()),z(e,n),D()}Hr([`click`]);var fR=R(`

        Workflows reference these names directly, so renames are - intentionally avoided after creation.

        `),pR=R(``),mR=R(``),hR=R(``),gR=R(``),_R=R(``),vR=R(``),yR=R(``),bR=R(``),xR=R(``),SR=R(`
        `),CR=R(``),wR=R(` `),TR=R(`
        `),ER=R(`
        `);function DR(e,t){E(t,!0);let n=O(()=>rR.formMode===`edit`);{let t=e=>{z(e,fR())},r=O(()=>I(n)?`Edit Guardrail`:`Create Guardrail`);cE(e,{get open(){return rR.formOpen},get title(){return I(r)},ariaLabel:`Guardrail editor`,get error(){return rR.error},get submitting(){return rR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>rR.closeForm(),onsubmit:()=>rR.submitForm(),headerHint:t,children:(e,t)=>{var r=ER(),i=M(r);uE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=pR();na(r),F(()=>{r.disabled=I(n),W(r,`data-modal-autofocus`,!I(n)||void 0)}),da(r,()=>rR.form.name,e=>rR.form.name=e),z(e,r)},$$slots:{default:!0}});var a=P(i,2);uE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=hR();H(r,21,()=>rR.types,e=>e.type,(e,t)=>{var n=mR(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).type)&&(n.value=(n.__value=I(t).type)??``)}),z(e,n)}),T(r);var i;Wi(r),F(()=>{r.disabled=I(n),i!==(i=rR.form.type)&&(r.value=(r.__value=rR.form.type)??``,Ui(r,rR.form.type))}),L(`change`,r,e=>rR.changeType(e.currentTarget.value)),z(e,r)},$$slots:{default:!0}});var o=P(a,2);uE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=gR();na(r),F(()=>W(r,`data-modal-autofocus`,I(n)?!0:void 0)),da(r,()=>rR.form.description,e=>rR.form.description=e),z(e,r)},$$slots:{default:!0}});var s=P(o,2),c=M(s);US(c,{copyId:`guardrail-user-path-help-copy`,label:`guardrail user path help`,text:`Only used for auxiliary rewrite (llm_based_altering) guardrails; ignored for other guardrail types.`,title:e=>{z(e,_R())},$$slots:{title:!0}});var l=P(c,2);na(l),T(s),H(P(s,2),17,()=>rR.typeFields(rR.form.type),e=>e.key,(e,t)=>{var n=Qr(),r=N(n),i=e=>{var n=SR(),r=M(n);{let e=e=>{var n=vR(),r=M(n,!0);T(n),F(()=>{W(n,`for`,`guardrail-field-`+I(t).key),B(r,I(t).label)}),z(e,n)},n=O(()=>`guardrail-field-help-`+I(t).key),i=O(()=>I(t).label+` help`),a=O(()=>I(t).help||``);US(r,{get copyId(){return I(n)},get label(){return I(i)},get text(){return I(a)},title:e,$$slots:{title:!0}})}var i=P(r,2),a=e=>{var n=yR();H(n,21,()=>I(t).options||[],e=>e.value,(e,t)=>{var n=mR(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(n);var r;Wi(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Ui(n,e))},[()=>rR.fieldValue(I(t))]),L(`change`,n,e=>rR.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},o=e=>{var n=bR();ft(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`placeholder`,I(t).placeholder||``),ra(n,e),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0)},[()=>rR.fieldValue(I(t))]),L(`input`,n,e=>rR.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},s=e=>{var n=xR();na(n),F(e=>{W(n,`id`,`guardrail-field-`+I(t).key),W(n,`type`,I(t).input||`text`),W(n,`placeholder`,I(t).placeholder||``),ra(n,e),W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0)},[()=>rR.fieldValue(I(t))]),L(`input`,n,e=>rR.setFieldValue(I(t),e.currentTarget.value)),z(e,n)};V(i,e=>{I(t).input===`select`?e(a):I(t).input===`textarea`?e(o,1):e(s,-1)}),T(n),z(e,n)},a=e=>{var n=TR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2);H(a,21,()=>I(t).options||[],e=>I(t).key+`-`+e.value,(e,n)=>{var r=CR(),i=M(r);na(i);var a=P(i,2),o=M(a,!0);T(a),T(r),F(e=>{ia(i,e),B(o,I(n).label)},[()=>rR.arrayFieldSelected(I(t),I(n).value)]),L(`change`,i,e=>rR.toggleArrayFieldValue(I(t),I(n).value,e.currentTarget.checked)),z(e,r)}),T(a);var o=P(a,2),s=e=>{var n=wR(),r=M(n,!0);T(n),F(()=>{W(n,`id`,`guardrail-field-help-`+I(t).key),B(r,I(t).help)}),z(e,n)};V(o,e=>{I(t).help&&e(s)}),T(n),F(()=>{W(n,`aria-describedby`,I(t).help?`guardrail-field-help-`+I(t).key:void 0),B(i,I(t).label)}),z(e,n)};V(r,e=>{I(t).input===`checkboxes`?e(a,-1):e(i)}),z(e,n)}),T(r),da(l,()=>rR.form.user_path,e=>rR.form.user_path=e),z(e,r)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`change`,`input`]);var OR=R(`

        Guardrails

        `),kR=R(`
        Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage - definitions here.
        `),AR=R(`
        Guardrails feature is unavailable.
        `),jR=R(`
        `),MR=R(`

        Reusable Policy Objects

        Guardrail Library

        Store guardrails in the database, keep them hot in memory, and attach - them to workflows by reference.

        Instances
        Types
        `);function NR(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`guardrails`&&(_s.ensureLoaded(),rR.fetchPage())});var n=MR(),r=M(n),i=M(r);US(M(i),{copyId:`guardrails-help-copy`,label:`guardrails help`,text:`Reusable policy objects stored in the database and kept hot in memory for workflow execution.`,title:e=>{z(e,OR())},$$slots:{title:!0}}),T(i),T(r);var a=P(r,2),o=P(M(a),2),s=M(o),c=P(M(s),2),l=M(c,!0);T(c),T(s);var u=P(s,2),d=P(M(u),2),f=M(d,!0);T(d),T(u),T(o),T(a);var p=P(a,2);jc(p,{});var m=P(p,2),h=e=>{z(e,kR())},g=O(()=>!_s.guardrailsVisible());V(m,e=>{I(g)&&e(h)});var _=P(m,2),v=e=>{z(e,AR())};V(_,e=>{!q.authError&&!rR.available&&e(v)});var y=P(_,2),b=e=>{var t=jR(),n=M(t,!0);T(t),F(()=>B(n,rR.error)),z(e,t)};V(y,e=>{!q.authError&&rR.error&&!rR.formOpen&&e(b)});var x=P(y,2);DR(x,{}),dR(P(x,2),{}),T(n),F((e,t)=>{B(l,e),B(f,t)},[()=>nc(rR.guardrails.length),()=>nc(rR.types.length)]),z(e,n),D()}var Q=new class{#e=k(j([]));get servers(){return I(this.#e)}set servers(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get formSubmitting(){return I(this.#o)}set formSubmitting(e){A(this.#o,e,!0)}#s=k(`create`);get formMode(){return I(this.#s)}set formMode(e){A(this.#s,e,!0)}#c=k(!1);get slugEdited(){return I(this.#c)}set slugEdited(e){A(this.#c,e,!0)}#l=k(!1);get advancedOpen(){return I(this.#l)}set advancedOpen(e){A(this.#l,e,!0)}#u=k(j(sx()));get form(){return I(this.#u)}set form(e){A(this.#u,e,!0)}#d=k(``);get deletingName(){return I(this.#d)}set deletingName(e){A(this.#d,e,!0)}#f=k(``);get reconnectingName(){return I(this.#f)}set reconnectingName(e){A(this.#f,e,!0)}#p=k(!1);get catalogOpen(){return I(this.#p)}set catalogOpen(e){A(this.#p,e,!0)}#m=k(!1);get catalogLoading(){return I(this.#m)}set catalogLoading(e){A(this.#m,e,!0)}#h=k(``);get catalogError(){return I(this.#h)}set catalogError(e){A(this.#h,e,!0)}#g=k(j(cx()));get catalog(){return I(this.#g)}set catalog(e){A(this.#g,e,!0)}#_=O(()=>yx(this.servers,this.filter));get filtered(){return I(this.#_)}set filtered(e){A(this.#_,e)}async fetchServers(){if(await _s.ensureLoaded(),!_s.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await aT(`/admin/mcp-servers`,{label:`mcp servers`,errorFallback:`Failed to load MCP servers.`,unavailableStatuses:[503,404]});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.servers=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.servers=[],this.error=e.error;return}this.available=!0,this.servers=e.items}finally{this.loading=!1}}openCreate(){this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=sx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=bx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=sx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=hx(this.form.name))}markSlugEdited(){this.formMode===`create`&&(this.slugEdited=!0)}addHeader(){this.form.headers.push({name:``,value:``})}removeHeader(e){this.form.headers.splice(e,1)}async submitForm(){let e=xx(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await oT(`/admin/mcp-servers`,`PUT`,e.payload,{label:`save mcp server`,errorFallback:`Failed to save MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error;return}Js.success(`MCP server "`+e.payload.name+`" saved.`),this.closeForm(),this.fetchServers()}finally{this.formSubmitting=!1}}async deleteServer(e){let t=String(e&&e.name||``).trim(),n=lx(e);if(!(!n||this.deletingName||e&&e.managed)&&confirm(`Delete MCP server "`+t+`"? Clients lose access to its tools immediately.`)){this.deletingName=n;try{let e=await oT(`/admin/mcp-servers/`+encodeURIComponent(n),`DELETE`,void 0,{label:`delete mcp server`,errorFallback:`Failed to delete MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,Js.error(e.error);return}if(e.status===`error`){Js.error(e.error);return}Js.success(`MCP server "`+t+`" deleted.`),this.formOpen&&this.form.slug===n&&this.closeForm(),this.fetchServers()}finally{this.deletingName=``}}}async reconnectServer(e){let t=String(e&&e.name||``).trim(),n=lx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await oT(`/admin/mcp-servers/`+encodeURIComponent(n)+`/reconnect`,`POST`,void 0,{label:`reconnect mcp server`,errorFallback:`Failed to reconnect MCP server.`,unavailableMessage:`MCP server management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,Js.error(e.error);return}if(e.status===`error`){Js.error(e.error);return}let r=e.result.data,i=ux(r);i===`connected`?Js.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?Js.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):Js.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>lx(e)===lx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=lx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...cx(),server:n,status:ux(e)};try{let e=await fs(`/admin/mcp-servers/`+encodeURIComponent(n)+`/catalog`,{label:`mcp server catalog`});if(e.stale)return;if(e.status===503){this.available=!1,this.catalogError=`MCP server management is unavailable.`;return}if(e.status===404){this.catalogError=`MCP server "`+t+`" was not found.`;return}if(!e.ok){this.catalogError=e.status===401?`Authentication required.`:ss(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Sx(n,e.data)}catch(e){console.error(`Failed to load MCP server catalog:`,e),this.catalogError=`Failed to load MCP server catalog.`}finally{this.catalogLoading=!1}}}closeCatalog(){this.catalogOpen=!1,this.catalogLoading=!1,this.catalogError=``,this.catalog=cx()}},PR=R(``),FR=R(`

        `),IR=R(`
        `),LR=R(`

        `),RR=R(`
      • `),zR=R(`

          `),BR=R(`

          No tools listed — the server may still be connecting or degraded.

          `),VR=R(` `,1),HR=R(``);function UR(e,t){E(t,!0);let n=O(()=>wx(Q.catalog));Os(e,{get open(){return Q.catalogOpen},variant:`editor`,onclose:()=>Q.closeCatalog(),children:(e,t)=>{var r=HR(),i=M(r),a=M(i),o=P(M(a),2),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=M(l,!0);T(l),T(o),T(a),ws(P(a,2),{label:`Close MCP server catalog`,onclick:()=>Q.closeCatalog()}),T(i);var d=P(i,2),f=e=>{nT(e,{label:`Loading catalog...`})},p=e=>{var t=PR(),n=M(t,!0);T(t),F(()=>B(n,Q.catalogError)),z(e,t)},m=e=>{var t=VR(),r=N(t),i=e=>{var t=FR(),n=M(t,!0);T(t),F(()=>B(n,Q.catalog.instructions)),z(e,t)};V(r,e=>{Q.catalog.instructions&&e(i)});var a=P(r,2);H(a,17,()=>I(n),e=>e.key,(e,t)=>{var n=zR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2);H(a,21,()=>I(t).items,e=>e.key,(e,t)=>{var n=RR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=IR(),r=M(n,!0);T(n),F(()=>{W(n,`title`,`Exposed on the aggregated /mcp endpoint as `+I(t).aggregated),B(r,I(t).aggregated)}),z(e,n)};V(a,e=>{I(t).aggregated&&e(o)});var s=P(a,2),c=e=>{var n=LR(),r=M(n,!0);T(n),F(()=>B(r,I(t).description)),z(e,n)};V(s,e=>{I(t).description&&e(c)}),T(n),F(()=>{W(r,`title`,I(t).aggregated||I(t).name),B(i,I(t).name)}),z(e,n)}),T(a),T(n),F(()=>B(i,I(t).title)),z(e,n)});var o=P(a,2),s=e=>{z(e,BR())},c=O(()=>Tx(Q.catalog));V(o,e=>{I(c)&&e(s)}),z(e,t)};V(d,e=>{Q.catalogLoading?e(f):Q.catalogError?e(p,1):e(m,-1)});var h=P(d,2),g=M(h);T(h),T(r),F((e,t)=>{B(c,Q.catalog.server),U(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),B(u,t)},[()=>dx(Q.catalog),()=>ux(Q.catalog)]),L(`click`,g,()=>Q.closeCatalog()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var WR=R(`

          The display name can change. The slug is the stable client-facing identity.

          `),GR=R(` Human-readable and Unicode-friendly. You can change it later.`,1),KR=R(`Derived from the name. You may edit it before saving.`),qR=R(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),JR=R(` `,1),YR=R(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),XR=R(``),ZR=R(`
          `),QR=R(`
          Headers
          Sent only to the configured server origin. Saved values are shown as ***; leave *** unchanged to keep the stored value.
          Advanced settings Description, access rules, and timeout
          `,1);function $R(e,t){E(t,!0);{let t=e=>{z(e,WR())},n=O(()=>Q.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);cE(e,{get open(){return Q.formOpen},get title(){return I(n)},ariaLabel:`MCP server editor`,get error(){return Q.error},get submitting(){return Q.formSubmitting},onclose:()=>Q.closeForm(),onsubmit:()=>Q.submitForm(),headerHint:t,children:(e,t)=>{var n=QR(),r=N(n);uE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=GR(),r=N(n);na(r),Ue(2),L(`input`,r,()=>Q.syncSlugFromName()),da(r,()=>Q.form.name,e=>Q.form.name=e),z(e,n)},$$slots:{default:!0}});var i=P(r,2);uE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=JR(),r=N(n);na(r);var i=P(r,2),a=e=>{z(e,KR())},o=e=>{z(e,qR())};V(i,e=>{Q.formMode===`create`?e(a):e(o,-1)}),F(()=>r.disabled=Q.formMode===`edit`),L(`input`,r,()=>Q.markSlugEdited()),da(r,()=>Q.form.slug,e=>Q.form.slug=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2);uE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=YR(),r=N(n),i=M(r);i.value=i.__value=`http`;var a=P(i);a.value=a.__value=`sse`,T(r),Ue(2),Gi(r,()=>Q.form.transport,e=>Q.form.transport=e),z(e,n)},$$slots:{default:!0}});var o=P(a,2);uE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=XR();na(n),da(n,()=>Q.form.url,e=>Q.form.url=e),z(e,n)},$$slots:{default:!0}});var s=P(o,2),c=P(M(s),2);H(c,21,()=>Q.form.headers,oi,(e,t,n)=>{var r=ZR(),i=M(r);na(i);var a=P(i,2);na(a),iT(P(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeHeader(n),children:(e,t)=>{K(e,{get icon(){return To},class:`table-icon-svg`})},$$slots:{default:!0}}),T(r),da(i,()=>I(t).name,e=>I(t).name=e),da(a,()=>I(t).value,e=>I(t).value=e),z(e,r)}),T(c);var l=P(c,2),u=M(l);K(M(u),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(u),T(l),Ue(2),T(s);var d=P(s,2),f=M(d);cA(M(f),{get enabled(){return Q.form.enabled},label:`MCP server`,onclick:()=>Q.form.enabled=!Q.form.enabled}),T(f),T(d);var p=P(d,2),m=P(M(p),2),h=M(m),g=P(M(h),2);na(g),T(h);var _=P(h,2),v=P(M(_),2);na(v),T(_);var y=P(_,2),b=P(M(y),2);na(b),T(y);var x=P(y,2),S=P(M(x),2);ft(S),W(S,`placeholder`,`/ -/team/alpha`),T(x);var C=P(x,2),w=P(M(C),2);na(w),T(C),T(m),T(p),F(()=>p.open=Q.advancedOpen),L(`click`,u,()=>Q.addHeader()),Vr(`toggle`,p,e=>Q.advancedOpen=e.currentTarget.open),da(g,()=>Q.form.description,e=>Q.form.description=e),da(v,()=>Q.form.allowed_tools,e=>Q.form.allowed_tools=e),da(b,()=>Q.form.disallowed_tools,e=>Q.form.disallowed_tools=e),da(S,()=>Q.form.user_paths,e=>Q.form.user_paths=e),da(w,()=>Q.form.tool_timeout_seconds,e=>Q.form.tool_timeout_seconds=e),z(e,n)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`input`,`click`]);var ez=R(`Config`),tz=R(`
          `),nz=R(`
          `),rz=R(`
          NameTransportEndpointStatusToolsEnabledActions
          `);function iz(e,t){E(t,!0);function n(e){return fx(e,e=>os.formatTimestamp(e))}var r=rz(),i=M(r),a=P(M(i));H(a,21,()=>Q.filtered,e=>lx(e),(e,t)=>{var r=nz(),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=e=>{z(e,ez())};V(s,e=>{I(t).managed&&e(c)});var l=P(s,2),u=M(l,!0);T(l),T(i);var d=P(i),f=M(d),p=M(f,!0);T(f),T(d);var m=P(d),h=M(m,!0);T(m);var g=P(m),_=M(g),v=M(_,!0);T(_);var y=P(_,2),b=e=>{var n=tz(),r=M(n,!0);T(n),F(()=>B(r,I(t).last_error)),z(e,n)},x=O(()=>ux(I(t))===`degraded`&&I(t).last_error);V(y,e=>{I(x)&&e(b)}),T(g);var S=P(g),C=M(S),w=M(C,!0);T(C);var ee=P(C,2),te=M(ee,!0);T(ee),T(S);var ne=P(S),re=M(ne),ie=M(re,!0);T(re),T(ne);var ae=P(ne),oe=M(ae),se=M(oe),ce=e=>{{let n=O(()=>`Edit MCP server `+I(t).name);iT(e,{get label(){return I(n)},class:`table-icon-btn`,onclick:()=>Q.openEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(se,e=>{I(t).managed||e(ce)});var le=P(se,2);{let e=O(()=>`Inspect catalog of MCP server `+I(t).name);iT(le,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>Q.openCatalog(I(t)),children:(e,t)=>{K(e,{get icon(){return eo},class:`form-action-icon`})},$$slots:{default:!0}})}var ue=P(le,2);{let e=O(()=>(Q.reconnectingName===lx(I(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+I(t).name),n=O(()=>Q.reconnectingName===lx(I(t)));iT(ue,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>Q.reconnectServer(I(t)),get disabled(){return I(n)},children:(e,t)=>{K(e,{get icon(){return lo},class:`form-action-icon`})},$$slots:{default:!0}})}var de=P(ue,2),fe=e=>{{let n=O(()=>(Q.deletingName===lx(I(t))?`Deleting MCP server `:`Delete MCP server `)+I(t).name),r=O(()=>Q.deletingName===lx(I(t)));iT(e,{get label(){return I(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>Q.deleteServer(I(t)),get disabled(){return I(r)},children:(e,t)=>{K(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(de,e=>{I(t).managed||e(fe)}),T(oe),T(ae),T(r),F((e,n,r,i,a,s,c,l)=>{B(o,I(t).name),B(u,e),B(p,I(t).transport||`http`),W(m,`title`,n),B(h,r),U(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),W(_,`title`,a),B(v,s),B(w,c),B(te,l),U(re,1,Fi([`auth-key-status-badge`,I(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),B(ie,I(t).enabled?`Enabled`:`Disabled`)},[()=>lx(I(t)),()=>px(I(t)),()=>px(I(t)),()=>dx(I(t)),()=>n(I(t)),()=>ux(I(t)),()=>nc(I(t).tool_count||0),()=>mx(I(t))]),z(e,r)}),T(a),T(i),T(r),z(e,r),D()}var az=R(`

          MCP Servers

          `),oz=R(``),sz=R(`
          MCP server management is unavailable.
          `),cz=R(``),lz=R(`
          `),uz=R(`

          No MCP servers yet. Add one here, or declare servers in config.yaml under mcp.servers.

          `),dz=R(`

          No MCP servers match your filter.

          `),fz=R(`
          `);function pz(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`mcp-servers`&&Q.fetchServers()});var n=fz(),r=M(n),i=M(r);US(M(i),{copyId:`mcp-servers-help-copy`,label:`MCP servers help`,text:`Upstream Model Context Protocol servers whose tools, prompts, and resources the gateway exposes to clients. Servers added here connect over HTTP or SSE; stdio servers and rows marked Config are declared in config.yaml under mcp.servers and are read-only in the dashboard. Saved header values are masked in API and dashboard responses.`,title:e=>{z(e,az())},$$slots:{title:!0}}),T(i);var a=P(i,2),o=M(a),s=e=>{var t=oz();K(M(t),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=Q.formSubmitting),L(`click`,t,()=>Q.openCreate()),z(e,t)};V(o,e=>{Q.available&&!q.authError&&e(s)}),T(a),T(r);var c=P(r,2),l=e=>{z(e,sz())};V(c,e=>{!Q.available&&!q.authError&&e(l)});var u=P(c,2),d=e=>{var t=cz(),n=M(t,!0);T(t),F(()=>B(n,Q.error)),z(e,t)};V(u,e=>{Q.error&&!q.authError&&!Q.formOpen&&e(d)});var f=P(u,2),p=e=>{nT(e,{label:`Loading MCP servers...`})};V(f,e=>{Q.loading&&!q.authError&&e(p)});var m=P(f,2),h=e=>{var t=lz(),n=M(t);sw(M(n),{id:`mcp-server-filter`,placeholder:`Filter by name, slug, URL, transport, or status...`,label:`Filter MCP servers by name, slug, URL, transport, or status`,get value(){return Q.filter},set value(e){Q.filter=e}}),T(n),T(t),z(e,t)};V(m,e=>{(Q.servers.length>0||Q.filter)&&Q.available&&!q.authError&&e(h)});var g=P(m,2);$R(g,{});var _=P(g,2);UR(_,{});var v=P(_,2),y=e=>{iz(e,{})};V(v,e=>{Q.filtered.length>0&&Q.available&&!q.authError&&e(y)});var b=P(v,2),x=e=>{z(e,uz())};V(b,e=>{Q.servers.length===0&&!Q.filter&&!Q.loading&&!q.authError&&!Q.error&&Q.available&&e(x)});var S=P(b,2),C=e=>{z(e,dz())};V(S,e=>{Q.servers.length>0&&Q.filtered.length===0&&Q.filter&&!Q.loading&&!q.authError&&Q.available&&e(C)}),T(n),z(e,n),D()}Hr([`click`]);var mz=`api_keys`,hz=`session_sticky_keys`,gz=`base_url`,_z=`service_account_json`,vz=`models`,yz={[mz]:{label:`API Keys`,control:`keys`,hint:`Identified sessions stay on one key by default, improving provider prompt-cache hits. Saved values are shown as ***********; leave the asterisks unchanged to keep the stored key.`},[hz]:{label:`Session-sticky API keys`,control:`checkbox`,hint:`Keep each identified conversation on one API key to preserve provider prompt-cache affinity. Turn off to rotate keys round-robin on every request.`},[gz]:{label:`Base URL`,control:`text`},api_version:{label:`API Version`,control:`text`,placeholder:`e.g. 2024-10-01-preview`,hint:`Leave empty for the provider default. Realtime endpoints may need a newer version.`},backend:{label:`Backend`,control:`select`,hint:`Which Google surface to call. Vertex authenticates with Google credentials instead of an API key.`},auth_type:{label:`Auth Type`,control:`select`,hint:`How to obtain Google credentials. Leave on the default to use Application Default Credentials.`},api_mode:{label:`API Mode`,control:`select`,hint:`Which request shape to send upstream.`},vertex_project:{label:`Vertex Project`,control:`text`,placeholder:`my-gcp-project`},vertex_location:{label:`Vertex Location`,control:`text`,placeholder:`us-central1`},service_account_file:{label:`Service Account File`,control:`text`,placeholder:`/path/to/service-account.json`,hint:`Path readable by the gateway process.`},[_z]:{label:`Service Account JSON`,control:`textarea`,placeholder:`Paste service account JSON`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value, or clear it to remove.`},service_account_json_base64:{label:`Service Account JSON (base64)`,control:`text`,hint:`Saved values are shown as ***********; leave the asterisks unchanged to keep the stored value.`},gcp_scope:{label:`GCP Scope`,control:`text`,placeholder:`https://www.googleapis.com/auth/cloud-platform`},[vz]:{label:`Models (comma-separated)`,control:`text`,placeholder:`gpt-4o, gpt-4o-mini`,hint:`Leave empty to auto-discover models from the provider's /models endpoint where supported.`}};function bz(e){return yz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function xz(){return{name:``,type:``,api_keys:[],session_sticky_keys:!0,base_url:``,api_version:``,backend:``,auth_type:``,api_mode:``,vertex_project:``,vertex_location:``,service_account_file:``,service_account_json:``,service_account_json_base64:``,gcp_scope:``,models:``,enabled:!0}}function Sz(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=String(t).toLowerCase();return n.filter(e=>[e.name,e.type,e.base_url].some(e=>String(e||``).toLowerCase().includes(r)))}function Cz(e,t){let n=(Array.isArray(e)?e:[]).map(e=>String(e&&e.type||``).trim()).filter(Boolean),r=String(t||``).trim();return r&&!n.includes(r)&&n.push(r),n}function wz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function Tz(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(yz).map(e=>({name:e,advanced:e!==mz})),r=t||e&&e.default_base_url||``,i=[],a=[];for(let e of n){let t=String(e&&e.name||``).trim();if(!t)continue;let n={...bz(t),name:t,required:!!(e&&e.required),options:Array.isArray(e&&e.options)?e.options:[]};t===`base_url`&&r&&(n.placeholder=r,n.hint=`Defaults to `+r),n.options.length>0&&(n.control=`select`),(e&&e.advanced?a:i).push(n)}return{primary:i,advanced:a}}var Ez=new Set([`name`,`type`,`enabled`]);function Dz(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=xz(),i={...e};for(let e of Object.keys(r))!Ez.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function Oz(e){let t=Array.isArray(e&&e.api_keys)?e.api_keys.length:0;return t>0?t+` key`+(t===1?``:`s`):String(e&&e.service_account_json||``).trim()||String(e&&e.service_account_json_base64||``).trim()||String(e&&e.service_account_file||``).trim()?`service account`:String(e&&e.vertex_project||``).trim()?`ADC`:`keyless`}function kz(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function Az(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function jz(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function Mz(e,t){let n=String(t||``).trim();if(!n)return``;let r=new Set((Array.isArray(e)?e:[]).map(e=>String(e&&e.name||``).trim()));if(!r.has(n))return n;let i=1;for(;r.has(n+`-`+i);)i+=1;return n+`-`+i}function Nz(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:Az(e&&e.api_keys),session_sticky_keys:!e||e.session_sticky_keys!==!1,base_url:String(e&&e.base_url||``),api_version:String(e&&e.api_version||``),backend:String(e&&e.backend||``),auth_type:String(e&&e.auth_type||``),api_mode:String(e&&e.api_mode||``),vertex_project:String(e&&e.vertex_project||``),vertex_location:String(e&&e.vertex_location||``),service_account_file:String(e&&e.service_account_file||``),service_account_json:String(e&&e.service_account_json||``),service_account_json_base64:String(e&&e.service_account_json_base64||``),gcp_scope:String(e&&e.gcp_scope||``),models:(Array.isArray(e&&e.models)?e.models:[]).join(`, `),enabled:!e||e.enabled!==!1}}function Pz(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function Fz(e,t,n,r){let i={},a=String(e&&e.name||``).trim();String(e&&e.type||``).trim()||(i.type=`Select a provider type.`),a?a.includes(`/`)?i.name=`Name cannot contain '/' — it separates the provider from the model.`:t===`create`&&(Array.isArray(n)?n:[]).some(e=>String(e&&e.name||``).trim()===a)&&(i.name=`Provider "`+a+`" already exists.`):i.name=`Name is required.`;let{primary:o,advanced:s}=Tz(r);for(let t of[...o,...s]){let n=Iz(e,t);n&&(i[t.name]=n)}return i}function Iz(e,t){if(t.name===`api_keys`){let n=jz(e&&e.api_keys);return t.required&&!n.some(e=>e.trim())?`At least one API key is required for this provider type.`:n.some(e=>!e.trim())?`Remove the empty row instead of leaving a key blank.`:``}let n=String(e&&e[t.name]||``).trim();if(t.required&&!n)return t.label+` is required for this provider type.`;if(!n)return``;if(t.name===`base_url`&&!n.includes(`://`)&&/[./]/.test(n))return`Include the scheme, e.g. https://`+n;if(t.name===`service_account_json`&&!Pz(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function Lz(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=Tz(t),a=!!(t&&Array.isArray(t.fields)&&t.fields.length>0),o=new Set;for(let t of[...r,...i])!a&&t.name===`session_sticky_keys`||(o.add(t.name),n[t.name]=Rz(e,t.name));for(let t of Object.keys(yz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=Rz(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function Rz(e,t){switch(t){case mz:return jz(e&&e.api_keys);case vz:return ec(e&&e.models);case hz:return!!(e&&e.session_sticky_keys);case _z:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var $=new class{#e=k(j([]));get rows(){return I(this.#e)}set rows(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get formOpen(){return I(this.#a)}set formOpen(e){A(this.#a,e,!0)}#o=k(!1);get formSubmitting(){return I(this.#o)}set formSubmitting(e){A(this.#o,e,!0)}#s=k(`create`);get formMode(){return I(this.#s)}set formMode(e){A(this.#s,e,!0)}#c=k(!1);get advancedOpen(){return I(this.#c)}set advancedOpen(e){A(this.#c,e,!0)}#l=k(j(xz()));get form(){return I(this.#l)}set form(e){A(this.#l,e,!0)}#u=k(j({}));get fieldErrors(){return I(this.#u)}set fieldErrors(e){A(this.#u,e,!0)}#d=k(``);get focusField(){return I(this.#d)}set focusField(e){A(this.#d,e,!0)}#f=k(``);get deletingName(){return I(this.#f)}set deletingName(e){A(this.#f,e,!0)}#p=k(!1);get deleteSubmitting(){return I(this.#p)}set deleteSubmitting(e){A(this.#p,e,!0)}#m=k(j([]));get types(){return I(this.#m)}set types(e){A(this.#m,e,!0)}#h=k(!1);get typesLoaded(){return I(this.#h)}set typesLoaded(e){A(this.#h,e,!0)}#g=null;get filteredRows(){return Sz(this.rows,this.filter)}get schema(){return wz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return Tz(e,e&&e.default_base_url)}async fetchTypes(){let e=await aT(`/admin/provider-credentials/types`,{label:`provider credential types`});e.status===`ok`&&(this.types=e.items,this.typesLoaded=!0)}async fetchPage(){this.#g&&this.#g.abort();let e=new AbortController;this.#g=e,this.loading=!0,this.error=``;try{let t=await aT(`/admin/provider-credentials`,{label:`provider credentials`,errorFallback:`Failed to load provider credentials.`,unavailableStatuses:[503,404],options:{signal:e.signal}});if(t.status===`stale`||e.signal.aborted)return;if(t.status===`unavailable`){this.available=!1,this.rows=[];return}if(t.status===`error`){t.result&&(this.available=!0),this.rows=[],this.error=t.error;return}this.available=!0,this.rows=t.items,this.typesLoaded||await this.fetchTypes()}finally{this.#g===e&&(this.#g=null,this.loading=!1)}}#_(e,t){this.formMode=e,this.form=t,this.advancedOpen=!1,this.error=``,this.fieldErrors={},this.focusField=``}openCreate(){this.#_(`create`,xz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,Nz(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,xz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=Dz(this.form,e));let t=e.primary.find(e=>e.name===`api_keys`);t&&t.required&&this.form.api_keys.length===0&&(this.form.api_keys=[{value:``}])}clearFieldError(e){if(this.fieldErrors[e]===void 0)return;let{[e]:t,...n}=this.fieldErrors;this.fieldErrors=n}addApiKeyRow(){this.form.api_keys.push({value:``}),this.clearFieldError(`api_keys`)}removeApiKeyRow(e){this.form.api_keys.splice(e,1),this.clearFieldError(`api_keys`)}#v(e){let t=ss(e,`Failed to save provider credential.`),n=String(e&&e.error&&typeof e.error==`object`&&e.error.param||``).trim();if(n&&this.#y(n)){this.fieldErrors={...this.fieldErrors,[n]:t},this.error=``,this.#b();return}this.error=t}#y(e){if(e===`name`||e===`type`)return!0;let{primary:t,advanced:n}=this.formFields;return[...t,...n].some(t=>t.name===e)}#b(){let e=Object.keys(this.fieldErrors);if(e.length===0)return;let{primary:t,advanced:n}=this.formFields;n.some(t=>e.includes(t.name))&&(this.advancedOpen=!0);let r=[`type`,`name`,...t.map(e=>e.name),...n.map(e=>e.name)];this.focusField=r.find(t=>e.includes(t))||e[0]}#x(){kc.fetchModels(),kc.fetchCategories()}async submitForm(){let e=this.schema,t=Fz(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=Lz(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await oT(`/admin/provider-credentials`,`PUT`,n,{label:`save provider credential`,errorFallback:`Failed to save provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.error=e.error;return}if(e.status===`error`){e.result&&e.result.status!==401?this.#v(e.result.data):this.error=e.error;return}Js.success(`Provider "`+n.name+`" saved.`),this.closeForm(),this.#x(),this.fetchPage()}finally{this.formSubmitting=!1}}async performDelete(e){this.deleteSubmitting=!0,this.deletingName=e;try{let t=await oT(`/admin/provider-credentials/`+encodeURIComponent(e),`DELETE`,void 0,{label:`delete provider credential`,errorFallback:`Failed to delete provider credential.`,unavailableMessage:`Provider credential management is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Ns.error=t.error;return}if(t.status===`error`){Ns.error=t.error;return}Js.success(`Provider "`+e+`" deleted.`),Ns.close(),this.formOpen&&this.form.name===e&&this.closeForm(),this.#x(),this.fetchPage()}finally{this.deleteSubmitting=!1,this.deletingName=``}}requestDelete(e){let t=String(e||``).trim();if(!t||this.deleteSubmitting)return;let n=(this.rows||[]).find(e=>String(e&&e.name||``).trim()===t);n&&n.managed||Ns.open({title:`Delete Provider`,titleId:`providerCredentialDeleteDialogTitle`,inputId:`provider-credential-delete-confirmation`,message:`Type "`+t+`" to permanently delete this provider credential. Requests routed to it will fail until it is reconfigured.`,requiredText:t,confirmLabel:`Delete Provider`,icon:To,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},zz=R(`Config`),Bz=R(` `,1),Vz=R(`
          `),Hz=R(`
          NameTypeBase URLAuthModelsEnabledUpdatedActions
          `);function Uz(e,t){E(t,!0);var n=Hz(),r=M(n),i=P(M(r));H(i,21,()=>$.filteredRows,e=>e.name,(e,t)=>{var n=Vz(),r=M(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2),s=e=>{z(e,zz())};V(o,e=>{I(t).managed&&e(s)}),T(r);var c=P(r),l=M(c),u=M(l,!0);T(l),T(c);var d=P(c),f=M(d,!0);T(d);var p=P(d),m=M(p,!0);T(p);var h=P(p),g=M(h,!0);T(h);var _=P(h),v=M(_);let y;var b=M(v,!0);T(v),T(_);var x=P(_),S=M(x,!0);T(x);var C=P(x),w=M(C),ee=M(w),te=e=>{var n=Bz(),r=N(n);{let e=O(()=>`Edit provider `+I(t).name);iT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>$.openEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=P(r,2);{let e=O(()=>($.deletingName===I(t).name?`Deleting provider `:`Delete provider `)+I(t).name),n=O(()=>$.deletingName===I(t).name);iT(i,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.requestDelete(I(t).name),get disabled(){return I(n)},children:(e,t)=>{K(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})}z(e,n)};V(ee,e=>{I(t).managed||e(te)}),T(w),T(C),T(n),F((e,n,r)=>{B(a,I(t).name),B(u,I(t).type),W(d,`title`,I(t).base_url||``),B(f,I(t).base_url||`—`),B(m,e),B(g,n),y=U(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":I(t).enabled,"auth-key-status-inactive":!I(t).enabled}),B(b,I(t).enabled?`Enabled`:`Disabled`),B(S,r)},[()=>Oz(I(t)),()=>kz(I(t)),()=>os.formatTimestamp(I(t).updated_at)]),z(e,n)}),T(i),T(r),T(n),z(e,n),D()}var Wz=R(``),Gz=R(`
          `),Kz=R(`
          `,1),qz=R(``),Jz=R(``),Yz=R(``),Xz=R(``),Zz=R(``),Qz=R(` `),$z=R(` `),eB=R(`
          `);function tB(e,t){E(t,!0);let n=O(()=>`provider-credential-`+t.field.name),r=O(()=>$.fieldErrors[t.field.name]||``),i=O(()=>I(r)?I(n)+`-error`:t.field.hint?I(n)+`-hint`:void 0),a=O(()=>{let e=String($.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){$.clearFieldError(t.field.name)}var s=eB(),c=M(s),l=M(c),u=P(l),d=e=>{z(e,Wz())};V(u,e=>{t.field.required&&e(d)}),T(c);var f=P(c,2),p=e=>{var t=Kz(),a=N(t);H(a,21,()=>$.form.api_keys,oi,(e,t,a)=>{var s=Gz(),c=M(s);na(c),W(c,`aria-label`,`API key `+(a+1)),iT(P(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeApiKeyRow(a),children:(e,t)=>{K(e,{get icon(){return To},class:`table-icon-svg`})},$$slots:{default:!0}}),T(s),F(()=>{W(c,`id`,a===0?I(n):I(n)+`-`+a),W(c,`aria-invalid`,I(r)?`true`:void 0),W(c,`aria-describedby`,a===0?I(i):void 0)}),L(`input`,c,o),da(c,()=>I(t).value,e=>I(t).value=e),z(e,s)}),T(a);var s=P(a,2),c=M(s);K(M(c),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(c),T(s),F(()=>W(c,`id`,$.form.api_keys.length===0?I(n):void 0)),L(`click`,c,()=>$.addApiKeyRow()),z(e,t)},m=e=>{var s=Jz(),c=M(s);c.value=c.__value=``,H(P(c),16,()=>I(a),e=>e,(e,t)=>{var n=qz(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(s),F(()=>{W(s,`id`,I(n)),W(s,`aria-invalid`,I(r)?`true`:void 0),W(s,`aria-describedby`,I(i))}),L(`change`,s,o),Gi(s,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,s)},h=e=>{var a=Yz();na(a),F(()=>{W(a,`id`,I(n)),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`change`,a,o),fa(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)},g=e=>{var a=Xz();ft(a),F(()=>{W(a,`id`,I(n)),W(a,`placeholder`,t.field.placeholder||``),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`input`,a,o),da(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)},_=e=>{var a=Zz();na(a),F(()=>{W(a,`id`,I(n)),W(a,`placeholder`,t.field.placeholder||``),W(a,`aria-invalid`,I(r)?`true`:void 0),W(a,`aria-describedby`,I(i))}),L(`input`,a,o),da(a,()=>$.form[t.field.name],e=>$.form[t.field.name]=e),z(e,a)};V(f,e=>{t.field.control===`keys`?e(p):t.field.control===`select`?e(m,1):t.field.control===`checkbox`?e(h,2):t.field.control===`textarea`?e(g,3):e(_,-1)});var v=P(f,2),y=e=>{var t=Qz(),i=M(t,!0);T(t),F(()=>{W(t,`id`,I(n)+`-error`),B(i,I(r))}),z(e,t)},b=e=>{var r=$z(),i=M(r,!0);T(r),F(()=>{W(r,`id`,I(n)+`-hint`),B(i,t.field.hint)}),z(e,r)};V(v,e=>{I(r)?e(y):t.field.hint&&e(b,1)}),T(s),F(()=>{W(c,`for`,I(n)),B(l,`${t.field.label??``} `)}),z(e,s),D()}Hr([`input`,`click`,`change`]);var nB=R(`

          The name is the stable identity used for routing and cannot change once created.

          `),rB=R(``),iB=R(` `),aB=R(`Determines which fields the gateway uses to build requests.`),oB=R(` `),sB=R(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),cB=R(`Immutable once created.`),lB=R(`

          Pick a type to configure its credentials — each provider type asks for different settings.

          `),uB=R(`
          Advanced settings
          `),dB=R(`
          `,1);function fB(e,t){E(t,!0);let n=O(()=>Cz($.types,$.form.type)),r=O(()=>$.formFields),i=O(()=>$.fieldErrors.name||``),a=O(()=>$.fieldErrors.type||``);function o(){$.selectType(),$.formMode===`create`&&($.form.name=Mz($.rows,$.form.type))}An(()=>{let e=$.focusField;if(!e)return;$.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{z(e,nB())},s=O(()=>$.formMode===`edit`?`Edit Provider`:`Add Provider`);cE(e,{get open(){return $.formOpen},get title(){return I(s)},ariaLabel:`Provider credential editor`,get error(){return $.error},get submitting(){return $.formSubmitting},novalidate:!0,onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var s=dB(),c=N(s),l=P(M(c),2),u=M(l);u.value=u.__value=``,H(P(u),16,()=>I(n),e=>e,(e,t)=>{var n=rB(),r=M(n,!0);T(n);var i={};F(()=>{B(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(l);var d=P(l,2),f=e=>{var t=iB(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)},p=e=>{z(e,aB())};V(d,e=>{I(a)?e(f):e(p,-1)}),T(c);var m=P(c,2),h=P(M(m),2);na(h);var g=P(h,2),_=e=>{var t=oB(),n=M(t,!0);T(t),F(()=>B(n,I(i))),z(e,t)},v=e=>{z(e,sB())},y=e=>{z(e,cB())};V(g,e=>{I(i)?e(_):$.formMode===`create`?e(v,1):e(y,-1)}),T(m);var b=P(m,2),x=e=>{z(e,lB())};V(b,e=>{$.form.type||e(x)});var S=P(b,2);H(S,17,()=>I(r).primary,e=>e.name,(e,t)=>{tB(e,{get field(){return I(t)}})});var C=P(S,2),w=M(C);cA(M(w),{get enabled(){return $.form.enabled},label:`provider`,onclick:()=>$.form.enabled=!$.form.enabled}),T(w),T(C);var ee=P(C,2),te=e=>{var t=uB(),n=M(t),i=M(n),a=P(M(i),2),o=M(a,!0);T(a),T(i),T(n);var s=P(n,2);H(s,21,()=>I(r).advanced,e=>e.name,(e,t)=>{tB(e,{get field(){return I(t)}})}),T(s),T(t),F(e=>{t.open=$.advancedOpen,B(o,e)},[()=>I(r).advanced.map(e=>e.label).join(`, `)]),Vr(`toggle`,t,e=>$.advancedOpen=e.currentTarget.open),z(e,t)};V(ee,e=>{I(r).advanced.length>0&&e(te)}),F(()=>{l.disabled=$.formMode===`edit`,W(l,`aria-invalid`,I(a)?`true`:void 0),W(l,`aria-describedby`,I(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=$.formMode===`edit`,W(h,`aria-invalid`,I(i)?`true`:void 0),W(h,`aria-describedby`,I(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),L(`change`,l,o),Gi(l,()=>$.form.type,e=>$.form.type=e),L(`input`,h,()=>$.clearFieldError(`name`)),da(h,()=>$.form.name,e=>$.form.name=e),z(e,s)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`change`,`input`]);var pB=R(`

          Providers

          `),mB=R(``),hB=R(`
          Provider credential management is unavailable.
          `),gB=R(``),_B=R(`
          `),vB=R(`

          No dashboard-managed providers yet. Add one here, or declare providers in config.yaml / environment variables.

          `),yB=R(`

          No providers match your filter.

          `),bB=R(`
          `);function xB(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`providers-config`&&$.fetchPage()});var n=bB(),r=M(n),i=M(r);US(M(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{z(e,pB())},help:e=>{Ue(),z(e,Zr(`Configure LLM provider credentials here instead of setting API keys as - environment variables. Providers declared in config.yaml or env vars - are read-only (Config badge) and cannot be edited or deleted from the - dashboard. Keys are masked after saving.`))},$$slots:{title:!0,help:!0}}),T(i);var a=P(i,2),o=M(a),s=e=>{var t=mB();K(M(t),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(t),F(()=>t.disabled=$.formSubmitting),L(`click`,t,()=>$.openCreate()),z(e,t)};V(o,e=>{$.available&&!q.needsAuth&&e(s)}),T(a),T(r);var c=P(r,2),l=e=>{z(e,hB())};V(c,e=>{!$.available&&!q.needsAuth&&e(l)});var u=P(c,2),d=e=>{var t=gB(),n=M(t,!0);T(t),F(()=>B(n,$.error)),z(e,t)};V(u,e=>{$.error&&!q.needsAuth&&!$.formOpen&&e(d)});var f=P(u,2),p=e=>{nT(e,{label:`Loading providers...`})};V(f,e=>{$.loading&&!q.needsAuth&&e(p)});var m=P(f,2),h=e=>{var t=_B(),n=M(t);sw(M(n),{id:`provider-credential-filter`,placeholder:`Filter by name, type, or base URL...`,label:`Filter providers by name, type, or base URL`,get value(){return $.filter},set value(e){$.filter=e}}),T(n),T(t),z(e,t)};V(m,e=>{($.rows.length>0||$.filter)&&$.available&&!q.needsAuth&&e(h)});var g=P(m,2);fB(g,{});var _=P(g,2),v=e=>{Uz(e,{})};V(_,e=>{$.filteredRows.length>0&&$.available&&!q.needsAuth&&e(v)});var y=P(_,2),b=e=>{z(e,vB())};V(y,e=>{$.rows.length===0&&!$.filter&&!$.loading&&!q.needsAuth&&!$.error&&$.available&&e(b)});var x=P(y,2),S=e=>{z(e,yB())};V(x,e=>{$.rows.length>0&&$.filteredRows.length===0&&$.filter&&!$.loading&&!q.needsAuth&&$.available&&e(S)}),T(n),z(e,n),D()}Hr([`click`]);function SB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function CB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function wB(e){let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t;for(let e of n.split(`/`)){let t=String(e||``).trim();if(t){if(t===`.`||t===`..`)return`User path cannot contain "." or ".." segments.`;if(t.includes(`:`))return`User path cannot contain ":" segments.`}}return``}function TB(e){if(wB(e))return``;let t=String(e||``).trim();if(!t)return``;let n=t.startsWith(`/`)?t:`/`+t,r=[];for(let e of n.split(`/`)){let t=String(e||``).trim();t&&r.push(t)}return r.length?`/`+r.join(`/`):`/`}function EB(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=wB(t.user_path);if(r)return{error:r};let i=TB(t.user_path),a=CB(t.labels),o={name:n,description:String(t.description||``).trim()||void 0,user_path:i||void 0,labels:a.length?a:void 0,dashboard_access:t.dashboard_access?!0:void 0};return t.expires_at&&(o.expires_at=t.expires_at+`T23:59:59Z`),{payload:o}}function DB(e,t=Date.now()){let n=e&&e.expires_at;if(!n)return!1;let r=Date.parse(n);return Number.isFinite(r)&&r<=t}function OB(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function kB(e,t=Date.now()){return!e||e.active===!1||OB(e)?!1:!DB(e,t)}function AB(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function jB(e,t={}){let{query:n=``,showInactive:r=!1,now:i=Date.now()}=t,a=String(n||``).trim().toLowerCase();return(Array.isArray(e)?e:[]).filter(e=>!r&&!kB(e,i)?!1:!a||AB(e).includes(a))}function MB(e,t){return OB(e)?2:+!kB(e,t)}function NB(e){let t=e&&e.expires_at;if(!t)return 1/0;let n=Date.parse(t);return Number.isFinite(n)?n:1/0}function PB(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function FB(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=MB(e,t),i=MB(n,t);if(r!==i)return r-i;let[a,o]=r===2?[PB(e),PB(n)]:[NB(e),NB(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function IB(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!kB(n,t),0)}function LB(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var RB=new class{#e=k(j([]));get keys(){return I(this.#e)}set keys(e){A(this.#e,e,!0)}#t=k(!0);get available(){return I(this.#t)}set available(e){A(this.#t,e,!0)}#n=k(!1);get loading(){return I(this.#n)}set loading(e){A(this.#n,e,!0)}#r=k(``);get error(){return I(this.#r)}set error(e){A(this.#r,e,!0)}#i=k(``);get filter(){return I(this.#i)}set filter(e){A(this.#i,e,!0)}#a=k(!1);get showInactive(){return I(this.#a)}set showInactive(e){A(this.#a,e,!0)}#o=O(()=>FB(jB(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return I(this.#o)}set visibleKeys(e){A(this.#o,e)}#s=O(()=>IB(this.keys));get inactiveCount(){return I(this.#s)}set inactiveCount(e){A(this.#s,e)}#c=k(!1);get formOpen(){return I(this.#c)}set formOpen(e){A(this.#c,e,!0)}#l=k(!1);get formSubmitting(){return I(this.#l)}set formSubmitting(e){A(this.#l,e,!0)}#u=k(``);get issuedValue(){return I(this.#u)}set issuedValue(e){A(this.#u,e,!0)}#d=k(``);get deactivatingID(){return I(this.#d)}set deactivatingID(e){A(this.#d,e,!0)}#f=k(``);get dashboardAccessID(){return I(this.#f)}set dashboardAccessID(e){A(this.#f,e,!0)}#p=k(j(SB()));get form(){return I(this.#p)}set form(e){A(this.#p,e,!0)}#m=k(j(LB()));get labelsEditor(){return I(this.#m)}set labelsEditor(e){A(this.#m,e,!0)}copyState=aM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await aT(`/admin/auth-keys`,{label:`auth keys`,errorFallback:`Unable to load API keys.`});if(e.status===`stale`)return;if(e.status===`unavailable`){this.available=!1,this.keys=[];return}if(e.status===`error`){e.result&&(this.available=!0),this.error=e.error;return}this.available=!0,this.keys=e.items}finally{this.loading=!1}}openForm(){this.formSubmitting||this.formOpen||(this.formOpen=!0,this.error=``,this.issuedValue||(this.copyState.reset(),this.form=SB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=SB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=SB()}async submitForm(){let e=EB(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await oT(`/admin/auth-keys`,`POST`,e.payload,{label:`create API key`,errorFallback:`Failed to create API key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,this.error=t.error;return}if(t.status===`error`){this.error=t.error,t.result&&t.result.status!==401&&console.error(`Failed to create API key:`,t.result.status,this.error);return}let n=t.result.data||{};this.issuedValue=n.value||``,this.formOpen=!0,this.copyState.reset(),this.form=SB(),this.fetchKeys()}finally{this.formSubmitting=!1}}openLabelsEditor(e){!e||this.labelsEditor.submitting||(this.labelsEditor={open:!0,id:e.id,name:e.name||``,value:(e.labels||[]).join(`, `),submitting:!1,error:``})}closeLabelsEditor(){!this.labelsEditor.open||this.labelsEditor.submitting||(this.labelsEditor=LB())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:CB(e.value)};try{let n=await oT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/labels`,`PUT`,t,{label:`update API key labels`,errorFallback:`Failed to update labels.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,e.error=n.error;return}if(n.status===`error`){e.error=n.error,n.result&&n.result.status!==401&&console.error(`Failed to update auth key labels:`,n.result.status,e.error);return}Js.success(`Labels updated for key "`+e.name+`".`),e.submitting=!1,this.closeLabelsEditor(),this.fetchKeys()}finally{e.submitting=!1}}async toggleDashboardAccess(e){if(!e||!e.active||this.dashboardAccessID)return;let t=!e.dashboard_access;this.dashboardAccessID=e.id;try{let n=await oT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/dashboard-access`,`PUT`,{dashboard_access:t},{label:`update API key dashboard access`,errorFallback:`Failed to update dashboard access.`,unavailableMessage:`Auth keys feature is unavailable.`});if(n.status===`stale`)return;if(n.status===`unavailable`){this.available=!1,Js.error(n.error);return}if(n.status===`error`){n.result&&n.result.status!==401&&console.error(`Failed to update auth key dashboard access:`,n.result.status,n.error),Js.error(n.error);return}Js.success(`Dashboard access `+(t?`granted to`:`revoked for`)+` key "`+e.name+`".`),this.fetchKeys()}finally{this.dashboardAccessID=``}}async deactivateKey(e){if(!(!e||!e.active)&&window.confirm(`Deactivate key "`+e.name+`"? This cannot be undone.`)){this.deactivatingID=e.id;try{let t=await oT(`/admin/auth-keys/`+encodeURIComponent(e.id)+`/deactivate`,`POST`,void 0,{label:`deactivate API key`,errorFallback:`Failed to deactivate key.`,unavailableMessage:`Auth keys feature is unavailable.`});if(t.status===`stale`)return;if(t.status===`unavailable`){this.available=!1,Js.error(t.error);return}if(t.status===`error`){t.result&&t.result.status!==401&&console.error(`Failed to deactivate auth key:`,t.result.status,t.error),Js.error(t.error);return}Js.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},zB=R(``),BB=R(`

          Store this key securely — it won’t be shown again.

          `),VB=R(``),HB=R(``),UB=R(``),WB=R(``),GB=R(`
          `);function KB(e,t){E(t,!0);{let t=O(()=>RB.issuedValue?``:RB.error),n=O(()=>RB.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=O(()=>RB.issuedValue?Ra:so);cE(e,{get open(){return RB.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return I(t)},get submitting(){return RB.formSubmitting},get submitLabel(){return I(n)},submittingLabel:`Creating...`,get submitIcon(){return I(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>RB.closeForm(),onsubmit:()=>RB.issuedValue?RB.dismissIssuedKey():RB.submitForm(),children:(e,t)=>{var n=Qr(),r=N(n),i=e=>{var t=BB(),n=P(M(t),2),r=M(n),i=M(r,!0);T(r),zI(P(r,2),{get state(){return RB.copyState},onclick:()=>RB.copyIssuedValue()}),T(n);var a=P(n,2),o=e=>{z(e,zB())};V(a,e=>{RB.copyState.error&&e(o)}),T(t),F(()=>B(i,RB.issuedValue)),z(e,t)},a=e=>{var t=GB(),n=M(t),r=M(n),i=P(M(r),2);na(i),T(r);var a=P(r,2),o=P(M(a),2);na(o),T(a),T(n);var s=P(n,2),c=M(s);US(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{z(e,VB())},help:e=>{Ue(),z(e,Zr(`When set, this key overrides the configured user path request - header for audit logging and downstream request context.`))},$$slots:{title:!0,help:!0}});var l=P(c,2);na(l),T(s);var u=P(s,2),d=M(u);US(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{z(e,HB())},help:e=>{Ue(),z(e,Zr(`Every request authenticated with this key gets these labels, in - addition to any labels from tagging headers. Labels show up in - usage analytics, the request log, and audit logs.`))},$$slots:{title:!0,help:!0}});var f=P(d,2);na(f),T(u);var p=P(u,2),m=M(p);US(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{z(e,UB())},help:e=>{Ue(),z(e,Zr(`When off, this key is denied the dashboard and every /admin API - endpoint. Model endpoints and GET /v1/usage stay available to - the key. The master key always has dashboard access.`))},$$slots:{title:!0,help:!0}});var h=P(m,2),g=M(h);na(g),Ue(2),T(h),T(p),uE(P(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=WB();ft(n),da(n,()=>RB.form.description,e=>RB.form.description=e),z(e,n)},$$slots:{default:!0}}),T(t),da(i,()=>RB.form.name,e=>RB.form.name=e),da(o,()=>RB.form.expires_at,e=>RB.form.expires_at=e),da(l,()=>RB.form.user_path,e=>RB.form.user_path=e),da(f,()=>RB.form.labels,e=>RB.form.labels=e),fa(g,()=>RB.form.dashboard_access,e=>RB.form.dashboard_access=e),z(e,t)};V(r,e=>{RB.issuedValue?e(i):e(a,-1)}),z(e,n)},$$slots:{default:!0}})}D()}var qB=R(`

          `),JB=R(`

          Applies to new requests made with this key. Leave empty to remove all labels.

          `,1);function YB(e,t){E(t,!0),cE(e,{get open(){return RB.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return RB.labelsEditor.error},get submitting(){return RB.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>RB.closeLabelsEditor(),onsubmit:()=>RB.submitLabelsEditor(),headerHint:e=>{var t=qB(),n=M(t,!0);T(t),F(()=>B(n,RB.labelsEditor.name)),z(e,t)},children:(e,t)=>{uE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=JB(),r=N(n);na(r),Ue(2),da(r,()=>RB.labelsEditor.value,e=>RB.labelsEditor.value=e),z(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),D()}var XB=R(` `),ZB=R(`
          `),QB=R(``),$B=R(`Expired`),eV=R(` `),tV=R(` `,1),nV=R(`Deactivated`),rV=R(`
          `),iV=R(`
          NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
          `);function aV(e,t){E(t,!0);var n=iV(),r=M(n),i=M(r),a=M(i),o=P(M(a),5),s=M(o);K(P(M(s)),{get icon(){return Za},width:`13`,height:`13`}),T(s),T(o),Ue(3),T(a),T(i);var c=P(i);H(c,21,()=>RB.visibleKeys,e=>e.id,(e,t)=>{var n=rV();let r;var i=M(n),a=M(i,!0);T(i);var o=P(i),s=M(o,!0);T(o);var c=P(o),l=M(c,!0);T(c);var u=P(c),d=M(u),f=e=>{var n=ZB();H(n,20,()=>I(t).labels||[],e=>e,(e,t)=>{var n=XB(),r=M(n,!0);T(n),F(e=>{Hi(n,e),B(r,t)},[()=>zy(t)]),z(e,n)}),T(n),z(e,n)},p=e=>{z(e,QB())};V(d,e=>{(I(t).labels||[]).length>0?e(f):e(p,-1)}),T(u);var m=P(u),h=M(m),g=M(h,!0);T(h),T(m);var _=P(m),v=M(_);let y;var b=M(v,!0);T(v),T(_);var x=P(_),S=M(x),C=e=>{var n=eV(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{z(e,$B())},s=O(()=>DB(I(t)));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>lc(I(t).expires_at)]),z(e,n)},w=e=>{z(e,Zr(`—`))};V(S,e=>{I(t).expires_at?e(C):e(w,-1)}),T(x);var ee=P(x),te=M(ee,!0);T(ee);var ne=P(ee),re=M(ne),ie=M(re),ae=e=>{var n=tV(),r=N(n);{let e=O(()=>(I(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+I(t).name),n=O(()=>!!RB.dashboardAccessID);iT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>RB.toggleDashboardAccess(I(t)),get disabled(){return I(n)},children:(e,n)=>{{let n=O(()=>I(t).dashboard_access?yo:vo);K(e,{get icon(){return I(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=P(r,2);{let e=O(()=>`Edit labels for API key `+I(t).name);iT(i,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>RB.openLabelsEditor(I(t)),children:(e,t)=>{K(e,{get icon(){return ao},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=P(i,2);{let e=O(()=>(RB.deactivatingID===I(t).id?`Deactivating API key `:`Deactivate API key `)+I(t).name),n=O(()=>RB.deactivatingID===I(t).id);iT(a,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>RB.deactivateKey(I(t)),get disabled(){return I(n)},children:(e,t)=>{K(e,{get icon(){return co},class:`table-icon-svg`})},$$slots:{default:!0}})}z(e,n)},oe=e=>{var n=nV();F(e=>W(n,`title`,e),[()=>I(t).deactivated_at?`Deactivated on `+uc(I(t).deactivated_at):`Deactivated`]),z(e,n)},se=O(()=>OB(I(t)));V(ie,e=>{I(t).active?e(ae):I(se)&&e(oe,1)}),T(re),T(ne),T(n),F((e,i,o)=>{r=U(n,1,`svelte-nf0ldb`,null,r,e),B(a,I(t).name),B(s,I(t).description||`—`),B(l,I(t).user_path||`—`),B(g,I(t).redacted_value),y=U(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":I(t).dashboard_access,"auth-key-status-inactive":!I(t).dashboard_access}),B(b,I(t).dashboard_access?`Allowed`:`Denied`),W(x,`title`,i),B(te,o)},[()=>({"auth-key-row-deactivated":OB(I(t))}),()=>I(t).expires_at?uc(I(t).expires_at):``,()=>os.formatTimestamp(I(t).created_at)]),z(e,n)}),T(c),T(r),T(n),z(e,n),D()}var oV=R(``),sV=R(`
          API key management is unavailable.
          `),cV=R(``),lV=R(`

          Managed API keys authenticate requests to the gateway. Deactivation is - permanent — create a new key if access needs to be restored.

          `),uV=R(`
          `),dV=R(`
          `),fV=R(`

          `),pV=R(`

          No API keys yet. Issue a key to get started.

          `),mV=R(`
          `);function hV(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`auth-keys`&&RB.fetchKeys()});var n=mV(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=oV();K(M(t),{get icon(){return so},class:`table-icon-svg`}),Ue(2),T(t),F(()=>t.disabled=RB.formSubmitting),L(`click`,t,()=>{RB.formSubmitting||RB.openForm()}),z(e,t)};V(a,e=>{RB.available&&!q.authError&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,sV())};V(s,e=>{!RB.available&&!q.authError&&e(c)});var l=P(s,2),u=e=>{var t=cV(),n=M(t,!0);T(t),F(()=>B(n,RB.error)),z(e,t)};V(l,e=>{RB.error&&!q.authError&&!RB.formOpen&&e(u)});var d=P(l,2),f=e=>{z(e,lV())};V(d,e=>{RB.available&&!q.authError&&e(f)});var p=P(d,2);KB(p,{});var m=P(p,2);YB(m,{});var h=P(m,2),g=e=>{var t=uV();vS(M(t),{size:18,label:`Loading API keys`}),T(t),z(e,t)};V(h,e=>{RB.loading&&RB.keys.length===0&&e(g)});var _=P(h,2),v=e=>{var t=dV(),n=M(t);sw(M(n),{placeholder:`Filter by name, description, user path, label, or token...`,label:`Filter API keys by name, description, user path, label, or token`,get value(){return RB.filter},set value(e){RB.filter=e}}),T(n);var r=P(n,2),i=M(r),a=M(i);na(a);var o=P(a,2),s=P(M(o)),c=e=>{var t=Zr();F(()=>B(t,`(${RB.inactiveCount??``})`)),z(e,t)};V(s,e=>{RB.inactiveCount>0&&e(c)}),T(o),T(i),T(r),T(t),fa(a,()=>RB.showInactive,e=>RB.showInactive=e),z(e,t)};V(_,e=>{RB.keys.length>0&&RB.available&&e(v)});var y=P(_,2),b=e=>{aV(e,{})};V(y,e=>{RB.visibleKeys.length>0&&RB.available&&e(b)});var x=P(y,2),S=e=>{var t=fV(),n=M(t);T(t),F(()=>B(n,`No API keys match the current filter.${RB.inactiveCount>0&&!RB.showInactive?` `+RB.inactiveCount+` inactive `+(RB.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),z(e,t)};V(x,e=>{RB.keys.length>0&&RB.visibleKeys.length===0&&RB.available&&e(S)});var C=P(x,2),w=e=>{z(e,pV())};V(C,e=>{RB.keys.length===0&&!RB.loading&&!q.authError&&!RB.error&&RB.available&&e(w)}),T(n),z(e,n),D()}Hr([`click`]);var gV=R(`

          Timezone

          `),_V=R(``),vV=R(``),yV=R(`
          `,1);function bV(e,t){E(t,!0);function n(){os.saveOverride(),q.refresh()}function r(){os.clearOverride(),q.refresh()}var i=yV(),a=N(i);US(M(a),{copyId:`timezone-help-copy`,label:`timezone help`,text:`Day-based analytics, charts, and date filters use your effective timezone. Usage and audit logs keep UTC in the hover title while rendering row timestamps in your effective timezone.`,title:e=>{z(e,gV())},$$slots:{title:!0}}),T(a);var o=P(a,2),s=M(o),c=P(M(s),2),l=M(c),u=M(l);T(l),l.value=l.__value=``,H(P(l),17,()=>os.options,e=>e.value,(e,t)=>{var n=_V(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(c),T(s),T(o);var d=P(o,2),f=M(d),p=e=>{var t=vV();L(`click`,t,r),z(e,t)};V(f,e=>{os.override&&e(p)}),T(d),F(e=>B(u,`Automatic (${e??``})`),[()=>os.detectedTimeZoneLabel()]),Vr(`focus`,c,()=>os.ensureOptions()),L(`change`,c,n),Gi(c,()=>os.override,e=>os.override=e),z(e,i),D()}Hr([`change`,`click`]);var xV=R(``),SV=R(`

          Failover

          `,1);function CV(e,t){E(t,!0);let n=O(()=>Z.failoverSaving||Z.failoverGenerating||Z.failoverDraftSaving||!Z.failoverAvailable||!Z.failoverEnabled());var r=SV(),i=N(r),a=P(M(i),2),o=M(a),s=M(o);K(s,{get icon(){return ko},class:`form-action-icon`});var c=P(s,2),l=M(c,!0);T(c),T(o);var u=P(o,2);K(M(u),{get icon(){return To},class:`form-action-icon`}),Ue(2),T(u),T(a),T(i);var d=P(i,2),f=M(d),p=e=>{var t=xV(),n=M(t,!0);T(t),F(()=>B(n,Z.failoverError)),z(e,t)};V(f,e=>{Z.failoverError&&e(p)}),T(d),ej(P(d,2),{}),F(()=>{o.disabled=I(n),B(l,Z.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=I(n)}),L(`click`,o,()=>Z.generateFailoverRules()),L(`click`,u,()=>Z.openFailoverResetDialog()),z(e,r),D()}Hr([`click`]);function wV(){return{daily_reset_hour:0,daily_reset_minute:0,weekly_reset_weekday:1,weekly_reset_hour:0,weekly_reset_minute:0,monthly_reset_day:1,monthly_reset_hour:0,monthly_reset_minute:0}}function TV(e,t){let n=t||{},r=(e,t)=>{if(e===``)return t;let n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)?Math.trunc(n):t},i=(e,t)=>r(n[e],t),a=(t,n)=>e?r(e[t],n):n;return{daily_reset_hour:a(`daily_reset_hour`,i(`daily_reset_hour`,0)),daily_reset_minute:a(`daily_reset_minute`,i(`daily_reset_minute`,0)),weekly_reset_weekday:a(`weekly_reset_weekday`,i(`weekly_reset_weekday`,1)),weekly_reset_hour:a(`weekly_reset_hour`,i(`weekly_reset_hour`,0)),weekly_reset_minute:a(`weekly_reset_minute`,i(`weekly_reset_minute`,0)),monthly_reset_day:a(`monthly_reset_day`,i(`monthly_reset_day`,1)),monthly_reset_hour:a(`monthly_reset_hour`,i(`monthly_reset_hour`,0)),monthly_reset_minute:a(`monthly_reset_minute`,i(`monthly_reset_minute`,0))}}function EV(){return[{value:0,label:`Sunday`},{value:1,label:`Monday`},{value:2,label:`Tuesday`},{value:3,label:`Wednesday`},{value:4,label:`Thursday`},{value:5,label:`Friday`},{value:6,label:`Saturday`}]}var DV=R(`

          Budget Resets

          `),OV=R(``),kV=R(`

          If the selected day does not exist in a month, the reset runs on - the last day of that month.

          `),AV=R(``),jV=R(``),MV=R(`
          Monthly
          Weekly
          Daily
          `,1);function NV(e,t){E(t,!0);let n=k(j(wV())),r=k(!1),i=k(!1),a=k(``),o=k(!1),s=O(()=>_s.budgetsVisible());async function c(){if(await _s.ensureLoaded(),!_s.budgetsVisible()){A(a,``);return}A(r,!0),A(a,``);try{let e=await fs(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){A(a,`Unable to load budget settings.`);return}A(n,TV(e.data,I(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),A(a,`Unable to load budget settings.`)}finally{A(r,!1)}}async function l(){if(!I(i)){A(i,!0);try{let e=await ps(`/admin/budgets/settings`,`PUT`,TV(I(n),I(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){Js.error(`Unable to save budget settings.`);return}A(n,TV(e.data,I(n)),!0),A(a,``),Js.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),Js.error(`Unable to save budget settings.`)}finally{A(i,!1)}}}An(()=>{q.refreshTick,c()});var u=Qr(),d=N(u),f=e=>{var t=MV(),s=N(t),c=M(s);US(c,{copyId:`budget-settings-help-copy`,label:`budget help`,text:`Budget reset anchors are stored in the database and evaluated in UTC. Hourly budgets reset at the top of each hour.`,title:e=>{z(e,DV())},$$slots:{title:!0}});var u=P(c,2),d=M(u),f=P(M(d),2),p=M(f);US(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return I(o)},set open(e){A(o,e,!0)},title:e=>{z(e,OV())},$$slots:{title:!0}});var m=P(p,2);na(m),T(f);var h=P(f,2),g=P(M(h),2);na(g),T(h);var _=P(h,2),v=P(M(_),2);na(v),T(_);var y=P(_,2),b=M(y),x=e=>{z(e,kV())};V(b,e=>{I(o)&&e(x)}),T(y),T(d);var S=P(d,2),C=P(M(S),2),w=P(M(C),2);H(w,21,EV,e=>e.value,(e,t)=>{var n=AV(),r=M(n,!0);T(n);var i={};F(()=>{B(r,I(t).label),i!==(i=I(t).value)&&(n.value=(n.__value=I(t).value)??``)}),z(e,n)}),T(w),T(C);var ee=P(C,2),te=P(M(ee),2);na(te),T(ee);var ne=P(ee,2),re=P(M(ne),2);na(re),T(ne),Ue(2),T(S);var ie=P(S,2),ae=P(M(ie),4),oe=P(M(ae),2);na(oe),T(ae);var se=P(ae,2),ce=P(M(se),2);na(ce),T(se),Ue(2),T(ie),T(u);var le=P(u,2),ue=M(le);K(M(ue),{get icon(){return fo},class:`form-action-icon`}),Ue(2),T(ue);var de=P(ue,2),fe=e=>{vS(e,{size:16,label:`Loading budget settings`})};V(de,e=>{I(r)&&e(fe)}),T(le),T(s);var pe=P(s,2),me=M(pe),he=e=>{var t=jV(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)};V(me,e=>{I(a)&&e(he)}),T(pe),F(()=>{ue.disabled=I(i)||I(r),W(ue,`aria-busy`,I(i)?`true`:`false`)}),da(m,()=>I(n).monthly_reset_day,e=>I(n).monthly_reset_day=e),da(g,()=>I(n).monthly_reset_hour,e=>I(n).monthly_reset_hour=e),da(v,()=>I(n).monthly_reset_minute,e=>I(n).monthly_reset_minute=e),Gi(w,()=>I(n).weekly_reset_weekday,e=>I(n).weekly_reset_weekday=e),da(te,()=>I(n).weekly_reset_hour,e=>I(n).weekly_reset_hour=e),da(re,()=>I(n).weekly_reset_minute,e=>I(n).weekly_reset_minute=e),da(oe,()=>I(n).daily_reset_hour,e=>I(n).daily_reset_hour=e),da(ce,()=>I(n).daily_reset_minute,e=>I(n).daily_reset_minute=e),L(`click`,ue,l),z(e,t)};V(d,e=>{I(s)&&e(f)}),z(e,u),D()}Hr([`click`]);var PV=R(`

          Reset All Budgets

          Start new budget periods for every configured budget without changing - the limits.

          `);function FV(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=PV(),n=P(M(t),2),r=M(n);K(M(r),{get icon(){return uo},class:`form-action-icon`}),Ue(2),T(r),T(n),T(t),F(()=>r.disabled=Y.resetAllLoading),L(`click`,r,()=>Y.openResetDialog()),z(e,t)},a=O(()=>_s.budgetsVisible());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}Hr([`click`]);function IV(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function LV(e){return(e&&Array.isArray(e.headers)?e.headers:[]).map(e=>({header:typeof e.header==`string`?e.header:``,prefix:typeof e.prefix==`string`?e.prefix:``,do_not_pass:e.do_not_pass===!0,delimiter:typeof e.delimiter==`string`&&e.delimiter!==`,`?e.delimiter:``,managed:e.managed===!0}))}function RV(e){return{headers:(Array.isArray(e)?e:[]).filter(e=>!e.managed&&e.header.trim()!==``).map(e=>({header:e.header.trim(),prefix:e.prefix,do_not_pass:e.do_not_pass,delimiter:e.delimiter}))}}function zV(e){return e&&e.error&&e.error.message?e.error.message:``}var BV=R(`

          Tagging based on headers

          `),VV=R(`config`),HV=R(``),UV=R(`
          `),WV=R(`

          No tagging headers configured. Requests are not labelled.

          `),GV=R(``),KV=R(`
          `,1);function qV(e,t){E(t,!0);let n=k(j([])),r=k(!0),i=k(!1),a=k(!1),o=k(``);function s(){I(n).push(IV())}function c(e){let t=I(n)[e];!t||t.managed||I(n).splice(e,1)}async function l(){A(i,!0),A(o,``);try{let e=await fs(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){A(o,`Unable to load tagging settings.`);return}A(n,LV(e.data),!0),A(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),A(o,`Unable to load tagging settings.`)}finally{A(i,!1)}}async function u(){if(!(I(a)||!I(r))){A(a,!0);try{let e=await ps(`/admin/tagging/settings`,`PUT`,RV(I(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){Js.error(e.status!==401&&zV(e.data)||`Unable to save tagging settings.`);return}A(n,LV(e.data),!0),A(r,e.data&&e.data.editable!==!1,!0),A(o,``),Js.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),Js.error(`Unable to save tagging settings.`)}finally{A(a,!1)}}}An(()=>{q.refreshTick,l()});var d=KV(),f=N(d),p=M(f);US(p,{copyId:`tagging-settings-help-copy`,label:`tagging help`,text:`Each request is labelled from the listed headers; labels land in usage tracking and audit logs. A header value can carry several labels split by the delimiter (default: comma). The prefix is trimmed from each label only — the header itself is forwarded unchanged unless 'Do not pass' is checked. Rows marked CONFIG come from config.yaml or TAGGING_HEADER_* env vars and are read-only here.`,title:e=>{z(e,BV())},$$slots:{title:!0}});var m=P(p,2),h=M(m);H(h,17,()=>I(n),oi,(e,t,n)=>{var i=UV(),a=M(i),o=M(a);W(o,`for`,`tagging-header-`+n);var s=P(o,2);na(s),W(s,`id`,`tagging-header-`+n),T(a);var l=P(a,2),u=M(l);W(u,`for`,`tagging-prefix-`+n);var d=P(u,2);na(d),W(d,`id`,`tagging-prefix-`+n),T(l);var f=P(l,2),p=M(f);W(p,`for`,`tagging-delimiter-`+n);var m=P(p,2);na(m),W(m,`id`,`tagging-delimiter-`+n),T(f);var h=P(f,2),g=M(h);na(g),Ue(2),T(h);var _=P(h,2),v=M(_),y=e=>{z(e,VV())},b=e=>{var i=HV();F(()=>{i.disabled=!I(r),W(i,`aria-label`,`Remove tagging header `+(I(t).header||n+1))}),L(`click`,i,()=>c(n)),z(e,i)};V(v,e=>{I(t).managed?e(y):e(b,-1)}),T(_),T(i),F(()=>{s.disabled=I(t).managed||!I(r),d.disabled=I(t).managed||!I(r),m.disabled=I(t).managed||!I(r),g.disabled=I(t).managed||!I(r)}),da(s,()=>I(t).header,e=>I(t).header=e),da(d,()=>I(t).prefix,e=>I(t).prefix=e),da(m,()=>I(t).delimiter,e=>I(t).delimiter=e),fa(g,()=>I(t).do_not_pass,e=>I(t).do_not_pass=e),z(e,i)});var g=P(h,2),_=e=>{vS(e,{size:16,label:`Loading tagging settings`})};V(g,e=>{I(i)&&e(_)});var v=P(g,2),y=e=>{z(e,WV())};V(v,e=>{!I(i)&&I(n).length===0&&e(y)}),T(m);var b=P(m,2),x=M(b);K(M(x),{get icon(){return so},class:`form-action-icon`}),Ue(2),T(x);var S=P(x,2);K(M(S),{get icon(){return fo},class:`form-action-icon`}),Ue(2),T(S),T(b),T(f);var C=P(f,2),w=M(C),ee=e=>{var t=GV(),n=M(t,!0);T(t),F(()=>B(n,I(o))),z(e,t)};V(w,e=>{I(o)&&e(ee)}),T(C),F(()=>{x.disabled=!I(r)||I(a)||I(i),S.disabled=!I(r)||I(a)||I(i),W(S,`aria-busy`,I(a)?`true`:`false`)}),L(`click`,x,s),L(`click`,S,u),z(e,d),D()}Hr([`click`]);function JV(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?cc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?cc(r):``}}function YV(e,t,n,r){return{...JV(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function XV(e){let t=Number(e&&e.matched||0),n=Number(e&&e.recalculated||0),r=Number(e&&e.without_pricing||0),i=`Pricing recalculated for `+n+` of `+t+` usage record`+(t===1?``:`s`)+`.`;return r>0&&(i+=` `+r+` usage record`+(r===1?` still lacks`:`s still lack`)+` pricing metadata.`),i}var ZV=R(`

          Usage Pricing Recalculation

          `),QV=R(`
          `);function $V(e,t){E(t,!0);let n=k(``),r=k(``),i=k(!1),a=O(()=>_s.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!I(a)){Js.error(`Usage pricing recalculation is unavailable.`);return}I(i)||Ns.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Na,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!I(a)){Js.error(`Usage pricing recalculation is unavailable.`);return}if(!I(i)){A(i,!0);try{let e=await ps(`/admin/usage/recalculate-pricing`,`POST`,YV({selectedPreset:Oc.selectedPreset,customStartDate:Oc.customStartDate,customEndDate:Oc.customEndDate,today:os.todayDate()},I(n),I(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Ns.error=`Unable to recalculate pricing.`;return}Ns.close(),Js.success(XV(e.data)),Pc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Ns.error=`Unable to recalculate pricing.`}finally{A(i,!1)}}}var c=Qr(),l=N(c),u=e=>{var t=QV(),s=M(t);US(s,{copyId:`pricing-recalculate-help-copy`,label:`pricing recalculation help`,text:`Recalculate stored input, output, total, and Pro Saved costs from the current model pricing metadata. This overwrites matching historical cost fields. Filters are applied to the selected date range, user path subtree, and provider/model selector or alias.`,title:e=>{z(e,ZV())},$$slots:{title:!0}});var c=P(s,2),l=M(c),u=P(M(l),2);Zc(M(u),{}),T(u),T(l);var d=P(l,2),f=P(M(d),2);na(f),T(d);var p=P(d,2),m=P(M(p),2);na(m),T(p),T(c);var h=P(c,2),g=M(h);K(M(g),{get icon(){return Na},class:`form-action-icon`}),Ue(2),T(g),T(h),T(t),F(()=>{g.disabled=I(i)||!I(a),W(g,`aria-busy`,I(i)?`true`:`false`)}),da(f,()=>I(n),e=>A(n,e)),da(m,()=>I(r),e=>A(r,e)),L(`click`,g,o),z(e,t)};V(l,e=>{I(a)&&e(u)}),z(e,c),D()}Hr([`click`]);function eH(e){return String(e&&e.status||`ok`).toLowerCase()}function tH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=eH(e);return(r===`ok`?`Runtime refreshed.`:r===`partial`?`Runtime refresh completed with warnings.`:`Runtime refresh failed.`)+` `+t+` model`+(t===1?``:`s`)+` across `+n+` provider`+(n===1?``:`s`)+`.`}function nH(e){return!!e&&eH(e)===`ok`}function rH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function iH(e){let t=String(e&&e.name||``).replace(/_/g,` `),n=String(e&&e.status||``).trim(),r=String(e&&(e.error||e.message)||``).trim();return t?r?t+`: `+n+` - `+r:t+`: `+n:r||n||``}var aH=R(`

          Runtime Refresh

          `),oH=R(`
        • `),sH=R(`
            `),cH=R(`
            `,1);function lH(e,t){E(t,!0);let n=k(!1),r=k(null);async function i(){if(!I(n)){A(n,!0),A(r,null);try{let e=await ps(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){Js.error(`Runtime refresh failed.`);return}A(r,e.data&&typeof e.data==`object`?e.data:null,!0),nH(I(r))?Js.success(tH(I(r))):Js.error(tH(I(r))),q.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),Js.error(`Runtime refresh failed.`)}finally{A(n,!1)}}}var a=cH(),o=N(a),s=M(o);US(s,{copyId:`runtime-refresh-help-copy`,label:`runtime refresh help`,text:`Pull the latest model metadata, provider inventory, API keys, aliases, model access rules, guardrails, and workflows.`,title:e=>{z(e,aH())},$$slots:{title:!0}});var c=P(s,2),l=M(c);let u;K(M(l),{get icon(){return lo},class:`settings-refresh-icon`}),Ue(2),T(l),T(c),T(o);var d=P(o,2),f=M(d),p=e=>{var t=sH();H(t,21,()=>rH(I(r)),e=>e.name,(e,t)=>{var n=oH(),r=M(n,!0);T(n),F(e=>{U(n,1,`runtime-refresh-step is-${I(t).status??``}`,`svelte-yeq2mp`),B(r,e)},[()=>iH(I(t))]),z(e,n)}),T(t),z(e,t)},m=O(()=>rH(I(r)).length>0);V(f,e=>{I(m)&&e(p)}),T(d),F(()=>{u=U(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":I(n)}),l.disabled=I(n),W(l,`aria-busy`,I(n)?`true`:`false`)}),L(`click`,l,i),z(e,a),D()}Hr([`click`]);var uH=R(`
            `);function dH(e,t){E(t,!0),An(()=>{q.refreshTick,Uo.page===`settings`&&(os.ensureOptions(),_s.ensureLoaded())});var n=uH(),r=P(M(n),2),i=M(r);bV(i,{});var a=P(i,2);CV(a,{});var o=P(a,2);NV(o,{});var s=P(o,2);FV(s,{});var c=P(s,2);qV(c,{});var l=P(c,2);$V(l,{}),lH(P(l,2),{}),T(r);var u=P(r,2),d=M(u,!0);T(u),T(n),F(e=>B(d,e),[()=>Ro()]),z(e,n),D()}var fH=R(`
            `);function pH(e,t){E(t,!0);let n={overview:pC,usage:eT,budgets:AE,"rate-limits":VD,models:Cj,workflows:WN,"audit-logs":BL,guardrails:NR,"mcp-servers":pz,"providers-config":xB,"auth-keys":hV,settings:dH};os.init(),Oc.init(),q.init(),Ea.init(),Da.init(),Uo.init(),An(()=>{q.refreshTick,_s.fetch(),kc.fetchModels(),kc.fetchCategories()}),An(()=>{document.body.classList.toggle(`dashboard-modal-open`,Oa.anyOpen)});let r=O(()=>n[Uo.page]||pC);var i=fH(),a=M(i);Ss(a,{});var o=P(a,2),s=M(o);$s(s,{}),_i(P(s,2),()=>I(r),(e,t)=>{t(e,{})}),T(o);var c=P(o,2);js(c,{});var l=P(c,2);Ls(l,{}),Zs(P(l,2),{}),T(i),z(e,i),D()}ti(pH,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/index.html b/internal/admin/dashboard/static/dist/index.html index c5258ee85..dcbed8c8b 100644 --- a/internal/admin/dashboard/static/dist/index.html +++ b/internal/admin/dashboard/static/dist/index.html @@ -7,8 +7,8 @@ GoModel Dashboard - - + +
            diff --git a/internal/admin/handler.go b/internal/admin/handler.go index cb91a250c..0f8e88027 100644 --- a/internal/admin/handler.go +++ b/internal/admin/handler.go @@ -24,6 +24,7 @@ import ( "github.com/enterpilot/gomodel/internal/providers" "github.com/enterpilot/gomodel/internal/providers/health" "github.com/enterpilot/gomodel/internal/ratelimit" + "github.com/enterpilot/gomodel/internal/runtimesettings" "github.com/enterpilot/gomodel/internal/tagging" "github.com/enterpilot/gomodel/internal/usage" "github.com/enterpilot/gomodel/internal/virtualmodels" @@ -46,6 +47,7 @@ type Handler struct { budgets *budget.Service rateLimits *ratelimit.Service tagging *tagging.Service + runtimeSettings *runtimesettings.Service guardrails guardrails.Catalog guardrailDefs *guardrails.Service liveBroker *live.Broker @@ -343,6 +345,13 @@ func WithRuntimeRefresher(refresher RuntimeRefresher) Option { } } +// WithRuntimeSettings enables deployment-wide extension settings. +func WithRuntimeSettings(settings *runtimesettings.Service) Option { + return func(h *Handler) { + h.runtimeSettings = settings + } +} + // WithConfiguredProviders enables the admin-safe provider inventory endpoint. func WithConfiguredProviders(configs []providers.SanitizedProviderConfig) Option { return func(h *Handler) { diff --git a/internal/admin/handler_runtime_settings.go b/internal/admin/handler_runtime_settings.go new file mode 100644 index 000000000..cf1fdc196 --- /dev/null +++ b/internal/admin/handler_runtime_settings.go @@ -0,0 +1,56 @@ +package admin + +import ( + "errors" + "net/http" + "strings" + + "github.com/labstack/echo/v5" + + "github.com/enterpilot/gomodel/ext" + "github.com/enterpilot/gomodel/internal/core" + "github.com/enterpilot/gomodel/internal/runtimesettings" +) + +type runtimeSettingsResponse struct { + Settings []ext.SettingDescriptor `json:"settings"` +} + +type updateRuntimeSettingRequest struct { + Value string `json:"value"` +} + +// RuntimeSettings lists extension-defined settings for the Dashboard. +func (h *Handler) RuntimeSettings(c *echo.Context) error { + settings := []ext.SettingDescriptor{} + if h.runtimeSettings != nil { + settings = h.runtimeSettings.List() + } + return c.JSON(http.StatusOK, runtimeSettingsResponse{Settings: settings}) +} + +// UpdateRuntimeSetting validates and persists one extension-defined setting. +func (h *Handler) UpdateRuntimeSetting(c *echo.Context) error { + if h.runtimeSettings == nil { + return handleError(c, featureUnavailableError("runtime settings are unavailable")) + } + var req updateRuntimeSettingRequest + if err := c.Bind(&req); err != nil { + return handleError(c, core.NewInvalidRequestError("invalid request body: "+err.Error(), err)) + } + key := strings.TrimSpace(c.Param("key")) + setting, err := h.runtimeSettings.Update(c.Request().Context(), key, req.Value) + if err != nil { + switch { + case errors.Is(err, runtimesettings.ErrNotFound): + return handleError(c, core.NewNotFoundError("runtime setting not found").WithCode("runtime_setting_not_found")) + case errors.Is(err, runtimesettings.ErrLocked): + return handleError(c, core.NewInvalidRequestError("runtime setting is managed by an environment variable", err)) + case errors.Is(err, runtimesettings.ErrInvalid): + return handleError(c, core.NewInvalidRequestError(err.Error(), err)) + default: + return handleError(c, featureUnavailableError("failed to save runtime setting: "+err.Error())) + } + } + return c.JSON(http.StatusOK, setting) +} diff --git a/internal/admin/handler_runtime_settings_test.go b/internal/admin/handler_runtime_settings_test.go new file mode 100644 index 000000000..2f571f70e --- /dev/null +++ b/internal/admin/handler_runtime_settings_test.go @@ -0,0 +1,152 @@ +package admin + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "path/filepath" + "strings" + "sync" + "testing" + + "github.com/labstack/echo/v5" + + "github.com/enterpilot/gomodel/ext" + "github.com/enterpilot/gomodel/internal/runtimesettings" + "github.com/enterpilot/gomodel/internal/storage" +) + +type adminTestRuntimeSetting struct { + mu sync.Mutex + value string + locked bool +} + +func (s *adminTestRuntimeSetting) Descriptor() ext.SettingDescriptor { + s.mu.Lock() + defer s.mu.Unlock() + return ext.SettingDescriptor{ + Key: "pro.compression.level", + Label: "Prompt compression level", + Value: s.value, + Locked: s.locked, + Options: []ext.SettingOption{ + {Value: "none", Label: "None"}, + {Value: "high", Label: "High"}, + }, + } +} + +func (s *adminTestRuntimeSetting) Apply(value string) error { + s.mu.Lock() + defer s.mu.Unlock() + if value != "none" && value != "high" { + return fmt.Errorf("invalid level") + } + s.value = value + return nil +} + +func (s *adminTestRuntimeSetting) currentValue() string { + s.mu.Lock() + defer s.mu.Unlock() + return s.value +} + +func newAdminRuntimeSettingsService(t *testing.T, setting ext.RuntimeSetting) *runtimesettings.Service { + t.Helper() + backend, err := storage.NewSQLite(storage.SQLiteConfig{Path: filepath.Join(t.TempDir(), "admin-settings.db")}) + if err != nil { + t.Fatalf("open sqlite: %v", err) + } + t.Cleanup(func() { _ = backend.Close() }) + service, err := runtimesettings.New(context.Background(), backend, []ext.RuntimeSetting{setting}) + if err != nil { + t.Fatalf("create runtime settings service: %v", err) + } + t.Cleanup(func() { _ = service.Close() }) + return service +} + +func runtimeSettingsRequest(e *echo.Echo, method, path, body string) *httptest.ResponseRecorder { + req := httptest.NewRequest(method, path, strings.NewReader(body)) + if body != "" { + req.Header.Set("Content-Type", "application/json") + } + rec := httptest.NewRecorder() + e.ServeHTTP(rec, req) + return rec +} + +func TestRuntimeSettingsListAndUpdate(t *testing.T) { + setting := &adminTestRuntimeSetting{value: "high"} + h := NewHandler(nil, nil, WithRuntimeSettings(newAdminRuntimeSettingsService(t, setting))) + + e := echo.New() + h.RegisterRoutes(e.Group("/admin")) + listRec := runtimeSettingsRequest(e, http.MethodGet, "/admin/runtime/settings", "") + var list runtimeSettingsResponse + if err := json.Unmarshal(listRec.Body.Bytes(), &list); err != nil { + t.Fatalf("decode list: %v", err) + } + if len(list.Settings) != 1 || list.Settings[0].Value != "high" { + t.Fatalf("settings = %+v", list.Settings) + } + + updateRec := runtimeSettingsRequest(e, http.MethodPut, "/admin/runtime/settings/pro.compression.level", `{"value":"none"}`) + if updateRec.Code != http.StatusOK || setting.currentValue() != "none" { + t.Fatalf("update status=%d value=%q body=%s", updateRec.Code, setting.currentValue(), updateRec.Body.String()) + } +} + +func TestRuntimeSettingManagedByEnvironmentIsReadOnly(t *testing.T) { + setting := &adminTestRuntimeSetting{value: "high", locked: true} + h := NewHandler(nil, nil, WithRuntimeSettings(newAdminRuntimeSettingsService(t, setting))) + + e := echo.New() + h.RegisterRoutes(e.Group("/admin")) + rec := runtimeSettingsRequest(e, http.MethodPut, "/admin/runtime/settings/pro.compression.level", `{"value":"none"}`) + if rec.Code != http.StatusBadRequest || setting.currentValue() != "high" { + t.Fatalf("locked update status=%d value=%q body=%s", rec.Code, setting.currentValue(), rec.Body.String()) + } +} + +func TestUpdateRuntimeSettingRejectsUnknownKeyAndInvalidValue(t *testing.T) { + setting := &adminTestRuntimeSetting{value: "high"} + h := NewHandler(nil, nil, WithRuntimeSettings(newAdminRuntimeSettingsService(t, setting))) + e := echo.New() + h.RegisterRoutes(e.Group("/admin")) + + unknown := runtimeSettingsRequest(e, http.MethodPut, "/admin/runtime/settings/missing", `{"value":"none"}`) + if unknown.Code != http.StatusNotFound || !strings.Contains(unknown.Body.String(), `"code":"runtime_setting_not_found"`) { + t.Fatalf("unknown update status=%d body=%s", unknown.Code, unknown.Body.String()) + } + invalid := runtimeSettingsRequest(e, http.MethodPut, "/admin/runtime/settings/pro.compression.level", `{"value":"turbo"}`) + if invalid.Code != http.StatusBadRequest { + t.Fatalf("invalid update status=%d body=%s", invalid.Code, invalid.Body.String()) + } + if setting.currentValue() != "high" { + t.Fatalf("rejected updates changed value to %q", setting.currentValue()) + } +} + +func TestRuntimeSettingsWithoutRegisteredExtensions(t *testing.T) { + h := NewHandler(nil, nil) + e := echo.New() + h.RegisterRoutes(e.Group("/admin")) + + list := runtimeSettingsRequest(e, http.MethodGet, "/admin/runtime/settings", "") + var response runtimeSettingsResponse + if err := json.Unmarshal(list.Body.Bytes(), &response); err != nil { + t.Fatalf("decode empty list: %v", err) + } + if list.Code != http.StatusOK || len(response.Settings) != 0 { + t.Fatalf("empty list status=%d body=%s", list.Code, list.Body.String()) + } + update := runtimeSettingsRequest(e, http.MethodPut, "/admin/runtime/settings/pro.compression.level", `{"value":"high"}`) + if update.Code != http.StatusServiceUnavailable || !strings.Contains(update.Body.String(), `"code":"feature_unavailable"`) { + t.Fatalf("unavailable update status=%d body=%s", update.Code, update.Body.String()) + } +} diff --git a/internal/admin/routes.go b/internal/admin/routes.go index 55fb59d0c..7aa7dde6a 100644 --- a/internal/admin/routes.go +++ b/internal/admin/routes.go @@ -17,6 +17,8 @@ type RouteRegistrar interface { // Callers typically pass an *echo.Group rooted at /admin. func (h *Handler) RegisterRoutes(g RouteRegistrar) { g.GET("/runtime/config", h.DashboardConfig) + g.GET("/runtime/settings", h.RuntimeSettings) + g.PUT("/runtime/settings/:key", h.UpdateRuntimeSetting) g.GET("/cache/overview", h.CacheOverview) g.GET("/live/logs", h.LiveLogs) diff --git a/internal/admin/routes_test.go b/internal/admin/routes_test.go index 4f8a4fd2f..02f27f958 100644 --- a/internal/admin/routes_test.go +++ b/internal/admin/routes_test.go @@ -34,6 +34,8 @@ func TestRegisterRoutes_RegistersExpectedPaths(t *testing.T) { "GET /admin/runtime/config", "GET /admin/cache/overview", "GET /admin/live/logs", + "GET /admin/runtime/settings", + "PUT /admin/runtime/settings/:key", "GET /admin/usage/summary", "GET /admin/usage/daily", diff --git a/internal/app/app.go b/internal/app/app.go index 13ef8f93f..5e6af7b22 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -38,6 +38,7 @@ import ( "github.com/enterpilot/gomodel/internal/ratelimit" "github.com/enterpilot/gomodel/internal/responsecache" "github.com/enterpilot/gomodel/internal/responsestore" + "github.com/enterpilot/gomodel/internal/runtimesettings" "github.com/enterpilot/gomodel/internal/server" "github.com/enterpilot/gomodel/internal/session" "github.com/enterpilot/gomodel/internal/storage" @@ -72,6 +73,7 @@ type App struct { live *live.Broker server *server.Server storage storage.Storage + runtimeSettings *runtimesettings.Service // registered records every successfully initialized subsystem in // construction order, together with the teardown path that owns it. It is @@ -245,6 +247,18 @@ func New(ctx context.Context, cfg Config) (*App, error) { app.storage = sharedStorage app.register(subsystemStorage, ownedByShutdown, sharedStorage.Close) + var registeredSettings []ext.RuntimeSetting + if cfg.Extensions != nil { + registeredSettings = cfg.Extensions.Settings() + } + app.runtimeSettings, err = runtimesettings.New(ctx, sharedStorage, registeredSettings) + if err != nil { + return fail("failed to initialize runtime settings", err) + } + if app.runtimeSettings != nil { + app.register(subsystemRuntimeSettings, ownedByShutdown, app.runtimeSettings.Close) + } + // Track real-traffic outcomes per provider/model for the dashboard's // provider status; hooks must be composed before any provider is created. requestHealth := health.NewTracker() @@ -667,6 +681,7 @@ func New(ctx context.Context, cfg Config) (*App, error) { budgetResult.Service, rateLimitResult.Service, taggingResult.Service, + app.runtimeSettings, mcpResult, app.providerCredentials, app, @@ -1020,6 +1035,7 @@ func initAdmin( budgetService *budget.Service, rateLimitService *ratelimit.Service, taggingService *tagging.Service, + runtimeSettingsService *runtimesettings.Service, mcpResult *mcpgateway.Result, providerCredentialsResult *providers.CredentialsResult, runtimeRefresher admin.RuntimeRefresher, @@ -1081,6 +1097,7 @@ func initAdmin( admin.WithBudgets(budgetService), admin.WithRateLimits(rateLimitService), admin.WithTagging(taggingService), + admin.WithRuntimeSettings(runtimeSettingsService), mcpOption, providerCredentialsOption, admin.WithRuntimeRefresher(runtimeRefresher), diff --git a/internal/app/subsystems.go b/internal/app/subsystems.go index e92c545ec..b54aa33cb 100644 --- a/internal/app/subsystems.go +++ b/internal/app/subsystems.go @@ -47,6 +47,7 @@ const ( const ( subsystemLive = "live broker" subsystemStorage = "storage" + subsystemRuntimeSettings = "runtime settings" subsystemProviders = "providers" subsystemAudit = "audit" subsystemUsage = "usage" @@ -105,7 +106,10 @@ func (a *App) unwind() error { // while leaking on SIGTERM. func (a *App) shutdownOrder() []registeredSubsystem { return []registeredSubsystem{ - // Providers first: stops model refresh and provider-owned resources. + // Stop live setting reconciliation before tearing down anything it can + // reconfigure. + {name: subsystemRuntimeSettings, close: closerOf(a.runtimeSettings)}, + // Stops model refresh and provider-owned resources. {name: subsystemProviders, close: closerOf(a.providers)}, // Terminates upstream MCP sessions. {name: subsystemMCPGateway, close: closerOf(a.mcpGateway)}, diff --git a/internal/app/subsystems_test.go b/internal/app/subsystems_test.go index 7e9b91416..56ed0c262 100644 --- a/internal/app/subsystems_test.go +++ b/internal/app/subsystems_test.go @@ -8,9 +8,18 @@ import ( "testing" "github.com/enterpilot/gomodel/config" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/providers" ) +type lifecycleRuntimeSetting struct{} + +func (*lifecycleRuntimeSetting) Descriptor() ext.SettingDescriptor { + return ext.SettingDescriptor{Key: "test.runtime", Value: "fixed", Locked: true} +} + +func (*lifecycleRuntimeSetting) Apply(string) error { return nil } + // newFullyWiredApp builds an App with every optional subsystem enabled, so the // coverage tests below see the complete registry rather than the subset a // minimal config happens to initialize. @@ -36,9 +45,12 @@ func newFullyWiredApp(t *testing.T) *App { t.Fatalf("config.Load: %v", err) } + extensions := &ext.Registry{} + extensions.RegisterSetting(&lifecycleRuntimeSetting{}) application, err := New(context.Background(), Config{ - AppConfig: loaded, - Factory: providers.NewProviderFactory(), + AppConfig: loaded, + Factory: providers.NewProviderFactory(), + Extensions: extensions, }) if err != nil { t.Fatalf("New: %v", err) @@ -76,6 +88,19 @@ func TestShutdownOrderCoversEveryRegisteredSubsystem(t *testing.T) { } } +func TestShutdownStopsRuntimeSettingsBeforeProviders(t *testing.T) { + order := newFullyWiredApp(t).shutdownOrder() + runtimeSettingsIndex := slices.IndexFunc(order, func(subsystem registeredSubsystem) bool { + return subsystem.name == subsystemRuntimeSettings + }) + providersIndex := slices.IndexFunc(order, func(subsystem registeredSubsystem) bool { + return subsystem.name == subsystemProviders + }) + if runtimeSettingsIndex < 0 || providersIndex < 0 || runtimeSettingsIndex >= providersIndex { + t.Fatalf("shutdown order must stop runtime settings before providers") + } +} + // The mirror of the check above: an entry in shutdownOrder that nothing // registers is either a stale leftover or a subsystem whose owner was // mislabelled, and it silently closes nothing. diff --git a/internal/runtimesettings/service.go b/internal/runtimesettings/service.go new file mode 100644 index 000000000..82c03051c --- /dev/null +++ b/internal/runtimesettings/service.go @@ -0,0 +1,157 @@ +package runtimesettings + +import ( + "context" + "errors" + "fmt" + "log/slog" + "slices" + "strings" + "sync" + + "github.com/enterpilot/gomodel/ext" + "github.com/enterpilot/gomodel/internal/storage" + "github.com/enterpilot/gomodel/internal/storage/sqlx" + "go.mongodb.org/mongo-driver/v2/mongo" +) + +var ( + ErrNotFound = errors.New("runtime setting not found") + ErrLocked = errors.New("runtime setting is managed externally") + ErrInvalid = errors.New("invalid runtime setting value") +) + +// Service validates, persists, applies, and reconciles registered settings. +type Service struct { + mu sync.Mutex + store Store + settings map[string]ext.RuntimeSetting + order []string + rejected map[string]string + cancel context.CancelFunc + done chan struct{} +} + +// New restores registered settings and starts cross-instance reconciliation. +func New(ctx context.Context, backend storage.Storage, registered []ext.RuntimeSetting) (*Service, error) { + if len(registered) == 0 { + return nil, nil + } + store, err := storage.ResolveSQLBackend[Store](ctx, backend, + func(db sqlx.DB) (Store, error) { return NewSQLStore(ctx, db) }, + func(database *mongo.Database) (Store, error) { return NewMongoDBStore(ctx, database) }, + ) + if err != nil { + return nil, fmt.Errorf("create runtime settings store: %w", err) + } + service := &Service{ + store: store, + settings: make(map[string]ext.RuntimeSetting, len(registered)), + rejected: make(map[string]string), + } + editable := false + for _, setting := range registered { + if setting == nil { + continue + } + descriptor := setting.Descriptor() + key := strings.TrimSpace(descriptor.Key) + if key == "" { + return nil, fmt.Errorf("runtime setting has an empty key") + } + if _, exists := service.settings[key]; exists { + return nil, fmt.Errorf("runtime setting %q is registered more than once", key) + } + service.settings[key] = setting + service.order = append(service.order, key) + if descriptor.Locked { + continue + } + editable = true + if len(descriptor.Options) == 0 { + return nil, fmt.Errorf("runtime setting %q has no allowed options", key) + } + if !valueAllowed(descriptor, descriptor.Value) { + return nil, fmt.Errorf("runtime setting %q current value %q is not an allowed option", key, descriptor.Value) + } + value, found, getErr := store.Get(ctx, key) + if getErr != nil { + return nil, getErr + } + if found && value != descriptor.Value { + if !valueAllowed(descriptor, value) { + slog.Warn("ignoring invalid persisted runtime setting", "key", key, "value", value) + service.rejected[key] = value + continue + } + if applyErr := setting.Apply(value); applyErr != nil { + slog.Warn("ignoring invalid persisted runtime setting", "key", key, "value", value, "error", applyErr) + } + } + } + slices.Sort(service.order) + if editable { + service.startSync() + } + return service, nil +} + +// List returns the current setting descriptors in stable key order. +func (s *Service) List() []ext.SettingDescriptor { + if s == nil { + return nil + } + s.mu.Lock() + defer s.mu.Unlock() + result := make([]ext.SettingDescriptor, 0, len(s.order)) + for _, key := range s.order { + result = append(result, s.settings[key].Descriptor()) + } + return result +} + +// Update applies and persists one setting, rolling back if persistence fails. +func (s *Service) Update(ctx context.Context, key, value string) (ext.SettingDescriptor, error) { + if s == nil { + return ext.SettingDescriptor{}, ErrNotFound + } + s.mu.Lock() + defer s.mu.Unlock() + setting, ok := s.settings[key] + if !ok { + return ext.SettingDescriptor{}, ErrNotFound + } + previous := setting.Descriptor() + if previous.Locked { + return ext.SettingDescriptor{}, ErrLocked + } + if !valueAllowed(previous, value) { + return ext.SettingDescriptor{}, fmt.Errorf("%w: %q is not allowed for %s", ErrInvalid, value, key) + } + if err := setting.Apply(value); err != nil { + return ext.SettingDescriptor{}, fmt.Errorf("%w: %v", ErrInvalid, err) + } + if err := s.store.Set(ctx, key, setting.Descriptor().Value); err != nil { + if rollbackErr := setting.Apply(previous.Value); rollbackErr != nil { + slog.Error("failed to roll back runtime setting", "key", key, "error", rollbackErr) + } + return ext.SettingDescriptor{}, err + } + return setting.Descriptor(), nil +} + +// Close stops background reconciliation. +func (s *Service) Close() error { + if s == nil || s.cancel == nil { + return nil + } + s.cancel() + <-s.done + return nil +} + +func valueAllowed(descriptor ext.SettingDescriptor, value string) bool { + return slices.ContainsFunc(descriptor.Options, func(option ext.SettingOption) bool { + return option.Value == value + }) +} diff --git a/internal/runtimesettings/service_test.go b/internal/runtimesettings/service_test.go new file mode 100644 index 000000000..19a49e8a3 --- /dev/null +++ b/internal/runtimesettings/service_test.go @@ -0,0 +1,278 @@ +package runtimesettings + +import ( + "context" + "errors" + "fmt" + "path/filepath" + "strings" + "sync" + "testing" + + "github.com/enterpilot/gomodel/ext" + "github.com/enterpilot/gomodel/internal/storage" +) + +type testSetting struct { + mu sync.Mutex + key string + value string + locked bool + applies int + applyErr error +} + +func (s *testSetting) Descriptor() ext.SettingDescriptor { + s.mu.Lock() + defer s.mu.Unlock() + key := s.key + if key == "" { + key = "pro.compression.level" + } + return ext.SettingDescriptor{ + Key: key, + Label: "Prompt compression level", + Value: s.value, + Locked: s.locked, + Options: []ext.SettingOption{ + {Value: "none", Label: "None"}, + {Value: "medium", Label: "Medium"}, + {Value: "high", Label: "High"}, + }, + } +} + +func (s *testSetting) Apply(value string) error { + s.mu.Lock() + defer s.mu.Unlock() + if s.applyErr != nil { + return s.applyErr + } + switch value { + case "none", "medium", "high": + s.value = value + s.applies++ + return nil + default: + return fmt.Errorf("invalid level %q", value) + } +} + +func (s *testSetting) applyCount() int { + s.mu.Lock() + defer s.mu.Unlock() + return s.applies +} + +type stubStore struct { + mu sync.Mutex + values map[string]string + getErrs map[string]error + setErr error +} + +func (s *stubStore) Get(_ context.Context, key string) (string, bool, error) { + s.mu.Lock() + defer s.mu.Unlock() + if err := s.getErrs[key]; err != nil { + return "", false, err + } + value, found := s.values[key] + return value, found, nil +} + +func (s *stubStore) Set(_ context.Context, key, value string) error { + s.mu.Lock() + defer s.mu.Unlock() + if s.setErr != nil { + return s.setErr + } + if s.values == nil { + s.values = make(map[string]string) + } + s.values[key] = value + return nil +} + +func testService(setting ext.RuntimeSetting, store Store) *Service { + return &Service{ + store: store, + settings: map[string]ext.RuntimeSetting{"pro.compression.level": setting}, + order: []string{"pro.compression.level"}, + rejected: make(map[string]string), + } +} + +func newTestStorage(t *testing.T) storage.Storage { + t.Helper() + backend, err := storage.NewSQLite(storage.SQLiteConfig{Path: filepath.Join(t.TempDir(), "settings.db")}) + if err != nil { + t.Fatalf("open sqlite: %v", err) + } + t.Cleanup(func() { _ = backend.Close() }) + return backend +} + +func TestServicePersistsAndRestoresSetting(t *testing.T) { + ctx := context.Background() + backend := newTestStorage(t) + + first := &testSetting{value: "high"} + service, err := New(ctx, backend, []ext.RuntimeSetting{first}) + if err != nil { + t.Fatalf("create service: %v", err) + } + t.Cleanup(func() { _ = service.Close() }) + updated, err := service.Update(ctx, "pro.compression.level", "medium") + if err != nil || updated.Value != "medium" { + t.Fatalf("update = %+v, %v", updated, err) + } + + restarted := &testSetting{value: "high"} + reloaded, err := New(ctx, backend, []ext.RuntimeSetting{restarted}) + if err != nil { + t.Fatalf("reload service: %v", err) + } + t.Cleanup(func() { _ = reloaded.Close() }) + if got := reloaded.List()[0].Value; got != "medium" { + t.Fatalf("reloaded value = %q, want medium", got) + } +} + +func TestServiceEnvironmentLockIgnoresStoredValue(t *testing.T) { + ctx := context.Background() + backend := newTestStorage(t) + + editable := &testSetting{value: "high"} + service, err := New(ctx, backend, []ext.RuntimeSetting{editable}) + if err != nil { + t.Fatalf("create service: %v", err) + } + editableService := service + t.Cleanup(func() { _ = editableService.Close() }) + if _, err := service.Update(ctx, "pro.compression.level", "medium"); err != nil { + t.Fatalf("persist medium: %v", err) + } + + locked := &testSetting{value: "none", locked: true} + service, err = New(ctx, backend, []ext.RuntimeSetting{locked}) + if err != nil { + t.Fatalf("reload locked service: %v", err) + } + if got := service.List()[0].Value; got != "none" { + t.Fatalf("locked value = %q, want none", got) + } + if _, err := service.Update(ctx, "pro.compression.level", "high"); err != ErrLocked { + t.Fatalf("locked update error = %v, want ErrLocked", err) + } +} + +func TestServiceUpdateRollsBackWhenPersistenceFails(t *testing.T) { + persistErr := fmt.Errorf("database unavailable") + setting := &testSetting{value: "high"} + service := testService(setting, &stubStore{setErr: persistErr}) + + _, err := service.Update(context.Background(), "pro.compression.level", "medium") + if err != persistErr { + t.Fatalf("update error = %v, want %v", err, persistErr) + } + if got := setting.Descriptor().Value; got != "high" { + t.Fatalf("value after rollback = %q, want high", got) + } + if applies := setting.applyCount(); applies != 2 { + t.Fatalf("Apply calls = %d, want update and rollback", applies) + } +} + +func TestServiceSynchronizesChangedValuesAcrossInstances(t *testing.T) { + ctx := context.Background() + backend := newTestStorage(t) + + first := &testSetting{value: "high"} + second := &testSetting{value: "high"} + writer, err := New(ctx, backend, []ext.RuntimeSetting{first}) + if err != nil { + t.Fatalf("create writer service: %v", err) + } + t.Cleanup(func() { _ = writer.Close() }) + peer, err := New(ctx, backend, []ext.RuntimeSetting{second}) + if err != nil { + t.Fatalf("create peer service: %v", err) + } + t.Cleanup(func() { _ = peer.Close() }) + + if _, err := writer.Update(ctx, "pro.compression.level", "medium"); err != nil { + t.Fatalf("writer update: %v", err) + } + if err := peer.sync(ctx); err != nil { + t.Fatalf("peer sync: %v", err) + } + if got := second.Descriptor().Value; got != "medium" { + t.Fatalf("peer value = %q, want medium", got) + } + applies := second.applyCount() + if err := peer.sync(ctx); err != nil { + t.Fatalf("unchanged peer sync: %v", err) + } + if after := second.applyCount(); after != applies { + t.Fatalf("unchanged sync called Apply: before=%d after=%d", applies, after) + } +} + +func TestServiceSyncContinuesAfterSettingFailures(t *testing.T) { + getErr := errors.New("read failed") + applyErr := errors.New("apply failed") + readFailure := &testSetting{key: "a.read", value: "high"} + applyFailure := &testSetting{key: "b.apply", value: "high", applyErr: applyErr} + success := &testSetting{key: "c.success", value: "high"} + service := &Service{ + store: &stubStore{ + values: map[string]string{"b.apply": "medium", "c.success": "medium"}, + getErrs: map[string]error{"a.read": getErr}, + }, + settings: map[string]ext.RuntimeSetting{ + "a.read": readFailure, + "b.apply": applyFailure, + "c.success": success, + }, + order: []string{"a.read", "b.apply", "c.success"}, + rejected: make(map[string]string), + } + + err := service.sync(context.Background()) + if !errors.Is(err, getErr) || !errors.Is(err, applyErr) { + t.Fatalf("sync error = %v, want both read and apply errors", err) + } + if got := err.Error(); !strings.Contains(got, `"a.read"`) || !strings.Contains(got, `"b.apply"`) { + t.Fatalf("sync error = %q, want failing setting keys", got) + } + if got := success.Descriptor().Value; got != "medium" { + t.Fatalf("later setting value = %q, want medium", got) + } +} + +func TestServiceRejectsEditableSettingWithoutOptions(t *testing.T) { + backend := newTestStorage(t) + + empty := &optionlessSetting{testSetting: &testSetting{value: "high"}} + if _, err := New(context.Background(), backend, []ext.RuntimeSetting{empty}); err == nil { + t.Fatal("expected registration without options to fail") + } +} + +type optionlessSetting struct{ testSetting *testSetting } + +func (s *optionlessSetting) Descriptor() ext.SettingDescriptor { + descriptor := s.testSetting.Descriptor() + descriptor.Options = nil + return descriptor +} + +func (s *optionlessSetting) Apply(value string) error { return s.testSetting.Apply(value) } + +func TestNilServiceUpdateReturnsNotFound(t *testing.T) { + var service *Service + if _, err := service.Update(context.Background(), "missing", "high"); err != ErrNotFound { + t.Fatalf("nil service update error = %v, want ErrNotFound", err) + } +} diff --git a/internal/runtimesettings/store.go b/internal/runtimesettings/store.go new file mode 100644 index 000000000..ad10db8d5 --- /dev/null +++ b/internal/runtimesettings/store.go @@ -0,0 +1,9 @@ +package runtimesettings + +import "context" + +// Store persists deployment-wide runtime-setting values. +type Store interface { + Get(ctx context.Context, key string) (value string, found bool, err error) + Set(ctx context.Context, key, value string) error +} diff --git a/internal/runtimesettings/store_mongodb.go b/internal/runtimesettings/store_mongodb.go new file mode 100644 index 000000000..3e99bf5e7 --- /dev/null +++ b/internal/runtimesettings/store_mongodb.go @@ -0,0 +1,52 @@ +package runtimesettings + +import ( + "context" + "errors" + "fmt" + "time" + + "go.mongodb.org/mongo-driver/v2/bson" + "go.mongodb.org/mongo-driver/v2/mongo" + "go.mongodb.org/mongo-driver/v2/mongo/options" +) + +// MongoDBStore persists runtime settings in MongoDB. +type MongoDBStore struct{ settings *mongo.Collection } + +type mongoDocument struct { + Key string `bson:"_id"` + Value string `bson:"value"` + UpdatedAt int64 `bson:"updated_at"` +} + +// NewMongoDBStore uses the shared runtime_settings collection. +func NewMongoDBStore(_ context.Context, database *mongo.Database) (*MongoDBStore, error) { + if database == nil { + return nil, fmt.Errorf("database is required") + } + return &MongoDBStore{settings: database.Collection("runtime_settings")}, nil +} + +// Get returns a persisted value when present. +func (s *MongoDBStore) Get(ctx context.Context, key string) (string, bool, error) { + var doc mongoDocument + err := s.settings.FindOne(ctx, bson.D{{Key: "_id", Value: key}}).Decode(&doc) + if errors.Is(err, mongo.ErrNoDocuments) { + return "", false, nil + } + if err != nil { + return "", false, fmt.Errorf("get runtime setting %q: %w", key, err) + } + return doc.Value, true, nil +} + +// Set upserts a persisted value. +func (s *MongoDBStore) Set(ctx context.Context, key, value string) error { + doc := mongoDocument{Key: key, Value: value, UpdatedAt: time.Now().Unix()} + _, err := s.settings.ReplaceOne(ctx, bson.D{{Key: "_id", Value: key}}, doc, options.Replace().SetUpsert(true)) + if err != nil { + return fmt.Errorf("save runtime setting %q: %w", key, err) + } + return nil +} diff --git a/internal/runtimesettings/store_mongodb_test.go b/internal/runtimesettings/store_mongodb_test.go new file mode 100644 index 000000000..03c81f555 --- /dev/null +++ b/internal/runtimesettings/store_mongodb_test.go @@ -0,0 +1,33 @@ +package runtimesettings + +import ( + "context" + "testing" + + "github.com/enterpilot/gomodel/internal/storage/mongotest" + "go.mongodb.org/mongo-driver/v2/mongo" +) + +func TestMongoDBStoreRoundTrip(t *testing.T) { + if _, err := NewMongoDBStore(context.Background(), nil); err == nil { + t.Fatal("expected error for nil database") + } + + mongotest.Run(t, func(t *testing.T, database *mongo.Database) { + ctx := context.Background() + store, err := NewMongoDBStore(ctx, database) + if err != nil { + t.Fatalf("create MongoDB store: %v", err) + } + if _, found, err := store.Get(ctx, "pro.compression.level"); err != nil || found { + t.Fatalf("missing Get found=%v err=%v", found, err) + } + if err := store.Set(ctx, "pro.compression.level", "high"); err != nil { + t.Fatalf("Set: %v", err) + } + value, found, err := store.Get(ctx, "pro.compression.level") + if err != nil || !found || value != "high" { + t.Fatalf("Get value=%q found=%v err=%v", value, found, err) + } + }) +} diff --git a/internal/runtimesettings/store_sql.go b/internal/runtimesettings/store_sql.go new file mode 100644 index 000000000..7e430c249 --- /dev/null +++ b/internal/runtimesettings/store_sql.go @@ -0,0 +1,57 @@ +package runtimesettings + +import ( + "context" + "errors" + "fmt" + "time" + + "github.com/enterpilot/gomodel/internal/storage/sqlx" +) + +// SQLStore persists runtime settings in SQLite or PostgreSQL. +type SQLStore struct{ db sqlx.DB } + +const sqlSchema = ` + CREATE TABLE IF NOT EXISTS runtime_settings ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL, + updated_at ` + sqlx.TypeInt64 + ` NOT NULL + ) +` + +// NewSQLStore initializes the shared runtime-settings table. +func NewSQLStore(ctx context.Context, db sqlx.DB) (*SQLStore, error) { + if db == nil { + return nil, fmt.Errorf("database connection is required") + } + if err := db.Schema(ctx, sqlSchema); err != nil { + return nil, fmt.Errorf("create runtime settings table: %w", err) + } + return &SQLStore{db: db}, nil +} + +// Get returns a persisted value when present. +func (s *SQLStore) Get(ctx context.Context, key string) (string, bool, error) { + var value string + err := s.db.QueryRow(ctx, `SELECT value FROM runtime_settings WHERE key = ?`, key).Scan(&value) + if errors.Is(err, sqlx.ErrNoRows) { + return "", false, nil + } + if err != nil { + return "", false, fmt.Errorf("get runtime setting %q: %w", key, err) + } + return value, true, nil +} + +// Set upserts a persisted value. +func (s *SQLStore) Set(ctx context.Context, key, value string) error { + _, err := s.db.Exec(ctx, ` + INSERT INTO runtime_settings (key, value, updated_at) VALUES (?, ?, ?) + ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at + `, key, value, time.Now().Unix()) + if err != nil { + return fmt.Errorf("save runtime setting %q: %w", key, err) + } + return nil +} diff --git a/internal/runtimesettings/sync.go b/internal/runtimesettings/sync.go new file mode 100644 index 000000000..475d9f3ff --- /dev/null +++ b/internal/runtimesettings/sync.go @@ -0,0 +1,73 @@ +package runtimesettings + +import ( + "context" + "errors" + "fmt" + "log/slog" + "time" +) + +const syncInterval = 2 * time.Second + +func (s *Service) startSync() { + ctx, cancel := context.WithCancel(context.Background()) + s.cancel = cancel + s.done = make(chan struct{}) + go func() { + defer close(s.done) + ticker := time.NewTicker(syncInterval) + defer ticker.Stop() + lastError := "" + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + err := s.sync(ctx) + if err == nil { + lastError = "" + } else if !errors.Is(err, context.Canceled) && err.Error() != lastError { + lastError = err.Error() + slog.Warn("failed to synchronize runtime settings", "error", err) + } + } + } + }() +} + +// sync reconciles extension state with the shared database. It intentionally +// runs outside request handling and applies only changed values. +func (s *Service) sync(ctx context.Context) error { + s.mu.Lock() + defer s.mu.Unlock() + var errs []error + for _, key := range s.order { + setting := s.settings[key] + descriptor := setting.Descriptor() + if descriptor.Locked { + continue + } + value, found, err := s.store.Get(ctx, key) + if err != nil { + errs = append(errs, fmt.Errorf("get synchronized runtime setting %q: %w", key, err)) + continue + } + if !found || value == descriptor.Value { + delete(s.rejected, key) + continue + } + if !valueAllowed(descriptor, value) { + if s.rejected[key] != value { + slog.Warn("ignoring invalid synchronized runtime setting", "key", key, "value", value) + s.rejected[key] = value + } + continue + } + delete(s.rejected, key) + if err := setting.Apply(value); err != nil { + errs = append(errs, fmt.Errorf("apply synchronized runtime setting %q: %w", key, err)) + } + } + return errors.Join(errs...) +} diff --git a/web/dashboard/src/pages/settings/RuntimeSettings.svelte b/web/dashboard/src/pages/settings/RuntimeSettings.svelte new file mode 100644 index 000000000..ad7097107 --- /dev/null +++ b/web/dashboard/src/pages/settings/RuntimeSettings.svelte @@ -0,0 +1,154 @@ + + +{#if settings.length > 0 || error} +
            +
            +

            AI Processing

            + {#if error} + + {/if} +
            +
            + {#each settings as setting (setting.key)} +
            +
            + + {#if setting.description} +

            {setting.description}

            + {/if} + {#if setting.locked} +

            + Managed by {setting.managed_by || "environment"} +

            + {/if} +
            + +
            + {/each} +
            +
            +{/if} + + diff --git a/web/dashboard/src/pages/settings/SettingsPage.svelte b/web/dashboard/src/pages/settings/SettingsPage.svelte index 18ebee509..0a0c898f0 100644 --- a/web/dashboard/src/pages/settings/SettingsPage.svelte +++ b/web/dashboard/src/pages/settings/SettingsPage.svelte @@ -15,6 +15,7 @@ import TaggingSettings from "./TaggingSettings.svelte"; import PricingRecalculation from "./PricingRecalculation.svelte"; import RuntimeRefresh from "./RuntimeRefresh.svelte"; + import RuntimeSettings from "./RuntimeSettings.svelte"; const PAGE = "settings"; @@ -40,6 +41,7 @@ +